(57)【特許請求の範囲】
【請求項１】
階層データ構造を以て格納された入力コードを受け取るステップであって、前記入力コードは、当該入力コード中にエンコードされたデータの量に関するパラメータと、前記階層データ構造の第１層におけるユーザデータと、前記階層データ構造の第２層におけるメインデータとを含む入力コードであるステップと、
前記階層データ構造を以て格納され、かつ前記入力コード中に含まれるメインデータと一致するメインデータを含む出力コードを生成するべく、前記ユーザデータを前記階層データ構造の第３層に移動し、かつ当該移動により影響を受けるコードサイズの変化を反映するように前記パラメータを変更するように前記入力コードを変更するステップとを備えたことを特徴とするコード変換方法。
【請求項２】
請求項１記載のコード変換方法において、
前記階層データ構造はＩＳＯ１３８１８−２規格に準拠し、
前記入力コード中にエンコードされたデータの量に関するパラメータは、ビットレート値、ＶＢＶ（Video Buffering Verifier ）バッファサイズ値、ＶＢＶディレイ値のうちの１つであり、
前記メインデータは圧縮された画像データを含むことを特徴とするコード変換方法。
【請求項３】
請求項２記載のコード変換方法において、
前記階層データ構造の第１層はＧＯＰ（Group of Pictures）層であり、
前記階層データ構造の第３層はピクチャ層であることを特徴とするコード変換方法。
【請求項４】
請求項２記載のコード変換方法において、
前記階層データ構造の第１層はピクチャ層であり、
前記階層データ構造の第３層はＧＯＰ（Group of Pictures）層であることを特徴とするコード変換方法。
【請求項５】
請求項１記載のコード変換方法において、
前記入力コード中の前記ユーザデータの位置とサイズとを特定するための付加情報を生成するステップを更に備え、
前記ユーザデータの移動を前記付加情報に従って進めることを特徴とするコード変換方法。
【請求項６】
階層データ構造を以て格納された入力コード中の、当該入力コード中にエンコードされたデータの量に関するパラメータと、前記階層データ構造の第１層におけるユーザデータと、前記階層データ構造の第２層におけるメインデータとを特定するように構成されたデータ解析部と、
前記階層データ構造を以て格納され、かつ前記入力コード中に含まれるメインデータと一致するメインデータを含む出力コードを生成するべく、前記ユーザデータを前記階層データ構造の第３層に移動し、かつ当該移動により影響を受けるコードサイズの変化を反映するように前記パラメータを変更するように前記入力コードを変更する多重化部とを備えたことを特徴とするコード変換装置。
【請求項７】
請求項６記載のコード変換装置において、
前記階層データ構造はＩＳＯ１３８１８−２規格に準拠し、
前記入力コード中にエンコードされたデータの量に関するパラメータは、ビットレート値、ＶＢＶ（Video Buffering Verifier ）バッファサイズ値、ＶＢＶディレイ値のうちの１つであり、
前記メインデータは圧縮された画像データを含むことを特徴とするコード変換装置。
【請求項８】
請求項７記載のコード変換装置において、
前記階層データ構造の第１層はＧＯＰ（Group of Pictures）層であり、
前記階層データ構造の第３層はピクチャ層であることを特徴とするコード変換装置。
【請求項９】
請求項７記載のコード変換装置において、
前記階層データ構造の第１層はピクチャ層であり、
前記階層データ構造の第３層はＧＯＰ（Group of Pictures）層であることを特徴とするコード変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮符号化されたマルチメディア情報のコード変換（code translation）の方法及びその装置に関し、特にユーザデータのフォーマット変換や追加に関するものである。
【背景技術】
【０００２】
一般にＭＰＥＧ−２（Moving Picture Experts Group Phase 2）と呼ばれるマルチメディア情報の圧縮符号化技術に関する規格として、ＩＳＯ１３８１８−２が知られている。ＭＰＥＧ−２のビデオストリームは階層構造を有し、最上位から順にシーケンス層、ＧＯＰ（Group of Pictures）層、ピクチャ層、スライス層、マクロブロック層及びブロック層からなる。各層の最初にはスタートコードと呼ばれる４バイト長の特殊なパターンが挿入されている。このスタートコードは、０ｘ００、０ｘ００、０ｘ０１の３バイトで始まり、その次の１バイトで当該スタートコードに続くデータの種類を示すものである（０ｘは１６進数表記であることを表す。以下同じ）。例えば、シーケンス層、ＧＯＰ層、ピクチャ層、スライス層の各々のスタートコードの４バイト目は、それぞれ０ｘＢ３、０ｘＢ８、０ｘ００、０ｘＡＦである。
【０００３】
ＭＰＥＧ−２では、シーケンス層、ＧＯＰ層、ピクチャ層の各々においてユーザ拡張領域の設定が許容されており、ユーザデータのスタートコードが０ｘ００、０ｘ００、０ｘ０１、０ｘＢ２からなる４バイトと決められているだけで、独自のユーザ拡張に基づく任意フォーマットのユーザデータをいずれのユーザ拡張領域にも配置することができる。
【０００４】
実際に、ＤＶＤ（Digital Versatile Disk ）などのデジタル蓄積メディアや、ＤＶＢ（Digital Video Broadcasting ）などのデジタル放送では、ＭＰＥＧ−２に準拠しながら各々独自のユーザ拡張が行われている。例えばクローズドキャプションのためのユーザデータの規格は統一されておらず、ユーザデータ間のフォーマット変換を要するのが実状である。
【０００５】
なお、英語字幕情報などの文字情報をＧＯＰヘッダ中にユーザデータとして格納するためのリアルタイム符号化技術が知られている（特許文献１参照）。
【０００６】
また、ＴＳ（Transport Stream）間の変換において処理量を削減できるビットレート変換装置（トランスコーダ）も提案されている（特許文献２参照）。
【０００７】
さて、ユーザデータのフォーマットを変換するための最も簡便な方法は、一方のシステムのデコーダと他方のシステムのエンコーダとをつなぐ方法である。ただし、ユーザデータ以外のデータ、つまりメインデータについて無駄な処理がなされることになり、また画質劣化の原因ともなる。
【０００８】
そうかと言って、入力コード中のユーザデータのみのフォーマットを単純に変換して出力コードを得る場合には、当該変換によりデータ量が大幅に変化すると、レート制御に破綻を来す可能性がある。データ量の許容範囲を決定するパラメータとして、ビットレート値及びＶＢＶ（Video Buffering Verifier ）バッファサイズ値がシーケンスヘッダ中に、ＶＢＶディレイ値がピクチャヘッダ中にそれぞれ含まれており、これらのパラメータに基づくレート制御が破綻する虞れがあるのである。また、入力コードにユーザデータを追加して出力コードとする場合も同様である。
【特許文献１】特開２００１−１４５０６７号公報
【特許文献２】特開２００１−２５１６１６号公報
【発明の開示】
【０００９】
本発明の目的は、レート制御に破綻を来すことなくユーザデータのフォーマット変換や追加を実現できるコード変換方法及びその装置を提供することにある。
【００１０】
この目的を達成するため、本発明は、ある規格に準拠した入力コードを受け取り、かつ当該入力コード中のユーザ拡張領域に配置されたユーザデータのフォーマットを変換して出力コードとし、又は当該入力コードにユーザデータを追加して出力コードとするに際し、入力コード中のデータ量の許容範囲を決定するパラメータをユーザデータのフォーマット変換又は追加に対応できるように変更したうえ、変更後のパラメータに応じて出力コードを生成するように、パラメータ変更後の入力コードとユーザデータとを所定のフォーマットで多重化することとしたものである。具体的には、まず、階層データ構造を以て格納された入力コードを受け取る。入力コードは、当該入力コード中にエンコードされたデータの量に関するパラメータと、階層データ構造の第１層におけるユーザデータと、階層データ構造の第２層におけるメインデータとを含む。そして、階層データ構造を以て格納され、かつ入力コード中に含まれるメインデータと一致するメインデータを含む出力コードを生成するべく、ユーザデータを階層データ構造の第３層に移動し、かつ当該移動により影響を受けるコードサイズの変化を反映するようにパラメータを変更するように入力コードを変更する。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照しながら、コード変換に係る本発明の実施の形態を詳細に説明する。ただし、問題を単純化する。まず、入力コードはＭＰＥＧ−２のビデオストリームであり、これを所定のフォーマットの出力コードに変換するものとする。入力コードはＧＯＰ層のユーザ拡張領域（ＧＯＰユーザデータ領域）に、出力コードは個々のピクチャ層のユーザ拡張領域（ピクチャユーザデータ領域）に、それぞれ例えばクローズドキャプションのためのユーザデータが配置されるものとする。また、１ＧＯＰは最大１５フレームからなり、かつ１ＧＯＰ中にいくつかの先頭フレームに対応するユーザデータのみが入っているものとする。つまり、毎ピクチャに対応するユーザデータが入っているとは限らないものとしておく。変換前は１５フレームのうち１フレームしか４バイトのスタートコードが付かなかったが、変換後は毎フレームにユーザデータの４バイトのスタートコードが付く。したがって、スタートコードだけを考えた場合でも、１秒あたり３０フレームとして、変換により（１４／１５）×３０×４×８ｂｐｓだけビットレートが増加することになる。また、変換後のユーザデータの位置は厳密ではないものとする。例えばクローズドキャプションのためのユーザデータでは、ピクチャデータとの完全な同期は要求されない。
【００１２】
以上のようなユーザデータ位置の仮定や、必ずしも全フレームに対応するユーザデータが存在しないような状況は、クローズドキャプションなどの現在用いられているシステムでは妥当な仮定である。
【００１３】
図１は、本発明に係るコード変換装置の構成例を示している。図１のコード変換装置は、データ解析部１０１と、データバッファ１０２と、多重化部１０３とから構成されている。例えば、データ解析部１０１と多重化部１０３とはストリームコントローラ１０４と呼ばれる１個のＬＳＩを構成し、データバッファ１０２として機能するメモリが当該ＬＳＩに外付けされる。データ解析部１０１は、入力コード１２１を解析して、当該入力コード１２１中のデータ量の許容範囲を決定するパラメータ（ビットレート値、ＶＢＶバッファサイズ値、及びＶＢＶディレイ値）をユーザデータのフォーマット変換に対応できるように変更し、かつ当該入力コード１２１中のユーザデータをそれ以外のメインデータから識別するための付加情報を生成する機能を有する。データバッファ１０２は、パラメータ変更後の入力コードを付加情報とともに一時格納するためのメモリである。１２２はデータ解析部１０１からデータバッファ１０２への書き込みアドレス、１２３はデータ解析部１０１からデータバッファ１０２への書き込みデータ、１２４はデータ解析部１０１から多重化部１０３へ通知される書き込みデータサイズである。多重化部１０３は、変更後のパラメータに応じて出力コード１２７を生成するように、パラメータ変更後の入力コードとユーザデータとをデータバッファ１０２中の付加情報に従って所定のフォーマットで多重化する機能を有する。１２５は多重化部１０３からデータバッファ１０２への読み出しアドレス、１２６はデータバッファ１０２から多重化部１０３への読み出しデータである。
【００１４】
図２は入力コード１２１を、図３はデータバッファ１０２に格納される中間コードを、図４は出力コード１２７をそれぞれ表すデータフォーマット図である。
【００１５】
図２において、２０１はシーケンスヘッダ、２０２はＧＯＰヘッダ、２０３はＧＯＰユーザデータ、２０４はピクチャヘッダ、２０５はピクチャデータである。ＧＯＰユーザデータ２０３の領域は、クローズドキャプションのためのユーザデータを含んでいる。図２に示しているのは１ピクチャのみであり、実際には「ピクチャヘッダ２０４＋ピクチャデータ２０５」がピクチャ数だけ繰り返される。
【００１６】
図３に示す中間コードにおいて、３０５はシーケンスヘッダ、３０６はＧＯＰヘッダ、３０７はＧＯＰユーザデータ、３０８はピクチャヘッダ、３０９はピクチャデータであって、それぞれ図２中のシーケンスヘッダ２０１、ＧＯＰヘッダ２０２、ＧＯＰユーザデータ２０３、ピクチャヘッダ２０４、ピクチャデータ２０５に対応している。この中間コードは、ピクチャデータ３０９などのメインデータからＧＯＰユーザデータ３０７を識別するための付加情報３００を更に備えている。付加情報３００において、３０１はピクチャサイズ及びピクチャタイプを含むピクチャ情報、３０２はユーザデータ位置、３０３はユーザデータサイズ、３０４はピクチャデータ位置である。このうちピクチャ情報３０１中のピクチャサイズは当該処理単位に含まれるピクチャの全体サイズを、ピクチャタイプはＩ（Intra）ピクチャ、Ｐ（Predictive）ピクチャ、Ｂ（Bidirectionally predictive ）ピクチャというコーディングタイプの区別をそれぞれ表している。また、ＧＯＰユーザデータ３０７の先頭位置及びサイズがユーザデータ位置３０２及びユーザデータサイズ３０３によりそれぞれ示され、ピクチャデータ３０９の先頭位置がピクチャデータ位置３０４により示されている。
【００１７】
データ解析部１０１は、図３に示すような付加情報３００を持ったデータをデータバッファ１０２に格納する。データの区切りには４バイト長の特殊なパターンであるスタートコードが必ず入るので、ランダムアクセスが可能なメモリであればこのようなデータ構造は簡単に作成できる。しかも、付加情報３００を設けることで、ＧＯＰユーザデータ３０７と他のデータとを区別したデータバッファアクセスが簡単になる。また、ピクチャサイズを含んだピクチャ情報３０１があるので、図３のデータ構造の最後、つまり次の付加情報３００の開始点も簡単にアクセスできる。
【００１８】
さて、ビットレート値及びＶＢＶバッファサイズ値はデータ量の上限を、ＶＢＶディレイ値はＣＢＲ（Constant Bit Rate：一定ビットレート）の場合のデータ量の下限をそれぞれ決定するものである。ただし、ＶＢＶディレイ値が０ｘｆｆｆｆである場合にはＶＢＲ（Variable Bit Rate：可変ビットレート）とみなされ、データ量の下限に関する制約が外されることになっている。
【００１９】
そこで、シーケンスヘッダ３０５中のビットレート値及びＶＢＶバッファサイズ値、ピクチャヘッダ３０８中のＶＢＶディレイ値は、ユーザデータのフォーマット変換に対応できるように、それぞれデータ解析部１０１によって既に書き換えられている。例えば、ユーザデータのフォーマット変換によるビットレート増加予想値である（１４／１５）×３０×４×８ｂｐｓだけビットレート値を増加させ、ＶＢＶバッファサイズ値は規格で許される最大値に変更し、ＶＢＶディレイ値を０ｘｆｆｆｆとすることでＶＢＲの設定にする。ただし、もしユーザデータがフォーマット変換により少なくなるのであれば、書き換え後のビットレート値は元のビットレート値より小さくてもよい。書き換え後のＶＢＶバッファサイズ値は、予想される最大のピクチャサイズ以上であればよく、また元のＶＢＶバッファサイズ値をそのまま利用してもよい。ＶＢＲの設定を止めて、ＣＢＲのままでＶＢＶディレイ値を再計算してスタッフィングを行う方法も採用できる。また、これらのパラメータ変更を多重化部１０３で行ってもよい。
【００２０】
多重化部１０３は、図４に示すようなフォーマットを持つ出力コード１２７を生成するように、データバッファ１０２中の付加情報３００に従ってＧＯＰユーザデータ３０７とそれ以外のメインデータとを多重化する。
【００２１】
図４において、４０１はシーケンスヘッダ、４０２はＧＯＰヘッダ、４０３はピクチャヘッダ、４０４はピクチャユーザデータ、４０５はピクチャデータであって、それぞれ図３中のシーケンスヘッダ３０５、ＧＯＰヘッダ３０６、ピクチャヘッダ３０８、ＧＯＰユーザデータ３０７、ピクチャデータ３０９に対応している。図４に示しているのは１ピクチャのみであり、実際には「ピクチャヘッダ４０３＋ピクチャユーザデータ４０４＋ピクチャデータ４０５」がピクチャ数だけ繰り返される。
【００２２】
以下、図５及び図６を参照して、データ解析部１０１及び多重化部１０３の各々の詳細を説明する。
【００２３】
図５は、図１中のデータ解析部１０１の内部構成例を示している。図５のデータ解析部１０１は、第１、第２、第３及び第４入力レジスタ５０１，５０２，５０３，５０４と、スタートコード検出部５０５と、全体を制御するためのデータ解析制御部５０６と、付加情報３００の挿入のためのセレクタ５０７とで構成されている。
【００２４】
データ解析部１０１は、１バイト毎に以下のステップ１〜７を繰り返す。すなわち、ステップ１でデータが取り込まれ、既に入力された３バイトのデータと合わせてスタートコードであるかどうかがステップ２で判定される。そのとき、所定条件を満たせばステップ３の付加情報書き込み処理がなされる。この処理の後、次のピクチャに対する付加情報を書き込むための準備として、データ書き込み用のポインタを所定サイズだけ増加させておく。ステップ４では、スタートコードに基づいて各種フラグが設定される。ステップ５では、ビットレート値、ＶＢＶバッファサイズ値、ＶＢＶディレイ値がそれぞれ変更される。ステップ６では、各種カウンタを増加させる。ステップ７では多重化データがデータバッファ１０２に書き込まれる。
【００２５】
以下、個々のステップの詳細を説明する前に、データ解析制御部５０６が有する各種フラグ、カウンタを説明する。まず、ＰＩＣＳＩＺＥは処理単位であるピクチャのサイズを示すカウンタであり、レート制御や、次の付加情報位置を検出するために用いられる。ＵＳＥＲ＿ＣＯＵＮＴはユーザデータの開始位置を示すカウンタ、ＵＳＥＲＳＩＺＥはユーザデータのサイズを示すカウンタ、ＰＩＣＤＡＴＡ＿ＣＯＵＮＴはピクチャデータの開始位置を示すカウンタである。これら４つのカウンタは、図３におけるピクチャ情報３０１中のピクチャサイズ、ユーザデータ位置３０２、ユーザデータサイズ３０３、ピクチャデータ位置３０４にそれぞれ対応している。ＳＥＱＨＥＡＤ＿ＦＬＡＧ、ＧＯＰＨＥＡＤ＿ＦＬＡＧ、ＰＩＣＨＥＡＤ＿ＦＬＡＧ、ＵＳＥＲ＿ＦＬＡＧ及びＳＬＩＣＥ＿ＦＬＡＧは、それぞれシーケンスヘッダ、ＧＯＰヘッダ、ピクチャヘッダ、ユーザデータ、スライスの各々のスタートコードを検出したことを示すフラグである。ＰＩＣＴＯＰ＿ＣＯＵＮＴは、ピクチャヘッダ中のバイト数を示すカウンタであり、ＶＢＶディレイ値を変更する際に用いられる。ＢＰ及びＷＰはデータバッファ１０２のポインタであり、ＢＰは付加情報３００の書き込み位置を示す第１ポインタ、ＷＰは他のデータの書き込み位置を示す第２ポインタである。
【００２６】
〈ステップ１：入力データ取り込み〉
第４入力レジスタ５０４に第３入力レジスタ５０３の値が書き込まれる。以下順に値が書き込まれ、第１入力レジスタ５０１に入力コード１２１の１バイトデータが書き込まれる。
【００２７】
〈ステップ２：スタートコード検出〉
スタートコード検出部５０５は、第１〜第４入力レジスタ５０１〜５０４の４バイトのデータがスタートコードに一致するか、あるいは全てのバイトが０ｘ００であるかを判定する。
【００２８】
〈ステップ３：付加情報書き込み〉
ステップ３の全体は、(a) シーケンスヘッダを検出した場合、(b) ＳＥＱＨＥＡＤ＿ＦＬＡＧ＝０であり、かつＧＯＰヘッダを検出した場合、(c) ＳＥＱＨＥＡＤ＿ＦＬＡＧ＝０、ＧＯＰＨＥＡＤ＿ＦＬＡＧ＝０かつピクチャヘッダを検出した場合のうちのいずれかの場合に限って、以下のような処理を行う。
【００２９】
ステップ３における最初の動作は、付加情報３００を所定フォーマットでデータバッファ１０２に書き込む処理である。ここでは、ＰＩＣＳＩＺＥ、ＵＳＥＲ＿ＣＯＵＮＴ、ＵＳＥＲＳＩＺＥ、ＰＩＣＤＡＴＡ＿ＣＯＵＮＴの各々の値を第１ポインタＢＰで示されたアドレスに書き込んでいく。
【００３０】
次に、第１及び第２ポインタＢＰ，ＷＰの更新を行う。具体的には、第１ポインタＢＰに第２ポインタＷＰの値を代入し、第２ポインタＷＰの値を付加情報３００のサイズだけ増加させる。この動作により、第１ポインタＢＰには次のピクチャの付加情報の位置が書き込まれ、第２ポインタＷＰには付加情報の次の位置が書き込まれる。
【００３１】
最後に、各種フラグ、カウンタの初期化がなされる。具体的にはＰＩＣＳＩＺＥ、ＵＳＥＲ＿ＣＯＵＮＴ、ＵＳＥＲＳＩＺＥ、ＰＩＣＤＡＴＡ＿ＣＯＵＮＴ及びＰＩＣＴＯＰ＿ＣＯＵＮＴが全て０に初期化され、ＳＥＱＨＥＡＤ＿ＦＬＡＧ、ＧＯＰＨＥＡＤ＿ＦＬＡＧ、ＰＩＣＨＥＡＤ＿ＦＬＡＧ及びＵＳＥＲ＿ＦＬＡＧの全てが０にクリアされる。
【００３２】
〈ステップ４：フラグ更新処理〉
スタートコード検出の結果を受けて、該当するフラグをクリア、設定する。具体的には、(1) シーケンスヘッダが検出されたとき、ＳＥＱＨＥＡＤ＿ＦＬＡＧ＝１、ＧＯＰＨＥＡＤ＿ＦＬＡＧ＝０、ＰＩＣＨＥＡＤ＿ＦＬＡＧ＝０、ＵＳＥＲ＿ＦＬＡＧ＝０にする。(2) ＧＯＰヘッダが検出されたとき、ＧＯＰＨＥＡＤ＿ＦＬＡＧ＝１、ＰＩＣＨＥＡＤ＿ＦＬＡＧ＝０、ＵＳＥＲ＿ＦＬＡＧ＝０にする。(3) ピクチャヘッダが検出されたとき、ＰＩＣＨＥＡＤ＿ＦＬＡＧ＝１、ＵＳＥＲ＿ＦＬＡＧ＝０にする。(4) ユーザデータのスタートコードが検出されたとき、ＵＳＥＲ＿ＦＬＡＧにＧＯＰＨＥＡＤ＿ＦＬＡＧの内容を設定する。(5) スライスのスタートコードが検出されたとき、ＳＥＱＨＥＡＤ＿ＦＬＡＧ＝０、ＧＯＰＨＥＡＤ＿ＦＬＡＧ＝０、ＰＩＣＨＥＡＤ＿ＦＬＡＧ＝０、ＵＳＥＲ＿ＦＬＡＧ＝０、ＳＬＩＣＥ＿ＦＬＡＧ＝１にする。
【００３３】
〈ステップ５：データ書き換え処理〉
ビットレート値、ＶＢＶバッファサイズ値、ＶＢＶディレイ値を前述のように変更する。ＳＥＱＨＥＡＤ＿ＦＬＡＧ＝１のとき、ＰＩＣＳＩＺＥはシーケンスヘッダからのバイト数を示し、その値によってビットレート値、ＶＢＶバッファサイズ値に該当するかどうかが判定できる。また、ＰＩＣＴＯＰ＿ＣＯＵＮＴを利用してＶＢＶディレイ値の２バイトを決定して書き換える。
【００３４】
〈ステップ６：カウンタ増加〉
ステップ６と次のステップ７は、第１〜第４入力レジスタ５０１〜５０４の値が全て０ｘ００のときは動作しないものとする。つまり、データ書き込みのステップ７がスキップされる結果、スタッフィングされたゼロ（メインデータ中の冗長データ）が削除される。規格により、このようなパターンを削除しても悪影響が出ないようになっている。
【００３５】
第１〜第４入力レジスタ５０１〜５０４のいずれかが０ｘ００以外であれば、以下のように動作する。すなわち、ＰＩＣＳＩＺＥは、フラグに依存せずに増加する。ＵＳＥＲ＿ＣＯＵＮＴは、ＵＳＥＲ＿ＦＬＡＧ＝０かつＰＩＣＨＥＡＤ＿ＦＬＡＧ＝０のときのみ増加する。ＵＳＥＲＳＩＺＥは、ＵＳＥＲ＿ＦＬＡＧ＝１のときのみ増加する。ＰＩＣＤＡＴＡ＿ＣＯＵＮＴは、ＳＬＩＣＥ＿ＦＬＡＧ＝０のときのみ増加する。ＰＩＣＴＯＰ＿ＣＯＵＮＴは、ＰＩＣＨＥＡＤ＿ＦＬＡＧ＝１のときのみ増加する。これらにより、各種カウンタはスタートコードの発生に従って所定のサイズをカウントできる。
【００３６】
〈ステップ７：データ書き込み〉
第１〜第４入力レジスタ５０１〜５０４のいずれかが０ｘ００以外であれば、第４入力レジスタ５０４の値を第２ポインタＷＰで指定されるデータバッファ１０２のアドレス位置に書き込み、かつ第２ポインタＷＰを１だけ増加させる。
【００３７】
なお、書き込みデータサイズ１２４は、データ解析制御部１０６の第１ポインタＢＰの値がそのまま出力される。つまり、書き込みデータサイズ１２４は、付加情報３００が最後に書き込まれたアドレスを示している。
【００３８】
以上説明してきたようなフローでデータバッファ１０２にデータを書き込めば、図３に示すようなフォーマットを実現できる。ここで最も重要なポイントは、データバッファ１０２がＧＯＰユーザデータ３０７の領域と、それ以外のメインデータの領域とを区別してアクセスできるようになっている点である。このような区別ができていれば、例えばバッファを別領域にしておくなどの他の手法を用いることもできる。しかし、別バッファを持つよりも単一バッファ上に付加情報３００を付ける形でデータを識別しておく方が、バッファの利用効率は向上する。この付加情報３００に更に元のデータサイズなどの他の情報を付加して利用することもできる。
【００３９】
図６は、図１中の多重化部１０３の内部構成例を示している。図６の多重化部１０３は、付加情報を順に出力する付加情報読み出し部６０１と、付加情報を保持するためのメイン付加情報バッファ６０２と、メインデータを順に出力するメインデータ読み出し部６０３と、ユーザデータを順に出力するユーザデータ読み出し部６０４と、このユーザデータ読み出し部６０４で参照する付加情報を保持するためのユーザ付加情報バッファ６０５と、多重化制御部６０６と、メインデータ再処理部７０１とから構成されている。メイン付加情報バッファ６０２は、メインデータの多重化の際に用いられ、１ピクチャを多重化する毎に付加情報が削除されていくものである。一方、ユーザ付加情報バッファ６０５は、ユーザデータの多重化の際に用いられ、ユーザデータを多重化できたときにのみ付加情報が削除されるものである。６２１及び７０２はメインデータ、６２２及び７０３はメインデータバリッド信号、６２３はユーザデータ、６２４はユーザデータバリッド信号、６２５はフレーム番号、７０４はサイズ変更指令である。多重化制御部６０６は、メインデータ７０２、ユーザデータ６２３、スタートコードなどを適切なタイミングで出力することによって、図４に示すようなフォーマットの出力コード１２７を出力する。なお、書き込みデータサイズ１２４はデータ解析部１０１がどこまでデータを書き込んだかを示すもので、書き込まれていないデータを多重化部１０３が誤って処理してしまわない働きをしている。メインデータ再処理部７０１の機能については後述する。
【００４０】
多重化制御部６０６の大まかな動作は、メイン付加情報バッファ６０２のデータに基づいて各ピクチャ層に配置可能なユーザデータ量をまず計算し、図３中のシーケンスヘッダ３０５、ＧＯＰヘッダ３０６、ピクチャヘッダ３０８を順に出力した後、配置可能なデータ量だけＧＯＰユーザデータ３０７を多重化し、その後ピクチャデータ３０９を出力する。これにより、図４に示すようなシーケンスヘッダ４０１、ＧＯＰヘッダ４０２、ピクチャヘッダ４０３、ピクチャユーザデータ４０４、ピクチャデータ４０５が得られる。
【００４１】
ここで、ピクチャユーザデータ４０４の配置によって変換後のデータ量が増大することになるが、所要のユーザデータは複数フレーム中に必ず配置可能である。また、配置できるデータ量を予め計算しているため、この配置処理によってレート制御が破綻することはない。ビットレート値を元の値よりも増大させているので、配置不可能なデータ量が連続することはない。
【００４２】
更に詳細に説明すると、付加情報読み出し部６０１は、内部にリードポインタとピクチャサイズ用のカウンタとを持っており、書き込みアドレス１２２がリードポインタよりも大きくなり、かつメイン付加情報バッファ６０２に空きがあるときに動作を開始する。最初に、リードポインタを用いてデータバッファ１０２から付加情報３００を読み出し、メイン付加情報バッファ６０２に書き込む。次に、ピクチャ情報３０１から得たピクチャサイズの情報を使ってその次の付加情報の位置を割り出し、その位置にデータバッファ１０２のリードポインタを増加させる。メイン付加情報バッファ６０２は、複数組の付加情報を格納することができる。
【００４３】
メインデータ読み出し部６０３は、メイン付加情報バッファ６０２に格納されている付加情報をもとに、メインデータのみを順に読み出し、これをメインデータ再処理部７０１へ出力する。詳細は後述するが、メインデータ再処理部７０１は、通常は与えられたメインデータ６２１をそのまま多重化制御部６０６へメインデータ７０２として供給する。１ピクチャの読み出しが終了すれば、メイン付加情報バッファ６０２の該当付加情報を削除する。メインデータ読み出し部６０３は、有効なメインデータ６２１の準備ができるとメインデータバリッド信号６２２を１とし、準備ができていることを、メインデータ再処理部７０１を介して多重化制御部６０６へ知らせる。この際、メインデータ再処理部７０１は、与えられたメインデータバリッド信号６２２をそのまま多重化制御部６０６へメインデータバリッド信号７０３として供給する。
【００４４】
ユーザデータ読み出し部６０４は、付加情報を順にユーザ付加情報バッファ６０５に書き込み、この情報に従ってＧＯＰユーザデータ３０７の読み出しのみを順に行っていく。このとき、ユーザデータのサイズが０のものに対しては次のピクチャを探す。このユーザデータ読み出し部６０４は、有効なユーザデータ６２３の準備ができるとユーザデータバリッド信号６２４を１とし、かつそのユーザデータ６２３に対応するフレーム番号６２５を出力する。フレーム番号６２５は、このデータが含まれるピクチャが先頭から何番目かという情報と、次に読み出されるユーザデータが最初から何ワード目かという情報とを含むものであって、該当ユーザデータを何フレーム目のユーザデータとして配置すべきかという情報を示している。
【００４５】
多重化制御部６０６は、１ピクチャ毎にメインデータバリッド信号７０３が１になるのを待って以下のように動作する。最初に、現在の多重化対象ピクチャにユーザデータを配置すべきかどうかを決定する。つまり、ＶＢＶバッファが破綻を来さないようにシミュレーションを行いながら、最適なユーザデータ配置ピクチャを決定する。
【００４６】
まず、ユーザデータバリッド信号６２４が０の場合には、ユーザデータを配置しない。
【００４７】
ユーザデータバリッド信号６２４が１で、かつフレーム番号６２５が多重化対象のメインデータのピクチャ番号以下のときには、なるべく現在処理中のピクチャに配置する。したがって、ユーザデータを配置したと仮定したバッファシミュレーションを現在のピクチャに対して行い、破綻がなければ配置する。具体的には、メイン付加情報バッファ６０２から得られるピクチャ情報３０１中のピクチャサイズ及びユーザデータサイズ３０３からユーザデータ配置後のピクチャサイズを計算し、このユーザデータ配置後のピクチャサイズよりも現在のＶＢＶバッファ占有量が大きいかどうかで判断する。
【００４８】
ユーザデータバリッド信号６２４が１で、かつフレーム番号６２５が多重化対象のメインデータのピクチャ番号より大きいときには、現在のピクチャにユーザデータを配置した場合、その次のピクチャに配置した場合、というように１ピクチャずつ配置する位置を変更し、フレーム番号６２５に一致するフレームに対して配置した場合まで処理を可能な限り繰り返す。これらのシミュレーションが可能であるのは、メイン付加情報バッファ６０２に該当フレームまでの付加情報が格納されている場合である。もしもメイン付加情報バッファ６０２にフレーム番号６２５に対応するピクチャの付加情報が含まれていない場合には、ユーザデータを配置しない。
【００４９】
これら一連の処理で、ＶＢＶバッファが破綻しない位置が現在の多重化対象ピクチャのみであれば、現在のピクチャにユーザデータを配置する。
【００５０】
以上の条件判断によって、ピクチャユーザデータ４０４を配置するかしないかが決定される。ここでもし配置するという判断がなされれば、ピクチャヘッダ４０３の次に、ユーザスタートコードとともにピクチャユーザデータ４０４が配置される。
【００５１】
なお、ピクチャデータ３０９の先頭位置は付加情報３００中のピクチャデータ位置３０４で示されているため、ピクチャデータ４０５の多重化はきわめて簡単に行える。最後に、出力コード１２７の多重化データ量に基づいてＶＢＶバッファ占有量の値を計算する。この値は次のピクチャの多重化の際に利用される。
【００５２】
以上のように、図６の多重化部１０３は、可能な限り、フレーム番号６２５で示される位置にピクチャユーザデータ４０４を多重化するように動作する。つまり、出力コード１２７中のメインデータとユーザデータとの同期ずれを最小限に抑えるのである。
【００５３】
フレーム番号６２５が多重化対象のメインデータのピクチャ番号より大きい場合にバッファシミュレーションを行わず、ピクチャユーザデータ４０４を配置しないとして処理してもよい。この場合には、それ以降の処理単位であるピクチャに書き込まれることになる。この手法を用いた場合、メイン付加情報バッファ６０２が１ピクチャ分だけあればよく、処理を簡略化できる。
【００５４】
以上のとおり、本実施形態によれば、ユーザデータのみのフォーマットを変換する際に発生するデータ量の増大に対し、ビットレート値を上げるなどのようにしてデータ量の上限を上げ、またＣＢＲからＶＢＲに変更することによってデータ量の下限を下げ、かつ配置できるデータ量だけユーザデータをピクチャ層に挿入することで、コード変換が達成される。ユーザデータのみをフォーマット変換の対象としたので、ピクチャデータに関する無駄な処理が省かれる結果、コード変換が高速化され、かつ画質劣化を生じない。
【００５５】
さて、以上の動作では出力コード１２７中のメインデータとユーザデータとの同期ずれが所定量以内に収まらない場合、メインデータのデータ量を変更するようにメインデータ再処理部７０１が機能する。
【００５６】
図７は、図６中のメインデータ再処理部７０１の内部構成例を示している。図７のメインデータ再処理部７０１は、Ｉピクチャデコーダ８０１と、Ｉピクチャエンコーダ８０２と、セレクタ８０３と、サイズ制御部８０４とから構成されており、メインデータ読み出し部６０３からのメインデータ６２１がＩピクチャである場合に限り、出力コード１２７中のメインデータとユーザデータとの同期ずれが所定量を超えることをサイズ変更指令７０４が示すときに、当該メインデータ６２１をデコードし、かつ当該デコードの結果を再エンコードすることにより、メインデータ７０２のデータ量を削減するものである。ただし、サイズ変更指令７０４が与えられない場合には、メインデータ読み出し部６０３から供給されたメインデータ６２１及びメインデータバリッド信号６２２をセレクタ８０３が選択することにより、これらメインデータ６２１及びメインデータバリッド信号６２２がそのままメインデータ７０２及びメインデータバリッド信号７０３として多重化制御部６０６へ供給される。
【００５７】
ここで特に問題となるのは、１フレームのデータ量が多いためにユーザデータ挿入ができないような場合である。このようなことは、Ｐピクチャ及びＢピクチャに比べて、他のピクチャを参照しないＩピクチャで多く発生する。そこで、多重化制御部６０６は、ピクチャ情報３０１中のピクチャタイプを監視し、Ｉピクチャにおいてユーザデータ挿入によりバッファ破綻が生じることがＶＢＶバッファシミュレーションで判明した場合に限り、サイズ変更指令７０４をサイズ制御部８０４に与えることとする。
【００５８】
サイズ変更指令７０４を受け取ったサイズ制御部８０４は、Ｉピクチャエンコーダ８０２にサイズ指定８０５を与える。Ｉピクチャエンコーダ８０２は、Ｉピクチャデコーダ８０１によるデコードの結果を再エンコードすることにより、データ量が削減されたメインデータを生成するとともに、メインデータバリッド信号６２２に代わるメインデータバリッド信号を出力する。セレクタ８０３は、サイズ制御部８０４からの切換信号８０６に従って、Ｉピクチャエンコーダ８０２からのメインデータ及びメインデータバリッド信号を多重化制御部６０６へのメインデータ７０２及びメインデータバリッド信号７０３として供給する。
【００５９】
ただし、ここで問題にしている状況が頻発することはあまり考えられない。本実施形態によれば、このような特別の場合にのみメインデータ再処理部７０１で再エンコードを実行することとしているので、処理速度の劣化をあまり招くことなく、同期ずれを抑える効果がある。
【００６０】
なお、ユーザデータのフォーマット変換に限らず、ユーザデータの追加にも本発明は適用可能である。
【産業上の利用可能性】
【００６１】
以上説明してきたとおり、本発明に係るコード変換方法及びその装置によれば、レート制御に破綻を来すことなくユーザデータのフォーマット変換や追加を実現することができ、圧縮符号化されたマルチメディア情報のコード変換に有用である。
【図面の簡単な説明】
【００６２】
【図１】本発明に係るコード変換装置の構成例を示すブロック図である。
【図２】図１のコード変換装置における入力コードを表すデータフォーマット図である。
【図３】図１のコード変換装置における中間コードを表すデータフォーマット図である。
【図４】図１のコード変換装置における出力コードを表すデータフォーマット図である。
【図５】図１中のデータ解析部の内部構成例を示すブロック図である。
【図６】図１中の多重化部の内部構成例を示すブロック図である。
【図７】図６中のメインデータ再処理部の内部構成例を示すブロック図である。
【図１】
0004676331.tif 000002
【図２】
0004676331.tif 000003
【図３】
0004676331.tif 000004
【図４】
0004676331.tif 000005
【図５】
0004676331.tif 000006
【図６】
0004676331.tif 000007
【図７】
0004676331.tif 000008