如何在mac os x中获得支持的视频捕获设备(相机)像素格式

时间:2012-12-19 10:18:16

标签: objective-c macos osx-lion avfoundation objective-c++

刚才我开始了一项与视频捕捉有关的小作品我想要使用avfoundation的视频捕捉设备支持所有支持的像素格式。我正在使用CMFormatDescriptionGetMediaSubtype函数来获取mac中的像素格式(CMPixelFormatType)。但我总是得到一个与任何可用像素格式都不匹配的值(预定义像素类似:kCMPixelFormat_422YpCbCr8_yuvs)。是否有任何其他功能为此目的..我搜索,但直到现在没有找到。返回值始终为1684890161作为像素格式类型。

我想问的实际问题是:

如何通过Mac中的视频捕获设备获得所有支持的像素格式。请记住,我不是要求编解码器类型。我需要它的像素格式。请尽可能帮助..

提前致谢..

1 个答案:

答案 0 :(得分:1)

要获得所有支持的像素格式,您需要使用第二个参数CMIOObjectGetPropertyData调用CMIOObjectPropertyAddress,如下所示:

CMIOObjectPropertyAddress theAddress;
theAddress.mSelector = kCMIOStreamPropertyFormatDescriptions;
theAddress.mScope    = kCMIOObjectPropertyScopeGlobal;
theAddress.mElement  = 0;

这将为您提供CFArray CMFormatDescriptionRef。 然后迭代这个数组并调用:

CMFormatDescriptionGetMediaSubType(yourCMFormatDescriptionRef);

您的CMFormatDescriptionGetMediaSubType转换为'dmb1'的FourCharacterCode(OSType),它似乎是Matrox特定的硬件压缩类型。

原因是,您在CMPixelFormatType枚举中找不到您的格式是因为那里只有最常见的格式,而您的格式不是。 Mac上最常见的是kCMPixelFormat_422YpCbCr8kCMPixelFormat_422YpCbCr10,它们都是原始的8位和10位YUV视频。