1

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

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

4

2 回答 2

2

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

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

于 2017-08-14T01:56:02.217 回答
1

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

  • 就在您打开会话后使用该EdsSetPropertyEventHandler功能

  • 如果我记得好的话,首先停止你的 LiveView kEdsEvfOutputDeviceTFT(不是PC的参数)。

  • 在属性事件处理程序的回调中,您对事件进行了切换,当它用于属性 kEdsEvfOutputDevice 时,您将函数扔到电影模式。

回调函数将在属性发生更改时被调用,这样您就不会有任何设备忙或未准备好。但请注意,您必须将回调函数设置为静态才能正常工作。因此,您将无法调用任何其他静态函数,对于变量也是如此。

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

于 2013-05-14T14:15:55.527 回答