我正在使用DirectShow开发可视化C ++视频捕获应用程序。当我检查捕获过滤器输出引脚的AM_MEDIA_TYPE结构的媒体子类型时,我可以看到不同的网络摄像头捕获不同格式的数据,如MEDIASUBTYPE_RGB24,MEDIASUBTYPE_MJPG等。
有什么方法可以告诉输出引脚以MEDIASUBTYPE_RGB24这样的通用格式输出数据?我不想包括所有可能的子类型的解密。
请求您告诉我是否有任何方法可以将所有网络摄像头捕获的数据传递到通用类型,然后再将其传递给编码器。
答案 0 :(得分:0)
您将引脚连接到引脚,该引脚固定为您要接收的格式,然后DirectShow插入过滤器以将输入类型转换为您想要的类型。
请参阅此example。
答案 1 :(得分:0)
通常,每个摄像机都以自己独特的格式生成数据,但不保证它可以在捕获驱动程序中转码为RGB24或任何其他格式。在所有格式中,YUV的变体是最常见的,因为这些格式既可以直接在屏幕上显示,也可以输入下游压缩过滤器。
@Christopher指出的例子并没有真正解决如何控制捕获格式的问题。视频捕获过滤器使用一组独特的接口来控制无数的输出格式。
使用 IAMStreamConfig.SetFormat()从捕获设备中选择输出流(捕获和预览)的帧速率,尺寸,颜色空间和压缩。
使用 IAMStreamConfig.GetStreamCaps()确定可用的帧速率,尺寸,颜色空间和压缩格式。大多数相机提供多种不同的格式。