佳能单反SDK 步骤

 EdsInitializeSDK();

EdsGetCameraList(&eclr);//获取相机列表

EdsGetChildCount(eclr, &camCount);  //获取相机数量

edsError = EdsGetChildAtIndex(eclr, 0, &camera);   //获取相机句柄,存储在camera里

EdsSetCameraStateEventHandler(camera, kEdsStateEvent_All, handleSateEvent, NULL);    //设置处理相机“状态”事件的函数

EdsSetObjectEventHandler(camera, kEdsObjectEvent_All, handleObjectEvent, NULL);    //设置处理相机 事件的函数

 

 

EdsOpenSession(camera);   //打开相机会话

EdsGetDeviceInfo(camera, &outDeviceInfo);   //获取相机设备信息  outDeviceInfo

EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(EdsUInt32), &saveTo);   //设置相机照片存储路径

      EdsCapacity capacity = { 0x7FFFFFFF, 0x1000, 1 };
 EdsSetCapacity(camera, capacity);                //设置相机属性

EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);     //发送拍照指令

 

 

 EdsCloseSession(camera);//关闭相机会话     和Open对应

 

EdsTerminateSDK   释放SDK  一般最后做

 

EdsRetain(object);//增加现有对象的引用计数器

 

事件捕获:

kEdsStateEvent_CaptureError   

kEdsStateEvent_JobStatusChanged

 

 

 

 

 

一些常见错误:

 

 

疑难:

state event 错误: OX311不知道是啥   出现这个stat的时候,  take picture 一般是0X81   0X311是和相机失去连接了,需要重新拔插数据线?

EdsError   错误  : EDS_ERR_DEVICE_BUSY   0X81发生在  EdsSetPropertyData   估计是哪里没有释放造成的?

 

 

 

回调函数无法调用解决:   ---- 好像下面方法也无法解决  麻蛋。。

If you're using the EDSDK on Windows, you have to have a Windows message loop in your main thread, otherwise callbacks won't happen. (This is because the EDSDK uses the obsolete COM STA threading model instead of real threads.)

   while(GetMessage(&msg, NULL, NULL, NULL))
    {        
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }

bool bPhotoTaken = false;
main()
{
 // Initialize EDSDK, start session with camera, change SaveTo property
 // register ObjectEventHandler
 // send kEdsCameraCommand_TakePicture

   while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
   {
     if(bRet == -1 || bPhotoTaken)
     {
         break;
     }
     else
     {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
   }

  // Cleanup EDSDK
}








handlePropertyEvent :

0X101      kEdsPropertyEvent_PropertyChanged -     这个参数说明参数发生了改变

0X102      kEdsPropertyEvent_PropertyChanged - 这个参数说明参数发生了改变

err = EdsDownloadEvfImage(theCamera, evfImage);    这里偶尔会出现 bug : EDS_ERR_OBJECT_NOTREADY ;      如果要获取流的话  就要不断去查询才可以,查询到object准备好了 就获取里面的数据。






 

posted @ 2018-04-12 02:23  洛笔达  阅读(1716)  评论(0编辑  收藏  举报