【问题标题】:How to get supported pixel format of video capture device (camera) in mac os x如何在 mac os x 中获取视频捕获设备(相机)支持的像素格式
【发布时间】:2012-12-06 16:03:15
【问题描述】:

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

其实我想问的是:

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

提前谢谢..

【问题讨论】:

  • 当您将1684890161 转换为OSType 时,您将得到四个字符代码'dmb1',这似乎是Matrox 特定的硬件压缩类型,例如motion jpeg。
  • 感谢您的回答.. 它的工作将其作为答案发布,并提供更多解释,以便对其他人也有帮助。 :) 还有一件事是为什么它没有在预定义的格式列表中给出..

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


【解决方案1】:

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

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

这将为您提供 CFArrayCMFormatDescriptionRef。 然后你遍历这个数组并调用:

CMFormatDescriptionGetMediaSubType(yourCMFormatDescriptionRef);

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

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

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多