所以SDL的學習就先在這裡跳過,直接說明主要修改了哪些部份。一樣地,直接拿原始檔案來編譯,會有很多的錯誤及警告,有些問題在 FFmpeg tutorial practice - tutorial01 已經出現過,就做相同的處理即可。而有關SDL方面的問題,就要先去SDL網站下載編譯,然後連結我們的 Toturial02。以下是我的 Makefile
WORKING_PATH = /usr/local/ INCLUDES = -I$(WORKING_PATH)/ffmpeg/include LDFLAGS = -L$(WORKING_PATH)/ffmpeg/lib # SDL SDL_CONFIG = $(WORKING_PATH)/SDL/release/bin/sdl-config LIBS = -lavdevice -lavfilter -lavformat -lavcodec -lz -lpthread LIBS += -ldl -lrt -lswresample -lswscale -lavutil -lm CFLAGS = -g EXE01 = tutorial02 CC = gcc all: $(EXE01) $(EXE01): tutorial02.c $(CC) -o $@ tutorial02.c $(LIBS) $(CFLAGS) $(INCLUDES) $(LDFLAGS) `$(SDL_CONFIG) --cflags --libs` clean: rm -f $(EXE01) *.o
這裡要注意的是使用SDL函式庫時是使用 `sdl-config --cflags --libs`,使用這個內建的工具,就能正確地找到 header file 和 libraries,很方便。
要能順利地在螢幕上顯示,這裡還有一個主要的關鍵,就是如何把 Frame 轉換成可以在螢幕上顯示的格式。我用的是底下的方式:
pSWSContext = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, 640, 480, PIX_FMT_YUV420P, SWS_BICUBIC, 0, 0, 0); sws_scale(pSWSContext, (const uint8_t * const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pict.data, pict.linesize);這裡只是重點提示,要記得配合原始程式碼來修改。
沒有留言:
張貼留言