(57)【要約】【課題】左横、左斜上、上及び右斜上のマクロブロックに依存関係があるＨ．２６４／ＭＰＥＧ-４ＡＶＣ等の符号化方式において、マクロブロックの符号化又は復号を並列処理する。【解決手段】  本発明が適用されたＨ．２６４／ＭＰＥＧ-４ＡＶＣコーデックは、マクロブロック単位での符号化又は復号処理を並列して行う複数のＭＢ処理エージェント３０と、各マクロブロックの処理状態を管理する状態管理部３３とを備えている。状態管理部３３は、１つの画面内の各マクロブロックに対して、ＭＢ処理エージェント３０により処理開始が可能な状態（準備完了状態）にあるか、ＭＢ処理エージェント３０により実行中の状態（実行中状態）であるか、ＭＢ処理エージェント３０により処理が完了済みの状態（処理完了状態）であるかを区別して管理する。各ＭＢ処理エージェント３０は、状態管理部３３の各マクロブロックの状態を検索して、処理可能なマクロブロックを検出する。【選択図】図５
2006129285.tif 000002
【特許請求の範囲】
【請求項１】
所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの符号化処理を行う符号化装置において、
マクロブロック単位での符号化処理を並列して行う複数のマクロブロック処理部と、
１つの画面内の各マクロブロックの処理状態を管理する状態管理部とを備え、
上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるか否かを管理し、
各マクロブロック処理部は、
上記状態管理部を検索して処理完了状態となっていないマクロブロックを１つ検出し、
検出したマクロブロックに対して符号化処理を行い、
当該マクロブロックの符号化処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすること
を特徴とする符号化装置。
【請求項２】
上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理開始が可能な状態（準備完了状態）にあるか、上記マクロブロック処理部により実行中の状態（実行中状態）であるか、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるかを区別して管理し、
各マクロブロック処理部は、
上記状態管理部を検索して準備完了状態にあるマクロブロックを１つ検出し、
検出したマクロブロックの上記状態管理部により管理されている状態を実行中状態に変化させ、
検出したマクロブロックに対して符号化処理を行い、
当該マクロブロックの符号化処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすること
を特徴とする請求項１記載の符号化装置。
【請求項３】
各マクロブロック処理部は、画面の行方向に並んだ一群のマクロブロック群内では、少なくとも左側のマクロブロックから優先に符号化を行い、
上記状態管理部は、画面の行方向に並んだ一群のマクロブロック群に対して行アドレスを設定し、行アドレス毎に各状態となっているマクロブロックの数量を管理していること
を特徴とする請求項２記載の符号化装置。
【請求項４】
符号化対象となるマクロブロックに対して、左横、左斜め上、上及び右斜め上のマクロブロックの符号化結果を参照することが規定された規格に対応した符号化処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの一つ上の行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ−１]とし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理部は、下記論理式（１）が真となるマクロブロックを検索して符号化を行うこと
を特徴とする請求項３記載の符号化装置。
{ ST[S03][Y-1]>(X+1) } AND { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（１）
【請求項５】
符号化対象となるマクロブロックに対して、左横のマクロブロックの符号化結果を参照することが規定された規格に対応した符号化処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理部は、下記論理式（２）が真となるマクロブロックを検索して符号化を行うこと
を特徴とする請求項３記載の符号化装置。
{ ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２）
【請求項６】
所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの復号処理を行う復号装置において、
マクロブロック単位での復号処理を並列して行う複数のマクロブロック処理部と、
１つの画面内の各マクロブロックの処理状態を管理する状態管理部とを備え、
上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるか否かを管理し、
各マクロブロック処理部は、
上記状態管理部を検索して処理完了状態となっていないマクロブロックを１つ検出し、
検出したマクロブロックに対して復号処理を行い、
当該マクロブロックの復号処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすること
を特徴とする復号装置。
【請求項７】
上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理開始が可能な状態（準備完了状態）にあるか、上記マクロブロック処理部により実行中の状態（実行中状態）であるか、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるかを区別して管理し、
各マクロブロック処理部は、
上記状態管理部を検索して準備完了状態にあるマクロブロックを１つ検出し、
検出したマクロブロックの上記状態管理部により管理されている状態を実行中状態に変化させ、
検出したマクロブロックに対して復号処理を行い、
当該マクロブロックの復号処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすること
を特徴とする請求項６記載の復号装置。
【請求項８】
各マクロブロック処理部は、画面の行方向に並んだ一群のマクロブロック群内では、少なくとも左側のマクロブロックから優先に復号を行い、
上記状態管理部は、画面の行方向に並んだ一群のマクロブロック群に対して行アドレスを設定し、行アドレス毎に各状態となっているマクロブロックの数量を管理していること
を特徴とする請求項７記載の復号装置。
【請求項９】
復号対象となるマクロブロックに対して、左横、左斜め上、上及び右斜め上のマクロブロックの復号結果を参照することが規定された規格に対応した復号処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの一つ上の行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ−１]とし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理部は、下記論理式（１）が真となるマクロブロックを検索して復号を行うこと
を特徴とする請求項８記載の復号装置。
{ ST[S03][Y-1]>(X+1) } AND { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（１）
【請求項１０】
復号対象となるマクロブロックに対して、左横のマクロブロックの復号結果を参照することが規定された規格に対応した復号処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理部は、下記論理式（２）が真となるマクロブロックを検索して復号を行うこと
を特徴とする請求項８記載の復号装置。
{ ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２）
【請求項１１】
所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの符号化処理を行う符号化方法において、
マクロブロック単位での符号化処理を並列して行う複数のマクロブロック処理エージェントを用いて符号化処理を行い、
１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるか否かを管理し、
各マクロブロック処理エージェントは、
処理完了状態となっていないマクロブロックを１つ検出し、
検出したマクロブロックに対して符号化処理を行い、
当該マクロブロックの符号化処理が終了すると、当該マクロブロックの状態を処理完了状態とすること
を特徴とする符号化方法。
【請求項１２】
１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理開始が可能な状態（準備完了状態）にあるか、上記マクロブロック処理エージェントにより実行中の状態（実行中状態）であるか、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるかを区別して管理し、
各マクロブロック処理エージェントは、
準備完了状態にあるマクロブロックを１つ検出し、
検出したマクロブロックの状態を実行中状態に変化させ、
検出したマクロブロックに対して符号化処理を行い、
当該マクロブロックの符号化処理が終了すると、当該マクロブロックの状態を処理完了状態とすること
を特徴とする請求項１１記載の符号化方法。
【請求項１３】
各マクロブロック処理エージェントは、画面の行方向に並んだ一群のマクロブロック群内では、少なくとも左側のマクロブロックから優先に符号化を行い、
画面の行方向に並んだ一群のマクロブロック群に対して行アドレスを設定し、行アドレス毎に各状態となっているマクロブロックの数量を管理していること
を特徴とする請求項１２記載の符号化方法。
【請求項１４】
符号化対象となるマクロブロックに対して、左横、左斜め上、上及び右斜め上のマクロブロックの符号化結果を参照することが規定された規格に対応した符号化処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの一つ上の行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ−１]とし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理エージェントは、下記論理式（１）が真となるマクロブロックを検索して符号化を行うこと
を特徴とする請求項１３記載の符号化方法。
{ ST[S03][Y-1]>(X+1) } AND { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（１）
【請求項１５】
符号化対象となるマクロブロックに対して、左横のマクロブロックの符号化結果を参照することが規定された規格に対応した符号化処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理エージェントは、下記論理式（２）が真となるマクロブロックを検索して符号化を行うこと
を特徴とする請求項１３記載の符号化方法。
{ ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２）
【請求項１６】
所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの復号処理を行う復号方法において、
マクロブロック単位での復号処理を並列して行う複数のマクロブロック処理エージェントを用いて復号処理を行い、
１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるか否かを管理し、
各マクロブロック処理エージェントは、
処理完了状態となっていないマクロブロックを１つ検出し、
検出したマクロブロックに対して復号処理を行い、
当該マクロブロックの復号処理が終了すると、当該マクロブロックの状態を処理完了状態とすること
を特徴とする復号方法。
【請求項１７】
１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理開始が可能な状態（準備完了状態）にあるか、上記マクロブロック処理エージェントにより実行中の状態（実行中状態）であるか、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるかを区別して管理し、
各マクロブロック処理エージェントは、
準備完了状態にあるマクロブロックを１つ検出し、
検出したマクロブロックの状態を実行中状態に変化させ、
検出したマクロブロックに対して復号処理を行い、
当該マクロブロックの復号処理が終了すると、当該マクロブロックの状態を処理完了状態とすること
を特徴とする請求項１６記載の復号方法。
【請求項１８】
各マクロブロック処理エージェントは、画面の行方向に並んだ一群のマクロブロック群内では、少なくとも左側のマクロブロックから優先に復号を行い、
画面の行方向に並んだ一群のマクロブロック群に対して行アドレスを設定し、行アドレス毎に各状態となっているマクロブロックの数量を管理していること
を特徴とする請求項１７記載の復号方法。
【請求項１９】
復号対象となるマクロブロックに対して、左横、左斜め上、上及び右斜め上のマクロブロックの復号結果を参照することが規定された規格に対応した復号処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの一つ上の行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ−１]とし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理エージェントは、下記論理式（１）が真となるマクロブロックを検索して復号を行うこと
を特徴とする請求項１８記載の復号方法。
{ ST[S03][Y-1]>(X+1) } AND { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（１）
【請求項２０】
復号対象となるマクロブロックに対して、左横のマクロブロックの復号結果を参照することが規定された規格に対応した復号処理を行う場合、
対象となるマクロブロックの左から数えたときの位置をｘとし、
対象となるマクロブロックの行アドレスの処理完了状態のマクロブロックの数をＳＴ[Ｓ０３] [Ｙ]とし、
対象となるマクロブロックの行アドレスの準備完了状態のマクロブロックの数をＳＴ[Ｓ０１] [Ｙ]としたとき、
各マクロブロック処理エージェントは、下記論理式（２）が真となるマクロブロックを検索して復号を行うこと
を特徴とする請求項１８記載の復号方法。
{ ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２）
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画像データの符号化及び復号装置並びに符号化及び復号方法に関するものである。
【背景技術】
【０００２】
動画像データの従来の符号化規格として、ＭＰＥＧ-２（ISO/IEC13818-2 Information Technology-Generic Coding of moving pictures and associated audio information: Video）及びＭＰＥＧ-４（ISO/IEC14496 Information Technology-Generic Coding of Audio-Visual Object）等が知られている。
【０００３】
また、近年、動画像データの新たな符号化規格として、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ（ITU-T Rec. H.264 ISO/IEC 14496-10 AVC）及びＷＭＶ９（Windows Media Video 9（商標））等が提案されている。
【０００４】
このような符号化規格では、１つの画面（フレーム）内を所定画素数のブロック（輝度成分：１６画素×１６画素）に分割し、当該ブロック単位で符号化処理及び復号処理がされる。この画素ブロックのことを、マクロブロックという。
【０００５】
ここで、符号化又は復号処理の高速化を図るため、マクロブロックに対する符号化処理又は復号処理を行うマクロブロック処理エンジン（ハードウェア的なモジュールでもソフトウェア的なモジュールでもよい。）を複数準備し、これらのマクロブロック処理エンジンを並列動作させることが考えられる。
【０００６】
ＭＰＥＧ-２では、ある任意のマクロブロックに対して符号化又は復号処理を行う場合、図２９に示すように、左横のマクロブロックの処理結果を参照するので、少なくとも処理対象のマクロブロックの左横のマクロブロックまで符号化又は復号処理が完了してなければならない。なお、以下、このような関係のことを、「左横に依存関係がある」という。
【０００７】
このように、ＭＰＥＧ-２では、各マクロブロックが左横に依存関係があるので、複数のマクロブロック処理エンジンを並列動作させる場合には、図３０に示すように、１つのマクロブロック処理エンジンが、横方向に並んだ一群のマクロブロックに対して左側から順番に処理をして行けばよい。なお、横方向に並んだ一群のマクロブロックのことを、「スライス」と言う。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、ＭＰＥＧ-４やＨ．２６４／ＭＰＥＧ−４ＡＶＣ等の新たな符号化規格では、ある任意のマクロブロックに対して符号化又は復号処理を行う場合、図３１に示すように、左横、左斜上、上及び右斜上のマクロブロックの処理結果を参照するので、少なくとも左横、左斜上、上及び右斜上の４つのマクロブロックの符号化又は復号処理が完了してなければならない。すなわち、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ等の新たな符号化規格では、各マクロブロックが左横、左斜上、上及び右斜上に依存関係がある。
【０００９】
このため、複数のマクロブロック処理エンジンを並列動作させる場合、従来のように単に各マクロブロック処理エンジンがスライス単位で処理を行っていくのでは、対応することができない。
【００１０】
本発明は、このような問題に鑑みて、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ等の新たな符号化規格であっても、マクロブロックに対する並列処理を行うことが可能な符号化又は復号装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る符号化装置は、所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの符号化処理を行う符号化装置において、マクロブロック単位での符号化処理を並列して行う複数のマクロブロック処理部と、１つの画面内の各マクロブロックの処理状態を管理する状態管理部とを備え、上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるか否かを管理し、各マクロブロック処理部は、上記状態管理部を検索して処理完了状態となっていないマクロブロックを１つ検出し、検出したマクロブロックに対して符号化処理を行い、当該マクロブロックの符号化処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすることを特徴とする。
【００１２】
本発明に係る復号装置は、所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの復号処理を行う復号装置において、マクロブロック単位での復号処理を並列して行う複数のマクロブロック処理部と、１つの画面内の各マクロブロックの処理状態を管理する状態管理部とを備え、上記状態管理部は、１つの画面内の各マクロブロックに対して、上記マクロブロック処理部により処理が完了済みの状態（処理完了状態）であるか否かを管理し、各マクロブロック処理部は、上記状態管理部を検索して処理完了状態となっていないマクロブロックを１つ検出し、検出したマクロブロックに対して復号処理を行い、当該マクロブロックの復号処理が終了すると、上記状態管理部の当該マクロブロックの状態を処理完了状態とすることを特徴とする。
【００１３】
本発明に係る符号化方法は、所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの符号化処理を行う符号化方法において、マクロブロック単位での符号化処理を並列して行う複数のマクロブロック処理エージェントを用いて符号化処理を行い、１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるか否かを管理し、各マクロブロック処理エージェントは、処理完了状態となっていないマクロブロックを１つ検出し、検出したマクロブロックに対して符号化処理を行い、当該マクロブロックの符号化処理が終了すると、当該マクロブロックの状態を処理完了状態とすることを特徴とする。
【００１４】
本発明に係る復号方法は、所定数の画素から構成されるブロック（マクロブロック）単位で画面内を行列状に分割し、分割したマクロブロック単位で動画像データの復号処理を行う復号方法において、マクロブロック単位での復号処理を並列して行う複数のマクロブロック処理エージェントを用いて復号処理を行い、１つの画面内の各マクロブロックに対して、上記マクロブロック処理エージェントにより処理が完了済みの状態（処理完了状態）であるか否かを管理し、各マクロブロック処理エージェントは、処理完了状態となっていないマクロブロックを１つ検出し、検出したマクロブロックに対して復号処理を行い、当該マクロブロックの復号処理が終了すると、当該マクロブロックの状態を処理完了状態とすることを特徴とする。
【発明の効果】
【００１５】
本発明に係る符号化装置及び方法並びに復号装置及び方法は、マクロブロック単位での符号化又は復号処理を行うマクロブロック処理エージェントを複数用い、これらを並列動作させて高速処理を行う。この際、本発明では、１つの画面内の各マクロブロックが処理完了状態となっているかどうかを管理する。さらに、本発明では、各マクロブロック処理エージェントが、検出したマクロブロックに対して符号化又は復号処理を行い、当該マクロブロックの符号化又は復号処理が終了すると当該マクロブロックの状態を処理完了状態とする。
【００１６】
このことにより、本発明では、左横、左斜上、上及び右斜上にマクロブロックの依存関係を有する新たな符号化規格を適用する場合であっても、また、その他どのような符号化規格であっても、マクロブロックに対する並列処理を実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ規格に対応した符号化及び復号を行うビデオコーデックに、本発明を適用した装置について説明する。
【００１８】
全体構成
（エンコーダのブロック構成）
図１は、本発明が適用されたビデオコーデックの中の符号化処理部分（ビデオエンコーダ１）の構成図である。
【００１９】
ビデオエンコーダ１は、図１に示すように、画素データ（Pixel）が入力され、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ規格に対応した符号化処理を行い、符号化ストリーム（Stream）を出力する。
【００２０】
ビデオエンコーダ１は、マクロブロック単位で画素データが入力され、入力されたマクロブロックに対して符号化処理を行うＭＢ符号化部２を、複数個備えている。また、ビデオエンコーダ１は、動きベクトルを算出する動き検出部３と、ローカルデコードに必要とする参照用のフレームを生成するデブロッキングフィルタ４と、ＭＢ符号化部２により符号化されたデータ列に対して可変長符号化（ＶＬＣ）処理を行うＶＬＣ部５とを備えている。
【００２１】
各ＭＢ符号化部２（２-１，２-２，２-３，…，２-ｎ）は、それぞれ、図１に示すように、減算回路６と、離散コサイン変換（ＤＣＴ）回路７と、量子化回路８と、逆量子化回路９と、逆離散コサイン変換（ＩＤＣＴ）回路１０と、加算回路１１と、動き補償回路１２と、イントラ予測回路１３とを備えている。
【００２２】
減算回路６には、符号化対象となる空間領域の画像データ（pixel）が、マクロブロック単位で入力される。また、減算回路６には、符号化対象となるマクロブロック（画素データ）に対して、フレーム間の相関を利用した符号化処理を行う場合には、動き補償回路１２又はイントラ予測回路１３から予測ブロックも入力される。減算回路６は、インターマクロブロックに対して処理を行う場合には、入力された画像データから予測ブロックを減算する。減算回路６は、イントラマクロブロックに対して処理を行う場合には、入力された画像データから予測ブロックを減算する。
【００２３】
ＤＣＴ回路７は、減算回路６から出力されたマクロブロック（画像データ）に対して離散コサイン変換を行い、周波数領域の画像データであるＤＣＴの係数データ（coef）を生成する。ＤＣＴ回路７は、生成した係数データ（coef）を量子化回路８に出力する。
【００２４】
量子化回路８は、入力された係数データ（coef）に対して、所定の量子化スケール値を用いて、量子化処理を行う。
【００２５】
逆量子化回路９には、量子化回路８から出力された係数データのうち、フレーム間予測の参照データとなり得るフレームのマクロブロックの係数データが入力される。逆量子化回路９は、入力されたデータに対して、量子化した際に用いられた量子化スケール値により、逆量子化処理を行う。
【００２６】
ＩＤＣＴ回路１０は、逆量子化回路９から出力された係数データ（coef）に対して、逆離散コサイン変換を行い、空間領域の画像データ（pixel）を生成する。
【００２７】
加算回路１１には、ＩＤＣＴ回路１０から出力された画像データ（pixel）が入力される。また、加算回路１１には、入力された画像データがフレーム間の相関を利用した符号化がされたマクロブロックである場合、その予測ブロックが動き補償回路１２又はイントラブロックメモリ１３から入力される。加算回路１１は、インターマクロブロックに対して処理を行う場合には、入力された画像データに対して予測ブロックを加算する。加算回路１１は、イントラマクロブロックに対して処理を行う場合には、入力された画像データに対して予測ブロックを加算する。加算回路１１は、出力した画像データをデブロッキングフィルタ４に供給して、デブロックフィルタリング処理がされたのち、参照フレームとして図示しないフレームメモリに格納される。
【００２８】
動き補償回路１２は、フレームメモリに格納された参照フレームに対して動きベクトルを参照して動き補償を行い、予測ブロックを生成する。イントラ予測回路１３は、イントラ予測を行い、予測ブロックとなるイントラマクロブロックが格納されている。マクロブロックのタイプに応じて、動き補償回路１２又はイントラ予測回路１３のいずれか一方から出力された予測ブロックが出力され、減算回路６に供給される。予測ブロックは、加算回路１１に供給される。
【００２９】
以上のような複数のＭＢ符号化部２（２-１，２-２，２-３，…，２-ｎ）から出力されたマクロブロック単位のデータ（量子化された係数データ）は、ＶＬＣ部５に供給される。
【００３０】
（エンコーダの処理フロー）
図２は、各ＭＢ符号化部２での処理内容を、フローチャートによって表したものである。
【００３１】
各ＭＢ符号化部２は、１つのマクロブロック（画素データ）が入力されると、まず、そのマクロブロックのタイプを判断して、イントラマクロブロックかインターマクロブロックかを判断する（Ｓ１０）。イントラ予測回路であれば、予測結果を予測ブロックとし（Ｓ１１）、インターマクロブロックであればその符号化結果に対して動き補償を行って予測ブロックを生成する（Ｓ１２）。また、もし、インターマクロブロックであれば、入力されたマクロブロックから予測ブロックを減算して、差分ブロックを生成する（Ｓ１３）。
【００３２】
各ＭＢ符号化部２は、続いて、マクロブロック単位の画素データに対してＤＣＴ演算（Ｓ１４）及び量子化処理（Ｓ１５）を行う。ＤＣＴ演算及び量子化がされたマクロブロック単位のデータ（係数データ）は、ＭＢ符号化部２からＶＬＣ部５に供給される。
【００３３】
各ＭＢ符号化部２は、さらに、そのマクロブロックが参照データとなり得るフレームのマクロブロックであれば、逆量子化処理（Ｓ１６）及び逆ＤＣＴ処理（Ｓ１７）を行ったのち、予測ブロックを加算する（Ｓ１８）。
【００３４】
各ＭＢ符号化部２は、１フレーム内の全てのマクロブロックに対して処理を行ったか否かを判断し（Ｓ１９）、処理が終了していなければ、次のマクロブロックに対してステップＳ１０からの処理を繰り返し、終了していれば当該フローを停止する。
【００３５】
（デコーダのブロック構成）
図３は、本発明が適用されたビデオコーデックの復号処理部（ビデオビデオデコーダ１５）の構成図である。
【００３６】
ビデオデコーダ１５は、図３に示すように、符号化ストリーム（Stream）が入力され、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣ規格に対応した復号処理を行い、画素データ（Pixel）を出力する。
【００３７】
ビデオデコーダ１５は、マクロブロック単位で量子化された係数データが入力され、入力されたマクロブロック単位の係数データに対して復号処理を行うＭＢ復号部１６を、複数個備えている。また、ビデオデコーダ１５は、入力された符号化ストリーム（Stream）に対して可変長符号の復号（ＶＬＤ）を行い、量子化された係数データや動きベクトル等を出力するＶＬＤ部１７と、ＭＢ復号部１６により符号化されたマクロブロック単位の画素データに対して、ブロックノイズを除去するデブロッキングフィルタ処理を行うデブロッキングフィルタ１８とを備えている。
【００３８】
各ＭＢ復号部１６（１６-１，１６-２，１６-３，…，１６-ｎ）は、図３に示すように、それぞれ、逆量子化回路２１と、逆離散コサイン変換（ＩＤＣＴ）回路２２と、加算回路２３と、動き補償回路２４と、イントラブロックメモリ２５とを備えている。
【００３９】
逆量子化回路２１には、ＶＬＤ部１７により可変長符号の符号されたデータのうち、係数データ（coef）が入力される。逆量子化回路２１は、データに対して逆量子化処理を行う。
【００４０】
ＩＤＣＴ回路２２は、逆量子化回路２１から出力された係数データ（coef）に対して、逆離散コサイン変換を行い、空間領域の画像データ（pixel）を生成する。
【００４１】
加算回路２３には、ＩＤＣＴ回路２２から出力された画像データ（pixel）が入力される。また、加算回路２３には、入力された画像データがフレーム間の相関を利用した符号化がされたマクロブロックである場合、その予測ブロックが動き補償回路２４又はイントラ予測回路２５から入力される。加算回路２３は、インターマクロブロックに対して処理を行う場合には、入力された画像データに対して予測ブロックを加算する。加算回路２３は、イントラマクロブロックに対して処理を行う場合には、入力された画像データに対して予測ブロックを加算する。加算回路２３は、出力した画像データをデブロッキングフィルタ１８に供給して、デブロッキングフィルタリング処理がされたのち、参照フレームとして図示しないフレームメモリに格納される。
【００４２】
動き補償回路２４は、フレームメモリに格納された参照フレームに対して動きベクトルを参照して動き補償を行い、予測ブロックを生成する。イントラ予測２５は、動き補償を行わずにそのまま予測ブロックとなるイントラマクロブロックが格納されている。マクロブロックのタイプに応じて、動き補償回路２４又はイントラブロックメモリ２５のいずれか一方から出力された予測ブロックが出力され、そのうち、参照画像となる予測ブロックは、加算回路２３に供給される。
【００４３】
以上のような複数のＭＢ復号部１６（１６-１，１６-２，１６-３，…，１６-ｎ）から出力されたマクロブロック単位の全ての画素データ（pixel）は、デブロッキングフィルタ１８に供給される。
【００４４】
（デコーダの処理フロー）
図４は、各ＭＢ復号部１６での処理内容を、フローチャートによって表したものである。
【００４５】
各ＭＢ復号部１６は、１つのマクロブロック（係数データ）が入力されると、まず、そのマクロブロックのタイプを判断して、イントラマクロブロックかインターマクロブロックかを判断する（Ｓ２０）。イントラマクロブロックであれば、予測ブロックの生成は行わず（Ｓ２１）、インターマクロブロックであれば動き補償を行って予測ブロックを生成する（Ｓ２２）。
【００４６】
各ＭＢ復号部１６は、続いて、入力された係数データに対して、逆量子化処理（Ｓ２３）及び逆ＤＣＴ処理（Ｓ２４）を行った後、予測ブロックを加算する（Ｓ２５）。
【００４７】
各ＭＢ復号部１６は、１フレーム内の全てのマクロブロックに対して処理を行ったか否かを判断し（Ｓ２６）、処理が終了していなければ、次のマクロブロックに対してステップＳ２０からの処理を繰り返し、終了していれば当該フローを停止する。
【００４８】
ＭＢ処理エージェント及び状態管理部
動き検出部３は、複数のＭＢ符号化部２（２-１，２-２，２-３，…，２-ｎ）の前処理部として機能している。すなわち、動き検出部３は、マクロブロック単位での処理が行われる前に行われるフレーム単位での符号化処理部である。また、ＶＬＣ部５及びデブロッキングフィルタ４は、複数のＭＢ符号化部２（２-１，２-２，２-３，…，２-ｎ）の後処理部として機能している。すなわち、ＶＬＣ部５及びデブロッキングフィルタ４は、マクロブロック単位での処理が行われた後に行われるフレーム単位での符号化処理部である。
【００４９】
また、ビデオデコーダ１５では、ＶＬＤ部１７は、複数のＭＢ復号部１６（１６-１，１６-２，１６-３，…，１６-ｎ）の前処理部として機能している。すなわち、ＶＬＤ部１７は、マクロブロック単位での処理が行われる前のフレーム単位での復号処理部である。また、ビデオデコーダ１５では、デブロッキングフィルタ１８は、複数のＭＢ復号部１６（１６-１，１６-２，１６-３，…，１６-ｎ）の後処理部として機能している。すなわち、デブロッキングフィルタ１８は、マクロブロック単位での処理が行われた後のフレーム単位での処理部である。
【００５０】
以下説明のため、ＭＢ符号化部２及びＭＢ復号部１６を総称して「ＭＢ処理エージェント３０」といい、動き検出部３、ＶＬＤ部１７を総称して「前処理部３１」といい、ＶＬＣ部５及びデブロッキングフィルタ４及びデブロッキングフィルタ１８を総称して「後処理部３２」という。
【００５１】
ここで、本発明が適用されたビデオコーデックには、図５に示すように、複数のＭＢ処理エージェント３０（３０−１，３０−２，３０−３，…，３０−ｎ）がマクロブロックに対する処理を行う際に、最適なマクロブロックが選択されるように管理を行う状態管理部３３を備えている。
【００５２】
状態管理部３３は、複数のＭＢ処理エージェント３０（３０−１，３０−２，３０−３，…，３０−ｎ）が、それぞれ独立にアクセスがされる。同様に、図５（Ａ）に示すように、ビデオエンコーダ１の前処理部３１（動き検出）及び後処理部３２（ＶＬＣ、デブロッキング）も、それぞれ独立に状態管理部３３に対してアクセスをし、また、図５（Ｂ）に示すように、ビデオデコーダ２の前処理部３１（ＶＬＤ）及び後処理部３２（デブロッキング）も、それぞれ独立に状態管理部３３に対してアクセスをする。
【００５３】
状態管理部
つぎに、状態管理部３３ついて説明をする。
【００５４】
状態管理部３３は、１画面（１フレーム）内に存在しているマクロブロックの、現在の状態を管理するものである。
【００５５】
（アドレッシング例）
状態管理部３３は、画面内のマクロブロックをアドレッシングして、管理を行っている。
【００５６】
１画面内には、図６に示すように、マクロブロックがマトリクス状に配置されている。ここでは、左端の列から（ｘ＋１）番目の列、上端の行から（ｙ＋１）番目の行に位置するマクロブロックのことを（ｘ，ｙ）と表すものとする。従って、１画面に、PicMbWidth列、PicMbHeight行のマクロブロックがマトリクス状に配置されているとすると、画面の左上のマクロブロック、つまり、１列、１行のマクロブロックは（０，０）となる。さらに、画面の右下のマクロブロックは、（PicMbWidth−１，PicMbHeight−１）となる。
【００５７】
（マクロブロックの４つの状態）
状態管理部３３は、以上のようにマトリクス状に配列された個々のマクロブロックが、「イニシャル状態（Ｓ００）」、「準備完了状態（Ｓ０１）」、「実行中状態（Ｓ０２）」又は「処理完了状態（Ｓ０３）」のうちいずれの状態となっているかを管理している。
【００５８】
「イニシャル状態（Ｓ００）」は、初期状態である。イニシャル状態（Ｓ００）となっているマクロブロックは、ＭＢ処理エージェント３０によりなんら処理がされておらず、且つ、前処理部３１による前処理も完了していない。ＭＢ処理エージェント３０は、イニシャル状態（Ｓ００）のマクロブロックに対しては、まだ処理（すなわち、符号化又は復号）を行うことができない。
【００５９】
「準備完了状態（Ｓ０１）」は、前処理部３１による前処理が完了し、処理（符号化又は復号）が開始可能な状態である。準備完了状態（Ｓ０１）となっているマクロブロックは、前処理部３１により前処理が完了しているが、まだ、ＭＢ処理エージェント３０によりなんら処理がされていない。ＭＢ処理エージェント３０は、準備完了状態（Ｓ０１）のマクロブロックに対しては、処理（符号化又は復号）を行うことが可能である。
【００６０】
「実行中状態（Ｓ０２）」は、いずれか一つのＭＢ処理エージェント３０によって処理（符号化又は復号）が行われている最中の状態である。実行中状態（Ｓ０２）となっているマクロブロックは、ＭＢ処理エージェント３０により符号化又は復号処理が開始されているが、ＭＢ処理エージェント３０による処理は完了していない。ＭＢ処理エージェント３０は、実行中状態（Ｓ０２）のマクロブロックに対しては、新たに処理（符号化又は復号）開始をすることはできない。
【００６１】
「処理完了状態（Ｓ０３）」は、ＭＢ処理エージェント３０によって処理（符号化又は復号）が完了し、後処理の開始が可能な状態である。処理完了状態（Ｓ０３）となっているマクロブロックは、ＭＢ処理エージェント３０による符号化又は復号処理が完了しており、後処理部３２による後処理の開始が可能となっている。ＭＢ処理エージェント３０は、処理完了状態（Ｓ０３）のマクロブロックに対しては、新たに処理（符号化又は復号）開始をすることはできない。
【００６２】
状態管理部３３に対してアクセスをする各ＭＢ処理エージェント３０、前処理部３１及び後処理部３２は、各マクロブロックのそれぞれの状態を参照することができる。さらに、各ＭＢ処理エージェント３０、前処理部３１及び後処理部３２は、必要に応じて、各状態を遷移させることもできる。
【００６３】
（ある任意のマクロブロックの状態遷移）
図７は、ある任意の１つのマクロブロックの状態遷移を示すステートチャートである。
【００６４】
まず、ある画面の符号化又は復号が開始されると、そのマクロブロックの状態は、イニシャル状態（Ｓ００）に遷移する。
【００６５】
イニシャル状態（Ｓ００）のときには、そのマクロブロックは、前処理部３１によって前処理が行われている。そのマクロブロックに対する前処理が完了すると、そのマクロブロックの状態は、イニシャル状態（Ｓ００）から準備完了状態（Ｓ０１）に遷移する。
【００６６】
ＭＢ処理エージェント３０は、準備完了状態（Ｓ０１）となっているマクロブロックを検索し、準備完了状態（Ｓ０１）となっているマクロブロックを見つけ出すと、そのマクロブロックに対して処理（符号化又は復号）を開始する。そのマクロブロックに対して符号化又は復号が開始されると、そのマクロブロックの状態は、準備完了状態（Ｓ０１）から実行中状態（Ｓ０２）に遷移する。
【００６７】
実行中状態（Ｓ０２）のときには、そのマクロブロックは、いずれか一つのＭＢ処理エージェント３０によって処理が行われている。そのマクロブロックに対する処理（符号化又は復号）が終了すると、そのマクロブロックの状態は、実行中状態（Ｓ０２）から処理完了状態（Ｓ０３）に遷移する。
【００６８】
処理完了状態（Ｓ０３）のときには、そのマクロブロックは、後処理部３２によって後処理が行われている。そのマクロブロックに対する後処理が完了すると、そのマクロブロックの状態は、処理完了状態（Ｓ０３）からイニシャル状態（Ｓ００）に戻される。
【００６９】
状態管理部３３では、以上のような状態遷移に従って、各マクロブロックの状態を管理している。
【００７０】
（スライス内における状態の関係、これを利用したテーブル表現）
ＭＰＥＧ-２、ＭＰＥＧ-４及びＨ．２６４／ＭＰＥＧ−４ＡＶＣ規格では、各マクロブロックは、必ず、左横のマクロブロックに依存関係を有している。
【００７１】
従って、ある任意のマクロブロックの状態が「準備完了状態（Ｓ０１）」であったとしても、少なくとも左横のマクロブロックの処理完了状態（Ｓ０３）となっていなければ、絶対に「実行中状態（Ｓ０２）」に遷移できない。すなわち、マトリクス状に配置された１画面内のマクロブロックの状態を、横に並んだ一群（スライス）単位で見ると、図８（Ａ）に示すように、左隣のマクロブロックの状態は、同じ状態であるか又は進んだ状態となっている。更に換言すれば、スライス単位でマクロブロックを見たときに、左端のマクロブロックから状態が進行していく。
【００７２】
状態管理部３３は、以上の状態の進行規則を利用して、スライス毎に、マクロブロックの状態の進行度合いを管理するようにしている。
【００７３】
具体的には、図８（Ｂ）に示すように、状態管理部３３は、画面内の各スライスのアドレスに対して、準備完了状態（Ｓ０１）の終端位置、実行中状態（Ｓ０２）の終端位置、処理完了状態（Ｓ０３）の終端位置を示したテーブルとなっている。
【００７４】
準備完了状態（Ｓ０１）の終端位置とは、具体的には、準備完了状態（Ｓ０１）のマクロブロックのうちの最も右端にあるマクロブロックの、画面左端から数えたときの数である。
【００７５】
実行中状態（Ｓ０２）の終端位置とは、具体的には、実行中状態（Ｓ０２）のマクロブロックのうちの最も右端にあるマクロブロックの、画面左端から数えたときの数である。
【００７６】
処理完了状態（Ｓ０３）の終端位置とは、具体的には、処理完了状態（Ｓ０３）のマクロブロックのうちの最も右端にあるマクロブロックの、画面左端から数えたときの数である。
【００７７】
状態管理部３３は、以上のように管理することによって、各マクロブロックの状態を管理するために必要とするメモリ容量を小さくすることが可能となる。
【００７８】
なお、以下、状態管理部３３で管理している情報内容を表現するにあたり、次のような式表現を用いるものとする。
【００７９】
ＳＴ［Ｓ♯］［ｙ］    …（１１）
式（１１）において、♯は、０１、０２、０３のいずれかの値であり、ｙは０以上の整数である。
【００８０】
この式（１１）が示す意味は、行番号Ｙ（スライスアドレス＝Ｙ）に対する、状態“♯”となっているマクロブロックの、最も右にある終端位置を示している。
【００８１】
例えば、下記式（１２）のような表現がされているとする。
【００８２】
ＳＴ［Ｓ０１］［２］    …（１２）
式（１２）の値は、２行目の準備完了状態（Ｓ０１）のマクロブロックのうち、最も右端にあるマクロブロックの画面左端から数えたときの数を示すこととなる。例えば、図８の例であれば、ＳＴ［Ｓ０１］［２］＝４となる。
【００８３】
コーデックの処理フロー
つぎに、本発明が適用されたビデオコーデックの処理手順について具体的に説明をする。
【００８４】
（メインフロー）
図９に、本発明が適用されたビデオコーデックのメインフローを示す。
【００８５】
本発明が適用されたビデオコーデックは、フレームの符号化又は復号処理が開始されると、ステップＵ１から処理を開始する。
【００８６】
まず、ステップＵ１において、状態管理部３３は、全てのマクロブロックの状態を、イニシャル状態（Ｓ００）とする。
【００８７】
続いて、ステップＵ２において、前処理部３１が前処理を開始する。
【００８８】
続いて、ステップＵ３において、全てのＭＢ処理エージェント３０により符号化又は復号の処理が開始される。
【００８９】
続いて、ステップＵ４において、後処理部３２が後処理を開始する。
【００９０】
そして、本発明が適用されたビデオコーデックは、ステップＵ５において、後処理部３２から処理終了通知が発生されたか否かを判断し、処理終了通知が発生されたと判断すると、当該フレームの符号化又は復号の処理を終了する。
【００９１】
（前処理フロー）
図１０に、上記メインフローのうちの前処理（ステップＵ２）の具体的な処理フローを示す。
【００９２】
なお、前処理の処理フローの説明に用いる変数は次の通りである。
（Ｘａ，Ｙａ）：前処理の対象となっているマクロブロック
ｓｔａ：前処理が可能であるか否かを示すフラグ
１ならば前処理可能、０ならば前処理不可能
ｅｎｄａ：前処理を終了することを示すフラグ
１ならば前処理終了、０ならば前処理は終了しない。
【００９３】
まず、ステップＵ２１において、前処理部３１は、前処理の対象となる１つのマクロブロック（Ｘａ，Ｙａ）を決定する。前処理部３１は、１フレーム（画面）内の全てのマクロブロックのうち、１つのマクロブロックを選択する。選択は、画面左上のマクロブロックから開始して、左から右へ上から下へというように、いわゆるラスタスキャンの順序に従って、１つずつ選択してゆく。なお、マクロブロック（Ｘａ，Ｙａ）が、画面内の最終マクロブロック（右下）を超えたら、フラグｅｎｄａを１とし、超えていなければフラグｅｎｄａを０とする。
【００９４】
続いて、ステップＵ２２において、前処理部３１は、フラグｅｎｄａが１か否かを判断する。フラグｅｎｄａが１であれば、当該前処理のフローを抜けて、処理を終了する。フラグｅｎｄａが０であれば、続くステップＵ２３に進む。
【００９５】
続いて、ステップＵ２３において、前処理部３１は、マクロブロック（Ｘａ，Ｙａ）が前処理が可能となっているか否かを調査する。前処理部３１は、調査した結果、前処理が可能となっていれば、フラグｓｔａに１を代入し、前処理が可能となっていなければ、フラグｓｔａに０を代入する。
【００９６】
続いて、ステップＵ２４において、前処理部３１は、フラグｓｔａが１か否かを判断する。フラグｓｔａが０であれば、ステップＵ２１に戻る。フラグｓｔａが１であれば、続くステップＵ２５に進む。
【００９７】
続いて、ステップＵ２５において、前処理部３１は、マクロブロック（Ｘａ，Ｙａ）に対して、前処理を行う。
【００９８】
続いて、ステップＵ２６において、前処理部３１は、状態管理部３３にアクセスを行い、マクロブロック（Ｘａ，Ｙａ）の状態を、イニシャル状態（Ｓ００）から準備完了状態（Ｓ０１）に遷移させる。すなわち、以下の式（２１）の処理を行う。式“Ａ＋＝１”は、Ａの値を１増加させる演算を意味している。
【００９９】
ＳＴ［０１］［Ｙａ］＋＝１      …（２１）
ステップＵ２６の処理が終了すると、前処理部３１は、ステップＵ２１に戻り、次のマクロブロックに対して、ステップＵ２１からステップＵ２６の処理を行う。
【０１００】
（ＭＢ処理エージェントの処理フロー）
図１１に、上記メインフローのうちのＭＢ処理エージェントによる符号化又は復号の処理（ステップＵ３）の具体的な処理フローを示す。
【０１０１】
なお、以下の説明では、ＭＢ処理エージェント＃０の処理フローについて行うが、他のＭＢ処理エージェント（♯１〜♯（ｎ―１））も同様の処理を行う。さらに、全てのＭＢ処理エージェント（♯０〜♯（ｎ―１））は、それぞれ独立に、並行して処理を行っている。
【０１０２】
ＭＢ処理エージェントの処理フローの説明に用いる変数は次の通りである。
【０１０３】
PicMbHeight     ：１画面（フレーム）の縦のマクロブロック数
PicMbWidth      ：１画面（フレーム）の横のマクロブロック数
ＭＢ処理エージェント毎に異なる変数
（Ｘ０，Ｙ０）：ＭＢ処理エージェント＃０の符号化又は復号の対象となるマクロブロッ
ク
ｓｔ０：ＭＢ処理エージェント＃０が符号化又は復号可能であるか否かを示すフ
ラグ
１ならば符号化又は復号可能、０ならば符号化又は復号不可能
ｅｎｄ０：ＭＢ処理エージェント＃０の符号化又は復号の終了を示すフラグ
１ならば符号化又は復号終了、０ならば符号化又は復号は終了しない。
【０１０４】
まず、ステップＵ３１において、ＭＢ処理エージェント３０は、符号化又は復号の対象となる１つのマクロブロック（Ｘ０，Ｙ０）を決定する。ＭＢ処理エージェント３０は、１フレーム（画面）内の全てのマクロブロックのうち、１つのマクロブロックを選択する。また、ＭＢ処理エージェント３０は、マクロブロック（Ｘ０，Ｙ０）が、画面内の全てのマクロブロックに対して符号化又は復号を終えたら、フラグｅｎｄ０を１とし、超えていなければフラグｅｎｄ０を０とする。
【０１０５】
なお、このステップＵ３１の処理の詳細は、後述する。
【０１０６】
続いて、ステップＵ３２において、ＭＢ処理エージェント３０は、フラグｅｎｄ０が１か否かを判断する。フラグｅｎｄ０が１であれば、当該符号化又は復号のフローを抜けて、処理を終了する。フラグｅｎｄ０が０であれば、続くステップＵ３３に進む。
【０１０７】
続いて、ステップＵ３３において、ＭＢ処理エージェント３０は、マクロブロック（Ｘ０，Ｙ０）が符号化又は復号が可能となっているか否かを調査する。ＭＢ処理エージェント３０は、調査した結果、符号化又は復号が可能となっていれば、フラグｓｔ０に１を代入し、符号化又は復号が可能となっていなければ、フラグｓｔ０に０を代入する。
【０１０８】
なお、このステップＵ３３の処理の詳細も後述する。
【０１０９】
続いて、ステップＵ３４において、ＭＢ処理エージェント３０は、フラグｓｔ０が１か否かを判断する。フラグｓｔ０が０であれば、ステップＵ３１に戻る。フラグｓｔ０が１であれば、続くステップＵ３５に進む。
【０１１０】
続いて、ステップＵ３５において、ＭＢ処理エージェント３０は、状態管理部３３にアクセスを行い、マクロブロック（Ｘ０，Ｙ０）の状態を、準備完了状態（Ｓ０１）から実行中状態（Ｓ０２）に遷移させる。すなわち、以下の式（２２）の処理を行う。
【０１１１】
ＳＴ［０２］［Ｙ０］＋＝１      …（２２）
続いて、ステップＵ３６において、ＭＢ処理エージェント３０は、マクロブロック（Ｘ０，Ｙ０）に対して、マクロブロック単位の符号化又は復号を行う。
【０１１２】
ステップＵ３６の処理が完了すると、ステップＵ３７において、ＭＢ処理エージェント３０は、状態管理部３３にアクセスを行い、マクロブロック（Ｘ０，Ｙ０）の状態を、実行中状態（Ｓ０２）から処理完了状態（Ｓ０３）に遷移させる。すなわち、以下の式（２３）の処理を行う。
【０１１３】
ＳＴ［０３］［Ｙ０］＋＝１      …（２３）
ステップＵ３７の処理が終了すると、ＭＢ処理エージェント３０は、ステップＵ３１に戻り、次のマクロブロックに対して、ステップＵ３１からステップＵ３７の処理を行う。
【０１１４】
（処理対象マクロブロックの決定処理）
図１２に、ＭＢ処理エージェントの処理のうちのマクロブロック（Ｘ０，Ｙ０）の決定処理（ステップＵ３１）の具体的な処理フローを示す。
【０１１５】
まず、ステップＵ３１１において、ＭＢ処理エージェント３０は、変数ｃｎｔに０を代入する。なお、変数ｃｎｔは、当該マクロブロック決定処理で１つのマクロブロックを決定する際に、検索したマクロブロック数を示している。
【０１１６】
続いて、ステップＵ３１２において、ＭＢ処理エージェント３０は、下記式（２４）が真であるか、偽であるかを判断する。
{ ST[S01][Y0]>=(X0+1) } AND { X0<PicMbWidth } AND { cnt0 ≠ 1 }  …（２４）
この式（２４）において、ST[S01][Y0]>(X0+1)は、現在対象となっているマクロブロック（Ｘ０，Ｙ０）の一つ右隣のマクロブロックが、準備完了状態（Ｓ０１）となっていれば真である。X0<PicMbWidthは、現在対象となっているマクロブロック（Ｘ０，Ｙ０）が画面の右端のマクロブロックでなければ真である。cnt0 ≠ 1は、当該マクロブロック決定処理での検索マクロブロック数が１つでなければ真である。
【０１１７】
ＭＢ処理エージェント３０は、式（２４）が真であれば、ステップＵ３１４に進み、偽であればステップＵ３１３に進む。
【０１１８】
続いて、ステップＵ３１３において、ＭＢ処理エージェント３０は、“Ｙ０”の値を０とする。つまり、検索するマクロブロック（Ｘ０，Ｙ０）を、画面の一番上の列に設定する。
【０１１９】
続いて、ステップＵ３１４において、ＭＢ処理エージェント３０は、下記式（２５）が真であるか、偽であるかを判断する。
ST[S03][ PicMbHeight-1 ]>= PicMbWidth  …（２５）
式（２５）は、最下行のスライスが、全て処理完了状態（Ｓ０３）となっていれば真である。すなわち、当該画面（フレーム）の全てのマクロブロックに対して符号化又は復号が完了しているか否かを意味している。
【０１２０】
ＭＢ処理エージェント３０は、まだ全てのマクロブロックの符号化又は復号が完了していなければ、ステップＵ３１５に進みフラグｅｎｄ０に０を代入し、ステップＵ３１７に進む。
【０１２１】
ＭＢ処理エージェント３０は、全てのマクロブロックの符号化又は復号が完了していれば、ステップＵ３１６に進みフラグｅｎｄ０に１を代入し、ステップＵ３１１０に進む。
【０１２２】
続いて、ステップＵ３１７において、ＭＢ処理エージェント３０は、下記式（２６）が真であるか、偽であるかを判断する。
ST[S03][ Y0 ]>= PicMbWidth  …（２６）
式（２６）は、現在対象となっているマクロブロック（Ｘ０，Ｙ０）が含まれているスライスが、全て符号化又は復号が完了していれば真である、ことを意味している。
【０１２３】
ＭＢ処理エージェント３０は、現在対象となっているマクロブロック（Ｘ０，Ｙ０）が含まれているスライスが、まだ符号化又は復号が完了していなければ、ステップＵ３１１０に進む。
【０１２４】
ＭＢ処理エージェント３０は、現在対象となっているマクロブロック（Ｘ０，Ｙ０）が含まれているスライスが、全て符号化又は復号が完了していれば、ステップＵ３１８において、ｙ０を１増加させ、続いて、ステップＵ３１９において、変数ｃｎｔを１増加させ、ステップＵ３１２に戻り、ステップＵ３１２からＵ３１９までの処理を繰り返し行う。
【０１２５】
また、ステップＵ３１１０において、ＭＢ処理エージェント３０は、Ｘ０に下記式（２７）の値を代入し、処理を終了する。
X0 =  ST[03][Y0] -1 …（２７）
以上のステップＵ３１１からＵ３１１０までの処理の結果、ＭＢ処理エージェントの符号化又は復号対象マクロブロック（Ｘ０，Ｙ０）を決定することができる。
【０１２６】
具体的には、以上のステップＵ３１１からＵ３１１０までの処理の結果、ＭＢ処理エージェント３０は、図１３に示すように検索が行われることとなる。
【０１２７】
すなわち、ＭＢ処理エージェント３０によってあるマクロブロック４１に対して符号化又は復号処理を行ったとする。ＭＢ処理エージェント３０は、次のマクロブロックに対して処理をする際に、まず、直前に処理をしたマクロブロック４１の右隣のマクロブロック４２が処理可能であるか否かを調査する。もし、その右隣のマクロブロック４２が処理不可能であれば、最も上のスライスに移動し、そこから１つずつ順番に下のスライスに移動して、処理可能なマクロブロックがあるか否かを調査していく。
【０１２８】
このように処理するのは次の理由による。
【０１２９】
現在対象となっているマクロブロック（Ｘ０，Ｙ０）は、自身（ＭＢ処理エージェント３０）により符号化又は復号を完了しているので、右隣のマクロブロックが処理可能である可能性は、非常に高い。従って、まず、ＭＢ処理エージェント３０では、右隣のマクロブロックの調査を行っている。さらに、同じスライスであれば、符号化又は復号処理時においてヘッダ情報を更新しなくても良いため、右隣のマクロブロックから検索するのは望ましい。
【０１３０】
さらに、ＭＰＥＧ−４及びＨ．２６４／ＭＰＥＧ−４ＡＶＣの場合、その依存関係により、右上から左下に向かって処理が進んでいくので、なるべく上から下へ処理が完了していくようにマクロブロックを選択していくほうが望ましい。
【０１３１】
という理由からである。
【０１３２】
従って、本例のように処理を進めていくことに、効率的に処理を進行させることができる。
【０１３３】
なお、ＭＢ処理エージェント３０は、１画面全体にわたって調査処理が可能か否かを判断しているが、図１４のように、例えば、調査をする最も下のスライス位置を規定しておき、それより下のスライスに対しては選択をしないようにしてもよい。このように選択範囲を規定することにより、符号化又は復号が完了したマクロブロックを保持しておくメモリの容量を削減することが可能となる。
【０１３４】
（処理対象マクロブロックの決定処理）
図１５に、決定されたマクロブロック（Ｘ０，Ｙ０）が、符号化又は復号が可能となっているか否かの調査処理（ステップＵ３３）の具体的な処理フローを示す。
【０１３５】
まず、ＭＰＥＧ-４及びＨ．２６４／ＭＰＥＧ−４ＡＶＣ規格の場合、（Ｘ，Ｙ）のマクロブロックを処理できる条件は、図１５の表の上欄に示すように、左横、左斜上、上及び右斜上のマクロブロックの符号化又は復号処理が完了していることである。
【０１３６】
従って、（Ｘ，Ｙ）のマクロブロックを処理できる条件は、
・右斜上のマクロブロックの符号化又は復号が完了していること。すなわち、T[03][Y-1]>X+1が真であること。
・左横のマクロブロックの符号化又は復号が完了していること。すなわち、T[03][Y]>X-1が真であること。
・自身のマクロブロックが符号化又は復号の準備が完了していること。すなわち、T[01][Y]>Xが真であること。
となる。
【０１３７】
このため、ＭＰＥＧ-４及びＨ．２６４／ＭＰＥＧ−４ＡＶＣの符号化又は復号を行う場合であれば、図１５の表右上のフロー（Ｕ３３１）に示すように、ＭＢ処理エージェント３０は、状態管理部３３を参照して下記式（２６）が真であるか否かを求める。真であれば、フラグｓｔ０を１とし、偽であれば、フラグｓｔ０を０とする。
{ ST[S03][Y-1]>(X+1) } AND { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２６）
また、ＭＰＥＧ-２の場合、（Ｘ，Ｙ）のマクロブロックを処理できる条件は、図１５の表の下欄に示すように、左横のマクロブロックの符号化又は復号処理が完了していることである。
【０１３８】
従って、（Ｘ，Ｙ）のマクロブロックを処理できる条件は、
・左横のマクロブロックの符号化又は復号が完了していること。すなわち、T[03][Y]>X-1が真であること。
・自身のマクロブロックが符号化又は復号の準備が完了していること。すなわち、T[01][Y]>Xが真であること。
となる。
【０１３９】
このため、ＭＰＥＧ-２の符号化又は復号を行う場合であれば、図１５の表右下のフロー（Ｕ３３２）に示すように、ＭＢ処理エージェント３０は、状態管理部３３を参照して下記式（２７）が真であるか否かを求める。真であれば、フラグｓｔ０を１とし、偽であれば、フラグｓｔ０を０とする。
{ { ST[S03][Y]>(X-1) } AND { ST[S01][Y]>X } …（２７）
ＭＢ処理エージェント３０は、ＭＰＥＧ−２、ＭＰＥＧ−４又はＨ．２６４／ＭＰＥＧ−４ＡＶＣのうち、いずれの符号化方式で処理を行うかによって、ステップＵ３３１又はステップＵ３３２のいずれかを選択する。このため、ＭＢ処理エージェント３０では、その他のステップの内容を変えずに、このステップＵ３３のみを切り替えれば、いずれの符号化規格にも対応することが可能となる。
【０１４０】
（後処理フロー）
図１６に、上記メインフローのうちの後処理（ステップＵ５）の具体的な処理フローを示す。
【０１４１】
なお、後処理の処理フローの説明に用いる変数は次の通りである。
（Ｘｂ，Ｙｂ）：後処理の対象となっているマクロブロック
ｓｔｂ：後処理が可能であるか否かを示すフラグ
１ならば後処理可能、０ならば後処理不可能
ｅｎｄｂ：後処理を終了することを示すフラグ
１ならば後処理終了、０ならば後処理は終了しない。
【０１４２】
まず、ステップＵ５１において、後処理部３１は、後処理の対象となる１つのマクロブロック（Ｘｂ，Ｙｂ）を決定する。後処理部３１は、１フレーム（画面）内の全てのマクロブロックのうち、１つのマクロブロックを選択する。選択は、画面左上のマクロブロックから開始して、左から右へ上から下へというように、いわゆるラスタスキャンの順序に従って、１つずつ選択してゆく。なお、マクロブロック（Ｘｂ，Ｙｂ）が、画面内の最終マクロブロック（右下）を超えたら、フラグｅｎｄｂを１とし、超えていなければフラグｅｎｄｂを０とする。
【０１４３】
続いて、ステップＵ５２において、後処理部３１は、フラグｅｎｄｂが１か否かを判断する。フラグｅｎｄｂが１であれば、当該後処理のフローを抜けて、処理を終了する。フラグｅｎｄｂが０であれば、続くステップＵ５３に進む。
【０１４４】
続いて、ステップＵ５３において、後処理部３１は、マクロブロック（Ｘｂ，Ｙｂ）が後処理が可能となっているか否かを調査する。後処理部３１は、調査した結果、後処理が可能となっていれば、フラグｓｔｂに１を代入し、後処理が可能となっていなければ、フラグｓｔｂに０を代入する。
【０１４５】
続いて、ステップＵ５４において、後処理部３１は、フラグｓｔｂが１か否かを判断する。フラグｓｔｂが０であれば、ステップＵ５１に戻る。フラグｓｔｂが１であれば、続くステップＵ５５に進む。
【０１４６】
続いて、ステップＵ５５において、後処理部３１は、マクロブロック（Ｘｂ，Ｙｂ）に対して、後処理を行う。
【０１４７】
続いて、ステップＵ５６において、後処理部３１は、状態管理部３３にアクセスを行い、マクロブロック（Ｘｂ，Ｙｂ）の状態を、処理完了状態（Ｓ０３）からイニシャル状態（Ｓ００）に遷移させる。すなわち、以下の式（２８）の処理を行う。
【０１４８】
ＳＴ［００］［Ｙｂ］＋＝１      …（２８）
ステップＵ５６の処理が終了すると、後処理部３１は、ステップＵ５１に戻り、次のマクロブロックに対して、ステップＵ５１からステップＵ５６の処理を行う。
【０１４９】
（処理結果）
本発明が適用されたビデオコーデックでは、以上のように処理を行うことによって、ＭＰＥＧ−４又はＨ．２６４／ＭＰＥＧ−４ＡＶＣに対して処理を行う場合であれば、図１７に示すように、斜めに方向に同時に処理が進行していく。
【０１５０】
つまり、各ＭＢ処理エージェント３０は、スライスに対して左から順番に１つずつ符号化又は復号を行う。それととともに、１つ上のスライスに対して、マクロブロック１つ分以上遅れたタイミングで符号化又は復号を行っている。
【０１５１】
ＭＰＥＧ−４又はＨ．２６４／ＭＰＥＧ−４ＡＶＣ等の、左横、左斜上、上、右斜上に依存するマクロブロックの符号化又は復号がされた画像符号化規格に対して処理を行う場合であっても、横方向のマクロブロック数の１／２の並列度を実現でき、最も効率的な並列処理を行うことができる。
【０１５２】
また、さらに、ＭＰＥＧ−２のような左横のみに依存するマクロブロックの符号化又は復号がされた画像符号化規格に対して処理をする場合であっても、ステップＵ３３の調査処理の内容のみを変更すればよい。この場合、図１８に示すように、スライスに対して左から順番に１つずつ符号化又は復号が進行していくので、縦方向のマクロブロック数の並列度を実現でき、やはり最も効率的な並列処理を行うことができる。
【０１５３】
（処理対象マクロブロックの決定処理（第２の例））
つぎに、処理対象マクロブロックの決定処理（ステップＵ３１）の第２の処理例について説明をする。
【０１５４】
図１２のステップＵ３１１〜Ｕ３１１０で示した方法では、各ＭＢ処理エージェント３０が処理可能なマクロブロックをピクチャ全体から探し出し、その処理可能なマクロブロックがピクチャのどこに位置していてもよい、という検索例を示した。
【０１５５】
しかしながら、このような方法の他に、以下に説明するように、１ピクチャ内のマクロブロックが処理されていく順序を一意に予め決めておき、各ＭＢ処理エージェント３０がその順序に従いマクロブロックを検索して、処理を行っていくようにしてもよい。
【０１５６】
例えば、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣの場合、任意のマクロブロックに対する符号化又は復号処理は、そのマクロブロックの左横、左斜上、上、右斜上のマクロブロックに依存する。このため、図１９に示すように、ある任意のマクロブロックに対して符号化又は復号処理がされた直後には、原則的に、その任意のマクロブロックの１つの下の行であって、２つ左側の列のマクロブロックに対して、処理が行われるのが望ましい。
【０１５７】
このことに鑑み、本例では、図２０（Ａ）に示すように、画面の左上のマクロブロックから開始し、原則的に、ある任意のマクロブロックに対して処理がされた次は、その任意のマクロブロックの１つの下の行であって２つ左側の列のマクロブロックに対して検索が行われるように、一意的に走査順序を決めておく。さらに、図２０（Ｂ）に示すように、もし、１つの下の行であって２つ左側の列が領域を超えてしまい、マクロブロックが存在しない場合には、まだ処理をしていないマクロブロック群のうちの、最も上のスライス（行）の最も左のマクロブロックに対して、検索がされるように走査順序の規則を決めておく。
【０１５８】
このように検索の走査順序を決定しておくことによって、各行を見ると、右端から左端に向かい順番に１つずつマクロブロックに対する符号化又は復号処理が進行していき、行の上下関係を見ると、１つ上の行において処理されているマクロブロックよりも２マクロブロック分遅れたタイミング（２マクロブロック分左側に位置するタイミング）で、処理が行われていく。
【０１５９】
従って、図２１に示すように、処理済みのマクロブロックと未処理のマクロブロックとの境界が階段状となり、符号化又は復号処理が階段状に並列して進んでいく。そして、その階段状の並列処理が、左上位置から右下方向に進行していくこととなる。
【０１６０】
以上のように、各ＭＢ処理エージェント３０は、１ピクチャ内のマクロブロックが処理されていく順序を一意に予め決めておき、その順序に従いマクロブロックを検索して、処理可能なマクロブロックを見つけ出し、見つけ出したマクロブロックに対して符号化又は復号処理を行っていく。このことによって状態管理部３３は、どのＭＢ処理エージェント３０（３０−ｎ）がどのマクロブロックに対して処理を行っているかを知る必要がないので、状態管理部３３の実装が容易となる。さらに、１つの下の行であって２つ左側の列を選択することによって、Ｈ．２６４/ＭＰＥＧ-４ＡＶＣのようなマクロブロックの依存関係を有する場合には、最も効率よく並列処理を進行させることができ、処理速度を向上させることができる。
【０１６１】
以下、検索のための走査順序を予め一意に決めておく場合における、各ＭＢ処理エージェント３０がマクロブロック（Ｘ０，Ｙ０）の決定を行う処理（ステップＵ３１）について、さらに具体的に説明をする。
【０１６２】
まず、処理フローの説明に用いる変数等について説明をする。
【０１６３】
各ＭＢ処理エージェント３０で共通な値をもつ変数は次の通りである。
【０１６４】
PicMbHeight：１画面（フレーム）の縦のマクロブロック数
PicMbWidth：１画面（フレーム）の横のマクロブロック数
ParallelMbHeight :階段状に並列処理を行うために分割した領域の行数
StepMbWidth:階段状に並列処理を進行させていくために、１行下に下がったときに左側にマクロブロックをずらす際のずらし数
Sx,Sy：並列処理を行う複数の分割領域を、水平方向に展開して形成された仮想領域上におけるマクロブロックの仮想アドレス
Sx0:上記仮想領域上において斜め処理をされる際の、一番上のスライスにおいて選択されているマクロブロックの列方向のアドレス
また、ＭＢ処理エージェント毎に異なる変数は次の通りである。
X0,Y0：ＭＢ処理エージェント＃０の符号化又は復号の対象となるマクロブロッ                ク
st0：ＭＢ処理エージェント＃０が符号化又は復号可能であるか否かを示すフラグ
１ならば符号化又は復号可能、０ならば符号化又は復号不可能
end0：ＭＢ処理エージェント＃０の符号化又は復号の終了を示すフラグ
１ならば符号化又は復号終了、０ならば符号化又は復号は終了しない
base0：階段状に並列処理を行うために分割した領域の一番上の行の行アドレス
【０１６５】
以上の変数について、図面を参照してさらに具体的に説明をする。
【０１６６】
図２２に示すように、PicMbHeightは、１画面の縦のマクロブロック数（１画面のスライス数）を示し、PicMbWidthは、１画面の横のマクロブロック数（列数）を示している。
【０１６７】
本例では、図２２に示すように、１ピクチャ内を所定の行毎に縦方向に複数の領域に分割をして、各領域毎に階段状の並列処理を行う。このように画面を分割して処理をすると、符号化又は復号した後の処理結果を保存しておくメモリ容量を少なくすることがきるからである。具体的に、ピクチャ内が上から、第１、第２、第３の領域に３分割されていたとすると、図２３のＡ→図２３のＢ→図２３のＣといったように、第１の領域の全てのマクロブロックに対して階段状に並列処理を行い、続いて、第２の領域、その次に、第３の領域といったように、領域単位に処理が進行していく。ParallelMbHeightは、このように領域分割をした際の各領域の縦の長さ、すなわち、並列処理を行う際における各領域の行数（スライス数）である。
【０１６８】
また、ｂａｓｅ０は、図２２に示すように、各分割領域の一番上のスライスの位置を示す変数である。
【０１６９】
また、本例では、図２２に示すように、ある任意のマクロブロックに対して処理がされると、その次に処理がされるのは、原則的に、一つ下の行の所定数左側に位置するマクロブロックである。StepMbWidthは、このような処理を行う際における左側にずらすマクロブロックの数である。本例では、StepMbWidthが“２”である場合を例にとって説明をするが、この値は２に限らず、０以上の整数であればよい。
【０１７０】
また、本例では、図２４（Ａ）に示すように本来垂直方向に並んでいる分割領域を、図２４（Ｂ）に示すように水平方向に仮想的に展開した仮想領域を形成し、当該仮想領域上で階段状の並列処理を行っていく。このように仮想領域で展開することによって、効率的に階段状の並列処理が可能となる。（Ｓｘ，Ｓｙ）は、現在検索されているマクロブロックの仮想領域上におけるアドレスである。Ｓｘは、仮想領域のマクロブロックの行アドレス（垂直方向のアドレス）であり、Ｓｙは、仮想領域の列アドレス（水平方向のアドレス）である。また、Ｓｘ０は、図２４（Ｂ）に示すように、分割領域を水平方向に展開した仮想領域上で、階段状の並列処理を行っている際に、現在処理中の斜め列における仮想領域上での一番上のスライスの列位置（つまり、水平位置：斜め処理の開始位置）を示す変数である。
【０１７１】
図２５に、ＭＢ処理エージェントのマクロブロック（Ｘ０，Ｙ０）の決定処理（ステップＵ３１）の具体的な処理フローを示す。
【０１７２】
マクロブロック（Ｘ０，Ｙ０）の決定処理が開始されると、まず、ステップＵ３２１において、ＭＢ処理エージェント３０は、仮想アドレス（Ｓｘ，Ｓｙ）により特定される現在検索中のマクロブロックが、実行中状態（Ｓ０２）又は処理完了状態（Ｓ０３）であるか否かを判断する。実行中状態（Ｓ０２）又は処理完了状態（Ｓ０３）であれば、ステップＵ３２２の（ｘ０，ｙ０）生成処理に進み、実行中状態（Ｓ０２）又は処理完了状態（Ｓ０３）でなければ、ステップＵ３２３の終了判断処理に進む。
【０１７３】
このステップＵ３２１の処理は、あるＭＢ処理エージェント３０が処理を行うマクロブロックを決定する際に、処理対象とされるマクロブロックの一つ手前のマクロブロック（原則的には、一つ上のスライスの２つ右側の列に位置するマクロブロック）が、実行中であるか又は処理完了していない限り、次のマクロブロックの位置が与えられず、現在検索中のマクロブロックを、そのＭＢ処理エージェント３０が処理するマクロブロック位置（Ｘ０，Ｙ０）として与えることを意味している。
【０１７４】
ステップＵ３２２の（ｘ０，ｙ０）生成処理では、処理対象となるマクロブロックの位置（Ｘ０，Ｙ０）が計算される。ステップＵ３２２の処理を終えると、ステップＵ３２３の終了判断処理に進む。
【０１７５】
ステップＵ３２３の終了判断処理では、１ピクチャ内の処理が全て完了したか否かを判断する。ステップＵ３２３の終了判断処理を終えると、当該マクロブロック（Ｘ０，Ｙ０）の決定処理が終了し、メインフローに戻る。
【０１７６】
図２６に、ステップＵ３２２の（ｘ０，ｙ０）生成処理の処理フローを示す。
【０１７７】
まず、ステップＵ３２２-１において、ＭＢ処理エージェント３０は、以下の式（３１）,（３２）の演算を行う。
Ｓｘ＝Ｓｘ−StepMbWidth  …（３１）
Ｓｙ＝Ｓｙ＋１           …（３２）
【０１７８】
すなわち、ＭＢ処理エージェント３０は、水平方向の仮想アドレスＳｘを、左側にずらすマクロブロック数であるStepMbWidthを減算するとともに、垂直方向の仮想アドレスＳｙに１を加算する。つまり、このステップＵ３２２-１では、現在の検索位置を示している仮想アドレス（Ｓｘ，Ｓｙ）を、１つの下の行の２つ左側の列に移動している。
【０１７９】
続いて、ステップＵ３２２-２において、ＭＢ処理エージェント３０は、水平方向の仮想アドレスＳｘが０以下であるか、垂直方向の仮想アドレスＳｙがParallelMbHeight以上であるか、又は、垂直方向の仮想アドレスＳｙがParallelMbHeight以上であるかを判断する。つまり、ステップＵ３２２-２では、図２４（Ｂ）に示す仮想領域（分割領域を水平方向に展開したもの）内に、仮想アドレス（Ｓｘ，Ｓｙ）で示されたマクロブロックが存在するか否かを判断している。仮想アドレス（Ｓｘ，Ｓｙ）の位置にマクロブロックが存在する場合（ステップＵ３２２-２のＮｏ）には、ステップＵ３２２-５に進む。仮想アドレス（Ｓｘ，Ｓｙ）の位置にマクロブロックが存在しない場合（ステップＵ３２２-２のＹｅｓ）には、ステップＵ３２２-３に進む。
【０１８０】
ステップＵ３２２-３において、ＭＢ処理エージェント３０は、斜め処理の開始位置Ｓｘ０に１を加算する。続いて、ＭＢ処理エージェント３０は、ステップＵ３２２-４において、水平方向の仮想アドレスＳｘに、ステップＵ３２２-３で処理した斜め処理の開始位置Ｓｘを代入し、垂直方向の仮想アドレスＳｙに０を代入する。つまり、ステップＵ３３２-３及び３３２-４は、一つ下のスライスの２つ左の列にマクロブロックが存在しないため、仮想アドレス（Ｓｘ，Ｓｙ）を、未処理のマクロブロックのうちの最も上のスライスの最も左のマクロブロックに移動する処理を行っている。ステップＵ３２２-４の処理を終えると、ステップＵ３２２-５に進む。
【０１８１】
ステップＵ３２２-５において、ＭＢ処理エージェント３０は、下記式（３３）を演算して、ｂａｓｅ０を求める。
ｂａｓｅ０＝（Ｓｘ／PicMbWidth）×PrallelHeight  …（３３）
なお、式（３３）において“Ｓｘ／PicMbWidth”は、ＳｘをPicMbWidthで除算したときの商（整数値）を求める演算である。
【０１８２】
続いて、ステップＵ３２２-６において、ＭＢ処理エージェント３０は、下記式（３４）を演算する。
Ｓｙ≧PrallelHeight−ｂａｓｅ０    …（３４）
すなわち、ステップＵ３２２-６では、垂直方向の仮想アドレスＳｙにｂａｓｅ０を加えた値がParallelMbHeight以上であるかを判断する。つまり、検索対象となっているマクロブロックのアドレスが、実際のフレームの最下行を超えてしまっているか否かを判断する。超えていれば（ステップＵ３２２-６のＮｏ）、ステップＵ３２２-１に戻り、再度、（ｘ０，ｙ０）生成処理を行う。超えていなければ（ステップＵ３２２-６のＹｅｓ）、ステップＵ３２２-７に進む。
【０１８３】
続いて、ステップＵ３２２-７において、ＭＢ処理エージェント３０は、下記式（３５）、（３６）に示す演算を行い、処理対象となるマクロブロックのアドレス（Ｘ０，Ｙ０）を決定する。
Ｘ０＝Ｓｘ％PicMbWidth    …（３５）
Ｙ０＝Ｓｙ＋Ｂａｓｅ０    …（３６）
なお、式（３５）において“Ｓｘ％PicMbWidth”は、ＳｘをPicMbWidthで除算したときの余り（整数値）を求める演算である。
【０１８４】
図２７に、ステップＵ３２３の終了判断処理の処理フローを示す。
【０１８５】
終了判断処理が開始すると、ステップＵ３２３-１において、ＭＢ処理エージェント３０は、下記式（３７）が真であるか、偽であるかを判断する。
ST[S03][ PicMbHeight-1 ]>= PicMbWidth  …（３７）
式（３７）は、最下行のスライスが、全て処理完了状態（Ｓ０３）となっていれば真である。すなわち、当該画面（フレーム）の全てのマクロブロックに対して符号化又は復号が完了しているか否かを意味している。
【０１８６】
ＭＢ処理エージェント３０は、まだ全てのマクロブロックの符号化又は復号が完了していなければ、ステップＵ３２３-２に進みフラグｅｎｄ０に０を代入し、当該処理を終了してメインフローに戻る。ＭＢ処理エージェント３０は、全てのマクロブロックの符号化又は復号が完了していれば、ステップＵ３２３-３に進みフラグｅｎｄ０に１を代入しメインフローに戻る。
【０１８７】
以上の処理の結果、ＭＢ処理エージェントの符号化又は復号対象マクロブロック（Ｘ０，Ｙ０）を決定することができる。このように処理することによって、状態管理部３３がどのＭＢ処理エージェント３０であるかを知る必要がなく、検索が一意となり、状態管理部３３の実装が容易となる。また、横方向と縦方向のマクロブロックを均等に処理することで並列度が高くなり、処理速度が上がる。 
さらに、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣの左横、左斜上、上、右斜上に依存するマクロブロックの符号化又は復号がされた画像符号化規格に対して処理を行う場合、StepMbWidth＝２に設定することによって、最も高い並列度となり、処理時間を最短にすることができる。
【０１８８】
なお、本例では、StepMbWidth＝２に設定をしたが、例えば、StepMbWidth＝１とすることにより、図２８に示すように、処理済みマクロブロックと未処理マクロブロックとの境界が１行に１列毎ずれた階段状となり、右上のマクロブロックと依存関係の無い画像符号化方式のコーデックにも適用することが可能となる。
【図面の簡単な説明】
【０１８９】
【図１】本発明が適用されたビデオコーデックの中の符号化処理部分（ビデオエンコーダ）の構成図である。
【図２】各ＭＢ符号化部の処理内容を示したフローチャートである。
【図３】本発明が適用されたビデオコーデックの復号処理部（ビデオビデオデコーダ）の構成図である。
【図４】各ＭＢ復号部の処理内容を示したフローチャートである。
【図５】本発明が適用されたビデオコーデックの構成をマクロブロック処理部、その前処理部及び後処理部という観点で分けたときのブロック構成図である。
【図６】画面内のマクロブロックのアドレッシング例を示す図である。
【図７】任意の１つのマクロブロックの状態遷移を示すステートチャートである。
【図８】画面内の各マクロブロックの状態例を示す図である。
【図９】本発明が適用されたビデオコーデックのメイン処理のフローチャートである。
【図１０】メインフローのうちの前処理のフローチャートである。
【図１１】メインフローのうちのＭＢ処理エージェントによる符号化又は復号の処理（ステップＵ３）のフローチャートである。
【図１２】ＭＢ処理エージェントの処理のうちのマクロブロック（Ｘ０，Ｙ０）の決定処理のフローチャートである。
【図１３】マクロブロックの決定処理による検索順序を示した図である。
【図１４】調査をする最も下のスライス位置を規定した場合の検索順序を示した図である。
【図１５】決定されたマクロブロック（Ｘ０，Ｙ０）が、符号化又は復号が可能となっているか否かの調査処理のフローチャートである。
【図１６】メインフローのうちの後処理のフローチャートである。
【図１７】本発明が適用されたビデオコーデックにより、ＭＰＥＧ−４又はＨ．２６４／ＭＰＥＧ−４ＡＶＣに対して処理を行う場合の並列処理の進行状況を示す図である。
【図１８】本発明が適用されたビデオコーデックにより、ＭＰＥＧ−２に対して処理を行う場合の並列処理の進行状況を示す図である。
【図１９】１ピクチャ内のマクロブロックが処理されていく順序を一意に予め決めておく場合のマクロブロックの処理順序を示す図である。
【図２０】最下のスライス又は最左の列を超えた場合のマクロブロックの処理順序を示す図である。
【図２１】階段状となっている処理済みのマクロブロックと未処理のマクロブロックとの境界を示す図である。
【図２２】ピクチャ上のPicMbHeight、PicMbWidth、ParallelMbHeight等の値を示した図である。
【図２３】ピクチャ内を垂直方向に分割して、各領域毎に並列処理が進めていく様子を示した図である。
【図２４】分割された領域を仮想的に水平方向に展開したものを示した図である。
【図２５】マクロブロック（Ｘ０，Ｙ０）の決定処理の他の例のフローチャートである。
【図２６】（Ｘ０，Ｙ０）生成処理のフローチャートである。
【図２７】終了判断処理のフローチャートである。
【図２８】右上のマクロブロックに依存関係が無い場合の並列処理例を示した図である。
【図２９】ＭＰＥＧ−２のマクロブロックの依存関係を示す図である。
【図３０】ＭＰＥＧ−２のマクロブロック処理エンジンの並列処理の内容を示す図である。
【図３１】ＭＰＥＧ−４及びＨ．２６４／ＭＰＥＧ−４ＡＶＣのマクロブロックの依存関係を示す図である。
【符号の説明】
【０１９０】
１  エンコーダ、２  マクロブロック符号化部、３  動き検出、４  デブロッキング、５  ＶＬＣ、１５  デコーダ、１６  マクロブロック復号部、１７  ＶＬＤ、１８  デブロッキング、３０  ＭＢ処理エージェント、３１  前処理部、３２  後処理部、３３  状態管理部
【図１】
2006129285.tif 000003
【図２】
2006129285.tif 000004
【図３】
2006129285.tif 000005
【図４】
2006129285.tif 000006
【図５】
2006129285.tif 000007
【図６】
2006129285.tif 000008
【図７】
2006129285.tif 000009
【図８】
2006129285.tif 000010
【図９】
2006129285.tif 000011
【図１０】
2006129285.tif 000012
【図１１】
2006129285.tif 000013
【図１２】
2006129285.tif 000014
【図１３】
2006129285.tif 000015
【図１４】
2006129285.tif 000016
【図１５】
2006129285.tif 000017
【図１６】
2006129285.tif 000018
【図１７】
2006129285.tif 000019
【図１８】
2006129285.tif 000020
【図１９】
2006129285.tif 000021
【図２０】
2006129285.tif 000022
【図２１】
2006129285.tif 000023
【図２２】
2006129285.tif 000024
【図２３】
2006129285.tif 000025
【図２４】
2006129285.tif 000026
【図２５】
2006129285.tif 000027
【図２６】
2006129285.tif 000028
【図２７】
2006129285.tif 000029
【図２８】
2006129285.tif 000030
【図２９】
2006129285.tif 000031
【図３０】
2006129285.tif 000032
【図３１】
2006129285.tif 000033