高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1282
Using a QuickTime time base callback to detect when a movie has stopped


Q: callBackAtExtremestriggerAtStop による NewCallBack を使って、ムービーがいつ再生を停止したかを検出しようとしていますが、QuickTime のドキュメントには、これらのフラグを具体的にどこで設定したらよいかについて記述されていません。使用するフラグによっては、NewCallBackNULL を返すことがあります。callBackAtExtremestriggerAtStop を使ったコールバック関数をセットアップするにはどうしたらよいのでしょうか。

A: triggerAtStop は、callBackAtExtremesNewCallBack への cbType フラグとして使われたときに param1 パラメータとして CallMeWhen API に渡されるフラグです。リスト 1 に、これを設定する方法を示します。

リスト 1.

// CallMeWhen によってインストールされる汎用コールバック関数
// pascal void MyQTCallBackProc(QTCallBack cb, long refCon);

pascal void MyDoSomethingCallBack(QTCallBack cb, long refCon)
{
    MyAppDataPtr myStuff;

    if (NULL == refCon) return;
    myStuff = (MyAppDataPtr)refCon;
    myStuff->didSomething = true;

    return;
}

// callBackAtExtremes フラグと triggerAtStop フラグで起動する
// コールバックのセットアップ
// MyDoSomethingCallBack 関数は、基準時間軸が停止すると
// 呼び出される

OSErr SetUpTriggerAtStopCallBack(MyAppDataPtr inAppData)
{
    QTCallBack    theQTCallBack;
    QTCallBackUPP theCallBackUPP;

    OSErr err = paramErr;

    theQTCallBack = NewCallBack(GetMovieTimeBase(inAppData->myMovie),
                                callBackAtExtremes);
    if (theQTCallBack) {
        theCallBackUPP = NewQTCallBackUPP(MyDoSomethingCallBack);
        err = CallMeWhen(theQTCallBack, theCallBackUPP,
                         inAppData, triggerAtStop, 0, 0);
    }

// あとで渡せるようにこれらを保存
    inAppData->myQTCallBack = theQTCallBack;
    inAppData->myCallBackUPP = theCallBackUPP;

return err;
}

QTCallBackQTCallBackUPP の処理が終わったら、DisposeCallBackDisposeQTCallBackUPP の呼び出しを忘れずに行ってください。

参考資料:


[2003 年 8 月 12 日]