ffplay
SDL ビデオ プレーヤー ウィンドウを非表示にして変更したいと考えています。むしろ、オーバーレイをピクセル単位のビットマップとして取得して、プログラムの他の場所で使用したいと考えています。
ffplay
以下のように簡略化できます。
SDL_Surface *screen
から作成SDL_SetVideoMode()
から作成
SDL_Overlay *bmp
しSDL_CreateYUVOverlay()
て関連付けるscreen
動画が終わるまで繰り返す
ムービー フレームをデコードして bmp に入力する
を使用して画面にbmpをレンダリングします
SDL_DisplayYUVOverlay()
この記事のヒントに従って、手順 1 を次のように置き換えました。
/* Don't want video player window showing on screen
* int flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
* screen = SDL_SetVideoMode(w, h, 24, flags);
*/
Uint32 rmask, gmask, bmask, amask;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x00000000;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0x00000000;
#endif
screen = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 24, rmask, gmask, bmask, amask);
およびステップ 4 として
SDL_DisplayYUVOverlay(bmp, &rect);
SDL_SaveBMP(screen, filenameN); N++;
問題: ステップ 4 のみを変更すると、ビデオ再生ウィンドウが表示されることを除いて、ビットマップ ファイルが適切に保存されます。一方、手順 2 も変更すると、ウィンドウが正常に非表示になり、ビットマップがすべて黒く塗りつぶされます。
私は SDL を初めて使用するので、ソリューションだけでなく、私のアプローチが機能しない理由についての説明も役立ちます。