(57)【特許請求の範囲】
【請求項１】
プログレションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容される符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各部分符号をアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号の部分符号の配列中でのプログレッションオーダの変更の有無を判定する第１の判定手段、
前記符号の、ユーザにより指定された部分符号が、先頭の部分符号から連続的に配列されているか否かの判定を行う第２の判定手段を有し、
前記第１の判定手段によりプログレッションオーダの変更が無いと判定され、かつ、前記第２の判定手段により前記指定された部分符号が前記符号の先頭の部分符号から連続的に配列されていると判定された場合に、前記処理手段において前記符号の前記指定された部分符号のみを対象にして前記処理を行うことを特徴とする符号処理装置。
【請求項２】
プログレションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容される符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各部分符号をアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号中のプログレッションオーダの変更の有無を判定する第１の判定手段、
前記符号の、ユーザにより指定された部分符号が、先頭の部分符号から連続的に配列されているか否かの判定を行う第２の判定手段、
前記指定された部分符号の配列中でのプログレッションオーダの変更の有無を判定する第３の判定手段を有し、
前記第１の判定手段により前記符号中のプログレッションオーダの変更が有ると判定された場合において、前記第２の判定手段により前記指定された部分符号が前記符号の先頭の部分符号から連続的に配列されていると判定され、かつ、前記第２の判定手段により前記指定された部分符号の配列中でのプログレッションオーダの変更が無いと判定されときに、前記処理手段は前記指定された部分符号のみを対象にして前記処理を行うことを特徴とする符号処理装置。
【請求項３】
ＪＰＥＧ２０００の符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号のタイル毎に、プログレションオーダチェンジ指定の有無を判定する第１の判定手段、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定手段を有し、
前記第１の判定手段によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定手段により前記指定されたパケットが先頭パケットから連続的に配列されていると判定された場合に、前記処理手段において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理装置。
【請求項４】
前記第１の判定手段によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定手段はデフォルトのプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする請求項３記載の符号処理装置。
【請求項５】
ＪＰＥＧ２０００の符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号のタイル毎に、プログレッションオーダチェンジ指定の有無を判定する第１の判定手段、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定手段、
前記符号のタイル毎に、前記指定されたパケットの配列中でのプログレッションオーダの変更の有無を判定する第３の判定手段を有し、
前記第１の判定手段によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定手段により前記指定されたパケットが先頭パケットから連続的に配列されていると判定され、かつ、前記第３の判定手段により前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定された場合に、前記処理手段において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理装置。
【請求項６】
前記第１の判定手段によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定手段は、最初のプログレッションオーダチェンジ指定に対応したプログレッションオーダの最外殻の属性が、前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする請求項５記載の符号処理装置。
【請求項７】
前記第２の判定手段により前記指定されたパケットが先頭タイルから連続的に配列されていると判定されたタイルについて、前記第３の判定手段は、最初のプログレッションオーダチェンジ指定に対応したｆｏｒループのループ変数の範囲内に、前記指定されたパケットに対応したｆｏｒループのループ変数の範囲が完全に包含されているときに、前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定することを特徴とする請求項５記載の符号処理装置。
【請求項８】
前記符号のタイルに対する前記指定されたパケットのみを対象とした前記処理手段による前記処理において、該タイルのパケットの前記第１の記憶手段への読み込みを該処理の進捗に合わせ分割して行うことを特徴する請求項３又は５記載の符号処理装置。
【請求項９】
ＪＰＥＧ２０００の符号を扱う符号処理方法であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理工程、
前記符号のタイル毎に、プログレションオーダチェンジ指定の有無を判定する第１の判定工程、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定工程を有し、
前記第１の判定工程によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定された場合に、前記処理工程において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理方法。
【請求項１０】
前記第１の判定工程によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定工程は、デフォルトのプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする請求項９記載の符号処理方法。
【請求項１１】
ＪＰＥＧ２０００の符号を扱う符号処理方法であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理工程、
前記符号のタイル毎に、プログレッションオーダチェンジ指定の有無を判定する第１の判定工程、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定工程、
前記符号のタイル毎に、前記指定されたパケットの配列中でのプログレッションオーダの変更の有無を判定する第３の判定工程を有し、
前記第１の判定工程によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定され、かつ、前記第３の判定工程により前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定された場合に、前記処理工程において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理方法。
【請求項１２】
前記第１の判定工程によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定工程は、最初のプログレッションオーダチェンジ指定に対応したプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする請求項１１記載の符号処理方法。
【請求項１３】
前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定されたタイルについて、前記第３の判定工程は、最初のプログレッションオーダチェンジ指定に対応したｆｏｒループのループ変数の範囲内に、前記指定されたパケットに対応したｆｏｒループのループ変数の範囲が完全に包含されているときに、前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定することを特徴とする請求項１１記載の符号処理方法。
【請求項１４】
前記符号のタイルに対する前記指定されたパケットのみを対象とした前記処理工程による前記処理において、該タイルのパケットの前記第１の記憶手段への読み込みを該処理の進捗に合わせ分割して行うことを特徴する請求項９又は１１記載の符号処理方法。
【請求項１５】
請求項９乃至１４のいずれか１項記載の符号処理方法における各工程をコンピュータに実行させるプログラムであって、該符号処理方法における第１の記憶手段及び第２の記憶手段として該コンピュータのメインメモリを利用するプログラム。
【請求項１６】
請求項１５記載のプログラムが記録された、コンピュータが読み取り可能な情報記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の圧縮符号の処理に係り、特に、プログレッションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容される符号、具体的には例えばＪＰＥＧ２０００の符号の処理に関する。本発明はＪＰＩＰサーバ等に好適に応用できるものである。
【背景技術】
【０００２】
プログレッションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容された符号として、例えばＪＰＥＧ２０００の符号がある。ＪＰＥＧ２０００の符号では、部分符号であるパケットを選択的にアクセスしてデコードしたり送信したりする処理が可能である。本発明は、このような符号の処理の目的に好適なものである。
【０００３】
ここで、ＪＰＥＧ２０００の符号化処理と符号構造について、本発明の理解に必要な限度で説明する。
【０００４】
ＪＰＥＧ２０００の符号化処理は概ね図１のブロック図に示す流れで行われる。画像は矩形のタイルに分割される(分割数≧１)。各タイルは、輝度・色差等のコンポ−ネントへ色変換される（ブロック１）。ＲＢＧデータのような正数で表されるデータの場合、ダイナミックレンジの半分を減じるＤＣレベルシフトも施される。変換後のコンポ−ネント（タイルコンポ−ネントと呼ばれる）はウェーブレット変換を適用されてサブバンドに分割される（ブロック２）。１回のウェーブレット変換（デコンポジション）によってLL，HL，LH，HHと略称される４つのサブバンドに分割される。そして、LLサブバンドに対して再帰的にウェーブレット変換を繰返すと、最終的に１つのLLサブバンドと複数のHL，LH，HHサブバンドが生成される。
【０００５】
３回のウェーブレット変換（デコンポジション）を行った場合のサブバンドを図３に示す。図３中の各サブバンド名の接頭の数字（例えば”３ＬＬ”の”３”）は、デコンポジションレベル（施されたウェーブレット変換の回数）を示す。また、後の説明のため、デコンポジションレベルと解像度レベルの関係を図３に示した。
【０００６】
９×７変換と呼ばれる非可逆ウェーブレット変換が用いられる場合には、ウェーブレット係数は、サブバンド毎に線形量子化（正規化を含む）を施され（ブロック３）、次にエントロピー符号化される（ブロッ４）。このエントロピー符号化では、各サブバンドはプリシンクトとよばれる矩形に分割される。プリシンクトとは、サブバンドを矩形に分割したもので、ＨＬ，ＬＨ，ＨＨの３つのサブバンドの対応したプリシンクトは３つで１まとまりとして扱われる。ただし、ＬＬサブバンドを分割したプリシンクトは１つで１まとまりとして扱われる。プリシンクトは、大まかには画像中の場所（Position）を表すものである。プリシンクトはサブバンドと同じサイズにできる。プリシンクトをさらに矩形に分割したものがコードブロックである。
【０００７】
図２にタイル、サブバンド、プリシンクト、コードブロックの関係を示す。よって、物理的な大きさの序列は、画像≧タイル＞サブバンド≧プリシンクト≧コードブロックとなる。
【０００８】
以上の分割の後、係数のエントロピー符号化（ビットプレーン符号化）が、コードブロック毎かつビットプレーン順に行われる。
【０００９】
次に必要なエントロピー符号をまとめてパケットを生成する（ブロック５）。パケットとは、プリシンクトに含まれる全てのコードブロックから、ビットプレーンの符号の一部（例えば全てのコードブロックのＭＳＢから３枚目までのビットプレーンの符号）を集めたものにヘッダ（パケットヘッダ）をつけたものである。上記”一部”は”空”（から）でもよいので、パケットの中身が符号的には”空)”ということもある。パケットヘッダには、当該パケットに含まれる符号に関する情報が含まれる。各パケットは独立に扱うことができる。いわばパケットは符号の単位である。
【００１０】
そして、全てのプリシンクト（＝全てのコードブロック＝全てのサブバンド）のパケットを集めると、画像全域の符号の一部（例えば、画像全域のウェーブレット係数の、ＭＳＢから３枚目までのビットプレーンの符号）ができるが、これをレイヤと呼ぶ。レイヤは、大まかには画像全体のビットプレーンの符号の一部であるから、デコードされるレイヤ数が増えれば画質は上がることになる。すなわち、レイヤは画質の単位である。すべてのレイヤを集めると、画像全域の全てのビットプレーンの符号になる。
【００１１】
デコンポジションレベル数＝２、プリシンクトサイズ＝サブバンドサイズ、としたときのレイヤの例を図４の上段に示す。いくつかのレイヤに含まれるパケットを図４の下段に太枠で囲んで示す。
【００１２】
以上のようにして生成されたパケットやレイヤの区切りに従って、パケットを配列するとともに必要なタグやタグ情報を付加することにより、最終的なＪＰＥＧ２０００の符号（コードストリーム）が形成される（ブロック６）。
【００１３】
以上の説明から理解されるように、パケットは
・どのコンポ−ネント（記号Ｃ）に属するか、
・どの解像度レベル（記号Ｒ）に属するか、
・どのプリシンクト（“場所”，記号Ｐ）に属するか、
・どのレイヤ（記号Ｌ）に属するか、
という４つの属性（本願では、これら属性を”プログレッション属性”と呼ぶ）を有する。パケットの先頭にはパケットヘッダがあり、その後にＭＱ符号（パケットデータ）が続いているが、パケットヘッダには上記属性そのものは記述されていない。
【００１４】
パケットの配列とは、パケット（パケットヘッダとパケットデータ）を、どの属性の順に階層的に並べるかを意味する。この配列順をプログレッションオーダと呼び、図５に示す５通りが規定されている。
【００１５】
ここで、エンコーダがプログレッションオーダに従ってパケットを並べる様子と、デコーダがプログレッションオーダに従ってパケットの属性を解釈する様子を以下に示す。
【００１６】
例えば、ＬＲＣＰプログレッションオーダの場合、次のようなｆｏｒループ
for(レイヤ)｛
for(解像度)｛
for(コンポ−ネント)｛
for(プリシンクト)｛
エンコード時：パケットを配置
デコード時：パケットの属性を解釈
｝
｝
｝
｝
により、パケットの配列（エンコード時）又は解釈（デコード時）がなされる。
【００１７】
各パケットのパケットヘッダには、
・そのパケットが空かどうか、
・そのパケットにどのコードブロックが含まれるか、
・そのパケットに含まれる各コードブロックのゼロビットプレーン数、
・そのパケットに含まれる各コードブロック符号のコーディングパス数（ビットプレーン数）、
・そのパケットに含まれる各コードブロックの符号長、
が記載されている。しかし、レイヤ番号や解像度レベル等はパケットヘッダには一切記載されていない。デコード時に、そのパケットがどのレイヤのどの解像度レベルのものかを判別するには、メインヘッダ中のＣＯＤマーカセグメント（図１３参照）等に記載されたプログレッションオーダから上記のようなｆｏｒループを構成し、そのパケットに含まれる各コードブロックの符号長の和からパケット長を求めることによってパケットの切れ目を判別し、各パケットがｆｏｒループ内のどの位置でハンドリングされたかを見ればよい。これは、パケットヘッダ中の符号長さえ読み出せば、パケットデータ（エントロピー符号）をデコードしなくとも、次のパケットを検出できること、すなわち任意のパケットにアクセス可能であることを意味する。
【００１８】
なお、本願においては、上記のようなｆｏｒループの一番外側（最外殻）を”プログレッションオーダの最外殻”と呼ぶ。
【００１９】
図６は、ＬＲＣＰプログレッションオーダの符号の様な、プログレッションオーダの最外殻に位置する属性がレイヤ（Ｌ）であるレイヤプログレッシブ符号の概念図である。ただし、タイルパート（後述）の数は１としている。
【００２０】
図７に、画像サイズ＝１００×１００画素、タイル分割無し（１タイル）、２レイヤ（０，１）、解像度レベル数＝３（０〜２）、３コンポ−ネント（０〜２）、プリシンクトサイズ＝３２×３２、ＬＲＣＰプログレッションオーダの場合における３６個のパケットの配列例を示す。ただし、タイルパート（後述）の数は１としている。
【００２１】
図８は、ＲＬＣＰプログレッションオーダの符号の様な、解像度レベル（Ｒ）がプログレッションオーダの最外殻に位置する、解像度プログレッシブ符号の概念図である。ただし、タイルパート数は１としている。
【００２２】
図９に、画像サイズ＝１００×１００画素、タイル分割無し（１タイル）、２レイヤ（０，１）、解像度レベル数＝３（０〜２）、３コンポ−ネント（０〜２）、プリシンクトサイズ＝３２×３２、ＲＬＣＰプログレッションオーダの場合における３６個のパケットの配列例を示す。ただし、タイルパート（後述）の数は１としている。
【００２３】
さて、各タイルを構成する符号を、パケットの切れ目で複数の部分に分割することができ、分割した部分をタイルパートと呼ぶ。なお、先に言及したように、図７と図９はタイルパート数＝１の場合である。
【００２４】
各タイルパートは、パケットのほかに、ＳＯＴ（start  of  tile-part）マーカセグメントで始まりＳＯＤ（start  of  data）マーカで終わるヘッダを有し、このヘッダをタイルパートヘッダと呼ぶ（図６，図８，図１６参照）。
【００２５】
図１１にＳＯＴマーカセグメントの構成を示す。なお、マーカ（この例ではＳＯＴマーカ）とそれに関連したパラメータから構成されるものをマーカセグメントと呼ぶ。ＳＯＴマーカセグメントのパラメータの内容を図１２に示す。図１２から理解されるように、ＳＯＴマーカセグメント中のパラメータＰｓｏｔの内容を読めば当該タイルパートの長さを知ることができる。したがって、ＳＯＴマーカセグメントを読み込めば、パケットヘッダをデコードすることなく、タイルパートの長さを知ることができる。
【００２６】
さて、以上に説明したように、ＪＰＥＧ２０００では任意の部分符号にアクセスできるため、サーバに保存されているＪＰＥＧ２０００符号から、クライアント側で必要とする部分符号だけを送受信するためのプロトコルが現在標準化の途上にあり、このプロトコルをＪＰＩＰ（JPEG2000  Interactive  Protocol）と呼ぶ。
【００２７】
このような階層的な符号を部分的にアクセスするためのプロトコルは、古くは、画像の多重解像度表現であるＦｌａｓｈＰｉｘと、それにアクセスするためのプロトコルであるＩＩＰ（Internet  Imaging  Protocol）に見ることができる（例えば特許文献１参照）。ｗｅｂサイトhttp://www.i3a.org/i_iip.htmlでＩＩＰの標準書を提供している。また、ＪＰＩＰに関連した先行技術文献としては、例えばＪＰＩＰのキャッシュモデル等に関する特許文献２がある。
【００２８】
【特許文献１】特開平１１−２０５７８６号公報
【特許文献２】特開２００３−２３６３０号公報
【発明の開示】
【発明が解決しようとする課題】
【００２９】
以上のように、ＪＰＥＧ２０００には５つのプログレッションオーダが存在するが、エンコード時には、１つの符号中で、これらのうちの複数のプログレッションオーダを混在させることができる。例えば、画像サイズ＝１００×１００画素、２レイヤ、解像度レベル数＝３（０〜２）、３コンポ−ネント（０〜２）、プリシンクトサイズ＝３２×３２（図７相当）の３６個のパケットに関し、
for(レイヤ=0)｛
for(解像度レベル=0,1,2)｛
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
パケットを配置
｝
｝
｝
｝
のように、ｆｏｒループを回す回数を制限して、前半の１８個のパケットをＬＲＣＰ順に配列し、後半の１８個のパケットに関しては
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
for(解像度レベル=0,1,2)｛
for(レイヤ=0,1)｛
未だ配置されていないパケットのみを配置
｝
｝
｝
｝
のｆｏｒループによりＣＰＲＬ順に配置することができる。この例の場合のパケット配列を図１０に示す。
【００３０】
このように、メインヘッダ中で規定されたデフォルトのプログレッションオーダに対して、プログレッションオーダを変更もしくは再規定することをプログレッションオーダチェンジ（ＰＯＣ）と呼び、この変更を明示するためにはメインヘッダまたは最初のタイルパートのタイルパートヘッダ中にＰＯＣマーカセグメントが挿入される。
【００３１】
図１４にＰＯＣマーカセグメントの構造を示す。図１５にＰＯＣマーカセグメントのパラメータの内容を示す。ｉ回目のプログレッションオーダチェンジ指定による変更後のプログレッションオーダがＰｐｏｃ（ｉ）に記載され、パラメータＲＳｐｏｃ（ｉ）、ＣＳｐｏｃ（ｉ）、ＲＥｐｏｃ（ｉ）、ＣＥｐｏｃ（ｉ）、ＬＹｐｏｃ（ｉ）により、その時のｆｏｒループを回す回数がループ変数の”最初”および”最後”で指定される。すなわち、解像度レベルであれば、”最初”以上”最後”未満の解像度レベルについて、Ｐｐｏｃで指定されたプログレッションオーダのｆｏｒループが回されることになる。ただし、レイヤについては、常に”最初”のレイヤ番号＝０である。
【００３２】
また、プログレッションオーダチェンジ指定は２回以上の任意回数行うことができる。図１０の例で言えば、デフォルトのプログレッションオーダに対して、先頭のパケットから適用される１回目のプログレッションオーダチェンジ(再規定)が行われ、ＬＲＣＰのｆｏｒループの”最初”および”最後”が指定される。次に途中のパケットから適用される２回目のプログレッションオーダチェンジ(再規定)で、ＣＰＲＬのｆｏｒループの”最初”および”最後”が指定される。また、図１４に見られるように、１つのＰＯＣマーカセグメント中で複数回のプログレッションオーダチェンジを指定できる。
【００３３】
さて、プログレッションオーダチェンジ（ＰＯＣ）指定のある符号のパケット配列は複雑なものとなるため、そのままのパケット配列では符号中の所望のパケットを選択することが難しい。例えば、図１０のパケット列から解像度レベル１までの全てのパケット（太線枠で囲んだパケット）だけをデコードしたい場合に、それら所望のパケットが符号中のどの位置に出現するかの決定が煩雑になる。
【００３４】
そこで、プログレッションオーダチェンジ指定のある符号の一部のパケットを選択してデコードするような場合に通常採られる手法は、まず、メモリに格納された符号中の各パケットをアクセスするためのポインタ情報（例えばパケットの先頭位置と長さ）を求め、これを特定のプログレッションオーダ（例えばデフォルトのプログレッションオーダ）の順にソートした形で配列に記録しておき、次に、特定のプログレッションオーダのｆｏｒループを回して所望のパケットの先頭位置と長さを上記配列より取得し、これに基づいて符号中の所望のパケットにアクセスする手法であろう。
【００３５】
一例として、図１０に示したパケット配列の符号中の解像度レベル１までの全てのパケット（図１０中の太線枠で囲んだパケット）だけを選択してデコードする場合を考えると、通常、各タイルに関し次のような手順がとられるであろう。なお、処理はタイル毎に行われる。
【００３６】
［ステップ１］該タイルに関する全てのパケットをメモリＡに読み込む。
【００３７】
［ステップ２］パケットの先頭位置とパケット長を要素に持つ構造体Ｐ
struct  P｛
パケットの先頭位置；
パケット長；
｝
を定義し、該タイルのパケットの総数を計算し、該総数分の構造体Ｐの配列Ｂを用意する。そして、デフォルトのプログレッションオーダに対応したｆｏｒループを構成し、このｆｏｒループを全て回して配列Ｂの全ての要素（構造体Ｐ）を初期化する。
【００３８】
［ステップ３］最初のプログレッションオーダチェンジ指定に対応したｆｏｒープを構成し、このｆｏｒループを回してメモリＡ中のパケットついてのポインタ情報を求めて配列Ｂに格納する処理を行う。すなわち、
for(レイヤ=0)｛
for(解像度レベル=0,1,2)｛
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
パケットの属性を解釈し、メモリＡ上の該パケットの先頭位置と長さを求
め（パケット長は、パケットヘッダをデコードし、あるいはＰＬＴマーカ
セグメントを解釈して求めることができる）、これをデフォルトのプログレ
ッションオーダに従ってソートした形で配列Ｂに格納する
｝
｝
｝
｝
なお、パケットの先頭位置とパケット長をデフォルトのプログレッションオーダに従ってソートした形で配列Ｂに格納するとは、配列Ｂの各要素がデフォルトのプログレッションオーダに従った属性を持つものとして、上記ｆｏｒループで解釈されたパケットの属性に対応した（同じ属性を持つ）配列Ｂの要素に、そのパケットの先頭位置とパケット長を格納する、という意味である。
【００３９】
［ステップ４］２回目のプログレッションオーダチェンジで規定されたｆｏｒループを構成し、このｆｏｒループを回して、前記ステップ３で最後に処理されたメモリＡ中のパケットの次のパケットから処理する、すなわち、
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
for(解像度レベル=0,1,2)｛
for(レイヤ=0,1）｛
パケットの属性を解釈
その属性のパケットの先頭位置がすでに配列Ｂに保存されていなければ
（条件Ａ）、メモリＡ上の当該パケットの先頭位置とパケット長をデフォルトの
プログレッションオーダに従って配列Ｂに保存する
｝
｝
｝
｝
かくして、配列Ｂ上に、プログレッションオーダチェンジの影響を排除した形で、すなわち、デフォルトのプログレッションオーダの順にソートされた形で、１つのタイルに関する全てのパケットのポインタ情報（先頭位置と長さ）が記録された。
【００４０】
［ステップ５］したがって、デフォルトのプログレッションオーダのｆｏｒループを構成し、所望のパケットを選択的にデコードすることができる。すなわち、
for(全てのレイヤ)｛
for(解像度レベル＝0,1)｛
for(全てのコンポ−ネント)｛
for(プリシンクト)｛
当該パケット属性に対応した配列Ｂの要素から読み出した当該パケットの先頭
位置と長さに基づき、メモリＡ中の当該パケットを読み出してエントロピー復
号する
｝
｝
｝
}
の処理により各タイルについて解像度レベル１までのパケットのみ選択しデコードすることができる。
【００４１】
なお、上記ステップ４において、「その属性のパケットの先頭位置がすでに配列Ｂ中に保存されていなければ」という条件Ａを置くのは、ｆｏｒループのループ変数の”最初”と”最後”の指定だけでは、ステップ３とステップ４のｆｏｒループが必ずしも排他的とはならず重複範囲をもってしまうことがあるからである（ただし、この重複はパケットが重複して配置されることを意味しない）。
【００４２】
上に述べた手法は汎用的ではある。しかし、常にこの手法を適用することは、選択しない多くのパケット（図１０の例では太線で囲まれたパケット以外のパケット）についてまでも、パケット長を知るためにパケットヘッダをデコードするか、あるいは最初のタイルパートヘッダに挿入されたＰＬＴマーカセグメント（図１７−１，図１７−２参照）を解釈しなければならず、処理に無駄が多く高速化に不向きであるという問題がある。符号の一部の部分符号のみのデコード等を行うのは、もともの処理の高速化を意図するものであるから、無駄な処理は極力排除すべきである。
【００４３】
また、高速化を実現するためには、無駄なパケットヘッダのデコードを減らすほかに、ＪＰＥＧ２０００の符号自体のメモリへの読み込みもできるだけ少なくするべきである。すなわち、上記手法のステップ１では「該タイルに関する全てのパケットをメモリＡに読み込む」であったが、これが常に必要であるとは限らないので、処理の進捗に応じて必要な分のパケットだけをメモリＡに読み込む、ということも可能なのである。
【００４４】
本発明は、以上の諸点に鑑み、ＪＰＥＧ２０００の符号や、その他のプログレッションオーダの途中変更が許容された部分符号の集合からなる符号から、必要な部分符号をアクセスするためポインタ情報を取得する処理を効率化、高速化することにある。
【課題を解決するための手段】
【００４５】
請求項１記載の発明は、
プログレションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容される符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各部分符号をアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号の部分符号の配列中でのプログレッションオーダの変更の有無を判定する第１の判定手段、
前記符号の、ユーザにより指定された部分符号が、先頭の部分符号から連続的に配列されているか否かの判定を行う第２の判定手段を有し、
前記第１の判定手段によりプログレッションオーダの変更が無いと判定され、かつ、前記第２の判定手段により前記指定された部分符号が前記符号の先頭の部分符号から連続的に配列されていると判定された場合に、前記処理手段において前記符号の前記指定された部分符号のみを対象にして前記処理を行うことを特徴とする符号処理装置である。
【００４６】
請求項２記載の発明は、
プログレションオーダに従って配列された部分符号から構成されていて部分符号の配列中でのプログレッションオーダの変更が許容される符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各部分符号をアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号中のプログレッションオーダの変更の有無を判定する第１の判定手段、
前記符号の、ユーザにより指定された部分符号が、先頭の部分符号から連続的に配列されているか否かの判定を行う第２の判定手段、
前記指定された部分符号の配列中でのプログレッションオーダの変更の有無を判定する第３の判定手段を有し、
前記第１の判定手段により前記符号中のプログレッションオーダの変更が有ると判定された場合において、前記第２の判定手段により前記指定された部分符号が前記符号の先頭の部分符号から連続的に配列されていると判定され、かつ、前記第２の判定手段により前記指定された部分符号の配列中でのプログレッションオーダの変更が無いと判定されときに、前記処理手段は前記指定された部分符号のみを対象にして前記処理を行うことを特徴とする符号処理装置である。
【００４７】
請求項３記載の発明は、
ＪＰＥＧ２０００の符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号のタイル毎に、プログレションオーダチェンジ指定の有無を判定する第１の判定手段、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定手段を有し、
前記第１の判定手段によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定手段により前記指定されたパケットが先頭パケットから連続的に配列されていると判定された場合に、前記処理手段において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理装置である。
【００４８】
請求項４記載の発明は、
請求項３記載の発明に係る符号処理装置であって、
前記第１の判定手段によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定手段はデフォルトのプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする符号処理装置である。
【００４９】
なお、上記の属性の「一致」には「実質的な一致」も含まれる。例えば、タイルのデフォルトのプログレッションオーダがＬＲＣＰで、レイヤ数が１であると、実質的なプログレッションオーダはＲＣＰであっても、その実質的な最外殻の属性はＲとみることができる。そして、例えば所望のパケットとして、ある解像度レベル以下の全てのパケットが指定されたとすると、所望のパケットに対応したｆｏｒループの最外殻の属性はＲであり、これはプログレッションオーダの実質的な最外殻の属性Ｒと一致する。このようなケースが「実質的な一致」の典型例である。請求項６，１０，１２記載の発明における属性の「一致」には同様な「実質的な一致」も含まれる。
【００５０】
請求項５記載の発明は、
ＪＰＥＧ２０００の符号を扱う符号処理装置であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理手段、
前記符号のタイル毎に、プログレッションオーダチェンジ指定の有無を判定する第１の判定手段、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定手段、
前記符号のタイル毎に、前記指定されたパケットの配列中でのプログレッションオーダの変更の有無を判定する第３の判定手段を有し、
前記第１の判定手段によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定手段により前記指定されたパケットが先頭パケットから連続的に配列されていると判定され、かつ、前記第３の判定手段により前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定された場合に、前記処理手段において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理装置である。
【００５１】
請求項６記載の発明は、
請求項５記載の発明に係る符号処理装置であって、
前記第１の判定手段によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定手段は、最初のプログレッションオーダチェンジ指定に対応したプログレッションオーダの最外殻の属性が、前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする符号処理装置である。
【００５２】
請求項７記載の発明は、
請求項５記載の発明に係る符号処理装置であって、
前記第２の判定手段により前記指定されたパケットが先頭タイルから連続的に配列されていると判定されたタイルについて、前記第３の判定手段は、最初のプログレッションオーダチェンジ指定に対応したｆｏｒループのループ変数の範囲内に、前記指定されたパケットに対応したｆｏｒループのループ変数の範囲が完全に包含されているときに、前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定することを特徴とする符号処理装置である。
【００５３】
請求項８記載の発明は、
請求項３又は５記載の発明に係る符号処理装置であって、
前記符号のタイルに対する前記指定されたパケットのみを対象とした前記処理手段による前記処理において、該タイルのパケットの前記第１の記憶手段への読み込みを該処理の進捗に合わせ分割して行うことを特徴する符号処理装置である。
【００５４】
請求項９記載の発明は、
ＪＰＥＧ２０００の符号を扱う符号処理方法であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理工程、
前記符号のタイル毎に、プログレションオーダチェンジ指定の有無を判定する第１の判定工程、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定工程を有し、
前記第１の判定工程によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定された場合に、前記処理工程において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理方法である。
【００５５】
請求項１０記載の発明は、
請求項９記載の発明に係る符号処理方法であって、
前記第１の判定工程によりプログレッションオーダチェンジ指定が無いと判定された前記符号のタイルについて、前記第２の判定工程は、デフォルトのプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする符号処理方法である。
【００５６】
請求項１１記載の発明は、
ＪＰＥＧ２０００の符号を扱う符号処理方法であって、
第１の記憶手段に格納されている、前記符号の各パケットをアクセスするためのポインタ情報を求め、該ポインタ情報を１のプログレッションオーダに従ってソートした形で第２の記憶手段に格納する処理を行う処理工程、
前記符号のタイル毎に、プログレッションオーダチェンジ指定の有無を判定する第１の判定工程、
前記符号のタイル毎に、ユーザにより指定されたパケットが、先頭パケットから連続的に配列されているか否かの判定を行う第２の判定工程、
前記符号のタイル毎に、前記指定されたパケットの配列中でのプログレッションオーダの変更の有無を判定する第３の判定工程を有し、
前記第１の判定工程によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定され、かつ、前記第３の判定工程により前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定された場合に、前記処理工程において前記指定されたパケットのみを対象にして前記処理を行うことを特徴とする符号処理方法である。
【００５７】
請求項１２記載の発明は、
請求項１１記載の発明に係る符号処理方法であって、
前記第１の判定工程によりプログレッションオーダチェンジ指定が有ると判定されたタイルについて、前記第２の判定工程は、最初のプログレッションオーダチェンジ指定に対応したプログレッションオーダの最外殻の属性が前記指定されたパケットに対応したｆｏｒループの最外殻の属性と一致するときに、前記指定されたパケットが先頭パケットから連続的に配列されていると判定することを特徴とする符号処理方法である。
【００５８】
請求項１３記載の発明は、
請求項１１記載の発明に係る符号処理方法であって、
前記第２の判定工程により前記指定されたパケットが先頭パケットから連続的に配列されていると判定されたタイルについて、前記第３の判定工程は、最初のプログレッションオーダチェンジ指定に対応したｆｏｒループのループ変数の範囲内に、前記指定されたパケットに対応したｆｏｒループのループ変数の範囲が完全に包含されているときに、前記指定されたパケットの配列中でのプログレッションオーダの変更が無いと判定することを特徴とする符号処理方法である。
【００５９】
請求項１４記載の発明は、
請求項９又は１１記載の発明に係る符号処理方法であって、
前記符号のタイルに対する前記指定されたパケットのみを対象とした前記処理工程による前記処理において、該タイルのパケットの前記第１の記憶手段への読み込みを該処理の進捗に合わせ分割して行うことを特徴する符号処理方法である。
【００６０】
請求項１５記載の発明は、請求項９乃至１４のいずれか１項記載の発明に係る符号処理方法における各工程をコンピュータに実行させるプログラムであって、該符号処理方法における第１の記憶手段及び第２の記憶手段として該コンピュータのメインメモリを利用するプログラムである。
【００６１】
請求項１６記載の発明は、請求項１５記載の発明に係るプログラムが記録された、コンピュータが読み取り可能な情報記録媒体である。
【発明の効果】
【００６２】
本発明によれば、符号中のユーザが指定した部分符号をアクセスするためのポインタ情報を取得する処理を効率よく高速に行うことができる。すなわち、
（１）請求項１記載の発明によれば、符号にプログレッションオーダの変更が無く、ユーザにより指定された部分符号が先頭の部分符号から連続的に配列されている場合に、指定された部分符号についてのポインタ情報を取得する処理を効率良く高速に実行することができる。
（２）請求項２記載の発明によれば、符号にプログレッションオーダの変更が有っても、ユーザにより指定された部分符号が先頭の部分符号から連続的に配列されていて、かつ指定された部分符号の配列中でのプログレッションオーダの変更が無い場合に、指定された部分符号についてのポインタ情報を取得する処理を効率良く高速に実行可能になる。
（３）請求項３，４，０，１０記載の発明によれば、ＪＰＥＧ２０００の符号のプログレッションオーダチェンジ指定が無いタイルについて、ユーザにより指定されたパケットが先頭パケットから連続的に配列されている場合に、指定されたパケットについてのポインタ情報を取得する処理を効率良く高速に実行することができる。
（４）請求項５−７，１１−１３記載の発明によれば、ＪＰＥＧ２０００の符号のプログレッションオーダチェンジ指定が有るタイルについて、ユーザにより指定された部分符号が先頭パケットから連続的に配列されていて、かつ指定されたパケットの配列中でのプログレッションオーダの変更が無い場合に、指定されたパケットについてのポインタ情報を取得する処理を効率良く高速に実行することができる。
（５）請求項８，１４記載の発明によれば、無駄なパケットの読み込みによる処理時間の増加を抑えることができる。
（６）請求項１５記載の発明に係るプログラム又は請求項１６記載の発明に係る情報記録媒体に記録されたプログラムをコンピュータにロードすることにより、請求項９−１４の符号処理方法を実施することができる。換言するならば、コンピュータを、請求項３−８記載の発明に係る符号処理装置として機能させることができる。
【発明を実施するための最良の形態】
【００６３】
以下、本発明の実施の形態について説明する。
【００６４】
本発明は、例えば図１８に示すようなシステムにおいて実施することができる。図１８において、１００と１０１はパーソナルコンピュータ（ＰＣ）であり、これらはネットワーク（ＬＡＮ、イントラネット、インターネット等）１０２を経由して相互に通信可能である。
【００６５】
ＰＣ１００はＣＰＵ１１０、メインメモリ（ＲＡＭ）１１１、ハードディスク装置１１２、表示装置１１３、キーボードやマウス等の入力装置１１４、ネットワーク・インターフェース１１５等がバス１１６に接続された一般的な構成である。ＰＣ１０１も同様の構成で構わない。
【００６６】
本発明は、単独のＰＣ１００又は１０１において実施する形態、あるいは、例えばＰＣ１０１をクライアント、ＰＣ１００をサーバとしたクライアント・サーバシステム上で実施する形態をとり得る。また、単独のＰＣ１００又は１０１上でクライアント・ソフトウェアとサーバ・ソフトウェアを走らせてクライアント・サーバシステムを構築することも可能であり、かかるシステム上で本発明を実施する形態もとり得る。なお、後述する各実施例を専用のハードウェアで実施することも可能であり、かかる実施形態も本発明に当然に包含される。
【実施例１】
【００６７】
図１９乃至図２２、図２４、図２５は本発明の実施例１を説明するためのフローチャートである。これらフローチャートに示される手順は、図１８のＰＣ１００（又はＰＣ１０１）上でソフトウェアによって実行されるものとする。そのためのプログラムは、ハードディスク装置１１２に保存されており、メインメモリ（ＲＡＭ）１１１へロードされてＣＰＵ１１０により実行されるものとする。また、処理の対象はＪＰＥＧ２０００の符号であって、これはハードディスク装置１１２に保存されているものとする。また、後述のメモリＡとしては、メインメモリ１１１の一部領域が用いられる。また、後述の構造体Ｐの配列はメインメモリ１１１上に置かれる。
【００６８】
図１９を参照する。まず、ユーザにより処理対象の符号が指定され、また、解像度レベルやレイヤ番号、コンポーネント番号等の指定によって、選択すべき（所望の）パケットが指定される（ｓｔｅｐ１００）。
【００６９】
この指定は、ＰＣ１００の入力装置１１４を利用して行われる場合と、クライアント側のＰＣ１０１より行われる場合とがある。前者は、ＰＣ１００において例えば指定された解像度レベルまでのパケットのみデコードして、原画像より低解像度の画像を表示装置１１３に表示させるようなケースが該当する。後者は、例えば指定された解像度レベルまでのパケットだけをサーバ側ＰＣ１００からクライアント側ＰＣ１０１へ送信し、クライアント側ＰＣ１０１において、そのパケットをデコードして原画像より低解像度の画像を表示するようなケースが該当する。
次にＰＣ１００は、ユーザより指定された符号のデフォルトのプログレッションオーダを決定する処理が行われる（ｓｔｅｐ１０１）。この処理で、タイル毎にデフォルトのプログレッションオーダが決定される。
【００７０】
次にＰＣ１００において、指定された符号におけるＰＯＣ（プログレッションオーダチェンジ）指定の有無を調べるためのＰＯＣ検知処理が行われる（ｓｔｅｐ１０２）。
【００７１】
そして、タイル毎にＰＯＣが検知されたか否かが判定され（ｓｔｅｐ１０３）、ＰＯＣが検知されたタイルについては通常パケット選択処理が実行され（ｓｔｅｐ１０４）、ＰＯＣが検知されなかったタイルについては第１の高速パケット選択処理が実行される（ｓｔｅｐ１０５）。
【００７２】
なお、ＰＯＣマーカセグメントに関連して既に説明したように、ＰＯＣマーカセグメントがメインヘッダ又はタイルパートヘッダに挿入されている場合、少なくとも２回以上のプログレッションオーダチェンジが指定されていること、つまり、パケット配列の途中で少なくとも一度はプログレッションオーダが変更されることを意味する。
【００７３】
ｓｔｅｐ１０１におけるデフォルト・プログレッションオーダ決定処理について、図２０に示したフローチャートを参照し説明する。
【００７４】
なお、ＪＰＥＧ２０００の符号においては、デフォルトのプログレッションオーダは、メインヘッダ中のＣＯＤマーカセグメント（図１３）のパラメータSgcodに記載され、必要に応じて１番目のタイルパートのタイルパートヘッダ（図１６）のＣＯＤマーカセグメントにも記載される。さらに、先に述べたように、デフォルトのプログレッションオーダは、メインヘッダ中のＰＯＣマーカセグメント（図１４）で変更され、必要に応じてタイルパートヘッダ中のＰＯＣマーカセグメントによって変更される。これらの各マーカセグメントによる指定の優先順位は
メインヘッダのＣＯＤマーカセグメントによる指定（全タイルに適用される）＜タイルパートヘッダのＣＯＤマーカセグメントによる指定（当該タイルのみに適用される）＜メインヘッダのＰＯＣマーカセグメントによる指定（全タイルに適用される）＜タイルパートヘッダのＰＯＣマーカセグメントによる指定（当該タイルのみに適用される）
であり、後の指定ほど優先度が高い。
【００７５】
図２０を参照する。まず、ハードディスク装置１１２より指定された符号のメインヘッダがメインメモリ１１１に読み込まれる（ｓｔｅｐ１１０）。
【００７６】
メインヘッダを参照し、メインヘッダ中のＣＯＤマーカセグメントに指定されたプログレッションオーダ（Ｄ）が全タイルのデフォルトのプログレッションオーダとして仮決定される（ｓｔｅｐ１１１）。次のｓｔｅｐ１１２以下はタイル毎に実行されるステップである。
【００７７】
まず、当該タイルの最初のタイルパートのタイルパートヘッダがメインメモリ１１１に読み込まれ（ｓｔｅｐ１１２）、このタイルパートヘッダにＣＯＤマーカセグメントが含まれているか調べられる（ｓｔｅｐ１１３）。そのＣＯＤマーカセグメントが含まれていないならば（ｓｔｅｐ１１３，ＮＯ）、ｓｔｅｐ１１１で仮決定されたプログレッションオーダ（Ｄ）が当該タイルのデフォルトのプログレッションオーダとして決定され（ｓｔｅｐ１１４）、そのＣＯＤマーカセグメントが含まれているならば（ｓｔｅｐ１１３，ＹＥＳ）、該ＣＯＤマーカセグメント中に指定されたプログレッションオーダが当該タイルに対するデフォルトのプログレッションオーダとして決定される（ｓｔｅｐ１１５）。
【００７８】
次に、ｓｔｅｐ１０２（図１９）におけるＰＯＣ検知処理について、図２１に示したフローチャートを参照し説明する。
【００７９】
ｓｔｅｐ１０１（図１９）でメインメモリ１１１に読み込まれているメインヘッダが参照され（ｓｔｅｐ１２０）、ＰＯＣマーカセグメントの有無が調べられる（ｓｔｅｐ１２１）。メインヘッダ中にＰＯＣマーカセグメントが含まれているならば（ｓｔｅｐ１２１，ＹＥＳ）、全てのタイルについてＰＯＣ（プログレッションオーダチェンジ）指定が有ると判断される（ｓｔｅｐ１２２）。
【００８０】
メインヘッダ中にＰＯＣマーカセグメントが含まれていないならば（ｓｔｅｐ１２１，ＮＯ）、タイル毎にＰＯＣ検知が行われる。すなわち、当該タイルの最初のタイルパートのタイルパートヘッダがメインメモリ１１１に読み込まれ（ｓｔｅｐ１２３）、このタイルパートヘッダにおけるＰＯＣマーカセグメントの有無が調べられる（ｓｔｅｐ１２４）。ＰＯＣマーカセグメントが含まれているならば（ｓｔｅｐ１２４，ＹＥＳ）当該タイルにＰＯＣ指定が有ると判断され（ｓｔｅｐ１２５）、ＰＯＣマーカセグメントが含まれていないならば（ｓｔｅｐ１２４，ＮＯ）当該タイルにＰＯＣ指定は無いと判断される（ｓｔｅｐ１２６）。
【００８１】
次に、ｓｔｅｐ１０４（図１９）における通常パケット選択処理について、図２２−１及び図２２−２に示したフローチャートを参照し説明する。この処理はタイル毎に実行される。
【００８２】
まず、当該タイルの全てのタイルパートがメインメモリ１１１に読み込まれ、そのパケットのみが読み込まれた順にメモリＡに格納される（ｓｔｅｐ１３０）。この際に必要なタイルパート長は、タイルパートヘッダ中のＳＯＴマーカセグメントのＰｓｏｔ（図１１，図１２）を参照することにより検出される。
【００８３】
次に、ｓｔｅｐ１０１（図１９）で決定された当該タイルに対するデフォルトのプログレッションオーダが取得される（ｓｔｅｐ１３１）。
【００８４】
次に、当該タイルのパケット数が計算される（ｓｔｅｐ１３２）。計算したパケット数分の構造体Ｐからなる配列Ｂがメインメモリ１１１上に用意され、当該タイルのデフォルトのプログレッションオーダのｆｏｒループが形成され、このｆｏｒループを回すことにより配列Ｂの全ての要素（構造体Ｐ）が初期化される（ｓｔｅｐ１３３）。なお、構造体Ｐは図２３に示すようにパケットの先頭位置とパケット長を要素に持つ構造体である。
【００８５】
当該タイルの最初のタイルパートのタイルパートヘッダ中のＰＯＣマーカセグメント（図１４，図１５）が参照され、最初のプログレッションオーダチェンジ指定のパラメータの内容、すなわちプログレッションオーダと、レイヤ、解像度、コンポーネントの”最初の番号”（開始位置）と”最後の番号”（終了位置）が取得される（ｓｔｅｐ１３４）。ただし、レイヤの最初の番号（開始位置）は常に０である（図１５の参照）。
【００８６】
次に、上記最初のプログレッションオーダチェンジ指定のパラメータに従った属性解釈用のｆｏｒループを構成し処理を開始し（ｓｔｅｐ１３５）、最初のプログレッションオーダチェンジ指定が適用されるパケットの先頭位置とパケット長を求め、それを当該タイルのデフォルト・プログレッションオーダに従ってソートした形で配列Ｂに格納する処理を実行する（ｓｔｅｐ１３６〜ｓｔｅｐ１３９）。
【００８７】
ｓｔｅｐ１３４〜ｓｔｅｐ１３９の処理について、図１０に示した例を用いて具体的に説明する。図１０の例では、最初のプログレッションオーダチェンジ指定でのプログレッションオーダはＬＲＣＰであり、
for(レイヤ=0)｛
for(解像度レベル=0,1,2)｛
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
パケットの属性を解釈し、メモリＡ上の該パケットの先頭位置と長さを求め、
これをデフォルトのプログレッションオーダに従ってソートした形で配列Ｂに
格納する
｝
｝
｝
｝
のようなｆｏｒループ処理が実行されることになる。
【００８８】
まず、ループ変数は、最初はレイヤ番号（Ｌ）＝０、解像度レベル（Ｒ）＝０、コンポーネント番号（Ｃ）＝０、プリシンクト番号（Ｐ）＝０（この例では解像度レベル０，１でのプリシンクト数＝１）に設定され、メモリＡ中の最初のパケットの格納位置と長さが、その属性（Ｌ＝０，Ｒ＝０，Ｃ＝０，Ｐ＝０）に対応した配列Ｂの要素に格納される（ｓｔｅｐ１３７）。なお、パケットの長さは、パケットヘッダをデコードすることによって求めることができるが、タイルパートヘッダ中にＰＬＴマーカセグメントが含まれているときには、それを解釈することにより知ることができる（この場合、バケットヘッダのデコードは不要となる）。
【００８９】
メモリＡの注目位置はメモリＡ中の２番目のパケットの先頭位置へ移動し（ｓｔｅｐ１３８）、ループ変数を更新する（ｓｔｅｐ１３９）。ここではプリシンクト数は１であるので、コンポーネント番号（Ｃ）が１に更新されることになる。したがって、２番目のパケットは属性（Ｌ＝０，Ｒ＝０，Ｃ＝１，Ｐ＝０）と解釈され、この属性に対応した配列Ｂの要素に該パケットの先頭位置とその長さが格納される（ｓｔｅｐ１３７）。注目位置はメモリＡ中の３番目のパケットの先頭位置に移動し（ｓｔｅｐ１３８）、ループ変数はコンポーネント番号（Ｃ）が２に更新される（ｓｔｅｐ１３９）。したがって、３番目のパケットの先頭位置とその長さは、その属性（Ｌ＝０，Ｒ＝０，Ｃ＝２，Ｐ＝０）に対応した配列Ｂの要素に格納される（ｓｔｅｐ１３７）。注目位置はメモリＡ中の４番目のパケットの先頭位置へ移動し（ｓｔｅｐ１３８）、ループ変数は解像度レベル（Ｒ）が１に、コンポーネント番号（Ｃ）が０にそれぞれ更新され（ｓｔｅｐ１３９）、当該パケットの先頭位置とその長さは、その属性（Ｌ＝０，Ｒ＝１，Ｃ＝０，Ｐ＝０）に対応した配列Ｂの要素に格納される（ｓｔｅｐ１３７）。
【００９０】
同様の処理が繰り返され、メモリＡ中の７番目以降のパケットの先頭位置に注目位置が移動すると、ループ変数は解像度レベル（Ｒ）が２に、コンポーネント番号（Ｃ）は０に更新される。解像度レベル＝２ではプリシンクト数が４となるため、このパケット以降はループ変数のプリシンクト番号（Ｐ）が０，１，２，３と順に更新され、この更新が一巡するとコンポーネント番号（Ｃ）が１に更新される。以下同様の処理がメモリＡ中の１８番目のパケットまで繰り返され、注目位置がメモリＡ中の１９番目のパケットの先頭位置に移動しループ変数がＬ＝１，Ｒ＝０，Ｃ＝０，Ｐ＝０に更新されると、当該ｆｏｒループの処理は終了したと判定され（ｓｔｅｐ１３６，Ｙｅｓ）、図２２−２に示す処理へと進む。
【００９１】
図２２−２を参照する。当該タイルの次のタイルパートのタイルパートヘッダ中のＰＯＣマーカセグメントが参照され、次のプログレッションオーダチェンジ指定のパラメータの内容が取得される（ｓｔｅｐ１４１）。次に、当該プログレッションオーダチェンジ指定のパラメータに従った属性解釈用のｆｏｒループを構成し処理を開始し（ｓｔｅｐ１４２）、配列Ｂに当該プログレッションオーダチェンジ指定が適用されるパケットの先頭位置とパケット長を、当該タイルのデフォルト・プログレッションオーダに従ってソートした形で格納する処理を実行する（ｓｔｅｐ１４３〜ｓｔｅｐ１４７）。
【００９２】
再び図１０に示した例を用いて処理内容を説明する。図１０の例では１９番目のパケットで２回目のプログレションオーダチェンジが行われるが、すでに注目位置はメモリＡ中の１９番目のパケットの先頭位置に移動している。
【００９３】
この例の場合、２回目のプログレッションオーダチェンジで指定されるプログレッションオーダはＣＰＲＬであり、
for(コンポ−ネント=0,1,2)｛
for(全てのプリシンクト)｛
for(解像度レベル=0,1,2)｛
for(レイヤ=0,1）｛
メモリＡ中でパケットの属性を解釈し、
その属性のパケットの先頭位置がすでに配列Ｂ中に保存されていなければ、
メモリＡ中での当該パケットの先頭位置とパケット長を求め、これをデフォル
トのプログレッションオーダに従って配列Ｂに格納する
｝
｝
｝
｝
のようなｆｏｒループ処理が実行されることになる。
【００９４】
最初、ループ変数はＣ＝０，Ｐ＝０，Ｒ＝０，Ｌ＝０に設定されるので、メモリＡ中の１９番目のパケットの属性は（Ｒ＝０，Ｌ＝０，Ｃ＝０，Ｐ＝０）と解釈されるが、この属性に対応した配列Ｂの要素には既に１番目のパケットの先頭位置が格納済みである（ｓｔｅｐ１４４，ＹＥＳ）。したがって、注目位置をメモリＡ中の１９番目のパケットの先頭位置から移動させることなく、ループ変数のＬを１に更新する（ｓｔｅｐ１４７）。この属性（Ｒ＝０，Ｌ＝１，Ｃ＝０，Ｐ＝０）は当該パケットの正しい属性であり、これに対応した配列Ｂの要素にはパケットの先頭位置は未格納であり（ｓｔｅｐ１４４，ＮＯ）、１９番目のパケットの先頭位置と長さを当該配列Ｂの要素に格納する（ｓｔｅｐ１４５）。
【００９５】
つぎに注目位置をメモリＡ中の２０番目のパケットの先頭位置に移動させ（ｓｔｅｐ１４７）、ループ変数をＬ＝０，Ｒ＝１に更新するが（ｓｔｅｐ１４７）、この時の属性（Ｒ＝１，Ｌ＝０，Ｃ＝０，Ｐ＝０）に対応した配列Ｂの要素には３番目のパケットの先頭位置が既に格納されているので（ｓｔｅｐ１４４，ＹＥＳ）、注目位置を移動させることなく、ループ変数をＬ＝１に更新する（ｓｔｅｐ１４７）。この時の属性（Ｒ＝１，Ｌ＝１，Ｃ＝０，Ｐ＝０）は２０番目のパケットの正しい属性であり、この属性に対応した配列Ｂの要素にはパケットの先頭位置は未格納であるので（ｓｔｅｐ１４４，ＮＯ）、この配列Ｂの要素に２０番目のパケットの先頭位置と長さを格納し（ｓｔｅｐ１４５）、注目位置をメモリＡ中の２１番目のパケットの先頭位置に移動させる。
【００９６】
このような処理が繰り返されることにより、２１番目から３６番目までのパケットの先頭位置と長さが当該タイルのデフォルト・プログレッションオーダの順にソートした形で（プログレッションオーダの変更の影響を排除した形で）配列Ｂに格納される。
【００９７】
ｓｔｅｐ１４３で当該ｆｏｒループの処理が終了したと判定されるとｓｔｅｐ１４０に戻るが、この例では当該タイルの最後のプログレッションオーダチェンジ指定の処理が終わっているので、当該タイルに対するパケット選択処理は完了する。
【００９８】
ここまでの説明で理解されるように、パケット選択処理は、プログレッションオーダチェンジの影響を排除した形で、メモリＡ中の所望のパケットをアクセスするためのポインタ情報（パケット先頭位置及びパケット長）を配列Ｂ上に得るための処理である。このようなポインタ情報を得られたならば、例えば前記［ステップ５］のようなｆｏｒループを回して配列Ｂ上のポインタ情報を参照することにより、メモリＡ中の所望のパケットをアクセスし、そのパケットをデコードしたりクライアント側へ送信することができるが、その処理は以上のフローチャートには示されていない。このことは後述する他のパケット選択処理に関しても同様である。
【００９９】
なお、配列Ｂに格納されるポインタ情報は用途に依存して選ぶことができる。すなわちパケットデータ（パケットからパケットヘッダを除いたＭＱ符号そのものをデコードするためにパケットをアクセスしたいのであれば、「パケットの先頭位置」に代えて「パケットデータの先頭位置」を求めるようにしてもよい。パケットヘッダも含めたパケット全体を扱いたいのであれば（例えばＪＰＩＰでパケットを送信したい場合など）、上記のように「パケットヘッダの先頭位置」を求めるとよい。同様に、ＭＱ符号自体をデコードするためにパケットをアクセスしたいのであれば「パケット長」に代えて「パケットデータだけの長さ」を求めるようにしてもよい。パケットヘッダも含めたパケット全体を扱いたいのであれば（例えばＪＰＩＰでパケットを送信したい場合など）、上記の「パケット長」（パケットヘッダを含めた長さ）を求めるとよい。このことは後述の他のパケット選択処理においても同様である。
【０１００】
次に、ｓｔｅｐ１０５（図１９）における第１の高速パケット選択処理について、図２４と図２５に示したフローチャートを参照し説明する。この処理は、タイル毎に実行される。
【０１０１】
図２４を参照する。まず、当該タイルの全てのタイルパートがメインメモリ１１１に読み込まれ、そのパケットのみが読み込まれた順にメモリＡに格納される（ｓｔｅｐ１５０）。この際に必要なタイルパート長は、タイルパートヘッダ中のＳＯＴマーカセグメントの
Ｐｓｏｔ（図１１，図１２）を参照することにより検出される。
【０１０２】
次に、ｓｔｅｐ１０１（図１９）で決定された当該タイルに対するデフォルトのプログレッションオーダが取得される（ｓｔｅｐ１５１）。
【０１０３】
次に、前記ユーザ指定（例えば解像度レベルの指定等）による所望のパケットが先頭パケットから連続的に配列しているか否かの判定が行われる（ｓｔｅｐ１５２）。この判定処理を図２５に示したフローチャートを参照し説明する。
【０１０４】
図２５を参照する。ｓｔｅｐ１０１で決定された当該タイルのデフォルト・プログレッションオーダとそのパラメータ（レイヤ、解像度、コンポーネントの開始・終了位置）を取得し（ｓｔｅｐ１７０）、前記ユーザ指定（例えば解像度レベル、レイヤ数、コンポーネント数の指定）を取得し（ｓｔｅｐ１７１）、デフォルト・プログレッションオーダの最外殻の属性が、前記ユーザ指定による所望パケットに対応したｆｏｒループの最外殻の属性に実質的に一致するか否かを判定する（ｓｔｅｐ１７２）。実質的に一致すると判定したならば判定結果をＹＥＳとし（ｓｔｅｐ１７３）、実質的に一致しないと判定したならば判定結果をＮＯとする（ｓｔｅｐ１７４）。
【０１０５】
例えば、デフォルト・プログレッションオーダが、その最外殻の属性が解像度レベル（Ｒ）であるＲＬＣＰ又はＲＰＣＬであって、ある解像度レベルまでの全てのパケットが所望のパケットとしてユーザにより指定されたとすると、所望のパケットはプログレッションオーダの最外殻に連続的に位置するため（所望のパケットが先頭パケットから連続的に配列されている）判定結果はＹＥＳとなる。
【０１０６】
なお、「属性が”実質的に”一致する」とは次のような場合である。デフォルト・プログレッションオーダがＬＲＣＰであるが、そのレイヤ数が１である場合には、プログレッションオーダは、その最外殻の属性が実質的にＲである（実質的にＲＣＰである）ため、ある解像度レベルまでの全てのパケットが所望のパケットとしてユーザより指定されたとすると、所望のパケットはプログレッションオーダの最外殻に実質的に連続的に位置するため（所望のパケットが先頭パケットから連続的に配列されている）判定結果はＹＥＳとなるわけである。
【０１０７】
一方、デフォルトのプログレッションオーダがＬＲＣＰで、レイヤ数が２以上の場合に、所望のパケットとして解像度レベル１までのパケットがユーザにより指定されたときには、例えば図７に示したパケット配列列を見れば明らかなように、所望のパケットは先頭パケットから連続的に配列されない（飛び飛びに並ぶ）ため判定結果はＮＯとなる。
【０１０８】
再び図２４を参照する。ｓｔｅｐ１５２の判定結果がＮＯの場合、ｓｔｅｐ１０４と同様の通常パケット選択処理が実行される（ｓｔｅｐ１５３）。ただし、プログレッションオーダチェンジがない場合であるので、その処理手順はより簡易である。その処理手順を図２２−１を参照して説明すれば、ｓｔｅｐ１３０〜ｓｔｅｐ１３３までは同じであるが、ｓｔｅｐ１３４は省かれる。ｓｔｅｐ１３５では、当該タイルのデフォルトのプログレッションオーダのパラメータに従った属性解釈用のｆｏｒループ（これはｓｔｅｐ１３３で構成されるｆｏｒループと同一である）を構成し処理を開始する。ｓｔｅｐ１３６〜ｓｔｅｐ１３９までは同じである。ただし、ｓｔｅｐ１３６で当該ｆｏｒループの処理が終了したと判定されると、当該タイルに対するパケット選択処理は終了する。
【０１０９】
再び図２４を参照する。ｓｔｅｐ１５２の判定結果がＹＥＳとなった場合、ｓｔｅｐ１５４以下の処理が実行され、この処理こそが実質的な高速パケット選択処理である。
【０１１０】
まず、前記ユーザ指定（解像度レベルの指定等）により所望のパケットのパケット数が計算される（ｓｔｅｐ１５４）。計算したパケット数分の構造体Ｐの配列Ｂがメインメモリ１１１上に用意され、配列Ｂの全ての要素（構造体Ｐ）が初期化される（ｓｔｅｐ１５５）。
【０１１１】
次に、デフォルトのプログレッションオーダのパケット属性解釈用のｆｏｒループが構成され、前記ユーザ指定によりループ変数の初期値と最終値が設定されて、当該ｆｏｒループの処理が開始され（ｓｔｅｐ１５６）、メモリＡ中の先頭のパケットから順にパケットの属性が解釈され、その属性に対応した配列Ｂの要素にパケット先頭位置とパケット長が格納される（ｓｔｅｐ１５７〜ｓｔｅｐ１６０）。所望のパケットの最後のパケットまで処理が終わると、当該ｆｏｒループ処理が終了したと判定され（ｓｔｅｐ１５７）、当該タイルに対するパケット選択処理を終了する。このように、プログレッションオーダチェンジ指定の無いタイルにおいて、所望のパケットが先頭パケットから連続的に配列されている場合、所望のパケットのみについて、そのポインタ情報を求めて配列Ｂに格納するため、所望パケット以外のパケットのパケットヘッダのデコード等の無駄な処理が排除され効率的な高速処理となる。
【０１１２】
以上の説明から理解されるように、本実施例は請求項１，３，４に係る符号処理装置の一実施例に相当する。そして、符号処理装置の第１の判定手段の機能は図１９中のｓｔｅｐ１０２，１０３に対応し、第２の判定手段の機能は図２５中のｓｔｅｐ１７２に対応し、また、処理手段による指定されたパケットのみを対象として処理は図２４中のｓｔｅｐ１５６−１６０に対応する。また、第１の記憶手段はメインメモリに割り当てられるメモリＡに対応し、第２の記憶手段はメインメモリに置かれる配列Ｂに対応する。
【０１１３】
また、本実施例における処理内容の説明は、請求項９，１０に係る符号処理方法の処理手順の説明でもある。すなわち、本実施例は請求項９，１０に係る符号処理方法の一実施例に相当する。そして、符号処理方法の第１の判定工程は図１９中のｓｔｅｐ１０２，１０３に対応し、第２の判定工程は図２５中のｓｔｅｐ１７２に対応し、また、処理工程における指定されたパケットのみを対象として処理は図２４中のｓｔｅｐ１５６−１６０に対応する。また、第１の記憶手段はメモリＡに対応し、第２の記憶手段は配列Ｂに対応する。
【０１１４】
また、図１９から図２５に示した処理はＰＣ１００（又は１０１）においてプログラムにより実行されるが、かかるプログラムは請求項１５に係るプログラムの一実施例に相当することも明らかである。
【実施例２】
【０１１５】
図２６乃至図２９、図２０、図２４に示したフローチャートを参照し、本発明の実施例２について説明する。これらのフローチャートに示される手順は、図１８のＰＣ１００（又はＰＣ１０１）上でソフトウェアによって実行されるものとする。そのためのプログラムは、ハードディスク装置１１２に保存されており、メインメモリ（ＲＡＭ）１１１へロードされてＣＰＵ１１０により実行されるものとする。また、処理の対象はＪＰＥＧ２０００の符号であって、これはハードディスク装置１１２に保存されているものとする。また、後述のメモリＡとしては、メインメモリ１１１の一部領域が用いられる。また、後述の構造体Ｐの配列はメインメモリ１１１上に置かれる。
【０１１６】
図２６を参照する。まず、ユーザにより処理対象の符号が指定され、また、解像度レベルやレイヤ番号、コンポーネント番号等の指定によって、選択すべき（所望の）パケットが指定される（ｓｔｅｐ２００）。
【０１１７】
この指定は、ＰＣ１００の入力装置１１４を利用して行われる場合と、クライアント側のＰＣ１０１より行われる場合とがある。前者は、ＰＣ１００において例えば指定された解像度レベルまでのパケットのみデコードして、原画像より低解像度の画像を表示装置１１３に表示させるようなケースが該当する。後者は、例えば指定された解像度レベルまでのパケットだけをサーバ側ＰＣ１００からクライアント側ＰＣ１０１へ送信し、クライアント側ＰＣ１０１において、そのパケットをデコードして原画像より低解像度の画像を表示するようなケースが該当する。
次にＰＣ１００において、ユーザより指定された符号のデフォルトのプログレッションオーダを決定する処理が行われる（ｓｔｅｐ２０１）。この処理で、タイル毎にデフォルトのプログレッションオーダが決定される。処理手順は図２０のフローチャートにより説明した通りである。
【０１１８】
次にＰＣ１００において、ＰＯＣ検知処理が行われる（ｓｔｅｐ２０２）。このＰＯＣ検知処理の内容は後に図２７を参照し説明する。
【０１１９】
そして、タイル毎に、ＰＯＣ検知処理の結果に応じたパケット選択処理が実行される。すなわち、処理対象のタイルについてプログレッションオーダチェンジ指定が無いと判定されたならば（ｓｔｅｐ２０３，ＮＯ）、第１の高速パケット選択処理が実行される（ｓｔｅｐ２０４）。プログレッションオーダチェンジ指定が有ると判定されたならば（ｓｔｅｐ２０３，ＹＥＳ）、第２の高速パケット選択処理が実行される（ｓｔｅｐ２０５）。第１の高速パケット選択処理は図２４のフローチャートを参照して説明した通りであるので、その説明は繰り返さない。第２の高速パケット選択処理については後述する。
【０１２０】
次に、ｓｔｅｐ２０２におけるＰＯＣ検知処理について、図２７に示すフローチャートを参照し説明する。メインメモリ１１１に読み込まれたメインヘッダを参照し、ＰＯＣマーカセグメントを探す（ｓｔｅｐ２１１）。ＰＯＣマーカセグメントが見つかったならば（ｓｔｅｐ２１１，ＹＥＳ）、プログレッションオーダチェンジ指定が有ると判定し（ｓｔｅｐ２１２）、当該ＰＯＣマーカセグメントから全タイルに対し適用されるプログレッションオーダチェンジのパラメータ（Ｅ）を取得する（ｓｔｅｐ２１３）。
【０１２１】
ここまでは符号全体つまり全タイルに関連した処理であるが、以下の処理は処理の対象となった個々のタイルについて実行される処理である。
【０１２２】
メインヘッダ中にＰＯＣマーカセグメントが見つかった場合には（ｓｔｅｐ２１１，ＹＥＳ）、ｓｔｅｐ２１３の次に処理対象のタイルの最初のタイルパートのタイルパートヘッダをメインメモリに読み込み、ＰＯＣマーカセグメントを探す（ｓｔｅｐ２１４）。タイルパートヘッダにＰＯＣマーカセグメントが見つからなければ（ｓｔｅｐ２１５，ＮＯ）、前記パラメータ（Ｅ）を当該タイルに適用されるプログレッションオーダチェンジのパラメータとする（ｓｔｅｐ２１７）。最初のタイルパートヘッダにＰＯＣマーカセグメントが見つかったならば（ｓｔｅｐ２１５，ＹＥＳ）、そのＰＯＣマーカセグメントから当該タイルに適用されるプログレッションオーダチェンジ（ＰＯＣ）のパラメータを取得する（ｓｔｅｐ２１６）。
【０１２３】
一方、メインヘッダ中にＰＯＣマーカセグメントが見つからなかった場合には（ｓｔｅｐ２１１，ＮＯ）、処理の対象となったタイルについて、その最初のタイルパートのタイルパートヘッダを読み込み、ＰＯＣマーカセグメントを探す（ｓｔｅｐ２１８）。ＰＯＣマーカセグメントが見つからなかったならば（ｓｔｅｐ２１９，ＮＯ）、当該タイルにプログレッションオーダチェンジ指定は無いと判定する（ｓｔｅｐ２２０）。ＰＯＣマーカセグメントが見つかったならば（ｓｔｅｐ２１９，ＹＥＳ）、当該タイルにプログレッションオーダチェンジ指定が有ると判定し（ｓｔｅｐ２２１）、タイルパートヘッダ中のＰＯＣマーカセグメントから当該タイルに適用されるプログレッションオーダチェンジのパラメータを取得する（ｓｔｅｐ２２３）。
【０１２４】
このように、このＰＯＣ検知処理においては、プログレッションオーダチェンジ指定の有無を判定するとともに、プログレッションオーダチェンジ指定が有ると判定したときには、そのパラメータを取得する処理を行う。
【０１２５】
次に、ｓｔｅｐ２０５（図２６）における第２の高速パケット選択処理について、図２８と図２９に示すフローチャートを参照し説明する。前述のように、この処理はプログレッションオーダチェンジ指定が有ると判定されたタイルについて実行される。
【０１２６】
図２８を参照する。まず、当該タイルの全てのタイルパートがメインメモリ１１１に読み込まれ、そのパケットのみが読み込まれた順にメモリＡに格納される（ｓｔｅｐ２３０）。この際に必要なタイルパート長は、タイルパートヘッダ中のＳＯＴマーカセグメントのＰｓｏｔ（図１１，図１２）を参照することにより検出される。
【０１２７】
次に、当該タイルの最初のプログレッションオーダチェンジ指定のパラメータ（ＰＯＣ検知処理において既に得られている）を取得し（ｓｔｅｐ２３１）、前記ユーザ指定（例えば解像度レベルの指定等）による所望のパケットが先頭パケットから連続的に配列され、かつ、所望のパケットの配列中でプログレッションオーダの変更が無いか否かの判定が行われる（ｓｔｅｐ１５２）。この判定処理を図２９に示したフローチャートを参照し説明する。
【０１２８】
図２９を参照する。当該タイルの最初のプログレッションオーダチェンジ指定のパラメータ（プログレッションオーダと、レイヤ、解像度、コンポーネントの開始・終了位置）を読み込み（ｓｔｅｐ２５０）、次に前記ユーザ指定（例えば解像度レベル、レイヤ数、コンポーネント数の指定）を読み込み（ｓｔｅｐ２５１）、前記最初のプログレッションオーダチェンジ指定に対応したプログレッションオーダの最外殻の属性が、前記ユーザ指定に対応したｆｏｒループの最外殻の属性に実質的に一致するか否かの判定を行う（ｓｔｅｐ２５２）。この判定の内容は、図２５中のｓｔｅｐ１７２に関連して説明したと同様である（ただし、ｓｔｅｐ１５２，ｓｔｅｐ１７２では、タイルのデフォルトのプログレッションオーダに注目している）。
【０１２９】
さて、ｓｔｅｐ２５２で実質的に一致しないと判定したならば（ｓｔｅｐ２５２，ＮＯ）、最終的な判定結果をＮＯとする（ｓｔｅｐ２５３）。
【０１３０】
ｓｔｅｐ２５２で実質的に一致すると判定したならば（ｓｔｅｐ２５２，ＹＥＳ）、すなわち、所望のパケットが先頭パケットから連続的に配列されているならば、最初のプログレッションオーダチェンジ指定のパラメータに対応したｆｏｒループのループ変数の範囲に、前記ユーザ指定に対応したｆｏｒループのループ変数の範囲が完全に包含されるか否かの判定を行う（ｓｔｅｐ２５４）。つまり、所望のパケットの配列中で再度のプログレッションオーダの変更が行われるか否かを調べるわけである。この包含関係が成立するならば（ｓｔｅｐ２５６，ＹＥＳ）、最終的な判定結果をＹＥＳとする（ｓｔｅｐ２５６）。上記包含関係が成立しないならば（ｓｔｅｐ２５６，ＮＯ）、最終的な判定結果をＮＯとする（ｓｔｅｐ２５５）。
【０１３１】
再び図２８を参照する。ｓｔｅｐ２３２の判定結果がＮＯの場合、ｓｔｅｐ１０４と同様の通常パケット選択処理が実行される（ｓｔｅｐ１５３）。
【０１３２】
一方、ｓｔｅｐ２３２の判定結果がＹＥＳの場合、ｓｔｅｐ２３４以下の処理が実行され、この処理こそが無駄のない高速なパケット選択処理である。
【０１３３】
まず、前記ユーザ指定（解像度レベルの指定等）により所望のパケットのパケット数が計算される（ｓｔｅｐ２３４）。計算したパケット数分の構造体Ｐの配列Ｂがメインメモリ１１１上に用意され、配列Ｂの全ての要素（構造体Ｐ）が初期化される（ｓｔｅｐ２３５）。
【０１３４】
次に、当該タイルの最初のプログレッションオーダチェンジ指定のプログレッションオーダに対応したパケット属性解釈用のｆｏｒループを構成し、前記ユーザ指定によりループ変数の初期値と最終値を設定し（ｓｔｅｐ２３６）、当該ｆｏｒループを回してメモリＡ中の先頭のパケットから順にパケットの属性を解釈し、その属性に対応した配列Ｂの要素にパケットの先頭位置とパケット長を格納する処理を実行する（ｓｔｅｐ２３７〜ｓｔｅｐ２４０）。所望のパケットの最後のパケットまで処理を終えると（ｓｔｅｐ２３７，ＹＥＳ）、当該タイルに対するパケット選択処理を終了する。このように、所望のパケットのみについて、そのポインタ情報（パケット先頭位置とパケット長）を配列Ｂに格納するパケット選択処理は、所望のパケット以外のパケットのパケットヘッダのデコード等の無駄な処理がないため、効率的・高速に実行できる。
【０１３５】
以上の説明から理解されるように、本実施例は請求項２，５，６，７に係る符号処理装置の一実施例に相当する。そして、符号処理装置の第１の判定手段の機能は図２６中のｓｔｅｐ２０２，２０３に対応し、第２の判定手段の機能は図２９中のｓｔｅｐ２５２に対応し、第３の判定手段の機能は図２９中のｓｔｅｐ２５４に対応し、また、処理手段による指定されたパケットのみを対象として処理は図２８中のｓｔｅｐ２３６−２４０に対応する。また、第１の記憶手段はメインメモリに割り当てられるメモリＡに対応し、第２の記憶手段はメインメモリに置かれる配列Ｂに対応する。
【０１３６】
また、本実施例における処理内容の説明は、請求項１１，１２，１３に係る符号処理方法の処理手順の説明でもある。すなわち、本実施例は請求項１１，１２，１３に係る符号処理方法の一実施例に相当する。そして、符号処理方法の第１の判定工程能は図２６中のｓｔｅｐ２０２，２０３に対応し、第２の判定工程は図２９中のｓｔｅｐ２５２に対応し、第３の判定工程は図２９中のｓｔｅｐ２５４に対応し、また、処理工程による指定されたパケットのみを対象として処理は図２８中のｓｔｅｐ２３６−２４０に対応する。
【０１３７】
また、本実施例におけるｓｔｅｐ２０４の第１の高速パケット選択処理は前記実施例１におけるｓｔｅｐ１０５と同じ処理である。したがって、本実施例は請求項１，３，４に係る符号処理装置及び請求項９，１０に係る符号処理方法の一実施例でもある。
【０１３８】
また、図２６から図２９に示した処理はＰＣ１００（又は１０１）においてプログラムにより実行されるが、かかるプログラムは請求項１５に係るプログラムの一実施例に相当することも明らかである。
【実施例３】
【０１３９】
本発明の実施例３について説明する。この実施例３にあっては、前記実施例２における第２の高速パケット選択処理（図２８）の内容が、図３０のフローチャートに示すように一部変更される。これ以外は前記実施例２と同様である。
【０１４０】
図３０と図２８の相違点は、ｓｔｅｐ２３０Ａにおいて当該タイルの最初のタイルパートのみを読み込み、そのパケットだけをメモリＡに格納すること、ｓｔｅｐ２３７の次にに追加されたｓｔｅｐ３００で注目位置がメモリＡ中の最後のパケットに達したか判定すること、この判定結果がＹＥＳとなったときに、ｓｔｅｐ３０１で次の１つのタイルパートを読み込み、そのパケットのみをメモリＡ中の最後のパケットに続けて追加格納して処理を続けることである。
【０１４１】
すなわち、本実施例３においては、初めに先頭のタイルパートのパケットのみをメモリＡに格納する。そして、ｓｔｅｐ２３２の判定結果がＹＥＳの場合には、パケット選択の進捗に応じて必要なタイルパートを１つずつ追加読み込みしつつパケット選択を進める。そして、所望の全てのパケットについてのポインタ情報が配列Ｂに格納されたならば（ｓｔｅｐ２３７，ＹＥＳ）、それ以降のタイルパートの読み込みは行わない。
【０１４２】
このように、ユーザにより指定された所望のパケットのみを対象としたパケット選択処理において、タイルのパケットのメモリＡへの読み込みを該処理の進捗に合わせタイルパート単位で分割して行うと、初めにタイルの全てのタイルパートのパケットをメモリＡに読み込む場合に比べ、不必要なパケットの読み込み処理に要する時間分だけパケット選択処理の時間を短縮することができる。なお、分割読み込みの単位はタイルパート単位に限定されるわけではない。
【０１４３】
以上の説明から理解されるように、本実施例は請求項８に係る符号処理装置及び請求項１４に係る符号処理方法の一実施例に相当する。また、本実施例のためのプログラムは請求項１５に係るプログラムの一実施例に相当する。
【実施例４】
【０１４４】
本発明の実施例４について説明する。この実施例４にあっては、前記実施例１又は２における第１の高速パケット選択処理において、前記実施例３と同様に、処理の進捗に合わせて、タイルのパケットのメモリＡへの読み込みがタイルパート単位で分割して行われる。これを便宜図２４により説明する。
【０１４５】
ｓｔｅｐ１５０でタイルの先頭のタイルパートのパケットのみがメモリＡに読み込まれる。ｓｔｅｐ１５７の次にｓｔｅｐ３００（図３０）と同様な判定ステップが追加され、この判定ステップでＹＥＳと判定されたときにメモリＡへの次タイルパートのパケットの追加読み込みを行う、ｓｔｅｐ３０１（図３０）と同様のステップが追加される。
【０１４６】
このようなパケットの分割読み込みの効果は前記実施例３に述べた通りである。なお、分割読み込みの単位はタイルパート単位に限定されるわけではない。
【０１４７】
これ以外は前記実施例２又は３と同様であるので説明を省略する。
【０１４８】
本実施例は、請求項８に係る符号処理装置及び請求項１４に係る符号処理方法の一実施例に相当することは明らかである。また、本実施例のためのプログラムは請求項１５に係るプログラムの一実施例に相当する。
【０１４９】
以上、ＪＰＥＧ２０００の符号を扱う実施形態について説明した。しかし、ＪＰＥＧ２０００以外の符号であっても、ＪＰＥＧ２０００の符号と同様に、プログレッションオーダに従って配列された部分符号から構成されていて部分符号の配列中でプログレッションオーダの変更が許容される符号を扱う装置に対しても、本発明を適用し得ることは明らかである。
【図面の簡単な説明】
【０１５０】
【図１】ＪＰＥＧ２０００の符号化アルゴリズムの説明するためのブロック図である。
【図２】タイル、プリシンクト、コードブロックの説明図である。
【図３】サブバンド分割例を示す図である。
【図４】レイヤ分割例を示す図である。
【図５】５通りのプログレッションオーダを示す図である。
【図６】レイヤプログレッシブ符号の概要を示す図である。
【図７】ＬＲＣＰのパケット配列例を示す図である。
【図８】解像度プログレッシブ符号の概要を示す図である。
【図９】ＲＬＣＰのパケット配列例を示す図である。
【図１０】ＳＯＴマーカセグメントの構造を示す図である。
【図１１】ＳＯＴマーカセグメントの構造を示す図である。
【図１２】ＳＯＴマーカセグメントのパラメータの内容を示す図である。
【図１３】ＣＯＤマーカセグメントの構造を示す図である。
【図１４】ＰＯＣマーカセグメントの構造を示す図である。
【図１５】ＰＯＣマーカセグメントのパラメータの内容を示す図である。
【図１６】最初のタイルパートのタイルパートヘッダの構成図である。
【図１７−１】ＰＬＴマーカセグメントの構造を示す図である。
【図１７−２】ＰＬＴマーカセグメントのパラメータの内容を示す図である。
【図１８】本発明の実施形態に係るシステム構成例を示すブロック図である。
【図１９】実施例１の全体的な処理の流れを説明するためのフローチャートである。
【図２０】図１９中のデフォルト・プログレッションオーダ決定処理のフローチャートである。
【図２１】図１９中のＰＯＣ検知処理のフローチャートである。
【図２２−１】図１９中の通常パケット選択処理のフローチャートである。
【図２２−２】図２２−１に続くフローチャートである。
【図２３】構造体Ｐの説明図である。
【図２４】図１９中の第１の高速パケット選択処理のフローチャートである。
【図２５】図２４中の連続性判定処理のフローチャートである。
【図２６】実施例２及び３の全体的な処理の流れを説明するためのフローチャートである。
【図２７】図２６中のデフォルト・プログレッションオーダ決定処理のフローチャートである。
【図２８】図２６中の第２の高速パケット選択処理のフローチャートである。
【図２９】図２８中の連続性判定処理のフローチャートである。
【図３０】実施例３における第２の高速パケット選択処理のフローチャートである。
【符号の説明】
【０１５１】
１００    パーソナルコンピュータ（サーバ）
１０１    パーソナルコンピュータ（クライアント）
１０２    ネットワーク
１１０    ＣＰＵ
１１１    ＲＡＭ
１１２    ハードディスク装置
１１３    表示装置
１１４    入力装置
１１５    ネットワーク・インターフェース
【図１】
0004789197.tif 000002
【図２】
0004789197.tif 000003
【図３】
0004789197.tif 000004
【図４】
0004789197.tif 000005
【図５】
0004789197.tif 000006
【図６】
0004789197.tif 000007
【図７】
0004789197.tif 000008
【図８】
0004789197.tif 000009
【図９】
0004789197.tif 000010
【図１０】
0004789197.tif 000011
【図１１】
0004789197.tif 000012
【図１２】
0004789197.tif 000013
【図１３】
0004789197.tif 000014
【図１４】
0004789197.tif 000015
【図１５】
0004789197.tif 000016
【図１６】
0004789197.tif 000017
【図１７−１】
0004789197.tif 000018
【図１７−２】
0004789197.tif 000019
【図１８】
0004789197.tif 000020
【図１９】
0004789197.tif 000021
【図２０】
0004789197.tif 000022
【図２１】
0004789197.tif 000023
【図２２−１】
0004789197.tif 000024
【図２２−２】
0004789197.tif 000025
【図２３】
0004789197.tif 000026
【図２４】
0004789197.tif 000027
【図２５】
0004789197.tif 000028
【図２６】
0004789197.tif 000029
【図２７】
0004789197.tif 000030
【図２８】
0004789197.tif 000031
【図２９】
0004789197.tif 000032
【図３０】
0004789197.tif 000033