我想通过隐藏其SDL视频播放器窗口来修改ffplay
。相反,我想将叠加层作为逐像素位图抓取,以便在我的程序中的其他地方使用。
现在ffplay
可以简化如下:
SDL_Surface *screen
SDL_SetVideoMode()
从SDL_Overlay *bmp
创建SDL_CreateYUVOverlay()
并将其与screen
重复直到视频结束
SDL_DisplayYUVOverlay()
根据this article的提示,我已将步骤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的新手,因此除了解决方案之外,解释为什么我的方法不起作用将会有所帮助。