【文献】
J. Sole et al.,Parallel Context Processing for the significance map in high coding efficiency,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,4th Meeting: Daegu, KR,2011年 1月,JCTVC-D262,pp.1-4
【文献】
J. Sole et al.,Unified scans for the significance map and coefficient level coding in high coding efficiency,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,5th Meeting: Geneva, CH,2011年 3月,JCTVC-E335,pp.1-5
【文献】
J. Sole et al.,CE11: Parallel Context Processing for the significance map in high coding efficiency,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,5th Meeting: Geneva, CH,2011年 3月,JCTVC-E338,pp.1-5
【文献】
Joel Sole et al.,Removal of the parsing dependency of residual coding on intra mode,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,6th Meeting: Torino, IT,2011年 7月,JCTVC-F550,pp.1-6
【文献】
Joel Sole et al.,Non-CE11: Diagonal sub-block scan for HE residual coding,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,7th Meeting: Geneva, CH,2011年11月,JCTVC-G323_r3,pp.1-9
(58)【調査した分野】(Int.Cl.,DB名)
前記有意性マップを復号することは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースLSCインジケータを使用することを備える、請求項1に記載の方法。
前記1つまたは複数のプロセッサは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースLSCインジケータを使用するように構成される、請求項6に記載のビデオ復号デバイス。
【発明を実施するための形態】
【0012】
添付の図面は例を示している。添付の図面中の参照番号によって示される要素は、以下の説明における同様の参照番号によって示される要素に対応する。本開示では、序数語(たとえば、「第1の」、「第2の」、「第3の」など)で始まる名前を有する要素は、必ずしもそれらの要素が特定の順序を有することを暗示するとは限らない。そうではなく、そのような序数語は、同じまたは同様のタイプの異なる要素を指すのに使用されるにすぎない。
【0013】
以下で説明するように、ビデオエンコーダは変換係数ブロックを生成し得る。変換係数ブロックの各々は、変換係数の2次元アレイであり得る。ビデオエンコーダが変換係数ブロックを生成した後、ビデオエンコーダは、スキャン順序に従って変換係数ブロックの最後の有意係数(LSC)を識別し得る。言い換えれば、変換係数ブロックの変換係数がスキャン順序に従って順序付けられるとき、変換係数ブロックのLSCは最後の非ゼロ変換係数である。スキャン順序は、変換係数ブロックのDC変換係数(すなわち、左上変換係数)で開始し得る。
【0014】
ビデオエンコーダは、スキャン順序に従ってLSCの順序位置を示すスキャンベースLSCインジケータを出力し得る。言い換えれば、ビデオエンコーダは、変換係数がスキャン順序に従って順序付けられるとき、LSCがn番目の変換係数であることを示すスキャンベースLSCインジケータを出力し得る。
【0015】
いくつかの従来のビデオエンコーダでは、ビデオエンコーダは、変換係数ブロック上で一連のコーディングパスを実行し得る。コーディングパスの各々の間に、ビデオエンコーダは、スキャン順序に従って変換係数ブロックの変換係数を処理し得る。コーディングパスの各々の間に、ビデオエンコーダは、変換係数に関する情報を符号化する。
【0016】
コーディングパスのうちの1つの間に、ビデオエンコーダは有意性マップを生成する。有意性マップは、変換係数ブロック中の変換係数が有意(すなわち、非ゼロ)であるかどうかを示す一連の有意性フラグを含む。有意性マップを生成するために、ビデオエンコーダは、スキャン順序に従って変換係数の各々を処理し得る。ビデオエンコーダが変換係数を処理するとき、ビデオエンコーダは、変換係数の順序位置がスキャン順序に従ってLSCの順序位置の前に発生するかどうかを判断し得る。そうである場合、ビデオエンコーダは、変換係数の有意性フラグを生成し得る。変換係数の値が非ゼロである場合、有意性フラグは「1」の値を有し得る。変換係数の値がゼロに等しい場合、有意性フラグは「0」の値を有し得る。しかしながら、変換係数の順序位置がスキャン順序に従ってLSCの順序位置の前に発生しない場合、ビデオエンコーダは、変換係数の有意性フラグを生成しない。
【0017】
ビデオデコーダは、スキャンベースLSCインジケータと変換係数ブロックの有意性マップとを受信し得る。ビデオデコーダは、次いで、スキャンベースLSCインジケータに基づいて、有意性マップが変換係数ブロックの特定の変換係数の有意性フラグを含むかどうかを判断し得る。ビデオエンコーダが変換係数の有意性フラグを生成しない場合、ビデオデコーダは、変換係数が有意でないと推論し得る。
【0018】
いくつかの事例では、ビデオエンコーダは、LSCの変換係数ブロック内の座標を示すブロックベースLSCインジケータを生成し得る。ビデオエンコーダは、次いで、ブロックベースLSCインジケータをCABAC符号化し得る。x座標とy座標との間の統計的関係のために、LSCの順序位置に関してLSCの位置を示すよりも、ブロックベースLSCインジケータを使用してLSCの位置を示すほうが、必要なビットが少なくて済み得る。
【0019】
さらに、いくつかの事例では、ビデオエンコーダが有意性マップを生成するためのスキャン順序を使用するときよりも、ビデオエンコーダが有意性マップを生成するためのスキャン順序の逆を使用するときのほうが、有意性マップを表すためのビットが少なくて済み得る。しかしながら、ビデオエンコーダがブロックベースLSCインジケータを生成する場合、およびビデオエンコーダが有意性マップを生成するために逆スキャン順序を使用する場合、ビデオデコーダは、ブロックベースLSCインジケータに基づいて、変換係数の順序位置が変換係数ブロックのLSCの順序位置の前に発生するかどうかを判断することができないことがある。したがって、ビデオデコーダは、ブロックベースLSCインジケータに基づいて、有意性マップが特定の変換係数の有意性フラグを含むかどうかを判断することができないことがある。
【0020】
この問題に対処するために、ビデオデコーダは、本開示の技法に従って、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する変換演算を実行し得る。スキャンベースLSCインジケータは、スキャン順序に従ってLSCの順序位置を示し得る。ビデオデコーダは、次いで、スキャンベースLSCインジケータに基づいて、ブロックのための有意性マップを復号し得る。
【0021】
本明細書で説明するように、ビデオデコーダは、ブロックベースLSCインジケータをスキャンベースLSCインジケータに様々な方法で変換し得る。たとえば、ビデオデコーダは、ブロックベースLSCインジケータからスキャンベースLSCインジケータを導出するために非反復アルゴリズムを実行し得る。別の例では、ビデオデコーダは、ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスすることに少なくとも部分的によって、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換し得る。さらに別の例では、ビデオデコーダは、ブロックベースLSCインジケータの座標を有する位置に達するまで、スキャン順序に従って変換係数ブロック中の位置中をスキャンするループ動作を実行し得る。この例では、ビデオデコーダは、座標を有する位置より前の変換係数ブロックの位置ごとにスキャンベースLSCインジケータを増分し得る。
【0022】
図1は、本開示で説明する技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本開示では、「ビデオコーディング」という用語は、ビデオ符号化およびビデオ復号を指すことがある。
図1に示すように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は符号化ビデオデータを生成する。宛先デバイス14は、符号化ビデオデータを後で復号し得る。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、携帯電話、電話ハンドセット、「スマート」パッド、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイス、またはビデオデータを符号化および復号することが可能なタイプのコンピューティングデバイスを含む、広範囲にわたるデバイスのいずれかを備え得る。
【0023】
宛先デバイス14は、チャネル16を介して符号化ビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動させることが可能な媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が、符号化ビデオデータを宛先デバイス14に直接リアルタイムで送信することを可能にする通信媒体を備え得る。ソースデバイス12または別のデバイスは、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得る。通信媒体は、無線周波数(RF)スペクトルあるいは1つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体を備え得る。チャネル16は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。チャネル16は、ソースデバイス12から宛先デバイス14への符号化ビデオデータの通信を可能にするのに有用であり得るルータ、スイッチ、基地局、または任意の他の機器を含み得る。
【0024】
いくつかの例では、ソースデバイス12および宛先デバイス14は、ワイヤレス通信のために装備され得る。ただし、本開示の技法は、必ずしもワイヤレス適用例または設定に限定されるとは限らない。そうではなく、本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例など、様々なマルチメディア適用例のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、ソースデバイス12および宛先デバイス14は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、および/またはビデオテレフォニーなどの適用例をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
【0025】
さらに、いくつかの例では、ソースデバイス12は、符号化ビデオデータをストレージシステム34に出力し得る。同様に、宛先デバイス14は、ストレージシステム34に記憶された符号化ビデオデータにアクセスし得る。様々な例では、ストレージシステム34は、様々な分散型またはローカルアクセス型データ記憶媒体を含み得る。データ記憶媒体の例示的なタイプとしては、限定はしないが、ハードドライブ、ブルーレイ(登録商標)ディスク、DVD、CD−ROM、固体メモリユニット、揮発性もしくは不揮発性メモリ、または符号化ビデオデータの記憶に適した他のデジタル記憶媒体がある。
【0026】
いくつかの例では、ストレージシステム34は、ソースデバイス12によって生成された符号化ビデオを保持し得るファイルサーバまたは別の中間ストレージデバイスを備え得る。宛先デバイス14は、ストリーミングまたはダウンロードを介してストレージシステム34から、記憶されたビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶すること、およびその符号化ビデオデータを宛先デバイス14に送信することが可能な任意のタイプのサーバであり得る。例示的なファイルサーバとしては、(たとえば、ウェブサイトのための)ウェブサーバ、FTPサーバ、ネットワーク接続ストレージ(NAS:network attached storage)デバイス、またはローカルディスクドライブがある。宛先デバイス14は、インターネット接続を含む、任意の標準のデータ接続を介して符号化ビデオデータにアクセスし得る。これは、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適であるワイヤレスチャネル(たとえば、Wi−Fi接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ストレージシステム34からの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
【0027】
図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機も含み得る。ビデオソース18は、ビデオエンコーダ20にビデオデータを与える。様々な例では、ビデオソース18は、ビデオデータを与えるための様々なタイプのデバイスおよび/またはシステムを備え得る。たとえば、ビデオソース18は、ビデオカメラなどのビデオキャプチャデバイスを備え得る。別の例では、ビデオソース18は、前にキャプチャされたビデオを包含するビデオアーカイブを備え得る。さらに別の例では、ビデオソース18は、ビデオコンテンツプロバイダからビデオを受信するビデオフィードインターフェースを備え得る。さらに別の例では、ビデオソース18は、コンピュータグラフィックスデータを生成するためのコンピュータグラフィックスシステムを備え得る。
【0028】
以下で詳細に説明するように、ビデオエンコーダ20は、ビデオソース18によって与えられたビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信し得る。さらに、いくつかの例では、ストレージシステム34は、宛先デバイス14または他のデバイスによる後のアクセスのために符号化ビデオデータを記憶し得る。
【0029】
本開示では、概して、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリング」することに言及し得る。ただし、ビデオエンコーダ20は、いくつかのシンタックス要素をビデオデータの様々な符号化部分に関連付けることによって情報をシグナリングし得ることを理解されたい。すなわち、ビデオエンコーダ20は、いくつかのシンタックス要素をビデオデータの様々な符号化部分のヘッダに記憶することによってデータを「シグナリング」し得る。いくつかの場合には、そのようなシンタックス要素は、ビデオデコーダ30によって受信および復号される前に、符号化および記憶(たとえば、ストレージシステム34に記憶)され得る。したがって、「シグナリング」という用語は、概して、圧縮ビデオデータを復号するのに使用されるシンタックスまたは他のデータの通信を指すことがある。そのような通信は、リアルタイムにまたはほぼリアルタイムに行われ得る。代替的に、そのような通信は、符号化時に媒体にシンタックス要素を記憶するときに行われるなど、ある時間期間にわたって行われ得、次いで、そのシンタックス要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
【0030】
図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含み得る。宛先デバイス14の入力インターフェース28は、チャネル16および/またはストレージシステム34から符号化ビデオデータを受信する。ビデオデコーダ30は、入力インターフェース28によって受信された符号化ビデオデータを復号する。宛先デバイス14は、ディスプレイデバイス32上に表示するための復号ビデオデータをレンダリングし得る。
【0031】
ディスプレイデバイス32は、宛先デバイス14と一体化され得るかまたはその外部にあり得る。いくつかの例では、宛先デバイス14は、一体型ディスプレイデバイスを含み、外部ディスプレイデバイスとインターフェースするようにも構成され得る。様々な例では、ディスプレイデバイス32は、様々なタイプのディスプレイデバイスを備え得る。たとえば、ディスプレイデバイス32は、液晶ディスプレイ(LCD:liquid crystal display)、プラズマディスプレイ、有機発光ダイオード(OLED:organic light emitting diode)ディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
【0032】
図1には示されていないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は、それぞれオーディオエンコーダおよびオーディオデコーダと統合され得、また、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するための適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含み得る。適用可能な場合、いくつかの例では、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
【0033】
ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP:digital signal processor)、特定用途向け集積回路(ASIC:application specific integrated circuit)、フィールドプログラマブルゲートアレイ(FPGA:field programmable gate array)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアまたはそれらの任意の組合せなど、様々な好適な回路のいずれかとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、好適な非一時的コンピュータ可読媒体にソフトウェアの命令を記憶し、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を実行し得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。
【0034】
ビデオエンコーダ20およびビデオデコーダ30は、現在開発中の高効率ビデオコーディング(HEVC)規格など、ビデオ圧縮規格に従って動作し得、HEVCテストモデル(HM)に準拠し得る。代替的に、ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG−4,Part 10,Advanced Video Coding(AVC)と呼ばれるITU−T H.264規格など、他のプロプライエタリ規格または業界規格、あるいはそのような規格の拡張に従って動作し得る。規格に対する例示的な拡張としては、H.264/AVC規格に対するスケーラブルビデオコーディング(SVC:scalable video coding)拡張およびマルチビュービデオコーディング(MVC:Multiview Video Coding)拡張がある。本開示の技法は、いかなる特定のコーディング規格にも限定されない。ビデオ圧縮規格の他の例としては、MPEG−2およびITU−T H.263がある。
【0035】
上記で手短に説明したように、ビデオエンコーダ20はビデオデータを符号化する。ビデオデータは、1つまたは複数のピクチャシーケンスを備え得る。ピクチャの各々は静止画像である。いくつかの事例では、ピクチャは「フレーム」と呼ばれることがある。ビデオエンコーダ20がビデオデータを符号化するとき、ビデオエンコーダ20はビットストリームを生成し得る。ビットストリームは、コード化ピクチャおよび関連データの表現を形成する一連のビットを含む。コード化ピクチャとは、ピクチャのコード化表現である。
【0036】
ビットストリームを生成するために、ビデオエンコーダ20は、ビデオデータ中の一連のピクチャに対して符号化演算を実行し得る。ビデオエンコーダ20が一連のピクチャに対して符号化演算を実行すると、ビデオエンコーダ20は、一連のコード化ピクチャと関連データとを生成し得る。さらに、ビデオエンコーダ20は、0個以上の一連のピクチャに適用可能なパラメータを包含するシーケンスパラメータセットを生成し得る。さらに、ビデオエンコーダ20は、全体として0個以上のピクチャに適用可能なパラメータを包含するピクチャパラメータセット(PPS:picture parameter set)を生成し得る。いくつかの例では、ビデオエンコーダ20は、適応パラメータセット(APS:adaptation parameter set)を生成し得る。APSは、0個以上のピクチャに適用可能なパラメータを全体として記憶し得る。
【0037】
コード化ピクチャを生成するために、ビデオエンコーダ20は、ピクチャを1つまたは複数の等しいサイズのビデオブロックに区分し得る。ビデオブロックの各々はツリーブロックに関連付けられ得る。ビデオブロックは、ビデオデータの2次元(2D)ブロックであり得る(たとえば、サンプル)。いくつかの事例では、ツリーブロックは、最大コーディングユニット(LCU:largest coding unit)と呼ばれることもある。HEVCのツリーブロックは、H.264/AVCなど、従来の規格のマクロブロックに広い意味で類似し得る。ただし、ツリーブロックは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU:coding unit)を含み得る。
【0038】
いくつかの例では、ビデオエンコーダ20は、ピクチャを複数のスライスに区分し得る。スライスの各々は整数個のCUを含み得る。いくつかの事例では、スライスは整数個のツリーブロックを備える。他の例では、スライスの境界はツリーブロック内にあり得る。スライスの境界がツリーブロック内にある場合、スライスは微細粒スライス(fine granular slice)と呼ばれることがある。いくつかの例では、ビデオエンコーダ20は、スライスのバイト単位のサイズに従って、または、スライス中のツリーブロックの数に従って、スライスを符号化し得る。
【0039】
ピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、ピクチャの各スライスに対して符号化演算を実行し得る。スライスに対する符号化演算は、スライスに関連する符号化データを生成し得る。スライスに関連する符号化データは、「コード化スライス」と呼ばれることがある。コード化スライスは、スライスヘッダとスライスデータとを含み得る。スライスデータは、一連の連続するコーディングユニットをコーディング順序で含み得る。スライスヘッダは、スライスの第1のまたはすべてのツリーブロックに関するデータ要素を含み得る。
【0040】
スライスについてのコード化スライスデータを生成するために、ビデオエンコーダ20は、スライス中の各ツリーブロックに対して符号化演算を実行し得る。ビデオエンコーダ20がツリーブロックに対して符号化演算を実行すると、ビデオエンコーダ20はコード化ツリーブロックを生成し得る。コード化ツリーブロックは、ツリーブロックの符号化バージョンを表すデータを備え得る。
【0041】
コード化ツリーブロックを生成するために、ビデオエンコーダ20は、ツリーブロックのビデオブロックに対して4分木区分を再帰的に実行して、ビデオブロックを漸進的により小さいビデオブロックに分割し得る。より小さいビデオブロックの各々は異なるCUに関連付けられ得る。たとえば、ビデオエンコーダ20は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分し、サブブロックのうち1つまたは複数を、4つの等しいサイズのサブサブブロックに区分し、以下同様に行い得る。ビットストリーム中の1つまたは複数のシンタックス要素は、ビデオエンコーダ20がツリーブロックのビデオブロックを区分し得る最大回数を示し得る。シンタックス要素はまた、最小コーディングユニット(SCU:smallest coding unit)を示し得る。CUのビデオブロックは形状が矩形であり得る。
【0042】
ビデオエンコーダ20は、ツリーブロック中の各非区分化CUに対して符号化演算を実行し得る。非区分化CUに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、CUのための1つまたは複数の予測ユニット(PU:prediction unit)を生成し得る。CUのPUの各々は、CUのビデオブロック内の異なるビデオブロックに関連付けられ得る。ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、CUのPUについての予測データを生成し得る。ビデオエンコーダ20がイントラ予測を使用してPUについての予測データを生成するとき、ビデオエンコーダ20は、PUを包含するピクチャの復号サンプルからPUについての予測データを導出する。ビデオエンコーダ20がインター予測を使用してPUについての予測データを生成するとき、ビデオエンコーダ20は、CUを包含するピクチャとは異なる参照ピクチャの復号値からPUについての予測データを導出する。PUについての予測データは、予測ビデオブロックと様々なシンタックス要素とを含み得る。
【0043】
ビデオエンコーダ20がCUについての予測データを生成した後、ビデオエンコーダ20はCUについての残差データを生成し得る。CUについての残差データは、CUのPUのための予測ビデオブロック中のサンプルと、CUの元のビデオブロック中のサンプルとの間の差異を示し得る。
【0044】
ツリーブロックの各非区分CUは、1つまたは複数の変換ユニット(TU:transform unit)を有し得る。CUの各TUは、CUの残差データの異なる部分に関連付けられ得る。ビデオエンコーダ20は、CUの各TUに対して変換演算を実行し得る。ビデオエンコーダ20がTUに対して変換演算を実行すると、ビデオエンコーダ20は、TUに関連する残差データに変換を適用することに少なくとも部分的によって変換係数ブロックを生成し得る。変換係数ブロックは、変換係数の2D行列であり得る。
図2は、例示的な変換係数ブロックを示す概念図である。
【0045】
ビデオエンコーダ20は、変換係数ブロック中の変換係数を量子化し得る。量子化は、概して、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数ブロック中の変換係数を量子化し、さらに圧縮するプロセスを指す。量子化は、変換係数の一部または全部に関連するビット深度を低減し得る。たとえば、量子化中にnビット値がmビット値に切り捨てられ得、nはmよりも大きい。
【0046】
変換係数ブロックを量子化した後に、ビデオエンコーダ20は、変換係数ブロックに関連するシンタックス要素のセットを生成し得る。ビデオエンコーダ20は、次いで、これらのシンタックス要素の一部に対してコンテキスト適応型バイナリ算術コーディング(CABAC:Context Adaptive Binary Arithmetic Coding)演算を実行し得る。他の例では、ビデオエンコーダ20は、シンタックス要素に対して他のエントロピーコーディング演算を実行し得る。たとえば、ビデオエンコーダ20は、変換係数ブロックに関連するシンタックス要素に対して、コンテキスト適応型可変長コーディング(CAVLC:context adaptive variable length coding)演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)演算、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング演算、または別のタイプのエントロピー符号化演算を実行し得る。ビデオエンコーダ20はまた、ビデオデータに関連する他のシンタックス要素に対してCABAC演算を実行し得る。
【0047】
ビデオエンコーダ20が変換係数ブロックに関連するシンタックス要素を生成し、CABAC演算を実行した後、ビデオエンコーダ20は、ビデオデータのためのビットストリーム中に得られたデータを含め得る。ビットストリームは、コード化ピクチャおよび関連データの表現を形成する一連のビットを含み得る。
【0048】
ビットストリームは、一連のネットワークアブストラクションレイヤ(NAL:network abstraction layer)ユニットを備え得る。NALユニットの各々は、NALユニット中のデータのタイプの指示と、データを包含するバイトとを包含するシンタックス構造であり得る。たとえば、NALユニットは、PPS、APS、コード化スライス、補足エンハンスメント情報、アクセスユニットデリミタ、フィラーデータ、または別のタイプのデータを表すデータを含み得る。NALユニットのデータは、エミュレーション防止ビットが点在しているローバイトシーケンスペイロード(RBSP:raw byte sequence payload)の形態であり得る。RBSPは、NALユニット内にカプセル化される整数個のバイトを包含するシンタックス構造であり得る。
【0049】
ビデオエンコーダ20が変換係数ブロックに対してエントロピー符号化演算を実行するとき、ビデオエンコーダ20は、変換係数ブロック中に少なくとも1つの有意(すなわち、非ゼロ)変換係数があるかどうかを判断し得る。変換係数ブロック中に少なくとも1つの有意変換係数がある場合、ビデオエンコーダ20は、変換係数ブロックが少なくとも1つの有意変換係数を含むことを示すようにコード化ブロックフラグ(CBF:coded block flag)を更新し得る。変換係数ブロック中に有意変換係数がない場合、ビデオエンコーダ20は、変換係数ブロックがいかなる有意変換係数も含まないことを示すようにCBFを更新し得る。
【0050】
変換係数ブロック中に少なくとも1つの有意係数がある場合、ビデオエンコーダ20は、スキャン順序に従って変換係数ブロックの最後の有意係数(LSC:last significant coefficient)を識別し得る。変換係数ブロックのLSCは、変換係数ブロックの変換係数がスキャン順序に従って順序付けられたときに最後に発生する非ゼロ変換係数である。スキャン順序は正スキャン順序であり得る。言い換えれば、スキャン順序は、変換係数ブロックのDC変換係数で開始し得る。DC変換係数は、変換係数ブロックの左上隅で発生する。対照的に、逆(reverse)または逆(inverse)スキャン順序は、変換係数ブロックの右下の変換係数で開始する。
【0051】
ビデオエンコーダ20は、様々なスキャン順序に従って変換係数ブロックのLSCを識別し得る。たとえば、ビデオエンコーダ20は、ジグザグスキャン順序、水平スキャン順序、垂直スキャン順序、対角スキャン順序、またはサブブロックスキャン順序に従ってLSCを識別し得る。いくつかの例では、変換係数ブロックがイントラ予測CUに関連付けられる場合、ビデオエンコーダ20は、CUに関連するイントラ予測モードに基づいてスキャン順序を選択し得る。さらに、いくつかの例では、ビデオエンコーダ20は、コーディング効率および/または主観的画質を最適化するために、スキャン順序の間で適応的に切り替わり得る。
【0052】
図3は、例示的なスキャン順序を示す概念図である。
図3のパート(a)は、例示的なジグザグスキャン順序を示している。
図3のパート(b)は、例示的な水平スキャン順序を示している。
図3のパート(c)は、例示的な垂直スキャン順序を示している。
図3のパート(d)は、例示的な逆対角スキャン順序を示している。
【0053】
図3のパート(e)は、例示的な対角サブブロックスキャン順序を示している。サブブロックスキャン順序では、ビデオエンコーダ20は、大きい変換係数ブロックをサブブロックに分割し得る。
図3の例では、サブブロックは破線矩形として示されている。サブブロックの各々について、ビデオエンコーダ20は、特定の順序でサブブロックの変換係数を処理し得る。
図3の例では、ビデオエンコーダ20は、上/右対角順序で左上のサブブロック中の変換係数をスキャンし、次いで、上/右対角順序で左下のサブブロック中の変換係数をスキャンし、次いで、上/右対角順序で右上のサブブロック中の変換係数をスキャンし、最後に、上/右対角順序で右下のサブブロック中の変換係数をスキャンする。
【0054】
他の例では、ビデオエンコーダ20は、変換係数ブロックを4×4サブブロック(または他のサブブロックサイズ)に区分し得る。この例では、ビデオエンコーダ20は、次いで、スキャン順序に従って4×4変換係数ブロックの各々を処理し得る。
【0055】
LSCを識別した後に、ビデオエンコーダ20は、ブロックベースLSCインジケータを生成し得る。ブロックベースLSCインジケータはLSCの座標を指定する。たとえば、変換係数ブロックが8×8であり、スキャン順序が水平スキャン順序であり、変換係数ブロックの変換係数がそのスキャン順序に従って順序付けられるとき、LSCが10番目の位置で発生するとビデオエンコーダ20が判断する場合、ビデオエンコーダ20は、座標(1,1)を指定するブロックベースLSCインジケータを生成し得る。
【0056】
ビデオエンコーダ20は、ブロックベースLSCインジケータに対してCABAC符号化演算を実行し得る。いくつかの事例では、エントロピー符号化演算は、ブロックベースLSCインジケータのx座標とy座標との間の統計的関係を活用することが可能であり得るので、ブロックベースLSCインジケータに対してCABAC符号化演算を実行することは、対応するスキャンベースLSCインジケータに対してCABAC符号化演算を実行することよりも効率的であり得る。ビデオエンコーダ20は、符号化ビットストリームにブロックベースLSCインジケータのCABAC符号化バージョンを追加し得る。
【0057】
LSCを識別した後に、ビデオエンコーダ20は、変換係数ブロックに関連するシンタックス要素を生成し、符号化するために、変換係数ブロックに対して1つまたは複数のコーディングパスを実行し得る。変換係数ブロックに関連するシンタックス要素は、変換係数ブロックのための有意性マップと変換係数についてのレベル情報とを含む。
【0058】
コーディングパスの各々の中で、ビデオエンコーダ20は、逆スキャン順序に従って変換係数ブロックの変換係数中をスキャンし得る。逆スキャン順序は、LSCを識別するために使用されたスキャン順序の逆であり得る。たとえば、ビデオエンコーダ20が正対角スキャン順序に従ってLSCを識別した場合、逆スキャン順は逆対角スキャン順序であり得る。
【0059】
第1のコーディングパス中に処理された各変換係数について、ビデオエンコーダ20は、変換係数の順序位置がLSCの順序位置の前に発生するかどうかを判断し得る。変換係数の順序位置がLSCの順序位置の前に発生する場合、ビデオエンコーダ20は、その変換係数が有意であるかどうかを示すシンタックス要素(すなわち、有意性フラグ)を生成し、CABAC符号化し得る。変換係数が非ゼロである場合、変換係数は「有意」であり得る。変換係数がLSCの順序位置の前に発生しない場合、ビデオエンコーダ20は、その変換係数のための有意性フラグを生成せず、CABAC符号化しない。このようにして、ビデオエンコーダ20は、変換係数ブロックのための有意性マップを生成し、CABAC符号化し得る。有意性マップを生成し、CABAC符号化した後に、ビデオエンコーダ20は、ビットストリーム中に有意性マップのCABAC符号化バージョンを含め得る。
【0060】
いくつかの事例では、LSCの位置と有意性マップのコンテンツとの間に統計的関係があり得る。したがって、ビデオエンコーダ20は、有意性マップの有意性フラグをCABAC符号化する際に使用するための1つまたは複数のコンテキストモデルを選択するためにLSCの位置を使用し得る。
【0061】
第2のコーディングパス中に処理された各変換係数について、ビデオエンコーダ20は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ20は、その変換係数の絶対値が1よりも大きいかどうかを示すシンタックス要素(すなわち、1よりも大きいレベルフラグ)を生成し、CABAC符号化し得る。変換係数が有意でない場合、ビデオエンコーダ20は、その変換係数のための1よりも大きいレベルフラグを生成せず、CABAC符号化しない。1よりも大きいレベルフラグを生成し、CABAC符号化した後に、ビデオエンコーダ20は、ビットストリーム中に1よりも大きいレベルフラグのCABAC符号化バージョンを含め得る。
【0062】
第3のコーディングパス中に、ビデオエンコーダ20は、変換係数の絶対値が2よりも大きいかどうかを示すシンタックス要素(すなわち、2よりも大きいレベルフラグ)を生成し、CABAC符号化し得る。2よりも大きいレベルフラグを生成し、CABAC符号化した後に、ビデオエンコーダ20は、ビットストリーム中に2よりも大きいレベルフラグのCABAC符号化バージョンを含め得る。
【0063】
第4のコーディングパス中に処理された各変換係数について、ビデオエンコーダ20は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ20は、変換係数が正であるのか負であるのかを示すシンタックス要素(すなわち、符号フラグ)を生成し得る。変換係数が有意でない場合、ビデオエンコーダ20は、その変換係数のための符号フラグを生成しない。符号フラグを生成した後に、ビデオエンコーダ20は、ビットストリーム中に符号フラグを含め得る。
【0064】
第5のコーディングパス中に処理された各変換係数について、ビデオエンコーダ20は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ20は、係数の剰余値(すなわち、レベル剰余要素)を生成し得る。ビデオエンコーダ20は、次いで、剰余値に対応するゴロムライスコードを識別し得る。変換係数のためのゴロムライスコードを識別した後に、ビデオエンコーダ20は、ビットストリーム中にゴロムライスコードを含め得る。変換係数が有意でない場合、ビデオエンコーダ20は、その変換係数のためのレベル剰余要素を生成しない。
【0065】
変換係数の絶対値(すなわち、レベル)が第2の、第3の、第4の、および第5のコーディングパスによって生成されたシンタックス要素から導出され得るので、これらのシンタックス要素は、変換係数ブロックのレベル情報を構成し得る。
【0066】
ビデオデコーダ30がビットストリームを受信すると、ビデオデコーダ30は、ビデオエンコーダ20によって実行された符号化演算とは概して逆の復号演算を実行し得る。たとえば、ビデオデコーダ30は、ピクチャの各スライスに対して復号演算を実行し得る。ビデオデコーダ30がピクチャのスライスに対して復号演算を実行するとき、ビデオデコーダ30は、スライス中のツリーブロックに対して復号演算を実行し得る。ビデオデコーダ30がツリーブロックに対する復号演算を完了すると、ビデオデコーダ30は、ツリーブロックに関連するビデオブロック中のサンプルの復号が済んでいる。ビデオデコーダ30がスライスの各ツリーブロックのためのサンプルの復号が済んだとき、ビデオデコーダ30は、スライスのためのサンプルの再構成が済んでいる。
【0067】
ビデオデコーダ30がツリーブロックに対して復号演算を実行すると、ビデオデコーダ30は、ツリーブロック内の各非区分CUに対して復号演算を実行し得る。上記で説明したように、非区分CUは1つまたは複数のTUに区分され得る。TUの各々は、1つまたは複数の変換係数ブロックに関連付けられる。本開示では、TUは、TUに関連する変換係数ブロックが1つまたは複数の有意変換係数を含む場合、「有意TU」である。
【0068】
ビデオデコーダ30が、非区分CUに対して復号演算を実行すると、ビデオデコーダ30は、CUの有意TUに関連する変換係数ブロックについての符号化レベル情報と、CUの有意TUに関連する変換係数ブロックの符号化有意性マップと、CUの有意TUに関連する変換係数ブロックの符号化ブロックベースLSCインジケータとを受信し得る。
【0069】
ビデオエンコーダ20は、スキャン順序に従ってLSCの順序位置の後に発生する変換係数の有意性フラグを生成しないので、ビデオデコーダ30がLSCの順序位置を判断することが可能になるまで、ビデオデコーダ30は、どの変換係数が有意性フラグを有するかを判断することができないことがある。さらに、ビデオエンコーダ20は、非有意係数の1よりも大きいレベルフラグ、2よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を生成しないので、ビデオデコーダ30が有意性マップを判断することが可能になるまで、ビデオデコーダは、どの変換係数が1よりも大きいレベルフラグ、2よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を有するかを判断することができないことがある。
【0070】
したがって、ビデオデコーダ30は、最初に、ブロックベースLSCインジケータをCABAC復号し得る。さらに、ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換し得る。ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換した後に、ビデオデコーダ30は、スキャンベースLSCインジケータに基づいて、変換係数ブロックの有意性マップを復号し得る。ビデオデコーダ30は、次いで、変換係数ブロックのレベル情報を復号するために有意性マップを使用し得る。
【0071】
スキャンベースLSCインジケータは、スキャン順序に従ってLSCの順序位置を示す。LSCの順序位置は、スキャン順序に従って変換係数ブロックをスキャンすることによって形成される一連の変換係数中のLSCの相対位置であり得る。たとえば、変換係数ブロックは、8つの変換係数×8つの変換係数であり得、ブロックベースLSCインジケータは座標(1,1)を指定し得る。この例では、座標(1,1)における変換係数は、変換係数が水平スキャン順序に従って順序付けられるとき、10番目の変換係数であり得る。したがって、この例では、ビデオデコーダ30は、10番目の位置を示すスキャンベースLSCインジケータを生成し得る。
【0072】
本開示の技法によれば、ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに効率的に変換し得る。ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために様々な演算を実行し得る。たとえば、ビデオデコーダ30は、ブロックベースLSCインジケータによって指定された変換座標からスキャンベースLSCインジケータを導出する非反復アルゴリズムを実行し得る。別の例では、ビデオデコーダ30は、ブロックベースLSCインジケータの変換座標をスキャンベースLSCインジケータにマッピングするデータ構造を記憶し得る。この例では、ビデオデコーダ30は、スキャンベースLSCインジケータを生成するために、このデータ構造にアクセスし得る。
【0073】
ビデオデコーダ30がブロックベースLSCインジケータをスキャンベースLSCインジケータにどのように変換し得るかのさらに別の例では、ビデオデコーダ30は、ループ演算を実行することによって、スキャンベースLSCインジケータを生成し得る。この例では、インジケータは、所与の変換係数ブロックの現在の変換係数を示し得る。ループ演算の各反復中に、ビデオデコーダ30は、現在の変換係数が、ブロックベースLSCインジケータによって指定された座標を有するかどうかを判断し得る。有しない場合、ビデオデコーダ30は、スキャンベースLSCインジケータを増分し、スキャン順序に従って次の変換係数を示すようにインジケータを更新し得る。したがって、この例では、ビデオデコーダ30は、その座標を有する位置に達するまで、スキャン順序に従って所与の変換係数ブロック中の位置中をスキャンするループ演算を実行し、その座標を有する位置より前の所与の変換係数ブロックの位置ごとにスキャンベースLSCインジケータを増分し得る。この例では、スキャン順序は、所与の変換係数がサブブロックに分割されるサブブロックスキャン順序であり得る。ビデオデコーダ30は、サブブロックの1つ中の変換係数の各々中をスキャンし、その後、サブブロックの次の1つ中の変換係数の各々中をスキャンし得る。
【0074】
いくつかの例では、ビデオデコーダ30は、異なるスキャン順序に基づいて異なる変換演算を使用し得る。言い換えれば、ビデオデコーダ30は、スキャン順序に基づいて変換演算を選択し、選択された変換演算を使用してブロックベースLSCインジケータをスキャンベースLSCインジケータに変換し得る。たとえば、ビデオデコーダ30は、スキャン順序が逆水平スキャン順序であるとき、上記の非反復アルゴリズムを使用し得、ビデオデコーダ30は、スキャン順序が逆対角スキャン順序であるとき、上記のマッピングデータ構造を使用することができる。
【0075】
別の例では、ビデオデコーダ30は、変換演算の組合せを使用し得る。この例では、ビデオデコーダ30は、変換係数ブロックをサブブロックに分割し得る。ビデオデコーダ30は、サブブロックの座標と、サブブロック内のブロックベースLSCインジケータの座標とを識別するために非反復アルゴリズムを使用し得る。ビデオデコーダ30は、次いで、サブブロックのスキャン順序と、サブブロック内の最後の有意変換係数のスキャン順序とを判断するために別のアルゴリズムを使用し得る。このようにして、ビデオデコーダ30は、スキャンベースLSCインジケータを判断し得る。
【0076】
図5は、本開示の技法を実装するように構成されるビデオエンコーダ20の例示的な構成を示すブロック図である。
図5は、説明のために提供されるものであり、本開示で広く例示し説明する技法を限定するものと見なすべきではない。説明のために、本開示では、HEVCコーディングのコンテキストでビデオエンコーダ20について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【0077】
図5の例では、ビデオエンコーダ20は複数の機能構成要素を含む。ビデオエンコーダ20の機能構成要素は、モード選択モジュール40と、動き推定モジュール42と、動き補償モジュール44と、イントラ予測モジュール46と、残差生成モジュール50と、変換モジュール52と、量子化モジュール54と、CABACモジュール56と、逆量子化モジュール58と、逆変換モジュール60と、再構成モジュール62と、復号ピクチャバッファ64とを含む。他の例では、ビデオエンコーダ20は、より多いか、より少ないか、または異なる機能構成要素を含み得る。たとえば、ビデオエンコーダ20は、再構成されたビデオからブロッキネスアーティファクトを除去するために再構成モジュール62の出力をフィルタリングするためのデブロッキングフィルタモジュールを含み得る。さらに、動き推定モジュール42と動き補償モジュール44とは、高度に統合され得るが、
図5の例では、説明のために別個に表されている。
【0078】
ビデオエンコーダ20はビデオデータを受信し得る。様々な例では、ビデオエンコーダ20は、様々なソースからビデオデータを受信し得る。たとえば、ビデオエンコーダ20は、ビデオソース18(
図1)または別のソースからビデオデータを受信し得る。ビデオデータは、一連のピクチャを表し得る。ビデオデータを符号化するために、ビデオエンコーダ20は、各一連のピクチャに対して符号化演算を実行し得る。
【0079】
一連のピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、一連のピクチャ内の各ピクチャに対して符号化演算を実行し得る。ピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、ピクチャ中の各スライスに対して符号化演算を実行し得る。スライスに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、スライス中の各ツリーブロックに対して符号化演算を実行し得る。
【0080】
ツリーブロックに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、ツリーブロックのビデオブロックを1つまたは複数のビデオブロックに区分し得る。ビデオブロックの各々は異なるCUに関連付けられ得る。いくつかの例では、CUのビデオブロックのサイズは、8×8ピクセルから、最大64×64ピクセル以上のツリーブロックのビデオブロックのサイズまで及び得る。本開示では、「N×N(NxN)」および「N×N(N by N)」は、垂直寸法および水平寸法に関するビデオブロックのピクセル寸法、たとえば、16×16(16x16)ピクセルまたは16×16(16 by 16)ピクセルを指すために互換的に使用され得る。概して、16×16ブロックは、垂直方向に16ピクセルを有し(y=16)、水平方向に16ピクセルを有する(x=16)。同様に、N×Nブロックは、概して、垂直方向にNピクセルを有し、水平方向にNピクセルを有し、ただし、Nは非負整数値を表す。変換係数ブロックの次元を示すために同様の表記法が使用され得る。
【0081】
ツリーブロックに対して符号化演算を実行することの一部として、ビデオエンコーダ20は、ツリーブロックのための階層4分木データ構造を生成し得る。たとえば、ツリーブロックは、4分木データ構造のルートノードに対応し得る。ビデオエンコーダ20が、ツリーブロックのビデオブロックを4つのサブブロックに区分する場合、ルートノードは、4分木データ構造中に4つの子ノードを有する。子ノードは、サブブロックに関連するCUに対応する。ビデオエンコーダ20が、サブブロックのうちの1つを4つのサブサブブロックに区分する場合、そのサブブロックに関連するCUに対応するノードは4つの子ノードを有し、4つの子ノードは、そのサブサブブロックに関連するCUに対応し得る。
【0082】
4分木データ構造の各ノードは、対応するCUについてのシンタックスデータを与え得る。たとえば、4分木中のノードは、ノードに対応するCUのビデオブロックが4つのサブブロックに区分(すなわち、分割)されるかどうかを示す分割フラグを含み得る。CUのシンタックス要素は、再帰的に定義され得、CUのビデオブロックがサブCUに分割されるかどうかに依存し得る。ビデオブロックが区分されていないCUは、4分木データ構造におけるリーフノードに対応し得る。4分木データ構造におけるリーフノードは、「コーディングノード」と呼ばれることがある。ツリーブロックの符号化バージョンを表すデータは、ツリーブロックのための4分木データ構造に基づくデータを含み得る。
【0083】
ビデオエンコーダ20は、ツリーブロックの各非区分化CUに対して符号化演算を実行し得る。ビデオエンコーダ20が非区分化CUに対して符号化演算を実行するとき、ビデオエンコーダ20は、非区分化CUの符号化バージョンを表すデータを生成する。
【0084】
CUに対して符号化演算を実行することの一部として、動き推定モジュール42および動き補償モジュール44は、CUの各PUに対してインター予測を実行する。言い換えると、動き推定モジュール42および動き補償モジュール44は、CUを包含するピクチャ以外の参照ピクチャの復号サンプルに基づいて、CUの各PUについての予測データを生成し得る。インター予測は時間圧縮を与え得る。
【0085】
ビデオエンコーダ20およびビデオデコーダ30は様々なPUサイズをサポートし得る。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、2N×2N、N×N、2N×N、またはN×2NのPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30は、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズのための非対称区分もサポートし得る。いくつかの例では、ビデオエンコーダ20は、CUのビデオブロックの辺と直角を成さない境界に沿ってCUのビデオブロックをCUのPUの間で区分し得る。
【0086】
動き推定モジュール42は、CUの各PUに関して動き推定演算を実行し得る。動き推定モジュール42がPUに関して動き推定演算を実行すると、動き推定モジュール42は、PUの1つまたは複数の動きベクトルを生成する。たとえば、スライスは、Iスライス、Pスライス、またはBスライスであり得る。動き推定モジュール42および動き補償モジュール44は、CUがIスライス中にあるのか、Pスライス中にあるのか、Bスライス中にあるのかに応じて、CUのPUに対して異なる演算を実行し得る。Iスライス中では、すべてのPU(したがって、CUのすべてのPU)がイントラ予測される。したがって、PUがIスライス中にある場合、動き推定モジュール42および動き推定モジュール44は、PUに対してインター予測を実行しない。
【0087】
PUがPスライス中にある場合、PUを包含するピクチャは、「リスト0」と呼ばれる参照ピクチャのリストに関連付けられる。リスト0中の参照ピクチャの各々は、復号順序で後続ピクチャのインター予測のために使用され得るサンプルを包含する。動き推定モジュール42が、Pスライス中のPUに関して動き推定演算を実行するとき、動き推定モジュール42は、PUのための参照サンプルを求めて、リスト0中の参照ピクチャを探索する。PUの参照サンプルは、PUのピクセル値に最もぴったり対応するピクセル値のセットであり得る。動き推定モジュール42は、参照ピクチャ中のピクセル値のセットがPUのピクセル値にどのくらいぴったり対応するかを判断するために、様々なメトリックを使用し得る。たとえば、動き推定モジュール42は、絶対値差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって、参照ピクチャ中のピクセル値のセットがPUのピクセル値にどのくらいぴったり対応するかを判断し得る。
【0088】
Pスライス中のCUのPUの参照サンプルを識別した後に、動き推定モジュール42は、参照サンプルを包含する、リスト0中の参照ピクチャを示す参照インデックスと、PUと参照サンプルとの間の空間変位を示す動きベクトルとを生成し得る。様々な例では、動き推定モジュール42は、動きベクトルを様々な精度で生成し得る。たとえば、動き推定モジュール42は、1/4ピクセル精度、1/8ピクセル精度、または他の分数ピクセル精度で動きベクトルを生成し得る。動き推定モジュール42は、参照インデックスと動きベクトルとをCABACモジュール56と動き補償モジュール44とに出力し得る。動き補償モジュール44は、参照インデックスとCUのPUの動きベクトルとを使用して、PUの参照サンプルを識別し、取り出し得る。動き補償モジュール44は次いで、PUの参照サンプルのピクセル値を使用して、CUについての予測データを生成し得る。
【0089】
PUがBスライス中にある場合、PUを包含するピクチャは、「リスト0」および「リスト1」と呼ばれる参照ピクチャの2つのリストに関連付けられ得る。リスト0中の参照ピクチャの各々は、復号順序で後続ピクチャのインター予測のために使用され得るサンプルを包含する。リスト1中の参照ピクチャは、復号順序ではピクチャの前だが、プレゼンテーション順序ではピクチャの後に発生し得る。いくつかの例では、Bスライスを包含するピクチャは、リスト0とリスト1の組合せである、リストの組合せに関連付けられ得る。
【0090】
さらに、CUがBスライス中にある場合、動き推定モジュール42は、CUのPUのための単方向予測または双方向予測を実行し得る。動き推定モジュール42が、PUのための単方向予測を実行するとき、動き推定モジュール42は、PUのための参照サンプルを求めてリスト0またはリスト1の参照ピクチャを探索し得る。動き推定モジュール42は、次いで、参照サンプルを包含する、リスト0またはリスト1中の参照ピクチャを示す参照インデックスと、PUと参照サンプルとの間の空間変位を示す動きベクトルとを生成し得る。動き推定モジュール42は、参照インデックスとCUのPUの動きベクトルとをCABACモジュール56と動き補償モジュール44とに出力し得る。動き補償モジュール44は、参照インデックスとCUのPUの動きベクトルとを使用して、PUの参照サンプルを識別し、取り出し得る。動き補償モジュール44は、次いで、PUの参照サンプルのピクセル値を使用して、CUのPUのための予測ビデオブロックを生成し得る。
【0091】
動き推定モジュール42が、PUのための双方向予測を実行するとき、動き推定モジュール42は、PUのための参照サンプルを求めてリスト0中の参照ピクチャを探索し得、また、PUのための別の参照サンプルを求めてリスト1中の参照ピクチャを探索し得る。動き推定モジュール42は、次いで、参照サンプルを示す参照インデックスと、参照サンプルとPUとの間の空間変位を示す動きベクトルとを生成し得る。動き推定モジュール42は、参照インデックスと動きベクトルとをCABACモジュール56と動き補償モジュール44とに出力し得る。動き補償モジュール44は、参照インデックスと動きベクトルとを使用して、PUの参照サンプルを識別し、取り出し得る。動き補償モジュール44は、次いで、CUのPUの参照サンプル中のピクセル値から、CUのPUの予測ビデオブロックのピクセル値を補間し得る。
【0092】
CUに対して符号化演算を実行することの一部として、イントラ予測モジュール46は、CUのPUに対してイントラ予測を実行し得る。言い換えれば、イントラ予測モジュール46は、CUと同じスライス中の復号ピクセル値に基づいて、CUのPUについての予測データを生成し得る。イントラ予測は空間圧縮を与え得る。
【0093】
PUに対してイントラ予測を実行するために、イントラ予測モジュール46は、複数のイントラ予測モードを使用して、PUについての予測データの複数のセットを生成し得る。イントラ予測モジュール46が、イントラ予測モードを使用して、PUについての予測データのセットを生成するとき、イントラ予測モジュール46は、イントラ予測モードに関連する方向および/または勾配で、PUのビデオブロックを超えて隣接PUからピクセル値を展開し得る。PU、CU、およびツリーブロックのための左から右、上から下の符号化順序を仮定すると、隣接PUは、PUの上、右上、左上、または左にあり得る。イントラ予測モジュール46は、PUのサイズに応じて、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。
【0094】
イントラ予測モジュール46は、PUについての予測データのセットのうちの1つを選択し得る。様々な例では、イントラ予測モジュール46は、PUについての予測データのセットを様々な方法で選択し得る。たとえば、イントラ予測モジュール46は、予測データのセットのためのひずみおよびビットレートの比較に基づき、ひずみレートが最も低い予測データのセットを選択することによって、PUについての予測データのセットを選択し得る。
【0095】
モード選択ユニット40は、CUのPUについての、動き補償モジュール44によって生成された予測データのセット、またはCUのPUについての、イントラ予測ユニット46によって生成された予測データのセットの中から、CUのPUについての予測データを選択し得る。いくつかの例では、モード選択ユニット40は、予測データのセットのエラー(すなわち、ひずみ)とビットレートとに基づいて、CUのPUについての予測データを選択する。
【0096】
モード選択ユニット40がCUのPUについての予測データを選択した後、残差生成モジュール50は、CUの元のビデオブロックのピクセル値から、CUのPUの選択された予測データの予測ビデオブロックのピクセル値を減算することによって、CUについての残差データを生成し得る。CUの残差データは、CU中のビデオブロックの異なるピクセル成分に対応する2D残差ブロックを含み得る。たとえば、残差データは、CUの予測ビデオブロック中のルミナンス構成要素と、CUの元のビデオブロック中のピクセルのルミナンス構成要素との間の差に対応する残差ビデオブロックを含み得る。さらに、CUの残差データは、CUのPUの予測ビデオブロック中のピクセルのクロミナンス構成要素と、CUの元のビデオブロック中のピクセルのクロミナンス構成要素との間の差に対応する残差ビデオブロックを含み得る。
【0097】
上記で説明したように、CUは1つまたは複数のTUを有し得る。CUの各TUは、CUの残差データ内の異なるビデオブロックに対応し得る。CUのTUに関連するビデオブロックのサイズは、CUのPUのビデオブロックのサイズに基づくことも、基づかないこともある。いくつかの例では、CUの残差データは、「残差4分木」(RQT:residual quad tree)として知られる4分木構造を使用してより小さいビデオブロックに再分割され得る。TUは、RQTのリーフノードに対応し得る。
【0098】
変換モジュール52は、TUに対応する残差ビデオブロックに変換を適用することによって、CUのTUごとに変換係数ブロックを生成し得る。変換係数ブロックの各々は、変換係数の2D行列であり得る。様々な例では、変換モジュール52は、TUに対応する残差ビデオブロックに様々な変換を適用し得る。たとえば、変換モジュールは、離散コサイン変換(DCT:discrete cosine transform)、方向変換、または概念的に同様の変換を適用し得る。変換モジュール52が、TUのための変換係数ブロックを生成した後、量子化モジュール54は、変換係数ブロック中の変換係数を量子化し得る。
【0099】
CABACモジュール56は、量子化モジュール54から変換係数ブロックを受信し得る。CABACモジュール56が変換係数ブロックを受信すると、CABACモジュール56は、変換係数ブロックのための有意性マップとブロックベースLSCインジケータとを生成し得る。ブロックベースLSCインジケータは、変換係数ブロックの最後の有意変換係数の変換係数ブロック中の座標を示し得る。CABACモジュール56はまた、変換係数ブロックについてのレベル情報を生成し得る。上記で説明したように、変換係数ブロックについてのレベル情報は、一連の1よりも大きいレベルフラグと、一連の2よりも大きいレベルフラグと、一連の符号フラグと、一連のレベル残余要素とを含み得る。
【0100】
CABACモジュール56は、有意性マップと、ブロックベースLSCインジケータと、1よりも大きいレベルフラグと、2よりも大きいレベルフラグとに対してCABAC符号化演算を実行し得る。さらに、CABACモジュール56は、動きベクトルまたは動きベクトル差分情報などの他のシンタックス要素と、ビデオデコーダ30においてビデオデータを復号する際に有用な様々な他のシンタックス要素のいずれかとに対してCABAC符号化演算を実行し得る。
【0101】
逆量子化モジュール58および逆変換モジュール60は、変換係数ブロックに、それぞれ、逆量子化および逆変換を適用して、変換係数ブロックから残差ビデオブロックを再構成し得る。再構成モジュール62は、動き補償モジュール44またはイントラ予測モジュール46によって生成された1つまたは複数の予測ビデオブロックのピクセル値に、再構成された残差ビデオブロックを追加して、復号ピクチャバッファ64に記憶するための再構成ビデオブロックを生成し得る。動き推定モジュール42および動き補償モジュール44は、再構成されたビデオブロックを包含する参照ピクチャを使用して、後続ピクチャのCUに対してイントラ予測またはインター予測を実行し得る。
【0102】
図6は、ビデオデコーダ30の例示的構成を示すブロック図である。
図6は、説明のために提供されるものであり、本開示で広く例示し説明する技法を限定するものではない。説明のために、本開示では、HEVCコーディングのコンテキストでビデオデコーダ30について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【0103】
図6の例では、ビデオデコーダ30は、複数の機能構成要素を包含する。ビデオデコーダ30の機能構成要素は、パースモジュール70と、動き補償モジュール72と、イントラ予測モジュール74と、逆量子化モジュール76と、逆変換モジュール78と、再構成モジュール80と、復号ピクチャバッファ82とを包含する。いくつかの例では、ビデオデコーダ30は、
図5のビデオエンコーダ20に関して説明した符号化パスとは概して逆の復号パスを実行し得る。他の例では、ビデオデコーダ30は、より多いか、より少ないか、または異なる機能構成要素を含み得る。たとえば、ビデオデコーダ30は、再構成されたビデオからブロッキネスアーティファクトを除去するために再構成モジュール80の出力をフィルタリングするためのデブロッキングフィルタを含み得る。
【0104】
ビデオデコーダ30は、符号化ビデオデータを備えるビットストリームを受信し得る。ビットストリームは複数のシンタックス要素を含み得る。ビデオデコーダ30がビットストリームを受信すると、パースモジュール70は、そのビットストリームに対してパース演算を実行し得る。ビットストリームに対してパース演算を実行した結果、パースモジュール70は、ビットストリームからシンタックス要素を抽出し得る。パース演算を実行することの一部として、パースモジュール70は、ビットストリーム中の様々なCABAC符号化シンタックス要素をCABAC復号し得る。動き補償モジュール72と、イントラ予測モジュール74と、逆量子化モジュール76と、逆変換モジュール78とは、ビットストリームから抽出されたシンタックス要素に基づいて復号ビデオデータを生成する再構成演算を実行し得る。
【0105】
ビットストリームは、変換係数ブロックのブロックベースLSCインジケータと、変換係数ブロックの有意性マップと、変換係数ブロックについてのレベル情報とを表すデータを含み得る。パース演算を実行することの一部として、パースモジュール70はブロックベースLSCインジケータをCABAC復号し得る。パースモジュール70は、次いで、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換し得る。スキャン順序は、符号化ビットストリーム中でシグナリングされ得るか、あるいは1つまたは複数のシンタックス要素またはパラメータからパースモジュール70によって推論され得る。
【0106】
ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換した後に、パースモジュール70は、ビットストリームから有意性マップをパースするためにスキャンベースLSCインジケータを使用し得る。たとえば、パースモジュール70は、スキャンベースLSCインジケータに基づいて、変換係数ブロックの有意性マップが変換係数の有意性フラグを含むかどうかを判断し得る。さらに、いくつかの例では、パースモジュール70は、スキャンベースLSCインジケータに基づいてコンテキストモデルを選択し得る。パースモジュール70は、有意性マップを復号するCABAC復号演算中に、選択されたコンテキストモデルを使用し得る。パースモジュール70は、ビットストリームから変換係数ブロックのレベル情報をパースするために有意性マップを使用し得る。
【0107】
ブロックベースLSCインジケータをスキャンベースLSCインジケータに効率的な方法で変換することが望ましいことがある。本開示の技法によれば、パースモジュール70は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために様々な演算を実行し得る。たとえば、パースモジュール70は、ブロックベースLSCインジケータによって指定された座標からスキャンベースLSCインジケータを導出する非反復アルゴリズムを実行し得る。以下で詳細に説明する
図9および
図10は、ブロックベースLSCインジケータによって指定された座標からスキャンベースLSCインジケータを導出し得る例示的な非反復アルゴリズムのフローチャートである。別の例では、パースモジュール70は、座標をスキャンベースLSCインジケータにマッピングするデータ構造を記憶し得る。この例では、パースモジュール70は、スキャンベースLSCインジケータを生成するために、このデータ構造にアクセスし得る。以下で詳細に説明する
図11は、ビデオデコーダ30が、ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスすることに少なくとも部分的によって、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する例示的な動作を示す。さらに別の例では、パースモジュール70は、ブロックベースLSCインジケータによって指定された座標を有する変換係数に達するまで、正スキャン順序に従って変換係数ブロック中の位置中をスキャンするループ動作を実行することによって、スキャンベースLSCインジケータを生成し得る。以下で詳細に説明する
図12は、ビデオデコーダ30が、そのようなループ動作を実行することによってブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する例示的な反復動作を示す。
【0108】
いくつかの例では、パースモジュール70は、異なるスキャン順序に基づいて異なる変換演算を使用し得る。たとえば、パースモジュール70は、スキャン順序が垂直スキャン順序であるとき、上記の非反復アルゴリズムを使用し得、パースモジュール70は、スキャン順序がジグザグスキャン順序であるとき、上記のマッピングデータ構造を使用し得る。
【0109】
パースモジュール70が変換係数ブロックを復号した後、逆量子化モジュール76は、変換係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化モジュール76は、HEVCのために提案された、またはH.264復号規格によって定義された逆量子化プロセスと同様の方法で変換係数ブロックを逆量子化し得る。逆量子化モジュール76は、量子化の程度を判断し、同様に、逆量子化モジュール76が適用すべき逆量子化の程度を判断するために、変換係数ブロックのCUのためにビデオエンコーダ20によって計算された量子化パラメータQPYを使用し得る。
【0110】
逆量子化モジュール76が変換係数ブロックを逆量子化した後、逆変換モジュール78は、変換係数ブロックに関連するTUのための残差ビデオブロックを生成し得る。逆変換モジュール78は、変換係数ブロックに逆変換を適用することに少なくとも部分的によって、TUのための残差ビデオブロックを生成し得る。たとえば、逆変換モジュール78は、変換係数ブロックに、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT:Karhunen-Loeve transform)、逆回転変換、逆方向変換、または別の逆変換を適用し得る。いくつかの例では、逆変換モジュール78は、ビデオエンコーダ20からのシグナリングに基づいて、変換係数ブロックに適用すべき逆変換を判断し得る。そのような例では、逆変換モジュール78は、変換係数ブロックに関連するツリーブロックのための4分木のルートノードにおいてシグナリングされた変換に基づいて逆変換を判断し得る。他の例では、逆変換モジュール78は、ブロックサイズ、コーディングモードなど、1つまたは複数のコーディング特性から逆変換を推論し得る。いくつかの例では、逆変換モジュール78はカスケード逆変換を適用し得る。
【0111】
動き補償モジュール72は、動き補償を実行して、CUのPUについての予測データを生成し得る。いくつかの例では、動き補償モジュール72は、補間フィルタに基づいて補間を実行することによって、PUについての予測データを改善し得る。サブピクセル精度での動き補償のために使用されるべき補間フィルタの識別子は、シンタックス要素中に含まれ得る。動き補償モジュール72は、PUの予測データの生成中にビデオエンコーダ20によって使用される同じ補間フィルタを使用して、参照ブロックのサブ整数サンプルの補間値を計算し得る。動き補償モジュール72は、受信したシンタックス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを判断し、その補間フィルタを使用して予測データを生成し得る。
【0112】
動き補償モジュール72およびイントラ予測モジュール74は、HEVCの例では、(たとえば、4分木によって与えられる)シンタックス情報の一部を使用して、符号化ビデオシーケンスの(1つまたは複数の)フレームを符号化するために使用されるツリーブロックのサイズと、符号化ビデオシーケンスのフレームの各CUのビデオブロックがどのように分割されるか(および、同様に、サブブロックがどのように分割されるか)を記述する分割情報と、各PUがどのように符号化されるかを示すモード(たとえば、イントラ予測またはインター予測、およびイントラ予測の場合はイントラ予測符号化モード)と、各インター予測CUについての1つまたは複数の参照フレーム(および/またはそれらの参照フレームの識別子を包含する参照リスト)と、符号化ビデオシーケンスを復号するための他の情報とを判断し得る。
【0113】
再構成モジュール80は、CUの残差ビデオブロックを、動き補償モジュール72またはイントラ予測モジュール74によって生成されたCUのPUの対応する予測ビデオブロックと組み合わせて、復号ビデオブロックを形成する。いくつかの例では、ビデオデコーダ30は、復号ビデオからブロッキネスアーティファクトを取り除くために復号ビデオブロックをフィルタリングするためにデブロッキングフィルタを適用し得る。復号ピクチャバッファ82は復号ビデオブロックを記憶する。復号ピクチャバッファ82は、その後の動き補償のための参照ピクチャを与え得、また、
図1のディスプレイデバイス32などのディスプレイデバイス上での提示のためのピクチャを記憶し得る。
【0114】
図7は、ビデオエンコーダ20によって実行される例示的な動作100を示すフローチャートである。CABACモジュール56が動作100を開始した後、ビデオエンコーダ20は、スキャン順序に従って変換係数ブロックのLSCを識別する(102)。ビデオエンコーダ20が変換係数ブロックのLSCを識別した後、ビデオエンコーダ20は、変換係数ブロックの識別されたLSCの座標を示すブロックベースLSCインジケータを生成する(104)。
【0115】
ブロックベースLSCインジケータを生成した後に、ビデオエンコーダ20は、ブロックベースLSCインジケータに対してCABAC符号化演算を実行する(106)。様々な例では、ビデオエンコーダ20は、ブロックベースLSCインジケータに対してCABAC符号化演算を様々な方法で実行し得る。たとえば、いくつかの例では、ビデオエンコーダ20は、最初に、ブロックベースLSCインジケータの各座標をバイナリコードに変換し得る。言い換えれば、ビデオエンコーダ20は、ブロックベースLSCインジケータの座標を「2値化」し得る。座標を2値化した後に、ビデオエンコーダ20は、ブロックベースLSCインジケータのy座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。いくつかの事例では、ビデオエンコーダ20は、ブロックベースLSCインジケータのx座標に基づいて、y座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。ビデオエンコーダ20は、y座標を表すバイナリコードの1つまたは複数のビンを符号化するとき、選択されたコンテキストモデルを使用し得る。同様に、ビデオエンコーダ20は、ブロックベースLSCインジケータのy座標に基づいて、ブロックベースLSCインジケータのx座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。ビデオエンコーダ20は、x座標を表すバイナリコードの1つまたは複数のビンを符号化するとき、選択されたコンテキストモデルを使用し得る。
【0116】
ブロックベースLSCインジケータのx座標とy座標との間に統計的関係があり得る。たとえば、有意変換係数は、変換係数ブロックのDC変換係数の周りに集まる傾向がある。したがって、x座標がDC変換係数に比較的近接している場合、y座標もDC変換係数に比較的近接している可能性があり、その逆も同様である。x座標に基づいてy座標のためのコンテキストモデルを選択することによって、ビデオエンコーダ20は、y座標のためのコンテキストモデルをより正確に選択するためにこの統計的関係を活用することが可能であり得る。同様に、y座標に基づいてx座標のためのコンテキストモデルを選択することによって、ビデオエンコーダ20は、x座標のためのコンテキストモデルをより正確に選択するためにこの統計的関係を活用することが可能であり得る。
【0117】
いくつかの例では、ビデオエンコーダ20は、x座標およびy座標のためのシンボルのエントロピー符号化演算をインターリーブし得る。たとえば、ビデオエンコーダ20は、最初に、x座標の第1のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ20がx座標を単項数として表すと仮定すると、x座標の第1のシンボルは、x座標が0である場合は0になり、そうでない場合は1になる。x座標の第1のシンボルを符号化した後に、ビデオエンコーダ20は、y座標の第1のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ20は、x座標の第1のシンボルの値に応じて、y座標の第1のシンボルを符号化するために異なるコンテキストを使用し得る。次いで、x座標が0よりも大きい場合、ビデオエンコーダ20は、x座標の第2のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ20は、y座標の第1のシンボルの値に応じて、x座標の第2のシンボルを符号化するために異なるコンテキストを使用し得る。ビデオエンコーダ20がx座標およびy座標のシンボルの各々を符号化するまで、ビデオエンコーダ20は、x座標およびy座標のシンボルの符号化を継続し得る。
【0118】
いくつかの例では、ビデオエンコーダ20は、スキャン順序を使用して変換係数ブロックから別の2D変換係数ブロックに変換係数をマッピングし得る。たとえば、他の2D変換係数ブロックは、8つの位置の幅であり得る。この例では、ビデオエンコーダ20は、スキャン順序によって判断された変換係数ブロックの第1の8つの変換係数を他の2D変換係数ブロックの第1の行にマッピングし、スキャン順序によって判断された変換係数ブロックの第2の8つの変換係数を他の2D変換係数ブロックの第2の行にマッピングし、以下同様に行い得る。この例では、ビデオエンコーダ20は、次いで、スキャン順序に従って他の2D変換係数ブロックの最後の有意変換係数を識別し、他の2Dブロックの最後の有意変換係数を示すブロックベースLSCインジケータを生成し得る。この例では、より低い行番号と変換係数が有意である確率との間に統計的関係が存在し得る。たとえば、変換係数が有意である確率は、高い行番号でよりも、低い行番号でより高くなり得る。ビデオエンコーダ20は、ブロックベースLSCインジケータに対してエントロピー符号化演算を実行するとき、この統計的関係を活用し得る。たとえば、ビデオエンコーダ20は、最初に、y座標に対してエントロピー符号化演算を実行し、次いで、x座標に対してエントロピー符号化演算を実行し得る。ビデオエンコーダ20がx座標に対してエントロピー符号化演算を実行するとき、ビデオエンコーダ20は、y座標に基づいてコンテキストモデルを選択し得る。
【0119】
さらに、ビデオエンコーダ20は、変換係数ブロックのための有意性マップを生成する(108)。いくつかの例では、ビデオエンコーダ20は、有意性マップを生成し、並行して変換係数ブロックのLSCを識別し得る。
【0120】
様々な例では、ビデオエンコーダ20は、様々な方法で有意性マップを生成し得る。たとえば、ビデオエンコーダ20は、逆スキャン順序に従って変換係数の各々を処理するコーディングパスを実行し得る。逆スキャン順序は、LSCを識別するために使用されたスキャン順序の逆であり得る。他の例では、ビデオエンコーダ20は、LSCを識別するためにビデオエンコーダ20が使用するのと同じスキャン順序を使用して、変換係数ブロックのための有意性マップを生成し得る。コーディングパス中に処理された各変換係数について、スキャン順序による変換係数の順序位置がスキャン順序によるLSCの順序位置の前にある場合、ビデオエンコーダ20は、変換係数の有意性フラグを生成し、CABAC符号化し得る。
【0121】
別の例では、ビデオエンコーダ20は、有意性マップとして働く2Dブロックを生成し得る。この例では、ビデオエンコーダ20は変換係数ブロック中をスキャンし得る。ビデオエンコーダ20が変換係数ブロック中をスキャンするとき、ビデオエンコーダ20は、変換係数ブロックの対応する変換係数が有意であるのかまたは有意でないのかを2D有意性マップ中で示し得る。
【0122】
さらに、ビデオエンコーダ20は、有意性マップに対してCABAC符号化演算を実行する(110)。いくつかの例では、ビデオエンコーダ20は、ステップ108および110をインターリーブし得る。たとえば、ビデオエンコーダ20は、第1の変換係数の有意性フラグを生成し得る。ビデオエンコーダ20は、次いで、第1の変換係数の有意性フラグに対してCABAC符号化演算を実行し得る。第1の変換係数の有意性フラグに対してCABAC符号化演算を実行した後に、ビデオエンコーダ20は、第2の変換係数の有意性フラグを生成し、次いで、第2の変換係数の有意性フラグに対してCABAC符号化演算を実行し、以下同様に行い得る。
【0123】
ビデオエンコーダ20は、有意性マップに対してCABAC符号化演算を様々な方法で実行し得る。たとえば、ビデオエンコーダ20は、変換係数ブロックのLSCに基づいてコンテキストモデルを選択し得る。LSCの位置と有意性マップの(逆スキャン順序で)次の有意性フラグの値との間に統計的関係があり得る。たとえば、ビデオエンコーダ20が逆スキャン順序を使用して有意性マップを生成し、変換係数ブロックのLSCが変換係数ブロックのDC変換係数から比較的離れている場合、次の有意性フラグが1である確率は、変換係数ブロックのLSCが変換係数ブロックのDC変換係数に比較的近い場合よりも比較的大きい。変換係数ブロックのLSCに基づいてコンテキストモデルを選択することによって、ビデオエンコーダ20は、有意性マップを符号化するためのコンテキストモデルをより正確に選択するために、この統計的関係を活用することが可能であり得る。有意性マップのためのコンテキストモデルを選択した後に、ビデオエンコーダ20は、有意性マップの1つまたは複数の有意性フラグをCABAC符号化するためにコンテキストモデルを使用し得る。有意性マップに対するCABAC符号化演算中に、ビデオエンコーダ20は、有意性マップの後続の有意性フラグをCABAC符号化するために1つまたは複数の他のコンテキストモデルを使用し得る。
【0124】
他の例では、ビデオエンコーダ20は、LSCと有意性マップとの間の統計的関係を他の方法で活用し得る。たとえば、ビデオエンコーダ20は、LSCの順序位置が所与のしきい値よりも大きい場合は、コンテキストの1つのセットを使用して有意性マップをCABAC符号化し、LSCの順序位置が所与のしきい値よりも大くない場合は、コンテキストの別のセットを使用して有意性マップを符号化し得る。異なるコンテキストをこのようにして使用することはコーディング効率を改善し得る。
【0125】
別の例では、ビデオエンコーダ20は、変換係数をグループ化することによってLSCと有意性マップとの間の統計的関係を活用し得る。たとえば、この例では、ビデオエンコーダ20は、3つの変換係数を一緒にグループ化し、得られたグループを単一の変換係数として符号化し得る。したがって、ビデオエンコーダ20は、一度に3つの変換係数を符号化し得る。グループ中の3つすべての変換係数が0である場合、ビデオエンコーダ20は、3つの変換係数を0として符号化し得る。そうでない場合、ビデオエンコーダ20は、1フラグと、3つの対応する変換係数のうちのどれが有意であるかを示すフラグとを生成し得る。
【0126】
いくつかの事例では、変換係数ブロックの有意変換係数のすべては、変換係数ブロックの左上隅の小さい領域内に位置し得る。たとえば、変換係数ブロックの有意変換係数のすべては、変換係数ブロックの左上隅の4x4領域内に位置し得る。そのような場合、ブロックベースLSCインジケータを使用するよりもスキャンベースLSCインジケータを使用したほうが変換係数ブロックのLSCを示すために必要なビットが少なくて済み得る。したがって、いくつかの例では、有意変換係数のすべてが領域内にあるとき、ビデオエンコーダ20は、ブロックベースLSCインジケータの代わりにスキャンベースLSCインジケータを生成し得る。そのような例では、変換係数ブロックが領域外に1つまたは複数の有意変換係数を含む場合、ビデオエンコーダ20はブロックベースLSCインジケータを生成し得る。さらに、いくつかのそのような例では、ビデオエンコーダ20は、LSCがブロックベースLSCインジケータを使用して示されるのか、スキャンベースLSCインジケータを使用して示されるのかを示すために、ビットストリーム中にフラグを含め得る。
【0127】
さらに、ビデオエンコーダ20は、変換係数ブロック中の変換係数についてのレベル情報を生成する(112)。上記で説明したように、変換係数についてのレベル情報は、1よりも大きいレベルフラグと、2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とを含み得る。
【0128】
さらに、ビデオエンコーダ20は、変換係数についてのレベル情報のうちの少なくともいくつかに対してCABAC符号化演算を実行する(114)。いくつかの例では、ビデオエンコーダ20は、ステップ112および114をインターリーブし得る。たとえば、ビデオエンコーダ20は、1よりも大きいレベルフラグと、2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対して別個のコーディングパスを実行し得る。1よりも大きいレベルフラグのためのコーディングパス中に、ビデオエンコーダ20は、第1の変換係数の1よりも大きいレベルフラグを生成し、CABAC符号化し、次の変換係数の1よりも大きいレベルフラグを生成し、CABAC符号化し、以下同様に行い得る。同様に、2よりも大きいレベルフラグのためのコーディングパス中に、ビデオエンコーダ20は、第1の変換係数の2よりも大きいレベルフラグを生成し、CABAC符号化し、次の変換係数の2よりも大きいレベルフラグを生成し、CABAC符号化し、以下同様に行い得る。符号フラグのためのコーディングパス中に、ビデオエンコーダ20は、第1の変換係数の符号フラグを生成し、次の変換係数の符号フラグを生成し、以下同様に行い得る。この例では、ビデオエンコーダ20は符号フラグをCABAC符号化しない。レベル残余要素のためのコーディングパス中に、ビデオエンコーダ20は、レベル残余要素を生成し、第1の変換係数のための対応するゴロムライスコードを識別し、レベル残余要素を生成し、次の変換係数のための対応するゴロムライスコードを識別し、以下同様に行い得る。この例では、変換係数フラグが有意でない場合、ビデオエンコーダ20は、その変換係数のための1よりも大きいレベルフラグ、2よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を生成しないことがある。
【0129】
いくつかの例では、ビデオエンコーダ20が変換係数のレベル情報を2値化するとき、2値化レベル情報の第1のビンは、変換係数が有意であるかどうかを示し得る。したがって、そのような例では、ステップ108において有意性マップを生成することは、ステップ112においてレベル情報を生成することの一部であり得、ステップ110において有意性マップをCABAC符号化することは、ステップ114においてレベル情報をCABAC符号化することの一部であり得る。
【0130】
図8は、変換係数ブロックを復号する例示的な動作130を示すフローチャートである。ビデオデコーダ30が動作130を開始した後、ビデオデコーダ30は、TUに関連する変換係数ブロックのブロックベースLSCインジケータと、変換係数ブロックのための有意性マップと、変換係数ブロックについてのレベル情報とを表すデータを備えるビットストリームを受信する(132)。ビットストリームは他の符号化ビデオデータを備え得る。
【0131】
ブロックベースLSCインジケータを表すデータを受信した後に、ビデオデコーダ30は、符号化ブロックベースLSCインジケータを復号するためにCABAC復号演算を実行する(134)。したがって、CABAC復号演算を実行することによって、ビデオデコーダ30は、符号化ビデオデータのビットストリームから、変換係数のブロックのLSCのブロックベースLSCインジケータを受信し得る。
【0132】
ビデオデコーダ30が、CABAC復号演算を実行してブロックベースLSCインジケータを復号した後、ビデオデコーダ30は、変換演算を選択する(135)。いくつかの例では、ビデオデコーダ30は、スキャン順序に基づいて変換演算を選択し得る。ビデオデコーダ30は、次いで、選択された変換演算を使用して、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する(136)。様々な例では、ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに様々な方法で変換し得る。たとえば、ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために、
図9〜
図12に示す例示的な動作を使用し得る。他の例では、ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために、
図9〜
図12の例示的な動作のうちの1つまたは複数の組合せを実行し得る。さらに、さらに他の例では、ビデオデコーダ30は、ブロックベースLSCインジケータを復号した後に変換演算を選択しない。むしろ、いくつかのそのような例では、ビデオデコーダ30は単に、1つの特定の変換演算を実行するように構成され得る。
【0133】
その後、ビデオデコーダ30は、スキャンベースLSCインジケータを使用して、変換係数ブロックの有意性マップを復号する(138)。ビデオデコーダ30は、スキャンベースLSCインジケータを使用して、有意性マップを様々な方法で復号し得る。
【0134】
たとえば、ビデオエンコーダ20は、コーディング順序でLSCの後に発生する変換係数の有意性フラグを符号化しないことがある。したがって、有意性マップ中の有意性フラグの数は、変換係数ブロックの間で異なることがある。有意性フラグの数が異なることがあるので、ビデオデコーダ30は、変換係数ブロックのサイズに基づいて、何個の有意性フラグが変換係数ブロックの有意性マップ中にあるかを判断することができないことがある。したがって、ビデオデコーダ30が有意性マップを復号するとき、ビデオデコーダ30は、ビットストリームからの有意性マップの有意性フラグのすべてをビデオデコーダ30がパースしたかどうかを判断することができる必要があり得る。したがって、ビットストリームからパースされた有意性フラグの数がLSCの順序位置(すなわち、スキャンベースLSCインジケータによって示された位置)に等しくなるまで、ビデオデコーダ30は、ビットストリームからの有意性フラグのパースを継続し得る。このようにして、ビデオデコーダ30は、スキャンベースLSCインジケータを使用して、有意性マップが変換係数ブロックの変換係数の有意性フラグを含むかどうかを判断し得る。
【0135】
別の例では、スキャンベースLSCインジケータは、復号されるべき有意変換係数を示すビンの数を示し得る。さらに、上記で説明したように、スキャン順序でLSCより前に発生する変換係数の数と、有意性マップのビンが1または0である確率との間に統計的関係があり得る。スキャンベースLSCインジケータは、スキャン順序でLSCより前に発生する変換係数の数を示す。したがって、ビデオデコーダ30は、スキャンベースLSCインジケータに基づいて、複数の利用可能なコンテキストモデルの中からコンテキストモデルを選択し得る。ビデオデコーダ30は、次いで、有意性マップの1つまたは複数のビンを復号するために選択されたコンテキストモデルを使用し得る。有意性マップに対するCABAC復号演算中に、ビデオデコーダ30は、1つまたは複数の他のコンテキストモデルに切り替え得る。
【0136】
いくつかの例では、変換係数ブロックは複数のサブブロックを含み得る。ビデオデコーダ30は、スキャンベースLSCインジケータに基づいて、複数のサブブロックの中から最後の有意サブブロックを識別し、最後の有意サブブロックはLSCを含み得る。さらに、ビデオデコーダ30は、最後の有意サブブロックと、サブブロックのうち、最後の有意サブブロックで開始する第1の逆スキャン順序に従って最後の有意サブブロックの前に発生するサブブロックとを処理する第1のコーディングパスを実行し得る。第1のコーディングパス中に処理されたサブブロックの各々について、ビデオデコーダ30は、第2の逆スキャン順序に従ってサブブロック中の変換係数を処理する第2のコーディングパスを実行し得る。第2の逆スキャン順序は、第1の逆スキャン順序と同じであるか、またはそれとは異なり得る。第2のコーディングパス中に処理された各変換係数について、ビデオデコーダ30は、スキャンベースLSCインジケータに基づいて、有意性マップが変換係数の有意性フラグを含むかどうかを判断し得る。
【0137】
ビデオデコーダ30が、変換係数ブロックのための有意性マップを復号した後、ビデオデコーダ30は、変換係数ブロックのレベル情報に対して復号演算を実行する(140)。たとえば、変換係数ブロックのレベル情報は、1よりも大きいレベルフラグと、2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とを含み得る。1よりも大きいレベルフラグと2よりも大きいレベルフラグとはCABAC符号化され得、レベル残余要素はゴロムライスコードとして符号化され得る。この例では、ビデオデコーダ30は、1よりも大きいレベルフラグと2よりも大きいレベルフラグとを復号するためにCABAC復号演算を実行し得、ゴロムライスコードをレベル残余要素に変換し戻し得る。
【0138】
さらに、ビデオデコーダ30は、有意性マップと、スキャンベースLSCインジケータと、変換係数ブロックの変換係数レベル情報とを使用して、変換係数ブロックについてのレベル情報から変換係数ブロックを再構成する(142)。いくつかの例では、ビデオデコーダ30は、ステップ140および142をインターリーブし得る。たとえば、ビデオデコーダ30は、2次元アレイで変換係数を記憶し得る。この例では、ビデオデコーダ30がステップ140においてレベル情報を復号するとき、ビデオデコーダ30は、アレイ中の変換係数を追加または調整し得る。
【0139】
上記で説明したように、変換係数ブロックについてのレベル情報は、一連の1よりも大きいレベルフラグと、一連の2よりも大きいレベルフラグと、一連の符号フラグと、一連のレベル残余要素とを備え得る。いくつかの例では、一連の1よりも大きいレベルフラグと、一連の2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とは、変換係数ブロック内の非有意変換係数に関するエントリを含まない。したがって、一連の1よりも大きいレベルフラグと、一連の2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とは、1よりも大きいレベルフラグと、2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対応する変換係数ブロックの位置を示す情報を含まないことがある。したがって、ビデオデコーダ30は、1よりも大きいレベルフラグと、2よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対応する変換係数ブロック内の位置を判断するために有意性マップを使用し得る。この例では、ビデオデコーダ30は、次いで、変換係数ブロックを再構成するために、1よりも大きいレベルフラグと、2よりも大きいレベルのフラグと、符号フラグと、レベル残余要素とを使用し得る。
【0140】
上記で説明したように、いくつかの例では、変換係数の2値化レベル情報の第1のビンは、変換係数が有意であるかどうかを示し得る。したがって、有意性マップは、変換係数の2値化レベル情報に統合され得る。そのような例では、ステップ138において有意性マップに対してエントロピー復号演算を実行することは、ステップ140においてレベル情報に対してCABAC復号演算を実行することの一部であり得る。
【0141】
図9は、変換係数ブロックのブロックベースLSCインジケータを変換係数ブロックのスキャンベースLSCインジケータに変換するための例示的な非反復動作150を示すフローチャートである。
図9の例では、動作150は、スキャン順序がジグザグスキャン順序であると仮定する。ビデオデコーダ30が動作150を開始した後、ビデオデコーダ30は、(対角数変数の値を判断する(152)。ビデオデコーダ30は、ブロックベースLSCインジケータのy座標とブロックベースLSCインジケータのx座標とを加算することによって、対角数変数の値を判断し得る。
【0142】
次に、ビデオデコーダ30は、対角数変数が変換係数ブロックのブロック幅よりも大きいかどうかを判断する(154)。対角数が変換係数ブロックのブロック幅よりも大きい場合(154の「はい」)、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を計算する(156)。ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を次のように計算し得る。ScanPositionLast=DiagNum*(DiagNum+1))>>1。式中、「ScanPositionLast」はスキャンベースLSCインジケータであり、「DiagNum」は対角数変数を表し、「>>」は右シフト演算を表す。
【0143】
次に、ビデオデコーダ30は、対角数変数が奇数であるかどうかを判断する(158)。いくつかの例では、ビデオデコーダ30は、対角数変数が奇数であるかどうかを次のように判断する。(DiagNum%2)==1。対角数変数が奇数である場合(158の「はい」)、ビデオデコーダ30は、ブロックベースLSCインジケータのy座標に基づいてスキャンベースLSCインジケータを再計算する(160)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値にブロックベースLSCインジケータのy座標を加算することによってスキャンベースLSCインジケータを再計算し得る。そうではなく、対角数変数が奇数でない場合(158の「いいえ」)、ビデオデコーダ30は、ブロックベースLSCインジケータのx座標に基づいてスキャンベースLSCインジケータを再計算する(162)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値にブロックベースLSCインジケータのx座標を加算することによってスキャンベースLSCインジケータを再計算し得る。
【0144】
対角数がブロック幅よりも大きくない場合(154の「いいえ」)、ビデオデコーダ30は、一時変数の値を計算する(164)。ビデオデコーダ30は、一時変数の値を次のように計算し得る。(BlockWidth−1)<<1)−DiagNum。式中、「BlockWidth」は変換係数ブロックの幅を示し、「<<」は左シフト演算を表す。一時値を計算した後に、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を計算する(166)。ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を次のように計算し得る。MaxNumCoeffM1−((T*(T+1))>>1)。式中、「MaxNumCoeffM1」は、変換係数ブロック中の変換係数の最大数であり、「T」は一時変数である。
【0145】
ビデオデコーダ30は、次いで、一時変数が奇数であるかどうかを判断する(168)。一時変数が奇数である場合(168の「はい」)、ビデオデコーダ30は、ブロックベースLSCインジケータのy座標に基づいてスキャンベースLSCインジケータを再計算する(170)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータを次のように再計算し得る。ScanPositionLast=ScanPositionLast−BlockWidth+1+PositionLastY。式中、「ScanPositionLast」はスキャンベースLSCインジケータであり、「BlockWidth」は変換係数ブロックの幅であり、「PositionLastY」はブロックベースLSCインジケータのy座標である。
【0146】
そうではなく、一時変数が奇数でない場合(168の「いいえ」)、ビデオデコーダ30は、ブロックベースLSCインジケータのx座標に基づいてスキャンベースLSCインジケータを再計算する(172)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータを次のように再計算し得る。ScanPositionLast=ScanPositionLast−BlockWidth+1+PositionLastX。式中、「ScanPositionLast」はスキャンベースLSCインジケータであり、「BlockWidth」は変換係数ブロックの幅であり、「PositionLastX」はブロックベースLSCインジケータのx座標である。
【0147】
以下の擬似コードは、ブロックベースLSCインジケータによって指定された座標からスキャンベースLSCインジケータを導出する、
図9の例による非反復アルゴリズムを表す。
【数1】
【0148】
この擬似コードでは、「PositionLastY」および「PositionLastX」は、最後変換係数によって示されたx座標およびy座標であり(DC成分が座標(0,0)にあると仮定する)、「BlockWidth」はブロックの幅であり、<<は左シフト演算であり、>>は右シフト演算であり、%は係数演算であり、「MaxNumCoeffM1」は、変換係数ブロックが有し得る変換係数の最大数(すなわち、BlockWidth*BlockHeight−1)である。
【0149】
以下の擬似コードは、上記の擬似コードと同様であるが、右上から左下への対角スキャンが使用されるときにブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する。
【数2】
【0150】
以下の擬似コードは、上記の擬似コードと同様であるが、左下から右上への対角スキャンが使用されるときにブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する。
【数3】
【0151】
図10は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する別の例示的な非反復動作200を示すフローチャートである。
図10の例では、ビデオデコーダ30は、1−Dアレイでメモリに変換係数ブロックを記憶し得る。この1−Dアレイでは、変換係数ブロックの最上行中の変換係数の後に次の下位行中の変換係数が続き、その後に、次の下位行に関連する変換係数が続き、以下同様である。ビデオデコーダ30が動作200を開始した後、ビデオデコーダ30は、ブロックベースLSCインジケータによって示された座標に関連付けられる1−Dアレイ中の位置を示す値にスキャンベースLSCインジケータを設定する(202)。ビデオデコーダ30は、ブロックベースLSCインジケータによって指定されたy座標に変換係数ブロックの幅を乗算し、次いで、ブロックベースLSCインジケータによって指定されたx座標を加算することによって、1−Dアレイ中の位置を判断し得る。スキャン順序が水平スキャン順序である場合、ビデオデコーダ30は、スキャンベースLSCインジケータを取得するためにいかなるさらなる処理も実行する必要がないことがある。
【0152】
次に、ビデオデコーダ30は、スキャン順序がジグザグスキャン順序であるかどうかを判断する(204)。スキャン順序がジグザグスキャン順序であると判断したことに応答して(204の「はい」)、ビデオデコーダ30は、ブロックベースLSCインジケータのy座標(「uiPosLastY」)とブロックベースLSCインジケータのx座標(「uiPosLastX」)との和として対角数(「uID」)を計算する(206)。次いで、ビデオデコーダ30は、対角数変が変換係数ブロックの幅(「uiWidth」)よりも小さいかどうかを判断する(208)。対角数が変換係数ブロックの幅よりも小さいと判断したことに応答して(208の「はい」)、ビデオデコーダ30は、対角数に基づいてスキャンベースLSCインジケータ(「uiScanPosLast」)の値を計算する(210)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を次のように計算し得る。uiScanPosLast=uiD*(uiD+1))>>1。上式で、「uiScanPosLast」はスキャンベースLSCインジケータであり、「uiD」は対角数である。この例では、対角数が偶数である場合、ビデオデコーダ30は、次いで、スキャンベースLSCインジケータの初期値にブロックベースLSCインジケータのy座標を加算することによって、スキャンベースLSCインジケータの最終値を計算し得る。対角数が奇数である場合、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値にブロックベースLSCインジケータのx座標を加算することによって、スキャンベースLSCインジケータの最終値を計算し得る。
【0153】
そうでない場合、位置識別子が変換係数ブロックの幅よりも小さくないと判断することに応答して(208の「いいえ」)、ビデオデコーダ30は、一時的値(「uiDI」)を計算する(212)。ビデオデコーダ30は、一時値を次のように計算し得る。uiDI=((uiWidth−1)<<1)−uiD。上式で、「uiDI」は一時値であり、「uiWidth」は変換係数ブロックの幅であり、「uiD」は対角数である。一時値を計算した後に、ビデオデコーダ30は、一時値に基づいてスキャンベースLSCインジケータを計算する(214)。ビデオデコーダ30は、スキャンベースLSCインジケータの初期値を次のように計算し得る。uiScanPosLast=uiMaxNumCoeffM1−(uiDI*(uiDI+1)>>1)。上式で、「uiScanPosLast」はスキャンベースLSCインジケータであり、「uiMaxNumCoeffM1」は変換係数ブロックが有し得る変換係数の最大数であり、「uiDI」は一時値である。一時値が偶数である場合、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値からuiWidth−1−uiPosLastYを減算することによってスキャンベースLSCインジケータの最終値を計算し得、上式で、「uiWidth」は変換係数ブロックの幅であり、「uiPosLastY」はブロックベースLSCインジケータのy座標である。一時値が奇数である場合、ビデオデコーダ30は、スキャンベースLSCインジケータの初期値から(uiWidth−1−uiPosLastX)を減算することによってスキャンベースLSCインジケータの最終値を計算し得、上式で、「uiWidth」は変換係数ブロックの幅であり、「uiPosLastX」はブロックベースLSCインジケータのx座標である。
【0154】
スキャン順序がジグザグスキャン順序でないと判断したことに応答して(204の「いいえ」)、ビデオデコーダ30は、スキャン順序が垂直スキャン順序であるかどうかを判断する(216)。スキャン順序が垂直スキャン順序であると判断したことに応答して(216の「はい」)、ビデオデコーダ30は、ブロックベースLSCインジケータと変換係数ブロックのサイズとからスキャンベースLSCインジケータを計算する(218)。たとえば、ビデオデコーダ30は、スキャンベースLSCインジケータをuiScanPosLast=uiPosLastY+(uiPosLastX<<uiLog2BlockSizeとして計算し得、上式で、uiScanPosLastはスキャンベースLSCインジケータであり、uiPosLastYはブロックベースLSCインジケータのy座標であり、uiPosLastXはブロックベースLSCインジケータのx座標であり、「uiLog2BlockSize」は変換係数ブロックのサイズの、底を2とする対数である。
【0155】
以下のコードは、スキャン順序が
図10の例による水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序であるときにブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するための例示的なアルゴリズムを表す。変換係数ブロックのメモリ中のストレージが行型であると仮定する。
【数4】
【0156】
ビデオデコーダ30は、(上記で説明したジグザグスキャンではなく)対角スキャン順序に関して同様の動作を実行し得る。そのような動作では、ビデオデコーダ30は、ステップ214におけるスキャンベースLSCインジケータをuiScanPosLast=uiMaxNumCoeffM1−(uiDI*(uiDI+1)>>1)−uiWidth+1+uiPosLastXとして計算し得、上式で、「uiScanPosLast」はスキャンベースLSCインジケータであり、「uiMaxNumCoeffM1」は、変換係数ブロック中の変換係数の最大数であり、「uiDI」は一時値であり、「uiWidth」は変換係数ブロックの幅であり、「uiPosLastX」はブロックベースLSCインジケータのx座標である。以下のコードは、スキャン順序が対角スキャン順序であるときにブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するための例示的なアルゴリズムを表す。
【数5】
【0157】
図11は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する別の例示的な動作250を示すフローチャートである。
図11の例に示すように、ビデオデコーダ30は、ルックアップテーブルを記憶する(252)。ルックアップテーブルは、スキャン順序に従ってブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングする。たとえば、スキャン順序がジグザグスキャン順序である場合、ルックアップテーブルは、座標(1,1)をスキャンベースLSCインジケータ「6」にマッピングするエントリを含み得る。いくつかの例では、ビデオデコーダ30は、異なるスキャン順序のための、および異なる変換係数ブロックサイズのための異なるルックアップテーブルを記憶し得る。
【0158】
ビデオデコーダ30がルックアップテーブルを記憶した後、ビデオデコーダ30は、ブロックベースLSCインジケータを受信する(254)。ブロックベースLSCインジケータを受信した後に、ビデオデコーダ30は、ルックアップテーブルにアクセスして、ブロックベースLSCインジケータに対応するスキャンベースLSCインジケータを取り出す(256)。いくつかの例では、ビデオデコーダ30は、ブロックベースLSCインジケータのx座標とy座標とに基づいて単一の値を生成する。たとえば、ビデオデコーダ30は、y座標に変換係数ブロックの幅を乗算し、次いで、x座標を加算することによって単一の値を生成し得る。そのような例では、ビデオデコーダ30は、ルックアップテーブルからスキャンベースLSCインジケータを取り出すために、インデックスとして単一の値を使用し得る。
【0159】
ビデオデコーダ30は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために追加の演算を使用し得る。たとえば、ビデオデコーダ30は、変換係数がサブブロック対角スキャン順序でスキャンされるとき、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換するために、以下の擬似コードを使用し得る。このサブブロック対角スキャン順序では、ビデオデコーダ30は、右上から左下への対角順序でサブブロックを処理し、右上から左下への対角順序でサブブロックの各々の内で変換係数をスキャンする。
【数6】
【0160】
上記の擬似コードでは、「uiWidth」は変換係数ブロックの幅を示し、「uiPosLastX」はブロックベースLSCインジケータのx座標を示し、「uiPosLastY」はブロックベースLSCインジケータのy座標を示し、「uiScanPosLast」はスキャンベースLSCインジケータを示す。「sX」は、最後の有意変換係数を包含するサブブロックの左上の変換係数のx座標を示す。「sY」は、最後の有意変換係数を包含するサブブロックの左上の変換係数のy座標を示す。上記の擬似コードは、最初に、最後の有意変換係数を包含するサブブロックのスキャン順序(「uiScanPosLast」)を判断する演算を実行し、次いで、サブブロック内の最後の有意変換係数のスキャン順序を判断する演算を実行するので、上記の擬似コードは、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する演算の組合せを表し得る。
【0161】
図12は、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する例示的な反復動作300を示すフローチャートである。ビデオデコーダ30が動作300を開始した後、ビデオデコーダ30は、スキャン順序に従って変換係数ブロックのLSCを示すブロックベースLSCインジケータを受信する(302)。ビデオデコーダ30は、次いで、スキャン順序に従って変換係数ブロックの第1の位置を示すように位置インジケータを設定する(304)。いくつかの例では、位置指示は、現在の変換係数の水平のx位置を示す第1の値と、現在の変換係数の垂直のy位置を示す第2の値とを含み得る。たとえば、スキャン順序がDC構成要素で開始する場合、ビデオデコーダ30は、座標(0,0)の位置を示すように位置インジケータを設定し得る。さらに、ビデオデコーダ30は、スキャンベースLSCインジケータをゼロに初期化する(306)。
【0162】
ビデオデコーダ30は、次いで、スキャン順序に従って位置インジケータによって示された位置を前進させる(308)。たとえば、スキャン順序が水平スキャン順序であり、位置インジケータが位置(3,4)を現在示す場合、ビデオデコーダ30は、位置インジケータが位置(3,5)を示すように、位置インジケータによって示された位置を前進させ得る。ビデオデコーダ30は、次いで、スキャンベースLSCインジケータを増分する(310)。
【0163】
ビデオデコーダ30は、次いで、位置インジケータによって示された位置がブロックベースLSCインジケータによって示された位置と同じであるかどうかを判断する(312)。言い換えれば、ビデオデコーダ30は、示された位置が一致するかどうかを判断し得る。位置インジケータによって示された位置がブロックベースLSCインジケータによって示された位置と同じである場合、スキャンベースLSCインジケータはLSCの位置を示す。位置インジケータによって示された位置がブロックベースLSCインジケータによって示された位置でない場合(312の「いいえ」)、ビデオデコーダ30は、前進させた位置インジケータを用いて動作308〜312を繰り返す。位置インジケータによって示された位置がブロックベースLSCインジケータによって示された位置である場合(312の「はい」)、ビデオデコーダ30は、動作300を終了する。
【0164】
以下の擬似コードは、ブロックベースLSCインジケータをスキャンベースLSCインジケータに変換する代替反復演算を表し得る。この擬似コードでは、ビデオデコーダ30は、対応するブロックベース位置がLSCインジケータによって示された位置であるかどうかを判断するために各スキャン位置を検査する。現在のスキャン位置(「uiBlkPosLast」)がブロックベースLSCインジケータ(「uiBlkPos」)に等しくなるとき、ビデオデコーダ30は位置の検査を停止する。
【数7】
【0165】
図13は、最後の有意変換係数を示す変換係数ブロック350の概念図である。
図13の例では、各円は、変換係数ブロック350中の異なる変換係数を表す。
図13の黒い円は有意変換係数に対応し、白い円は非有意変換係数に対応する。変換係数352は、対角スキャン順序による変換係数ブロック350の最後の有意変換係数である。
図13は、対角スキャン順序を、円を通る矢印として表す。変換係数ブロック350の最上行が行0であり、最左列が列0であると仮定すると、変換係数352のブロックベースLSCインジケータは座標(2,1)を示す。変換係数352のスキャンベースLSCインジケータは数「7」であり得る。
【0166】
実施形態によっては、本明細書で説明した方法のうちいずれかの、いくつかの作用またはイベントは、異なる順序で実行され得、追加、マージ、または完全に除外され得る(たとえば、すべての説明した作用またはイベントが、方法の実施のために必要であるとは限らない)ことを認識されたい。さらに、いくつかの実施形態では、行為またはイベントは、連続してではなくむしろ、同時に、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して実行され得る。
【0167】
本明細書で開示した方法、システム、および装置と関連して説明した様々な例示的論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、プロセッサによって実行されるコンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は認識されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課せられた設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
【0168】
さらに、本明細書で開示する実施形態は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)またはその他のプログラマブル論理デバイス、個別ゲートまたはトランジスタ論理、個別ハードウェア構成要素などの電子デバイスまたは回路、あるいは本明細書で説明した機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。
【0169】
本明細書で開示する実施形態に関して説明した方法またはアルゴリズムのステップは、直接ハードウェアで実施され得るか、プロセッサによって実行されるソフトウェアモジュールで実施され得るか、またはその2つの組合せで実施され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐し得る。例示的な記憶媒体は、プロセッサがその記憶媒体から情報を読み取り、その記憶媒体に情報を書き込み得るようにプロセッサに結合される。代替として、記憶媒体はプロセッサに一体化され得る。プロセッサおよび記憶媒体はASIC中に常駐し得る。ASICはユーザ端末内に常駐し得る。代替として、プロセッサおよび記憶媒体は、ユーザ端末中に個別構成要素として常駐し得る。
【0170】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[C1]
ビデオデータを復号するための方法であって、
ブロックベース最後の有意係数(LSC)インジケータをスキャンベースLSCインジケータに変換することと、ここで、前記ブロックベースLSCインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースLSCインジケータは、前記スキャン順序に従って前記LSCの順序位置を示す、
前記スキャンベースLSCインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を備える、方法。
[C2]
前記スキャン順序は、前記ブロックのDC成分から開始する、
[C1]に記載の方法。
[C3]
前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換することは、前記ブロックベースLSCインジケータから前記スキャンベースLSCインジケータを導出する非反復アルゴリズムを実行することを備える、
[C1]に記載の方法。
[C4]
前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換することは、ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスすることを備える、
[C1]に記載の方法。
[C5]
前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換することは、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースLSCインジケータを増分することと
を備える、[C1]に記載の方法。
[C6]
前記有意性マップを復号することは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースLSCインジケータを使用することを備える、
[C1]に記載の方法。
[C7]
前記方法は、有意性マップのコンテキスト適応型バイナリ算術コーディング(CABAC)バージョンを受信することをさらに備え、
前記有意性マップを復号するために前記スキャンベースLSCインジケータを使用することは、
前記スキャンベースLSCインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するCABAC復号演算中に前記コンテキストモデルを使用することと
を備え、
前記方法は、
前記ブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することと
をさらに備える、[C6]に記載の方法。
[C8]
前記ブロックのイントラ予測モードを判断することと、
前記ブロックの前記イントラ予測モードに基づいて前記スキャン順序を判断することと、
前記スキャン順序に従って前記レベル情報を前記ブロックにマッピングすることと、
逆量子化ブロックを生成するために前記ブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと
をさらに備え、前記再構成ブロックは、前記ビデオデータのピクチャの一部分である、
[C7]に記載の方法。
[C9]
前記スキャン順序は、サブブロックベーススキャン順序、対角スキャン順序、水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序である、
[C1]に記載の方法。
[C10]
前記方法は、前記スキャン順序に基づいて前記ブロックベースLSCインジケータを前記スキャンベースインジケータに変換するための変換演算を選択することをさらに備え、
前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換することは、前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換するために前記選択された変換演算を使用することを備える、
[C1]に記載の方法。
[C11]
前記ブロックは、複数のサブブロックを含み、
前記有意性マップを復号することは、
前記スキャンベースLSCインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックは、前記LSCを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第1の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第1のコーディングパスを実行することと
を備え、
前記第1のコーディングパス中に処理された前記サブブロックの各々について、第2の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第2のコーディングパスを実行し、
前記第2のコーディングパス中に処理された各変換係数について、前記スキャンベースLSCインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断する、
[C1]に記載の方法。
[C12]
1つまたは複数のプロセッサを備えたビデオ復号デバイスであって、
ブロックベース最後の有意係数(LSC)インジケータをスキャンベースLSCインジケータに変換することと、ここで、前記ブロックベースLSCインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースLSCインジケータは、前記スキャン順序に従って前記LSCの順序位置を示す、
前記スキャンベースLSCインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を行うように構成される、ビデオ復号デバイス。
[C13]
前記スキャン順序は、前記ブロックのDC成分から開始する、
[C12]に記載のビデオ復号デバイス。
[C14]
前記1つまたは複数のプロセッサは、前記ブロックベースLSCインジケータから前記スキャンベースLSCインジケータを導出する非反復アルゴリズムを実行するように構成される、
[C12]に記載のビデオ復号デバイス。
[C15]
前記1つまたは複数のプロセッサは、ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスするようにさらに構成される、
[C12]に記載のビデオ復号デバイス。
[C16]
前記1つまたは複数のプロセッサは、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースLSCインジケータを増分することと
を行うようにさらに構成される、[C12]に記載のビデオ復号デバイス。
[C17]
前記1つまたは複数のプロセッサは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースLSCインジケータを使用するように構成される、
[C12]に記載のビデオ復号デバイス。
[C18]
前記1つまたは複数のプロセッサは、有意性マップのコンテキスト適応型バイナリ算術コーディング(CABAC)バージョンを受信することと、
前記スキャンベースLSCインジケータに基づいてコンテキストモデルを選択すること、および
前記有意性マップを復号するCABAC演算中に前記コンテキストモデルを使用すること
を行うことに少なくとも部分的によって前記有意性マップを復号するために前記スキャンベースLSCインジケータを使用することと
を行うように構成され、
前記1つまたは複数のプロセッサは、
前記ブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することと
を行うようにさらに構成される、[C17]に記載のビデオ復号デバイス。
[C19]
前記1つまたは複数のプロセッサは、
前記ブロックのイントラ予測モードを判断することと、
前記ブロックの前記イントラ予測モードに基づいて前記スキャン順序を判断することと、
前記スキャン順序に従って前記レベル情報を前記ブロックにマッピングすることと、
逆量子化ブロックを生成するために前記ブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと、
を行うようにさらに構成され、前記再構成ブロックは、前記ビデオデータのフレームの一部分である、
[C18]に記載のビデオ復号デバイス。
[C20]
前記スキャン順序は、対角スキャン順序、水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序である、
[C12]に記載のビデオ復号デバイス。
[C21]
前記1つまたは複数のプロセッサは、前記スキャン順序に基づいて変換演算を選択することと、前記ブロックベースLSCインジケータを前記スキャンベースLSCインジケータに変換するために前記選択された変換演算を使用することとを行うようにさらに構成される、
[C12]に記載のビデオ復号デバイス。
[C22]
前記ブロックは、複数のサブブロックを含み、
前記1つまたは複数のプロセッサは、
前記スキャンベースLSCインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックは、前記LSCを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第1の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第1のコーディングパスを実行することと
を行うことに少なくとも部分的によって前記有意性マップを復号するように構成され、
前記1つまたは複数のプロセッサは、前記第1のコーディングパス中に処理された前記サブブロックの各々について、前記1つまたは複数のプロセッサが、第2の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第2のコーディングパスを実行するように構成され、
前記1つまたは複数のプロセッサは、前記第2のコーディングパス中に処理された各変換係数について、前記1つまたは複数のプロセッサが、前記スキャンベースLSCインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するように構成される、
[C12]に記載のビデオ復号デバイス。
[C23]
ブロックベース最後の有意係数(LSC)インジケータをスキャンベースLSCインジケータに変換するための手段と、ここで、前記ブロックベースLSCインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースLSCインジケータは、前記スキャン順序に従って前記LSCの順序位置を示す、
前記スキャンベースLSCインジケータに基づいて、前記ブロックのための有意性マップを復号するための手段と
を備える、ビデオ復号デバイス。
[C24]
前記スキャンベースLSCインジケータに基づいてコンテキストモデルを選択するための手段と、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング(CABAC)復号演算中に前記コンテキストモデルを使用するための手段と、
前記ブロックについての符号化されたレベル情報を受信するための手段と、
前記レベル情報を復号するために前記有意性マップを使用するための手段と
を備える、[C23]に記載の復号デバイス。
[C25]
前記ブロックベースLSCインジケータから前記スキャンベースLSCインジケータを導出する非反復アルゴリズムを実行するための手段を備える、
[C23]に記載の復号デバイス。
[C26]
ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスするための手段を備える、
[C23]に記載の復号デバイス。
[C27]
前記座標を有する位置に達するまで前記スキャン順序に従って変換係数の前記ブロック中の位置中をスキャンするループ演算を実行するための手段と、
前記座標を有する前記位置より前の変換係数の前記ブロックの位置ごとに前記スキャンベースLSCインジケータを増分するための手段と
を備える、[C23]に記載の復号デバイス。
[C28]
前記ブロックが複数のサブブロックを含み、
前記有意性マップを復号するための前記手段は、
前記スキャンベースLSCインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別するための手段と、ここで、前記最後の有意サブブロックが前記LSCを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第1の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第1のコーディングパスを実行するための手段と
を備え、
前記第1のコーディングパス中に処理された前記サブブロックの各々について、前記有意性マップを復号するための前記手段は、第2の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第2のコーディングパスを実行し、
前記第2のコーディングパス中に処理された各変換係数について、前記有意性マップを復号するための前記手段は、前記スキャンベースLSCインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断する、
[C23]に記載の復号デバイス。
[C29]
ブロックベース最後の有意係数(LSC)インジケータをスキャンベースLSCインジケータに変換することと、ここで、前記ブロックベースLSCインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースLSCインジケータは、前記スキャン順序に従って前記LSCの順序位置を示す、
前記スキャンベースLSCインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を行うように1つまたは複数のプロセッサを構成する命令をその上に有するコンピュータ可読記憶媒体を備える、コンピュータプログラム製品。
[C30]
前記命令は、
前記スキャンベースLSCインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング(CABAC)復号演算中に前記コンテキストモデルを使用することと、
前記レベル情報を復号するために前記有意性マップを使用することと
を行うように前記1つまたは複数のプロセッサを構成する、
[C29]に記載のコンピュータプログラム製品。
[C31]
前記命令は、前記ブロックベースLSCインジケータから前記スキャンベースLSCインジケータを導出する非反復アルゴリズムを実行するように前記1つまたは複数のプロセッサを構成する、
[C29]に記載のコンピュータプログラム製品。
[C32]
前記命令は、ブロックベースLSCインジケータをスキャンベースLSCインジケータにマッピングするデータ構造にアクセスするように前記1つまたは複数のプロセッサを構成する、
[C29]に記載のコンピュータプログラム製品。
[C33]
前記命令は、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースLSCインジケータを増分することと
を行うように前記1つまたは複数のプロセッサを構成する、[C29]に記載のコンピュータプログラム製品。
[C34]
前記変換係数ブロックは、複数のサブブロックを含み、
前記命令は、
前記スキャンベースLSCインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックが前記LSCを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第1の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第1のコーディングパスを実行することと
を行うように前記1つまたは複数のプロセッサを構成し、
前記命令は、前記第1のコーディングパス中に処理された前記サブブロックの各々について、前記1つまたは複数のプロセッサが、第2の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第2のコーディングパスを実行するように前記1つまたは複数のプロセッサを構成し、
前記命令は、前記第2のコーディングパス中に処理された各変換係数について、前記1つまたは複数のプロセッサが、前記スキャンベースLSCインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するように前記1つまたは複数のプロセッサを構成する、
[C29]に記載のコンピュータプログラム製品。