ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

コールバック関数の登録方法

BREW インターフェース ラッパーで設定できるコールバック関数は、宣言・実装・登録を独自に行う必要があります。

以下のサンプル コードのように、内部コールバック関数を経由して、実際のコールバック関数を呼び出します。

SFBCamera クラスのコールバック関数の宣言・実装・登録

SFMTYPEDEFCLASS(Camera)
class Camera {
SFMSEALCOPY(Camera)

private:
    // ICamera インターフェースのラッパークラス
    SFBCameraSmp _camera;      

public:
    // カメラの基本的な初期化処理
    SFCError Resume(Void);              
    // コールバック関数
    static Void OnCameraSHP(VoidPtr reference, AEECameraNotify* notify); 
    // 実際のコールバック関数
    Void OnCamera(AEECameraNotify *notify);     
};

#endif

// カメラの基本的な初期化処理
SFCError Camera::Resume(Void)
{
    SFCError error(SFERR_NO_ERROR);
 
    // カメラのインスタンスを取得する
    if ((_camera = SFBCamera::NewInstance()) != null) {     
    
        // ダミーのコールバック関数を登録する
        error = _camera->RegisterNotify(OnCameraSHP, this); 
        
        if (error == SFERR_NO_ERROR) {
            // 何か処理を行う
       }
        
    // カメラのインスタンスを取得できなかった場合
    } else {
    
        error = SFERR_NO_MEMORY;   
    }
    
    if (error != SFERR_NO_ERROR) {
       // エラー処理を行う
    }
    return error;
}

// コールバック関数
Void Camera::OnCameraSHP(VoidPtr reference, AEECameraNotify* notify)
{
    // 実際のコールバック関数を呼び出す
    static_cast<CameraPtr>(reference)->OnCamera(notify); 
    return;
}

// 実際のコールバック関数
Void Camera::OnCamera(AEECameraNotify *notify)
{
    switch (notify->nStatus) {
        case CAM_STATUS_START: // カメラの起動が完了した
            // 何か処理を行う
            break;
        case CAM_STATUS_FRAME:  // 新たなフレームを取得した
            // 何か処理を行う
            break;
        case CAM_STATUS_DONE:   // 処理が完了した
            // 何か処理を行う
            break;
        case CAM_STATUS_FAIL:   // 処理が失敗した
           // 何か処理を行う
            break;
        case CAM_STATUS_ABORT:  // 処理を中止した
            // 何か処理を行う
            break;
    }
    return;
}