JP2020068461A - 動画像符号化装置および動画像復号装置 - Google Patents
動画像符号化装置および動画像復号装置 Download PDFInfo
- Publication number
- JP2020068461A JP2020068461A JP2018200186A JP2018200186A JP2020068461A JP 2020068461 A JP2020068461 A JP 2020068461A JP 2018200186 A JP2018200186 A JP 2018200186A JP 2018200186 A JP2018200186 A JP 2018200186A JP 2020068461 A JP2020068461 A JP 2020068461A
- Authority
- JP
- Japan
- Prior art keywords
- tile
- unit
- ctu
- size
- coordinate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Description
以下、図面を参照しながら本発明の実施形態について説明する。
本明細書で用いる演算子を以下に記載する。
本実施形態に係る動画像符号化装置11および動画像復号装置31の詳細な説明に先立って、動画像符号化装置11によって生成され、動画像復号装置31によって復号される符号化ストリームTeのデータ構造について説明する。
符号化ビデオシーケンスでは、処理対象のシーケンスSEQを復号するために動画像復号装置31が参照するデータの集合が規定されている。シーケンスSEQは、図1(a)に示すように、ビデオパラメータセット(Video Parameter Set)、シーケンスパラメータセットSPS
(Sequence Parameter Set)、ピクチャパラメータセットPPS(Picture Parameter Set)、ピクチャPICT、及び、付加拡張情報SEI(Supplemental Enhancement Information)を含んでいる。
符号化ピクチャでは、処理対象のピクチャPICTを復号するために動画像復号装置31が参照するデータの集合が規定されている。ピクチャPICTは、図1(b)に示すように、スライス0〜スライスNS-1を含む(NSはピクチャPICTに含まれるスライスの総数)。
符号化スライスでは、処理対象のスライスSを復号するために動画像復号装置31が参照するデータの集合が規定されている。スライスは、図1(c)に示すように、スライスヘッダ、および、スライスデータを含んでいる。
符号化スライスデータでは、処理対象のスライスデータを復号するために動画像復号装置
31が参照するデータの集合が規定されている。スライスデータは、図1(d)に示すように、CTUを含んでいる。CTUは、スライスを構成する固定サイズ(例えば128x128)のブロックであり、最大符号化単位(LCU:Largest Coding Unit)と呼ぶこともある。
図3(a)はピクチャをN個のタイル(実線の矩形、図はN=9の例)に分割した例を示す図である。タイルはさらに複数のCTU(破線の矩形)に分割される。図3(a)の中央に示すように、タイルの左上座標を(xTile,yTile)、幅をwTile、高さをhTileと記す。またピクチャの幅をwPict、高さをhPictと記す。なお、タイルの分割数やサイズに関する情報をタイル情報と呼び、詳細は後述する。xTile、yTile、wTile、hTile、wPict、hPictの単位は画素である。ピクチャの幅、高さは図4(a)に示すsequence_parameter_set_rbsp()(SPSと称す)で通知される、pic_width_in_luma_samples、pic_height_in_luma_samplesをセットする。
hPict = pic_height_in_luma_samples
図3(b)はピクチャをタイルに分割した時の、CTUの符号化、復号順序を示す図である。各タイルに記載されている番号はTileId(ピクチャ内のタイルの識別子)であり、ピクチャ内のタイルに対し左上から右下にラスタスキャン順で番号TileIdを割り当ててもよい。また、CTUは各タイル内を左上から右下へラスタスキャン順に処理され、1つのタイル内での処理が終わると、次のタイル内のCTUが処理される。
図4(c)に示すように、independent_tiles_flagが0の場合に参照ピクチャにかけるタイル境界でのループフィルタのオンオフを示す、loop_filter_across_tiles_enable_flagを伝
送(present)する。independent_tiles_flagが1の場合において、loop_filter_across_tiles_enable_flagを伝送(present)せずに常に0としてもよい。
hUnitTile = 1<<(log2CbSize+tile_unit_height_idc)
ヘッダ復号部3020は、ピクチャ内の水平、垂直方向のタイル数M、Nを以下で導出する。MはnumTileColumns、NはnumTileRowsである。
N = num_tile_rows_minus1+1
numTileColumns = M = num_tile_columns_minus1+1
numTileRows = N = num_tile_columns_minus1+1
ヘッダ復号部3020は、タイルの最小サイズ(最小単位)wUnitTile、hUnitTileの倍数となるように、タイルサイズを以下で導出する。ここで、wPictInUnitTileとhPictInUnitTileは、それぞれ、wPictおよびhPictをwUnitTileおよびhUnitTileを単位として表した値である。
hPictInUnitTile = ceil(hPict/hUnitTile)
wTile[m] = ceil(wPictInUnitTile/M)*wUnitTile (0<=m<M)
hTile[n] = ceil(hPictInUnitTile/N)*hUnitTile (0<=n<N)
あるいはヘッダ復号部3020は、下式で導出してもよい。
hTile[n] = floor(hPict/N/hUnitTile)*hUnitTile (0<=n<N)
あるいはヘッダ復号部3020は、下式で導出してもよい。
wTile[m] = ((m+1)*wPictInUnitTile/M-m*wPictInUnitTile/M)*wUnitTile
for(n=0;n<N;n++)
hTile[n] = ((n+1)*hPictInUnitTile/N-n*hPictInUnitTile/N)*hUnitTile
uniform_spacing_flagの値が0の場合、ピクチャの各タイルの幅、高さは個別に設定される。動画像符号化装置では、各タイルの幅column_width_in_unit_minus1[i](図3のwTileを、wUnitTileを単位として表現した値)、高さrow_height_in_unit_minus1[i](図3のhTileを、hUnitTileを単位として表現した値)をタイル毎に符号化する。動画像復号装置のヘッダ復号部3020では、符号化された(column_width_in_unit_minus1[],row_width_in_unit_minus1[])に基づいてタイル毎に、タイルサイズwTile[m]、hTile[n]を下記のように復号する。
hTile[n] = (row_height_in_unit_minus1[m]+1)*hUnitTile (0<=n<N-1)
wTile[M-1] = ceil((wPict-sum_m(wTile[m]))/wUnitTile)*wUnitTile
hTile[N-1] = ceil((hPict-sum_n(hTile[n]))/hUnitTile)*hUnitTile
ここで、sum_m(wTile[m])は、wTile(0<=m<M-1)の総和、sum_n(hTile[n])はhTile(0<=n<N-1)の総和を表す。
hTile[N-1] = hPict-sum_n(hTile[n])
ただしこの場合は、処理単位がタイルの最小単位あるいは最小CUサイズに合致するように、パディングやクロッピングなどにより画面端が適切に処理されることが望ましい。
あるいは、TileIdが既知の場合、TileIdからタイルの位置を示す(m,n)を算出してもよい。
n = TileId/M
ヘッダ復号部3020は、タイルの大きさの単位を示すタイルユニット情報を復号する。タイルの幅と高さの最小単位をwUnitTile、hUnitTileとする場合、タイルの幅と高さは、各々wUnitTile、hUnitTileの整数倍に設定される。
ヘッダ復号部3020は、タイルユニット識別子が0である場合には、タイルの大きさの単位をCTU単位として設定する。具体的には、tile_unit_width_idc=0の場合にwUnitTile=ctuWidth、tile_unit_width_idc=0の場合にhUnitTile=ctuHeightに設定する。ここで、ctuWidthはCTUの幅、ctuHeightはCTUの高さである。
hUnitTile = (tile_unit_height_idc==0) ? ctuHeight : 1<<(log2CbSize+tile_unit_height_idc-1)
ここで、log2CbSize=log2(minCU)、minCUは符号化ユニットCUの最小サイズである。
log2CtuSize = log2CbSize+log2_diff_max_min_luma_coding_block_size
minCU = 1 << log2CbSize
ctuSize = 1 << log2CtuSize
なお、タイルユニット識別子!=0の場合には、タイル単位を符号化ユニットCUの最小サイズの定数倍(2の指数乗)に設定しても良い。
hUnitTile = (tile_unit_height_idc==0) ? ctuHeight : 1<<(log2CbSize+ Log2DiffTileUnitSize)
ここでLog2DiffTileUnitSizeは、タイル単位を定める定数である。例えば1、2、3に設定することで、タイル単位が最小CUサイズの4、8、16倍に設定される。例えば、CUサイズが4の場合には、8、16、32に設定される。さらに最大値をCTUサイズとなるようにクリップしても良い。
タイル情報は0から所定の範囲の数のタイルユニット識別子tile_unit_width_idcであり、タイルの大きさの単位を1<<(log2(minCU)+タイルユニット識別子)で設定してもよい。すなわち、ヘッダ復号部3020は、tile_unit_width_idc、tile_unit_height_idc(もしくはtile_unit_size_idc)を復号し、タイル単位を以下のように設定してもよい。
hUnitTile = 1<<(log2CbSize+tile_unit_height_idc)
CTUの幅と高さが等しい正方形であれば、以上はtile_unit_size_idcを復号し以下のように設定することと同値である。以下、自明であるので、正方形のみの場合の説明は省略する。
なお、タイルユニット識別子を明示的に符号化せず、タイル単位を符号化ユニットCUの最小サイズの定数倍(2の指数乗)に設定しても良い。
hUnitTile = 1<<(log2CbSize+Log2DiffTileUnitSize)
ここでLog2DiffTileUnitSizeは、タイル単位を定める定数である。さらに最大値がCTU
サイズにクリップしても良い。
hUnitTile = min(ctuHeight1<<(log2CbSize+Log2DiffTileUnitSize))
(設定方法3)
タイル情報は、0から所定の範囲の数のタイルユニット識別子であり、タイルの大きさの単位をCTUサイズの2の指数乗分の1となるように、1<<(log2(CTUサイズ)−タイルユニット識別子)で設定することを特徴とする。すなわち、ヘッダ復号部3020は、tile_unit_width_idc、tile_unit_height_idc(もしくはtile_unit_size_idc)を復号し、タイル単位を以下のように設定してもよい。
hUnitTile = 1<<(log2CtuHeightY-tile_unit_height_idc)
ここで、log2CtuWidthY=log2(ctuWidth)、log2CtuHeightY=log2(ctuHeight)である。
hUnitTile = 1<<(log2CtuSize-tile_unit_height_idc)
ここで、log2CtuSize=log2(ctuWidth)=log2(ctuHeight)である。
この場合、差分の対数での表現になるのでtile_unit_width_idcをlog2_diff_luma_tile_unit_sizeと呼ぶのも適当である。
hUnitTile = max(8, ctuHeight>>tile_unit_height_idc)
これによって、常にタイル幅が8の倍数となるため(設定方法5)に示す効果も奏する。
hUnitTile = max(minCTU, ctuHeight>>tile_unit_height_idc)
これによって、常にタイル幅がCTUの最小サイズの倍数となるため(設定方法5)に示す効果も奏する。
ctuWidth>>tile_unit_width_idc >= minCTU
ctuWidth >= minCTU<< tile_unit_width_idc
ctuWidth >= minCTU * (1<<tile_unit_width_idc)
(1<<tile_unit_width_idc) <= ctuWidth/minCTU
tile_unit_width_idc <= log2(ctuWidth)-log2(minCTU)
であるから、tile_unit_width_idcを0以上log2(ctuWidth)-log2(minCTU)以下に制限する。すなわち、動画像復号装置は、0以上log2(ctuWidth)-log2(minCTU)以下に制限された符号化データを復号することにより、minCTUの倍数であるタイル単位を用いることができる。
タを復号することにより8の倍数であるタイル単位を用いることができる。8の倍数でなく16、32の倍数の場合には、上記の3(log2(8))を4、5とすればよい。
タイル情報は、0から所定の範囲の数のタイルユニット識別子であり、タイルの大きさの単位をCTUサイズの2の指数乗分の1となるように、CTUサイズ>>タイルユニット識別子で設定することを特徴とする。すなわち、ヘッダ復号部3020は、tile_unit_width_idc、tile_unit_height_idc(もしくはtile_unit_size_idc)を復号し、タイル単位を以下のように設定してもよい。
hUnitTile = ctuHeight>>tile_unit_height_idc
設定方法3と設定方法4は同値であるから、tile_unit_width_idc、tile_unit_height_idc(もしくはtile_unit_size_idc)の制限は(設定方法3)で説明した方法が利用できる。
ヘッダ復号部3020は、タイルユニット識別子(tile_unit_width_idc、tile_unit_height_idc)を復号せず、所定の値TileUnitをwUnitTile、hUnitTileに設定する。所定の値TileUnitは8の倍数、特に8、16、32の何れかであることが好ましい。タイル情報tile_info()は図4(d)に替えて図23(d)のように通知され、ヘッダ復号部3020はこのタイル情報を復号する。
hUnitTile = TileUnit
ここで、TileUnitは8あるいは16、32のように8の倍数とする。タイル単位を8の倍数とすれば、画素のbitDepthが10bitなど8の倍数でない場合にも、タイル幅の画素データは8の倍数とすることができる。これによりメモリ配置する場合にもタイル境界が常にバイト(8bit)境界となり、タイルをメモリに配置する場合において、タイル間にメモリのギャップが不要である。ギャップがなければ、ギャップ分のメモリは不要で、連続的に転送可能であることから、メモリサイズを低減できるとともに高速転送が可能という効果を奏する。さらに16の倍数であれば、タイル幅のデータを常に128bitの倍数とすることができ(bitDepth=8bitの場合)、多くのメモリ(例えばDDR)のバーストアクセスで高速アクセスが可能となる。
ヘッダ復号部3020は、タイルユニット識別子(tile_unit_width_idc、tile_unit_height_idc)を復号せず、所定の値TileUnitをwUnitTile、hUnitTileに設定する。所定の値TileUnitはCTUの最小サイズ(最小CTUサイズ)であることが好ましい。この場合、タイル情報tile_info()は図4(d)に替えて図23(d)のように通知され、ヘッダ復号部3020はこのタイル情報を復号する。
hUnitTile = TileUnit
TileUnit = 1<<(log2_min_luma_coding_tree_block_size_minus4+4)
ここで、log2_min_luma_coding_block_size_minus4は、CTUの最小サイズの2のべき乗表現から4を引いた値である。例えば、0、1、2、3であれば各々最小CTUサイズは、16、32、64、128である。なお最小CTUサイズを定めるlog2_min_luma_coding_block_size_minus4は
シンタックス要素として符号化データで符号化しても良いし定数でもよい。例えば定数の場合には、通例最小CTUサイズは、16、32であるため(設定方法5)と一致する。
タイル情報は、0から所定の範囲の数のタイルユニット識別子であり、タイルの大きさの単位を最小CTUサイズの整数倍(2の指数乗)となるように、1<<(log2(最小CTUサイズ)+タイルユニット識別子)で設定する。(設定方法7)では、タイルユニット識別子は最小CTUサイズの倍数を対数表現したものである。すなわち、ヘッダ復号部3020は、tile_unit_width_idcを復号し、タイル単位を以下のように設定してもよい。
hUnitTile = 1<<(log2CtuUnitSize+tile_unit_height_idc)
ここで、CTUの最小サイズminCTU=ctuUnitSize=1<<(log2_min_luma_coding_tree_block_size_minus4+4)、log2CtuUnitSize=log2_min_luma_coding_tree_block_size_minus4+4であってもよい。
タイル情報は、0から所定の範囲の数のタイルユニット識別子であり、タイルの大きさの単位を最大CTUサイズ>>タイルユニット識別子で設定する。(設定方法8)では、タイルユニット識別子は最大CTUサイズの倍数(2のべき乗分の1倍)を対数表現したものである。すなわち、ヘッダ復号部3020は、tile_unit_width_idcを復号し、タイル単位を以下のように設定してもよい。
hUnitTile = ctuUnitSize>>tile_unit_height_idc
(設定方法9)
(設定方法9)では、図24(a)に示すように、tile_parameters()およびタイル情報tile_info()をPPSではなく、SPSで通知する。図24(c)に示すように、タイルの最小単位はlog2_min_unit_tile_size_minus3で通知される。ヘッダ復号部3020はこのタイル情報を復号し、タイルの最小単位(wUnitTile、hUnitTile)を導出する。
hUnitTile = 1<<(log2_min_unit_tile_size_minus3+3)
ここでlog2_min_unit_tile_size_minus3は、タイルの最小単位の最小値の2のべき乗表現から3を引いた値であり、0以上の整数である。従ってタイルの最小単位は8以上である。
タイル情報を復号し、タイルの最小単位(wUnitTile、hUnitTile)を導出する。
hUnitTile = 1<<( log2CtuSize + log2_diff_curr_min_unit_tile_size )
(設定方法10)
(設定方法10)では、(設定方法9)に対し、当該SPSでのタイルサイズの最小単位は当該SPSでのCTUサイズを超えない制約を設ける。従って、log2_diff_curr_min_unit_tile_sizeは下式を満たす値でなければならない。
(設定方法11)では、図26に示すように、tile_parameters()およびタイル情報tile_info()をPPSで通知する。図26(a)および(d)に示すように、タイルの最小単位はSPSで通知されるCTUの最小サイズおよびPPSで通知されるタイル情報(log2_diff_curr_min_unit_tile_size)を用いて導出される。log2_diff_curr_min_unit_tile_sizeは、タイルサイズの最小単位とCTUの最小サイズとの差分である。ヘッダ復号部3020はこのタイル情報を復号し、wUnitTile、hUnitTileを導出する。
hUnitTile = 1<<(log2CtuSize+log2_diff_curr_min_unit_tile_size)
(設定方法12)
(設定方法12)では、independent_tiles_flagを参照してTileUnitをwUnitTile、hUnitTileを導出する。independent_tiles_flag=1、すなわち各タイルを独立(他のタイルを参照せず)に処理できる場合は、そうでない場合よりもタイルのタイル単位(最小単位)を小さく設定する。例えば、(設定方法5)において、independent_tiles_flag=1の場合は所定の値TileUnitを8に設定し、independent_tiles_flag=0の場合は所定の値TileUnitを16に設定する。
(設定方法13)では、所定の値TileUnitを他の処理の単位に合わせて設定する。例えば予測の単位(サブCU)を所定の値TileUnitとして設定する。あるいはTMVP用に動きベクトルを格納する単位を所定の値TileUnitとして設定する。例えば、TMVP用の動きベクトル格納単位が8x8の場合、TileUnit=8に設定する。あるいは量子化パラメータを更新する単位を所定の値TileUnitとして設定する。例えば、差分量子化パラメータを通知する単位が16x16の場合、TileUnit=16に設定する。
(設定方法14)では、所定の値TileUnitを、タイルの水平方向については最小CTUサイズの整数倍ctuSize、垂直方向については8もしくは16に設定する。ヘッダ復号部3020はこのタイル情報を復号する。例えば下式でタイルの最小単位を設定する。
hUnitTile = 8
(タイル情報設定部)
タイル情報設定部は、タイルの最小単位wUnitTile、hUnitTileに基づいて、タイルの左上座標(xTile, yTile)を設定する。さらに、タイル情報設定部は、タイルのCTU単位の幅tileWidthInCtus(=TileWidthInCtbsY)と高さtileHeightInCtus(=TileHeightInCtbsY)を設定する。
タイルの最小単位wUnitTile、hUnitTileと画面幅wPict、hPictから、タイル単位(wUnitTile, hUnitTile)での画面幅wPictInUnitTile, hPictInUnitTileを導出する。
hPictInUnitTile = divRoundUp(hPict,hUnitTile)
ここでdivRoundUp(x,y) = (x+y-1)/y
つまり、xをyで除算した値以上の最小の整数を返す。すなわち、ceil(x/y)としてもよい。
タイル情報設定部は、タイル単位の位置(col, row)で示されるタイルのピクチャ内の左上座標(xTile, yTile)を導出する。以下、ピクチャ内の座標とは、ピクチャ左上を(0, 0)とするピクチャ座標系の座標であり、タイル内の座標とは、各タイルの左上を(0, 0)とするタイル座標系の座標を意味する。タイルのコラム位置colを0からタイルのコラム数numTileColumns-1までループし、最小単位wUnitTileを用いて、各colの各タイルのX座標tx[col]と幅tw[col]を導出する。同様に、タイルのrow位置rowを0からタイルのrow数numTileRows-1までループし、最小単位hUnitTileを用いて、各rowの各タイルのY座標ty[row]と高さth[row]を導出する。
numTileRows (= M x N)にタイル分割し、タイルサイズtw[col]、th[row]とタイルのX座標tx[col]、Y座標ty[row]を導出する。具体的には、以下の擬似コードのように、ピクチャの幅wPict、タイルのコラム数numTileColumnsを用いて、tx[col]、tw[col]を導出し、ピクチャの幅hPict、タイルのコラム数numTileRowsを用いて、ty[row]、th[row]を導出する。tyおよびtwは、前出のhTileおよびwTileとして先に求めておいた値を用いてもよい。なお、wPict-tx[col]とtw[col]についてmin()を適用しているのは、タイルが画面端を超える大きさにならないようにするためである。
{
tx[col] = wUnitTile*(col*wPictInUnitTile/numTileColumns)
tw[col] = wUnitTile*((col+1)*wPictInUnitTile/numTileColumns)-tx[col]
tw[col] = min(wPict-tx[col],tw[col])
}
for(row=0; row < numTileRows; row++)
{
ty[row] = hUnitTile*(row*hPictInUnitTile/numTileRows)
th[row] = hUnitTile*((row+1)*hPictInUnitTile/numTileRows)-ty[row]
th[row] = min(hPict-ty[row],th[row])
}
タイル情報設定部は、uniform_spacing_flagが0の場合には、タイルサイズwTile(col), hTile(row)を用いて画面を分割しタイルのX座標tx[col]、Y座標ty[row]を導出する。
具体的には、以下の擬似コードのように、ピクチャの幅wPictとタイルのコラム幅wTile[col]を用いて、tx[col]を導出し、ピクチャの高さhPict、タイルのロウ高さhTile[row]を用いて、ty[row]を導出する。
{
tw[col] = wTile[col] = (column_width_in_unit_minus1[col]+1)*wUnitTile
tx[col+1] = tx[col]+tw[col]
}
tw[numTileColumns-1] = wPict-tx[numTileColumns-1]
for(row=0;row<numTileRows-1;row++)
{
th[row] = hTile[row] = (column_height_in_unit_minus1[row]+1)*hUnitTile
ty[row+1] = ty[row]+th[row]
}
th[numTileRows-1] = hPict-ty[numTileRows-1]
タイル情報設定部は、導出されたタイルのX座標tx[col]、Y座標ty[row]とタイルサイズtw[col]、th[row]を、タイルIDで示されるタイルのピクチャ内左上座標xTile[TileId]、yTile[TileId]、タイルサイズwTile[TileId]、hTile[TileId]に格納する。
{
for(col=0;col<numTileColumns;col++)
{
TileId = row*numTileColumns+col
xTile[TileId] = tx[col]
yTile[TileId] = ty[row]
wTile[TileId] = tw[col]
hTile[TileId] = th[row]
tileWidthInCtus[TileId] = divRoundUp(tw[col],ctuWidth)
tileHeightInCtus[TileId] = divRoundUp(th[row],ctuHeight)
}
}
for(PicWidthInCtbsY=0,i=0;i<=num_tile_columns_minus1;i++)
PicWidthInCtbsY += tileWidthInCtus[i]
for(PicHeightInCtbsY=0,j=0;j<=num_tile_rows_minus1;j++)
PicHeightInCtbsY += tileHeightInCtus[j)]
なお、以下の表現でも一時変数は異なるが同じ動作であるのでタイル情報設定部は、以下の動作を行ってもよい。
for (i=0; i<= num_tile_columns_minus1;i++)
colWidth[i] = ((i+1)*wPictInUnitTile)/(num_tile_columns_minus1+1)-(i*hPictInUnitTile)/(num_tile_columns_minus1+1))
for (j=0; j<= num_tile_rows_minus1;j++)
rowHeight[j] = ((j+1)*hPictInUnitTile)/(num_tile_rows_minus1+1)-(j*hPictInUnitTile)/(num_tile_rows_minus1+1))
else {
colWidth[num_tile_columns_minus1] = wPictInUnitTile
for (i=0; i<= num_tile_columns_minus1;i++) {
colWidth[i] = column_width_minus1[i]+1
colWidth[num_tile_columns_minus1]-=colWidth[i]
}
rowHeight [num_tile_rows_minus1] = hPictInUnitTile
for (j=0; j<= num_tile_rows_minus1;j++) {
rowHeight[j] = row_height_minus1[j]+1
rowHeight[num_tile_rows_minus1]-=rowHeight[j]
}
}
}
for (colX[0]=0,i=0; i <= num_tile_columns_minus1; i++)
colX[i+1] = colX[i]+colWidth[i]*wUnitTile
for (colY[0]=0,j=0; j <= num_tile_rows_minus1; j++)
colY[j+1] = colY[j]+colRow[j]*hUnitTile
for (colBd[0]=0,i=0; i <= num_tile_columns_minus1; i++)
colBd[i+1] = colBd[i]+Ceil(colWidth[i]*wUnitTile÷ctuWidth)
for (rowBd[0]=0,j=0; j <= num_tile_rows_minus1;j++)
rowBd[j+1] = rowBd[j]+Ceil(rowHeight[j]*hUnitTile÷ctuHeight)
for(PicWidthInCtbsY=0,i=0;i<=num_tile_columns_minus1; i++)
PicWidthInCtbsY += Ceil(colWidth[i]*TileUnitSizeY÷ctuSize)
for(PicHeightInCtbsY=0,j=0;j<=num_tile_rows_minus1; j++)
PicHeightInCtbsY += Ceil(rowHeight[j]*TileUnitSizeY÷ctuSize)
なお、画面全体において以下のように導出しても良い。
col = i % ( num_tile_columns_minus1 + 1 )
row = i / ( num_tile_columns_minus1 + 1 )
TileWidth [ i ] = colWidth[ col ] * TileUnitSizeY
TileHeight [ i ] = rowHeight[ row ] * TileUnitSizeY
TileWidthInCtbsY[ i ] = Ceil( wTile [ i ] ÷ ctuSize )
TileHeightInCtbsY[ i ] = Ceil( hTile [ i ] ÷ ctuSize )
TileX[ i ] = TileColX[ col ]
TileY[ i ] = TileRowY[ row ]
TileXInCtbsY[ i ] = colBd[ col ]
TileYInCtbsY[ i ] = rowBd[ row ]
}
ここでTileUnitSizeY=wUnitTile=hUnitTile
上記により、スライスデータ(slice_segment_data())では、図4(b)で示すPPSで通知したタイル情報を用いて、ピクチャ上の(xTile,yTile)の位置から始まるタイルの情報をCTU単位で通知する。具体的には、ピクチャ上の(xTile,yTile)から始まる各タイルの左上座標(0,0)として、タイルを、CTU(幅ctuWidth、高さctuHeight)に分割し、各CTUの符号化データcoding_quadtree()を通知してもよい。
図1(e)には、処理対象のCTUを復号するために動画像復号装置31が参照するデータの集合が規定されている。CTUは、再帰的な4分木分割(QT(Quad Tree)分割)、2分木分割(BT(Binary Tree)分割)あるいは3分木分割(TT(Ternary Tree)分割)により符号化処理の基本的な単位である符号化ユニットCUに分割される。BT分割とTT分割を合わせてマルチツリー分割(MT(Multi Tree)分割)と呼ぶ。再帰的な4分木分割により得られる木構造のノードのことを符号化ノード(Coding Node)と称する。4分木、2分木、及び3分木の中間ノードは、符号化ノードであり、CTU自身も最上位の符号化ノードとして規定される。QT分割、BT分割、TT分割を合わせてCT分割と呼ぶ。
図1(f)に示すように、処理対象の符号化ユニットを復号するために動画像復号装置31が参照するデータの集合が規定されている。具体的には、CUは、CUヘッダCUH、予測パラメータ、変換パラメータ、量子化変換係数等から構成される。CUヘッダでは予測モード等が規定される。
予測画像は、ブロックに付随する予測パラメータによって導出される。予測パラメータには、イントラ予測とインター予測の予測パラメータがある。
本実施形態に係る動画像復号装置31(図5)の構成について説明する。
以下、各モジュールの概略動作を説明する。パラメータ復号部302はヘッダ情報、分割情報、予測情報、量子化変換係数等のパラメータの復号処理を行う。
図6は、動画像復号装置31の概略的動作を説明するフローチャートである。
図13は、符号化スライスデータを示す図である。パラメータ復号部302のCT情報復号部3021は、スライス(タイル)を構成するCTUを順に処理する。さらに、CT情報復号部3021は、図示しない対象CTU座標導出部を用いて、対象CTUのCTUラスタスキャンアドレスCtbAddrInRsから、CTUアドレステーブルCtbAddrToCtbX[]、CtbAddrToCtbY[]を参照して対象CTUの左上座標(xCtb, yCtb)を導出する。
yCtb = CtbAddrToCtbY[CtbAddrInRs]
CT情報復号部3021は対象CTUをルートとする符号化ツリーcoding_quadtree(xCtb,yCtb,log2CbSize,cqtDepth)を符号化データから再帰処理により復号する。
パラメータ復号部302は、スライスセグメントの終端か否かを示すフラグend_of_slice_segment_flagを復号し、次のCTUの処理の準備のためにCTUアドレスCtbAddrInTsを1だけインクリメントし(CtbAddrInTs++)、後続CTUのアドレスを導出する。さらに後続CTUに対応するCTUラスタスキャンアドレスを導出する(CtbAddrInRs = CtbAddrTsToRs[CtbAddrInTs])。ここでCtbAddrInTsは対象CTUのタイルスキャンアドレスである。
PicWidthInCtbsY += tileWidthInCtus[i]
PicHeightInCtbsYについても同様であり、以下の方法で導出する。
PicHeightInCtbsY += tileHeightInCtus[j]
タイルがCTUサイズの整数倍に限定される場合には、以下の方法で導出しても良い。
PicHeightInCtbsY = Ceil(hPict/ctuHeight)
ここでの除算(/)は小数精度とする。
CTUアドレステーブル導出部は、以下のステップにより、CTUラスタスキャンアドレス(CtbAddrInRs)からCTUの座標(xCtb, yCtb)を導出するCTUアドレステーブルCtbAddrToCtbX[]、CtbAddrToCtbY[]を導出する。
対象CTUのCTUラスタスキャンアドレスCtbAddrInRsからタイルID(TileId)を導出する。
ここでCtbAddrRsToTileIDは、タイルIDテーブル導出部で導出されるテーブルである。
CTUアドレステーブル導出部は、対象CTUを含むタイルの先頭CTUラスタスキャンアドレスfirstCtbAddrInRs[TileId]を導出し、ピクチャの幅に含まれるCTUの個数PicWidthInCtbsYを用いて、CTUを単位としたタイル内座標(xCtbInCtus, yCtbInCtus)を以下の式で導出する
xCtbInCtus = (CtbAddrInRs-firstCtbAddrInRs[TileId])%PicWidthInCtbsY
yCtbInCtus = (CtbAddrInRs-firstCtbAddrInRs[TileId])/PicWidthInCtbsY
ここでfirstCtbAddrInRsは、タイルIDで示されるタイルの先頭CTUラスタスキャンアドレスを導出するテーブルであり、先頭タイルアドレス導出部で導出される。
yCtbInTile = yCtbInCtus*ctuHeight
なお、CTUサイズの対数表示を用いて以下のように導出しても良い。
yCtbInTile = yCtbInCtus<<CtbLog2SizeY
(ステップ3)
CTUアドレステーブル導出部は、タイル内座標(xCtbInTile, yCtbInTile)とタイル左上のピクチャ内座標(xTile[TileId],yTile[TileId])の和から、ピクチャ内におけるCTUの左上座標(xCtb, yCtb)を導出する。
yCtb = yTile[TileId]+yCtbInTile
(ステップ4)
CTUアドレステーブル導出部は、最後に導出されたCtbAddrInRsに関するCTUの左上座標(xCtb, yCtb)をテーブルに格納する
CtbAddrToCtbX[CtbAddrInRs] = xCtb
CtbAddrToCtbY[CtbAddrInRs] = yCtb
上記の処理は、タイル左上CTUの位置(xTileInCtus, yTileInCtu)を用いて、以下のようにも表現できる。
yTileInCtus = firstCtbAddrInRs[TileId] / PicWidthInCtbsY
xCtb = (((CtbAddrInRs-xTileInCtus)%tileWidthInCtus[TileId])<<log2CtuWidthY)+xTile[TileId]
yCtb = (((CtbAddrInRs-yTileInCtus)/tileWidthInCtus[TileId])<<log2CtuHeightY)+yTile[TileId]
ここでlog2CtuWidthY=log2(ctuWidth)、log2CtuHeightY=log2(ctuHeight)である。タイル左上CTUの位置(xTileInCtus, yTileInCtu)やCTUの左上座標(xCtb,yCtb)はしばしば参照されるため、導出済みの値をテーブルに格納して用いてもよい。また、上記の導出を参照の都度行ってもよい。
{
TileId = CtbAddrRsToTileID[CtbAddrInRs]
xCtb = xTile[TileId]+((CtbAddrInRs-firstCtbAddrInRs[TileId])%PicWidthInCtbsY)* ctuUWidth
yCtb = yTile[TileId]+((CtbAddrInRs-firstCtbAddrInRs[TileId])/PicWidthInCtbsY) * ctuHeight
CtbAddrToCtbX[CtbAddrInRs] = xCtb
CtbAddrToCtbY[CtbAddrInRs] = yCtb
}
ここで、numCtusInFrameは1ピクチャ内のCTUの個数であり、numCtusInFrame=numTileColumns*numTileRowsである。
上記で説明したタイルのCTUの復号の方法について、xCtbとyCtbの導出にCTUアドレステーブルCtbAddrToCtbX[]およびCtbAddrToCtbY[]を用いず、別の方法を用いてもよい。次にその例を示す。
ry = CtbAddrInRs / PicWidthInCtbsY
xCtb = CtbColToCtbX[rx]
yCtb = CtbRowToCtbY[ry]
図30(a)のcoding_tree_unit()は、この変形例の導出方法を用いたシンタックスの例である。対象CTの左上座標(xCtb,yCtb)を、CTU座標変換テーブルを用いて導出し、coding_quadtree()に左上座標(xCtb,yCtb)を渡す。図30(b)に示すように、タイルが利用可能な場合(tile_enabled_flagが真)と、そうでない場合とで、導出方法を変更してもよい。
CTU座標変換テーブル導出部は、以下のステップにより、CTU単位のX座標およびCTU単位
のY座標(rx, ry)からCTUの画素単位の座標(xCtb, yCtb)を導出するCTU座標変換テーブルCtbColToCtbX[]、CtbRowToCtbY[]を導出する。
CTU座標変換テーブル導出部は、CTU単位のX座標rxから、タイルIDを導出する。このとき、すべてのY座標についてこのテーブルは同じであるため、CTU単位のY座標(CTUのrow位置)は0とする。したがって、
TileId = CtbAddrRsToTileID[rx]
ここでCtbAddrRsToTileIDは、タイルIDテーブル導出部で導出されるテーブルである。
CTU座標変換テーブル導出部は、対象CTUを含むタイルの先頭CTUラスタスキャンアドレスfirstCtbAddrInRs[TileId]を導出し、CTUを単位としたタイル内座標xCtbInCtusを以下の式で導出する。
ここでfirstCtbAddrInRsは、タイルIDで示されるタイルの先頭CTUラスタスキャンアドレスを導出するテーブルであり、先頭タイルアドレス導出部で導出される。
テーブルfirstCtbCol[]は、先頭タイルアドレス導出部で、次のように導出する。
次に、CTU座標変換テーブル導出部は、xCtbInCtusにCTUサイズctuWidthをかけて、画素単位のタイル内座標xCtbInTileを以下の式で導出する。
(ステップ3x)
CTU座標変換テーブル導出部は、タイル内X座標xCtbInTileとタイル左上X座標のピクチャ内座標xTile[TileId]の和から、ピクチャ内におけるCTUの左上X座標xCtbを導出する。
(ステップ4x)
最後に、CTU座標変換テーブル導出部は、導出されたrxに関するCTUの左上X座標xCtbをテーブルに格納する。
上記の処理は、タイル左上CTUのX座標xTileInCtusを用いて、以下のようにも表現できる。
xCtb = ((rx-xTileInCtus)<<log2CtuWidthY)+xTile[TileId]
ここでlog2CtuWidthY=log2(ctuWidth)である。タイル左上CTUのX座標xTileInCtusやCTUの左上X座標xCtbはしばしば参照されるため、このように導出済みの値をテーブルに格納
して用いてもよいし、上記の導出を参照の都度行ってもよい。
{
TileId = CtbAddrRsToTileID[col]
xCtb = xTile[TileId]+((rx-firstCtbAddrInRs[TileId])%PicWidthInCtbsY)* ctuWidth
CtbColToCtbX[col] = xCtb
}
X座標に関するテーブルと同様に、CTU座標変換テーブル導出部は、CTU単位のY座標ryを0からnum_tile_rows_minus1までループし、以下のステップを実行する。
CTU座標変換テーブル導出部は、CTU単位のY座標ryから、タイルIDを導出する。このとき、すべてのX座標についてこのテーブルは同じであるため、CTU単位のX座標(CTUのcol位置)は0とする。したがって、
TileId = CtbAddrRsToTileID[ry*PicWidthInCtbsY]
ここでCtbAddrRsToTileIDは、タイルIDテーブル導出部で導出されるテーブルである。
CTU座標変換テーブル導出部は、対象CTUを含むタイルの先頭CTUラスタスキャンアドレスfirstCtbAddrInRs[TileId]を導出し、CTUを単位としたタイル内座標yCtbInCtusを以下の式で導出する。
ここでfirstCtbAddrInRsは、タイルIDで示されるタイルの先頭CTUラスタスキャンアドレスを導出するテーブルであり、先頭タイルアドレス導出部で導出される。
テーブルfirstCtbRow[]は、先頭タイルアドレス導出部で、次のように導出する。
次に、CTU座標変換テーブル導出部は、yCtbInCtusにCTUサイズctuHeightをかけて、画素単位のタイル内座標yCtbInTileを以下の式で導出する。
(ステップ3y)
CTU座標変換テーブル導出部は、タイル内Y座標yCtbInTileとタイル左上Y座標のピクチャ内座標yTile[TileId]の和から、ピクチャ内におけるCTUの左上Y座標yCtbを導出する。
(ステップ4y)
最後に、CTU座標変換テーブル導出部は、導出されたryに関するCTUの左上Y座標yCtbをテーブルに格納する。
上記の処理は、タイル左上CTUのy位置yTileInCtusを用いて、以下のようにも表現できる。
yCtb = ((ry-yTileInCtus)<<log2CtuHeightY)+yTile[TileId]
ここでlog2CtuHeightY=log2(ctuHeight)である。タイル左上CTUのY座標yTileInCtusやCTUの左上Y座標yCtbはしばしば参照されるため、このように導出済みの値をテーブルに格納して用いてもよいし、上記の導出を参照の都度行ってもよい。
{
TileId = CtbAddrRsToTileID[row*PicWidthInCtbsY]
yCtb = yTile[TileId]+((ry-firstCtbAddrInRs[TileId])/PicWidthInCtbsY)* ctuHeight
CtbRowToCtbY[row] = yCtb
}
なお、CtbAddrInTsとCtbAddrInRsは互いに変換可能であるため、上記実施例のうちラスタスキャン順CTU位置CtbAddrInRsを添字とするテーブルは、タイルスキャン順CTU位置CtbAddrInTsを添字として導出し、参照時の添字もタイルスキャン順CTU位置に変換したものを用いて構成することも可能である。同様に、タイルスキャン順CTU位置CtbAddrInTsを添字とするテーブルは、ラスタスキャン順CTU位置CtbAddrInRsを添字として導出し、参照時の添字もラスタスキャン順CTU位置に変換したものを用いて構成することも可能である。
tileId = CtbAddrRsToTileId[ ctbAddrRs ]
tbX = ctbAddrRs % PicWidthInCtbsY
tbY = ctbAddrRs / PicWidthInCtbsY
CtbAddrRsToTs[ ctbAddrRs ] = 0
for( t = 0; t < tileId; t++ ) {
CtbAddrRsToTs[ctbAddrRs] += TileWidthInCtbsY[tileId]*TileHeightInCtbsY[tileId]
}
CtbAddrRsToTs[ctbAddrRs] += (tbY-TileYInCtbsY[tileId])*TileWidthInCtbsY[tileId]+
tbX-TileXInCtbsY[tileId]
}
以上の構成により、画像をCTUに分割し、CTU単位に動画像を復号する動画像復号装置において、タイルをCTUに分割して再帰的に分割するCT情報復号部を備え、対象CTUのラスタスキャンアドレスから、1つ以上のタイルのサイズを参照して、対象CTUのピクチャ上の左上座標を導出するヘッダ復号部(対象CTU座標導出部)を備え、上記CT情報復号部は、導出された対象CTUのピクチャ上の左上座標に基づいて、対象CTUを符号化ツリーに分割し、分割されたCTの右下位置のタイル内座標がタイルサイズ
以内である場合に、符号化ツリーを処理する手段を備える。
対象CTUのラスタスキャンアドレスから、対象CTUの左上座標を導出するCTUアドレステーブルを参照するヘッダ復号部(対象CTU座標導出部)を備え、上記CTUアドレステーブルを、1つ以上のタイルのサイズから導出するヘッダ復号部(CTUアドレステーブル導出部)を備える。
タイルIDテーブル導出部は以下のステップでタイルIDテーブルCtbAddrRsToTileID[]を導出する。
画面内CTUアドレスCtbAddrInRsに対応するCTUのタイル座標(columnIdx,rowIdx)を導出する。
タイル座標(columnIdx, rowIdx)から画面内タイルIDを導出する。
ここでnumTileColumnsはピクチャ内の水平方向のタイルの個数である。
導出したタイルIDをタイルIDテーブルCtbAddrRsToTileID[]に格納する。
上記の処理の擬似コードを以下に示す。
{
for(col=0;col<numTileColumns;col++)
{
if(CtbAddrInRs%PicWidthInCtbsY<=rightEdgePosInCtus[col])
{
columnIdx = col
break
}
}
for(row=0;row<numTileRows;row++)
{
if(CtbAddrInRs/PicWidthInCtbsY<=bottomEdgePosInCtus[row*numTileColumns])
{
rowIdx = row
break
}
}
CtbAddrRsToTileID[CtbAddrInRs] = rowIdx*numTileColumns+columnIdx
}
(先頭タイルアドレス導出部)
先頭タイルアドレス導出部は以下のステップで先頭タイルアドレステーブルfirstCtbAd
drInRs[]を導出する。
タイル単位の座標で(col, row)に対応するTileIdについて、col列までの各タイルi(0<=i<col)のCTU単位の幅tileWidthInCtus[i]を参照して、TileIdの示すタイルのCTU単位の右端位置rightEdgePosInCtus[TileId]を導出する。同様に、row列までの各タイルj(0<=j<row)のCTU単位の高さtileHeightInCtus[j]を参照して、TileIdの示すタイルのCTU単位の下端位置bottomEdgePosInCtus[TileId]を導出する。
TileIdで示すタイルのCTU単位の右端位置rightEdgePosInCtus[TileId]、および、TileIdで示すタイルのCTU単位の幅tileWidthInCtus[TileId]から、TileIdで示すタイルのCTU単位の左端位置xCtbInCtusを導出する。
yCtbInCtus = bottomEdgePosInCtus[TileId]-tileHeightInCtus[TileId]+1
TileIdで示すCTU単位のタイル左上画素の画面内位置(xCtbInCtus, yCtbInCtus)から、CTUラスタスキャンアドレスCtbAddrInRsを導出する。
ここで、tileWidthInCtus[]、tileHeightInCtus[]はタイル情報設定部が導出する。
導出したCTUアドレスを先頭タイルアドレステーブルfirstCtbAddrInRs[]に格納する
firstCtbAddrInRs[TileId] = CtbAddrInRs
上記の処理の擬似コードを以下に示す。
{
for(col=0; col < numTileColumns; col++)
{
TileIdx = row*numTileColumns+col;
rightEdgePosInCTU = 0;
for(i=0; i <= col; i++)
{
rightEdgePosInCTU += tileWidthInCtus[row*numTileColumns+i]
}
rightEdgePosInCtus[TileId] = rightEdgePosInCTU-1
bottomEdgePosInCTU = 0;
for(i=0 ;i <= row; i++)
{
bottomEdgePosInCTU += tileHeightInCtus[i*numTileColumns+col]
}
bottomEdgePosInCtus[tileId] = bottomEdgePosInCTU-1
xCtbInCtus = rightEdgePosInCtus[TileId]-tileWidthInCtus[TileId]+1
yCtbInCtus = bottomEdgePosInCtus[TileId]-tileHeightInCtus[TileId]+1
CtbAddrInRs = yCtbInCtus*PicWidthInCtbsY+xCtbInCtus
firstCtbAddrInRs[TileId] = CtbAddrInRs
}
}
(CT情報復号の処理)
以下、CT情報復号の処理を、図7、図8、図9を参照して説明する。図7は、本発明の一実施形態に係るCT情報復号部3021の動作を説明するフローチャートである。また、図8は、本発明の一実施形態に係るCTUおよびQT情報のシンタックス表の構成例を示す図であり、図9は、本発明の一実施形態に係るMT分割情報のシンタックス表の構成例を示す図である。また図7〜図9の別の例を、図27〜図29に示す。
xCtb = xTile[TileId]+(rx-TileXInCtbsY[CurrTileId]) <<CtbLog2SizeY
yCtb = yTile[TileId]+(ry-TileYInCtbsY[CurrTileId]) <<CtbLog2SizeY
逆に、タイルを利用しない場合には、CTU左上座標(xCtb, yCtb)を、CTU単位のCTUの画面内座標から導出する。つまり、タイル内のCTU左上座標は、CTU単位のCTUの画面内座標(rx, ry)にCTUサイズをかける(CtbLog2SizeYで左シフトする)。
ry = CtbAddrInRs / PicWidthInCtbsY
xCtb = rx << CtbLog2SizeY
yCtb = ry << CtbLog2SizeY
また、タイルを利用しない場合も、画面全体が一つのタイルであるとして、タイルの利用する利用しないに限らずに処理をしてもよい。
(ピクチャ内座標系を用いたフレキシブルタイルのCT分割)
CT情報復号部3021は符号化データからCT情報を復号し、再帰的に符号化ツリーCT(coding_quadtree)を復号する。具体的には、CT情報復号部3021はQT情報を復号し、対象CT coding_quadtree(x0,y0,log2CbSize,cqtDepth)を復号する。なお、(x0,y0)は対象CTの左上座標、log2CbSizeはCTのサイズであるCTサイズの2を底とした対数である対数CTサイズ、cqtDepthはCTの階層を示すCTデプス(QT深度)である。
ここで、下式のように、タイルを用いる場合にはCTUの左上座標(xCtb,yCtb)とタイルサイ
ズを考慮して、さらなる四分木分割を実施するか否かを示すsplit_cu_flagを通知する。
split_cu_flag[x0][y0]
ここで、(x0,y0)はブロックの左上座標、(xTile,yTile)はタイルの左上座標、log2CbSizeはブロックサイズの対数値、wTとhTはタイル有効領域(もしくはタイル符号化領域)の幅と高さ、MinCbLog2SizeYはブロックの最小サイズの対数値である。
if (x1-xTile[TileId] < wTile[TileId])
coding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1)
if (y1-yTile[TileId] < hTile[TileId])
coding_quadtree(x0,y1,log2CbSize-1,cqtDepth+1)
if (x1-xTile[TileId] < wTile[TileId] && y1-yTile[TileId] < hTile[TileId])
coding_quadtree(x1,y1,log2CbSize-1,cqtDepth+1)
上記に置いて、例えば、4分木分割で得られた、(x1,y0)に位置するブロックであるcoding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1,wTile,hTile,xTile,yTile)は、以下のようにx1がタイル内に位置する場合に符号化あるいは復号される。
coding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1)
ここで、(x0,y0)は対象CTの左上座標、(x1,y1)は以下の式のように(x0,y0)にCTサイズ(1<<log2CbSize)の1/2を加えて導出される。
y1 = y0+(1<<(log2CbSize-1))
1<<Nは2のN乗と同値である(以下同様)。
log2CbSize = log2CbSize-1
CT情報復号部3021は、下位のCTにおいても、更新された左上座標、対数CTサイズ、CTデプスを用いて、S1411から開始されるQT情報復号を継続する。
if (y1-yTile[TileId] < hTile[TileId])
coding_multitree(x0,y1,log2CbWidth,log2CbHeight-1,cbtDepth+1)
一方、MT分割方向split_dir_flagが0(垂直分割)の場合は、以下の2つのCTを復号(BT分割情報復号)する。タイル内でのCT(x1, y0)の右座標x1-xTile[TileId]がタイルサイ
ズwTile[TileId]未満のCTを復号する。逆に、タイル内での各CTの右座標x1-xTile[TileId]がタイルサイズwTile[TileId]以上のCTは復号しない。
if (x1-xTile[TileId] < wTile[TileId])
coding_multitree(x1,y0,log2CbWidth-1,log2CbHeight,cbtDepth+1)
ここで、(x1,y1)は以下の式で導出される。
y1 = y0+(1<<(log2CbHeight-1))
さらに、log2CbWidth、または、log2CbHeightを下式のように更新する。
log2CbHeight = log2CbHeight-1
CT情報復号部3021は、MT分割タイプsplit_mt_typeが1(3分割)を示す場合には、3つのCTを復号(TT分割情報復号)する。
if (y1-yTile[TileId] < hTile[TileId])
coding_multitree(x0,y1,log2CbWidth,log2CbHeight-1,cbtDepth+1)
if (y2-yTile[TileId] < hTile[TileId])
coding_multitree(x0,y2,log2CbWidth,log2CbHeight-2,cbtDepth+1)
一方、MT分割方向split_dir_flagが1(垂直分割)の場合は、以下の3つのCTを復号(TT分割情報復号)する。タイル内でのi=0, 1の各CT(xi, y0)の右座標xi-xTile[TileId]がタイルサイズwTile[TileId]未満のCTを復号する。逆に、タイル内での各CTの右座標xi-xTile[TileId]がタイルサイズwTile[TileId]以上のCTは復号しない。
if (x1-xTile[TileId] < wTile[TileId])
coding_multitree(x1,y0,log2CbWidth-1,log2CbHeight,cbtDepth+1)
if (x2-xTile[TileId] < wTile[TileId])
coding_multitree(x2,y0,log2CbWidth-2,log2CbHeight,cbtDepth+1)
ここで、(x1,y1)、(x2,y2)は、以下の式のように、導出される。
y1 = y0+(1<<(log2CbHeight-2))
x2 = x0+(3<<(log2CbWidth-2))
y2 = y0+(3<<(log2CbHeight-2))
CT情報復号部3021は、下位のCTにおいても、更新された左上座標、CTの幅及び高さ、MT深度を用いて、S1471から開始されるBT分割情報復号、あるいは、TT分割情報復号を継続する。
図31のシンタックステーブルを用いてタイル分割の別の例を説明する。この例では、画面を矩形のタイルに分割し、タイルをグループとした単位を用いて符号化データを構成する。タイルの左上座標はxTile, yTile、タイルの幅、高さはwTile, hTileである。タイルの先頭位置を格納するテーブルFirstCtbAddrTsとタイルグループの位置tile_group_addressから、先頭タイルのCTUアドレスctbAddrInTsを導出する。0からnum_tiles_in_tile_group_minus1までのタイルを復号する。num_tiles_in_tile_group_minus1は、ピクチャ内のタイルの個数から1を引いた値である。TileIdで示される各タイルについて0からNumCtusInTile[tileIdx]までのCTUを復号する。タイルの終端でend_of_tile_one_bitとバイトアライン用ビットbyte_alignment()を復号する。またタイル内におけるCTU位置jをcoding_tree_unitの引数としてCTUを復号する。jは、CtbAddrInTileの値として設定される。
(CTU以下の復号)
(タイル内座標系を用いたフレキシブルタイルのCT分割)
図7、図32、図33のシンタックステーブルを復号する場合のCT情報復号部3021の動作を説明する。本構成のタイル左上の座標を原点とするタイル内座標系を用いて、CTU座標(xCtb, yCtb)を導出し、そのCTU座標とタイルサイズ(wTile, hTile)に基づいて再帰的にCT情報及びMT分割情報を復号して、CT情報を復号する。
ここで、下式のように、タイルを用いる場合にはタイル内座標系におけるCTの左上座標 (x0,y0)とタイルサイズを考慮して、さらなる四分木分割を実施するか否かを示すqt_split_cu_flagが通知される。
((y0+(1<<log2CbSize) <= hTile[TileId])?1:0)+
(((1<<log2CbSize) <= MaxBtSizeY)?1:0)) >= 2 &&
log2CbSize > MinQtLog2SizeY)
qt_split_cu_flag[x0][y0]
つまり、ブロックの右端の座標x0+(1<<log2CbSize)、下端の座標y0+(1<<log2CbSize)の両方が、タイル幅wTileとタイル高さhTile以下の場合、
(x0+(1<<log2CbSize) <= wTile[TileId])?1:0)+
((y0+(1<<log2CbSize) <= hTile[TileId])?1:0)>=2
もしくは、ブロックの右端の座標x0+(1<<log2CbSize)がタイル幅wTile以下で、CTサイズが最大BTサイズMaxBtSizeY以上の場合、
(x0+(1<<log2CbSize) <= wTile[TileId])?1:0)+
(((1<<log2CbSize) <= MaxBtSizeY)?1:0)) >= 2
もしくは、ブロックの下端の座標y0+(1<<log2CbSize)がタイル高さhTile以下で、CTサイズが最大BTサイズMaxBtSizeY以上の場合、
(y0+(1<<log2CbSize) <= hTile[TileId])?1:0)+
(((1<<log2CbSize) <= MaxBtSizeY)?1:0)) >= 2
の場合に、QT分割フラグqt_split_cu_flagを符号化データから復号する。
y0+(1<<log2CbSize) > hTile[TileId] && (1<<log2CbSize) > MaxBtSizeY
以下の全てが真の場合、qt_split_cu_flagに1を導出する。
y0+(1<<log2CbSize) > hTile[TileId]
(1<<log2CbSize) > MinQtSizeY
上記以外の場合、qt_split_cu_flagに1を導出する。
ile[TileId])がタイルサイズ(wTile[TileId], hTile[TileId])以下のCTを復号する。逆に、各CTの右下座標(xi, yi)の何れかがタイルサイズ(wTile[TileId], hTile[TileId])より大きいCTは復号しない。すなわち、CT情報復号部3021は、対象CTUを再帰的に符号化ツリーに分割し、分割されたCTの左上座標(x1, y0)、(x0, y1)、(x1, y1)が対象タイル内である場合に、符号化ツリーを処理する。
if (x1 < wTile[TileId])
coding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1)
if (y1 < hTile[TileId])
coding_quadtree(x0,y1,log2CbSize-1,cqtDepth+1)
if (x1 < wTile[TileId] && y1 < hTile[TileId])
coding_quadtree(x1,y1,log2CbSize-1,cqtDepth+1)
上記において、例えば、4分木分割で得られた、(x1,y0)に位置するブロックであるcoding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1)は、以下のようにx1がタイル内に位置する場合に符号化あるいは復号される。
coding_quadtree(x1,y0,log2CbSize-1,cqtDepth+1)
ここで、(x0,y0)は対象CTの左上座標、(x1,y1)は以下の式のように(x0,y0)にCTサイズ(1<<log2CbSize)の1/2を加えて導出される。
y1 = y0+(1<<(log2CbSize-1))
1<<Nは2のN乗と同値である(以下同様)。
log2CbSize = log2CbSize-1
CT情報復号部3021は、下位のCTにおいても、更新された左上座標、対数CTサイズ、CTデプスを用いて、S1411から開始されるQT情報復号を継続する。
&& (x0+cbWidth<=wTile[TileId]) && (y0+cbHeight<=hTile[TileId])
ここで、allowSplitBtVer、allowSplitBtHorは以下の処理により導出する。
・cbSize <= MinBtSizeY
・cbWidth > MaxBtSizeY
・cbHeight > MaxBtSizeY
・mttDepth >= MaxMttDepth + depthOffset
上記以外で以下の全てが真の場合、allowBtSplitを偽とする。
・btSplit = SPLIT_BT_VER
・y0 + cbHeight > hTile[TileId]
上記以外で以下の全てが真の場合、allowBtSplitを偽とする。
・btSplit = SPLIT_BT_HOR
・x0 + cbWidth > wTile[TileId]
上記以外で以下の全てが真の場合、allowBtSplitを偽とする。
・mttDepth > 0
・partIdx = 1
・MttSplitMode[ x0 ][ y0 ][ mttDepth - 1 ] = parallelTtSplit
上記以外の場合、allowBtSplitを真とする。
・allowBtSplit = TRUE
ここでcbSize、parallelTtSplitは、以下のように設定する。
SPLIT_BT_HOR(allowSplitBtHor)の場合、cbSize=cbHeight、parallelTtSplit=SPLIT_TT_HOR
なお、allowSplitTtVer、allowSplitTtHorは以下の処理により導出する。
・cbSize <= 2 * MinTtSizeY
・cbWidth > MaxTtSizeY
・cbHeight > MaxTtSizeY
・mttDepth >= MaxMttDepth + depthOffset
・x0 + cbWidth > wTile[TileId]
・y0 + cbHeight > hTile[TileId]
上記以外の場合、allowTtSplit(allowTtSplirHor, allowTtSplirVer)を真とする。
・allowTtSplit = TRUE
ここでcbSizeは、以下のように設定する。
SPLIT_TT_HOR(allowSplitTtHor)の場合、cbSize=cbHeight
すなわち、CT右座標がタイルサイズ幅を超えるか、CT下座標がタイルサイズ高さを超えいるかに応じて、MT分割フラグを符号化するか否かを決定する。
・x0 + cbWidth > wTile[TileId]
・x0 + cbHeight > hTile[TileId]
上記以外の場合、mtt_split_cu_flagに0を導出する。すなわち、タイル内座標におけるCTの右端および下端座標がタイルサイズを超える場合には、MT分割フラグを復号しない。
&& allowSplitTtHor && !mtt_split_cu_vertical_flag)には、MT分割が2分木であるか3分木であるかを示すシンタックス要素mtt_split_cu_binary_flagを復号する。CT情報復号部3021は、分割されたCTの左上座標が対象タイル内である場合に、符号化ツリーを処理する。CTの左上座標は2分木では、(x0, y1)もしくは(x1, y0)、3分木では(x0, y1), (x0, y2)もしくは(x1, y0), (x2, y0)である。ここで先頭CTの左上座標(x0, y0)がタイル外にある場合には分割自体が行われないため、(x0, y0)は常にタイル内であると仮定する。
if (y1 < hTile[TileId])
multi_type_tree(x0,y1,cbWidth,cbHeight/2,mttDepth+1,depthOffset,1,treeType)
一方、MT分割方向split_dir_flagが0(垂直分割)の場合は、以下の2つのCTを復号(BT分割情報復号)する。タイル内でのCT(x1,y0)の右座標x1がタイルサイズwTile[TileId]未満のCTを復号する。逆に、タイル内での各CTの右座標x1がタイルサイズwTile[TileId]以上のCTは復号しない。
if (x1 < wTile[TileId])
multi_type_tree(x1,y0,cbWidth/2,cbHeightY,mttDepth+1,depthOffset,1,treeType)ここで、(x1,y1)は以下の式で導出される。
y1 = y0+(cbHeight/2)
さらに、log2CbWidth、または、log2CbHeightを下式のように更新する。
CbHeight = CbHeight/2
CT情報復号部3021は、MT分割タイプsplit_mt_typeが1(3分割)を示す場合には、3
つのCTを復号(TT分割情報復号)する。
if (y1 < hTile[TileId])
multi_type_tree(x0,y1,cbWidth,cbHeight/2,mttDepth+1,depthOffset,1,treeType)
if (y2 < hTile[TileId])
multi_type_tree(x0,y2,cbWidth,cbHeight/4,mttDepth+1,depthOffset,2,treeType)
一方、MT分割方向split_dir_flagが1(垂直分割)の場合は、以下の3つのCTを復号(TT分割情報復号)する。タイル内でのi=0, 1の各CT(xi, y0)の右座標xiがタイルサイズwTile[TileId]未満のCTを復号する。逆に、タイル内での各CTの右座標xiがタイルサイズwTile[TileId]以上のCTは復号しない。
if (x1 < wTile[TileId])
multi_type_tree(x1,y0,cbWidth/2,cbHeight,mttDepth+1,depthOffset,1,treeType)
if (x2 < wTile[TileId])
multi_type_tree(x2,y0,cbWidth/4,cbHeight,mttDepth+1,depthOffset,2,treeType)
ここで、(x1,y1)、(x2,y2)は、以下の式のように、導出される。
y1 = y0+(3*cbHeight/4)
x2 = x0+(cbWidth/4)
y2 = y0+(3*cbWidth/4)
CT情報復号部3021は、下位のCTにおいても、更新された左上座標、CTの幅及び高さ、MT深度を用いて、S1471から開始されるBT分割情報復号、あるいは、TT分割情報復号を継続する。
図35はマルチラインイントラ予測を示す図である。イントラ予測パラメータ復号部304
及びイントラ予測パラメータ符号化部113は、マルチラインイントラ予測パラメータを復号もしくは符号化する。イントラ予測画像生成部310においては、シンタックス要素intra_luma_ref_idxに応じて、対象ブロック境界から隣接する参照画素のうち、どのラインを参照するかを選択する。例えば図35(a)のように、intra_luma_ref_idxが0, 1, 2の場合、参照ピクチャのラインを示すインデックスIntraLumaRefLineIdx(refIdx)を0, 1, 3に設定する。つまり、対象ブロックからみて近い順に0, 1, 3のラインを参照する。
-1-refIdx
ここでrefW, refHは、以下の式で導出する。
refH = (nTbW>nTbH) ? (nTbH+(nTbW>>whRatio)+Ceil(nTbW/32)) : (nTbH*2)
ここで、nTbW, nTbHは対象ブロックのサイズ、whRatioは、Min(Abs(Log2(nTbW/nTbH), 2)で導出される値で、対象ブロックのサイズの縦横比が大きくなるほど大きくなる値で、正方形の場合に0、nTbH:nTbWが1:2の場合に1, 1:4の場合に2となる値である。
predV[x][y] = ((nTbH-1-y)*p[x][-1]+(y+1)*p[-1][nTbH])<<Log2(nTbW)
predH[x][y] = ((nTbW-1-x)*p[-1][y]+(x+1)*p[nTbW][-1])<<Log2(nTbH)
predSamples[x][y] = (predV[x][y]+predH[x][y]+nTbW*nTbH)>>(Log2(nTbW)+Log2(nTbH)+1)
以上の構成のイントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113によれば、タイル単位サイズの整数倍のタイルサイズを復号あるいは符号化し、タイル内座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行い、タイル内座標(対象タイルの左上座標を基準とする対象ブロックの左上座標)を用いてCTU境界の判定を行うことで、タイルサイズがCTUの整数倍ではない場合においても、容易にCTU境界において追加のラインメモリを利用することなく、マルチラインイントラ予測が可能となる効果を奏する。
if (x1-xTile[TileId] < wTile[TileId])
coding_quadtree( x1, y0, log2CbSize-1, cqtDepth+1, treeType)
if (y1-yTile[TileId] < hTile[TileId])
coding_quadtree( x0, y1, log2CbSize-1, cqtDepth+1, treeType)
このように、ピクチャ内座標からタイル左上座標を引くことで導出されたタイル内座標をもとに、CT分割を行ってもよい。
イントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113は、左上座標(xCb, yCb)、サイズ(cbWidth, cbHeight)の対象ブロックの左と上に各々隣接する隣接ブロックA, Bの位置(xNbA, yNbA)、(xNbB, yNbB)を以下で導出する。
(xNbA, yNbA) = (xCb+cbWidth-1, yCb-1)
イントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113は、ブロックA, Bのイントラ予測モードである隣接イントラ予測モードcandIntraPredModeA、candIntraPredModeBを導出する。具体的には、X=AもしくはBにおいて、以下の条件が1つでも真の場合に、隣接イントラ予測モード(candIntraPredModeA, candIntraPredModeB)にプレーナモードを設定する。
・Xの位置(xNbX, yNbX)が画面外やタイル外であり利用可能(available)ではない。
・Xの位置(xNbX, yNbX)の予測モードCuPredModeがイントラ(MODE_INTRA)ではない。
・Xが上の隣接ブロックBであり、XのY座標(yCb)がCTU境界よりも上にある。
設定する。なお、フレキシブルタイルの場合のCTU境界判定については後述する。
イントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113は、以下の式でMPMリストcandModeListを導出しても良い。
最初に以下の式で初期リストを導出する。
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = !candIntraPredModeA
candModeList[ 2 ] = INTRA_ANGULAR50
candModeList[ 3 ] = INTRA_ANGULAR18
candModeList[ 4 ] = INTRA_ANGULAR46
candModeList[ 5 ] = INTRA_ANGULAR54
もしcandIntraPredModeBとcandIntraPredModeAが等しい場合には、以下を行う。
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = INTRA_PLANAR
candModeList[ 2 ] = INTRA_DC
candModeList[ 3 ] = 2+((candIntraPredModeA+62)%65)
candModeList[ 4 ] = 2+((candIntraPredModeA-1)%65)
candModeList[ 5 ] = 2+((candIntraPredModeA+61)%65)
上記以外(もしcandIntraPredModeBとcandIntraPredModeAが等しくない場合)、当該2つの隣接予測モードをエントリ0, 1に格納する。
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = candIntraPredModeB
biggerIdx = candModeList[0]>candModeList[1] ? 0 : 1
さらに、candIntraPredModeAとcandIntraPredModeBが両方とも1より大きい場合(2つの隣接予測モードが両方ともAngular予測(方向予測)の場合)、以下のようにリストを更新する。
candModeList[ 2 ] = INTRA_PLANAR
candModeList[ 3 ] = INTRA_DC
さらに、candModeList[biggerIdx]-candModeList[!biggerIdx]が64もしくは1の場合(つまり2つの隣接予測モードの違いが-1もしくは1の場合)、以下を行い、4と5のエントリに、隣接予測モードの-2, +2のイントラ予測モードを格納する。
candModeList[ 4 ] = 2+((candModeList[biggerIdx]+62)%65)
candModeList[ 5 ] = 2+((candModeList[biggerIdx]-1)%65)
candModeList[biggerIdx]-candModeList[!biggerIdx]が64もしくは1以外の場合、以下を行い、4と5のエントリに、隣接予測モードの-1, +1のイントラ予測モードを格納する。
candModeList[ 4 ] = 2+((candModeList[biggerIdx]+61)%65)
candModeList[ 5 ] = 2+(candModeList[biggerIdx]%65)
上記以外で、candIntraPredModeAとcandIntraPredModeの和が2以上の場合(2つの隣接予測モードがDCモードとプレーナモードではない場合)、以下を行う。3, 4と5のエントリに、隣接予測モードの-1, +1, -2のイントラ予測モードを格納する。
candModeList[ 2 ] = !candModeList[!biggerIdx]
candModeList[ 3 ] = 2+((candModeList[biggerIdx]+62)%65)
candModeList[ 4 ] = 2+((candModeList[biggerIdx]-1)%65)
candModeList[ 5 ] = 2+((candModeList[biggerIdx]+61)%65)
(フレキシブルタイルにおけるMPM導出における隣接イントラ予測モードの導出)
図42は、ピクチャをCTUの整数倍に制限されないサイズのタイルに分割する場合における、MPM導出処理を示すフローチャートである。S5001、S5002は、S4001、S4002と同じ処理であるため説明を省略する。
なお、上記の判定式にさらに、以下の判定式の何れかが真の場合を加えてもよい。
・Xの位置が画面外やタイル外であり利用可能(available)ではない。
・Xの位置(xNbX, yNbX)の予測モードCuPredModeがイントラ(MODE_INTRA)ではない。
イントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113は、以下の条件が真の場合に、隣接イントラ予測モード(candIntraPredModeA, candIntraPredModeB)にプレーナモードを設定する。
・Xが上の隣接ブロックBであり、XのY座標 (yCb)がCTU境界よりも上にある。
なお、上記の判定式にさらに、以下の判定式の何れかが真の場合を加えてもよい。
・Xの位置が画面外やタイル外であり利用可能(available)ではない。
・Xの位置(xNbX, yNbX)の予測モードCuPredModeがイントラ(MODE_INTRA)ではない。
・イントラ予測パラメータ復号部304、イントラ予測パラメータ符号化部113は、以下の条件が真の場合に、隣接イントラ予測モード(candIntraPredModeA, candIntraPredModeB)にプレーナモードを設定する。
Xが上の隣接ブロックBであり、XのY座標(yCb)がCTU境界よりも上にある。
イントラ予測画像生成部310(CCLM予測部)は、輝度から色差を線形予測するCCLM予測(Chroma Component Liner Model)を行ってもよい。CCLM予測では、対象ブロックの隣接画素(上と左に隣接する)において輝度と色差の線形予測関係(線形予測パラメータa, b)を導出し、対象ブロックの輝度画像から、色差画像をy=a*x+bの関係式で導出する。より具体的には、輝度をダウンサンプルして得られる画素値pDsY[x][y]と予測パラメータa,
b及び所定のシフト値kから以下の式で、色差の予測画像predSamples[][]を導出する。
(フレキシブルタイルにおけるCCLM予測)
タイルのサイズは、既に説明したように、タイル単位サイズTileUnitSizeYの整数倍のサイズとして復号もしくは符号化する。またCT分割部は、ピクチャ内座標系を用いて、ピクチャ内座標とタイル左上座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行う。もしくは、タイル内座標系を用いて、タイル内座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行う。
また輝度と色差のサンプリングが2:1である4:2:0以外のサンプルを考慮して以下で導出しても良い。SubHeightCが輝度と色差のサンプル比である場合、
bCTUboudary = (SubHeightC==2) ? (yCbC & ((1<<(CtbLog2SizeY-1)-1)) : ((1<<(CtbLog2SizeY)-1))
bCTUboudary = yCbC & ((1<<(CtbLog2SizeY-1)-(SubHeightC-1)))
またchroma_format_idcを用いて切り替えても良い。
ここで、左上色差ブロックの左上座標(xCbC, yCbC)は、タイル左上座標を基準と、左上輝度ブロック座標(xCb, yCb)から導出してもよい。
ルチツリー分割を行い、対象画面の左上座標を基準とする対象ブロックの輝度左上座標(xCbInPic, yCbInPic)と、対象画面の左上座標を基準とする対象タイルの輝度左上座標(xTile, yTile)からタイル内の左上輝度ブロック座標(xCb, yCb)を導出してもよい。
yCb = yCbInPic-yTile[TileId]
また、タイル内座標系を用いて、タイル内座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行う場合には、対象ブロックの左上座標をそのまま(xCb, yCb)に用いる。
pTopDsY[x] = (pY[2*x-1][-2]+pY[2*x-1][-1]+2*pY[2*x][-2]+2*pY[2*x][-1]+pY[2*x+1][-2]+pY[2*x+1][-1]+4)>>3
ここで、pY[][]は、対象ブロックに隣接する輝度画像である。
pTopDsY[0]=(pY[-1][-2]+pY[-1][-1]+2*pY[0][-2]+2*pY[0][-1]+pY[1][-2]+pY[1][-1]+4)>>3
左上隣接座標(添字x、yがともに負で示される座標)が利用可能でなければ、以下の式で導出しても良い。
pTopDsY[0] = (pY[0][-2]+pY[0][-1]+1)>>1
CCLM予測部は、隣接輝度画像pTopDsYを以下の手順で導出する。CCLM予測部は、上画素が参照可能(availT = TRUE)であり、CTU境界である(bCTUboundary = TRUW)場合には、x=1..nTbW-1に対して以下の式で導出する。
pTopDsY[x] = (pY[2*x-1][-1]+2*pY[2*x][-1]+pY[2*x+1][-1]+2)>>2
つまりbCTUboundary = TRUEの場合には、pY[x][y]のうちpY[x][-1]の1ラインのみを利用する。
pTopDsY[0] = (pY[-1][-1]+2*pY[0][-1]+pY[1][-1]+2)>>2
左上隣接座標が利用可能でなければ、さらに以下の式で導出しても良い。
pTopDsY[0] = pY[0][-1]
CCLM予測部は、さらに隣接輝度画像pLeftDsY[]を導出する。
add = shift ? 1<<(shift-1) : 0
diff = (MaxLuma-MinLuma+add)>>shift
k = 16
diffが正の場合、CCLM予測部は以下の式を用いてaを導出し、それ以外ではa=0とする。
a = (((ChromaForMaxLuma-ChromaForMinLuma)*Floor(65536/diff)+div+add)>>shift)
さらに、CCLM予測部はbを導出する。
b = ChromaForMinLuma-((a*MinLuma)>>k)
以上の構成のCCLM予測部によれば、タイル単位サイズの整数倍のタイルサイズを復号あるいは符号化し、ピクチャ内座標とタイル左上座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行いピクチャ内座標からタイル内座標(対象タイルの左上座標を基準とする対象ブロックの左上座標)に変換してCTU境界の判定を行う、もしくは、タイル内座標を用いて、4分木、2分木、3分木のマルチツリー分割を行い、タイル内座標を用いてCTU境界判定を行う。これによりタイルサイズがCTUの整数倍ではない場合においても、ラインメモリを利用することなく、CCLM予測が可能となる効果を奏する。
図38(a)は、本実施形態に係るマージ予測パラメータ導出部3036の構成を示す概略図である。マージ予測パラメータ導出部3036は、マージ候補導出部30361、マージ候補選択部30362を備える。なお、マージ候補は、予測リスト利用フラグpredFlagLX、動きベクトルmvLX、参照ピクチャインデックスrefIdxLXを含んで構成され、マージ候補リストに格納される。マージ候補リストに格納されたマージ候補には、所定の規則に従ってインデックスが割り当てられる。
空間マージ候補導出処理として、マージ候補導出部30361は、所定の規則に従って、予測パラメータメモリ307が記憶している予測パラメータ(予測リスト利用フラグpredFlagLX、動きベクトルmvLX、参照ピクチャインデックスrefIdxLX)を読み出し、マージ候補に設定する。参照ピクチャの指定方法は、例えば、対象ブロックから予め定めた範囲内にある隣接ブロック(例えば、対象ブロックの左端L、左下端BL、左上端AL、上端A、右上端ARにそれぞれ接するブロックの全部または一部)のそれぞれに係る予測パラメータである。各々のマージ候補をL, BL, AL, A, ARと呼ぶ。
時間マージ導出処理として、マージ候補導出部30361は、対象ブロックの右下CBR、あるいは、中央の座標を含む参照画像中のブロックCの予測パラメータを、予測パラメータメモリ307から読み出してマージ候補とし、マージ候補リストmergeCandList[]に格納する。
yColCtr = yCb+(bH>>1)
xColBr = xCb+bW
yColBr = yCb+bH
ここで、(xCb,yCb)は対象ブロックの左上座標、(bW,bH)は対象ブロックの幅と高さである。なお、bW, bHは、cbWidth、cbHeightとも記載する。
ブロックCBRが利用可能であればブロックCBRの動きベクトルを利用してマージ候補COLを導出する。ブロックCBRが利用可能でなければブロックCを使用してCOLを導出する。
マージ候補導出部30361(時間動き予測部、時間動きベクトル導出部)は、参照メモリ中の動きベクトルをCTUライン単位で管理し、対象CTUに必要な範囲のみを内部メモリにフェッチすることが好適である。このときマージ候補導出部30361は、フェッチした領域以外をアクセスしないように、ブロックCBRの位置(xColBr、yColBr)が対象CTUラインを超える場合にはブロックBRを利用せず、以下の処理によりブロックCを利用する。
yColBr = yCbInTile + cbHeight
xColCtr = xCbInTile + (cbWidth>>1)
yColCtr = yCbInTile + (cbHeight>>1)
if (((yCb>>CtbLog2SizeY)==(yColBr>>CtbLog2SizeY)) && (yColBr<hPict) && (xColBr<wPict)) {
// (xColBr, yColBr)を用いて参照ピクチャの動きベクトルを参照する。例えば、下記(xRef, yRef)を参照。
yRef = ((yColBr>>3)<<3)+yTile[TileId]
}
else {
// (xColCtr, yColCtr)を用いて参照ピクチャの動きベクトルを参照する。例えば、
xRef = ((xColCtr>>3)<<3)+xTile[TileId]
yRef = ((yColCtr>>3)<<3)+yTile[TileId]
}
図40は、参照ピクチャのタイル分割と対象ピクチャのタイル分割が等しい場合である。この場合には、対象ピクチャ内のCTU座標と、参照ピクチャ内のCTU座標によって、画面内のCTU座標を導出することができる。また、タイル内のCTUラインごとにMVメモリを管理する場合において、画面内にあってもタイル内にないCTUラインのMVメモリは参
照することが難しい。したがって、本実施形態では参照範囲をタイル内に限定する。図39(a)に示す。
yColBr = yCbInTile+cbHeight
xColCtr = xCbInTile+(cbWidth>>1)
yColCtr = yCbInTile+(cbHeight>>1)
if (((yCb>>CtbLog2SizeY)==(yColBr>>CtbLog2SizeY)) && (yColBr<hTile[TileId]) &&
(xColBr<wTile[TileId])) {
// (xColBr, yColBr)を用いて参照ピクチャの動きベクトルを参照する。例えば、下記(xRef, yRef)を参照。
yRef = ((yColBr>>3)<<3)+yTile[TileId]
}
else {
// (xColCtr, yColCtr)を用いて参照ピクチャの動きベクトルを参照する。例えば、
xRef = ((xColCtr>>3)<<3)+xTile[TileId]
yRef = ((yColCtr>>3)<<3)+yTile[TileId]
}
また、上記の処理は独立タイル(independent_tiles_flag=1)の場合に行っても良い。
yColBr = yCbInPic+cbHeight
xColCtr = xCbInPic+(cbWidth>>1)
yColCtr = yCbInPic+(cbHeight>>1)
if ((((yCb-yTile[TileId])>>CtbLog2SizeY)==((yColBr-yTile[TileId])>>CtbLog2SizeY)) && (yColBr<hPict) && (xColBr<wPict)) {
xRef = ((xColBr>>3)<<3)
yRef = ((yColBr>>3)<<3)
}
else {
xRef = ((xColCtr>>3)<<3)
yRef = ((yColCtr>>3)<<3)
}
図40は、参照ピクチャのタイル分割と対象ピクチャのタイル分割が等しい場合である。この場合、本実施形態では参照範囲をタイル内に限定する。図39(b)に処理の一例を示す。
yColBr = yCbInPic+cbHeight
xColCtr = xCbInPic+(cbWidth>>1)
yColCtr = yCbInPic+(cbHeight>>1)
if ((((yCb-yTile[TileId])>>CtbLog2SizeY)==((yColBr-yTile[TileId])>>CtbLog2SizeY)) && ((yColBr-yTile[TileId])<hTile[TileId]) && ((xColBr-xTile[TileId])<wTile[TileId])) {
xRef = ((xColBr>>3)<<3)
yRef = ((yColBr>>3)<<3)
}
else {
xRef = ((xColCtr>>3)<<3)
yRef = ((yColCtr>>3)<<3)
}
上記の処理は、独立タイルの場合に行っても良い。
図14は、仮想CTUラインを設定して、参照ピクチャの動きベクトルを参照する場合の参照範囲を示す図である。本構成では、参照ピクチャを仮想のCTUラインに分割し、対象ブロックに対応する仮想CTUラインの動きベクトルを参照する。
時間動き予測部は、タイル内座標系の(xCbInTile, yCbInTile)から、画面内座標のCTU座標(xCtbInPic, yCtbInPic)、右下座標(xColBr, yColBr)と中心座標(xColCtr, yColCtr)を導出する。なお、タイル内座標系でCT分割(QT, BT, TTなどのマルチツリー分割)を行わない場合などタイル内座標系で処理される場合には、タイル内座標系から画面内座標系への変換は省略できる。
xCtbInPic = xCtbInTile+xTile[currTileId]
yCtbInPic = yCtbInTile+yTile[currTileId]
xColBrInPic = xCbInTile+cbWidth+xTile[currTileId]
yColBrInPic = yCbInTile+cbHeight+yTile[currTileId]
xColCtrInPic = xCbInTile+(cbWidth>>1)+xTile[currTileId]
yColCtrInPic = yCbInTile+(cbHeight>>1)+yTile[currTileId]
S3003:仮想CTUライン内判定
画面内座標で、画面内右下座標(xColBrInPic, yColBrInPic)が、仮想CTUライン内であるか否かを判定する。ここでは、さらに右下座標(xColBrInPic, yColBrInPic)が、仮想CT
Uライン内かつ画面内にあるかを判定する。
S3004:参照ピクチャの動きベクトル参照
時間動き予測部は、判定式が真の場合には、右下座標の動きベクトルを参照する。ここではさらに座標を8x8などの単位に間引いて参照しても良い。
S3005:判定式が偽の場合には、中心座標(xColCtrInPic, yColCtrInPic)の動きベクトルを参照する。ここではさらに座標を8x8などの単位で間引いて参照しても良い。
さらに、中心座標の動きベクトルを参照する前に、以下の判定式を用いて、参照座標が仮想CTUライン内であるか否かを判定してもよい。
図16は、仮想CTUラインを設定して、参照ピクチャの動きベクトルを参照する場合の参照範囲を示す図である。本構成では、参照ピクチャをVBSize×VBSizeサイズ単位(Log2VBSize=log2(VBSize))に分割し、対象CTUからみて、この区切り位置を参照CTUラインの上側座標yCtbInPicに設定する、この上側座標yCtbInPicから所定の範囲を、参照ピクチャから参照可能な動きベクトルの範囲に設定する。
時間動き予測部は、タイル内座標系の(xCbInTile, yCbInTile)から、画面内座標のCTU座標(xCtbInPic, yCtbInPic)、右下座標(xColBr, yColBr)と中心座標(xColCtr, yColCtr)を導出する。なお、タイル内座標系でCT分割(QT, BT, TTなどのマルチツリー分割)を行わない場合など画面内座標系で処理が行われている場合には、タイル内座標系から画面内座標系への変換は省略できる。
xCtbInTile = (xCbInTile>>Log2VBSize)<<Log2VBSize
yCtbInTile = (yCbInTile>>Log2VBSize)<<Log2VBSize
xCtbInPic = xCtbInTile+xTile[currTileId]
yCtbInPic = yCtbInTile+yTile[currTileId]
xColBrInPic = xCbInTile+cbWidth+xTile[currTileId]
yColBrInPic = yCbInTile+cbHeight+yTile[currTileId]
xColCtrInPic = xCbInTile+(cbWidth>>1)+xTile[currTileId]
yColCtrInPic = yCbInTile+(cbHeight>>1)+yTile[currTileId]
S3002:仮想CTUライン導出
続いて、時間動き予測部は、yCtbInPicをVBSize単位の座標に変換し、仮想CTUラインの上側座標yVirCtbTを導出する。また、所定のサイズ(ここではCTUサイズctuSize)だけ下の位置の下側座標yVirCtbBを設定する。
yVirCtbT = ((yCtbInPic>>VBLog2Size)<<VBLog2Size)
yVirCtbB = ((yCtbInPic>>VBLog2Size)<<VBLog2Size)+ctuSize
なお、VBLog2SizeをCtbLog2SizeYに設定すると、参照ピクチャを固定のCTUサイズ単位で分割した場合と同じ処理となる。
なお、上記では参照範囲をCTUサイズに限定していたが、それより大きいサイズでもよい。例えば、参照ピクチャ上において、対象CTUサイズ+M画素の範囲の動きベクトル
を参照する場合は以下の式を用いる。
yVirCtbB = ((yCtbInPic>>VBLog2Size)<<VBLog2Size)+ctuSize+M
例えばM=16。
時間動き予測部は、画面内座標で、右下座標(xColBrInPic, yColBrInPic)が、仮想CTUライン内であるか否かを判定する。ここでは、さらに右下座標(xColBrInPic, yColBrInPic)が、仮想CTUライン内かつ画面内にあるかを判定する。仮想CTUライン内の場合には、その参照位置(xColBrInPic,yColBrInPic)の動きベクトルを参照する。
S3004:参照ピクチャの動きベクトル参照
時間動き予測部は、判定式が真の場合には、参照ピクチャの右下座標の動きベクトルを参照する。ここではさらに座標を8x8などの単位で間引いて参照しても良い。
以下、図示しないが以下の処理を行っても良い。
時間動き予測部は、判定式が偽の場合には、参照ピクチャの中心座標(xColCtrInPic, yColCtrInPic)の動きベクトルを参照する。ここではさらに座標を8x8などの単位で間引いて参照しても良い。
さらに、中心座標の動きベクトルを参照する前に、以下の判定式を用いて、参照座標が仮想CTUライン内であるか否かを判定してもよい。
以上の処理の擬似コードは以下のとおりである。
if ((yColBrInPic<yVirCtbB) && (yColBr<hPict) && (xColBr<wPict)) {
(xColBrInPic, yColBrInPic)を用いて動きベクトルを参照する
// 例えば8x8 単位にラウンドした以下の座標でもよい。
}
else if (yColCtrInPic<yVirCtbB) { // ブロック中心で仮想CTUライン境界判定
(xColCtr, yColCtr)を用いて動きベクトルを参照する
// 例えば8x8単位にラウンドした以下の座標でもよい。
}
以上の構成の時間動き予測部によれば、参照ブロックのピクチャ内座標yColBrInPicと、対象ピクチャのピクチャ内座標から導出した仮想CTU座標yVirCtbBを比較して、参照ブロックの参照可能性を判定する。ここでは、仮想CTU座標yVirCtbBの導出において、仮想CTU座標を、VBSizeの整数倍とするためにVBLog2Sizeによる右シフトと左シフトを行う。さらに、参照ブロックのピクチャ内座標yColBrInPicが、対象ピクチャのピクチャ内座標から導出した仮想CTU座標yVirCtbBよりも小さい場合に、参照ピクチャの動きベクトルを参照する。これによって、対象ピクチャと参照ピクチャのCTUサイズが異なる場合においても、参照ピクチャにおいて動きベクトルを参照する範囲を仮想CTUラインの範囲に制限されているので、参照ピクチャ上の動きベクトルを予めフェッチして処理することが可
能であり、高速に処理が可能である効果を奏する。また、参照ピクチャにおいて動きベクトルを参照する範囲である仮想CTUラインの設定において、できるだけ対象CTUと同じ位置であることを保ちながら、CTUラインを設定することができる。
上記ではVBSizexVBSizeの粒度で、仮想CTUラインを設定したが、仮想CTUラインの粒度(例えば8×8、つまりVBSize=8)が、CTUサイズの粒度(ctuUnitSize)以下である場合には、仮想CTUラインの導出においてVBSizeに関するシフト処理を省略することができる。
yVirCtbT = yCtbInPic
yVirCtbB = yCtbInPic+ctuSize
続く処理の擬似コードは以下のとおりである。
if ((yColBrInPic<yVirCtbB) && (yColBr<hPict) && (xColBr<wPict)) {
(xColBrInPic, yColBrInPic)を用いて動きベクトルを参照する
// 例えば8x8 単位にラウンドした以下の座標でもよい。
}
else if (yColCtrInPic<yVirCtbB) { // ブロック中心で仮想CTUライン境界判定
(xColCtr, yColCtr)を用いて動きベクトルを参照する
// 例えば8x8単位にラウンドした以下の座標でもよい。
以上の構成の時間動き予測部によれば、参照ブロックのピクチャ内座標yColBrInPicと、対象ピクチャのピクチャ内座標から導出した仮想CTU座標yVirCtbBを比較して、参照ブロックの参照可能性を判定する。
る。
次に、本実施形態に係る動画像符号化装置11の構成について説明する。図19は、本実施形態に係る動画像符号化装置11の構成を示すブロック図である。動画像符号化装置11は、予測画像生成部101、減算部102、変換・量子化部103、逆量子化・逆変換部105、加算部106、ループフィルタ107、予測パラメータメモリ(予測パラメータ記憶部、フレームメモリ)108、参照ピクチャメモリ(参照画像記憶部、フレームメモリ)109、符号化パラメータ決定部110、パラメータ符号化部111、エントロピー符号化部104を含んで構成される。
上述した動画像符号化装置11及び動画像復号装置31は、動画像の送信、受信、記録、再生を行う各種装置に搭載して利用することができる。なお、動画像は、カメラ等により撮像された自然動画像であってもよいし、コンピュータ等により生成された人工動画像(CGおよびGUIを含む)であってもよい。
もよい。図20(a)においては、これら全てを送信装置PROD_Aが備えた構成を例示しているが、一部を省略しても構わない。
は、送信装置PROD_A及び受信装置PROD_Bの双方として機能する。
また、上述した動画像復号装置31および動画像符号化装置11の各ブロックは、集積回路(ICチップ)上に形成された論理回路によってハードウェア的に実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェア的に実現してもよい。
Access Memory)、上記プログラムおよび各種データを格納するメモリ等の記憶装置(記録媒体)などを備えている。そして、本発明の実施形態の目的は、上述した機能を実現するソフトウェアである上記各装置の制御プログラムのプログラムコード(実行形式プログラム、中間コードプログラム、ソースプログラム)をコンピュータで読み取り可能に記録した記録媒体を、上記各装置に供給し、そのコンピュータ(またはCPUやMPU)が記録媒体に記録されているプログラムコードを読み出し実行することによっても、達成可能である。
etwork)、VAN(Value-Added Network)、CATV(Community Antenna television/Cable Television)通信網、仮想専用網(Virtual Private Network)、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、この通信ネットワークを構成する伝送媒体も、プログラムコードを伝送可能な媒体であればよく、特定の構成または種類のものに限定されない。例えば、IEEE(Institute of Electrical and Electronic Engineers)1394、USB、電力線搬送、ケーブルTV回線、電話線、ADSL(Asymmetric Digital Subscriber Line)回線等の有線でも、IrDA(Infrared Data Association)やリモコンのような赤外線、BlueTooth(登録商標)、IEEE802.11無線、HDR(High Data Rate)、NFC(Near Field Communication)、DLNA(Digital Living Network Alliance:登録商標)、携帯電話網、衛星回線、地上デジタル放送網等の無線でも利用可能である。なお、本発明の実施形態は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
31 動画像復号装置
101、308 予測画像生成部
104 エントロビー符号化部(符号化部)
107、305 ループフィルタ
111 パラメータ符号化部
1111 CT情報符号化部(CT分割部)
112 インター予測パラメータ符号化部
113 イントラ予測パラメータ符号化部(イントラ予測部)
301 エントロピー復号部
302 パラメータ復号部(分割部)
3021 CT情報復号部(CT分割部)
303 インター予測パラメータ復号部
304 イントラ予測パラメータ復号部(イントラ予測部)
308 予測画像生成部
309 インター予測画像生成部
310 イントラ予測画像生成部
3036 マージ予測パラメータ導出部
30361 マージ候補導出部(時間動き予測部)
30362 マージ候補選択部
Claims (6)
- タイル単位サイズの整数倍のタイルサイズを復号するヘッダ情報復号部と、ピクチャ内座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行うCT分割部と、参照ブロックのピクチャ内座標yColBrInPicと、対象ピクチャのピクチャ内座標から導出した仮想CTU座標yVirCtbBを比較して、参照ブロックの参照可能性を判定し、時間動きベクトルを導出する時間動き予測部を備えることを特徴とする動画像復号装置および動画像符号化装置。
- 上記の時間動き予測部は、仮想CTU座標yVirCtbBの導出において、仮想CTU座標を、VBSizeの整数倍とするためにVBLog2Sizeによる右シフトと左シフトを行うことを特徴とする請求項1に記載の動画像復号装置および動画像符号化装置。
- タイル単位サイズの整数倍のタイルサイズを復号するヘッダ情報復号部と、タイル内座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行うCT分割部と、タイル内座標を用いてCTU境界の判定を行うイントラ予測部を備える動画像復号装置および動画像符号化装置。
- タイル単位サイズの整数倍のタイルサイズを復号するヘッダ情報復号部と、ピクチャ内座標とタイル左上座標とタイルサイズを用いて4分木、2分木、3分木のマルチツリー分割を行うCT分割部と、ピクチャ内座標からタイル内座標に変換してCTU境界の判定を行うイントラ予測部を備える動画像復号装置および動画像符号化装置。
- 上記、動画像復号装置および動画像符号化装置は、タイル内座標を用いてCTU境界の判定を行って、対象ブロックがCTU境界に接している場合には、マルチラインイントラ予測の参照ラインインデックスを復号、符号化せずに0と導出することを特徴とする請求項3および4に記載の動画像復号装置および動画像符号化装置。
- 上記、動画像復号装置および動画像符号化装置は、タイル内座標を用いてCTU境界の判定を行って、タイル内座標における隣接ブロックのY座標がCTU境界より上に存在する場合には、隣接ブロックのイントラ予測モードを参照せずに隣接イントラ予測モードを導出し、それ以外の場合に、隣接ブロックのイントラ予測モードを参照して隣接イントラ予測モードを導出することを特徴とする請求項3および4に記載の動画像復号装置および動画像符号化装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018200186A JP7281890B2 (ja) | 2018-10-24 | 2018-10-24 | 動画像符号化装置および動画像復号装置 |
JP2023079788A JP7523856B2 (ja) | 2023-05-15 | 動画像符号化装置および動画像復号装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018200186A JP7281890B2 (ja) | 2018-10-24 | 2018-10-24 | 動画像符号化装置および動画像復号装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023079788A Division JP7523856B2 (ja) | 2023-05-15 | 動画像符号化装置および動画像復号装置 |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2020068461A true JP2020068461A (ja) | 2020-04-30 |
JP2020068461A5 JP2020068461A5 (ja) | 2021-12-02 |
JP7281890B2 JP7281890B2 (ja) | 2023-05-26 |
Family
ID=70388683
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018200186A Active JP7281890B2 (ja) | 2018-10-24 | 2018-10-24 | 動画像符号化装置および動画像復号装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP7281890B2 (ja) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014520477A (ja) * | 2011-09-09 | 2014-08-21 | ケィティ、コーポレーション | 時間的な予測動きベクトル誘導方法及びこのような方法を用いる装置 |
US20150245059A1 (en) * | 2014-02-21 | 2015-08-27 | Panasonic Corporation | Image decoding method, image encoding method, image decoding apparatus, and image encoding apparatus |
JP2015159531A (ja) * | 2014-02-21 | 2015-09-03 | パナソニック株式会社 | 画像復号方法、画像符号化方法、画像復号装置及び画像符号化装置 |
-
2018
- 2018-10-24 JP JP2018200186A patent/JP7281890B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014520477A (ja) * | 2011-09-09 | 2014-08-21 | ケィティ、コーポレーション | 時間的な予測動きベクトル誘導方法及びこのような方法を用いる装置 |
US20150245059A1 (en) * | 2014-02-21 | 2015-08-27 | Panasonic Corporation | Image decoding method, image encoding method, image decoding apparatus, and image encoding apparatus |
JP2015159531A (ja) * | 2014-02-21 | 2015-09-03 | パナソニック株式会社 | 画像復号方法、画像符号化方法、画像復号装置及び画像符号化装置 |
Non-Patent Citations (1)
Title |
---|
MINHUA ZHOU: "Non-CE9: Modified H positions for memory bandwidth reduction in TMVP derivation", JOINT COLLABORATIVE TEAM ON VIDEO CODING (JCT-VC) OF ITU-T SG16 WP3 AND ISO/IEC JTC1/SC29/WG11 7TH M, vol. JCTVC-G082, JPN6022049436, 29 December 2011 (2011-12-29), pages 1 - 12, ISSN: 0004925161 * |
Also Published As
Publication number | Publication date |
---|---|
JP7281890B2 (ja) | 2023-05-26 |
JP2023100982A (ja) | 2023-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2018221368A1 (ja) | 動画像復号装置、及び動画像符号化装置 | |
WO2018199001A1 (ja) | 画像復号装置及び画像符号化装置 | |
WO2018037853A1 (ja) | 画像復号装置及び画像符号化装置 | |
WO2019069950A1 (ja) | 画像符号化装置及び画像復号装置 | |
JP2021002780A (ja) | 動画像復号装置および動画像符号化装置 | |
WO2020116376A1 (ja) | 動画像復号装置および動画像符号化装置 | |
WO2020045248A1 (ja) | 動画像復号装置および動画像符号化装置 | |
JP2020061701A (ja) | 動画像符号化装置および動画像復号装置 | |
WO2021015195A1 (ja) | 画像復号装置、画像符号化装置、および画像復号方法 | |
WO2019230904A1 (ja) | 画像復号装置、および画像符号化装置 | |
WO2020184366A1 (ja) | 画像復号装置 | |
WO2020004349A1 (ja) | 動画像符号化装置および動画像復号装置 | |
WO2020067440A1 (ja) | 動画像符号化装置および動画像復号装置 | |
JPWO2018037723A1 (ja) | 画像復号装置及び画像符号化装置 | |
WO2019131349A1 (ja) | 画像復号装置、画像符号化装置 | |
JP7409802B2 (ja) | 動画像復号装置および動画像符号化装置 | |
JP7523856B2 (ja) | 動画像符号化装置および動画像復号装置 | |
JP7281890B2 (ja) | 動画像符号化装置および動画像復号装置 | |
JP2021158546A (ja) | 画像復号装置及び画像符号化装置 | |
JP2020107961A (ja) | 動画像符号化装置および動画像復号装置 | |
JP2021034848A (ja) | 画像復号装置 | |
JP2021153213A (ja) | 動画像符号化装置および動画像復号装置 | |
JP7425568B2 (ja) | 動画像復号装置、動画像符号化装置、動画像復号方法および動画像符号化方法 | |
JP7444570B2 (ja) | 動画像復号装置、動画像符号化装置、動画像復号方法および動画像符号化方法 | |
JP2021064817A (ja) | 動画像符号化装置及び動画像復号装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20211018 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20211018 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20220607 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20221018 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20221122 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20230105 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230106 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20230418 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20230516 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7281890 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |