(57)【要約】【課題】ＨＥＶＣ規格を完全にサポートし、かつＤＢＦ及びＳＡＯを高速且つ低コストに実行することが可能なフィルタ装置の提供。【解決手段】デブロッキングフィルタ（ＤＢＦ）処理を行う場合、通常の８×８ブロック（ベースブロック）を左上に４画素ずつシフトしたシフトベースブロック（Ａ，Ｂ，Ｃ，Ｄ）に対しＤＢＦ処理を行うことで、該シフトベースブロック以外の画素の参照を行うことなくＤＢＦ処理を行う。また、サンプル適応オフセット（ＳＡＯ）処理を行う場合、該シフトベースブロックとその左、上、左上に隣接する４×４ブロック（分割ブロック）とからなる領域に含まれる合計９つの分割ブロックからなるシフトＳＡＯベースブロックの右下隅の（２Ｎ＋２）×（２Ｎ＋２）画素の画素ブロック（図４（ｄ））をＳＡＯ処理の対象とし、シフトＳＡＯベースブロック内の各分割ブロックのＤＢＦ処理終了を保証する。【選択図】図４
2015032982.tif 000002
【特許請求の範囲】
【請求項１】
ブロックベースの画像符号化により符号化された画像を復号する際に、復号画像の歪みの補正を行うフィルタ装置であって、
復号画像を記憶する復号画像記憶手段と、
復号画像を２Ｎ×２Ｎ（Ｎは４以上の整数）画素のブロック（以下「ベースブロック」という。）に分割したとき、各ベースブロックの垂直及び水平方向の長さ２Ｎのブロック境界に対しデブロッキング処理（以下「ＤＢＦ処理」という。）を行うデブロッキングフィルタと、を備え、
前記デブロッキングフィルタは、
前記各ベースブロックの垂直及び水平方向の長さ２Ｎのブロック境界を２分割した長さＮのブロック境界に対しＤＢＦ処理を行うＤＢＦコアと、
前記ＤＢＦコアがＤＢＦ処理を行うブロック境界を挟む両側のＮ×Ｎ画素ブロック（以下「分割ブロック」という。）を順次選択し、前記復号画像記憶手段から読み出して前記ＤＢＦコアに入力するＤＢＦブロックセレクタと、を備え、
前記ＤＢＦブロックセレクタは、
１つの頂点Ｐを共有する４つの前記ベースブロックに含まれる１６個の前記分割ブロックのうち、当該頂点Ｐを共有する４つの前記分割ブロックからなる２Ｎ×２Ｎ画素の画素ブロックをシフトベースブロックとし、前記復号画像を前記シフトベースブロックの単位に分割し、前記各シフトベースブロックを順次選択するベースブロックセレクタと、
選択された前記シフトベースブロックの内部の４つの長さＮの前記ベースブロックの境界（以下「内部境界」という。）に対し、前記各内部境界を挟む両側の前記分割ブロックを順次選択し、前記ＤＢＦコアに入力する分割ブロックセレクタと、を備えたことを特徴とするフィルタ装置。
【請求項２】
前記シフトベースブロック内の４つの前記分割ブロックのうち、左上の前記分割ブロックをＡ，右上の前記分割ブロックをＢ，左下の前記分割ブロックをＣ，右下の前記分割ブロックをＤとしたとき、
前記デブロッキングフィルタは、
前記各分割ブロックＡ，Ｂ，Ｃ，Ｄをそれぞれ記憶する４つのＤＢＦレジスタ・グループdr_a，dr_b，dr_c，dr_dと、
前記ＤＢＦコアから出力される、ＤＢＦ処理された２つの前記分割ブロックを、その分割ブロックの位置が、左上ならば前記ＤＢＦレジスタ・グループdr_aに、右上ならば前記ＤＢＦレジスタ・グループdr_bに、左下ならば前記ＤＢＦレジスタ・グループdr_cに、右下ならば前記ＤＢＦレジスタ・グループdr_dに、それぞれ出力し記憶させるＤＢＦブロック分配手段と、を備え、
前記ＤＢＦコアは、第１ステージから第４ステージまでの４ステージの期間で１つの前記各シフトベースブロックに対するＤＢＦ処理を実行するものであり、
前記分割ブロックセレクタは、
第１ステージにおいて前記復号画像記憶手段に記憶された前記分割ブロックＡ，Ｂを、
第２ステージにおいて前記復号画像記憶手段に記憶された前記分割ブロックＣ，Ｄを、
第３ステージにおいて前記ＤＢＦレジスタ・グループdr_a，dr_cに記憶された前記分割ブロックＡ，Ｃを、
第４ステージにおいて前記ＤＢＦレジスタ・グループdr_b，dr_dに記憶された前記分割ブロックＢ，Ｄを、それぞれ選択し、前記ＤＢＦコアに入力するものであることを特徴とする請求項１記載のフィルタ装置。
【請求項３】
前記デブロッキングフィルタにおいてデブロッキング処理がされた後の前記復号画像に対し、符号化と雑音に伴う信号波形歪のオフセット補正処置であるサンプル適応オフセット（以下「ＳＡＯ」という。）処理を行うＳＡＯ装置を備え、
前記ＳＡＯ装置は、（Ｎ＋２）×（Ｎ＋２）画素の画素ブロック（以下「ＳＡＯ処理ブロック」という。）に対し、該ＳＡＯ処理ブロックの周囲境界画素を除くＮ×Ｎサイズの領域の各画素についてのＳＡＯ処理による補正を行うＳＡＯコアと、
前記ＳＡＯ処理ブロックの全部又は一部を含む前記分割ブロックを順次選択し、前記ＳＡＯコアに入力するＳＡＯブロックセレクタと、を備え、
前記ＳＡＯブロックセレクタは、前記デブロッキングフィルタによりＤＢＦ処理された前記シフトベースブロックと、その左，上，及び左上に隣接する５つの分割ブロックとからなる領域に含まれる合計９つの前記分割ブロックの中から、１頂点を共有する４つの分割ブロックからなる２Ｎ×２Ｎ画素の画素ブロックであるカレント・ブロックを順次選択するものであり、
前記ＳＡＯコアは、入力される前記カレント・ブロックの右下コーナーの画素を１つの頂点とする（Ｎ＋２）×（Ｎ＋２）画素の前記ＳＡＯ処理ブロックに対してＳＡＯ処理を実行するものであることを特徴とする請求項１又は２記載のフィルタ装置。
【請求項４】
前記デブロッキングフィルタは、請求項２に記載のデブロッキングフィルタであり、
前記シフトベースブロックと、その左，上，及び左上に隣接する５つの分割ブロックとからなる領域に含まれる合計９つの前記分割ブロックを、左上から右下にラスタ走査順にそれぞれＥ，Ｆ，Ｇ，Ｈ，Ａ，Ｂ，Ｉ，Ｃ，Ｄとしたとき、
前記ＳＡＯ装置は、
前記分割ブロックを記憶するための複数のＳＡＯレジスタ・グループと、
前記ＳＡＯコアから出力される、ＳＡＯ処理された４つの前記分割ブロックを、それぞれの前記ＳＡＯレジスタ・グループに適宜出力し記憶させるＳＡＯブロック分配手段と、を備え、
前記ＳＡＯコアは、第１ステージから第４ステージまでの４ステージの期間で１つの前記各シフトベースブロックを含む（２Ｎ＋２）×（２Ｎ＋２）画素の画素ブロックに対するＳＡＯ処理を実行するものであり、
前記ＳＡＯブロックセレクタは、
第１ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＥ，Ｆ，Ｈ、及び前記ＤＢＦレジスタ・グループdr_aに記憶された前記分割ブロックＡを、
第２ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＨ，Ａ，Ｉ、及び前記ＤＢＦレジスタ・グループdr_cに記憶された前記分割ブロックＣを、
第３ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＦ，Ｇ，Ａ、及び前記ＤＢＦレジスタ・グループdr_bに記憶された又は前記ＤＢＦレジスタ・グループdr_bから事前に読み出され何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＢを、
第４ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＡ，Ｂ，Ｃ、及び前記ＤＢＦレジスタ・グループdr_dに記憶された又は前記ＤＢＦレジスタ・グループdr_dから事前に読み出され何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＤを、
それぞれ選択し、前記ＳＡＯコアに入力するものであることを特徴とする請求項３記載のフィルタ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビデオ画像圧縮装置及びビデオ画像復号装置において使用されるフィルタ装置に関し、特に、Ｈ．２６５／ＨＥＶＣ規格におけるループフィルタへの応用に適したフィルタ装置に関する。
【背景技術】
【０００２】
次世代のビデオ画像圧縮標準であるＨＥＶＣ（High efficiency video coding）は、Ｈ．２６４／ＡＶＣと比較すると、同等の画像品質によりビデオ・シーケンスを符号化した場合、ビットレートで約５０％削減することが実証されている。ＨＥＶＣにおいて、ループフィルタ（in-loop filter：ＬＦ）は重要な部分である。ＨＥＶＣのメイン・プロファイルでは、このＬＦは、デブロッキングフィルタ（Deblocking Filter：ＤＢＦ）とサンプル適応オフセット（Sample Adaptive Offset：ＳＡＯ）の２つの部分から構成されている（非特許文献１・pp.140-154，非特許文献２）。
【０００３】
ＳＡＯは、オリジナルの画素（原画素）と復号された画素（再構成画素）との間の歪を減少させるため、ＨＥＶＣにおいて新たに採用されたＬＦ技術である。ＳＡＯは、妥当な複雑度により、主観的測定（subjective measurement）と客観的測定（objective measurement）の双方において、圧縮率を向上させることが検証されている（非特許文献３）。ＳＡＯは、ＤＢＦの後段に置かれる。従って、ＳＡＯはＤＢＦがかけられた後の隣接ブロックの再構成画素を参照する必要があるため、ある符号化ユニット（coding unit：ＣＵ）に対するＳＡＯ処理は、その右側及び下側に隣接するＣＵに対してＤＢＦがかけられた後にのみ実行することが可能となる。そのため、ＨＥＶＣではＤＢＦはフィルタにかけられるエッジ数の削減によってＨ．２６４／ＡＶＣに比べ簡素化されているとはいえ、ＤＢＦ及びＳＡＯを高速且つ低コストに実行可能なアーキテクチャを見出すことは、重要な技術課題である。
【０００４】
ＬＦに関する技術については、これまでにも幾つかの研究成果が公開されている。非特許文献５においては、垂直エッジ及び水平エッジを同時に処理するように２つのグループに再編成された４個のエッジフィルタを適用した技術が開示されている。非特許文献６においては、５ステージにパイプライン化され、各サイクルで２つのフィルタリング処理結果を生成するようにリソースを共有化したデュアルエッジ・フィルタが開示されている。非特許文献８においては、通常のパイプライン処理によるゼロ・ストール・サイクル（zero stall cycle）フロー・アーキテクチャが開示されている。
【０００５】
また、非特許文献４においては、ＨＥＶＣ及びＨ．２６４のデュアルモード・フィルタが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１４１０９４
【特許文献２】特開２０１３−１３８３９５
【非特許文献】
【０００７】
【非特許文献１】B. Bross, W.-J. Han, G. J. Sullivan, J.-R. Ohm, and T. Wiegand, "High Efficiency Video Coding (HEVC) Text Specification Draft 8", document JCTVC-K1003, Sep., 2012.
【非特許文献２】A. Norkin, G. Bjentegaard, A. Fuldseth, M. Narroschke, M. Ikeda, K. Andersson, M. Zhou, and G. V. der Auwera: "HEVC Deblocking Filter", IEEE Transactions on circuits and system for video technology, vol., 22, no. 12, December 2012.
【非特許文献３】CM., Fu, E., Alshina, A., Alshin, Y.W., Huang, C.Y., Chen, and C.Y. Tsai, C.W., H, S.M. L, J.H., P, and W.J., Han "Sample Adaptive Offset in the HEVC Standard", IEEE Transactions on Circuits and System for Video Technology, vol., 22, no. 12, December 2012.
【非特許文献４】Muchen Li, Jinjia Zhou, Xiao Peng, Dajiang Zhou, and Satoshi Goto, "De-blocking filer design for HEVC and H.264/AVC", Pacific Rim Conference on Multimedia (PCM), Singapore, December, 2012.
【非特許文献５】Dajiang Zhou, Jinjia Zhou, Jiayi Zhu, and Satoshi Goto, "A 48 cycles/MB H.264/AVC deblocking filter architecture for ultra high definition applications", IEICE Transactions on Fundamentals, Vol. E92-A, No. 12, pp. 3203-3210, December, 2009.
【非特許文献６】Y.-C. Lin, et al, "A Two-Result-per-Cycle De-blocking Filter Architecture for QFHD H.264/AVC Decoder", IEEE Transactions on VLSI Systems, Vol. 17, No. 6, June 2009.
【非特許文献７】P. List, A. Joch, J. Lainema, G. Bjentegaard, M. Karczewicz, "Adaptive deblocking filter", IEEE Transactions on Circuits and System for Video Technology, vol. 13, no. 7, pp. 614-619, Jul. 2003.
【非特許文献８】K. Xu and C. S. Choy, "A five-stage pipeline, 204 cycles/MB, single-port SRAM-based de-blocking filter for H.264/AVC", IEEE Transactions on Circuits andSystems, vol. 18, no. 3, pp. 363- 374, Mar. 2008.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記の非特許文献５−８に挙げた先行技術文献で開示された技術は、ＨＥＶＣにおけるＬＦをサポートしていないという問題がある。また、上記非特許文献４において開示された技術は、ＳＡＯをサポートしていないという問題がある。
【０００９】
そこで、本発明の目的は、ＨＥＶＣ規格を完全にサポートし、かつＤＢＦ及びＳＡＯの処理を高速且つ低コストに実行することが可能なフィルタ装置を提供することにある。
【課題を解決するための手段】
【００１０】
（１）本発明における基本的な考え方
（１．１）デブロッキングフィルタ・アルゴリズム
ＨＥＶＣのループフィルタにおいては、８×８画素ブロックは、４つの４×４画素ブロックに分割され、それぞれの４×４画素ブロックの外部エッジ（８×８画素ブロックの外輪郭境界をいう）に対してデブロッキングフィルタがかけられる。その場合、カレントエッジ（フィルタリングの対象の外部エッジ）の両サイドの４画素が参照され、それらの一部又は全部がフィルタにより補正される。デブロッキングフィルタでは、カレントエッジの両サイドの１列の画素の並び（画素ライン）に対しフィルタをかける場合、luma strong，luma weak，chromaの３つのフィルタモードがある。異なるフィルタモードでは異なる操作が適用される。カレントエッジがluma strongかluma weakかの判定は、図１に示したように、パラメータβ，ｔｃ及びフィルタにかけられる対象エッジの両サイドの０行目及び３行目の画素の値から導出される（非特許文献１，pp.147-148参照）。
【００１１】
図１において、点線の「○」は画素を表す。また、各画素の付された画素値を表す変数記号pi,j，qi,j（i,j = 0, 1, 2, 3）は、それぞれＨＥＶＣ規格書である非特許文献１のpp.147−148に記載の同変数記号に対応している。図１の２つの４×４画素ブロックの間の垂直の太線はカレントエッジを表す。β，ｔｃは非特許文献１，p.147の式（８−２６６），式（８−２６８）で定義されている。図１の「Calculation」ブロックにおいて非特許文献１，pp.147−148に記載の手順に従ってパラメータdE, dEp, dEq及びフィルタモード（dSam0, dSam3）が計算される。
【００１２】
ＨＥＶＣのＳＡＯは、再構成画素を幾つかのカテゴリに分類し、各カテゴリに対しオフセット値を取得し、各カテゴリの各画素にそのオフセット値を加算する処理を行う。ＳＡＯは、エッジ・オフセット（edge offset：ＥＯ）及びバンド・オフセット（band offset：ＢＯ）の２つのタイプがある。ＢＯは、同じバンドのすべての画素に同じオフセット値を加算する処理である。オフセット値は、カレントＣＴＢ（coding tree block）のＳＡＯパラメータ及びカレントピクセル自身の値から算出され、ＢＯでは隣接画素の参照は行われない。一方、ＥＯでは、画素をカテゴリに分類するため、図２に示したような４つの隣接画素位置パターン（horizontal, vertical, 135 diagonal, 45 diagonal）を使用する。図２において、各マスは画素を表し、ａ，ｂ，ｃはそれぞれ隣接画素０，隣接画素１，対象画素（カレントピクセル）を表す。
【００１３】
ところで、ＨＥＶＣのデコーダ及びエンコーダでは、図３に示したように、デブロッキングフィルタはリコンストラクタの後段に配置される。通常、ハードウェア・リコンストラクタは、８×８画素ブロックを走査順（非特許文献１，pp.22-25）に順次出力するように設計される。デブロッキングフィルタをかける対象となるエッジは、図４（ａ）に示したカレント８×８画素ブロック（白色）の外輪郭境界の４つのエッジ（Ｅ０〜Ｅ３）である。これらのエッジにデブロッキングフィルタをかけるためには、カレント８×８画素ブロックの上側、左上側及び左側の４×４画素ブロック（Ｐ，Ｑ，Ｒ，Ｓ，Ｔ）を参照する必要があるため、演算処理が複雑となる。
【００１４】
そこで、本発明においては、図４（ａ）のカレント８×８画素ブロックをシフトして、デブロッキングフィルタをかける対象とするカレント８×８画素ブロックを図４（ｂ）に示したシフトされた８×８画素ブロックＡＢＣＤに変更する。然らば、デブロッキングフィルタをかける対象となるエッジは、図４（ｂ）に示したカレント８×８画素ブロック（白色）の内部の４つのエッジ（Ｅ０〜Ｅ３）となり、カレント８×８画素ブロックは他のブロックを参照する必要のないデブロッキングフィルタの独立単位ブロックとなる。従って、デブロッキングフィルタの演算処理が遥かに単純化される。シフトされた８×８画素ブロックＡＢＣＤの４つのエッジ（Ｅ０〜Ｅ３）に対するデブロッキングフィルタ処理を完了するためには、４サイクルが必要となる。
【００１５】
（１．２）サンプル適応オフセット・アルゴリズム
上述した通り、ＥＯにおいては、カレントピクセルのオフセット値を得るために隣接画素を参照する必要がある。従って、図４（ｂ）に示したようなシフトされた８×８画素ブロックＡＢＣＤに対してＳＡＯ処理を実行する場合、図４（ｃ）に灰色の「○」示したような隣接ブロックの画素を参照する必要がある。すなわち、画素ブロックＡＢＣＤの右側及び左側に隣接するブロック（図４（ｃ）のＰ〜Ｖ）内の画素まで参照する必要がある。しかしながら、これらの画素ブロック（Ｐ〜Ｖ）については、既にデブロッキングフィルタ処理が終了しているとは限らない。ＨＥＶＣにおいて、ＤＢＦはラスタ操作又はＺ操作の順に従って実行されるからである。
【００１６】
この問題を回避するため、本発明においてはＳＡＯの対象となる画素ブロックを、図４（ｄ）のようにシフトする。ＳＡＯには、左上方向にシフトした１０×１０画素ブロック（図４（ｄ）に「○」で示した画素）が入力される。図４（ｂ）の８×８画素ブロックの中心は、図４（ｄ）では左方向に１画素、上方向に１画素シフトされ、図４（ｄ）に白色の「○」で示した画素ブロックに変更されている。このようにシフトすることによって、画素ブロックＡＢＣＤの右側及び左側に隣接するブロック（Ｐ〜Ｖ）を参照する必要はなくなり、既にデブロッキングフィルタ処理が終了していることが保証されている上側及び左側の画素ブロック（図４（ｃ）のＥ，Ｆ，Ｇ，Ｈ，Ｉ）のみを参照すればよいことになる。
【００１７】
デブロッキングフィルタのスループットと一致させるため、ＳＡＯ処理の実行を４サイクルで行う必要がある。図５（ａ）に示した４×４画素ブロックＡＢＣＤ（各符号は図４に対応）がＳＡＯに順次入力される。画素ブロックＡをＳＡＯに入力する場合、同時に画素ブロックＥ，Ｆ，Ｈの一部の画素も入力する必要がある（図５（ｂ）左上）。同様に、画素ブロックＢをＳＡＯに入力する場合には、画素ブロックＦ，Ｇ，Ａの一部の画素（図５（ｂ）右上）、画素ブロックＣをＳＡＯに入力する場合には、画素ブロックＨ，Ａ，Ｉの一部の画素（図５（ｂ）左下）、画素ブロックＤをＳＡＯに入力する場合には、画素ブロックＡ，Ｂ，Ｃの一部の画素（図５（ｂ）右下）を、それぞれ同時に入力する必要がある。画素ブロックＡＢＣＤのデブロッキングフィルタ処理とそれに続くＳＡＯ処理が完了した時点において、画素ブロックＢ，Ｃ，Ｄの右列又は下行の画素についてはＳＡＯ処理が完全には完了していない。しかし、画素ブロックＥ，Ｆ，Ｈ，Ａについては、すべての画素についてＳＡＯ処理が完了しているため、出力される。
【００１８】
画素ブロックＡＢＣＤのデブロッキングフィルタ処理とそれに続くＳＡＯ処理が完了した時点において、画素ブロックＩ及びＣはラインバッファ４（図６参照）に一時的に保存する。また、１つのＣＴＢのシフトされた画素ブロックの最右列のＳＡＯ処理が完了すると、画素ブロックＧ，Ｂ，Ｄはレフトバッファ５（図６参照）に一時的に保存する。ＨＥＶＣにおいて、ＣＴＢの最大サイズは６４×６４画素であるため、８つのＧ，Ｂ，Ｄを保存しておく必要がある。
【００１９】
（２）本発明の構成
本発明のフィルタ装置の第１の構成は、ブロックベースの画像符号化により符号化された画像を復号する際に、復号画像の歪みの補正を行うフィルタ装置であって、
復号画像を記憶する復号画像記憶手段と、
復号画像を２Ｎ×２Ｎ（Ｎは４以上の整数）画素のブロック（以下「ベースブロック」という。）に分割したとき、各ベースブロックの垂直及び水平方向の長さ２Ｎのブロック境界に対しデブロッキング処理（以下「ＤＢＦ処理」という。）を行うデブロッキングフィルタと、を備え、
前記デブロッキングフィルタは、
前記各ベースブロックの垂直及び水平方向の長さ２Ｎのブロック境界を２分割した長さＮのブロック境界に対しＤＢＦ処理を行うＤＢＦコアと、
前記ＤＢＦコアがＤＢＦ処理を行うブロック境界を挟む両側のＮ×Ｎ画素ブロック（以下「分割ブロック」という。）を順次選択し、前記復号画像記憶手段から読み出して前記ＤＢＦコアに入力するＤＢＦブロックセレクタと、を備え、
前記ＤＢＦブロックセレクタは、
１つの頂点Ｐを共有する４つの前記ベースブロックに含まれる１６個の前記分割ブロックのうち、当該頂点Ｐを共有する４つの前記分割ブロックからなる２Ｎ×２Ｎ画素の画素ブロックをシフトベースブロックとし、前記復号画像を前記シフトベースブロックの単位に分割し、前記各シフトベースブロックを順次選択するベースブロックセレクタと、
選択された前記シフトベースブロックの内部の４つの長さＮの前記ベースブロックの境界（以下「内部境界」という。）に対し、前記各内部境界を挟む両側の前記分割ブロックを順次選択し、前記ＤＢＦコアに入力する分割ブロックセレクタと、を備えたことを特徴とする。
【００２０】
この構成によれば、デブロッキングフィルタは、シフトベースブロック内の４つの長さＮの内部境界のみをＤＢＦ処理の対象とするため、当該シフトベースブロック以外の画素を参照することなくＤＢＦ処理を実行することができる。従って、ＤＢＦ処理を高速且つ低コストに実行することが可能となる。
【００２１】
本発明のフィルタ装置の第２の構成は、前記第１の構成に於いて、前記シフトベースブロック内の４つの前記分割ブロックのうち、左上の前記分割ブロックをＡ，右上の前記分割ブロックをＢ，左下の前記分割ブロックをＣ，右下の前記分割ブロックをＤとしたとき、
前記デブロッキングフィルタは、
前記各分割ブロックＡ，Ｂ，Ｃ，Ｄをそれぞれ記憶する４つのレジスタ・グループdr_a，dr_b，dr_c，dr_dと、
前記ＤＢＦコアから出力される、ＤＢＦ処理された２つの前記分割ブロックを、その分割ブロックの位置が、左上ならば前記レジスタ・グループdr_aに、右上ならば前記レジスタ・グループdr_bに、左下ならば前記レジスタ・グループdr_cに、右下ならば前記レジスタ・グループdr_dに、それぞれ出力し記憶させるブロック分配手段と、を備え、
前記ＤＢＦコアは、第１ステージから第４ステージまでの４ステージの期間で１つの前記各シフトベースブロックに対するＤＢＦ処理を実行するものであり、
前記分割ブロックセレクタは、第１ステージにおいて前記復号画像記憶手段に記憶された前記分割ブロックＡ，Ｂ、第２ステージにおいて前記復号画像記憶手段に記憶された前記分割ブロックＣ，Ｄ、第３ステージにおいて前記レジスタ・グループdr_a，dr_cに記憶された前記分割ブロックＡ，Ｃ、第４ステージにおいて前記レジスタ・グループdr_b，dr_dに記憶された前記分割ブロックＢ，Ｄを選択し、前記ＤＢＦコアに入力するものであることを特徴とする。
【００２２】
本発明のフィルタ装置の第３の構成は、前記第１又は２の構成に於いて、
前記デブロッキングフィルタにおいてデブロッキング処理がされた後の前記復号画像に対し、符号化と雑音に伴う信号波形歪のオフセット補正処置であるサンプル適応オフセット（以下「ＳＡＯ」）処理を行うＳＡＯ装置を備え、
前記ＳＡＯ装置は、（Ｎ＋２）×（Ｎ＋２）画素の画素ブロック（以下「ＳＡＯ処理ブロック」という。）に対し、該ＳＡＯ処理ブロックの周囲境界画素を除くＮ×Ｎサイズの領域の各画素についてのＳＡＯ処理による補正を行うＳＡＯコアと、
前記ＳＡＯ処理ブロックの全部又は一部を含む前記分割ブロックを順次選択し、前記ＳＡＯコアに入力するＳＡＯブロックセレクタと、を備え、
前記ＳＡＯブロックセレクタは、前記デブロッキングフィルタによりＤＢＦ処理された前記シフトベースブロックと、その左，上，及び左上に隣接する５つの分割ブロックとからなる領域に含まれる合計９つの前記分割ブロックの中から、１頂点を共有する４つの分割ブロックからなる２Ｎ×２Ｎ画素の画素ブロックであるカレント・ブロックを順次選択するものであり、
前記ＳＡＯコアは、入力される前記カレント・ブロックの右下コーナーの画素を１つの頂点とする（Ｎ＋２）×（Ｎ＋２）画素の前記ＳＡＯ処理ブロックに対してＳＡＯ処理を実行するものであることを特徴とする。
【００２３】
この構成によれば、ＳＡＯ装置は、シフトベースブロックと、その左，上，及び左上に隣接する５つの分割ブロックとからなる領域に含まれる合計９つの前記分割ブロックからなる画素ブロック（以下「シフトＳＡＯベースブロック」という。）の右下隅の（２Ｎ＋２）×（２Ｎ＋２）画素の画素ブロックをＳＡＯ処理の対象とし、シフトＳＡＯベースブロックの右側及び下側の画素を参照することなくＳＡＯ処理を実行することができる。そのため、通常のビデオ画像圧縮規格でラスタ走査又はＺ走査順に実行されるＤＢＦ処理の後段で実行されるＳＡＯ処理において、シフトＳＡＯベースブロック内の各分割ブロックはＤＢＦ処理が終了したことが保証されている。従って、ＤＢＦ処理が終了判定のような余分な処理を行う必要がなく、ＳＡＯ処理を高速且つ低コストに実行することが可能となる。
【００２４】
本発明のフィルタ装置の第４の構成は、前記第３の構成に於いて、前記デブロッキングフィルタは、請求項２に記載のデブロッキングフィルタであり、前記シフトベースブロックと、その左，上，及び左上に隣接する５つの分割ブロックとからなる領域に含まれる合計９つの前記分割ブロックを、左上から右下にラスタ走査順にそれぞれＥ，Ｆ，Ｇ，Ｈ，Ａ，Ｂ，Ｉ，Ｃ，Ｄとしたとき、
前記ＳＡＯ装置は、
前記分割ブロックを記憶するための複数のＳＡＯレジスタ・グループと、
前記ＳＡＯコアから出力される、ＳＡＯ処理された４つの前記分割ブロックを、それぞれの前記ＳＡＯレジスタ・グループに適宜出力し記憶させるＳＡＯブロック分配手段と、を備え、
前記ＳＡＯコアは、第１ステージから第４ステージまでの４ステージの期間で１つの前記各シフトベースブロックを含む（２Ｎ＋２）×（２Ｎ＋２）画素の画素ブロックに対するＳＡＯ処理を実行するものであり、
前記ＳＡＯブロックセレクタは、
第１ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＥ，Ｆ，Ｈ、及び前記ＤＢＦレジスタ・グループdr_aに記憶された前記分割ブロックＡを、
第２ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＨ，Ａ，Ｉ、及び前記ＤＢＦレジスタ・グループdr_cに記憶された前記分割ブロックＣを、
第３ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＦ，Ｇ，Ａ、及び前記ＤＢＦレジスタ・グループdr_bに記憶された又は前記ＤＢＦレジスタ・グループdr_bから事前に読み出され何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＢを、
第４ステージにおいて、何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＡ，Ｂ，Ｃ、及び前記ＤＢＦレジスタ・グループdr_dに記憶された又は前記ＤＢＦレジスタ・グループdr_dから事前に読み出され何れかの前記ＳＡＯレジスタ・グループに記憶された前記分割ブロックＤを、
それぞれ選択し、前記ＳＡＯコアに入力するものであることを特徴とする。
【発明の効果】
【００２５】
以上のように、本発明によれば、ＨＥＶＣ規格を完全にサポートし、かつＤＢＦ及びＳＡＯの処理を高速且つ低コストに実行することが可能なフィルタ装置を提供することができる。
【図面の簡単な説明】
【００２６】
【図１】ＨＥＶＣのＤＢＦにおけるパラメータdE, dEp, dEq（及びフィルタモード（dSam0, dSam3））の導出を表す図である。
【図２】ＨＥＶＣのＳＡＯにおけるＥＯ（edge offset）の隣接画素位置パターンを表す図である。
【図３】ＨＥＶＣの一般の復号器及び符号化器の全体におけるフィルタ装置１及び再構成画素バッファ８の配置を示す図である。
【図４】ＤＢＦにおけるカレント８×８画素ブロックとそれに対応するシフトした８×８画素ブロック、及びそれに対応するＳＡＯの対象となるピクセルを表す図である。
【図５】ＤＢＦ及びＳＡＯにおいて使用するデータブロックを表す図である。
【図６】本発明の実施例１に係るフィルタ装置の全体構成を表すブロック図である。
【図７】ＤＢＦに入力される８×８画素ブロックの順序を例示する図である。
【図８】図６のＤＢＦの内部構成を表すブロック図である。
【図９】１つのシフトされた８×８画素ブロックをＤＢＦ処理する際の図６のＤＢＦ２の動作を表すフローチャートである。
【図１０】図６のＳＡＯの内部構成を表すブロック図である。
【図１１】各入力ライン，各出力ラインで入出力される画素と、ＳＡＯコア３０で処理される部分画素ブロックとの関係を示す図である。
【図１２】ＳＡＯレジスタ・グループの構成と各サイクルにおけるレジスタに入力される４×４画素ブロックを表す図である。
【図１３】１つのシフトされた８×８画素ブロックをＳＡＯ処理する際の図１０のＤＢＦ２の動作を表すフローチャートである。
【図１４】１つのシフトされた８×８画素ブロックをＳＡＯ処理する際の図１０のＤＢＦ２の動作を表すフローチャートである。
【図１５】本発明のフィルタ装置におけるＤＢＦ２とＳＡＯ３のパイプライン処理を示す図である。
【発明を実施するための形態】
【００２７】
以下、本発明を実施するための形態について、図面を参照しながら説明する。尚、以下の実施例では、ＨＥＶＣに基づき、Ｎ＝４とし、ベースブロックのサイズを８×８画素とした例を示すが、本発明においてはＮの値は４以上の整数であれば任意に変更が可能である。
【実施例１】
【００２８】
（１）フィルタ装置の全体構成
図６は、本発明の実施例１に係るフィルタ装置の全体構成を表すブロック図である。フィルタ装置１は、デブロッキングフィルタ（ＤＢＦ）２、サンプル適応オフセット（ＳＡＯ）３、ラインバッファ（upper line buffer）４、レフトバッファ（left buffer）５、エッジフィルタ判定器（edge filter decider）６、及びＳＡＯブロック存否チェッカ（SAO block existence checker）７を備えている。
【００２９】
図６において、再構成画素バッファ８は、復号によって再構成されたフレーム内の各画素が記憶されるバッファである。尚、ＨＥＶＣの一般の復号器及び符号化器においては、図６のフィルタ装置１はループフィルタ（ＬＦ）として位置づけられる。図３に、ＨＥＶＣの一般の復号器及び符号化器の全体におけるフィルタ装置１及び再構成画素バッファ８の配置を示す。リコンストラクタ（図３）で再構成された画素（再構成画素）は、一旦、再構成画素バッファ８に一時的に保存された後、まずＤＢＦ２に入力され、次いでＳＡＯ３に入力される。ＳＡＯ３は、オフセット処理を実行し、該処理が完了した画素を出力する。尚、ＤＢＦ２及びＳＡＯ３の詳細については、後述する。
【００３０】
図６のフィルタ装置１は、luma（輝度）成分及びchroma（彩度）成分の画素を並列に処理する。各成分の処理方法は同様であるため、以下の説明では、代表的にluma成分の画素の処理のみについて説明する。
【００３１】
尚、図６において、ラインバッファ４及びレフトバッファ５は、ＳＡＯ３において参照する画素を一時的に保存するためのバッファである。これらの詳細については後述する。
【００３２】
エッジフィルタ判定器６は、ＤＢＦ２においてフィルタ処理を行うエッジが、ピクチャの外部境界（picture boundary）であるか否かを判定し、外部境界の場合にピクチャ境界信号edge_boundaryをアサートし、それ以外はネゲートする。エッジフィルタ判定器６には、blk8_x_reg_dbf，blk8_y_reg_dbf，pic_width，pic_height，cnt_4_reg_dbfの４つの信号が入力されている。blk8_x_reg_dbfは、ＤＢＦ２において処理される８×８画素ブロック（ＡＢＣＤ）のｘ座標を表す信号である。blk8_y_reg_dbfは、ＤＢＦ２において処理される８×８画素ブロック（ＡＢＣＤ）のｙ座標を表す信号である。pic_width，pic_heightは、それぞれピクチャの幅及び高さの画素数を表す信号である。cnt_4_reg_dbfは、ＤＢＦ２で８×８画素ブロックが１ブロック処理されるごとに１増加するカウンタ信号であって、０から３までの値をとり、カウント値が３を越えた場合又はＤＢＦ２でＣＴＢが１ブロック処理された場合に０にリセットされるカウンタ信号である。
【００３３】
図７にＤＢＦ２に入力される８×８画素ブロックの順序を示す。図７において、白色の四角形は、ピクチャ内部の８×８画素ブロックを表す。薄灰色に塗り潰された部分はピクチャ外部を表す。黒色の細線及び太線は８×８画素ブロックのエッジであり、黒色の太線はＣＴＢ（Coding Tree Block）の境界を表している。また、濃灰色の四角形はＤＢＦ２に入力されるシフトされた８×８画素ブロックを表し、濃灰色の太線枠はシフトされたＣＴＢの境界を表している。０〜１１の整数番号はシフトされたＣＴＢ番号を表しており、このＣＴＢ番号の昇順にラスタスキャンされる。また、０．０，０．１，０．２，０．３，２．０，…，１１．０の小数番号はシフトされた８×８画素ブロックのブロック番号を表しており、各ＣＴＢ内ではブロック番号の昇順にＺスキャンされる。エッジフィルタ判定器６は、入力される各信号に基づき、カレント８×８画素ブロックの各エッジが、ピクチャの外部境界（薄灰色部分と白色部分との境界）と判定した場合にピクチャ境界信号edge_boundaryをアサートする。
【００３４】
ＳＡＯブロック存否チェッカ７は、ＳＡＯ処理の対象となる画素ブロック（８×８画素ブロックの部分ブロックである４×４画素ブロック。図５（ｂ）参照）のそれぞれが、ピクチャ内に存在するか否かを判定する。ＳＡＯブロック存否チェッカ７には、blk8_x_reg_sao，blk8_y_reg_sao，pic_width，pic_height，cnt_4_reg_saoの４つの信号が入力されている。blk8_x_reg_saoは、ＳＡＯ３において処理される８×８画素ブロック（ＡＢＣＤ）のｘ座標を表す信号である。blk8_y_reg_saoは、ＳＡＯ３において処理される８×８画素ブロック（ＡＢＣＤ）のｙ座標を表す信号である。pic_width，pic_heightは、それぞれピクチャの幅及び高さの画素数を表す信号である。cnt_4_reg_saoは、ＤＢＦ２で８×８画素ブロックが１ブロック処理されるごとに１増加するカウンタ信号であって、０から３までの値をとり、カウント値が３を越えた場合又はＳＡＯ３でＣＴＢが１ブロック処理された場合に０にリセットされるカウンタ信号である。
【００３５】
ＳＡＯブロック存否チェッカ７は、入力される各信号に基づき、ＳＡＯ処理の対象となる画素ブロック（Ａ〜Ｉ）（図５（ｂ）参照）が、ピクチャの内部と判定した場合に存否判定信号sf_x_exist（x＝0, 1, 2, 3）をアサートし、そうでなければネゲートする。ここで、sf_0_exist，sf_1_exist，sf_2_exist，sf_3_existは、それぞれ、図５（ｂ）のSAO stage 0〜SAO stage 3に示した４つの４×４部分画素ブロックのうち、左上，右上，左下，右下の画素ブロックに対応している。
【００３６】
（２）ＤＢＦ２の構成
図８は、図６のＤＢＦ２の内部構成を表すブロック図である。ＤＢＦ２は、ベースブロックセレクタ１０，１１、レジスタ・グループ１２，１３，２３，２４，２５，２６、マルチプレクサ１４，１５，１７，１８，１９，２０，２１，２２、及びＤＢＦコア１６を備えている。各レジスタ・グループ１２，１３，２３，２４，２５，２６は、４×４個の画素レジスタからなる。尚、マルチプレクサ１４，１５が、本発明における「分割ブロックセレクタ」に相当する。また、マルチプレクサ１９，２０，２１，２２が、本発明における「ＤＢＦブロック分配手段」に相当する。
【００３７】
尚、図８で使用されている記号については、ｍはマルチプレクサを表す。p，qは、ＤＢＦコア１６に入力される４×４画素ブロックを表し、それぞれ図１のpi,j，qi,j（i，j＝０，１，２，３）に対応している。p'，q'は、ＤＢＦコア１６でフィルタ処理された４×４画素ブロックを表す。Ａ，Ｂ，Ｃ，Ｄは、シフトされた８×８画素ブロック内における４×４画素ブロックの相対位置を表し、図５（ａ）の同符号の４×４画素ブロックに対応している。レジスタ・グループ２３，２４，２５，２６にそれぞれ付された記号dr_a，dr_b，dr_c，dr_dは、当該レジスタ・グループに４×４画素ブロックＡ，Ｂ，Ｃ，Ｄがそれぞれ一時的に保存されることを表す。尚、レジスタ・グループ２３，２４，２５，２６をまとめて「ＤＢＦレジスタ・グループ」と呼ぶ。in_l_h，in_r_hは、再構成画素バッファ８から入力される再構成画素を表す。*_hは、垂直エッジに対しデブロッキングフィルタをかけるために４×４画素ブロックが水平に入力されることを意味している。*_vは、水平エッジに対しデブロッキングフィルタをかけるために４×４画素ブロックが垂直に入力されることを意味している。*_l_*，*_r_*は、それぞれ、デブロッキングフィルタをかけるエッジの左側，右側の４×４画素ブロックを意味している。dr_*_vは、ＤＢＦレジスタ・グループ（レジスタ・グループ２３，２４，２５，２６）内に一時保存された４×４画素ブロックが、水平エッジに対しデブロッキングフィルタをかけるために、垂直に入力されることを意味している。
【００３８】
再構成画素バッファ８には、前段のリコンストラクタ（図３参照）により再構成された再構成画素が逐次出力され一時的に保存されている。ベースブロックセレクタ１０，１１は、再構成画素バッファ８から次にＤＢＦ処理を行うために使用する４×４画素ブロックを選択して、それぞれ、レジスタ・グループ１２，１３に格納する。尚、選択すべき４×４画素ブロックがピクチャの外部（図７の薄灰色領域）の場合には、ベースブロックセレクタ１０，１１は無効値（例えば、すべて０の４×４画素ブロック等）を出力する。
【００３９】
マルチプレクサ１４，１５は、サイクル・クロックdbf_cntに従って入力を選択し、選択した４×４画素ブロックをＤＢＦコア１６に出力する。本実施例のＤＢＦ２は、４サイクルで１つの８×８画素ブロックをフィルタ処理するため、サイクル・クロックdbf_cntは、０から３までのカウントを繰り返す。マルチプレクサ１４，１５の入力ラインに付された０〜３までの番号は、サイクル・クロックdbf_cntが該番号と一致したときにそのラインが選択されることを意味する。
【００４０】
ＤＢＦコア１６は、デブロッキングフィルタ処理を行うコアである。本実施例では、４画素長のエッジに対して並列にデブロッキングフィルタ処理を行うため（図１参照）、ＤＢＦコア１６は、４つの単位ＢＦコアを備えている。
【００４１】
マルチプレクサ１７，１８は、カレントエッジ（デブロッキングフィルタ処理の対象となるエッジ）がピクチャの外部境界の場合にデブロッキングフィルタ処理をパスするために設けられた切替スイッチであり、ピクチャ境界信号edge_boundaryがネゲートの場合はＤＢＦコア１６からの出力p'，q'を選択し、アサートの場合はＤＢＦコア１６に入力される前のマルチプレクサ１４，１５の出力ラインp，qを選択する。即ち、カレントエッジがピクチャの外部境界の場合には、当該エッジについてのデブロッキングフィルタ処理は行われない。
【００４２】
マルチプレクサ１９，２０，２１，２２は、それぞれ、ＤＢＦレジスタ・グループのレジスタ・グループ２３，２４，２５，２６に保存すべき４×４画素ブロックを選択するためのセレクタである。各マルチプレクサの入力ラインに付された０〜３の番号は、サイクル・クロックdbf_cntがその番号と一致したときに、その入力ラインが選択されることを示している。
【００４３】
（３）ＤＢＦの動作
以上のように構成された本実施例のＤＢＦ２について、以下その動作を説明する。図９は、１つのシフトされた８×８画素ブロックをＤＢＦ処理する際の図６のＤＢＦ２の動作を表すフローチャートである。図９のｐ列のフロー及びｑ列のフローは、それぞれ、図１及び図８のｐ，ｑに対応している。また、stage 0〜stage 3は、ＤＢＦ２の処理サイクルを表す。
【００４４】
（３．１）stage 0
stage 0において、サイクル・クロックdbf_cntは０である。まずベースブロックセレクタ１０，１１が、それぞれ画素ブロックＡ，Ｂ（図５（ａ）参照）を再構成画素バッファ８から読み出してレジスタ・グループ１２，１３に保存する（Ｓ１０１，Ｓ２０１）。このとき、マルチプレクサ１４，１５は、それぞれ入力ラインin_l_h，in_r_hを選択しており、レジスタ・グループ１２，１３に保存された画素ブロックＡ，Ｂが、ＤＢＦコア１６の入力ラインｐ，ｑにそれぞれ水平入力される。
【００４５】
ここで、画素ブロックＡ，Ｂの境界のエッジＤＢＦ０がピクチャの外部境界の場合、エッジフィルタ判定器６はピクチャ境界信号edge_boundaryをアサートし、そうでなければネゲートする。マルチプレクサ１７，１８は、ピクチャ境界信号edge_boundaryがアサートの場合ＤＢＦコア１６の入力ラインｐ，ｑを選択し、ネゲートの場合ＤＢＦコア１６の出力ラインｐ’，ｑ’を選択した状態となる（Ｓ１０２，Ｓ２０２）。
【００４６】
次いで、ＤＢＦコア１６は、入力ラインｐ，ｑに入力される画素ブロックＡ，Ｂのデータに基づき、エッジＤＢＦ０に対するＤＢＦ処理を行い、フィルタ処理により補正された画素ブロックＡ，Ｂを出力ラインｐ’，ｑ’に出力する（Ｓ１０３，Ｓ２０３）。
【００４７】
このとき、マルチプレクサ１９がマルチプレクサ１７を介してラインｐ’又はラインｐを選択した状態にあり、マルチプレクサ２４がマルチプレクサ１８を介してラインｑ’又はラインｑを選択した状態にある。従って、ピクチャ境界信号edge_boundaryがアサートの場合、元の画素ブロックＡ，Ｂがレジスタ・グループ２３，２４にそれぞれ保存され（Ｓ１０４ａ，Ｓ２０４ａ）、ピクチャ境界信号edge_boundaryがネゲートの場合、補正された画素ブロックＡ，Ｂがレジスタ・グループ２３，２４にそれぞれ保存される（Ｓ１０４，Ｓ２０４）。
【００４８】
（３．２）stage 1
stage 1において、サイクル・クロックdbf_cntは１である。まずベースブロックセレクタ１０，１１が、それぞれ画素ブロックＣ，Ｄ（図５（ａ）参照）を再構成画素バッファ８から読み出してレジスタ・グループ１２，１３に保存する（Ｓ１０５，Ｓ２０５）。このとき、マルチプレクサ１４，１５は、それぞれ入力ラインin_l_h，in_r_hを選択しており、レジスタ・グループ１２，１３に保存された画素ブロックＣ，Ｄが、ＤＢＦコア１６の入力ラインｐ，ｑにそれぞれ水平入力される。
【００４９】
ここで、画素ブロックＣ，Ｄの境界のエッジＤＢＦ１がピクチャの外部境界の場合、エッジフィルタ判定器６はピクチャ境界信号edge_boundaryをアサートし、そうでなければネゲートする。マルチプレクサ１７，１８は、ピクチャ境界信号edge_boundaryがアサートの場合ＤＢＦコア１６の入力ラインｐ，ｑを選択し、ネゲートの場合ＤＢＦコア１６の出力ラインｐ’，ｑ’を選択した状態となる（Ｓ１０６，Ｓ２０６）。
【００５０】
次いで、ＤＢＦコア１６は、入力ラインｐ，ｑに入力される画素ブロックＣ，Ｄのデータに基づき、エッジＤＢＦ１に対するＤＢＦ処理を行い、フィルタ処理により補正された画素ブロックＣ，Ｄを出力ラインｐ’，ｑ’に出力する（Ｓ１０７，Ｓ２０７）。
【００５１】
このとき、マルチプレクサ２５がマルチプレクサ１７を介してラインｐ’又はラインｐを選択した状態にあり、マルチプレクサ２６がマルチプレクサ１８を介してラインｑ’又はラインｑを選択した状態にある。従って、ピクチャ境界信号edge_boundaryがアサートの場合、元の画素ブロックＣ，Ｄがレジスタ・グループ２５，２６にそれぞれ保存され（Ｓ１０８ａ，Ｓ２０８ａ）、ピクチャ境界信号edge_boundaryがネゲートの場合、補正された画素ブロックＣ，Ｄがレジスタ・グループ２５，２６にそれぞれ保存される（Ｓ１０８，Ｓ２０８）。
【００５２】
（３．３）stage 2
stage 2において、サイクル・クロックdbf_cntは２である。このとき、マルチプレクサ１４，１５は、それぞれ入力ラインdr_a_v，dr_c_vを選択しており、レジスタ・グループ２３，２５に保存された画素ブロックＡ，Ｃが、ＤＢＦコア１６の入力ラインｐ，ｑにそれぞれ垂直入力される（Ｓ１０９，Ｓ２０９）。
【００５３】
ここで、画素ブロックＡ，Ｃの境界のエッジＤＢＦ２がピクチャの外部境界の場合、エッジフィルタ判定器６はピクチャ境界信号edge_boundaryをアサートし、そうでなければネゲートする。マルチプレクサ１７，１８は、ピクチャ境界信号edge_boundaryがアサートの場合ＤＢＦコア１６の入力ラインｐ，ｑを選択し、ネゲートの場合ＤＢＦコア１６の出力ラインｐ’，ｑ’を選択した状態となる（Ｓ１１０，Ｓ２１０）。
【００５４】
次いで、ＤＢＦコア１６は、入力ラインｐ，ｑに入力される画素ブロックＡ，Ｃのデータに基づき、エッジＤＢＦ２に対するＤＢＦ処理を行い、フィルタ処理により補正された画素ブロックＡ，Ｃを出力ラインｐ’，ｑ’に出力する（Ｓ１１１，Ｓ２１１）。
【００５５】
このとき、マルチプレクサ１９がマルチプレクサ１７を介してラインｐ’又はラインｐを選択した状態にあり、マルチプレクサ２１がマルチプレクサ１８を介してラインｑ’又はラインｑを選択した状態にある。従って、ピクチャ境界信号edge_boundaryがアサートの場合、元の画素ブロックＡ，Ｃがレジスタ・グループ２３，２５にそれぞれ保存され（Ｓ１１２ａ，Ｓ２１２ａ）、ピクチャ境界信号edge_boundaryがネゲートの場合、補正された画素ブロックＡ，Ｃがレジスタ・グループ２３，２５にそれぞれ保存される（Ｓ１１２，Ｓ２１２）。
【００５６】
（３．４）stage 3
stage 3において、サイクル・クロックdbf_cntは３である。このとき、マルチプレクサ１４，１５は、それぞれ入力ラインdr_b_v，dr_d_vを選択しており、レジスタ・グループ２４，２６に保存された画素ブロックＢ，Ｄが、ＤＢＦコア１６の入力ラインｐ，ｑにそれぞれ垂直入力される（Ｓ１１３，Ｓ２１３）。
【００５７】
ここで、画素ブロックＢ，Ｄの境界のエッジＤＢＦ２がピクチャの外部境界の場合、エッジフィルタ判定器６はピクチャ境界信号edge_boundaryをアサートし、そうでなければネゲートする。マルチプレクサ１７，１８は、ピクチャ境界信号edge_boundaryがアサートの場合ＤＢＦコア１６の入力ラインｐ，ｑを選択し、ネゲートの場合ＤＢＦコア１６の出力ラインｐ’，ｑ’を選択した状態となる（Ｓ１１４，Ｓ２１４）。
【００５８】
次いで、ＤＢＦコア１６は、入力ラインｐ，ｑに入力される画素ブロックＢ，Ｄのデータに基づき、エッジＤＢＦ２に対するＤＢＦ処理を行い、フィルタ処理により補正された画素ブロックＢ，Ｄを出力ラインｐ’，ｑ’に出力する（Ｓ１１５，Ｓ２１５）。
【００５９】
このとき、マルチプレクサ２０がマルチプレクサ１７を介してラインｐ’又はラインｐを選択した状態にあり、マルチプレクサ２２がマルチプレクサ１８を介してラインｑ’又はラインｑを選択した状態にある。従って、ピクチャ境界信号edge_boundaryがアサートの場合、元の画素ブロックＢ，Ｄがレジスタ・グループ２４，２６にそれぞれ保存され（Ｓ１１６ａ，Ｓ２１６ａ）、ピクチャ境界信号edge_boundaryがネゲートの場合、補正された画素ブロックＢ，Ｄがレジスタ・グループ２４，２６にそれぞれ保存される（Ｓ１１６，Ｓ２１６）。
【００６０】
以上のようなstage 0〜stage 3の処理を、ピクチャ内のすべてのシフトされた８×８画素ブロックについて走査順に順次実行する。上記stage 0〜stage 3の各ステージの処理をＤＢＦ２での１サイクルとする。ＤＢＦ２は、１つの８×８画素ブロックのフィルタ処理を４サイクルで実行することができる。
【００６１】
（４）ＳＡＯ３の構成
次に、図６のＳＡＯ３の詳細について説明する。図１０は、図６のＳＡＯ３の内部構成を表すブロック図である。図１１は、各入力ライン，各出力ラインで入出力される画素と、ＳＡＯコア３０で処理される部分画素ブロックとの関係を示す図である。図１２は、ＳＡＯレジスタ・グループの構成と各サイクルにおけるレジスタに入力される４×４画素ブロックを表す図である。図１０において、ラインバッファ４及びレフトバッファ５は、図６に示した同符号のものに対応する。レジスタ・グループ２３，２４，２５，２６は、図８に示した同符号のものに対応する。サイクル・クロックdbf_cntは、図６，図８の同符号の信号に対応する。存否判定信号sf_x_exist（x＝0, 1, 2, 3）は、図６の同符号の信号に対応する。
【００６２】
上記（１．２）で述べた通り、ＳＡＯにおいて、４×４画素ブロックＡ，Ｂ，Ｃ，Ｄ（図５（ａ）参照）は、それぞれ隣接する４×４画素ブロックの一部の画素を伴い、これらがＳＡＯコアに順次入力される（図５（ｂ）参照）。従って、原理的には９つの４×４ブロック（図５のＡ−Ｉ）を格納するための９つの４×４画素サイズのレジスタ・グループが必要とされる。本発明においては、勿論、９つのレジスタ・グループを用いてＳＡＯ３を構成してもよいが、４×４画素ブロック（Ａ−Ｉ）にレジスタ・グループを動的に割り当てることによって、画素ブロック（Ａ−Ｉ）に対するＳＡＯ処理をするには６つのレジスタ・グループを用意すれば十分となる。本実施例では、６つのレジスタ・グループを用いて構成した例を示す。
【００６３】
図１０において、ＳＡＯ３は、ＳＡＯコア３０、マルチプレクサ３１，３２，３３，３４，３５，３６，３７，３８，３９，４０，５１，５２，５３、レジスタ・グループ４１，４２，４３，４４，４５，４６、ラインバッファ出力セレクタ４７、ラインバッファ読出器４８、レフトバッファ出力セレクタ４９、レフトバッファ読出器５０及び出力レジスタ５４を備えている。尚、マルチプレクサ３１，３２，３３，３４が、本発明における「ＳＡＯブロックセレクタ」に相当する。
【００６４】
尚、図１０，図１１，図１２で使用されている記号については、ｍはマルチプレクサを表す。Ａ〜Ｉは、図５（ａ）に示した９つの４×４画素ブロックＡ〜Ｉに対応している。図１０のLT 2×2，RT 4×2，LB 2×4，RB 4×4は、ぞれぞれ、左上２×２部分画素ブロック，右上４×２部分画素ブロック，左下２×４部分画素ブロック，右下４×４部分画素ブロックを意味する（図１１参照）。
【００６５】
ＳＡＯコア３０は、４×４画素ブロックに対してサンプル適応オフセット（ＳＡＯ）処理を行うコアである。具体的なＳＡＯ処理の内容については、本発明と直接関係がないため省略するが、例えば、非特許文献１，pp.153-155に記載の処理が行われる。
【００６６】
マルチプレクサ３１，３２，３３，３４は、ＳＡＯコア３０に入力する画素ブロックを選択するセレクタである。また、マルチプレクサ３５，３６，３７，３８，３９，４０は、それぞれ、レフトバッファ５内のレジスタ・グループsr_a，sr_b，sr_c，sr_d，sr_e，sr_fに保存する８×８画素ブロックの出力ラインを選択するためのセレクタである。
【００６７】
各マルチプレクサ３１，…，４０には、ＤＢＦ２と共通のサイクル・クロックdbf_cntが入力され、そのカウント値によって入力ラインの選択が切り替えられる。各マルチプレクサ３１，…，４０の入力ラインに付された０〜３の数字とサイクル・クロックdbf_cntのカウント値が一致したときに、その入力ラインが選択される。
【００６８】
マルチプレクサ３１，３２，３３，３４は、それぞれ、ＳＡＯコア３０においてＳＡＯ処理する６×６画素ブロックの右上４×２部分画素ブロック，左下２×４部分画素ブロック，右下４×４部分画素ブロックを含む、８×８画素ブロックを選択し、出力ラインsf_0，sf_1，sf_2，sf_3へ出力する。
【００６９】
レジスタ・グループ４１，４２，４３，４４，４５，４６は、それぞれ４×４画素ブロックを記憶することができる。これら６つのレジスタ・グループ４１，４２，４３，４４，４５，４６に対し、それぞれ、sr_a，sr_b，sr_c，sr_d，sr_e，sr_fの記号を附す。また、これらのレジスタ・グループ４１，４２，４３，４４，４５，４６をまとめて「ＳＡＯレジスタ・グループ」と呼ぶ。
【００７０】
各ＳＡＯレジスタ・グループは、図１２に示したように、３×３個のノーマル・レジスタ（白色で示した位置の画素レジスタ）と、７個のシャドウ・レジスタ（灰色で示した位置の画素レジスタ）で構成される。シャドウ・レジスタは、ＤＢＦ２からのデータの保存に使用するレジスタである。ＳＡＯコア３０から各ＳＡＯレジスタ・グループに４×４画素ブロックのデータが入力されるとき、ノーマル・レジスタの値は入力されたデータに書き換えられるが、シャドウ・レジスタは元の値が保持される。シャドウ・レジスタは、ＳＡＯ処理のための周辺画素（図４（ｄ）に灰色で示した画素）を保存するために使用される。図１２において、各マルチプレクサ３５，３６，３７，３８，３９，４０の入力側の円内に示した文字Ａ〜Ｉは、各ＳＡＯレジスタ・グループに登録される４×４画素ブロック（図５参照）を示す。各円の右側の点線枠内の記号は、直前のサイクルにおいて当該４×４画素ブロックを保持しているストレージを示す。また、各円の左側の点線枠は、ＳＡＯコア３０により当該４×４画素ブロックが直前に補正されたことを示し、該点線枠内の記号は、当該４×４画素ブロックがＳＡＯコア３０から出力される出力ラインを示す。
【００７１】
ラインバッファ出力セレクタ４７は、ラインバッファ４に保存する８×８画素ブロックを選択し、ラインバッファ４に書き出す制御を行う。ラインバッファ出力セレクタ４７には、前記サイクル・クロックdbf_cntが入力されており、出力ラインに付された数字１，３とサイクル・クロックdbf_cntのカウント値が一致したときに、書き出しが行われる。
【００７２】
ラインバッファ読出器４８は、ラインバッファ４から４×４画素ブロックを読み出すためにアドレス設定を行う。ラインバッファ４は、ラインバッファ読出器４８によりリードアドレスが設定されると、その次のサイクルで、当該アドレスに保存された４×４画素ブロックを内部の出力レジスタ・グループ（up_rd）に読み出し、さらにその次のサイクルで出力できる状態とする。
【００７３】
レフトバッファ出力セレクタ４９は、ＣＴＢの最も右側のシフトされた８×８画素ブロックのＳＡＯ処理を行った際に、レフトバッファ５に保存する８×８画素ブロック（Ｇ，Ｂ，Ｄ。図５参照）を選択し、レフトバッファ５に書き出す制御を行う。
【００７４】
レフトバッファ読出器５０は、ＣＴＢの最も左側のシフトされた８×８画素ブロックのＳＡＯ処理を行う際に、レフトバッファ５から４×４画素ブロック（Ｅ，Ｈ，Ｉ。図５参照）を読み出すためにアドレス設定を行う。また、レフトバッファ５から４×４画素ブロック（Ｅ，Ｈ，Ｉ）を、レフトバッファ５内部の出力レジスタ・グループ（lf_rd_1，lf_rd_2，lf_rd_3）に読み出した際に、マルチプレクサ５１，５２，５３に対してレフトバッファ５側を選択する指示信号を出力する。
【００７５】
マルチプレクサ５１，５２，５３は、それぞれ、レジスタ・グループsr_a，sr_b，sr_cとレフトバッファ５内部の出力レジスタ・グループとの入力切り替えを行うセレクタである。
【００７６】
（５）ＳＡＯの動作
以上のように構成された本実施例のＳＡＯ３について、以下その動作を説明する。図１３，図１４は、１つのシフトされた８×８画素ブロックをＳＡＯ処理する際の図１０のＤＢＦ２の動作を表すフローチャートである。図１３，図１４のsf_0，sf_1，sf_2，sf_3の列のフローは、それぞれ、図１０のＳＡＯコアの入出力ラインsf_0，sf_1，sf_2，sf_3に関連する処理に対応している。また、図１３，図１４のother resistor settingの列のフローは、上記入出力ラインsf_0，sf_1，sf_2，sf_3に関連するもの以外のレジスタ・グループsr_a，sr_b，sr_c，sr_d，sr_e，sr_fに対する処理を表す。
【００７７】
（３．１）前提条件
まず、前提として、カレント・サイクルよりも前のサイクルで１回以上のＳＡＯ処理が既に行われている場合には、レジスタ・グループsr_a，sr_b，sr_cには、カレント・サイクルにおいてＳＡＯ処理の対象となる４×４画素ブロックＥ，Ｈ，Ｉ（図５参照）がそれぞれ保存されている。カレント・サイクルよりも前にまだ１度もＳＡＯ処理が行われていない場合には、すべてのＳＡＯレジスタ・グループ内のデータはunknownである。
【００７８】
また、カレント・サイクルにおいてＳＡＯ処理が実行される直前に、今回の処理対象となるシフトされた１０×１０画素ブロック（図４（ｄ））に含まれるシフトされた８×８画素ブロック（図４（ｂ））に対してＤＢＦ処理が完了しており、当該８×８画素ブロックに含まれる４つのＤＢＦ処理された４×４画素ブロックＡ，Ｂ，Ｃ，Ｄ（図５（ａ））は、それぞれＤＢＦ３内のレジスタ・グループdr_a，dr_b，dr_c，dr_d（図８）に保持されているものとする。
【００７９】
また、ラインバッファ読出器４８は、ラインバッファ４の出力レジスタ・グループ（up_rd）に、カレント・サイクルにおいてＳＡＯ処理の対象となるシフトされた１０×１０画素ブロックに対応する４×４画素ブロックＦ（図５（ａ））をフェッチしているものとする。但し、カレント・サイクルにおいてＳＡＯ処理の対象となるシフトされた１０×１０画素ブロックがピクチャの最上端（例えば、図７の０．０，０．１，１．０，１．１，２．０，２．１，３．０を含む１０×１０画素ブロック）の場合、ラインバッファ４にはまだ画素ブロックが保持されていないため、ラインバッファ４の出力レジスタ・グループ（up_rd）内のデータはunknownである。
【００８０】
また、カレント・サイクルにおいてＳＡＯ処理の対象となるシフトされた１０×１０画素ブロックがＣＴＢの最左端（例えば、図７の０．０，０．２，１．０，１．２，２．０，２．２等を含む１０×１０画素ブロック）の画素ブロックである場合には、レフトバッファ読出器５０は、レフトバッファ５の出力レジスタ・グループ（lf_rd_1，lf_rd_2，lf_rd_3）に、当該１０×１０画素ブロックに対応する４×４画素ブロックＥ，Ｈ，Ｉ（図５（ａ））をフェッチしているものとする。但し、カレント・サイクルよりも前にまだ１度もＳＡＯ処理が行われていない場合には、レフトバッファ５にはまだ画素ブロックが保持されていないため、レフトバッファ５の出力レジスタ・グループ（lf_rd_1，lf_rd_2，lf_rd_3）内のデータはunknownである。
【００８１】
（３．２）stage 0
stage 0において、サイクル・クロックdbf_cntは０である。従って、マルチプレクサ３１，３２，３３，３４は、それぞれ、次表の通りに接続をする。
【００８２】
【表１】
2015032982.tif 000003
これにより、ＳＡＯコア３０のLT 2×2領域，RT 4×2領域，LB 2×4領域，RB 4×4領域（図１１）には、それぞれ、画素ブロックＥ，Ｆ，Ｈ，Ａの部分画素ブロックが設定される（Ｓ３０１，Ｓ４０１，Ｓ５０１，Ｓ６０１）（図５（ｂ）参照）。
【００８３】
尚、カレント・ブロック（シフトされた１０×１０画素ブロック）がＣＴＢの左端の場合、sr_a，sr_bに画素ブロックＥ，Ｈのデータは保存されていないため、マルチプレクサ５１，５２は、それぞれ、レフトバッファ５の出力レジスタlf_rd_1，lf_rd_2の側を選択する。これにより、ＳＡＯコア３０の入力ラインsf_0にはレフトバッファ５に事前に保存されている画素ブロックＥが、ＳＡＯコア３０の入力ラインsf_2にはレフトバッファ５に事前に保存されている画素ブロックＨが入力される。
【００８４】
ここで、ＳＡＯブロック存否チェッカ７は、画素ブロックＥがピクチャ内部の場合、存否判定信号sf_0_existをアサートし、そうでなければネゲートする。画素ブロックＦがピクチャ内部の場合、存否判定信号sf_1_existをアサートし、そうでなければネゲートする。画素ブロックＨがピクチャ内部の場合、存否判定信号sf_2_existをアサートし、そうでなければネゲートする。画素ブロックＡがピクチャ内部の場合、存否判定信号sf_3_existをアサートし、そうでなければネゲートする。ＳＡＯコア３０は、存否判定信号sf_x_exist（x＝0, 1, 2, 3）の何れかがネゲートの場合にはＳＡＯ処理は実行せず、画素ブロックＥ，Ｆ，Ｈ，Ａをそのまま出力ラインsf_0，sf_1，sf_2，sf_3へ出力する（Ｓ３０２，Ｓ４０２，Ｓ５０２，Ｓ６０２）。
【００８５】
存否判定信号sf_x_exist（x＝0, 1, 2, 3）が全部アサートの場合、ＳＡＯコア３０は、画素ブロックＥ，Ｆ，Ｈ，Ａに対してＳＡＯ処理を実行し、図４（ｄ）の６×６画素ブロックの中央の４×４画素ブロック（白色の「○」の画素ブロック）の補正を行う（Ｓ３０３，Ｓ４０３，Ｓ５０３，Ｓ６０３）。そして、ＳＡＯ処理がされた画素ブロックＥ，Ｆ，Ｈ，Ａが出力ラインsf_0，sf_1，sf_2，sf_3へ出力される。
【００８６】
ここで、サイクル・クロックdbf_cntが０のとき、マルチプレクサ３５，３６，３７，３８，３９，４０は、それぞれ、次表の通りに接続をする。
【００８７】
【表２】
2015032982.tif 000004
これにより、レジスタsr_a，レジスタsr_b，レジスタsr_d，レジスタsr_eには、それぞれ、画素ブロックＥ，Ｈ，Ａ，Ｆが保存される（Ｓ３０４，Ｓ４０４，Ｓ５０４，Ｓ６０４）（図１２参照）。また、レジスタsr_cには画素ブロックＩが引き続き維持され、レジスタsr_fはこの時点ではunknownのままである（Ｓ７０４）。
【００８８】
尚、この時点で、画素ブロックＥについてはＳＡＯ処理はすべて終了しているので、出力ラインsf_0の画素ブロックＥは、出力レジスタ５４に登録され出力ラインoutから出力される（Ｓ７０４）。
【００８９】
（３．３）stage 1
stage 1において、サイクル・クロックdbf_cntは１である。従って、マルチプレクサ３１，３２，３３，３４は、それぞれ、次表の通りに接続をする。
【００９０】
【表３】
2015032982.tif 000005
これにより、ＳＡＯコア３０のLT 2×2領域，RT 4×2領域，LB 2×4領域，RB 4×4領域（図１１）には、それぞれ、画素ブロックＨ，Ａ，Ｉ，Ｃの部分画素ブロックが設定される（Ｓ３０５，Ｓ４０５，Ｓ５０５，Ｓ６０５）（図５（ｂ）参照）。
【００９１】
尚、カレント・ブロック（シフトされた１０×１０画素ブロック）がＣＴＢの左端の場合、sr_cに画素ブロックＩのデータは保存されていないため、マルチプレクサ５３は、レフトバッファ５の出力レジスタlf_rd_3の側を選択する。これにより、ＳＡＯコア３０の入力ラインsf_2にはレフトバッファ５に事前に保存されている画素ブロックＩが入力される。
【００９２】
ここで、ＳＡＯブロック存否チェッカ７は、画素ブロックＨがピクチャ内部の場合、存否判定信号sf_0_existをアサートし、そうでなければネゲートする。画素ブロックＡがピクチャ内部の場合、存否判定信号sf_1_existをアサートし、そうでなければネゲートする。画素ブロックＩがピクチャ内部の場合、存否判定信号sf_2_existをアサートし、そうでなければネゲートする。画素ブロックＣがピクチャ内部の場合、存否判定信号sf_3_existをアサートし、そうでなければネゲートする。ＳＡＯコア３０は、存否判定信号sf_x_exist（x＝0, 1, 2, 3）の何れかがネゲートの場合にはＳＡＯ処理は実行せず、画素ブロックＥ，Ｆ，Ｈ，Ａをそのまま出力ラインsf_0，sf_1，sf_2，sf_3へ出力する（Ｓ３０６，Ｓ４０６，Ｓ５０６，Ｓ６０６）。
【００９３】
存否判定信号sf_x_exist（x＝0, 1, 2, 3）が全部アサートの場合、ＳＡＯコア３０は、画素ブロックＨ，Ａ，Ｉ，Ｃに対してＳＡＯ処理を実行し、図４（ｄ）の６×６画素ブロックの中央の４×４画素ブロック（白色の「○」の画素ブロック）の補正を行う（Ｓ３０７，Ｓ４０７，Ｓ５０７，Ｓ６０７）。そして、ＳＡＯ処理がされた画素ブロックＨ，Ａ，Ｉ，Ｃが出力ラインsf_0，sf_1，sf_2，sf_3へ出力される。
【００９４】
ここで、サイクル・クロックdbf_cntが１のとき、マルチプレクサ３５，３６，３７，３８，３９，４０は、それぞれ、次表の通りに接続をする。
【００９５】
【表４】
2015032982.tif 000006
これにより、レジスタsr_a，レジスタsr_b，レジスタsr_c，レジスタsr_dには、それぞれ、画素ブロックＣ，Ｈ，Ｉ，Ａが保存される（Ｓ３０８，Ｓ４０８，Ｓ５０８，Ｓ６０８）（図１２参照）。このとき、画素ブロックＩについてはＳＡＯ処理がすべて終了しているので、ラインバッファ出力セレクタ４７は、ＳＡＯコア３０の出力ラインsf_2の画素ブロックＩをラインバッファ４に保存する（Ｓ５０８）。また、レジスタsr_eには画素ブロックＦが引き続き維持され、レジスタsr_fにはＳＡＯ処理前の画素ブロックＢが保存される（Ｓ７０８）。
【００９６】
尚、この時点で、画素ブロックＨについてはＳＡＯ処理はすべて終了しているので、出力ラインsf_0の画素ブロックＨは、出力レジスタ５４に登録され出力ラインoutから出力される（Ｓ７０８）。また、このとき、ラインバッファ読出器４８は、画素ブロックＧをラインバッファ４の出力レジスタup_rdにフェッチしておく（Ｓ７０８）。
【００９７】
（３．４）stage 2
stage 2において、サイクル・クロックdbf_cntは２である。従って、マルチプレクサ３１，３２，３３，３４は、それぞれ、次表の通りに接続をする。
【００９８】
【表５】
2015032982.tif 000007
これにより、ＳＡＯコア３０のLT 2×2領域，RT 4×2領域，LB 2×4領域，RB 4×4領域（図１１）には、それぞれ、画素ブロックＦ，Ｇ，Ａ，Ｂの部分画素ブロックが設定される（Ｓ３０９，Ｓ４０９，Ｓ５０９，Ｓ６０９）（図５（ｂ）参照）。
【００９９】
ここで、ＳＡＯブロック存否チェッカ７は、画素ブロックＦがピクチャ内部の場合、存否判定信号sf_0_existをアサートし、そうでなければネゲートする。画素ブロックＧがピクチャ内部の場合、存否判定信号sf_1_existをアサートし、そうでなければネゲートする。画素ブロックＡがピクチャ内部の場合、存否判定信号sf_2_existをアサートし、そうでなければネゲートする。画素ブロックＢがピクチャ内部の場合、存否判定信号sf_3_existをアサートし、そうでなければネゲートする。ＳＡＯコア３０は、存否判定信号sf_x_exist（x＝0, 1, 2, 3）の何れかがネゲートの場合にはＳＡＯ処理は実行せず、画素ブロックＦ，Ｇ，Ａ，Ｂをそのまま出力ラインsf_0，sf_1，sf_2，sf_3へ出力する（Ｓ３１０，Ｓ４１０，Ｓ５１０，Ｓ６１０）。
【０１００】
存否判定信号sf_x_exist（x＝0, 1, 2, 3）が全部アサートの場合、ＳＡＯコア３０は、画素ブロックＦ，Ｇ，Ａ，Ｂに対してＳＡＯ処理を実行し、図４（ｄ）の６×６画素ブロックの中央の４×４画素ブロック（白色の「○」の画素ブロック）の補正を行う（Ｓ３１１，Ｓ４１１，Ｓ５１１，Ｓ６１１）。そして、ＳＡＯ処理がされた画素ブロックＦ，Ｇ，Ａ，Ｂが出力ラインsf_0，sf_1，sf_2，sf_3へ出力される。
【０１０１】
ここで、サイクル・クロックdbf_cntが２のとき、マルチプレクサ３５，３６，３７，３８，３９，４０は、それぞれ、次表の通りに接続をする。
【０１０２】
【表６】
2015032982.tif 000008
これにより、レジスタsr_a，レジスタsr_b，レジスタsr_d，レジスタsr_eには、それぞれ、画素ブロックＧ，Ｂ，Ａ，Ｆが保存される（Ｓ３１２，Ｓ４１２，Ｓ５１２，Ｓ６１２）（図１２参照）。また、レジスタsr_cにはＳＡＯ処理前の画素ブロックＤが保存され、レジスタsr_fにはレジスタsr_aに保持されていた画素ブロックＣが移される（Ｓ７１２）。
【０１０３】
尚、この時点で、画素ブロックＦについてはＳＡＯ処理はすべて終了しているので、出力ラインsf_0の画素ブロックＦは、出力レジスタ５４に登録され出力ラインoutから出力される（Ｓ７１２）。
【０１０４】
（３．５）stage 3
stage 3において、サイクル・クロックdbf_cntは３である。従って、マルチプレクサ３１，３２，３３，３４は、それぞれ、次表の通りに接続をする。
【０１０５】
【表７】
2015032982.tif 000009
これにより、ＳＡＯコア３０のLT 2×2領域，RT 4×2領域，LB 2×4領域，RB 4×4領域（図１１）には、それぞれ、画素ブロックＡ，Ｂ，Ｃ，Ｄの部分画素ブロックが設定される（Ｓ３１３，Ｓ４１３，Ｓ５１３，Ｓ６１３）（図５（ｂ）参照）。
【０１０６】
ここで、ＳＡＯブロック存否チェッカ７は、画素ブロックＡがピクチャ内部の場合、存否判定信号sf_0_existをアサートし、そうでなければネゲートする。画素ブロックＢがピクチャ内部の場合、存否判定信号sf_1_existをアサートし、そうでなければネゲートする。画素ブロックＣがピクチャ内部の場合、存否判定信号sf_2_existをアサートし、そうでなければネゲートする。画素ブロックＤがピクチャ内部の場合、存否判定信号sf_3_existをアサートし、そうでなければネゲートする。ＳＡＯコア３０は、存否判定信号sf_x_exist（x＝0, 1, 2, 3）の何れかがネゲートの場合にはＳＡＯ処理は実行せず、画素ブロックＡ，Ｂ，Ｃ，Ｄをそのまま出力ラインsf_0，sf_1，sf_2，sf_3へ出力する（Ｓ３１４，Ｓ４１４，Ｓ５１４，Ｓ６１４）。
【０１０７】
存否判定信号sf_x_exist（x＝0, 1, 2, 3）が全部アサートの場合、ＳＡＯコア３０は、画素ブロックＡ，Ｂ，Ｃ，Ｄに対してＳＡＯ処理を実行し、図４（ｄ）の６×６画素ブロックの中央の４×４画素ブロック（白色の「○」の画素ブロック）の補正を行う（Ｓ３１５，Ｓ４１５，Ｓ５１５，Ｓ６１５）。そして、ＳＡＯ処理がされた画素ブロックＡ，Ｂ，Ｃ，Ｄが出力ラインsf_0，sf_1，sf_2，sf_3へ出力される。
【０１０８】
ここで、サイクル・クロックdbf_cntが３のとき、マルチプレクサ３５，３６，３７，３８，３９，４０は、それぞれ、次表の通りに接続をする。
【０１０９】
【表８】
2015032982.tif 000010
これにより、レジスタsr_b，レジスタsr_c，レジスタsr_d，レジスタsr_fには、それぞれ、画素ブロックＢ，Ｄ，Ａ，Ｃが保存される（Ｓ３１６，Ｓ４１６，Ｓ５１６，Ｓ６１６）（図１２参照）。このとき、画素ブロックＣについてはＳＡＯ処理がすべて終了しているので、ラインバッファ出力セレクタ４７は、ＳＡＯコア３０の出力ラインsf_2の画素ブロックＣをラインバッファ４に保存する（Ｓ５１６）。また、レジスタsr_aには画素ブロックＧが引き続き維持され、レジスタsr_eには画素ブロックＦが引き続き維持される（Ｓ７１６）。
【０１１０】
尚、この時点で、画素ブロックＡについては、ＳＡＯ処理はすべて終了しているので、出力ラインsf_0の画素ブロックＡは、出力レジスタ５４に登録され出力ラインoutから出力される（Ｓ７１６）。
【０１１１】
また、このとき、ラインバッファ読出器４８は、次のサイクルでＳＡＯ処理の対象となるシフトされた１０×１０画素ブロックに対する画素ブロックＦを、ラインバッファ４の出力レジスタup_rdにフェッチしておく。
【０１１２】
また、カレント・ブロック（シフトされた１０×１０画素ブロック）がＣＴＢの右端の場合（Ｓ７１７）、レフトバッファ出力セレクタ４９は、レジスタ・グループdr_a，dr_b，dr_cに保存された画素ブロックＧ，Ｂ，Ｄをレフトバッファ５に保存する（Ｓ７１８）。また、この場合、次のサイクルではカレント・ブロックがＣＴＢの左端へ移動するので、事前にレフトバッファ５から、次のサイクルでＳＡＯ処理の対象となるシフトされた１０×１０画素ブロックに対する画素ブロックＥ，Ｈ，Ｉを、レフトバッファ５の出力レジスタlf_rd_1，lf_rd_2，lf_rd_3にフェッチしておく（Ｓ７１８）。
【０１１３】
以上のstage 0〜stage 3の動作を、１０×１０画素ブロックの走査順に繰り返し実行することによって、ピクチャ全体のＳＡＯ処理が行われる。
【０１１４】
（６）全体的なパイプライン動作
図１５に、本発明のフィルタ装置におけるＤＢＦ２とＳＡＯ３のパイプライン処理を示す。上半分はＤＢＦ２のパイプライン処理、下半分はＳＡＯ３のパイプライン処理である。sf_ioはＳＡＯコア３０の入力（sf_0，sf_1，sf_2，sf_3）及び出力（sf_0，sf_1，sf_2，sf_3）を意味する。up_ra，up_rd，up_wa/wdは、それぞれ、ラインバッファ４のリードアドレス、リードデータ、ライトアドレス／データを表す。lf_ra，lf_rd，lf_wa/wdは、それぞれ、レフトバッファ５のリードアドレス、リードデータ、ライトアドレス／データを表す。ou_wa/dは、出力レジスタ５４のライトアドレス／データを表す。
【０１１５】
薄灰色のマスは、ＤＢＦコア１６の出力又はＳＡＯコア３０の出力がレジスタに登録されたことを表す。また、濃灰色のマスは、ＤＢＦコア１６又はＳＡＯコア３０においてＤＢＦ処理又はＳＡＯ処理が実行されることを意味する。
【０１１６】
レフトバッファ５の行（lf_ra，lf_rd）に記載のＧＤＢ（次サイクルにおけるＥＨＩ）は、ＣＴＢ内のシフトされた８×８ブロックがＣＴＢの右端を処理する場合にのみ読み出される（図１４のＳ７１７，Ｓ７１８）。図１０では、レフトバッファ５の出力レジスタ・グループ（lf_rd_1，lf_rd_2，lf_rd_3）に読み出された画素ブロックＧ，Ｄ，Ｂ（次サイクルにおける画素ブロックＥ，Ｈ，Ｉ）は、マルチプレクサ５１，５２，５３の選択によって直接ＳＡＯコア３０へ入力される構成を示したが、マルチプレクサ５１，５２，５３を使用せず、読み出された画素ブロックＧ，Ｄ，Ｂを、一旦レジスタ・グループsr_a，sr_b，sr_cに登録するように構成してもよい。
【０１１７】
レフトバッファ５の行（lf_ra，lf_rd）に記載のＧ（次サイクルにおけるＥ）は、ＣＴＢ内のシフトされた８×８ブロックがＣＴＢの右上を処理する場合にのみ読み出される。この４×４画素ブロックは、ラインバッファ４には保存されないからである。
【０１１８】
以上のように、パイプライン処理を行うことで、ＤＢＦコア１６やＳＡＯコア３０の待機時間を極力なくし、ＤＢＦ処理及びＳＡＯ処理を高速且つ低コストに実行することが可能となる。
【０１１９】
（７）実装による検証結果
表９に、本発明のフィルタ装置の実装による検証結果を示す。現時点で、ＨＥＶＣのＳＡＯを評価した報告が見つからなかったため、表９には、比較としてＳＡＯをサポートしていない非特許文献４に記載のＨＥＶＣ  ＤＢＦ、Ｈ．２６４  ＤＢＦ、並びに非特許文献５，６に記載のＨ．２６４  ＤＢＦを示した。
【０１２０】
【表９】
2015032982.tif 000011
【０１２１】
本発明のフィルタ装置では、６５ｎｍテクノロジを用いて動作周波数２４０ＭＨｚで実行することが可能であり、これにより4320@120 fpsデコーディングが可能となる。これは、非特許文献４に記載のＨＥＶＣ  ＤＢＦの２倍である。非特許文献５，６に関しては、もしもこれらの文献記載のアーキテクチャにおいて、ＶＬＳＩプロセス・テクノロジを６５ｎｍにスケーリングし動作周波数が２４０ＭＨｚに達することができたとしても、それらの性能は、依然、本発明に係るフィルタ装置の１／３までしか達しない。本発明では、ＤＢＦのレジスタ・グループ（dr_a，dr_b，dr_c，dr_d）はＳＡＯへの入力バッファとして共有されるため、ＤＢＦとＳＡＯとの間の中間ストレージは必要なくなる。また、本発明に係るフィルタ装置は、luma及びchromaのハードウェア並列化をサポートしているため、これによりスループットが向上する。また、ＳＡＯのスループットがＤＢＦのスループットに一致することが保証されており、フィルタ装置全体のスループットが保証されている。
【符号の説明】
【０１２２】
１  フィルタ装置
２  ＤＢＦ
３  ＳＡＯ
４  ラインバッファ
５  レフトバッファ
６  エッジフィルタ判定器
７  ＳＡＯブロック存否チェッカ
８  再構成画素バッファ
１０，１１  ブロックセレクタ
１２，１３，２３，２４，２５，２６  レジスタ・グループ
１４，１５，１７，１８，１９，２０，２１，２２  マルチプレクサ
１６  ＤＢＦコア
３０  ＳＡＯコア
３１，３２，３３，３４，３５，３６，３７，３８，３９，４０，５１，５２，５３  マルチプレクサ
４１，４２，４３，４４，４５，４６  レジスタ・グループ
４７  ラインバッファ出力セレクタ
４８  ラインバッファ読出器
４９  レフトバッファ出力セレクタ
５０  レフトバッファ読出器
５４  出力レジスタ
【図６】
2015032982.tif 000012
【図８】
2015032982.tif 000013
【図１２】
2015032982.tif 000014
【図１】
2015032982.tif 000015
【図２】
2015032982.tif 000016
【図３】
2015032982.tif 000017
【図４】
2015032982.tif 000018
【図５】
2015032982.tif 000019
【図７】
2015032982.tif 000020
【図９】
2015032982.tif 000021
【図１０】
2015032982.tif 000022
【図１１】
2015032982.tif 000023
【図１３】
2015032982.tif 000024
【図１４】
2015032982.tif 000025
【図１５】
2015032982.tif 000026