如何在osx上使用c ++更改logitech c920网络摄像头设置?

时间:2013-11-15 10:55:31

标签: c++ macos webcam osx-mavericks openframeworks

我正在尝试使用OpenFrameworks(一个c ++框架)控制网络摄像头的自动对焦/自动白平衡设置,但没有运气。

该框架提供了QTKit视频采集卡,但我无法使用这些设置。 调用时有一个videoSettings()函数我得到一个警告,提到项目必须使用10.6 sdk编译,并且在使用10.7+编译应用程序时不支持

我在osx 10.9上使用openFrameworks 0.8.0并且还没有找到一种简单的方法来下载10.6 sdk(没有直接下载(旧版本的xcode和sdk下载选项),我已经下载了Xcode 4.1但由于osx 10.9)无法安装。

我也试过设置GStreamer抓取器,但我得到链接错误:

Undefined symbols for architecture i386:
  "ofGstVideoGrabber::ofGstVideoGrabber()", referenced from:
      testApp::setup() in testApp.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

然而,我认为GStreamer框架中的dylib也可用于i386:

file /Library/Frameworks/GStreamer.framework/Headers /Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib 
/Library/Frameworks/GStreamer.framework/Headers:                                 directory
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib: Mach-O universal binary with 2 architectures
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib (for architecture x86_64):  Mach-O 64-bit dynamically linked shared library x86_64
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/libgstbase-1.0.0.dylib (for architecture i386):    Mach-O dynamically linked shared library i386

我已经尝试将框架拖到第三方框架文件夹中,并在Xcode中添加了Header Search Paths和Library Search Paths的路径,但没有任何乐趣。

我尝试过使用ofQuickTimeGrabber但遇到了解析错误:

Unknown type name 'ofQuickTimeGrabber'

尝试ofxUVC之后使用了xQTKitGrabber但又遇到了错误:

Field type 'ofxQTKitVideoGrabber' is an abstract class

理想情况下,我想控制c920网络摄像头的分辨率(16:9格式似乎有点变形/缩放)和自动对焦。 这可能与我在osx 10.9上的设置有关吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

如果您从Apple开发人员网站(https://developer.apple.com/downloads/)下载旧版本的XCode(最新版本为3或4,具体取决于您是否需要10.6或10.7 SDK),它将包含10.6和/或10.7 SDK(包内)。

您可以在不安装完整软件包的情况下提取SDK(在10.9上将不允许)。有几种方法可以做到这一点,但我发现最简单的方法是使用Pacifist http://www.charlessoft.com/

然后将这两个sdks放在/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs文件夹中的XCode 5 SDKs文件夹中,并将它们与XCode 5一起使用。

然后重新启动XCode并在构建设置中选择10.6或10.7 SDK。请记住为您的项目和openFrameworksLib项目更改SDK。

另外,为了确保正确的宽高比,请确保使用特定尺寸初始化相机(例如grabber.initGrabber(1280, 720);,如果您试图从相机获得16:9宽高比。默认情况下,您不是保证获得相机的“最佳”原始分辨率。

出于文档目的,以下是通过Logitech c920相机获得xUVC控制所需的步骤:

  1. 将xUVC和ofxYAML添加到openframeworks插件文件夹
  2. 在UVCCameraControl.h中将UVC_PROCESSING_UNIT设置为3(#define UVC_PROCESSING_UNIT_ID 0x03
  3. 在UVCCameraControl.m的setDatagetData修改wIndex以使用选择器而不是unitID(controlRequest.wValue = (selector << 8) | interfaceNum;
  4. 更新.yaml文件中的摄像头定义
  5. 罗技c920定义:

    - name: Logitech Camera
      vendorId : 0x046d
      productId: 0x82d
      interfaceNum: 0x03
      # 1280x720 (this is 1/2 res)
      width: 1280
      height: 720
    

    请注意,在这种情况下,Logitech Camera是ofQTKitVideoGrabber列出的ID 并且yaml文件顶部的cameraToUse设置为6(c920基于yaml 0的索引)。

    在osx 10.7,10.8和10.9

    上成功测试了这一点