更改属性时,佳能EDSDK设备忙

时间:2013-04-19 09:21:55

标签: edsdk

我对EDSDK有点问题。 我尝试制作一个可以从 liveview 切换到电影记录的功能。

现场视图一切都很好,我可以拍照。 但是当我想要开始电影记录时,我每次想要更改属性时都会ERR_DEVICE_BUSY(保存到相机而不是PC)。我尝试一切,做一个循环,没有。这是我收到此错误的唯一地方。

这是我的代码:

    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();

如果你有解决方案,我会接受,谢谢。

2 个答案:

答案 0 :(得分:1)

你可以尝试这个我不知道你是否已经但它应该对我到目前为止对我所有的财产变化都有效。

  • 在您打开会话后,请使用EdsSetPropertyEventHandler功能

  • 如果我记得好的话,首先将kEdsEvfOutputDevice放在TFT来停止LiveView。 (不是PC的参数)。

  • 在属性事件处理程序的回调中,您可以对事件进行切换,当它用于属性kEdsEvfOutputDevice时,则抛出函数以进入电影模式。

当更改属性时将调用回调函数,这样您就不会有任何设备忙或未准备好。但是,你必须将你的回调函数设置为静态,以便它可以工作。因此,您无法调用静态的任何其他函数,对于变量也是如此。

如果你不明白,我可以用法语向你解释,对我来说更容易^^

答案 1 :(得分:0)

无论文档说什么,当实际错误是错误的输入参数时,EDSDK有时会为EdsSetPropertyData()返回EDS_ERR_DEVICE_BUSY。例如,尝试使用值十进制50(0x32)设置kEdsPropID_Av,该值不在文档中给出的表中。在我的EOS 5D上,无论尝试多少次重试,都会返回EDS_ERR_DEVICE_BUSY。传递合法价值,例如0x33(对于f / 6.3)第一次成功。这里的错误是100%可重现的。

因此,如果在设置属性时出现“设备忙”错误,请使用细齿梳检查传递的输入值。