(57)【特許請求の範囲】
【請求項１】
ビデオデータを復号するための方法であって、
ブロックベース最後の有意係数（ＬＳＣ）インジケータからスキャンベースＬＳＣインジケータを導出することと、ここで、前記ブロックベースＬＳＣインジケータは、変数係数のブロックをサブブロックスキャン順序に従ってスキャンする場合に得られる、前記変換係数のブロックの最後の有意係数の座標を示し、前記変換係数のブロックは、複数のサブブロックに区分され、前記スキャンベースＬＳＣインジケータは、前記サブブロックスキャン順序に従って前記ＬＳＣの順序位置を示し、前記スキャンベースＬＳＣインジケータを導出することは、
前記最後の有意係数を含むサブブロックの前記サブブロックスキャン順序において位置を判断することと、ここで、前記最後の有意係数を含む前記サブブロックは、前記複数のサブブロックのうちの１つである、
前記最後の有意係数を含む前記サブブロック内で前記最後の有意係数の前記サブブロックスキャン順序において位置を判断することと
を備える、
前記スキャンベースＬＳＣインジケータに基づいて、前記変換係数のブロックのための有意性マップを復号することと
を備える、方法。
【請求項２】
前記サブブロックスキャン順序は、前記変換係数のブロックのＤＣ成分から開始する、請求項１に記載の方法。
【請求項３】
前記有意性マップを復号することは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースＬＳＣインジケータを使用することを備える、請求項１に記載の方法。
【請求項４】
前記有意性マップを復号するために前記スキャンベースＬＳＣインジケータを使用することは、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するＣＡＢＡＣ復号演算中に前記コンテキストモデルを使用することと
を備え、
前記方法は、
前記変換係数のブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することとをさらに備える、請求項３に記載の方法。
【請求項５】
前記サブブロックスキャン順序に従って前記レベル情報を前記変換係数のブロックにマッピングすることと、
逆量子化ブロックを生成するために前記変換係数のブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと
をさらに備え、前記再構成ブロックは、前記ビデオデータのピクチャの一部分である、請求項４に記載の方法。
【請求項６】
変換係数のブロックを記憶するように構成されたメモリと、
前記メモリと通信する１つまたは複数のプロセッサと
を備え、前記１つまたは複数のプロセッサは、
ブロックベース最後の有意係数（ＬＳＣ）インジケータからスキャンベースＬＳＣインジケータを導出することと、ここで、前記ブロックベースＬＳＣインジケータは、前記変数係数のブロックをサブブロックスキャン順序に従ってスキャンする場合に得られる、前記変換係数のブロックの最後の有意係数の座標を示し、前記変換係数のブロックは、複数のサブブロックに区分され、前記スキャンベースＬＳＣインジケータは、前記サブブロックスキャン順序に従って前記ＬＳＣの順序位置を示し、ここで、前記スキャンベースＬＳＣインジケータを導出するために、前記１つまたは複数のプロセッサは、
前記最後の有意係数を含むサブブロックの前記サブブロックスキャン順序において位置を判断することと、ここで、前記最後の有意係数を含む前記サブブロックは、前記複数のサブブロックのうちの１つである、
前記最後の有意係数を含む前記サブブロック内で前記最後の有意係数の前記サブブロックスキャン順序において位置を判断することと
を行う、
前記スキャンベースＬＳＣインジケータに基づいて、前記変換係数のブロックのための有意性マップを復号することとを行うように構成される、ビデオ復号デバイス。
【請求項７】
前記サブブロックスキャン順序は、前記変換係数のブロックのＤＣ成分から開始する、請求項６に記載のビデオ復号デバイス。
【請求項８】
前記１つまたは複数のプロセッサは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースＬＳＣインジケータを使用するように構成される、請求項６に記載のビデオ復号デバイス。
【請求項９】
前記有意性マップを復号するために前記スキャンベースＬＳＣインジケータを使用するように、前記１つまたは複数のプロセッサは、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択すること、および
前記有意性マップを復号するＣＡＢＡＣ演算中に前記コンテキストモデルを使用すること
を行い、
前記１つまたは複数のプロセッサは、
前記変換係数のブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することとを行うようにさらに構成される、請求項８に記載のビデオ復号デバイス。
【請求項１０】
前記１つまたは複数のプロセッサは、
前記サブブロックスキャン順序に従って前記レベル情報を前記変換係数のブロックにマッピングすることと、
逆量子化ブロックを生成するために前記変換係数のブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと、
を行うようにさらに構成され、前記再構成ブロックは、ビデオデータのフレームの一部分である、請求項９に記載のビデオ復号デバイス。
【請求項１１】
ブロックベース最後の有意係数（ＬＳＣ）インジケータからスキャンベースＬＳＣインジケータを導出するための手段と、ここで、前記ブロックベースＬＳＣインジケータは、変数係数のブロックをサブブロックスキャン順序に従ってスキャンする場合に得られる、前記変換係数のブロックの最後の有意係数の座標を示し、前記変換係数のブロックは、複数のサブブロックに区分され、前記スキャンベースＬＳＣインジケータは、前記サブブロックスキャン順序に従って前記ＬＳＣの順序位置を示し、前記スキャンベースＬＳＣインジケータを導出することは、
前記最後の有意係数を含むサブブロックの前記サブブロックスキャン順序において位置を判断することと、ここで、前記最後の有意係数を含む前記サブブロックは、前記複数のサブブロックのうちの１つである、
前記最後の有意係数を含む前記サブブロック内で前記最後の有意係数の前記サブブロックスキャン順序において位置を判断することと
を備える、
前記スキャンベースＬＳＣインジケータに基づいて、前記変換係数のブロックのための有意性マップを復号するための手段とを備える、ビデオ復号デバイス。
【請求項１２】
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択するための手段と、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）復号演算中に前記コンテキストモデルを使用するための手段と、
前記変換係数のブロックについての符号化されたレベル情報を受信するための手段と、
前記レベル情報を復号するために前記有意性マップを使用するための手段とを備える、請求項１１に記載の復号デバイス。
【請求項１３】
ブロックベース最後の有意係数（ＬＳＣ）インジケータからスキャンベースＬＳＣインジケータを導出することと、ここで、前記ブロックベースＬＳＣインジケータは、変数係数のブロックをサブブロックスキャン順序に従ってスキャンする場合に得られる、前記変換係数のブロックの最後の有意係数の座標を示し、前記変換係数のブロックは、複数のサブブロックに区分され、前記スキャンベースＬＳＣインジケータは、前記サブブロックスキャン順序に従って前記ＬＳＣの順序位置を示し、前記スキャンベースＬＳＣインジケータを導出するために、１つまたは複数のプロセッサは、
前記最後の有意係数を含むサブブロックの前記サブブロックスキャン順序において位置を判断することと、ここで、前記最後の有意係数を含む前記サブブロックは、前記複数のサブブロックのうちの１つである、
前記最後の有意係数を含む前記サブブロック内で前記最後の有意係数の前記サブブロックスキャン順序において位置を判断することと
を行う、
前記スキャンベースＬＳＣインジケータに基づいて、前記変換係数のブロックのための有意性マップを復号することとを行うように前記１つまたは複数のプロセッサを構成する命令を備える、コンピュータプログラム。
【請求項１４】
前記命令は、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）復号演算中に前記コンテキストモデルを使用することと、
レベル情報を復号するために前記有意性マップを使用することとを行うように前記１つまたは複数のプロセッサを構成する、請求項１３に記載のコンピュータプログラム。
【請求項１５】
サブブロック幅は、ｕｉＷｉｄｔｈ＞＞２に等しく、ここで、ｕｉＷｉｄｔｈは前記変換係数ブロックの幅であり、「＞＞」は右シフト演算を表す、
スキャン位置変数の第１の値は、０に等しく、
前記スキャンベースＬＳＣインジケータを導出することは、
ｕｉＰｏｓＬａｓｔＸ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの左上の変換係数のｘ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｘ座標である、
ｕｉＰｏｓＬａｓｔＹ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数のｙ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｙ座標である、
前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標と前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標とを加算することによって第１の変数の値を判断することと、
前記第１の変数の前記値が前記サブブロック幅よりも小さい場合、前記スキャンベースインジケータの前記第１の値にｓＸ＋（（ｕｉＤｓ＊（ｕｉＤｓ＋１））＞＞１）を加えたものに等しいと、前記スキャン位置変数の第２の値を判断することと、ここで、ｓＸは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標であり、ｕｉＤｓは前記第１の変数である、
前記第１の変数の前記値が前記サブブロック幅より小さくない場合、
（（ｓＷｉｄｔｈ−１）＜＜１）−ｕｉＤｓに等しいと、第２の変数の値を判断することと、ここで、ｓＷｉｄｔｈは前記サブブロック幅であり、「＜＜」は左シフト演算を表す、
前記スキャン位置変数の前記第１の値にｓＷｉｄｔｈ＊（ｓＷｉｄｔｈ−１）−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｓＸを加えたものに等しいと、前記スキャン位置変数の前記第２の値を判断することと、ここで、ｕｉＤＩは前記第２の変数である、
前記ブロックベースＬＳＣインジケータの前記ｘ座標からｓＸ＜＜２を減じたものに等しいと、ｘ座標変数の値を判断することと、
前記ブロックベースＬＳＣインジケータの前記ｙ座標からｓＹ＜＜２を減じたものに等しいと、ｙ座標変数の値を判断することと、ここで、ｓＹは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標である、
前記スキャン位置変数の前記第２の値＜＜４に等しいと、前記スキャン位置変数の第３の値を判断することと、
前記ｘ座標変数に前記ｙ座標変数を加えたものの値として、第３の変数の値を判断することと、
前記第３の変数の前記値が４より小さい場合、前記スキャン位置変数の前記第３の値にｕｉＰｏｓＬａｓｔＸ＋（（ｕｉＤ＊（ｕｉＤ＋１））＞＞１）を加えたものとして、前記スキャンベースＬＳＣインジケータを判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ｘ座標変数であり、ｕｉＤは、前記第３の変数である、
前記第３の変数の前記値が４より小さくない場合、
６−ｕｉＤとして、第４の変数の値を判断することと、
前記スキャン位置変数の前記第３の値に１２−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｕｉＰｏｓＬａｓｔＸを加えたものとして、前記スキャンベースのＬＳＣインジケータを判断することと、ここで、ｕｉＤＩは前記第４の変数である、
を備える、請求項１に記載の方法。
【請求項１６】
サブブロック幅は、ｕｉＷｉｄｔｈ＞＞２に等しく、ここで、ｕｉＷｉｄｔｈは前記変換係数ブロックの幅であり、「＞＞」は右シフト演算を表す、
スキャン位置変数の第１の値は、０に等しく、
前記スキャンベースＬＳＣインジケータを導出するとき、前記１つまたは複数のプロセッサが、
ｕｉＰｏｓＬａｓｔＸ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの左上の変換係数のｘ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｘ座標である、
ｕｉＰｏｓＬａｓｔＹ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数のｙ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｙ座標である、
前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標と前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標とを加算することによって第１の変数の値を判断することと、
前記第１の変数の前記値が前記サブブロック幅よりも小さい場合、前記スキャンベースインジケータの前記第１の値にｓＸ＋（（ｕｉＤｓ＊（ｕｉＤｓ＋１））＞＞１）を加えたものに等しいと、前記スキャン位置変数の第２の値を判断することと、ここで、ｓＸは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標であり、ｕｉＤｓは前記第１の変数である、
前記第１の変数の前記値が前記サブブロック幅より小さくない場合、
（（ｓＷｉｄｔｈ−１）＜＜１）−ｕｉＤｓに等しいと、第２の変数の値を判断することと、ここで、ｓＷｉｄｔｈは前記サブブロック幅であり、「＜＜」は左シフト演算を表す、
前記スキャン位置変数の前記第１の値にｓＷｉｄｔｈ＊（ｓＷｉｄｔｈ−１）−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｓＸを加えたものに等しいと、前記スキャン位置変数の前記第２の値を判断することと、ここで、ｕｉＤＩは前記第２の変数である、
前記ブロックベースＬＳＣインジケータの前記ｘ座標からｓＸ＜＜２を減じたものに等しいと、ｘ座標変数の値を判断することと、
前記ブロックベースＬＳＣインジケータの前記ｙ座標からｓＹ＜＜２を減じたものに等しいと、ｙ座標変数の値を判断することと、ここで、ｓＹは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標である、
前記スキャン位置変数の前記第２の値＜＜４に等しいと、前記スキャン位置変数の第３の値を判断することと、
前記ｘ座標変数に前記ｙ座標変数を加えたものの値として、第３の変数の値を判断することと、
前記第３の変数の前記値が４より小さい場合、前記スキャン位置変数の前記第３の値にｕｉＰｏｓＬａｓｔＸ＋（（ｕｉＤ＊（ｕｉＤ＋１））＞＞１）を加えたものとして、前記スキャンベースＬＳＣインジケータを判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ｘ座標変数であり、ｕｉＤは、前記第３の変数である、
前記第３の変数の前記値が４より小さくない場合、
６−ｕｉＤとして、第４の変数の値を判断することと、
前記スキャン位置変数の前記第３の値に１２−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｕｉＰｏｓＬａｓｔＸを加えたものとして、前記スキャンベースのＬＳＣインジケータを判断することと、ここで、ｕｉＤＩは前記第４の変数である、
を行うように、前記１つまたは複数のプロセッサは構成される、請求項６に記載のビデオ復号デバイス。
【請求項１７】
サブブロック幅は、ｕｉＷｉｄｔｈ＞＞２に等しく、ここで、ｕｉＷｉｄｔｈは前記変換係数ブロックの幅であり、「＞＞」は右シフト演算を表す、
スキャン位置変数の第１の値は、０に等しく、
前記スキャンベースＬＳＣインジケータを導出することは、
ｕｉＰｏｓＬａｓｔＸ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの左上の変換係数のｘ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｘ座標である、
ｕｉＰｏｓＬａｓｔＹ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数のｙ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｙ座標である、
前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標と前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標とを加算することによって第１の変数の値を判断することと、
前記第１の変数の前記値が前記サブブロック幅よりも小さい場合、前記スキャンベースインジケータの前記第１の値にｓＸ＋（（ｕｉＤｓ＊（ｕｉＤｓ＋１））＞＞１）を加えたものに等しいと、前記スキャン位置変数の第２の値を判断することと、ここで、ｓＸは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標であり、ｕｉＤｓは前記第１の変数である、
前記第１の変数の前記値が前記サブブロック幅より小さくない場合、
（（ｓＷｉｄｔｈ−１）＜＜１）−ｕｉＤｓに等しいと、第２の変数の値を判断することと、ここで、ｓＷｉｄｔｈは前記サブブロック幅であり、「＜＜」は左シフト演算を表す、
前記スキャン位置変数の前記第１の値にｓＷｉｄｔｈ＊（ｓＷｉｄｔｈ−１）−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｓＸを加えたものに等しいと、前記スキャン位置変数の前記第２の値を判断することと、ここで、ｕｉＤＩは前記第２の変数である、
前記ブロックベースＬＳＣインジケータの前記ｘ座標からｓＸ＜＜２を減じたものに等しいと、ｘ座標変数の値を判断することと、
前記ブロックベースＬＳＣインジケータの前記ｙ座標からｓＹ＜＜２を減じたものに等しいと、ｙ座標変数の値を判断することと、ここで、ｓＹは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標である、
前記スキャン位置変数の前記第２の値＜＜４に等しいと、前記スキャン位置変数の第３の値を判断することと、
前記ｘ座標変数に前記ｙ座標変数を加えたものの値として、第３の変数の値を判断することと、
前記第３の変数の前記値が４より小さい場合、前記スキャン位置変数の前記第３の値にｕｉＰｏｓＬａｓｔＸ＋（（ｕｉＤ＊（ｕｉＤ＋１））＞＞１）を加えたものとして、前記スキャンベースＬＳＣインジケータを判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ｘ座標変数であり、ｕｉＤは、前記第３の変数である、
前記第３の変数の前記値が４より小さくない場合、
６−ｕｉＤとして、第４の変数の値を判断することと、
前記スキャン位置変数の前記第３の値に１２−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｕｉＰｏｓＬａｓｔＸを加えたものとして、前記スキャンベースのＬＳＣインジケータを判断することと、ここで、ｕｉＤＩは前記第４の変数である、
を備える、請求項１１に記載のビデオ復号デバイス。
【請求項１８】
サブブロック幅は、ｕｉＷｉｄｔｈ＞＞２に等しく、ここで、ｕｉＷｉｄｔｈは前記変換係数ブロックの幅であり、「＞＞」は右シフト演算を表す、
スキャン位置変数の第１の値は、０に等しく、
前記スキャンベースＬＳＣインジケータを導出するとき、前記１つまたは複数のプロセッサが、
ｕｉＰｏｓＬａｓｔＸ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの左上の変換係数のｘ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｘ座標である、
ｕｉＰｏｓＬａｓｔＹ＞＞２を判断することによって、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数のｙ座標を判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ブロックベースＬＳＣインジケータのｙ座標である、
前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標と前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標とを加算することによって第１の変数の値を判断することと、
前記第１の変数の前記値が前記サブブロック幅よりも小さい場合、前記スキャンベースインジケータの前記第１の値にｓＸ＋（（ｕｉＤｓ＊（ｕｉＤｓ＋１））＞＞１）を加えたものに等しいと、前記スキャン位置変数の第２の値を判断することと、ここで、ｓＸは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｘ座標であり、ｕｉＤｓは前記第１の変数である、
前記第１の変数の前記値が前記サブブロック幅より小さくない場合、
（（ｓＷｉｄｔｈ−１）＜＜１）−ｕｉＤｓに等しいと、第２の変数の値を判断することと、ここで、ｓＷｉｄｔｈは前記サブブロック幅であり、「＜＜」は左シフト演算を表す、
前記スキャン位置変数の前記第１の値にｓＷｉｄｔｈ＊（ｓＷｉｄｔｈ−１）−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｓＸを加えたものに等しいと、前記スキャン位置変数の前記第２の値を判断することと、ここで、ｕｉＤＩは前記第２の変数である、
前記ブロックベースＬＳＣインジケータの前記ｘ座標からｓＸ＜＜２を減じたものに等しいと、ｘ座標変数の値を判断することと、
前記ブロックベースＬＳＣインジケータの前記ｙ座標からｓＹ＜＜２を減じたものに等しいと、ｙ座標変数の値を判断することと、ここで、ｓＹは、前記最後の有意係数を含む前記サブブロックの前記左上の変換係数の前記ｙ座標である、
前記スキャン位置変数の前記第２の値＜＜４に等しいと、前記スキャン位置変数の第３の値を判断することと、
前記ｘ座標変数に前記ｙ座標変数を加えたものの値として、第３の変数の値を判断することと、
前記第３の変数の前記値が４より小さい場合、前記スキャン位置変数の前記第３の値にｕｉＰｏｓＬａｓｔＸ＋（（ｕｉＤ＊（ｕｉＤ＋１））＞＞１）を加えたものとして、前記スキャンベースＬＳＣインジケータを判断することと、ここで、ｕｉＰｏｓＬａｓｔＸは、前記ｘ座標変数であり、ｕｉＤは、前記第３の変数である、
前記第３の変数の前記値が４より小さくない場合、
６−ｕｉＤとして、第４の変数の値を判断することと、
前記スキャン位置変数の前記第３の値に１２−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）＋ｕｉＰｏｓＬａｓｔＸを加えたものとして、前記スキャンベースのＬＳＣインジケータを判断することと、ここで、ｕｉＤＩは前記第４の変数である、
を行うように、前記命令が前記１つまたは複数のプロセッサを構成する、請求項１３に記載のコンピュータプログラム。
【発明の詳細な説明】
【関連出願】
【０００１】
関連出願の相互参照
本出願は、その内容全体が参照により本明細書に組み込まれる、２０１１年６月２８日に出願された米国仮出願第６１／５０２，２６９号、２０１１年６月３０日に出願された米国仮出願第６１／５０３，５２９号、２０１１年１０月２４日に出願された米国仮出願第６１／５５０，７７５号、および２０１１年１０月２４日に出願された米国仮出願第６１／５５０，７８４号の利益を主張する。
【技術分野】
【０００２】
本開示は、ビデオデータを符号化および復号するための技法に関する。より詳細には、本開示は、ビデオデータ中の情報を表す有意変換係数の位置をシグナリングすることに関する。
【背景技術】
【０００３】
デジタルビデオ機能は、デジタルテレビジョン、デジタルダイレクトブロードキャストシステム、ワイヤレスブロードキャストシステム、携帯情報端末（ＰＤＡ）、ラップトップまたはデスクトップコンピュータ、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲームデバイス、ビデオゲームコンソール、セルラー電話または衛星無線電話、ビデオ遠隔会議デバイスなどを含む、広範囲にわたるデバイスに組み込まれ得る。デジタルビデオデバイスは、デジタルビデオ情報をより効率的に送信および受信するために、ＭＰＥＧ−２、ＭＰＥＧ−４、ＩＴＵ−Ｔ  Ｈ．２６３またはＩＴＵ−Ｔ  Ｈ．２６４／ＭＰＥＧ−４、Ｐａｒｔ１０、Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）によって定義された規格、およびそのような規格の拡張に記載されているビデオ圧縮技法など、ビデオ圧縮技法を実装する。
【０００４】
ビデオ圧縮技法は、ビデオシーケンスに固有の冗長性を低減または除去するために空間的予測および／または時間的予測を実行する。ブロックベースのビデオコーディングの場合、ビデオフレームまたはスライスはブロックに区分され得る。各ブロックはさらに区分され得る。イントラコード化（Ｉ）フレームまたはスライス中のブロックは、隣接ブロックに対する空間的予測を使用して符号化される。インターコード化（ＰまたはＢ）フレームまたはスライス中のブロックは、同じフレームまたはスライス中の隣接ブロックに対する空間的予測、あるいは他の参照フレームに対する時間的予測を使用し得る。
【発明の概要】
【０００５】
本開示は、一般に、ビデオコーディング中に変換係数のブロック中の最後の有意係数（ＬＳＣ：last significant coefficient）の位置をシグナリングするための技法に関する。たとえば、本技法は、変換係数のブロックのＬＳＣのブロックベースＬＳＣインジケータを受信するビデオデコーダを提供する。ブロックベースＬＳＣインジケータは、ブロックがスキャン順序に従ってスキャンされるとき、ＬＳＣの座標を示す。ビデオデコーダは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。次いで、ビデオデコーダは、有意性マップを復号するためにスキャンベースＬＳＣインジケータを使用し得る。
【０００６】
一例では、本開示では、ビデオデータを復号するための方法について説明する。本方法は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換することを備える。ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示す。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。本方法はまた、スキャンベースＬＳＣインジケータに基づいて、ブロックのための有意性マップを復号することを備える。
【０００７】
別の例では、本開示では、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するように構成される１つまたは複数のプロセッサを備えるビデオ復号デバイスについて説明する。ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示す。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。１つまたは複数のプロセッサはまた、スキャンベースＬＳＣインジケータに基づいて、ブロックのための有意性マップを復号するように構成される。
【０００８】
別の例では、本開示では、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するための手段を備えるビデオ復号デバイスについて説明する。ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示す。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。本ビデオ復号デバイスはまた、スキャンベースＬＳＣインジケータに基づいて、ブロックのための有意性マップを復号するための手段を備える。
【０００９】
別の例では、本開示では、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するように１つまたは複数のプロセッサを構成する命令を記憶したコンピュータ可読記憶媒体を備えるコンピュータプログラム製品について説明する。ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示す。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。命令はまた、スキャンベースＬＳＣインジケータに基づいて、ブロックのための有意性マップを復号するように１つまたは複数のプロセッサを構成する。
【００１０】
本開示の１つまたは複数の態様の詳細を添付の図面および以下の説明に記載する。本開示で説明する技法の他の特徴、目的、および利点は、これらの説明および図面、ならびに特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】例示的なビデオコーディングシステムを示すブロック図。
【図２】例示的な変換係数ブロックを示す概念図。
【図３】例示的なスキャン順序を示す概念図。
【図４】図２の変換係数ブロックのための例示的な有意性マップの２次元表現を示す概念図。
【図５】ビデオエンコーダの例示的な構成を示すブロック図。
【図６】ビデオデコーダの例示的な構成を示すブロック図。
【図７】ビデオエンコーダによって実行される例示的な動作を示すフローチャート。
【図８】変換係数ブロックを復号する例示的な動作を示すフローチャート。
【図９】ブロックベース最後の有意係数（ＬＳＣ）インジケータをスキャンベースＬＳＣインジケータに変換する例示的な非反復動作を示すフローチャート。
【図１０】ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する別の例示的な非反復動作を示すフローチャート。
【図１１】ブロックベースＬＳＣインジケータを、マップデータ構造がアクセスされるスキャンベースＬＳＣインジケータに変換する例示的な動作を示すフローチャート。
【図１２】ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する例示的な反復動作を示すフローチャート。
【図１３】最後の有意変換係数を示す変換係数ブロックの概念図。
【発明を実施するための形態】
【００１２】
添付の図面は例を示している。添付の図面中の参照番号によって示される要素は、以下の説明における同様の参照番号によって示される要素に対応する。本開示では、序数語（たとえば、「第１の」、「第２の」、「第３の」など）で始まる名前を有する要素は、必ずしもそれらの要素が特定の順序を有することを暗示するとは限らない。そうではなく、そのような序数語は、同じまたは同様のタイプの異なる要素を指すのに使用されるにすぎない。
【００１３】
以下で説明するように、ビデオエンコーダは変換係数ブロックを生成し得る。変換係数ブロックの各々は、変換係数の２次元アレイであり得る。ビデオエンコーダが変換係数ブロックを生成した後、ビデオエンコーダは、スキャン順序に従って変換係数ブロックの最後の有意係数（ＬＳＣ）を識別し得る。言い換えれば、変換係数ブロックの変換係数がスキャン順序に従って順序付けられるとき、変換係数ブロックのＬＳＣは最後の非ゼロ変換係数である。スキャン順序は、変換係数ブロックのＤＣ変換係数（すなわち、左上変換係数）で開始し得る。
【００１４】
ビデオエンコーダは、スキャン順序に従ってＬＳＣの順序位置を示すスキャンベースＬＳＣインジケータを出力し得る。言い換えれば、ビデオエンコーダは、変換係数がスキャン順序に従って順序付けられるとき、ＬＳＣがｎ番目の変換係数であることを示すスキャンベースＬＳＣインジケータを出力し得る。
【００１５】
いくつかの従来のビデオエンコーダでは、ビデオエンコーダは、変換係数ブロック上で一連のコーディングパスを実行し得る。コーディングパスの各々の間に、ビデオエンコーダは、スキャン順序に従って変換係数ブロックの変換係数を処理し得る。コーディングパスの各々の間に、ビデオエンコーダは、変換係数に関する情報を符号化する。
【００１６】
コーディングパスのうちの１つの間に、ビデオエンコーダは有意性マップを生成する。有意性マップは、変換係数ブロック中の変換係数が有意（すなわち、非ゼロ）であるかどうかを示す一連の有意性フラグを含む。有意性マップを生成するために、ビデオエンコーダは、スキャン順序に従って変換係数の各々を処理し得る。ビデオエンコーダが変換係数を処理するとき、ビデオエンコーダは、変換係数の順序位置がスキャン順序に従ってＬＳＣの順序位置の前に発生するかどうかを判断し得る。そうである場合、ビデオエンコーダは、変換係数の有意性フラグを生成し得る。変換係数の値が非ゼロである場合、有意性フラグは「１」の値を有し得る。変換係数の値がゼロに等しい場合、有意性フラグは「０」の値を有し得る。しかしながら、変換係数の順序位置がスキャン順序に従ってＬＳＣの順序位置の前に発生しない場合、ビデオエンコーダは、変換係数の有意性フラグを生成しない。
【００１７】
ビデオデコーダは、スキャンベースＬＳＣインジケータと変換係数ブロックの有意性マップとを受信し得る。ビデオデコーダは、次いで、スキャンベースＬＳＣインジケータに基づいて、有意性マップが変換係数ブロックの特定の変換係数の有意性フラグを含むかどうかを判断し得る。ビデオエンコーダが変換係数の有意性フラグを生成しない場合、ビデオデコーダは、変換係数が有意でないと推論し得る。
【００１８】
いくつかの事例では、ビデオエンコーダは、ＬＳＣの変換係数ブロック内の座標を示すブロックベースＬＳＣインジケータを生成し得る。ビデオエンコーダは、次いで、ブロックベースＬＳＣインジケータをＣＡＢＡＣ符号化し得る。ｘ座標とｙ座標との間の統計的関係のために、ＬＳＣの順序位置に関してＬＳＣの位置を示すよりも、ブロックベースＬＳＣインジケータを使用してＬＳＣの位置を示すほうが、必要なビットが少なくて済み得る。
【００１９】
さらに、いくつかの事例では、ビデオエンコーダが有意性マップを生成するためのスキャン順序を使用するときよりも、ビデオエンコーダが有意性マップを生成するためのスキャン順序の逆を使用するときのほうが、有意性マップを表すためのビットが少なくて済み得る。しかしながら、ビデオエンコーダがブロックベースＬＳＣインジケータを生成する場合、およびビデオエンコーダが有意性マップを生成するために逆スキャン順序を使用する場合、ビデオデコーダは、ブロックベースＬＳＣインジケータに基づいて、変換係数の順序位置が変換係数ブロックのＬＳＣの順序位置の前に発生するかどうかを判断することができないことがある。したがって、ビデオデコーダは、ブロックベースＬＳＣインジケータに基づいて、有意性マップが特定の変換係数の有意性フラグを含むかどうかを判断することができないことがある。
【００２０】
この問題に対処するために、ビデオデコーダは、本開示の技法に従って、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する変換演算を実行し得る。スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示し得る。ビデオデコーダは、次いで、スキャンベースＬＳＣインジケータに基づいて、ブロックのための有意性マップを復号し得る。
【００２１】
本明細書で説明するように、ビデオデコーダは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに様々な方法で変換し得る。たとえば、ビデオデコーダは、ブロックベースＬＳＣインジケータからスキャンベースＬＳＣインジケータを導出するために非反復アルゴリズムを実行し得る。別の例では、ビデオデコーダは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスすることに少なくとも部分的によって、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換し得る。さらに別の例では、ビデオデコーダは、ブロックベースＬＳＣインジケータの座標を有する位置に達するまで、スキャン順序に従って変換係数ブロック中の位置中をスキャンするループ動作を実行し得る。この例では、ビデオデコーダは、座標を有する位置より前の変換係数ブロックの位置ごとにスキャンベースＬＳＣインジケータを増分し得る。
【００２２】
図１は、本開示で説明する技法を利用し得る例示的なビデオコーディングシステム１０を示すブロック図である。本開示では、「ビデオコーディング」という用語は、ビデオ符号化およびビデオ復号を指すことがある。図１に示すように、ビデオコーディングシステム１０は、ソースデバイス１２と宛先デバイス１４とを含む。ソースデバイス１２は符号化ビデオデータを生成する。宛先デバイス１４は、符号化ビデオデータを後で復号し得る。ソースデバイス１２および宛先デバイス１４は、デスクトップコンピュータ、ノートブック（すなわち、ラップトップ）コンピュータ、タブレットコンピュータ、セットトップボックス、携帯電話、電話ハンドセット、「スマート」パッド、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイス、またはビデオデータを符号化および復号することが可能なタイプのコンピューティングデバイスを含む、広範囲にわたるデバイスのいずれかを備え得る。
【００２３】
宛先デバイス１４は、チャネル１６を介して符号化ビデオデータを受信し得る。チャネル１６は、ソースデバイス１２から宛先デバイス１４に符号化ビデオデータを移動させることが可能な媒体またはデバイスを備え得る。一例では、チャネル１６は、ソースデバイス１２が、符号化ビデオデータを宛先デバイス１４に直接リアルタイムで送信することを可能にする通信媒体を備え得る。ソースデバイス１２または別のデバイスは、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得る。通信媒体は、無線周波数（ＲＦ）スペクトルあるいは１つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体を備え得る。チャネル１６は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。チャネル１６は、ソースデバイス１２から宛先デバイス１４への符号化ビデオデータの通信を可能にするのに有用であり得るルータ、スイッチ、基地局、または任意の他の機器を含み得る。
【００２４】
いくつかの例では、ソースデバイス１２および宛先デバイス１４は、ワイヤレス通信のために装備され得る。ただし、本開示の技法は、必ずしもワイヤレス適用例または設定に限定されるとは限らない。そうではなく、本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例など、様々なマルチメディア適用例のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、ソースデバイス１２および宛先デバイス１４は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、および／またはビデオテレフォニーなどの適用例をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
【００２５】
さらに、いくつかの例では、ソースデバイス１２は、符号化ビデオデータをストレージシステム３４に出力し得る。同様に、宛先デバイス１４は、ストレージシステム３４に記憶された符号化ビデオデータにアクセスし得る。様々な例では、ストレージシステム３４は、様々な分散型またはローカルアクセス型データ記憶媒体を含み得る。データ記憶媒体の例示的なタイプとしては、限定はしないが、ハードドライブ、ブルーレイ（登録商標）ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、固体メモリユニット、揮発性もしくは不揮発性メモリ、または符号化ビデオデータの記憶に適した他のデジタル記憶媒体がある。
【００２６】
いくつかの例では、ストレージシステム３４は、ソースデバイス１２によって生成された符号化ビデオを保持し得るファイルサーバまたは別の中間ストレージデバイスを備え得る。宛先デバイス１４は、ストリーミングまたはダウンロードを介してストレージシステム３４から、記憶されたビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶すること、およびその符号化ビデオデータを宛先デバイス１４に送信することが可能な任意のタイプのサーバであり得る。例示的なファイルサーバとしては、（たとえば、ウェブサイトのための）ウェブサーバ、ＦＴＰサーバ、ネットワーク接続ストレージ（ＮＡＳ：network attached storage）デバイス、またはローカルディスクドライブがある。宛先デバイス１４は、インターネット接続を含む、任意の標準のデータ接続を介して符号化ビデオデータにアクセスし得る。これは、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適であるワイヤレスチャネル（たとえば、Ｗｉ−Ｆｉ接続）、ワイヤード接続（たとえば、ＤＳＬ、ケーブルモデムなど）、または両方の組合せを含み得る。ストレージシステム３４からの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
【００２７】
図１の例では、ソースデバイス１２は、ビデオソース１８と、ビデオエンコーダ２０と、出力インターフェース２２とを含む。いくつかの例では、出力インターフェース２２は、変調器／復調器（モデム）および／または送信機も含み得る。ビデオソース１８は、ビデオエンコーダ２０にビデオデータを与える。様々な例では、ビデオソース１８は、ビデオデータを与えるための様々なタイプのデバイスおよび／またはシステムを備え得る。たとえば、ビデオソース１８は、ビデオカメラなどのビデオキャプチャデバイスを備え得る。別の例では、ビデオソース１８は、前にキャプチャされたビデオを包含するビデオアーカイブを備え得る。さらに別の例では、ビデオソース１８は、ビデオコンテンツプロバイダからビデオを受信するビデオフィードインターフェースを備え得る。さらに別の例では、ビデオソース１８は、コンピュータグラフィックスデータを生成するためのコンピュータグラフィックスシステムを備え得る。
【００２８】
以下で詳細に説明するように、ビデオエンコーダ２０は、ビデオソース１８によって与えられたビデオデータを符号化し得る。いくつかの例では、ソースデバイス１２は、出力インターフェース２２を介して宛先デバイス１４に符号化ビデオデータを直接送信し得る。さらに、いくつかの例では、ストレージシステム３４は、宛先デバイス１４または他のデバイスによる後のアクセスのために符号化ビデオデータを記憶し得る。
【００２９】
本開示では、概して、ビデオエンコーダ２０が、ある情報をビデオデコーダ３０などの別のデバイスに「シグナリング」することに言及し得る。ただし、ビデオエンコーダ２０は、いくつかのシンタックス要素をビデオデータの様々な符号化部分に関連付けることによって情報をシグナリングし得ることを理解されたい。すなわち、ビデオエンコーダ２０は、いくつかのシンタックス要素をビデオデータの様々な符号化部分のヘッダに記憶することによってデータを「シグナリング」し得る。いくつかの場合には、そのようなシンタックス要素は、ビデオデコーダ３０によって受信および復号される前に、符号化および記憶（たとえば、ストレージシステム３４に記憶）され得る。したがって、「シグナリング」という用語は、概して、圧縮ビデオデータを復号するのに使用されるシンタックスまたは他のデータの通信を指すことがある。そのような通信は、リアルタイムにまたはほぼリアルタイムに行われ得る。代替的に、そのような通信は、符号化時に媒体にシンタックス要素を記憶するときに行われるなど、ある時間期間にわたって行われ得、次いで、そのシンタックス要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
【００３０】
図１の例では、宛先デバイス１４は、入力インターフェース２８と、ビデオデコーダ３０と、ディスプレイデバイス３２とを含む。いくつかの例では、入力インターフェース２８は、受信機および／またはモデムを含み得る。宛先デバイス１４の入力インターフェース２８は、チャネル１６および／またはストレージシステム３４から符号化ビデオデータを受信する。ビデオデコーダ３０は、入力インターフェース２８によって受信された符号化ビデオデータを復号する。宛先デバイス１４は、ディスプレイデバイス３２上に表示するための復号ビデオデータをレンダリングし得る。
【００３１】
ディスプレイデバイス３２は、宛先デバイス１４と一体化され得るかまたはその外部にあり得る。いくつかの例では、宛先デバイス１４は、一体型ディスプレイデバイスを含み、外部ディスプレイデバイスとインターフェースするようにも構成され得る。様々な例では、ディスプレイデバイス３２は、様々なタイプのディスプレイデバイスを備え得る。たとえば、ディスプレイデバイス３２は、液晶ディスプレイ（ＬＣＤ：liquid crystal display）、プラズマディスプレイ、有機発光ダイオード（ＯＬＥＤ：organic light emitting diode）ディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
【００３２】
図１には示されていないが、いくつかの態様では、ビデオエンコーダ２０およびビデオデコーダ３０は、それぞれオーディオエンコーダおよびオーディオデコーダと統合され得、また、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するための適切なＭＵＸ−ＤＥＭＵＸユニット、または他のハードウェアおよびソフトウェアを含み得る。適用可能な場合、いくつかの例では、ＭＵＸ−ＤＥＭＵＸユニットは、ＩＴＵ  Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ）などの他のプロトコルに準拠し得る。
【００３３】
ビデオエンコーダ２０およびビデオデコーダ３０はそれぞれ、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）、特定用途向け集積回路（ＡＳＩＣ：application specific integrated circuit）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ：field programmable gate array）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアまたはそれらの任意の組合せなど、様々な好適な回路のいずれかとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、好適な非一時的コンピュータ可読媒体にソフトウェアの命令を記憶し、１つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を実行し得る。ビデオエンコーダ２０およびビデオデコーダ３０の各々は１つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ／デコーダ（コーデック）の一部として統合され得る。
【００３４】
ビデオエンコーダ２０およびビデオデコーダ３０は、現在開発中の高効率ビデオコーディング（ＨＥＶＣ）規格など、ビデオ圧縮規格に従って動作し得、ＨＥＶＣテストモデル（ＨＭ）に準拠し得る。代替的に、ビデオエンコーダ２０およびビデオデコーダ３０は、代替的にＭＰＥＧ−４，Ｐａｒｔ  １０，Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）と呼ばれるＩＴＵ−Ｔ  Ｈ．２６４規格など、他のプロプライエタリ規格または業界規格、あるいはそのような規格の拡張に従って動作し得る。規格に対する例示的な拡張としては、Ｈ．２６４／ＡＶＣ規格に対するスケーラブルビデオコーディング（ＳＶＣ：scalable video coding）拡張およびマルチビュービデオコーディング（ＭＶＣ：Multiview Video Coding）拡張がある。本開示の技法は、いかなる特定のコーディング規格にも限定されない。ビデオ圧縮規格の他の例としては、ＭＰＥＧ−２およびＩＴＵ−Ｔ  Ｈ．２６３がある。
【００３５】
上記で手短に説明したように、ビデオエンコーダ２０はビデオデータを符号化する。ビデオデータは、１つまたは複数のピクチャシーケンスを備え得る。ピクチャの各々は静止画像である。いくつかの事例では、ピクチャは「フレーム」と呼ばれることがある。ビデオエンコーダ２０がビデオデータを符号化するとき、ビデオエンコーダ２０はビットストリームを生成し得る。ビットストリームは、コード化ピクチャおよび関連データの表現を形成する一連のビットを含む。コード化ピクチャとは、ピクチャのコード化表現である。
【００３６】
ビットストリームを生成するために、ビデオエンコーダ２０は、ビデオデータ中の一連のピクチャに対して符号化演算を実行し得る。ビデオエンコーダ２０が一連のピクチャに対して符号化演算を実行すると、ビデオエンコーダ２０は、一連のコード化ピクチャと関連データとを生成し得る。さらに、ビデオエンコーダ２０は、０個以上の一連のピクチャに適用可能なパラメータを包含するシーケンスパラメータセットを生成し得る。さらに、ビデオエンコーダ２０は、全体として０個以上のピクチャに適用可能なパラメータを包含するピクチャパラメータセット（ＰＰＳ：picture parameter set）を生成し得る。いくつかの例では、ビデオエンコーダ２０は、適応パラメータセット（ＡＰＳ：adaptation parameter set）を生成し得る。ＡＰＳは、０個以上のピクチャに適用可能なパラメータを全体として記憶し得る。
【００３７】
コード化ピクチャを生成するために、ビデオエンコーダ２０は、ピクチャを１つまたは複数の等しいサイズのビデオブロックに区分し得る。ビデオブロックの各々はツリーブロックに関連付けられ得る。ビデオブロックは、ビデオデータの２次元（２Ｄ）ブロックであり得る（たとえば、サンプル）。いくつかの事例では、ツリーブロックは、最大コーディングユニット（ＬＣＵ：largest coding unit）と呼ばれることもある。ＨＥＶＣのツリーブロックは、Ｈ．２６４／ＡＶＣなど、従来の規格のマクロブロックに広い意味で類似し得る。ただし、ツリーブロックは、必ずしも特定のサイズに限定されるとは限らず、１つまたは複数のコーディングユニット（ＣＵ：coding unit）を含み得る。
【００３８】
いくつかの例では、ビデオエンコーダ２０は、ピクチャを複数のスライスに区分し得る。スライスの各々は整数個のＣＵを含み得る。いくつかの事例では、スライスは整数個のツリーブロックを備える。他の例では、スライスの境界はツリーブロック内にあり得る。スライスの境界がツリーブロック内にある場合、スライスは微細粒スライス（fine granular slice）と呼ばれることがある。いくつかの例では、ビデオエンコーダ２０は、スライスのバイト単位のサイズに従って、または、スライス中のツリーブロックの数に従って、スライスを符号化し得る。
【００３９】
ピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、ピクチャの各スライスに対して符号化演算を実行し得る。スライスに対する符号化演算は、スライスに関連する符号化データを生成し得る。スライスに関連する符号化データは、「コード化スライス」と呼ばれることがある。コード化スライスは、スライスヘッダとスライスデータとを含み得る。スライスデータは、一連の連続するコーディングユニットをコーディング順序で含み得る。スライスヘッダは、スライスの第１のまたはすべてのツリーブロックに関するデータ要素を含み得る。
【００４０】
スライスについてのコード化スライスデータを生成するために、ビデオエンコーダ２０は、スライス中の各ツリーブロックに対して符号化演算を実行し得る。ビデオエンコーダ２０がツリーブロックに対して符号化演算を実行すると、ビデオエンコーダ２０はコード化ツリーブロックを生成し得る。コード化ツリーブロックは、ツリーブロックの符号化バージョンを表すデータを備え得る。
【００４１】
コード化ツリーブロックを生成するために、ビデオエンコーダ２０は、ツリーブロックのビデオブロックに対して４分木区分を再帰的に実行して、ビデオブロックを漸進的により小さいビデオブロックに分割し得る。より小さいビデオブロックの各々は異なるＣＵに関連付けられ得る。たとえば、ビデオエンコーダ２０は、ツリーブロックのビデオブロックを４つの等しいサイズのサブブロックに区分し、サブブロックのうち１つまたは複数を、４つの等しいサイズのサブサブブロックに区分し、以下同様に行い得る。ビットストリーム中の１つまたは複数のシンタックス要素は、ビデオエンコーダ２０がツリーブロックのビデオブロックを区分し得る最大回数を示し得る。シンタックス要素はまた、最小コーディングユニット（ＳＣＵ：smallest coding unit）を示し得る。ＣＵのビデオブロックは形状が矩形であり得る。
【００４２】
ビデオエンコーダ２０は、ツリーブロック中の各非区分化ＣＵに対して符号化演算を実行し得る。非区分化ＣＵに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、ＣＵのための１つまたは複数の予測ユニット（ＰＵ：prediction unit）を生成し得る。ＣＵのＰＵの各々は、ＣＵのビデオブロック内の異なるビデオブロックに関連付けられ得る。ビデオエンコーダ２０は、イントラ予測またはインター予測を使用して、ＣＵのＰＵについての予測データを生成し得る。ビデオエンコーダ２０がイントラ予測を使用してＰＵについての予測データを生成するとき、ビデオエンコーダ２０は、ＰＵを包含するピクチャの復号サンプルからＰＵについての予測データを導出する。ビデオエンコーダ２０がインター予測を使用してＰＵについての予測データを生成するとき、ビデオエンコーダ２０は、ＣＵを包含するピクチャとは異なる参照ピクチャの復号値からＰＵについての予測データを導出する。ＰＵについての予測データは、予測ビデオブロックと様々なシンタックス要素とを含み得る。
【００４３】
ビデオエンコーダ２０がＣＵについての予測データを生成した後、ビデオエンコーダ２０はＣＵについての残差データを生成し得る。ＣＵについての残差データは、ＣＵのＰＵのための予測ビデオブロック中のサンプルと、ＣＵの元のビデオブロック中のサンプルとの間の差異を示し得る。
【００４４】
ツリーブロックの各非区分ＣＵは、１つまたは複数の変換ユニット（ＴＵ：transform unit）を有し得る。ＣＵの各ＴＵは、ＣＵの残差データの異なる部分に関連付けられ得る。ビデオエンコーダ２０は、ＣＵの各ＴＵに対して変換演算を実行し得る。ビデオエンコーダ２０がＴＵに対して変換演算を実行すると、ビデオエンコーダ２０は、ＴＵに関連する残差データに変換を適用することに少なくとも部分的によって変換係数ブロックを生成し得る。変換係数ブロックは、変換係数の２Ｄ行列であり得る。図２は、例示的な変換係数ブロックを示す概念図である。
【００４５】
ビデオエンコーダ２０は、変換係数ブロック中の変換係数を量子化し得る。量子化は、概して、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数ブロック中の変換係数を量子化し、さらに圧縮するプロセスを指す。量子化は、変換係数の一部または全部に関連するビット深度を低減し得る。たとえば、量子化中にｎビット値がｍビット値に切り捨てられ得、ｎはｍよりも大きい。
【００４６】
変換係数ブロックを量子化した後に、ビデオエンコーダ２０は、変換係数ブロックに関連するシンタックス要素のセットを生成し得る。ビデオエンコーダ２０は、次いで、これらのシンタックス要素の一部に対してコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ：Context Adaptive Binary Arithmetic Coding）演算を実行し得る。他の例では、ビデオエンコーダ２０は、シンタックス要素に対して他のエントロピーコーディング演算を実行し得る。たとえば、ビデオエンコーダ２０は、変換係数ブロックに関連するシンタックス要素に対して、コンテキスト適応型可変長コーディング（ＣＡＶＬＣ：context adaptive variable length coding）演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング（ＳＢＡＣ：syntax-based context-adaptive binary arithmetic coding）演算、確率間隔区分エントロピー（ＰＩＰＥ：Probability Interval Partitioning Entropy）コーディング演算、または別のタイプのエントロピー符号化演算を実行し得る。ビデオエンコーダ２０はまた、ビデオデータに関連する他のシンタックス要素に対してＣＡＢＡＣ演算を実行し得る。
【００４７】
ビデオエンコーダ２０が変換係数ブロックに関連するシンタックス要素を生成し、ＣＡＢＡＣ演算を実行した後、ビデオエンコーダ２０は、ビデオデータのためのビットストリーム中に得られたデータを含め得る。ビットストリームは、コード化ピクチャおよび関連データの表現を形成する一連のビットを含み得る。
【００４８】
ビットストリームは、一連のネットワークアブストラクションレイヤ（ＮＡＬ：network abstraction layer）ユニットを備え得る。ＮＡＬユニットの各々は、ＮＡＬユニット中のデータのタイプの指示と、データを包含するバイトとを包含するシンタックス構造であり得る。たとえば、ＮＡＬユニットは、ＰＰＳ、ＡＰＳ、コード化スライス、補足エンハンスメント情報、アクセスユニットデリミタ、フィラーデータ、または別のタイプのデータを表すデータを含み得る。ＮＡＬユニットのデータは、エミュレーション防止ビットが点在しているローバイトシーケンスペイロード（ＲＢＳＰ：raw byte sequence payload）の形態であり得る。ＲＢＳＰは、ＮＡＬユニット内にカプセル化される整数個のバイトを包含するシンタックス構造であり得る。
【００４９】
ビデオエンコーダ２０が変換係数ブロックに対してエントロピー符号化演算を実行するとき、ビデオエンコーダ２０は、変換係数ブロック中に少なくとも１つの有意（すなわち、非ゼロ）変換係数があるかどうかを判断し得る。変換係数ブロック中に少なくとも１つの有意変換係数がある場合、ビデオエンコーダ２０は、変換係数ブロックが少なくとも１つの有意変換係数を含むことを示すようにコード化ブロックフラグ（ＣＢＦ：coded block flag）を更新し得る。変換係数ブロック中に有意変換係数がない場合、ビデオエンコーダ２０は、変換係数ブロックがいかなる有意変換係数も含まないことを示すようにＣＢＦを更新し得る。
【００５０】
変換係数ブロック中に少なくとも１つの有意係数がある場合、ビデオエンコーダ２０は、スキャン順序に従って変換係数ブロックの最後の有意係数（ＬＳＣ：last significant coefficient）を識別し得る。変換係数ブロックのＬＳＣは、変換係数ブロックの変換係数がスキャン順序に従って順序付けられたときに最後に発生する非ゼロ変換係数である。スキャン順序は正スキャン順序であり得る。言い換えれば、スキャン順序は、変換係数ブロックのＤＣ変換係数で開始し得る。ＤＣ変換係数は、変換係数ブロックの左上隅で発生する。対照的に、逆（reverse）または逆（inverse）スキャン順序は、変換係数ブロックの右下の変換係数で開始する。
【００５１】
ビデオエンコーダ２０は、様々なスキャン順序に従って変換係数ブロックのＬＳＣを識別し得る。たとえば、ビデオエンコーダ２０は、ジグザグスキャン順序、水平スキャン順序、垂直スキャン順序、対角スキャン順序、またはサブブロックスキャン順序に従ってＬＳＣを識別し得る。いくつかの例では、変換係数ブロックがイントラ予測ＣＵに関連付けられる場合、ビデオエンコーダ２０は、ＣＵに関連するイントラ予測モードに基づいてスキャン順序を選択し得る。さらに、いくつかの例では、ビデオエンコーダ２０は、コーディング効率および／または主観的画質を最適化するために、スキャン順序の間で適応的に切り替わり得る。
【００５２】
図３は、例示的なスキャン順序を示す概念図である。図３のパート（ａ）は、例示的なジグザグスキャン順序を示している。図３のパート（ｂ）は、例示的な水平スキャン順序を示している。図３のパート（ｃ）は、例示的な垂直スキャン順序を示している。図３のパート（ｄ）は、例示的な逆対角スキャン順序を示している。
【００５３】
図３のパート（ｅ）は、例示的な対角サブブロックスキャン順序を示している。サブブロックスキャン順序では、ビデオエンコーダ２０は、大きい変換係数ブロックをサブブロックに分割し得る。図３の例では、サブブロックは破線矩形として示されている。サブブロックの各々について、ビデオエンコーダ２０は、特定の順序でサブブロックの変換係数を処理し得る。図３の例では、ビデオエンコーダ２０は、上／右対角順序で左上のサブブロック中の変換係数をスキャンし、次いで、上／右対角順序で左下のサブブロック中の変換係数をスキャンし、次いで、上／右対角順序で右上のサブブロック中の変換係数をスキャンし、最後に、上／右対角順序で右下のサブブロック中の変換係数をスキャンする。
【００５４】
他の例では、ビデオエンコーダ２０は、変換係数ブロックを４×４サブブロック（または他のサブブロックサイズ）に区分し得る。この例では、ビデオエンコーダ２０は、次いで、スキャン順序に従って４×４変換係数ブロックの各々を処理し得る。
【００５５】
ＬＳＣを識別した後に、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータを生成し得る。ブロックベースＬＳＣインジケータはＬＳＣの座標を指定する。たとえば、変換係数ブロックが８×８であり、スキャン順序が水平スキャン順序であり、変換係数ブロックの変換係数がそのスキャン順序に従って順序付けられるとき、ＬＳＣが１０番目の位置で発生するとビデオエンコーダ２０が判断する場合、ビデオエンコーダ２０は、座標（１，１）を指定するブロックベースＬＳＣインジケータを生成し得る。
【００５６】
ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータに対してＣＡＢＡＣ符号化演算を実行し得る。いくつかの事例では、エントロピー符号化演算は、ブロックベースＬＳＣインジケータのｘ座標とｙ座標との間の統計的関係を活用することが可能であり得るので、ブロックベースＬＳＣインジケータに対してＣＡＢＡＣ符号化演算を実行することは、対応するスキャンベースＬＳＣインジケータに対してＣＡＢＡＣ符号化演算を実行することよりも効率的であり得る。ビデオエンコーダ２０は、符号化ビットストリームにブロックベースＬＳＣインジケータのＣＡＢＡＣ符号化バージョンを追加し得る。
【００５７】
ＬＳＣを識別した後に、ビデオエンコーダ２０は、変換係数ブロックに関連するシンタックス要素を生成し、符号化するために、変換係数ブロックに対して１つまたは複数のコーディングパスを実行し得る。変換係数ブロックに関連するシンタックス要素は、変換係数ブロックのための有意性マップと変換係数についてのレベル情報とを含む。
【００５８】
コーディングパスの各々の中で、ビデオエンコーダ２０は、逆スキャン順序に従って変換係数ブロックの変換係数中をスキャンし得る。逆スキャン順序は、ＬＳＣを識別するために使用されたスキャン順序の逆であり得る。たとえば、ビデオエンコーダ２０が正対角スキャン順序に従ってＬＳＣを識別した場合、逆スキャン順は逆対角スキャン順序であり得る。
【００５９】
第１のコーディングパス中に処理された各変換係数について、ビデオエンコーダ２０は、変換係数の順序位置がＬＳＣの順序位置の前に発生するかどうかを判断し得る。変換係数の順序位置がＬＳＣの順序位置の前に発生する場合、ビデオエンコーダ２０は、その変換係数が有意であるかどうかを示すシンタックス要素（すなわち、有意性フラグ）を生成し、ＣＡＢＡＣ符号化し得る。変換係数が非ゼロである場合、変換係数は「有意」であり得る。変換係数がＬＳＣの順序位置の前に発生しない場合、ビデオエンコーダ２０は、その変換係数のための有意性フラグを生成せず、ＣＡＢＡＣ符号化しない。このようにして、ビデオエンコーダ２０は、変換係数ブロックのための有意性マップを生成し、ＣＡＢＡＣ符号化し得る。有意性マップを生成し、ＣＡＢＡＣ符号化した後に、ビデオエンコーダ２０は、ビットストリーム中に有意性マップのＣＡＢＡＣ符号化バージョンを含め得る。
【００６０】
いくつかの事例では、ＬＳＣの位置と有意性マップのコンテンツとの間に統計的関係があり得る。したがって、ビデオエンコーダ２０は、有意性マップの有意性フラグをＣＡＢＡＣ符号化する際に使用するための１つまたは複数のコンテキストモデルを選択するためにＬＳＣの位置を使用し得る。
【００６１】
第２のコーディングパス中に処理された各変換係数について、ビデオエンコーダ２０は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ２０は、その変換係数の絶対値が１よりも大きいかどうかを示すシンタックス要素（すなわち、１よりも大きいレベルフラグ）を生成し、ＣＡＢＡＣ符号化し得る。変換係数が有意でない場合、ビデオエンコーダ２０は、その変換係数のための１よりも大きいレベルフラグを生成せず、ＣＡＢＡＣ符号化しない。１よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化した後に、ビデオエンコーダ２０は、ビットストリーム中に１よりも大きいレベルフラグのＣＡＢＡＣ符号化バージョンを含め得る。
【００６２】
第３のコーディングパス中に、ビデオエンコーダ２０は、変換係数の絶対値が２よりも大きいかどうかを示すシンタックス要素（すなわち、２よりも大きいレベルフラグ）を生成し、ＣＡＢＡＣ符号化し得る。２よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化した後に、ビデオエンコーダ２０は、ビットストリーム中に２よりも大きいレベルフラグのＣＡＢＡＣ符号化バージョンを含め得る。
【００６３】
第４のコーディングパス中に処理された各変換係数について、ビデオエンコーダ２０は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ２０は、変換係数が正であるのか負であるのかを示すシンタックス要素（すなわち、符号フラグ）を生成し得る。変換係数が有意でない場合、ビデオエンコーダ２０は、その変換係数のための符号フラグを生成しない。符号フラグを生成した後に、ビデオエンコーダ２０は、ビットストリーム中に符号フラグを含め得る。
【００６４】
第５のコーディングパス中に処理された各変換係数について、ビデオエンコーダ２０は、変換係数が有意であるかどうかを判断し得る。変換係数が有意である場合、ビデオエンコーダ２０は、係数の剰余値（すなわち、レベル剰余要素）を生成し得る。ビデオエンコーダ２０は、次いで、剰余値に対応するゴロムライスコードを識別し得る。変換係数のためのゴロムライスコードを識別した後に、ビデオエンコーダ２０は、ビットストリーム中にゴロムライスコードを含め得る。変換係数が有意でない場合、ビデオエンコーダ２０は、その変換係数のためのレベル剰余要素を生成しない。
【００６５】
変換係数の絶対値（すなわち、レベル）が第２の、第３の、第４の、および第５のコーディングパスによって生成されたシンタックス要素から導出され得るので、これらのシンタックス要素は、変換係数ブロックのレベル情報を構成し得る。
【００６６】
ビデオデコーダ３０がビットストリームを受信すると、ビデオデコーダ３０は、ビデオエンコーダ２０によって実行された符号化演算とは概して逆の復号演算を実行し得る。たとえば、ビデオデコーダ３０は、ピクチャの各スライスに対して復号演算を実行し得る。ビデオデコーダ３０がピクチャのスライスに対して復号演算を実行するとき、ビデオデコーダ３０は、スライス中のツリーブロックに対して復号演算を実行し得る。ビデオデコーダ３０がツリーブロックに対する復号演算を完了すると、ビデオデコーダ３０は、ツリーブロックに関連するビデオブロック中のサンプルの復号が済んでいる。ビデオデコーダ３０がスライスの各ツリーブロックのためのサンプルの復号が済んだとき、ビデオデコーダ３０は、スライスのためのサンプルの再構成が済んでいる。
【００６７】
ビデオデコーダ３０がツリーブロックに対して復号演算を実行すると、ビデオデコーダ３０は、ツリーブロック内の各非区分ＣＵに対して復号演算を実行し得る。上記で説明したように、非区分ＣＵは１つまたは複数のＴＵに区分され得る。ＴＵの各々は、１つまたは複数の変換係数ブロックに関連付けられる。本開示では、ＴＵは、ＴＵに関連する変換係数ブロックが１つまたは複数の有意変換係数を含む場合、「有意ＴＵ」である。
【００６８】
ビデオデコーダ３０が、非区分ＣＵに対して復号演算を実行すると、ビデオデコーダ３０は、ＣＵの有意ＴＵに関連する変換係数ブロックについての符号化レベル情報と、ＣＵの有意ＴＵに関連する変換係数ブロックの符号化有意性マップと、ＣＵの有意ＴＵに関連する変換係数ブロックの符号化ブロックベースＬＳＣインジケータとを受信し得る。
【００６９】
ビデオエンコーダ２０は、スキャン順序に従ってＬＳＣの順序位置の後に発生する変換係数の有意性フラグを生成しないので、ビデオデコーダ３０がＬＳＣの順序位置を判断することが可能になるまで、ビデオデコーダ３０は、どの変換係数が有意性フラグを有するかを判断することができないことがある。さらに、ビデオエンコーダ２０は、非有意係数の１よりも大きいレベルフラグ、２よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を生成しないので、ビデオデコーダ３０が有意性マップを判断することが可能になるまで、ビデオデコーダは、どの変換係数が１よりも大きいレベルフラグ、２よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を有するかを判断することができないことがある。
【００７０】
したがって、ビデオデコーダ３０は、最初に、ブロックベースＬＳＣインジケータをＣＡＢＡＣ復号し得る。さらに、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換し得る。ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換した後に、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータに基づいて、変換係数ブロックの有意性マップを復号し得る。ビデオデコーダ３０は、次いで、変換係数ブロックのレベル情報を復号するために有意性マップを使用し得る。
【００７１】
スキャンベースＬＳＣインジケータは、スキャン順序に従ってＬＳＣの順序位置を示す。ＬＳＣの順序位置は、スキャン順序に従って変換係数ブロックをスキャンすることによって形成される一連の変換係数中のＬＳＣの相対位置であり得る。たとえば、変換係数ブロックは、８つの変換係数×８つの変換係数であり得、ブロックベースＬＳＣインジケータは座標（１，１）を指定し得る。この例では、座標（１，１）における変換係数は、変換係数が水平スキャン順序に従って順序付けられるとき、１０番目の変換係数であり得る。したがって、この例では、ビデオデコーダ３０は、１０番目の位置を示すスキャンベースＬＳＣインジケータを生成し得る。
【００７２】
本開示の技法によれば、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに効率的に変換し得る。ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために様々な演算を実行し得る。たとえば、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータによって指定された変換座標からスキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行し得る。別の例では、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータの変換座標をスキャンベースＬＳＣインジケータにマッピングするデータ構造を記憶し得る。この例では、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを生成するために、このデータ構造にアクセスし得る。
【００７３】
ビデオデコーダ３０がブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにどのように変換し得るかのさらに別の例では、ビデオデコーダ３０は、ループ演算を実行することによって、スキャンベースＬＳＣインジケータを生成し得る。この例では、インジケータは、所与の変換係数ブロックの現在の変換係数を示し得る。ループ演算の各反復中に、ビデオデコーダ３０は、現在の変換係数が、ブロックベースＬＳＣインジケータによって指定された座標を有するかどうかを判断し得る。有しない場合、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを増分し、スキャン順序に従って次の変換係数を示すようにインジケータを更新し得る。したがって、この例では、ビデオデコーダ３０は、その座標を有する位置に達するまで、スキャン順序に従って所与の変換係数ブロック中の位置中をスキャンするループ演算を実行し、その座標を有する位置より前の所与の変換係数ブロックの位置ごとにスキャンベースＬＳＣインジケータを増分し得る。この例では、スキャン順序は、所与の変換係数がサブブロックに分割されるサブブロックスキャン順序であり得る。ビデオデコーダ３０は、サブブロックの１つ中の変換係数の各々中をスキャンし、その後、サブブロックの次の１つ中の変換係数の各々中をスキャンし得る。
【００７４】
いくつかの例では、ビデオデコーダ３０は、異なるスキャン順序に基づいて異なる変換演算を使用し得る。言い換えれば、ビデオデコーダ３０は、スキャン順序に基づいて変換演算を選択し、選択された変換演算を使用してブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換し得る。たとえば、ビデオデコーダ３０は、スキャン順序が逆水平スキャン順序であるとき、上記の非反復アルゴリズムを使用し得、ビデオデコーダ３０は、スキャン順序が逆対角スキャン順序であるとき、上記のマッピングデータ構造を使用することができる。
【００７５】
別の例では、ビデオデコーダ３０は、変換演算の組合せを使用し得る。この例では、ビデオデコーダ３０は、変換係数ブロックをサブブロックに分割し得る。ビデオデコーダ３０は、サブブロックの座標と、サブブロック内のブロックベースＬＳＣインジケータの座標とを識別するために非反復アルゴリズムを使用し得る。ビデオデコーダ３０は、次いで、サブブロックのスキャン順序と、サブブロック内の最後の有意変換係数のスキャン順序とを判断するために別のアルゴリズムを使用し得る。このようにして、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを判断し得る。
【００７６】
図５は、本開示の技法を実装するように構成されるビデオエンコーダ２０の例示的な構成を示すブロック図である。図５は、説明のために提供されるものであり、本開示で広く例示し説明する技法を限定するものと見なすべきではない。説明のために、本開示では、ＨＥＶＣコーディングのコンテキストでビデオエンコーダ２０について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【００７７】
図５の例では、ビデオエンコーダ２０は複数の機能構成要素を含む。ビデオエンコーダ２０の機能構成要素は、モード選択モジュール４０と、動き推定モジュール４２と、動き補償モジュール４４と、イントラ予測モジュール４６と、残差生成モジュール５０と、変換モジュール５２と、量子化モジュール５４と、ＣＡＢＡＣモジュール５６と、逆量子化モジュール５８と、逆変換モジュール６０と、再構成モジュール６２と、復号ピクチャバッファ６４とを含む。他の例では、ビデオエンコーダ２０は、より多いか、より少ないか、または異なる機能構成要素を含み得る。たとえば、ビデオエンコーダ２０は、再構成されたビデオからブロッキネスアーティファクトを除去するために再構成モジュール６２の出力をフィルタリングするためのデブロッキングフィルタモジュールを含み得る。さらに、動き推定モジュール４２と動き補償モジュール４４とは、高度に統合され得るが、図５の例では、説明のために別個に表されている。
【００７８】
ビデオエンコーダ２０はビデオデータを受信し得る。様々な例では、ビデオエンコーダ２０は、様々なソースからビデオデータを受信し得る。たとえば、ビデオエンコーダ２０は、ビデオソース１８（図１）または別のソースからビデオデータを受信し得る。ビデオデータは、一連のピクチャを表し得る。ビデオデータを符号化するために、ビデオエンコーダ２０は、各一連のピクチャに対して符号化演算を実行し得る。
【００７９】
一連のピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、一連のピクチャ内の各ピクチャに対して符号化演算を実行し得る。ピクチャに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、ピクチャ中の各スライスに対して符号化演算を実行し得る。スライスに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、スライス中の各ツリーブロックに対して符号化演算を実行し得る。
【００８０】
ツリーブロックに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、ツリーブロックのビデオブロックを１つまたは複数のビデオブロックに区分し得る。ビデオブロックの各々は異なるＣＵに関連付けられ得る。いくつかの例では、ＣＵのビデオブロックのサイズは、８×８ピクセルから、最大６４×６４ピクセル以上のツリーブロックのビデオブロックのサイズまで及び得る。本開示では、「Ｎ×Ｎ（NxN）」および「Ｎ×Ｎ（N by N）」は、垂直寸法および水平寸法に関するビデオブロックのピクセル寸法、たとえば、１６×１６（16x16）ピクセルまたは１６×１６（16 by 16）ピクセルを指すために互換的に使用され得る。概して、１６×１６ブロックは、垂直方向に１６ピクセルを有し（ｙ＝１６）、水平方向に１６ピクセルを有する（ｘ＝１６）。同様に、Ｎ×Ｎブロックは、概して、垂直方向にＮピクセルを有し、水平方向にＮピクセルを有し、ただし、Ｎは非負整数値を表す。変換係数ブロックの次元を示すために同様の表記法が使用され得る。
【００８１】
ツリーブロックに対して符号化演算を実行することの一部として、ビデオエンコーダ２０は、ツリーブロックのための階層４分木データ構造を生成し得る。たとえば、ツリーブロックは、４分木データ構造のルートノードに対応し得る。ビデオエンコーダ２０が、ツリーブロックのビデオブロックを４つのサブブロックに区分する場合、ルートノードは、４分木データ構造中に４つの子ノードを有する。子ノードは、サブブロックに関連するＣＵに対応する。ビデオエンコーダ２０が、サブブロックのうちの１つを４つのサブサブブロックに区分する場合、そのサブブロックに関連するＣＵに対応するノードは４つの子ノードを有し、４つの子ノードは、そのサブサブブロックに関連するＣＵに対応し得る。
【００８２】
４分木データ構造の各ノードは、対応するＣＵについてのシンタックスデータを与え得る。たとえば、４分木中のノードは、ノードに対応するＣＵのビデオブロックが４つのサブブロックに区分（すなわち、分割）されるかどうかを示す分割フラグを含み得る。ＣＵのシンタックス要素は、再帰的に定義され得、ＣＵのビデオブロックがサブＣＵに分割されるかどうかに依存し得る。ビデオブロックが区分されていないＣＵは、４分木データ構造におけるリーフノードに対応し得る。４分木データ構造におけるリーフノードは、「コーディングノード」と呼ばれることがある。ツリーブロックの符号化バージョンを表すデータは、ツリーブロックのための４分木データ構造に基づくデータを含み得る。
【００８３】
ビデオエンコーダ２０は、ツリーブロックの各非区分化ＣＵに対して符号化演算を実行し得る。ビデオエンコーダ２０が非区分化ＣＵに対して符号化演算を実行するとき、ビデオエンコーダ２０は、非区分化ＣＵの符号化バージョンを表すデータを生成する。
【００８４】
ＣＵに対して符号化演算を実行することの一部として、動き推定モジュール４２および動き補償モジュール４４は、ＣＵの各ＰＵに対してインター予測を実行する。言い換えると、動き推定モジュール４２および動き補償モジュール４４は、ＣＵを包含するピクチャ以外の参照ピクチャの復号サンプルに基づいて、ＣＵの各ＰＵについての予測データを生成し得る。インター予測は時間圧縮を与え得る。
【００８５】
ビデオエンコーダ２０およびビデオデコーダ３０は様々なＰＵサイズをサポートし得る。特定のＣＵのサイズが２Ｎ×２Ｎであると仮定すると、ビデオエンコーダ２０およびビデオデコーダ３０は、２Ｎ×２Ｎ、Ｎ×Ｎ、２Ｎ×Ｎ、またはＮ×２ＮのＰＵサイズをサポートし得る。ビデオエンコーダ２０およびビデオデコーダ３０は、２Ｎ×ｎＵ、２Ｎ×ｎＤ、ｎＬ×２Ｎ、およびｎＲ×２ＮというＰＵサイズのための非対称区分もサポートし得る。いくつかの例では、ビデオエンコーダ２０は、ＣＵのビデオブロックの辺と直角を成さない境界に沿ってＣＵのビデオブロックをＣＵのＰＵの間で区分し得る。
【００８６】
動き推定モジュール４２は、ＣＵの各ＰＵに関して動き推定演算を実行し得る。動き推定モジュール４２がＰＵに関して動き推定演算を実行すると、動き推定モジュール４２は、ＰＵの１つまたは複数の動きベクトルを生成する。たとえば、スライスは、Ｉスライス、Ｐスライス、またはＢスライスであり得る。動き推定モジュール４２および動き補償モジュール４４は、ＣＵがＩスライス中にあるのか、Ｐスライス中にあるのか、Ｂスライス中にあるのかに応じて、ＣＵのＰＵに対して異なる演算を実行し得る。Ｉスライス中では、すべてのＰＵ（したがって、ＣＵのすべてのＰＵ）がイントラ予測される。したがって、ＰＵがＩスライス中にある場合、動き推定モジュール４２および動き推定モジュール４４は、ＰＵに対してインター予測を実行しない。
【００８７】
ＰＵがＰスライス中にある場合、ＰＵを包含するピクチャは、「リスト０」と呼ばれる参照ピクチャのリストに関連付けられる。リスト０中の参照ピクチャの各々は、復号順序で後続ピクチャのインター予測のために使用され得るサンプルを包含する。動き推定モジュール４２が、Ｐスライス中のＰＵに関して動き推定演算を実行するとき、動き推定モジュール４２は、ＰＵのための参照サンプルを求めて、リスト０中の参照ピクチャを探索する。ＰＵの参照サンプルは、ＰＵのピクセル値に最もぴったり対応するピクセル値のセットであり得る。動き推定モジュール４２は、参照ピクチャ中のピクセル値のセットがＰＵのピクセル値にどのくらいぴったり対応するかを判断するために、様々なメトリックを使用し得る。たとえば、動き推定モジュール４２は、絶対値差分和（ＳＡＤ：sum of absolute difference）、２乗差分和（ＳＳＤ：sum of square difference）、または他の差分メトリックによって、参照ピクチャ中のピクセル値のセットがＰＵのピクセル値にどのくらいぴったり対応するかを判断し得る。
【００８８】
Ｐスライス中のＣＵのＰＵの参照サンプルを識別した後に、動き推定モジュール４２は、参照サンプルを包含する、リスト０中の参照ピクチャを示す参照インデックスと、ＰＵと参照サンプルとの間の空間変位を示す動きベクトルとを生成し得る。様々な例では、動き推定モジュール４２は、動きベクトルを様々な精度で生成し得る。たとえば、動き推定モジュール４２は、１／４ピクセル精度、１／８ピクセル精度、または他の分数ピクセル精度で動きベクトルを生成し得る。動き推定モジュール４２は、参照インデックスと動きベクトルとをＣＡＢＡＣモジュール５６と動き補償モジュール４４とに出力し得る。動き補償モジュール４４は、参照インデックスとＣＵのＰＵの動きベクトルとを使用して、ＰＵの参照サンプルを識別し、取り出し得る。動き補償モジュール４４は次いで、ＰＵの参照サンプルのピクセル値を使用して、ＣＵについての予測データを生成し得る。
【００８９】
ＰＵがＢスライス中にある場合、ＰＵを包含するピクチャは、「リスト０」および「リスト１」と呼ばれる参照ピクチャの２つのリストに関連付けられ得る。リスト０中の参照ピクチャの各々は、復号順序で後続ピクチャのインター予測のために使用され得るサンプルを包含する。リスト１中の参照ピクチャは、復号順序ではピクチャの前だが、プレゼンテーション順序ではピクチャの後に発生し得る。いくつかの例では、Ｂスライスを包含するピクチャは、リスト０とリスト１の組合せである、リストの組合せに関連付けられ得る。
【００９０】
さらに、ＣＵがＢスライス中にある場合、動き推定モジュール４２は、ＣＵのＰＵのための単方向予測または双方向予測を実行し得る。動き推定モジュール４２が、ＰＵのための単方向予測を実行するとき、動き推定モジュール４２は、ＰＵのための参照サンプルを求めてリスト０またはリスト１の参照ピクチャを探索し得る。動き推定モジュール４２は、次いで、参照サンプルを包含する、リスト０またはリスト１中の参照ピクチャを示す参照インデックスと、ＰＵと参照サンプルとの間の空間変位を示す動きベクトルとを生成し得る。動き推定モジュール４２は、参照インデックスとＣＵのＰＵの動きベクトルとをＣＡＢＡＣモジュール５６と動き補償モジュール４４とに出力し得る。動き補償モジュール４４は、参照インデックスとＣＵのＰＵの動きベクトルとを使用して、ＰＵの参照サンプルを識別し、取り出し得る。動き補償モジュール４４は、次いで、ＰＵの参照サンプルのピクセル値を使用して、ＣＵのＰＵのための予測ビデオブロックを生成し得る。
【００９１】
動き推定モジュール４２が、ＰＵのための双方向予測を実行するとき、動き推定モジュール４２は、ＰＵのための参照サンプルを求めてリスト０中の参照ピクチャを探索し得、また、ＰＵのための別の参照サンプルを求めてリスト１中の参照ピクチャを探索し得る。動き推定モジュール４２は、次いで、参照サンプルを示す参照インデックスと、参照サンプルとＰＵとの間の空間変位を示す動きベクトルとを生成し得る。動き推定モジュール４２は、参照インデックスと動きベクトルとをＣＡＢＡＣモジュール５６と動き補償モジュール４４とに出力し得る。動き補償モジュール４４は、参照インデックスと動きベクトルとを使用して、ＰＵの参照サンプルを識別し、取り出し得る。動き補償モジュール４４は、次いで、ＣＵのＰＵの参照サンプル中のピクセル値から、ＣＵのＰＵの予測ビデオブロックのピクセル値を補間し得る。
【００９２】
ＣＵに対して符号化演算を実行することの一部として、イントラ予測モジュール４６は、ＣＵのＰＵに対してイントラ予測を実行し得る。言い換えれば、イントラ予測モジュール４６は、ＣＵと同じスライス中の復号ピクセル値に基づいて、ＣＵのＰＵについての予測データを生成し得る。イントラ予測は空間圧縮を与え得る。
【００９３】
ＰＵに対してイントラ予測を実行するために、イントラ予測モジュール４６は、複数のイントラ予測モードを使用して、ＰＵについての予測データの複数のセットを生成し得る。イントラ予測モジュール４６が、イントラ予測モードを使用して、ＰＵについての予測データのセットを生成するとき、イントラ予測モジュール４６は、イントラ予測モードに関連する方向および／または勾配で、ＰＵのビデオブロックを超えて隣接ＰＵからピクセル値を展開し得る。ＰＵ、ＣＵ、およびツリーブロックのための左から右、上から下の符号化順序を仮定すると、隣接ＰＵは、ＰＵの上、右上、左上、または左にあり得る。イントラ予測モジュール４６は、ＰＵのサイズに応じて、様々な数のイントラ予測モード、たとえば、３３個の方向性イントラ予測モードを使用し得る。
【００９４】
イントラ予測モジュール４６は、ＰＵについての予測データのセットのうちの１つを選択し得る。様々な例では、イントラ予測モジュール４６は、ＰＵについての予測データのセットを様々な方法で選択し得る。たとえば、イントラ予測モジュール４６は、予測データのセットのためのひずみおよびビットレートの比較に基づき、ひずみレートが最も低い予測データのセットを選択することによって、ＰＵについての予測データのセットを選択し得る。
【００９５】
モード選択ユニット４０は、ＣＵのＰＵについての、動き補償モジュール４４によって生成された予測データのセット、またはＣＵのＰＵについての、イントラ予測ユニット４６によって生成された予測データのセットの中から、ＣＵのＰＵについての予測データを選択し得る。いくつかの例では、モード選択ユニット４０は、予測データのセットのエラー（すなわち、ひずみ）とビットレートとに基づいて、ＣＵのＰＵについての予測データを選択する。
【００９６】
モード選択ユニット４０がＣＵのＰＵについての予測データを選択した後、残差生成モジュール５０は、ＣＵの元のビデオブロックのピクセル値から、ＣＵのＰＵの選択された予測データの予測ビデオブロックのピクセル値を減算することによって、ＣＵについての残差データを生成し得る。ＣＵの残差データは、ＣＵ中のビデオブロックの異なるピクセル成分に対応する２Ｄ残差ブロックを含み得る。たとえば、残差データは、ＣＵの予測ビデオブロック中のルミナンス構成要素と、ＣＵの元のビデオブロック中のピクセルのルミナンス構成要素との間の差に対応する残差ビデオブロックを含み得る。さらに、ＣＵの残差データは、ＣＵのＰＵの予測ビデオブロック中のピクセルのクロミナンス構成要素と、ＣＵの元のビデオブロック中のピクセルのクロミナンス構成要素との間の差に対応する残差ビデオブロックを含み得る。
【００９７】
上記で説明したように、ＣＵは１つまたは複数のＴＵを有し得る。ＣＵの各ＴＵは、ＣＵの残差データ内の異なるビデオブロックに対応し得る。ＣＵのＴＵに関連するビデオブロックのサイズは、ＣＵのＰＵのビデオブロックのサイズに基づくことも、基づかないこともある。いくつかの例では、ＣＵの残差データは、「残差４分木」（ＲＱＴ：residual quad tree）として知られる４分木構造を使用してより小さいビデオブロックに再分割され得る。ＴＵは、ＲＱＴのリーフノードに対応し得る。
【００９８】
変換モジュール５２は、ＴＵに対応する残差ビデオブロックに変換を適用することによって、ＣＵのＴＵごとに変換係数ブロックを生成し得る。変換係数ブロックの各々は、変換係数の２Ｄ行列であり得る。様々な例では、変換モジュール５２は、ＴＵに対応する残差ビデオブロックに様々な変換を適用し得る。たとえば、変換モジュールは、離散コサイン変換（ＤＣＴ：discrete cosine transform）、方向変換、または概念的に同様の変換を適用し得る。変換モジュール５２が、ＴＵのための変換係数ブロックを生成した後、量子化モジュール５４は、変換係数ブロック中の変換係数を量子化し得る。
【００９９】
ＣＡＢＡＣモジュール５６は、量子化モジュール５４から変換係数ブロックを受信し得る。ＣＡＢＡＣモジュール５６が変換係数ブロックを受信すると、ＣＡＢＡＣモジュール５６は、変換係数ブロックのための有意性マップとブロックベースＬＳＣインジケータとを生成し得る。ブロックベースＬＳＣインジケータは、変換係数ブロックの最後の有意変換係数の変換係数ブロック中の座標を示し得る。ＣＡＢＡＣモジュール５６はまた、変換係数ブロックについてのレベル情報を生成し得る。上記で説明したように、変換係数ブロックについてのレベル情報は、一連の１よりも大きいレベルフラグと、一連の２よりも大きいレベルフラグと、一連の符号フラグと、一連のレベル残余要素とを含み得る。
【０１００】
ＣＡＢＡＣモジュール５６は、有意性マップと、ブロックベースＬＳＣインジケータと、１よりも大きいレベルフラグと、２よりも大きいレベルフラグとに対してＣＡＢＡＣ符号化演算を実行し得る。さらに、ＣＡＢＡＣモジュール５６は、動きベクトルまたは動きベクトル差分情報などの他のシンタックス要素と、ビデオデコーダ３０においてビデオデータを復号する際に有用な様々な他のシンタックス要素のいずれかとに対してＣＡＢＡＣ符号化演算を実行し得る。
【０１０１】
逆量子化モジュール５８および逆変換モジュール６０は、変換係数ブロックに、それぞれ、逆量子化および逆変換を適用して、変換係数ブロックから残差ビデオブロックを再構成し得る。再構成モジュール６２は、動き補償モジュール４４またはイントラ予測モジュール４６によって生成された１つまたは複数の予測ビデオブロックのピクセル値に、再構成された残差ビデオブロックを追加して、復号ピクチャバッファ６４に記憶するための再構成ビデオブロックを生成し得る。動き推定モジュール４２および動き補償モジュール４４は、再構成されたビデオブロックを包含する参照ピクチャを使用して、後続ピクチャのＣＵに対してイントラ予測またはインター予測を実行し得る。
【０１０２】
図６は、ビデオデコーダ３０の例示的構成を示すブロック図である。図６は、説明のために提供されるものであり、本開示で広く例示し説明する技法を限定するものではない。説明のために、本開示では、ＨＥＶＣコーディングのコンテキストでビデオデコーダ３０について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
【０１０３】
図６の例では、ビデオデコーダ３０は、複数の機能構成要素を包含する。ビデオデコーダ３０の機能構成要素は、パースモジュール７０と、動き補償モジュール７２と、イントラ予測モジュール７４と、逆量子化モジュール７６と、逆変換モジュール７８と、再構成モジュール８０と、復号ピクチャバッファ８２とを包含する。いくつかの例では、ビデオデコーダ３０は、図５のビデオエンコーダ２０に関して説明した符号化パスとは概して逆の復号パスを実行し得る。他の例では、ビデオデコーダ３０は、より多いか、より少ないか、または異なる機能構成要素を含み得る。たとえば、ビデオデコーダ３０は、再構成されたビデオからブロッキネスアーティファクトを除去するために再構成モジュール８０の出力をフィルタリングするためのデブロッキングフィルタを含み得る。
【０１０４】
ビデオデコーダ３０は、符号化ビデオデータを備えるビットストリームを受信し得る。ビットストリームは複数のシンタックス要素を含み得る。ビデオデコーダ３０がビットストリームを受信すると、パースモジュール７０は、そのビットストリームに対してパース演算を実行し得る。ビットストリームに対してパース演算を実行した結果、パースモジュール７０は、ビットストリームからシンタックス要素を抽出し得る。パース演算を実行することの一部として、パースモジュール７０は、ビットストリーム中の様々なＣＡＢＡＣ符号化シンタックス要素をＣＡＢＡＣ復号し得る。動き補償モジュール７２と、イントラ予測モジュール７４と、逆量子化モジュール７６と、逆変換モジュール７８とは、ビットストリームから抽出されたシンタックス要素に基づいて復号ビデオデータを生成する再構成演算を実行し得る。
【０１０５】
ビットストリームは、変換係数ブロックのブロックベースＬＳＣインジケータと、変換係数ブロックの有意性マップと、変換係数ブロックについてのレベル情報とを表すデータを含み得る。パース演算を実行することの一部として、パースモジュール７０はブロックベースＬＳＣインジケータをＣＡＢＡＣ復号し得る。パースモジュール７０は、次いで、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換し得る。スキャン順序は、符号化ビットストリーム中でシグナリングされ得るか、あるいは１つまたは複数のシンタックス要素またはパラメータからパースモジュール７０によって推論され得る。
【０１０６】
ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換した後に、パースモジュール７０は、ビットストリームから有意性マップをパースするためにスキャンベースＬＳＣインジケータを使用し得る。たとえば、パースモジュール７０は、スキャンベースＬＳＣインジケータに基づいて、変換係数ブロックの有意性マップが変換係数の有意性フラグを含むかどうかを判断し得る。さらに、いくつかの例では、パースモジュール７０は、スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択し得る。パースモジュール７０は、有意性マップを復号するＣＡＢＡＣ復号演算中に、選択されたコンテキストモデルを使用し得る。パースモジュール７０は、ビットストリームから変換係数ブロックのレベル情報をパースするために有意性マップを使用し得る。
【０１０７】
ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに効率的な方法で変換することが望ましいことがある。本開示の技法によれば、パースモジュール７０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために様々な演算を実行し得る。たとえば、パースモジュール７０は、ブロックベースＬＳＣインジケータによって指定された座標からスキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行し得る。以下で詳細に説明する図９および図１０は、ブロックベースＬＳＣインジケータによって指定された座標からスキャンベースＬＳＣインジケータを導出し得る例示的な非反復アルゴリズムのフローチャートである。別の例では、パースモジュール７０は、座標をスキャンベースＬＳＣインジケータにマッピングするデータ構造を記憶し得る。この例では、パースモジュール７０は、スキャンベースＬＳＣインジケータを生成するために、このデータ構造にアクセスし得る。以下で詳細に説明する図１１は、ビデオデコーダ３０が、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスすることに少なくとも部分的によって、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する例示的な動作を示す。さらに別の例では、パースモジュール７０は、ブロックベースＬＳＣインジケータによって指定された座標を有する変換係数に達するまで、正スキャン順序に従って変換係数ブロック中の位置中をスキャンするループ動作を実行することによって、スキャンベースＬＳＣインジケータを生成し得る。以下で詳細に説明する図１２は、ビデオデコーダ３０が、そのようなループ動作を実行することによってブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する例示的な反復動作を示す。
【０１０８】
いくつかの例では、パースモジュール７０は、異なるスキャン順序に基づいて異なる変換演算を使用し得る。たとえば、パースモジュール７０は、スキャン順序が垂直スキャン順序であるとき、上記の非反復アルゴリズムを使用し得、パースモジュール７０は、スキャン順序がジグザグスキャン順序であるとき、上記のマッピングデータ構造を使用し得る。
【０１０９】
パースモジュール７０が変換係数ブロックを復号した後、逆量子化モジュール７６は、変換係数ブロックを逆量子化（inverse quantize）、すなわち、逆量子化（de-quantize）し得る。逆量子化モジュール７６は、ＨＥＶＣのために提案された、またはＨ．２６４復号規格によって定義された逆量子化プロセスと同様の方法で変換係数ブロックを逆量子化し得る。逆量子化モジュール７６は、量子化の程度を判断し、同様に、逆量子化モジュール７６が適用すべき逆量子化の程度を判断するために、変換係数ブロックのＣＵのためにビデオエンコーダ２０によって計算された量子化パラメータＱＰＹを使用し得る。
【０１１０】
逆量子化モジュール７６が変換係数ブロックを逆量子化した後、逆変換モジュール７８は、変換係数ブロックに関連するＴＵのための残差ビデオブロックを生成し得る。逆変換モジュール７８は、変換係数ブロックに逆変換を適用することに少なくとも部分的によって、ＴＵのための残差ビデオブロックを生成し得る。たとえば、逆変換モジュール７８は、変換係数ブロックに、逆ＤＣＴ、逆整数変換、逆カルーネンレーベ変換（ＫＬＴ：Karhunen-Loeve transform）、逆回転変換、逆方向変換、または別の逆変換を適用し得る。いくつかの例では、逆変換モジュール７８は、ビデオエンコーダ２０からのシグナリングに基づいて、変換係数ブロックに適用すべき逆変換を判断し得る。そのような例では、逆変換モジュール７８は、変換係数ブロックに関連するツリーブロックのための４分木のルートノードにおいてシグナリングされた変換に基づいて逆変換を判断し得る。他の例では、逆変換モジュール７８は、ブロックサイズ、コーディングモードなど、１つまたは複数のコーディング特性から逆変換を推論し得る。いくつかの例では、逆変換モジュール７８はカスケード逆変換を適用し得る。
【０１１１】
動き補償モジュール７２は、動き補償を実行して、ＣＵのＰＵについての予測データを生成し得る。いくつかの例では、動き補償モジュール７２は、補間フィルタに基づいて補間を実行することによって、ＰＵについての予測データを改善し得る。サブピクセル精度での動き補償のために使用されるべき補間フィルタの識別子は、シンタックス要素中に含まれ得る。動き補償モジュール７２は、ＰＵの予測データの生成中にビデオエンコーダ２０によって使用される同じ補間フィルタを使用して、参照ブロックのサブ整数サンプルの補間値を計算し得る。動き補償モジュール７２は、受信したシンタックス情報に従って、ビデオエンコーダ２０によって使用された補間フィルタを判断し、その補間フィルタを使用して予測データを生成し得る。
【０１１２】
動き補償モジュール７２およびイントラ予測モジュール７４は、ＨＥＶＣの例では、（たとえば、４分木によって与えられる）シンタックス情報の一部を使用して、符号化ビデオシーケンスの（１つまたは複数の）フレームを符号化するために使用されるツリーブロックのサイズと、符号化ビデオシーケンスのフレームの各ＣＵのビデオブロックがどのように分割されるか（および、同様に、サブブロックがどのように分割されるか）を記述する分割情報と、各ＰＵがどのように符号化されるかを示すモード（たとえば、イントラ予測またはインター予測、およびイントラ予測の場合はイントラ予測符号化モード）と、各インター予測ＣＵについての１つまたは複数の参照フレーム（および／またはそれらの参照フレームの識別子を包含する参照リスト）と、符号化ビデオシーケンスを復号するための他の情報とを判断し得る。
【０１１３】
再構成モジュール８０は、ＣＵの残差ビデオブロックを、動き補償モジュール７２またはイントラ予測モジュール７４によって生成されたＣＵのＰＵの対応する予測ビデオブロックと組み合わせて、復号ビデオブロックを形成する。いくつかの例では、ビデオデコーダ３０は、復号ビデオからブロッキネスアーティファクトを取り除くために復号ビデオブロックをフィルタリングするためにデブロッキングフィルタを適用し得る。復号ピクチャバッファ８２は復号ビデオブロックを記憶する。復号ピクチャバッファ８２は、その後の動き補償のための参照ピクチャを与え得、また、図１のディスプレイデバイス３２などのディスプレイデバイス上での提示のためのピクチャを記憶し得る。
【０１１４】
図７は、ビデオエンコーダ２０によって実行される例示的な動作１００を示すフローチャートである。ＣＡＢＡＣモジュール５６が動作１００を開始した後、ビデオエンコーダ２０は、スキャン順序に従って変換係数ブロックのＬＳＣを識別する（１０２）。ビデオエンコーダ２０が変換係数ブロックのＬＳＣを識別した後、ビデオエンコーダ２０は、変換係数ブロックの識別されたＬＳＣの座標を示すブロックベースＬＳＣインジケータを生成する（１０４）。
【０１１５】
ブロックベースＬＳＣインジケータを生成した後に、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータに対してＣＡＢＡＣ符号化演算を実行する（１０６）。様々な例では、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータに対してＣＡＢＡＣ符号化演算を様々な方法で実行し得る。たとえば、いくつかの例では、ビデオエンコーダ２０は、最初に、ブロックベースＬＳＣインジケータの各座標をバイナリコードに変換し得る。言い換えれば、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータの座標を「２値化」し得る。座標を２値化した後に、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータのｙ座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。いくつかの事例では、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータのｘ座標に基づいて、ｙ座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。ビデオエンコーダ２０は、ｙ座標を表すバイナリコードの１つまたは複数のビンを符号化するとき、選択されたコンテキストモデルを使用し得る。同様に、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータのｙ座標に基づいて、ブロックベースＬＳＣインジケータのｘ座標を表すバイナリコードを符号化するためのコンテキストモデルを選択し得る。ビデオエンコーダ２０は、ｘ座標を表すバイナリコードの１つまたは複数のビンを符号化するとき、選択されたコンテキストモデルを使用し得る。
【０１１６】
ブロックベースＬＳＣインジケータのｘ座標とｙ座標との間に統計的関係があり得る。たとえば、有意変換係数は、変換係数ブロックのＤＣ変換係数の周りに集まる傾向がある。したがって、ｘ座標がＤＣ変換係数に比較的近接している場合、ｙ座標もＤＣ変換係数に比較的近接している可能性があり、その逆も同様である。ｘ座標に基づいてｙ座標のためのコンテキストモデルを選択することによって、ビデオエンコーダ２０は、ｙ座標のためのコンテキストモデルをより正確に選択するためにこの統計的関係を活用することが可能であり得る。同様に、ｙ座標に基づいてｘ座標のためのコンテキストモデルを選択することによって、ビデオエンコーダ２０は、ｘ座標のためのコンテキストモデルをより正確に選択するためにこの統計的関係を活用することが可能であり得る。
【０１１７】
いくつかの例では、ビデオエンコーダ２０は、ｘ座標およびｙ座標のためのシンボルのエントロピー符号化演算をインターリーブし得る。たとえば、ビデオエンコーダ２０は、最初に、ｘ座標の第１のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ２０がｘ座標を単項数として表すと仮定すると、ｘ座標の第１のシンボルは、ｘ座標が０である場合は０になり、そうでない場合は１になる。ｘ座標の第１のシンボルを符号化した後に、ビデオエンコーダ２０は、ｙ座標の第１のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ２０は、ｘ座標の第１のシンボルの値に応じて、ｙ座標の第１のシンボルを符号化するために異なるコンテキストを使用し得る。次いで、ｘ座標が０よりも大きい場合、ビデオエンコーダ２０は、ｘ座標の第２のシンボルに対してエントロピー符号化演算を実行し得る。ビデオエンコーダ２０は、ｙ座標の第１のシンボルの値に応じて、ｘ座標の第２のシンボルを符号化するために異なるコンテキストを使用し得る。ビデオエンコーダ２０がｘ座標およびｙ座標のシンボルの各々を符号化するまで、ビデオエンコーダ２０は、ｘ座標およびｙ座標のシンボルの符号化を継続し得る。
【０１１８】
いくつかの例では、ビデオエンコーダ２０は、スキャン順序を使用して変換係数ブロックから別の２Ｄ変換係数ブロックに変換係数をマッピングし得る。たとえば、他の２Ｄ変換係数ブロックは、８つの位置の幅であり得る。この例では、ビデオエンコーダ２０は、スキャン順序によって判断された変換係数ブロックの第１の８つの変換係数を他の２Ｄ変換係数ブロックの第１の行にマッピングし、スキャン順序によって判断された変換係数ブロックの第２の８つの変換係数を他の２Ｄ変換係数ブロックの第２の行にマッピングし、以下同様に行い得る。この例では、ビデオエンコーダ２０は、次いで、スキャン順序に従って他の２Ｄ変換係数ブロックの最後の有意変換係数を識別し、他の２Ｄブロックの最後の有意変換係数を示すブロックベースＬＳＣインジケータを生成し得る。この例では、より低い行番号と変換係数が有意である確率との間に統計的関係が存在し得る。たとえば、変換係数が有意である確率は、高い行番号でよりも、低い行番号でより高くなり得る。ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータに対してエントロピー符号化演算を実行するとき、この統計的関係を活用し得る。たとえば、ビデオエンコーダ２０は、最初に、ｙ座標に対してエントロピー符号化演算を実行し、次いで、ｘ座標に対してエントロピー符号化演算を実行し得る。ビデオエンコーダ２０がｘ座標に対してエントロピー符号化演算を実行するとき、ビデオエンコーダ２０は、ｙ座標に基づいてコンテキストモデルを選択し得る。
【０１１９】
さらに、ビデオエンコーダ２０は、変換係数ブロックのための有意性マップを生成する（１０８）。いくつかの例では、ビデオエンコーダ２０は、有意性マップを生成し、並行して変換係数ブロックのＬＳＣを識別し得る。
【０１２０】
様々な例では、ビデオエンコーダ２０は、様々な方法で有意性マップを生成し得る。たとえば、ビデオエンコーダ２０は、逆スキャン順序に従って変換係数の各々を処理するコーディングパスを実行し得る。逆スキャン順序は、ＬＳＣを識別するために使用されたスキャン順序の逆であり得る。他の例では、ビデオエンコーダ２０は、ＬＳＣを識別するためにビデオエンコーダ２０が使用するのと同じスキャン順序を使用して、変換係数ブロックのための有意性マップを生成し得る。コーディングパス中に処理された各変換係数について、スキャン順序による変換係数の順序位置がスキャン順序によるＬＳＣの順序位置の前にある場合、ビデオエンコーダ２０は、変換係数の有意性フラグを生成し、ＣＡＢＡＣ符号化し得る。
【０１２１】
別の例では、ビデオエンコーダ２０は、有意性マップとして働く２Ｄブロックを生成し得る。この例では、ビデオエンコーダ２０は変換係数ブロック中をスキャンし得る。ビデオエンコーダ２０が変換係数ブロック中をスキャンするとき、ビデオエンコーダ２０は、変換係数ブロックの対応する変換係数が有意であるのかまたは有意でないのかを２Ｄ有意性マップ中で示し得る。
【０１２２】
さらに、ビデオエンコーダ２０は、有意性マップに対してＣＡＢＡＣ符号化演算を実行する（１１０）。いくつかの例では、ビデオエンコーダ２０は、ステップ１０８および１１０をインターリーブし得る。たとえば、ビデオエンコーダ２０は、第１の変換係数の有意性フラグを生成し得る。ビデオエンコーダ２０は、次いで、第１の変換係数の有意性フラグに対してＣＡＢＡＣ符号化演算を実行し得る。第１の変換係数の有意性フラグに対してＣＡＢＡＣ符号化演算を実行した後に、ビデオエンコーダ２０は、第２の変換係数の有意性フラグを生成し、次いで、第２の変換係数の有意性フラグに対してＣＡＢＡＣ符号化演算を実行し、以下同様に行い得る。
【０１２３】
ビデオエンコーダ２０は、有意性マップに対してＣＡＢＡＣ符号化演算を様々な方法で実行し得る。たとえば、ビデオエンコーダ２０は、変換係数ブロックのＬＳＣに基づいてコンテキストモデルを選択し得る。ＬＳＣの位置と有意性マップの（逆スキャン順序で）次の有意性フラグの値との間に統計的関係があり得る。たとえば、ビデオエンコーダ２０が逆スキャン順序を使用して有意性マップを生成し、変換係数ブロックのＬＳＣが変換係数ブロックのＤＣ変換係数から比較的離れている場合、次の有意性フラグが１である確率は、変換係数ブロックのＬＳＣが変換係数ブロックのＤＣ変換係数に比較的近い場合よりも比較的大きい。変換係数ブロックのＬＳＣに基づいてコンテキストモデルを選択することによって、ビデオエンコーダ２０は、有意性マップを符号化するためのコンテキストモデルをより正確に選択するために、この統計的関係を活用することが可能であり得る。有意性マップのためのコンテキストモデルを選択した後に、ビデオエンコーダ２０は、有意性マップの１つまたは複数の有意性フラグをＣＡＢＡＣ符号化するためにコンテキストモデルを使用し得る。有意性マップに対するＣＡＢＡＣ符号化演算中に、ビデオエンコーダ２０は、有意性マップの後続の有意性フラグをＣＡＢＡＣ符号化するために１つまたは複数の他のコンテキストモデルを使用し得る。
【０１２４】
他の例では、ビデオエンコーダ２０は、ＬＳＣと有意性マップとの間の統計的関係を他の方法で活用し得る。たとえば、ビデオエンコーダ２０は、ＬＳＣの順序位置が所与のしきい値よりも大きい場合は、コンテキストの１つのセットを使用して有意性マップをＣＡＢＡＣ符号化し、ＬＳＣの順序位置が所与のしきい値よりも大くない場合は、コンテキストの別のセットを使用して有意性マップを符号化し得る。異なるコンテキストをこのようにして使用することはコーディング効率を改善し得る。
【０１２５】
別の例では、ビデオエンコーダ２０は、変換係数をグループ化することによってＬＳＣと有意性マップとの間の統計的関係を活用し得る。たとえば、この例では、ビデオエンコーダ２０は、３つの変換係数を一緒にグループ化し、得られたグループを単一の変換係数として符号化し得る。したがって、ビデオエンコーダ２０は、一度に３つの変換係数を符号化し得る。グループ中の３つすべての変換係数が０である場合、ビデオエンコーダ２０は、３つの変換係数を０として符号化し得る。そうでない場合、ビデオエンコーダ２０は、１フラグと、３つの対応する変換係数のうちのどれが有意であるかを示すフラグとを生成し得る。
【０１２６】
いくつかの事例では、変換係数ブロックの有意変換係数のすべては、変換係数ブロックの左上隅の小さい領域内に位置し得る。たとえば、変換係数ブロックの有意変換係数のすべては、変換係数ブロックの左上隅の４ｘ４領域内に位置し得る。そのような場合、ブロックベースＬＳＣインジケータを使用するよりもスキャンベースＬＳＣインジケータを使用したほうが変換係数ブロックのＬＳＣを示すために必要なビットが少なくて済み得る。したがって、いくつかの例では、有意変換係数のすべてが領域内にあるとき、ビデオエンコーダ２０は、ブロックベースＬＳＣインジケータの代わりにスキャンベースＬＳＣインジケータを生成し得る。そのような例では、変換係数ブロックが領域外に１つまたは複数の有意変換係数を含む場合、ビデオエンコーダ２０はブロックベースＬＳＣインジケータを生成し得る。さらに、いくつかのそのような例では、ビデオエンコーダ２０は、ＬＳＣがブロックベースＬＳＣインジケータを使用して示されるのか、スキャンベースＬＳＣインジケータを使用して示されるのかを示すために、ビットストリーム中にフラグを含め得る。
【０１２７】
さらに、ビデオエンコーダ２０は、変換係数ブロック中の変換係数についてのレベル情報を生成する（１１２）。上記で説明したように、変換係数についてのレベル情報は、１よりも大きいレベルフラグと、２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とを含み得る。
【０１２８】
さらに、ビデオエンコーダ２０は、変換係数についてのレベル情報のうちの少なくともいくつかに対してＣＡＢＡＣ符号化演算を実行する（１１４）。いくつかの例では、ビデオエンコーダ２０は、ステップ１１２および１１４をインターリーブし得る。たとえば、ビデオエンコーダ２０は、１よりも大きいレベルフラグと、２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対して別個のコーディングパスを実行し得る。１よりも大きいレベルフラグのためのコーディングパス中に、ビデオエンコーダ２０は、第１の変換係数の１よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化し、次の変換係数の１よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化し、以下同様に行い得る。同様に、２よりも大きいレベルフラグのためのコーディングパス中に、ビデオエンコーダ２０は、第１の変換係数の２よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化し、次の変換係数の２よりも大きいレベルフラグを生成し、ＣＡＢＡＣ符号化し、以下同様に行い得る。符号フラグのためのコーディングパス中に、ビデオエンコーダ２０は、第１の変換係数の符号フラグを生成し、次の変換係数の符号フラグを生成し、以下同様に行い得る。この例では、ビデオエンコーダ２０は符号フラグをＣＡＢＡＣ符号化しない。レベル残余要素のためのコーディングパス中に、ビデオエンコーダ２０は、レベル残余要素を生成し、第１の変換係数のための対応するゴロムライスコードを識別し、レベル残余要素を生成し、次の変換係数のための対応するゴロムライスコードを識別し、以下同様に行い得る。この例では、変換係数フラグが有意でない場合、ビデオエンコーダ２０は、その変換係数のための１よりも大きいレベルフラグ、２よりも大きいレベルフラグ、符号フラグ、またはレベル残余要素を生成しないことがある。
【０１２９】
いくつかの例では、ビデオエンコーダ２０が変換係数のレベル情報を２値化するとき、２値化レベル情報の第１のビンは、変換係数が有意であるかどうかを示し得る。したがって、そのような例では、ステップ１０８において有意性マップを生成することは、ステップ１１２においてレベル情報を生成することの一部であり得、ステップ１１０において有意性マップをＣＡＢＡＣ符号化することは、ステップ１１４においてレベル情報をＣＡＢＡＣ符号化することの一部であり得る。
【０１３０】
図８は、変換係数ブロックを復号する例示的な動作１３０を示すフローチャートである。ビデオデコーダ３０が動作１３０を開始した後、ビデオデコーダ３０は、ＴＵに関連する変換係数ブロックのブロックベースＬＳＣインジケータと、変換係数ブロックのための有意性マップと、変換係数ブロックについてのレベル情報とを表すデータを備えるビットストリームを受信する（１３２）。ビットストリームは他の符号化ビデオデータを備え得る。
【０１３１】
ブロックベースＬＳＣインジケータを表すデータを受信した後に、ビデオデコーダ３０は、符号化ブロックベースＬＳＣインジケータを復号するためにＣＡＢＡＣ復号演算を実行する（１３４）。したがって、ＣＡＢＡＣ復号演算を実行することによって、ビデオデコーダ３０は、符号化ビデオデータのビットストリームから、変換係数のブロックのＬＳＣのブロックベースＬＳＣインジケータを受信し得る。
【０１３２】
ビデオデコーダ３０が、ＣＡＢＡＣ復号演算を実行してブロックベースＬＳＣインジケータを復号した後、ビデオデコーダ３０は、変換演算を選択する（１３５）。いくつかの例では、ビデオデコーダ３０は、スキャン順序に基づいて変換演算を選択し得る。ビデオデコーダ３０は、次いで、選択された変換演算を使用して、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する（１３６）。様々な例では、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに様々な方法で変換し得る。たとえば、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために、図９〜図１２に示す例示的な動作を使用し得る。他の例では、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために、図９〜図１２の例示的な動作のうちの１つまたは複数の組合せを実行し得る。さらに、さらに他の例では、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータを復号した後に変換演算を選択しない。むしろ、いくつかのそのような例では、ビデオデコーダ３０は単に、１つの特定の変換演算を実行するように構成され得る。
【０１３３】
その後、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを使用して、変換係数ブロックの有意性マップを復号する（１３８）。ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを使用して、有意性マップを様々な方法で復号し得る。
【０１３４】
たとえば、ビデオエンコーダ２０は、コーディング順序でＬＳＣの後に発生する変換係数の有意性フラグを符号化しないことがある。したがって、有意性マップ中の有意性フラグの数は、変換係数ブロックの間で異なることがある。有意性フラグの数が異なることがあるので、ビデオデコーダ３０は、変換係数ブロックのサイズに基づいて、何個の有意性フラグが変換係数ブロックの有意性マップ中にあるかを判断することができないことがある。したがって、ビデオデコーダ３０が有意性マップを復号するとき、ビデオデコーダ３０は、ビットストリームからの有意性マップの有意性フラグのすべてをビデオデコーダ３０がパースしたかどうかを判断することができる必要があり得る。したがって、ビットストリームからパースされた有意性フラグの数がＬＳＣの順序位置（すなわち、スキャンベースＬＳＣインジケータによって示された位置）に等しくなるまで、ビデオデコーダ３０は、ビットストリームからの有意性フラグのパースを継続し得る。このようにして、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを使用して、有意性マップが変換係数ブロックの変換係数の有意性フラグを含むかどうかを判断し得る。
【０１３５】
別の例では、スキャンベースＬＳＣインジケータは、復号されるべき有意変換係数を示すビンの数を示し得る。さらに、上記で説明したように、スキャン順序でＬＳＣより前に発生する変換係数の数と、有意性マップのビンが１または０である確率との間に統計的関係があり得る。スキャンベースＬＳＣインジケータは、スキャン順序でＬＳＣより前に発生する変換係数の数を示す。したがって、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータに基づいて、複数の利用可能なコンテキストモデルの中からコンテキストモデルを選択し得る。ビデオデコーダ３０は、次いで、有意性マップの１つまたは複数のビンを復号するために選択されたコンテキストモデルを使用し得る。有意性マップに対するＣＡＢＡＣ復号演算中に、ビデオデコーダ３０は、１つまたは複数の他のコンテキストモデルに切り替え得る。
【０１３６】
いくつかの例では、変換係数ブロックは複数のサブブロックを含み得る。ビデオデコーダ３０は、スキャンベースＬＳＣインジケータに基づいて、複数のサブブロックの中から最後の有意サブブロックを識別し、最後の有意サブブロックはＬＳＣを含み得る。さらに、ビデオデコーダ３０は、最後の有意サブブロックと、サブブロックのうち、最後の有意サブブロックで開始する第１の逆スキャン順序に従って最後の有意サブブロックの前に発生するサブブロックとを処理する第１のコーディングパスを実行し得る。第１のコーディングパス中に処理されたサブブロックの各々について、ビデオデコーダ３０は、第２の逆スキャン順序に従ってサブブロック中の変換係数を処理する第２のコーディングパスを実行し得る。第２の逆スキャン順序は、第１の逆スキャン順序と同じであるか、またはそれとは異なり得る。第２のコーディングパス中に処理された各変換係数について、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータに基づいて、有意性マップが変換係数の有意性フラグを含むかどうかを判断し得る。
【０１３７】
ビデオデコーダ３０が、変換係数ブロックのための有意性マップを復号した後、ビデオデコーダ３０は、変換係数ブロックのレベル情報に対して復号演算を実行する（１４０）。たとえば、変換係数ブロックのレベル情報は、１よりも大きいレベルフラグと、２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とを含み得る。１よりも大きいレベルフラグと２よりも大きいレベルフラグとはＣＡＢＡＣ符号化され得、レベル残余要素はゴロムライスコードとして符号化され得る。この例では、ビデオデコーダ３０は、１よりも大きいレベルフラグと２よりも大きいレベルフラグとを復号するためにＣＡＢＡＣ復号演算を実行し得、ゴロムライスコードをレベル残余要素に変換し戻し得る。
【０１３８】
さらに、ビデオデコーダ３０は、有意性マップと、スキャンベースＬＳＣインジケータと、変換係数ブロックの変換係数レベル情報とを使用して、変換係数ブロックについてのレベル情報から変換係数ブロックを再構成する（１４２）。いくつかの例では、ビデオデコーダ３０は、ステップ１４０および１４２をインターリーブし得る。たとえば、ビデオデコーダ３０は、２次元アレイで変換係数を記憶し得る。この例では、ビデオデコーダ３０がステップ１４０においてレベル情報を復号するとき、ビデオデコーダ３０は、アレイ中の変換係数を追加または調整し得る。
【０１３９】
上記で説明したように、変換係数ブロックについてのレベル情報は、一連の１よりも大きいレベルフラグと、一連の２よりも大きいレベルフラグと、一連の符号フラグと、一連のレベル残余要素とを備え得る。いくつかの例では、一連の１よりも大きいレベルフラグと、一連の２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とは、変換係数ブロック内の非有意変換係数に関するエントリを含まない。したがって、一連の１よりも大きいレベルフラグと、一連の２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とは、１よりも大きいレベルフラグと、２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対応する変換係数ブロックの位置を示す情報を含まないことがある。したがって、ビデオデコーダ３０は、１よりも大きいレベルフラグと、２よりも大きいレベルフラグと、符号フラグと、レベル残余要素とに対応する変換係数ブロック内の位置を判断するために有意性マップを使用し得る。この例では、ビデオデコーダ３０は、次いで、変換係数ブロックを再構成するために、１よりも大きいレベルフラグと、２よりも大きいレベルのフラグと、符号フラグと、レベル残余要素とを使用し得る。
【０１４０】
上記で説明したように、いくつかの例では、変換係数の２値化レベル情報の第１のビンは、変換係数が有意であるかどうかを示し得る。したがって、有意性マップは、変換係数の２値化レベル情報に統合され得る。そのような例では、ステップ１３８において有意性マップに対してエントロピー復号演算を実行することは、ステップ１４０においてレベル情報に対してＣＡＢＡＣ復号演算を実行することの一部であり得る。
【０１４１】
図９は、変換係数ブロックのブロックベースＬＳＣインジケータを変換係数ブロックのスキャンベースＬＳＣインジケータに変換するための例示的な非反復動作１５０を示すフローチャートである。図９の例では、動作１５０は、スキャン順序がジグザグスキャン順序であると仮定する。ビデオデコーダ３０が動作１５０を開始した後、ビデオデコーダ３０は、（対角数変数の値を判断する（１５２）。ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｙ座標とブロックベースＬＳＣインジケータのｘ座標とを加算することによって、対角数変数の値を判断し得る。
【０１４２】
次に、ビデオデコーダ３０は、対角数変数が変換係数ブロックのブロック幅よりも大きいかどうかを判断する（１５４）。対角数が変換係数ブロックのブロック幅よりも大きい場合（１５４の「はい」）、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を計算する（１５６）。ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を次のように計算し得る。ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ＝ＤｉａｇＮｕｍ＊（ＤｉａｇＮｕｍ＋１））＞＞１。式中、「ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ＤｉａｇＮｕｍ」は対角数変数を表し、「＞＞」は右シフト演算を表す。
【０１４３】
次に、ビデオデコーダ３０は、対角数変数が奇数であるかどうかを判断する（１５８）。いくつかの例では、ビデオデコーダ３０は、対角数変数が奇数であるかどうかを次のように判断する。（ＤｉａｇＮｕｍ％２）＝＝１。対角数変数が奇数である場合（１５８の「はい」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｙ座標に基づいてスキャンベースＬＳＣインジケータを再計算する（１６０）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値にブロックベースＬＳＣインジケータのｙ座標を加算することによってスキャンベースＬＳＣインジケータを再計算し得る。そうではなく、対角数変数が奇数でない場合（１５８の「いいえ」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｘ座標に基づいてスキャンベースＬＳＣインジケータを再計算する（１６２）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値にブロックベースＬＳＣインジケータのｘ座標を加算することによってスキャンベースＬＳＣインジケータを再計算し得る。
【０１４４】
対角数がブロック幅よりも大きくない場合（１５４の「いいえ」）、ビデオデコーダ３０は、一時変数の値を計算する（１６４）。ビデオデコーダ３０は、一時変数の値を次のように計算し得る。（ＢｌｏｃｋＷｉｄｔｈ−１）＜＜１）−ＤｉａｇＮｕｍ。式中、「ＢｌｏｃｋＷｉｄｔｈ」は変換係数ブロックの幅を示し、「＜＜」は左シフト演算を表す。一時値を計算した後に、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を計算する（１６６）。ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を次のように計算し得る。ＭａｘＮｕｍＣｏｅｆｆＭ１−（（Ｔ＊（Ｔ＋１））＞＞１）。式中、「ＭａｘＮｕｍＣｏｅｆｆＭ１」は、変換係数ブロック中の変換係数の最大数であり、「Ｔ」は一時変数である。
【０１４５】
ビデオデコーダ３０は、次いで、一時変数が奇数であるかどうかを判断する（１６８）。一時変数が奇数である場合（１６８の「はい」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｙ座標に基づいてスキャンベースＬＳＣインジケータを再計算する（１７０）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを次のように再計算し得る。ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ＝ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ−ＢｌｏｃｋＷｉｄｔｈ＋１＋ＰｏｓｉｔｉｏｎＬａｓｔＹ。式中、「ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ＢｌｏｃｋＷｉｄｔｈ」は変換係数ブロックの幅であり、「ＰｏｓｉｔｉｏｎＬａｓｔＹ」はブロックベースＬＳＣインジケータのｙ座標である。
【０１４６】
そうではなく、一時変数が奇数でない場合（１６８の「いいえ」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｘ座標に基づいてスキャンベースＬＳＣインジケータを再計算する（１７２）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを次のように再計算し得る。ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ＝ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ−ＢｌｏｃｋＷｉｄｔｈ＋１＋ＰｏｓｉｔｉｏｎＬａｓｔＸ。式中、「ＳｃａｎＰｏｓｉｔｉｏｎＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ＢｌｏｃｋＷｉｄｔｈ」は変換係数ブロックの幅であり、「ＰｏｓｉｔｉｏｎＬａｓｔＸ」はブロックベースＬＳＣインジケータのｘ座標である。
【０１４７】
以下の擬似コードは、ブロックベースＬＳＣインジケータによって指定された座標からスキャンベースＬＳＣインジケータを導出する、図９の例による非反復アルゴリズムを表す。
【数１】
0005792382.tif 000002
【０１４８】
この擬似コードでは、「ＰｏｓｉｔｉｏｎＬａｓｔＹ」および「ＰｏｓｉｔｉｏｎＬａｓｔＸ」は、最後変換係数によって示されたｘ座標およびｙ座標であり（ＤＣ成分が座標（０，０）にあると仮定する）、「ＢｌｏｃｋＷｉｄｔｈ」はブロックの幅であり、＜＜は左シフト演算であり、＞＞は右シフト演算であり、％は係数演算であり、「ＭａｘＮｕｍＣｏｅｆｆＭ１」は、変換係数ブロックが有し得る変換係数の最大数（すなわち、ＢｌｏｃｋＷｉｄｔｈ＊ＢｌｏｃｋＨｅｉｇｈｔ−１）である。
【０１４９】
以下の擬似コードは、上記の擬似コードと同様であるが、右上から左下への対角スキャンが使用されるときにブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する。
【数２】
0005792382.tif 000003
【０１５０】
以下の擬似コードは、上記の擬似コードと同様であるが、左下から右上への対角スキャンが使用されるときにブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する。
【数３】
0005792382.tif 000004
【０１５１】
図１０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する別の例示的な非反復動作２００を示すフローチャートである。図１０の例では、ビデオデコーダ３０は、１−Ｄアレイでメモリに変換係数ブロックを記憶し得る。この１−Ｄアレイでは、変換係数ブロックの最上行中の変換係数の後に次の下位行中の変換係数が続き、その後に、次の下位行に関連する変換係数が続き、以下同様である。ビデオデコーダ３０が動作２００を開始した後、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータによって示された座標に関連付けられる１−Ｄアレイ中の位置を示す値にスキャンベースＬＳＣインジケータを設定する（２０２）。ビデオデコーダ３０は、ブロックベースＬＳＣインジケータによって指定されたｙ座標に変換係数ブロックの幅を乗算し、次いで、ブロックベースＬＳＣインジケータによって指定されたｘ座標を加算することによって、１−Ｄアレイ中の位置を判断し得る。スキャン順序が水平スキャン順序である場合、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータを取得するためにいかなるさらなる処理も実行する必要がないことがある。
【０１５２】
次に、ビデオデコーダ３０は、スキャン順序がジグザグスキャン順序であるかどうかを判断する（２０４）。スキャン順序がジグザグスキャン順序であると判断したことに応答して（２０４の「はい」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｙ座標（「ｕｉＰｏｓＬａｓｔＹ」）とブロックベースＬＳＣインジケータのｘ座標（「ｕｉＰｏｓＬａｓｔＸ」）との和として対角数（「ｕＩＤ」）を計算する（２０６）。次いで、ビデオデコーダ３０は、対角数変が変換係数ブロックの幅（「ｕｉＷｉｄｔｈ」）よりも小さいかどうかを判断する（２０８）。対角数が変換係数ブロックの幅よりも小さいと判断したことに応答して（２０８の「はい」）、ビデオデコーダ３０は、対角数に基づいてスキャンベースＬＳＣインジケータ（「ｕｉＳｃａｎＰｏｓＬａｓｔ」）の値を計算する（２１０）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を次のように計算し得る。ｕｉＳｃａｎＰｏｓＬａｓｔ＝ｕｉＤ＊（ｕｉＤ＋１））＞＞１。上式で、「ｕｉＳｃａｎＰｏｓＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ｕｉＤ」は対角数である。この例では、対角数が偶数である場合、ビデオデコーダ３０は、次いで、スキャンベースＬＳＣインジケータの初期値にブロックベースＬＳＣインジケータのｙ座標を加算することによって、スキャンベースＬＳＣインジケータの最終値を計算し得る。対角数が奇数である場合、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値にブロックベースＬＳＣインジケータのｘ座標を加算することによって、スキャンベースＬＳＣインジケータの最終値を計算し得る。
【０１５３】
そうでない場合、位置識別子が変換係数ブロックの幅よりも小さくないと判断することに応答して（２０８の「いいえ」）、ビデオデコーダ３０は、一時的値（「ｕｉＤＩ」）を計算する（２１２）。ビデオデコーダ３０は、一時値を次のように計算し得る。ｕｉＤＩ＝（（ｕｉＷｉｄｔｈ−１）＜＜１）−ｕｉＤ。上式で、「ｕｉＤＩ」は一時値であり、「ｕｉＷｉｄｔｈ」は変換係数ブロックの幅であり、「ｕｉＤ」は対角数である。一時値を計算した後に、ビデオデコーダ３０は、一時値に基づいてスキャンベースＬＳＣインジケータを計算する（２１４）。ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値を次のように計算し得る。ｕｉＳｃａｎＰｏｓＬａｓｔ＝ｕｉＭａｘＮｕｍＣｏｅｆｆＭ１−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）。上式で、「ｕｉＳｃａｎＰｏｓＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ｕｉＭａｘＮｕｍＣｏｅｆｆＭ１」は変換係数ブロックが有し得る変換係数の最大数であり、「ｕｉＤＩ」は一時値である。一時値が偶数である場合、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値からｕｉＷｉｄｔｈ−１−ｕｉＰｏｓＬａｓｔＹを減算することによってスキャンベースＬＳＣインジケータの最終値を計算し得、上式で、「ｕｉＷｉｄｔｈ」は変換係数ブロックの幅であり、「ｕｉＰｏｓＬａｓｔＹ」はブロックベースＬＳＣインジケータのｙ座標である。一時値が奇数である場合、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータの初期値から（ｕｉＷｉｄｔｈ−１−ｕｉＰｏｓＬａｓｔＸ）を減算することによってスキャンベースＬＳＣインジケータの最終値を計算し得、上式で、「ｕｉＷｉｄｔｈ」は変換係数ブロックの幅であり、「ｕｉＰｏｓＬａｓｔＸ」はブロックベースＬＳＣインジケータのｘ座標である。
【０１５４】
スキャン順序がジグザグスキャン順序でないと判断したことに応答して（２０４の「いいえ」）、ビデオデコーダ３０は、スキャン順序が垂直スキャン順序であるかどうかを判断する（２１６）。スキャン順序が垂直スキャン順序であると判断したことに応答して（２１６の「はい」）、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータと変換係数ブロックのサイズとからスキャンベースＬＳＣインジケータを計算する（２１８）。たとえば、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータをｕｉＳｃａｎＰｏｓＬａｓｔ＝ｕｉＰｏｓＬａｓｔＹ＋（ｕｉＰｏｓＬａｓｔＸ＜＜ｕｉＬｏｇ２ＢｌｏｃｋＳｉｚｅとして計算し得、上式で、ｕｉＳｃａｎＰｏｓＬａｓｔはスキャンベースＬＳＣインジケータであり、ｕｉＰｏｓＬａｓｔＹはブロックベースＬＳＣインジケータのｙ座標であり、ｕｉＰｏｓＬａｓｔＸはブロックベースＬＳＣインジケータのｘ座標であり、「ｕｉＬｏｇ２ＢｌｏｃｋＳｉｚｅ」は変換係数ブロックのサイズの、底を２とする対数である。
【０１５５】
以下のコードは、スキャン順序が図１０の例による水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序であるときにブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するための例示的なアルゴリズムを表す。変換係数ブロックのメモリ中のストレージが行型であると仮定する。
【数４】
0005792382.tif 000005
【０１５６】
ビデオデコーダ３０は、（上記で説明したジグザグスキャンではなく）対角スキャン順序に関して同様の動作を実行し得る。そのような動作では、ビデオデコーダ３０は、ステップ２１４におけるスキャンベースＬＳＣインジケータをｕｉＳｃａｎＰｏｓＬａｓｔ＝ｕｉＭａｘＮｕｍＣｏｅｆｆＭ１−（ｕｉＤＩ＊（ｕｉＤＩ＋１）＞＞１）−ｕｉＷｉｄｔｈ＋１＋ｕｉＰｏｓＬａｓｔＸとして計算し得、上式で、「ｕｉＳｃａｎＰｏｓＬａｓｔ」はスキャンベースＬＳＣインジケータであり、「ｕｉＭａｘＮｕｍＣｏｅｆｆＭ１」は、変換係数ブロック中の変換係数の最大数であり、「ｕｉＤＩ」は一時値であり、「ｕｉＷｉｄｔｈ」は変換係数ブロックの幅であり、「ｕｉＰｏｓＬａｓｔＸ」はブロックベースＬＳＣインジケータのｘ座標である。以下のコードは、スキャン順序が対角スキャン順序であるときにブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するための例示的なアルゴリズムを表す。
【数５】
0005792382.tif 000006
【０１５７】
図１１は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する別の例示的な動作２５０を示すフローチャートである。図１１の例に示すように、ビデオデコーダ３０は、ルックアップテーブルを記憶する（２５２）。ルックアップテーブルは、スキャン順序に従ってブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングする。たとえば、スキャン順序がジグザグスキャン順序である場合、ルックアップテーブルは、座標（１，１）をスキャンベースＬＳＣインジケータ「６」にマッピングするエントリを含み得る。いくつかの例では、ビデオデコーダ３０は、異なるスキャン順序のための、および異なる変換係数ブロックサイズのための異なるルックアップテーブルを記憶し得る。
【０１５８】
ビデオデコーダ３０がルックアップテーブルを記憶した後、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータを受信する（２５４）。ブロックベースＬＳＣインジケータを受信した後に、ビデオデコーダ３０は、ルックアップテーブルにアクセスして、ブロックベースＬＳＣインジケータに対応するスキャンベースＬＳＣインジケータを取り出す（２５６）。いくつかの例では、ビデオデコーダ３０は、ブロックベースＬＳＣインジケータのｘ座標とｙ座標とに基づいて単一の値を生成する。たとえば、ビデオデコーダ３０は、ｙ座標に変換係数ブロックの幅を乗算し、次いで、ｘ座標を加算することによって単一の値を生成し得る。そのような例では、ビデオデコーダ３０は、ルックアップテーブルからスキャンベースＬＳＣインジケータを取り出すために、インデックスとして単一の値を使用し得る。
【０１５９】
ビデオデコーダ３０は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために追加の演算を使用し得る。たとえば、ビデオデコーダ３０は、変換係数がサブブロック対角スキャン順序でスキャンされるとき、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換するために、以下の擬似コードを使用し得る。このサブブロック対角スキャン順序では、ビデオデコーダ３０は、右上から左下への対角順序でサブブロックを処理し、右上から左下への対角順序でサブブロックの各々の内で変換係数をスキャンする。
【数６】
0005792382.tif 000007
【０１６０】
上記の擬似コードでは、「ｕｉＷｉｄｔｈ」は変換係数ブロックの幅を示し、「ｕｉＰｏｓＬａｓｔＸ」はブロックベースＬＳＣインジケータのｘ座標を示し、「ｕｉＰｏｓＬａｓｔＹ」はブロックベースＬＳＣインジケータのｙ座標を示し、「ｕｉＳｃａｎＰｏｓＬａｓｔ」はスキャンベースＬＳＣインジケータを示す。「ｓＸ」は、最後の有意変換係数を包含するサブブロックの左上の変換係数のｘ座標を示す。「ｓＹ」は、最後の有意変換係数を包含するサブブロックの左上の変換係数のｙ座標を示す。上記の擬似コードは、最初に、最後の有意変換係数を包含するサブブロックのスキャン順序（「ｕｉＳｃａｎＰｏｓＬａｓｔ」）を判断する演算を実行し、次いで、サブブロック内の最後の有意変換係数のスキャン順序を判断する演算を実行するので、上記の擬似コードは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する演算の組合せを表し得る。
【０１６１】
図１２は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する例示的な反復動作３００を示すフローチャートである。ビデオデコーダ３０が動作３００を開始した後、ビデオデコーダ３０は、スキャン順序に従って変換係数ブロックのＬＳＣを示すブロックベースＬＳＣインジケータを受信する（３０２）。ビデオデコーダ３０は、次いで、スキャン順序に従って変換係数ブロックの第１の位置を示すように位置インジケータを設定する（３０４）。いくつかの例では、位置指示は、現在の変換係数の水平のｘ位置を示す第１の値と、現在の変換係数の垂直のｙ位置を示す第２の値とを含み得る。たとえば、スキャン順序がＤＣ構成要素で開始する場合、ビデオデコーダ３０は、座標（０，０）の位置を示すように位置インジケータを設定し得る。さらに、ビデオデコーダ３０は、スキャンベースＬＳＣインジケータをゼロに初期化する（３０６）。
【０１６２】
ビデオデコーダ３０は、次いで、スキャン順序に従って位置インジケータによって示された位置を前進させる（３０８）。たとえば、スキャン順序が水平スキャン順序であり、位置インジケータが位置（３，４）を現在示す場合、ビデオデコーダ３０は、位置インジケータが位置（３，５）を示すように、位置インジケータによって示された位置を前進させ得る。ビデオデコーダ３０は、次いで、スキャンベースＬＳＣインジケータを増分する（３１０）。
【０１６３】
ビデオデコーダ３０は、次いで、位置インジケータによって示された位置がブロックベースＬＳＣインジケータによって示された位置と同じであるかどうかを判断する（３１２）。言い換えれば、ビデオデコーダ３０は、示された位置が一致するかどうかを判断し得る。位置インジケータによって示された位置がブロックベースＬＳＣインジケータによって示された位置と同じである場合、スキャンベースＬＳＣインジケータはＬＳＣの位置を示す。位置インジケータによって示された位置がブロックベースＬＳＣインジケータによって示された位置でない場合（３１２の「いいえ」）、ビデオデコーダ３０は、前進させた位置インジケータを用いて動作３０８〜３１２を繰り返す。位置インジケータによって示された位置がブロックベースＬＳＣインジケータによって示された位置である場合（３１２の「はい」）、ビデオデコーダ３０は、動作３００を終了する。
【０１６４】
以下の擬似コードは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータに変換する代替反復演算を表し得る。この擬似コードでは、ビデオデコーダ３０は、対応するブロックベース位置がＬＳＣインジケータによって示された位置であるかどうかを判断するために各スキャン位置を検査する。現在のスキャン位置（「ｕｉＢｌｋＰｏｓＬａｓｔ」）がブロックベースＬＳＣインジケータ（「ｕｉＢｌｋＰｏｓ」）に等しくなるとき、ビデオデコーダ３０は位置の検査を停止する。
【数７】
0005792382.tif 000008
【０１６５】
図１３は、最後の有意変換係数を示す変換係数ブロック３５０の概念図である。図１３の例では、各円は、変換係数ブロック３５０中の異なる変換係数を表す。図１３の黒い円は有意変換係数に対応し、白い円は非有意変換係数に対応する。変換係数３５２は、対角スキャン順序による変換係数ブロック３５０の最後の有意変換係数である。図１３は、対角スキャン順序を、円を通る矢印として表す。変換係数ブロック３５０の最上行が行０であり、最左列が列０であると仮定すると、変換係数３５２のブロックベースＬＳＣインジケータは座標（２，１）を示す。変換係数３５２のスキャンベースＬＳＣインジケータは数「７」であり得る。
【０１６６】
実施形態によっては、本明細書で説明した方法のうちいずれかの、いくつかの作用またはイベントは、異なる順序で実行され得、追加、マージ、または完全に除外され得る（たとえば、すべての説明した作用またはイベントが、方法の実施のために必要であるとは限らない）ことを認識されたい。さらに、いくつかの実施形態では、行為またはイベントは、連続してではなくむしろ、同時に、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して実行され得る。
【０１６７】
本明細書で開示した方法、システム、および装置と関連して説明した様々な例示的論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、プロセッサによって実行されるコンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は認識されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課せられた設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
【０１６８】
さらに、本明細書で開示する実施形態は、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）またはその他のプログラマブル論理デバイス、個別ゲートまたはトランジスタ論理、個別ハードウェア構成要素などの電子デバイスまたは回路、あるいは本明細書で説明した機能を実行するように設計されたそれらの任意の組合せを用いて実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。
【０１６９】
本明細書で開示する実施形態に関して説明した方法またはアルゴリズムのステップは、直接ハードウェアで実施され得るか、プロセッサによって実行されるソフトウェアモジュールで実施され得るか、またはその２つの組合せで実施され得る。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または当技術分野で知られている任意の他の形態の記憶媒体中に常駐し得る。例示的な記憶媒体は、プロセッサがその記憶媒体から情報を読み取り、その記憶媒体に情報を書き込み得るようにプロセッサに結合される。代替として、記憶媒体はプロセッサに一体化され得る。プロセッサおよび記憶媒体はＡＳＩＣ中に常駐し得る。ＡＳＩＣはユーザ端末内に常駐し得る。代替として、プロセッサおよび記憶媒体は、ユーザ端末中に個別構成要素として常駐し得る。
【０１７０】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
ビデオデータを復号するための方法であって、
ブロックベース最後の有意係数（ＬＳＣ）インジケータをスキャンベースＬＳＣインジケータに変換することと、ここで、前記ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースＬＳＣインジケータは、前記スキャン順序に従って前記ＬＳＣの順序位置を示す、
前記スキャンベースＬＳＣインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を備える、方法。
［Ｃ２］
前記スキャン順序は、前記ブロックのＤＣ成分から開始する、
［Ｃ１］に記載の方法。
［Ｃ３］
前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換することは、前記ブロックベースＬＳＣインジケータから前記スキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行することを備える、
［Ｃ１］に記載の方法。
［Ｃ４］
前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換することは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスすることを備える、
［Ｃ１］に記載の方法。
［Ｃ５］
前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換することは、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースＬＳＣインジケータを増分することと
を備える、［Ｃ１］に記載の方法。
［Ｃ６］
前記有意性マップを復号することは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースＬＳＣインジケータを使用することを備える、
［Ｃ１］に記載の方法。
［Ｃ７］
前記方法は、有意性マップのコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）バージョンを受信することをさらに備え、
前記有意性マップを復号するために前記スキャンベースＬＳＣインジケータを使用することは、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するＣＡＢＡＣ復号演算中に前記コンテキストモデルを使用することと
を備え、
前記方法は、
前記ブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することと
をさらに備える、［Ｃ６］に記載の方法。
［Ｃ８］
前記ブロックのイントラ予測モードを判断することと、
前記ブロックの前記イントラ予測モードに基づいて前記スキャン順序を判断することと、
前記スキャン順序に従って前記レベル情報を前記ブロックにマッピングすることと、
逆量子化ブロックを生成するために前記ブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと
をさらに備え、前記再構成ブロックは、前記ビデオデータのピクチャの一部分である、
［Ｃ７］に記載の方法。
［Ｃ９］
前記スキャン順序は、サブブロックベーススキャン順序、対角スキャン順序、水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序である、
［Ｃ１］に記載の方法。
［Ｃ１０］
前記方法は、前記スキャン順序に基づいて前記ブロックベースＬＳＣインジケータを前記スキャンベースインジケータに変換するための変換演算を選択することをさらに備え、
前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換することは、前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換するために前記選択された変換演算を使用することを備える、
［Ｃ１］に記載の方法。
［Ｃ１１］
前記ブロックは、複数のサブブロックを含み、
前記有意性マップを復号することは、
前記スキャンベースＬＳＣインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックは、前記ＬＳＣを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第１の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第１のコーディングパスを実行することと
を備え、
前記第１のコーディングパス中に処理された前記サブブロックの各々について、第２の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第２のコーディングパスを実行し、
前記第２のコーディングパス中に処理された各変換係数について、前記スキャンベースＬＳＣインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断する、
［Ｃ１］に記載の方法。
［Ｃ１２］
１つまたは複数のプロセッサを備えたビデオ復号デバイスであって、
ブロックベース最後の有意係数（ＬＳＣ）インジケータをスキャンベースＬＳＣインジケータに変換することと、ここで、前記ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースＬＳＣインジケータは、前記スキャン順序に従って前記ＬＳＣの順序位置を示す、
前記スキャンベースＬＳＣインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を行うように構成される、ビデオ復号デバイス。
［Ｃ１３］
前記スキャン順序は、前記ブロックのＤＣ成分から開始する、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ１４］
前記１つまたは複数のプロセッサは、前記ブロックベースＬＳＣインジケータから前記スキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行するように構成される、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ１５］
前記１つまたは複数のプロセッサは、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスするようにさらに構成される、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ１６］
前記１つまたは複数のプロセッサは、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースＬＳＣインジケータを増分することと
を行うようにさらに構成される、［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ１７］
前記１つまたは複数のプロセッサは、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するために前記スキャンベースＬＳＣインジケータを使用するように構成される、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ１８］
前記１つまたは複数のプロセッサは、有意性マップのコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）バージョンを受信することと、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択すること、および
前記有意性マップを復号するＣＡＢＡＣ演算中に前記コンテキストモデルを使用すること
を行うことに少なくとも部分的によって前記有意性マップを復号するために前記スキャンベースＬＳＣインジケータを使用することと
を行うように構成され、
前記１つまたは複数のプロセッサは、
前記ブロックについてのレベル情報の符号化バージョンを受信することと、
前記レベル情報を復号するために前記有意性マップを使用することと
を行うようにさらに構成される、［Ｃ１７］に記載のビデオ復号デバイス。
［Ｃ１９］
前記１つまたは複数のプロセッサは、
前記ブロックのイントラ予測モードを判断することと、
前記ブロックの前記イントラ予測モードに基づいて前記スキャン順序を判断することと、
前記スキャン順序に従って前記レベル情報を前記ブロックにマッピングすることと、
逆量子化ブロックを生成するために前記ブロック中の変換係数に対して逆量子化演算を実行することと、
残差データを生成するために前記逆量子化ブロックに対して逆変換演算を実行することと、
予測データを生成するイントラ予測演算を実行することと、
再構成ブロックを生成するために、前記残差データと前記予測データとを使用する再構成演算を実行することと、
を行うようにさらに構成され、前記再構成ブロックは、前記ビデオデータのフレームの一部分である、
［Ｃ１８］に記載のビデオ復号デバイス。
［Ｃ２０］
前記スキャン順序は、対角スキャン順序、水平スキャン順序、垂直スキャン順序、またはジグザグスキャン順序である、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ２１］
前記１つまたは複数のプロセッサは、前記スキャン順序に基づいて変換演算を選択することと、前記ブロックベースＬＳＣインジケータを前記スキャンベースＬＳＣインジケータに変換するために前記選択された変換演算を使用することとを行うようにさらに構成される、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ２２］
前記ブロックは、複数のサブブロックを含み、
前記１つまたは複数のプロセッサは、
前記スキャンベースＬＳＣインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックは、前記ＬＳＣを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第１の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第１のコーディングパスを実行することと
を行うことに少なくとも部分的によって前記有意性マップを復号するように構成され、
前記１つまたは複数のプロセッサは、前記第１のコーディングパス中に処理された前記サブブロックの各々について、前記１つまたは複数のプロセッサが、第２の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第２のコーディングパスを実行するように構成され、
前記１つまたは複数のプロセッサは、前記第２のコーディングパス中に処理された各変換係数について、前記１つまたは複数のプロセッサが、前記スキャンベースＬＳＣインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するように構成される、
［Ｃ１２］に記載のビデオ復号デバイス。
［Ｃ２３］
ブロックベース最後の有意係数（ＬＳＣ）インジケータをスキャンベースＬＳＣインジケータに変換するための手段と、ここで、前記ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースＬＳＣインジケータは、前記スキャン順序に従って前記ＬＳＣの順序位置を示す、
前記スキャンベースＬＳＣインジケータに基づいて、前記ブロックのための有意性マップを復号するための手段と
を備える、ビデオ復号デバイス。
［Ｃ２４］
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択するための手段と、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）復号演算中に前記コンテキストモデルを使用するための手段と、
前記ブロックについての符号化されたレベル情報を受信するための手段と、
前記レベル情報を復号するために前記有意性マップを使用するための手段と
を備える、［Ｃ２３］に記載の復号デバイス。
［Ｃ２５］
前記ブロックベースＬＳＣインジケータから前記スキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行するための手段を備える、
［Ｃ２３］に記載の復号デバイス。
［Ｃ２６］
ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスするための手段を備える、
［Ｃ２３］に記載の復号デバイス。
［Ｃ２７］
前記座標を有する位置に達するまで前記スキャン順序に従って変換係数の前記ブロック中の位置中をスキャンするループ演算を実行するための手段と、
前記座標を有する前記位置より前の変換係数の前記ブロックの位置ごとに前記スキャンベースＬＳＣインジケータを増分するための手段と
を備える、［Ｃ２３］に記載の復号デバイス。
［Ｃ２８］
前記ブロックが複数のサブブロックを含み、
前記有意性マップを復号するための前記手段は、
前記スキャンベースＬＳＣインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別するための手段と、ここで、前記最後の有意サブブロックが前記ＬＳＣを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第１の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第１のコーディングパスを実行するための手段と
を備え、
前記第１のコーディングパス中に処理された前記サブブロックの各々について、前記有意性マップを復号するための前記手段は、第２の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第２のコーディングパスを実行し、
前記第２のコーディングパス中に処理された各変換係数について、前記有意性マップを復号するための前記手段は、前記スキャンベースＬＳＣインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断する、
［Ｃ２３］に記載の復号デバイス。
［Ｃ２９］
ブロックベース最後の有意係数（ＬＳＣ）インジケータをスキャンベースＬＳＣインジケータに変換することと、ここで、前記ブロックベースＬＳＣインジケータは、スキャン順序に従って変換係数のブロックの最後の有意係数の座標を示し、前記スキャンベースＬＳＣインジケータは、前記スキャン順序に従って前記ＬＳＣの順序位置を示す、
前記スキャンベースＬＳＣインジケータに基づいて、前記ブロックのための有意性マップを復号することと
を行うように１つまたは複数のプロセッサを構成する命令をその上に有するコンピュータ可読記憶媒体を備える、コンピュータプログラム製品。
［Ｃ３０］
前記命令は、
前記スキャンベースＬＳＣインジケータに基づいてコンテキストモデルを選択することと、
前記有意性マップを復号するコンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）復号演算中に前記コンテキストモデルを使用することと、
前記レベル情報を復号するために前記有意性マップを使用することと
を行うように前記１つまたは複数のプロセッサを構成する、
［Ｃ２９］に記載のコンピュータプログラム製品。
［Ｃ３１］
前記命令は、前記ブロックベースＬＳＣインジケータから前記スキャンベースＬＳＣインジケータを導出する非反復アルゴリズムを実行するように前記１つまたは複数のプロセッサを構成する、
［Ｃ２９］に記載のコンピュータプログラム製品。
［Ｃ３２］
前記命令は、ブロックベースＬＳＣインジケータをスキャンベースＬＳＣインジケータにマッピングするデータ構造にアクセスするように前記１つまたは複数のプロセッサを構成する、
［Ｃ２９］に記載のコンピュータプログラム製品。
［Ｃ３３］
前記命令は、
前記座標を有する位置に達するまで前記スキャン順序に従って前記ブロック中の位置中をスキャンするループ演算を実行することと、
前記座標を有する前記位置より前の前記ブロックの位置ごとに前記スキャンベースＬＳＣインジケータを増分することと
を行うように前記１つまたは複数のプロセッサを構成する、［Ｃ２９］に記載のコンピュータプログラム製品。
［Ｃ３４］
前記変換係数ブロックは、複数のサブブロックを含み、
前記命令は、
前記スキャンベースＬＳＣインジケータに基づいて、前記複数のサブブロックの中から最後の有意サブブロックを識別することと、ここで、前記最後の有意サブブロックが前記ＬＳＣを含む、
前記最後の有意サブブロックと、前記サブブロックのうち、前記最後の有意サブブロックで開始する第１の逆スキャン順序に従って前記最後の有意サブブロックの前に発生するサブブロックとを処理する第１のコーディングパスを実行することと
を行うように前記１つまたは複数のプロセッサを構成し、
前記命令は、前記第１のコーディングパス中に処理された前記サブブロックの各々について、前記１つまたは複数のプロセッサが、第２の逆スキャン順序に従って前記サブブロック中の変換係数を処理する第２のコーディングパスを実行するように前記１つまたは複数のプロセッサを構成し、
前記命令は、前記第２のコーディングパス中に処理された各変換係数について、前記１つまたは複数のプロセッサが、前記スキャンベースＬＳＣインジケータに基づいて、前記有意性マップが前記変換係数の有意性フラグを含むかどうかを判断するように前記１つまたは複数のプロセッサを構成する、
［Ｃ２９］に記載のコンピュータプログラム製品。
【図１】
0005792382.tif 000009
【図２】
0005792382.tif 000010
【図３】
0005792382.tif 000011
【図４】
0005792382.tif 000012
【図５】
0005792382.tif 000013
【図６】
0005792382.tif 000014
【図７】
0005792382.tif 000015
【図８】
0005792382.tif 000016
【図９】
0005792382.tif 000017
【図１０】
0005792382.tif 000018
【図１１】
0005792382.tif 000019
【図１２】
0005792382.tif 000020
【図１３】
0005792382.tif 000021