FFmpeg解碼流程+SDL播放流程及分屏處理
阿新 • • 發佈:2019-01-08
FFmpeg解碼視訊流程
FFmpeg解碼一個視訊流程如下圖所示:
SDL播放視訊流程
SDL2.0顯示YUV的流程圖:
對比SDL1.2的流程圖,發現變化還是很大的。幾乎所有的API都發生了變化。但是函式和變數有一定的對應關係:
SDL_SetVideoMode()————SDL_CreateWindow()
SDL_Surface————SDL_Window
SDL_CreateYUVOverlay()————SDL_CreateTexture()
SDL_Overlay————SDL_Texture
不再一一例舉。
下圖為SDL1.x顯示YUV的流程圖。
簡單解釋各個變數的作用:
SDL_Window就是使用SDL的時候彈出的那個視窗。在SDL1.x版本中,只可以建立一個一個視窗。在SDL2.0版本中,可以建立多個視窗。
SDL_Texture用於顯示YUV資料。一個SDL_Texture對應一幀YUV資料。
SDL_Renderer用於渲染SDL_Texture至SDL_Window。
SDL_Rect用於確定SDL_Texture顯示的位置。注意:一個SDL_Texture可以指定多個不同的SDL_Rect,這樣就可以在SDL_Window不同位置顯示相同的內容(使用SDL_RenderCopy()函式)。
它們的關係如下圖所示:
SDL實現分屏
下圖舉了個例子,指定了4個SDL_Rect,可以實現4分屏的顯示。
SDL_Rect用於確定SDL_Texture顯示的位置。一個SDL_Texture可以指定多個不同的SDL_Rect.
注意:分屏和自定義外掛多視窗播放是不一樣的方式。SDL_Rect sdlRect; sdlRect.x=0; sdlRect.y=0; sdlRect.w=screen_w; sdlRect.h=screen_h; SDL_Rect sdlRect2; sdlRect2.x = screen_w; //此處確定第二分屏顯示位置 sdlRect2.y = 0; sdlRect2.w = screen_w; sdlRect2.h = screen_h; // 複製渲染不同的SDLRect SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, &sdlRect); SDL_RenderCopy( sdlRenderer, sdlTexture, NULL, &sdlRect2 );