1

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

我想问的实际问题是:

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

提前致谢..

4

1 回答 1

2

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

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

这会给你一个CFArrayCMFormatDescriptionRef然后你遍历这个数组并调用:

CMFormatDescriptionGetMediaSubType(yourCMFormatDescriptionRef);

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

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

于 2012-12-19T11:16:09.830 回答