刚才我开始了一项与视频捕捉有关的小作品我想要使用avfoundation的视频捕捉设备支持所有支持的像素格式。我正在使用CMFormatDescriptionGetMediaSubtype函数来获取mac中的像素格式(CMPixelFormatType)。但我总是得到一个与任何可用像素格式都不匹配的值(预定义像素类似:kCMPixelFormat_422YpCbCr8_yuvs)。是否有任何其他功能为此目的..我搜索,但直到现在没有找到。返回值始终为1684890161作为像素格式类型。
我想问的实际问题是:
如何通过Mac中的视频捕获设备获得所有支持的像素格式。请记住,我不是要求编解码器类型。我需要它的像素格式。请尽可能帮助..
提前致谢..
答案 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_422YpCbCr8
和kCMPixelFormat_422YpCbCr10
,它们都是原始的8位和10位YUV视频。