我正在使用LibVLC,并且希望在内存中渲染视频像素,这样我就可以拍摄帧的快照,而无需在窗口中绘制视频(默认情况下)。
如果我理解正确,可以通过调用libvlc_video_set_callbacks和libvlc_video_set_format_callbacks来实现。在第一个函数中,我必须指定类型为libvlc_video_lock_cb的回调,其中我将初始化三个平面中的一个,我理解的是将绘制像素的缓冲区。
我的问题是每个像素使用的字节数以及必须初始化的平面数取决于视频色度。虽然我知道如何获得这个色度的四个字母的标识符,但我不知道如何获得它的这些特殊属性;如果没有这些信息,我不知道我需要分配的缓冲区大小,以及有多少平面。
有谁知道怎么做?或者我是否理解错误的东西?
答案 0 :(得分:6)
如您所述,每个像素的字节数和平面数取决于编解码器。因此,一种选择是在代码中硬编码当前选项(GRAY,I240,RV16,RV15,RV24,RV32,YUY2,YUYV,UYVY,I41N,I422,I420,I411,I410,MJPG)的值。
转到http://www.fourcc.org/了解详细的代码/格式信息。
您还可以查看VLC项目中的vlc_fourcc.h和fourcc.c。具体请参见函数vlc_fourcc_GetChromaDescription
。
答案 1 :(得分:0)
setup
回调(libvlc_video_set_format_callbacks()
的第二个参数,libvlc_video_format_cb
类型)允许您阅读并选择更改视频格式。
如果此回调获得的格式无法理解,则可以将其更改为它所知道的格式。