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

Technical Q&A QA1109
The similarity field in ImageCodecBandCompress and Key Frames


Q:Image Compressor(imco)コンポーネントの ImageCodecBandCompress ルーチンは、いつ圧縮フレームがキーフレームになるかを決めることができますか? それともキーフレームレートは固定されているのですか?

これに関して見つかった唯一の情報は、CodecCompressParams 構造体に関する記述のくだりにあります。

A:キーフレームレートは自動的には固定されませんが、コーデックは、適切なキーフレームレートを決定することができます。しかし、コーデックの開発者が何をする必要があるかの説明はわかりにくいかもしれません。

鍵となるのは、CodecCompressParams 構造体の similarity フィールドです。これは、直近のフレームとの類似性を示すために値を挿入する必要のある OUT フィールドです。



 typedef struct {
   ImageSequence          sequenceID;
   ImageDescriptionHandle imageDescription;
   ...
   Fixed                  similarity; /* 直前のフレームとの類似性 */
   ...
} CodecCompressParams;
                     

リスト 1 CodecCompressParams



CodecCompressParams 構造体の similarity フィールドは、時間的圧縮を実施するときの直近のフレーム間の類似性を示します。Image Compressor コンポーネントは、このフィールドに固定小数点値を返さなければなりません。この値は圧縮直後のフレームと直前に圧縮されたフレームの相対的な類似性を示します。有効な値は、キーフレームであることを示す 0 から、全く同じフレームであることを示す 255 までの範囲です。

このフィールドを使うのは、 ImageCodecBandCompress 関数だけです。

具体的には、次の値を使用するべきです。

0x00000000 ― キーフレームを表します。

0x00010000 ― これら値は、直前のフレームとまったく同じではないフレームを表します。

...

0x00nn0000

...

0x00FE0000

0x00FF0000 ― フレームは、品質上の損失なく破棄できることを示します。

Image Compressor は、圧縮フレームを品質上の損失なく破棄できる場合にだけ、類似性の値を 0x00FF0000 に設定できます。フレームを破棄すると映像の質が悪くなる場合は、Image Compressor は類似性の値を 0x00FE0000 に設定にしなくてはなりません。

類似性の値を 0x00010000 などの非常に低い値に設定するような場合(キーフレームでない場合に指定可能な最低の値)、次のフレームの temporalQuality は、キーフレームが必要なことを示す 0 に設定されるかもしれません。 また、コーデックの開発者は Image Compression Manager が状況によっては、Image compressor から返される類似性の値を見て、その値が非常に低くければフレームをキーフレームとして再圧縮するよう指示することを知っておく必要があります。Image Compression Manager は、codecFlagLiveGrab フラグが設定されている場合、または非同期の完了プロシージャが提供されている場合はこれを行いません。

IM QuickTime コンポーネント:The Compression Parameters Structure


[2002 年 1 月 16 日]