Q:マルチパスエンコーディングを実行するときに、圧縮パスモードフラグは |
| パス | パスモードフラグ |
|---|---|
| 1 | kICMCompressionPassMode_WriteToMultiPassStorage | kICMCompressionPassMode_NotReadyToOutputEncodedFrames |
| 2 | kICMCompressionPassMode_ReadFromMultiPassStorage | kICMCompressionPassMode_WriteToMultiPassStorage I kICMCompressionPassMode_NotReadyToOutputEncodedFrames |
| 3 | kICMCompressionPassMode_ReadFromMultiPassStorage I kICMCompressionPassMode_WriteToMultiPassStorage |
| 4 | kICMCompressionPassMode_NoSourceFrames I kICMCompressionPassMode_ReadFromMultiPassStorage I kICMCompressionPassMode_OutputEncodedFrames |
警告:パスモードフラグが表1に示した通りに正確に設定されると想定しないでください。結果は異なる場合があります。たとえば、どのパスもkICMCompressionPassMode_NoSourceFramesパスになることが考えられ、kICMCompressionPassMode_NotReadyToOutputEncodedFramesフラグがクリアされる前にもっと多くのパスがあることも考えられます。
パスモードフラグは次の3つのAPIで使用されます。
Boolean ICMCompressionSessionSupportsMultiPassEncoding(ICMCompressionSessionRef session,
UInt32 multiPassStyleFlags,
ICMCompressionPassModeFlags *firstPassModeFlagsOut)
説明:
クライアントはマルチパス圧縮操作の開始前にこれを呼び出して、圧縮セッションがマルチパスエンコーディングをサポートして
いるかどうか問い合わせる必要があります。サポートしていれば、この呼び出しはfirstPassModeFlagsOutパラメータに
パスモードフラグの初期状態を返します。
パラメータ:
multiPassStyleFlags - 予約されており、0に設定されます
firstPassModeFlagsOut (読み取り) - そのセッションの最初のパスに対して推奨されるモードフラグを受け取る変数のポインタ。
クライアントはこれらのフラグを変更できますが、kICMCompressionPassMode_NoSourceFramesは設定できません。この情報が
不要な場合はNULLを渡します。
OSStatus ICMCompressionSessionBeginPass(ICMCompressionSessionRef session,
ICMCompressionPassModeFlags passModeFlags,
UInt32 flags)
説明:
クライアントはこれを呼び出して、特定の圧縮パスを開始することを知らせます。クライアントは、
コンプレッサがこのパスでどのように動作するべきかを、パラメータpassModeFlagsにパスモードフラグ
を渡すことで示します。
パラメータ:
passModeFlags (書き込み可能) - コンプレッサがこのパスでどのように動作するべきかを示すフラグ。
flags - 予約されています。0に設定されています。
OSStatus ICMCompressionSessionProcessBetweenPasses(ICMCompressionSessionRef session,
UInt32 flags,
Boolean *interpassProcessingDoneOut,
ICMCompressionPassModeFlags *requestedNextPassModeFlagsOut)
説明:
クライアントはICMCompressionSessionEndPassの呼出し後にこれを呼び出して、パスとパスの間にコンプレッサに処理を実行
させることができます。ただし、kICMCompressionPassMode_OutputEncodedFramesが設定されていない場合に限られます。
パラメータ:
session - 圧縮セッションの参照。この参照は、ICMCompressionSessionCreateによって返されます。
flags - 予約されています。0に設定されています。
interpassProcessingDoneOut - Booleanへのポインタ。この関数を再度呼び出す必要がある場合はFALSEに設定され、
再度呼び出す必要がない場合はTRUEに設定されます。
requestedNextPassModeFlagsOut (読み取り) - 変数のポインタであり、次のパスに対してコンプレッサが
推奨するモードフラグに設定されます。kICMCompressionPassMode_OutputEncodedFramesは、次のパスを最終パスにすることを
コンプレッサが推奨している場合に限り、設定されます。
コンプレッサは、これらのフラグを通じてパスの回数を制御し、状態をやり取りするため、クライアントはフラグを変更する必要がありません。たとえば、コンプレッサはクライアントからのピクセルバッファを必要としない場合はkICMCompressionPassMode_NoSourceFramesを設定します。または次のパスでエンコードされたフレームを出力する場合は、kICMCompressionPassMode_OutputEncodedFramesを設定します。
リスト1: 擬似コード - 使用中のパスモードフラグ
ICMCompressionPassModeFlags passModeFlags = 0;
Boolean multipassYES = false;
Boolean done = false;
...
// passModeFlagsはそのセッションの最初のパスに対して要求されたモードフラグを受け取ります
multipassYES = ICMCompressionSessionSupportsMultiPassEncoding(session,
0,
&passModeFlags);
while(!done) {
if (multipassYES) {
// passModeFlagsはコンプレッサがこのパスでどのように動作すべきかを示します。クライアントは
// コーデックがkICMCompressionPassMode_NotReadyToOutputEncodedFramesフラグを
// クリアした後、このパスで必要であれば、パスモードフラグを変更して、
// kICMCompressionPassMode_OutputEncodedFramesに早期に強制的にフレームを
// 出力させることができます
ICMCompressionSessionBeginPass(session, passModeFlags, 0);
}
// すべてのフレームを圧縮セッションに送ります
// ディスプレイタイムスタンプごとのソースフレームとフレームオプションは
// すべてのパスに渡り同じでなければなりません
for (frameNumber = 1; frameNumber <= kFrameCount; frameNumber++) {
if (0 == (passModeFlags & kICMCompressionPassMode_NoSourceFrames)) {
// ソースフレームをここで提供します - kICMCompressionPassMode_NoSourceFramesは
// 設定されていません -- 設定されていた場合、
// ICMCompressionSessionEncodeFrameにソースフレームは提供せず
// pixelBufferパラメータにNULLを渡します。それ以外の情報はすべて、
// パス間で一貫して指定されるようにします
...
}
ICMCompressionSessionEncodeFrame(...)
}
ICMCompressionSessionCompleteFrames(...)
if (multipassYES) {
ICMCompressionSessionEndPass(session);
if (passModeFlags & kICMCompressionPassMode_OutputEncodedFrames) {
// コンプレッサがこのパスでエンコードしたフレームを出力したので、ここで終了します
// 注記:QA1457で説明しているように、早期プレビューを提供するコードをクライアントで追加し、続行することもできます。
done = true;
} else {
Boolean interpassDone = false;
while(!interpassDone) {
// passModeFlagsは、次のパスに対してセッションが推奨するモードフラグに
// 設定されます。kICMCompressionPassMode_OutputEncodedFramesは、
// コーデックが次のパスを最後にするように推奨している場合に限り設定します
ICMCompressionSessionProcessBetweenPasses(session,
0,
&interpassDone,
&passModeFlags);
}
}
} else {
done = true;
}
}
QuickTime 7 Update Guide - Video Enhancements
| 日付 | メモ |
|---|---|
| 2006-01-18 | 初版 |
掲載日: 2006-01-18
|