2013-04-19 3 views
1

У меня небольшая проблема с EDSDK. Я попытался сделать функцию, которая может переключаться с liveview на запись в кино.Canon EDSDK Устройство Занято при изменении свойства

Все в порядке с liveview, я могу сфотографироваться. Но когда я хочу начать запись фильма, у меня есть ERR_DEVICE_BUSY каждый раз, когда я хочу изменить свойство (сохранить на камеру вместо ПК). Я пробую все, сделаю петлю, ничего. И это единственное место, где я получаю эту ошибку.

Вот мой код:

EdsDataType dataType; 


    EdsUInt32 dataSize; 
    EdsUInt32 enregistrement; 
    err = EdsGetPropertySize(camera, kEdsPropID_SaveTo, 0, &dataType, &dataSize); 

    err = EdsGetPropertyData(camera, kEdsPropID_SaveTo, 0, dataSize, &enregistrement); 
    EdsUInt32 saveTo = kEdsSaveTo_Camera; 
    if(enregistrement != kEdsSaveTo_Camera){ 
     err = EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(saveTo), &saveTo); 
     if(err != EDS_ERR_OK){ 
      printf("Erreur de changement d'emplacement de sauvegarde, arret de l'enregistrement\n"); 
      printf("err : 0x%X\n", err); 
      return err; 
     } 
    } 

    //Changement du mode de prise de vu 
    EdsUInt32 mode = 20; //Le monde 20 correspont à l'enregistrement vidéo 
    EdsSetPropertyData(camera, kEdsPropID_AEMode, 0, sizeof(mode), &mode); 

    //Variable pour la mise en route et l'arrêt de l'enregistrement 
    EdsUInt32 debutEnregistrement = 4; 
    EdsUInt32 finEnregistrement = 0; 


    err = EdsSetPropertyData(camera, kEdsPropID_Record, 0, sizeof(debutEnregistrement), &debutEnregistrement); 
    if(err != EDS_ERR_OK){ 
     printf("Erreur lors du lancement de l'enregistrement"); 
     return err; 
    } 
     //Wait for stop record 
err = EdsSetPropertyData(camera, kEdsPropID_Record, 0, sizeof(finEnregistrement), &finEnregistrement); 
    if(err != EDS_ERR_OK) 
     printf("Erreur lors de l'arret de l'enregistrement"); 

    //L'enregistrement est fini, vérification des evenement 
    EdsGetEvent(); 

Если у вас есть решение, я беру, спасибо.

ответ

1

Вы можете попробовать это Я не знаю, если вы уже, но он должен работать, он имеет для меня до сих пор все изменения моего имущества.

  • Только после того, как вы открыли сессию использовать функцию EdsSetPropertyEventHandler

  • Begin, остановив вас LiveView, поставив kEdsEvfOutputDevice в TFT, если я помню хорошо. (параметр, который не является ПК).

  • В обратном вызове обработчика событий свойства вы делаете переключатель в событии, и когда он предназначен для свойства kEdsEvfOutputDevice, вы бросаете свою функцию в режим видео.

будет вызываться функция обратного вызова, когда будет изменено свойство, чтобы у вас не было занятого устройства или нет. Но если вам нужно настроить функцию обратного вызова на статическую, чтобы она работала. Таким образом, вы не сможете вызвать любые другие функции, которые являются статическими, одинаковыми для переменных.

Если вы не поняли, я могу объяснить это вам на французском, гораздо более легким для меня ^^

0

Независимо от того, что говорят документы, то EDSDK иногда возвращает EDS_ERR_DEVICE_BUSY для EdsSetPropertyData(), когда фактическая ошибка является плохим входным параметром. Например, попробуйте установить kEdsPropID_Av со значением десятичного значения 50 (0x32), которое не указано в таблице, приведенной в документации. На моих EOS 5D это возвращает EDS_ERR_DEVICE_BUSY независимо от того, сколько попыток предпринято. Передача юридического значения, например. 0x33 (для f/6.3) выполняется в первый раз. Здесь ошибка на 100% воспроизводима.

Итак, если вы задали эту ошибку «устройство занято» при настройке свойств, проверьте входные значения, которые вы передаете, с помощью тонкой зубчатой ​​гребенки.

Смежные вопросы