0

ffplaySDL ビデオ プレーヤー ウィンドウを非表示にして変更したいと考えています。むしろ、オーバーレイをピクセル単位のビットマップとして取得して、プログラムの他の場所で使用したいと考えています。

ffplay以下のように簡略化できます。

  1. SDL_Surface *screenから作成SDL_SetVideoMode()

  2. から作成SDL_Overlay *bmpSDL_CreateYUVOverlay()て関連付けるscreen

    動画が終わるまで繰り返す

  3. ムービー フレームをデコードして bmp に入力する

  4. を使用して画面に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 を初めて使用するので、ソリューションだけでなく、私のアプローチが機能しない理由についての説明も役立ちます。

4

1 に答える 1

0

出力を生成しないダミービデオ ドライバを使用SDL_putenv("SDL_VIDEODRIVER=dummy");するために使用します。

于 2012-07-22T09:11:06.527 に答える