CN118216153A - 用于视频编码的初始化处理 - Google Patents

用于视频编码的初始化处理 Download PDF

Info

Publication number
CN118216153A
CN118216153A CN202280074729.6A CN202280074729A CN118216153A CN 118216153 A CN118216153 A CN 118216153A CN 202280074729 A CN202280074729 A CN 202280074729A CN 118216153 A CN118216153 A CN 118216153A
Authority
CN
China
Prior art keywords
ctu
variable
rice parameter
context
palette predictor
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.)
Pending
Application number
CN202280074729.6A
Other languages
English (en)
Inventor
余越
于浩平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Publication of CN118216153A publication Critical patent/CN118216153A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/174Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

在一些实施例中,视频解码器从码流解码视频。视频解码器访问表示视频的划分的二进制串并处理划分中的每个编码树单元(CTU),以生成CTU中的解码值。该过程包括仅当CTU是瓦片中的第一个CTU,或者CTU是瓦片中的第一个CTU,或者启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU时,才初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量、Rice参数变量、以及调色板预测器变量。不对这些变量执行其他初始化。视频解码器基于初始化的上下文变量、Rice参数变量、以及调色板预测器变量对CTU进行解码。

Description

用于视频编码的初始化处理
相关申请的交叉引用
本申请要求于2021年11月11日提交的申请号为63/263,941、发明名称为“用于视频编码的初始化处理”的美国临时专利申请的优先权,其全部内容以引入的方式并入本文。
技术领域
本公开总体上涉及用于视频处理的计算机实现的方法和***。具体地,本公开涉及用于视频编码的初始化处理。
背景技术
诸如智能手机、平板电脑、以及计算机等普遍存在的有摄像功能的设备使采集视频或图像变得比以往更容易。然而,即使是短视频,数据量也可以非常大。视频编码技术(包括视频编码和视频解码)可以将视频数据压缩得更小,从而可以存储和传输各种视频。视频编码已被广泛应用于诸如数字电视广播、通过互联网和移动网络的视频传输、实时应用(例如,视频聊天、视频会议)、DVD和蓝光光盘等。为了减少用于存储视频的存储空间和/或用于传输视频的网络带宽消耗,需要提高视频编码方案的效率。
发明内容
一些实施例涉及用于视频编码的初始化处理。在一个示例中,一种用于从视频码流解码视频的方法包括:访问表示视频的划分的二进制串,该划分包括形成一个或多个编码树单元(coding tree unit,CTU)行的多个CTU;对于划分中的多个CTU中的每个CTU,确定CTU是否是瓦片中的第一个CTU;响应于确定CTU是瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于上下文自适应二进制算术编码(context-adaptive binaryarithmetic coding,CABAC)的上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定CTU不是瓦片中的第一个CTU,确定是否启用了并行编码以及CTU是否是瓦片的CTU行中的第一个CTU;响应于确定启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU,确定CTU的上相邻块的可用标记,响应于确定CTU的上相邻块的可用标记指示上相邻块可用,根据第二上下文变量初始化过程初始化上下文变量,根据第二Rice参数变量初始化过程初始化Rice参数变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU的上相邻块的可用标记指示上相邻块不可用,根据第一上下文变量初始化过程初始化上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定未启用并行编码或者CTU不是瓦片的CTU行中的第一个CTU,确定CTU是否是条带中的第一个CTU以及条带是否是依赖条带,响应于确定CTU是条带中的第一个CTU并且条带是依赖条带,根据第三上下文变量初始化过程初始化上下文变量,根据第三Rice参数变量初始化过程初始化Rice参数变量,以及根据第三调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU不是条带中的第一个CTU或者条带不是依赖条带,不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化;以及对CTU进行解码,包括:基于Rice参数变量和上下文变量,将对应于CTU的二进制串解码为CTU的系数值,以及从系数值确定CTU的像素值。
在另一示例中,一种用于从视频码流解码视频的方法包括:访问表示视频的划分的二进制串,该划分包括形成一个或多个CTU行的多个CTU;对于划分中的多个CTU中的每个CTU,将Rice参数变量初始化为初始值;确定CTU是否是条带或瓦片中的第一个CTU;响应于确定CTU是条带或瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于CABAC的上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定CTU不是条带或瓦片中的第一个CTU,确定是否启用了并行编码以及CTU是否是瓦片的CTU行中的第一个CTU;响应于确定启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU,确定CTU的上相邻块的可用标记,响应于确定CTU的上相邻块的可用标记指示上相邻块可用,根据第二上下文变量初始化过程初始化上下文变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU的上相邻块的可用标记指示上相邻块不可用,根据第一上下文变量初始化过程初始化上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定未启用并行编码或者CTU不是瓦片的CTU行中的第一个CTU,不对上下文变量和调色板预测器变量执行初始化;以及对CTU进行解码,包括:基于Rice参数变量和上下文变量,将对应于CTU的二进制串解码为CTU的系数值,以及从系数值确定CTU的像素值。
在另一示例中,一种用于从视频码流解码视频的方法包括:访问表示视频的划分的二进制串,该划分包括形成一个或多个CTU行的多个CTU;对于划分中的多个CTU中的每个CTU,确定满足初始化条件,初始化条件包括(a)CTU是瓦片中的第一个CTU,或者(b)CTU是瓦片中的第一个CTU,或者(c)启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU;响应于确定满足初始化条件,根据上下文变量的初始化过程初始化用于CABAC的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,以及根据调色板预测器条目的初始化过程初始化调色板预测器变量;响应于确定不满足初始化条件,不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化;以及对CTU进行解码,包括:基于Rice参数变量和上下文变量,将对应于CTU的二进制串解码为CTU的系数值,以及从系数值确定CTU的像素值。
在另一示例中,一种用于编码视频的方法包括:访问视频的划分,该划分包括形成一个或多个CTU行的多个CTU;处理视频的划分以生成划分的二进制表示,处理包括:对于划分中的多个CTU中的每个CTU,确定CTU是否是瓦片中的第一个CTU;响应于确定CTU是瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于CABAC的上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定CTU不是瓦片中的第一个CTU,确定是否启用了并行编码以及CTU是否是瓦片的CTU行中的第一个CTU;响应于确定启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU,确定CTU的上相邻块的可用标记,响应于确定CTU的上相邻块的可用标记指示上相邻块可用,根据第二上下文变量初始化过程初始化上下文变量,根据第二Rice参数变量初始化过程初始化Rice参数变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU的上相邻块的可用标记指示上相邻块不可用,根据第一上下文变量初始化过程初始化上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定未启用并行编码或者CTU不是瓦片的CTU行中的第一个CTU,确定CTU是否是条带中的第一个CTU以及条带是否是依赖条带,响应于确定CTU是条带中的第一个CTU并且条带是依赖条带,根据第三上下文变量初始化过程初始化上下文变量,根据第三Rice参数变量初始化过程初始化Rice参数变量,以及根据第三调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU不是条带中的第一个CTU或者条带不是依赖条带,不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化;以及对CTU进行编码,包括基于Rice参数变量和上下文变量,将CTU中的变换单元(transform unit,TU)的系数值编码为二进制表示,以及将划分的二进制表示编码为视频的码流。
在另一示例中,一种用于编码视频的方法包括:访问视频的划分,该划分包括形成一个或多个CTU行的多个CTU;处理视频的划分以生成划分的二进制表示,处理包括:对于划分中的多个CTU中的每个CTU,将Rice参数变量初始化为初始值;确定CTU是否是条带或瓦片中的第一个CTU;响应于确定CTU是条带或瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于CABAC的上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定CTU不是条带或瓦片中的第一个CTU,确定是否启用了并行编码以及CTU是否是瓦片的CTU行中的第一个CTU;响应于确定启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU,确定CTU的上相邻块的可用标记,响应于确定CTU的上相邻块的可用标记指示上相邻块可用,根据第二上下文变量初始化过程初始化上下文变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量,以及响应于确定CTU的上相邻块的可用标记指示上相邻块不可用,根据第一上下文变量初始化过程初始化上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;响应于确定未启用并行编码或者CTU不是瓦片的CTU行中的第一个CTU,不对上下文变量和调色板预测器变量执行初始化;以及对CTU进行编码,包括基于Rice参数变量和上下文变量,将CTU中的TU的系数值编码为二进制表示,以及将划分的二进制表示编码为视频的码流。
在另一示例中,一种用于编码视频的方法包括:访问视频的划分,该划分包括形成一个或多个CTU行的多个CTU;处理视频的划分以生成划分的二进制表示,处理包括:对于划分中的多个CTU中的每个CTU,确定满足初始化条件,初始化条件包括(a)CTU是瓦片中的第一个CTU,或者(b)CTU是瓦片中的第一个CTU,或者(c)启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU;响应于确定满足初始化条件,根据上下文变量的初始化过程初始化用于CABAC的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,以及根据调色板预测器条目的初始化过程初始化调色板预测器变量;响应于确定不满足初始化条件,不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化;以及对CTU进行编码,包括基于Rice参数变量和上下文变量,将CTU中的TU的系数值编码为二进制表示,以及将划分的二进制表示编码为视频的码流。
提及这些说明性实施例不是为了限制或定义本公开,而是为了提供示例来帮助理解本公开。具体实施方式中讨论了其他实施例,并提供了进一步的描述。
附图说明
参考附图阅读下文的具体实施方式可以更好地理解本公开的特征、实施例、以及优点。
图1是示出用于实现本文呈现的实施例的视频编码器的示例的框图。
图2是示出用于实现本文呈现的实施例的视频解码器的示例的框图。
图3描绘根据本公开的一些实施例的视频中的图像的编码树单元划分的示例。
图4描绘根据本公开的一些实施例的编码树单元的编码单元划分的示例。
图5描绘启用了波前并行处理的瓦片的示例。
图6描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程的示例。
图7描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程的示例。
图8描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程的另一示例。
图9描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程的另一示例。
图10描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程的另一示例。
图11描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程的另一示例。
图12描绘可用于实现本公开的一些实施例的计算***的示例。
具体实施方式
各种实施例提供用于视频编码的初始化处理。如上所述,越来越多的视频数据正在生成、存储、以及传输。提高视频编码技术的效率,从而在不损害解码视频的视觉质量的情况下使用更少的数据来表现视频是有益的。提高编码效率的一种方法是通过熵编码,以使用尽可能少的比特将处理的视频样本压缩成二进制码流。另一方面,因为视频通常包含大量数据,所以在编码(编码和解码)期间减少处理时间是有益的。为此,在视频编码和解码中可以采用并行处理。
在熵编码中,将视频样本二值化为二进制bin(binary bin),并且诸如CABAC的编码算法可以进一步将bin压缩成比特。二值化需要计算二值化参数,例如,通用视频编码(versatile video coding,VVC)规范中规定的截断莱斯(truncated Rice,TR)二值化和有限k阶指数哥伦布(k-th order Ep-Golomb,EGk)二值化过程的组合中使用的Rice参数,或在高效视频编码(high efficiency video coding,HEVC)规范中规定的哥伦布-莱斯(Golomb-Rice)码中使用的Rice参数。
对于具有大量文本和简单图形的计算机生成内容,调色板模式可用于提供比常规的基于块的残差预测和变换编码更高的压缩效率。调色板模式编码包括对调色板以及编码单元覆盖的每个空间位置的调色板索引进行编码。
视频编码的至少上述部分涉及的各种变量例如,熵编码变量、调色板预测变量、和并行处理变量,需要被初始化以用于编码。然而,由于视频的CTU之间的关系(例如,因为当前CTU与先前CTU空间邻接,所以当前CTU与先前CTU相关),因此不适当的初始化可能会降低编码效率。例如,由于不必要的初始化步骤,因而HEVC规范和VVC规范中现有的条带(slice)和瓦片(tile)初始化以及并行处理波前并行处理(wavefront parallel processing,WPP)初始化可能不是最佳的。此外,当分别在VVC和HEVC中启用并行处理时,现有的并行处理初始化会导致一个或两个CTU的延迟。这种延迟减慢了视频编码过程。
本文描述的各种实施例通过省去划分中不必要的初始化操作来解决这些问题,从而可以简化编码过程并且可以提高编码效率。此外,通过适当的初始化过程可以消除并行处理中的初始化延迟,从而在几乎不降低编码效率的情况下加快视频处理过程。下文提供非限制性示例来介绍一些实施例。
在一个实施例中,省去现有的HEVC和VVC中不必要的初始化步骤。例如,只在特定条件下执行视频划分中的CTU的用于上下文自适应二进制算术编码(context-adaptivebinary arithmetic coding,CABAC)的上下文变量、Rice参数变量、以及调色板预测器变量的初始化。对于其他条件下的CTU,省去了这些变量的初始化。因此,可以提高编码效率,降低了视频编码器和解码器的复杂度,并且也减少了编码过程中涉及的各种资源消耗例如,CPU时间、存储器使用等。
在另一实施例中,CTU的用于CABAC的上下文变量、Rice参数变量、以及调色板预测器变量的初始化被进一步简化为,对满足初始化条件的所有CTU采用相同的初始化方案。例如,在该实施例中,启用WPP时,对于每个CTU行中的第一个CTU,在对当前图像进行编码之前,CTU之间的所有因变量(例如,用于CABAC的上下文变量、调色板预测的变量、以及用于Rice参数推导的变量等)被重置为这些因变量各自的初始值。因此,CTU行的编码不依赖于先前CTU行,并且可以使用WPP并行处理多个CTU行而没有延迟。因此,除了降低视频编码器和解码器的复杂度以及降低资源消耗的优势之外,在该实施例中还降低了并行处理中的编码延迟。本文提出的技术可以成为视频编码标准中的有效编码工具。
现在参考附图,图1是示出用于实现本文呈现的实施例的视频编码器100的示例的框图。在图1所示的示例中,视频编码器100包括划分模块112、变换模块114、量化模块115、反量化模块118、反变换模块119、环路滤波器模块120、帧内预测模块126、帧间预测模块124、运动估计模块122、解码图像缓冲器130、以及熵编码模块116。
视频编码器100的输入是包含图像(也称为帧或图像)序列的输入视频102。在基于块的视频编码器中,对于每个图像,视频编码器100采用划分模块112将图像分成块104,并且每个块包含多个像素。这些块可以是宏块、编码树单元、编码单元、预测单元、和/或预测块。一个图像可以包括不同大小的块,并且视频的不同图像的块划分也可以不同。可以使用不同的预测(诸如,帧内预测、或帧间预测、或帧内和帧间混合预测)对每个块进行编码。
通常,视频信号的第一个图像是帧内预测图像,仅使用帧内预测对该图像进行编码。在帧内预测模式中,仅使用来自同一图像的数据来预测图像的块。可以在没有来自其他图像的信息的情况下对帧内预测的图像进行解码。为了执行帧内预测,图1所示的视频编码器100可以采用帧内预测模块126。帧内预测模块126用于使用同一图像的相邻块的重建块136中的重建样本来生成帧内预测块(预测块134)。根据为块选择的帧内预测模式来执行帧内预测。然后视频编码器100计算块104和帧内预测块134之间的差。该差被称为残差块106。
为了进一步从块中去除冗余,变换模块114通过对块中的样本应用变换,将残差块106变换到变换域中。变换的示例可以包括但不限于离散余弦变换(discrete cosinetransform,DCT)或离散正弦变换(discrete sine transform,DST)。变换值可以被称为变换系数,代表变换域中的残差块。在一些示例中,可以不经过变换模块114变换残差块,而直接对残差块进行量化。这被称为变换跳过模式。
视频编码器100可以进一步使用量化模块115对变换系数进行量化以获取量化系数。量化包括将样本除以量化步长,并随后进行舍入,而反量化包括将量化值乘以量化步长。这种量化过程被称为标量量化。量化用于减小(变换或未变换的)视频样本的动态范围,以便使用更少的比特来表示视频样本。
块内系数/样本的量化可以独立完成,并且这种量化方法用于一些现有的视频压缩标准,例如H.264和HEVC。对于N×M块,可以使用特定的扫描顺序将块的2D系数转换成1-D数组,以用于系数量化和编码。块内系数的量化可以利用扫描顺序信息。例如,块中给定系数的量化可以取决于沿扫描顺序的先前量化值的状态。为了进一步提高编码效率,可以使用多于一个的量化器。使用哪个量化器来量化当前系数取决于按编码/解码扫描顺序早于当前系数的信息。这种量化方法被称为相关量化。
可以使用量化步长来调整量化程度。例如,对于标量量化,可以应用不同的量化步长来实现更精细或更粗略的量化。较小的量化步长对应于更精细的量化,而较大的量化步长对应于更粗略的量化。可以通过量化参数(quantization parameter,QP)指示量化步长。在视频的编码码流中提供量化参数,使得视频解码器可以应用相同的量化参数以用于解码。
然后熵编码模块116对量化样本进行编码,以进一步减小视频信号的大小。熵编码模块116用于对量化样本应用熵编码算法。在一些示例中,将量化样本二值化为二进制bin,并且编码算法进一步将二进制bin压缩成比特。二值化方法的示例包括但不限于截断莱斯(truncated Rice,TR)二值化和有限k阶指数哥伦布(k-th order Ep-Golomb,EGk)二值化。为了提高编码效率,使用基于历史的莱斯参数推导,其中,基于从先前的TU获取或更新的变量推导用于TU的莱斯参数。熵编码算法的示例包括但不限于可变长度编码(variablelength coding,VLC)方案、上下文自适应VLC方案(context adaptive VLC scheme,CAVLC)、算术编码方案、二值化、CABAC、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmetic coding,SBAC)、概率区间划分熵(probability interval partitioning entropy,PIPE)编码或其他熵编码技术。将熵编码数据添加到输出编码视频132的码流。
如上所述,在图像的块的帧内预测中使用来自相邻块的重建块136。生成块的重建块136涉及计算该块的重建残差。可以通过对块的量化残差应用反量化和反变换来确定重建残差。反量化模块118用于对量化样本应用反量化以获取去量化系数。反量化模块118通过使用与量化模块115相同的量化步长,应用量化模块115所应用的量化方案的反方案。反变换模块119用于对去量化样本应用变换模块114所应用的变换的反变换,诸如反DCT或反DST。反变换模块119的输出是像素域中的块的重建残差。可以将重建残差添加到块的预测块134以获取像素域中的重建块136。对于跳过变换的块,不对那些块应用反变换模块119。去量化样本是块的重建残差。
可以使用帧间预测或帧内预测对第一帧内预测图像后的后续图像中的块进行编码。在帧间预测中,图像中的块的预测来自一个或多个先前编码的视频图像。为了执行帧间预测,视频编码器100使用帧间预测模块124。帧间预测模块124用于基于运动估计模块122提供的运动估计执行对块的运动补偿。
运动估计模块122将当前图像的当前块104与解码参考图像108进行比较,以进行运动估计。解码参考图像108存储在解码图像缓冲器130中。运动估计模块122从解码参考图像108中选择与当前块最匹配的参考块。运动估计模块122进一步识别参考块的位置(例如,x、y坐标)和当前块的位置之间的偏移量。该偏移量被称为运动矢量(motion vector,MV),并被提供到帧间预测模块124。在一些情况下,在多个解码的参考图像108中为该块识别多个参考块。因此,多个运动矢量被生成,并被提供到帧间预测模块124。
帧间预测模块124使用运动矢量以及其他帧间预测参数来执行运动补偿,以生成当前块(即,帧间预测块134)的预测。例如,基于运动矢量,帧间预测模块124可以在相应的参考图像中定位运动矢量所指向的预测块。如果存在多于一个的预测块,则将这些预测块与一些权重进行组合以生成当前块的预测块134。
对于帧间预测块,视频编码器100可以从块104减去帧间预测块134以生成残差块106。可以按照与上文讨论的帧内预测块的残差相同的方式对残差块106进行变换、量化、以及熵编码。同样地,可以通过对残差进行反量化、反变换、并随后与相应的预测块134进行组合以获取帧间预测块的重建块136。
为了获取用于运动估计的解码图像108,环路滤波器模块120处理重建块136。环路滤波器模块120用于平滑像素过渡,从而提高视频质量。环路滤波器模块120可以用于实现一个或多个环路滤波器,例如,去块滤波器(de-blocking filter)、或样本自适应偏移(sample-adaptive offset,SAO)滤波器、或自适应环路滤波器(adaptive loop filter,ALF)等。
图2描绘用于实现本文呈现的实施例的视频解码器200的示例。视频解码器200处理码流中的编码视频202并生成解码图像208。在图2所示的示例中,视频解码器200包括熵解码模块216、反量化模块218、反变换模块219、环路滤波器模块220、帧内预测模块226、帧间预测模块224、以及解码图像缓冲器230。
熵解码模块216用于执行编码视频202的熵解码。熵解码模块216对量化系数、包括帧内预测参数和帧间预测参数的编码参数、以及其他信息进行解码。在一些示例中,熵解码模块216将编码视频202的码流解码为二进制表示,然后将二进制表示转换为系数的量化等级。然后,熵解码的系数由反量化模块218进行反量化,并且随后由反变换模块219反变换到像素域。反量化模块218和反变换模块219的功能分别与上文参考图1所描述的反量化模块118和反变换模块119类似。可以将反变换的残差块添加到相应的预测块234中以生成重建块236。对于跳过变换的块,不对那些块应用反变换模块219。使用反量化模块118生成的去量化样本以生成重建块236。
基于特定块的预测模式生成该块的预测块234。如果该块的编码参数指示该块是帧内预测的,则可以将同一图像中的参考块的重建块236反馈到帧内预测模块226中以生成该块的预测块234。如果块的编码参数指示该块是帧间预测的,则帧间预测模块224生成预测块234。帧内预测模块226和帧间预测模块224的功能分别与图1的帧内预测模块126和帧间预测模块124类似。
如上文参考图1所讨论的,帧间预测涉及一个或多个参考图像。视频解码器200通过将环路滤波器模块220应用到参考图像的重建块来生成参考图像的解码图像208。解码图像208存储在解码图像缓冲器230中,以供帧间预测模块224使用,并且也用于输出。
现在参考图3,图3描绘根据本公开的一些实施例的视频中的图像的编码树单元划分的示例。如上文参考图1和图2所讨论的,为了对视频的图像进行编码,将图像分成块,例如,如图3所示VVC中的CTU 302。例如,CTU 302可以是128×128像素的块。根据诸如图3所示的顺序,处理CTU。在一些示例中,如图4所示,图像中的每个CTU 302可以被划分为一个或多个编码单元(coding unit,CU)402,上述CU可以被进一步划分为用于预测的预测单元或用于变换的变换单元。根据编码方案,CTU 302可以被不同地划分为CU 402。例如,在VVC中,CU402可以是矩形或正方形,并且可以对上述CU进行编码而无需进一步划分为预测单元或变换单元。每个CU 402可以与该CU的根CTU 302一样大,或者是小到4×4块的根CTU 302的细分。如图4所示,VVC中从CTU 302到CU 402的划分可以是四叉树分割或二叉树分割或三叉树分割。在图4中,实线表示四叉树分割,且虚线表示二叉树或三叉树分割。
初始化处理
初始化是视频编码中的重要步骤。在现有的HEVC规范(ITU-T,“High EfficiencyVideo Coding”,2019年11月)和VVC规范(ISO/IEC 23090-3:2021Informationtechnology-Coded representation of immersive media—Part 3:Versatile videocoding and Recommendation ITU-T H.266(08/2020):Versatile Video coding)中,初始化多个变量用于编码。例如,初始值用于推导ctxTable和ctxIdx索引的两个上下文变量用于HEVC中的CABAC。在VVC中,初始ctxTable和ctxIdx用于推导两个上下文变量pStateIdx0和pStateIdx1。上下文变量用于推导CABAC中用于压缩bin的多个变量。在HEVC中,当启用Rice参数自适应时,变量StatCoeff[k]的初始值被初始化为0,其中,k在0到3的范围内。类似地,当在VVC中启用基于历史的Rice参数推导时,变量StatCoeff[idx]的初始值被初始化,其中,idx表示亮度分量和两个色度分量。此外,当HEVC和VVC中允许调色板预测时,还需要初始化两个调色板预测相关变量PredictorPaletteSize和PredictorPaletteEntries。
残差编码
在视频编码中,残差编码用于将量化等级转换成码流。量化后,N×MTU编码块有N×M个量化等级。这些N×M个等级可以是零值或非零值。如果非零等级不是二进制的,则进一步将非零等级二值化为二进制bin。CABAC可以进一步将bin压缩成比特。此外,有两种基于上下文建模的编码方法。具体地,上述方法中的一种是根据相邻编码信息自适应地更新上下文模型。这种方法称为上下文编码方法,以这种方式编码的bin称为上下文编码bin。相比之下,另一种方法假设1或0的概率总是50%,因此总是使用固定的上下文建模而不进行调整。这种方法称为旁路(bypass)方法,并且用这种方法编码的bin称为旁路bin。
对于VVC中的常规残差编码(regular residual coding,RRC)块,最后的非零等级的位置定义为沿编码扫描顺序的最后的非零等级的位置。最后的非零等级的2D坐标的表示(last_sig_coeff_x和last_sig_coeff_y)包括总共4个前缀(prefix)和后缀(suffix)语法元素,上述语法元素是last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix。首先用上下文编码方法对语法元素last_sig_coeff_x_prefix和last_sig_coeff_y_prefix进行编码。如果存在last_sig_coeff_x_suffix和last_sig_coeff_y_suffix,则使用旁路方法对last_sig_coeff_x_suffix和last_sig_coeff_y_suffix进行编码。RRC块可以由多个预定义的子块组成。语法元素sb_coded_flag用于指示当前子块是否所有等级都等于零。如果sb_coded_flag等于1,则在当前子块中有至少一个非零系数。如果sb_coded_flag等于0,则当前子块中的所有系数将为零。然而,具有最后的非零等级的最后的非零子块的sb_coded_flag根据编码扫描顺序从last_sig_coeff_x和last_sig_coeff_y推导为1,而不编码到码流中。此外,包含DC位置的左上子块的sb_coded_flag也推导为1,而不编码到码流中。用上下文编码方法对码流中的sb_coded_flag的语法元素进行编码。RRC将从最后的非零子块开始,以反向编码扫描顺序逐子块进行编码。
对于以变换跳过残差编码(transform skip residual coding,TSRC)模式编码的块,TSRC将从左上子块开始,沿编码扫描顺序逐子块进行编码。类似地,语法元素sb_coded_flag用于指示当前子块是否所有残差都等于零。当特定条件发生时,除了最后的子块之外的所有子块的所有语法元素sb_coded_flag都被编码到码流中。如果最后的子块之前的所有子块的所有sb_coded_flag都不等于1,则最后的子块的sb_coded_flag将推导为1且该标记不编码到码流中。为了保证最坏情况下的吞吐量,使用预定义值RemCcbs限制最大的上下文编码bin。如果当前子块有非零等级,TSRC将以编码扫描顺序对每个位置的等级进行编码。如果RemCcbs大于4,将用上下文编码方法对以下语法元素进行编码。对于每个等级,首先将sig_coeff_flag编码到码流中,以指示该等级是零还是非零。如果等级是非零,将对coeff_sign_flag进行编码以指示等级是正还是负。然后将对abs_level_gtx_flag[n][0]进行编码,以指示当前位置的当前绝对等级是否大于1,其中,n是沿扫描顺序的子块内的当前位置的索引。如果abs_level_gtx_flag[n][0]不是零,则将对par_level_flag进行编码。用上下文编码方法对上述每个语法元素进行编码后,RemCcbs的值将减1。
在对当前子块内的所有位置的上述语法元素进行编码之后,如果RemCcbs仍然大于4,则将用上下文编码方法对另外至多四个abs_level_gtx_flag[n][j]进行编码,其中,n是沿扫描顺序的子块内的当前位置的索引;j是1到4。在对每个abs_level_gtx_flag[n][j]进行编码后,RemCcbs的值将减1。如果RemCcbs不大于4,则必要时将用旁路方法对子块内的当前位置的语法元素abs_remainder进行编码。对于通过旁路方法用abs_remainder语法元素对绝对等级进行完全编码的位置,也通过旁路方法对coeff_sign_flags进行编码。总之,RRC中存在预定义的计数器remBinsPass1或TSRC中存在预定义的计数器RemCcbs,用于限制上下文编码bin的总数且确保最坏情况下的吞吐量。
Rice参数推导
在VVC中的当前RRC设计中,对于剩余等级,码流中可以存在编码为旁路bin的两个语法元素abs_remainder和dec_abs_level。abs_remainder和dec_abs_level都是通过VVC规范中规定的TR二值化和有限k阶EGk二值化过程的组合进行二值化的,这需要Rice参数对给定的等级进行二值化。为了获取最优Rice参数,采用如下所述的局部求和方法。
数组AbsLevel[xC][yC]表示颜色分量索引cIdx的当前变换块的变换系数等级的绝对值的数组。给定变换块的数组AbsLevel[x][y],其中,颜色分量索引为cIdx,左上亮度位置为(x0,y0),按照以下伪代码过程的规定推导局部和变量locSumAbs:
其中,log2TbWidth是变换块的宽度的以2为底的对数,且log2TbHeight是变换块的高度的以2为底的对数。对于abs_remainder和dec_abs_level,变量baseLevel分别为4和0。给定局部和变量locSumAbs,如表2所规定的,推导Rice参数cRiceParam。
表2—基于locSumAbs的cRiceParam规范
locSumAbs 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
cRiceParam 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2
locSumAbs 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
cRiceParam 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3
基于历史的Rice参数推导
如果系数位于TU边界或首次用Rice方法解码,则用于Rice参数推导的模板计算可能产生不准确的系数估计。因为一些模板位置可能位于TU之外并被解释为或初始化为值0,所以对于这些系数,模板计算偏向0。为了提高从计算的模板估计Rice的准确性,对于当前TU之外的模板位置,用历史推导值更新局部和变量locSumAbs,而不是初始化为0。该方法的实施方式如下文第9.3.3.2条的VVC规范文本摘录所示。
为了维护相邻系数/样本值的历史,利用每个颜色分量的历史计数器StatCoeff[cIdx],cIdx=0、1、2分别表示三个颜色分量Y、U、V。如果CTU是划分(例如,图像、条带、或瓦片)中的第一个CTU,则StatCoeff[cIdx]初始化如下:
StatCoeff[ idx ] = 2 * Floor( Log2( BitDepth - 10 ) (1)
这里,BitDepth指定视频的亮度和色度数组的样本的比特深度;Floor(x)表示小于或等于x的最大整数,并且Log2(x)是x的以2为底的对数。在解码TU和更新历史计数器之前,将替换变量HistValue初始化为:
HistValue[cIdx] = 1 << StatCoeff[cIdx] (2)
替换变量HistValue用作TU边界之外的相邻样本(例如,相邻样本具有TU之外的水平坐标或垂直坐标)的估计。按照以下伪代码过程的规定重新推导局部和变量locSumAbs,更改的内容标有下划线:
通过指数移动平均过程从第一非零哥伦布-莱斯编码变换系数(abs_remaintment[cIdx]或dec_abs_level[cIdx])每TU更新一次历史计数器StatCoeff。当TU中的第一非零哥伦布-莱斯编码变换系数被编码为abs_remainder时,颜色分量cIdx的历史计数器StatCoeff更新如下:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1 (3)
当TU中的第一非零哥伦布-莱斯编码变换系数被编码为dec_abs_level时,颜色分量cIdx的历史计数器StatCoeff更新如下:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1 (4)
在解码下一个TU之前,可以根据等式(2)使用更新的StatCoeff计算下一个TU的替换变量HistValue。
在HEVC中,为了对在扫描位置n用Golomb-Rice码编码的变换系数等级的剩余绝对值(表示为coeff_abs_level_remaining[n])进行二值化,也使用Rice参数。给定语法元素coeff_abs_level_remaining[n]、当前子块扫描索引i、baseLevel、颜色分量cIdx、以及指定当前亮度变换块的左上样本相对于图像的左上亮度样本的亮度位置(x0,y0),可以如下按照HEVC规范的第9.3.3.11节中的规定对语法元素进行二值化。
取决于persistent_rice_adaptation_enabled_flag的值,适用以下:
-如果persistent_rice_adaptation_enabled_flag等于0,则将变量initRiceValue设置为等于0。
-否则(persistent_rice_adaptation_enabled_flag等于1),适用以下:
-变量sbType推导如下:
o如果transform_skip_flag[x0][y0][cIdx]等于0并且cu_transquant_bypass_flag等于0,则适用
以下:
sbType=2*(cIdx==0?1:0) (9-20)
o否则,适用以下:
sbType=2*(cIdx==0?1:0)+1 (9-21)
-变量initRiceValue推导如下:
initRiceValue=StatCoeff[sbType]/4 (9-22)
-如果第一次为当前子块扫描索引i调用该过程,则StatCoeff[sbType]修改如下:
if(coeff_abs_level_remaining[n]>=(3<<(StatCoeff[sbType]/4)))
StatCoeff[sbType]++
else if(2*coeff_abs_level_remaining[n]<(1<<(StatCoeff[sbType]/4))&&StatCoeff[sbType]>0)
StatCoeff[sbType]-- (9-23)
变量cLastAbsLevel和cLastRiceParam推导如下:
-如果第一次为当前子块扫描索引i调用该过程,则将cLastAbsLevel设置为等于0,并且将cLastRiceParam设置为等于initRiceValue。
-否则(不是第一次为当前子块扫描索引i调用该过程),将cLastAbsLevel和cLastRiceParam分别设置为等于cAbsLevel和cRiceParam的值,cAbsLevel和cRiceParam的值是按照本条中的规定上一次为语法元素coeff_abs_level_remaining[n]调用二值化过程期间被推推导的。
变量cAbsLevel被设置为等于baseLevel+coeff_abs_level_remaining[n]。
变量cRiceParam如下从cLastAbsLevel和cLastRiceParam推导:
-如果persistent_rice_adaptation_enabled_flag等于0,则适用以下:
cRiceParam=Min(cLastRiceParam+(cLastAbsLevel>(3*(1<<cLastRiceParam))?1:0),4) (9-24)
-否则(persistent_rice_adaptation_enabled_flag等于1),则适用以下:
cRiceParam=cLastRiceParam+(cLastAbsLevel>(3*(1<<cLastRiceParam))?1:0) (9-25)
变量cMax从cRiceParam推导为:
cMax=4<<cRiceParam (9-26)
语法元素coeff_abs_level_remaining[n]的二值化是前缀bin串和后缀bin串(如果存在)的串联。
对于前缀bin串的推导,适用以下:
-coeff_abs_level_remaining[n]的前缀值prefixVal推导如下:
prefixVal=Min(cMax,coeff_abs_level_remaining[n]) (9-27)
-通过按照第9.3.3.2条中的规定为prefixVal调用TR二值化过程来规定前缀bin串,其中变量cMax和cRiceParam作为输入。
当前缀bin串等于长度为4且所有比特都等于1的比特串时,存在后缀bin串且推导如下:
-coeff_abs_level_remaining[n]的后缀值suffixVal推导如下:
suffixVal=coeff_abs_level_remaining[n]-cMax (9-28)
-如果extended_precision_processing_flag等于0,则通过按照第9.3.3.3条中的规定为suffixVal的二值化调用k阶EGk二值化过程来规定后缀bin串,其中Exp-Golomb的阶数k设置为等于cRiceParam+1。
-否则(extended_precision_processing_flag等于1),通过按照第9.3.3.4条中的规定为suffixVal的二值化调用有限k阶EGk二值化过程来规定后缀bin串,其中变量riceParam设置为等于cRiceParam+1和颜色分量cIdx。
调色板模式编码
对于具有大量文本和简单图形的计算机生成内容,调色板模式提供了比常规的基于块的残差预测和变换编码更高的压缩效率。调色板模式编码路径开始于编码单元的HEVC和VVC,并采用混合视频编码架构的熵编码引擎。HEVC SCC扩展中的调色板模式支持大小为32×32及更小的编码单元,并且包括两部分:表示不同样本的列表(即调色板)的编码,以及编码单元覆盖的每个空间位置的调色板索引的编码。调色板条目包括调色板中的索引和相应的样本,其中,样本是非单***格式的三元组。
采用调色板模式的每个编码单元使用编码单元自己的调色板,并且由于相邻区域中的调色板之间的高相关性,因而信令包括预测。预测器存储已使用的调色板的调色板信息,并且要么使用指示重复使用预测器条目的标记来构造当前编码单元的调色板,要么在样本不在预测器的列表中时向调色板添加新样本来构造当前编码单元的调色板。对于后一种情况,随后将用调色板更新预测器,然后更新预测器未使用的元素,直到预测器达到最大大小。调色板的最大大小是64,HEVC SCC扩展中预测器的最大大小是128,其中,通过SPS内的信令可以具有更小的值。然而,在VVC中,调色板和预测器的最大大小不能调整。
在完成调色板构造之后,开始使用水平或垂直扫描模式对编码单元覆盖的空间位置进行编码。对于每个扫描位置,编码器使用行程编码(run-length coding)将调色板索引写入码流,该行程编码具有两种类型的分类:复制索引(copy index)和复制上方(copyabove),其中,复制索引表示直接将调色板条目的索引写入码流。另一方面,对于复制上方模式,索引与水平(或垂直)扫描模式(pattern)的上方行(或左列)的索引相同。对于VVC中的残差编码阶段,样本的编码发生在多个扫描通道(pass)中,其中,第一编码通道使用复制索引类型将扫描位置的索引写入码流。第二编码通道包括表示类型和行程信息的上下文编码bin。最后,第三扫描通道指定索引等于逸出条目(escape entry)的扫描位置的样本。第一扫描通道和第三扫描通道仅对相应的语法元素使用旁路模式,而第二编码通道采用上下文模型进行熵编码。
波前并行处理(WPP)
WPP被设计用于提供并行编码机制。当在VVC中启用WPP时,帧、或瓦片、或条带的每个CTU行构成分离划分。通过SPS元素sps_entropy_coding_sync_enabled_flag启用/禁用WPP。图5示出了启用WPP的瓦片的示例。在图5中,瓦片的每个CTU行以相对于其前一CTU行一个CTU的延迟进行处理。以这种方式,如果在每个CTU行的末端处启用调色板编码,那么除CABAC上下文变量和调色板预测器之外,在划分边界处不破坏连续CTU行之间的依赖性。为了减轻编码效率的潜在损失,自适应的CABAC上下文变量以及调色板预测器的内容从前一CTU行的第一个编码的CTU传播到当前CTU行的第一个CTU。WPP不改变CTU的常规光栅扫描顺序。类似地,WPP也用于HEVC中。在HEVC中,相邻CTU行之间不是一个CTU延迟(one-CTUdelay),而是两个CTU延迟(two-CTU delay)。
启用WPP时,在HEVC和VVC中都使用特殊的初始化过程,以便可以独立处理CTU行。启用WPP时,多达图像中CTU行的数量个线程可以并行运行以处理各个CTU行。通过在解码器中使用WPP,每个解码线程处理图像的单个CTU行。必须组织线程处理的调度,使得对于每个CTU,必须已完成其在前一CTU行中的上相邻CTU的解码。增加WPP的额外开销,以便在编码完每个CTU行(除了最后CTU行)中的第一个CTU之后,可以存储所有CABAC上下文变量以及调色板预测器的内容。
如上所讨论,由于在初始化中不必要的初始化步骤,因而HEVC规范和VVC规范中现有的条带和瓦片初始化以及并行处理初始化可能不是最佳的。在一些实施例中,省去这些不必要的初始化步骤,从而提高了编码效率,降低了视频编码器和解码器的复杂度,并且减少了编码过程中涉及的各种资源消耗例如,CPU时间、存储器使用等。
在HEVC规范中,初始化规定如下。
初始化算术解码引擎的上下文变量、Rice参数初始化状态、以及调色板预测器变量如下:
-如果CTU是瓦片中的第一个CTU,则适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果entropy_coding_sync_enabled_flag等于1,并且要么CtbAddrInRs%PicWidthInCtbsY等于0,
要么TileId[CtbAddrInTs]不等于TileId[CtbAddrRsToTs[CtbAddrInRs-1]],则适用以下:
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图9-2)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0+CtbSizeY,y0-CtbSizeY) (9-3)
-调用第6.4.1条中规定的z扫描顺序的块的可用性推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)和设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)作为输入,并且将输出分配给availableFlagT。
-调用上下文变量、Rice参数初始化状态、以及调色板预测器变量的同步过程如下:
-如果availableFlagT等于1,则调用第9.3.2.5条中规定的上下文变量、Rice参数初始化状态和调色板预测器变量的同步过程,用TableStateIdxWpp、TableMpsValWpp、TableStatCoeffWpp、PredictorPaletteSizeWpp、以及TablePredictorPaletteEntriesWpp作为输入。
-否则,适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果CtbAddrInRs等于slice_segment_address且dependent_slice_segment_flag等于1,则调用第9.3.2.5条中规定的上下文变量和Rice参数初始化状态的同步过程,用TableStateIdxDs、TableMpsValDs、TableStatCoeffDs、PredictorPaletteSizeDs、以及TablePredictorPaletteEntriesDs作为输入。
-否则,适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
按照第9.3.2.6条中的规定调用算术解码引擎的初始化过程。
不是瓦片的第一个CTU或者不是瓦片的CTU行中的第一个CTU的一些CTU也可以调用上述初始化过程。然而,对这些CTU来说执行上述初始化过程是不必要的。事实上,由于执行了这些不必要的初始化,反而影响了编码性能。初始化使得各种变量被重置为上述变量各自的初始值,使得CTU的编码与先前的CTU无关,而没有利用同一条带或瓦片内CTU之间的相关性。在该实施例中,建议省去以下带删除线的一些初始化过程,以提高编码效率。
初始化算术解码引擎的上下文变量、Rice参数初始化状态、以及调色板预测器变量如下:
-如果CTU是瓦片中的第一个CTU,则适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果entropy_coding_sync_enabled_flag等于1,并且要么CtbAddrInRs%PicWidthInCtbsY等于0,要么TileId[CtbAddrInTs]不等于TileId[CtbAddrRsToTs[CtbAddrInRs-1]],则适用以下:
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图9-2)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0+CtbSizeY,y0-CtbSizeY) (9-3)
-调用第6.4.1条中规定的z扫描顺序的块的可用性推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)和设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)作为输入,并且将输出分配给availableFlagT。
-调用上下文变量、Rice参数初始化状态、以及调色板预测器变量的同步过程如下:
-如果availableFlagT等于1,则调用第9.3.2.5条中规定的上下文变量、Rice参数初始化状态和调色板预测器变量的同步过程,用TableStateIdxWpp、TableMpsValWpp、TableStatCoeffWpp、PredictorPaletteSizeWpp、以及TablePredictorPaletteEntriesWpp作为输入。
-否则,适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果CtbAddrInRs等于slice_segment_address且dependent_slice_segment_flag等于1,则调用第9.3.2.5条中规定的上下文变量和Rice参数初始化状态的同步过程,用TableStateIdxDs、TableMpsValDs、TableStatCoeffDs、PredictorPaletteSizeDs、以及TablePredictorPaletteEntriesDs作为输入。
按照第9.3.2.6条中的规定调用算术解码引擎的初始化过程。
在另一示例中,HEVC规范的初始化可以修改如下:
初始化算术解码引擎的上下文变量、Rice参数初始化状态、以及调色板预测器变量如下:
-如果CTU是瓦片中的第一个CTU或CtbAddrInRs等于slice_segment_address且dependent_slice_segment_flag等于0,则适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果entropy_coding_sync_enabled_flag等于1,并且要么CtbAddrInRs%PicWidthInCtbsY等于0,要么TileId[CtbAddrInTs]不等于TileId[CtbAddrRsToTs[CtbAddrInRs-1]],则适用以下:
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图9-2)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0+CtbSizeY,y0-CtbSizeY) (9-3)
-调用第6.4.1条中规定的z扫描顺序的块的可用性推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)和设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)作为输入,并且将输出分配给availableFlagT。
-调用上下文变量、Rice参数初始化状态、以及调色板预测器变量的同步过程如下:
-如果availableFlagT等于1,则调用第9.3.2.5条中规定的上下文变量、Rice参数初始化状态和调色板预测器变量的同步过程,用TableStateIdxWpp、TableMpsValWpp、TableStatCoeffWpp、PredictorPaletteSizeWpp、以及TablePredictorPaletteEntriesWpp作为输入。
-否则,适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
-否则,如果CtbAddrInRs等于slice_segment_address且dependent_slice_segment_flag等于1,则调用第9.3.2.5条中规定的上下文变量和Rice参数初始化状态的同步过程,用TableStateIdxDs、TableMpsValDs、TableStatCoeffDs、PredictorPaletteSizeDs、以及TablePredictorPaletteEntriesDs作为输入。
按照第9.3.2.6条中的规定调用算术解码引擎的初始化过程。
类似地,VVC规范中规定的以下初始化具有与上文讨论的HEVC规范相同的问题初始化算术解码引擎的上下文变量如下:
-如果CTU是条带或瓦片中的第一个CTU,则按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并且将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1,并且初始化数组StatCoeff[i],其中i=0...2如下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (1513)
-否则,如果sps_entropy_coding_sync_enabled_flag等于1并且CtbAddrX等于CtbToTileColBd[CtbAddrX],
适用以下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (XXXX)
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图12)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0,y0-CtbSizeY) (1510)
-调用第6.4.4条中规定的相邻块可用性的推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)、设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)、设置为等于FALSE的checkPredModeY、以及设置为等于0的cIdx作为输入,并且将输出分配给availableFlagT。
-调用上下文变量的同步过程如下:
-如果availableFlagT等于1,则适用以下:
-调用第9.3.2.4条中规定的上下文变量的同步过程,用TableStateIdx0Wpp和TableStateIdx1Wpp作为输入。
-当sps_palette_enabled_flag等于1时,调用第9.3.2.7条中规定的调色板预测器的同步过程。
-否则,按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1。
-否则,按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1。
通过调用第9.3.2.5条中规定的算术解码引擎的初始化过程,初始化都具有16比特寄存器精度的解码引擎寄存器ivlCurrRange和ivlOffset。
在该实施例中,建议省去VVC规范的以下带删除线的一些初始化过程,以进一步提高编码效率。初始化算术解码引擎的上下文变量如下:
-如果CTU是条带或瓦片中的第一个CTU,则按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并且将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1,并且初始化数组StatCoeff[i],其中i=0...2如下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (1513)
-否则,如果sps_entropy_coding_sync_enabled_flag等于1并且CtbAddrX等于CtbToTileColBd[CtbAddrX],适用以下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (XXXX)
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图12)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0,y0-CtbSizeY) (1510)
-调用第6.4.4条中规定的相邻块可用性的推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)、设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)、设置为等于FALSE的checkPredModeY、以及设置为等于0的cIdx作为输入,并且将输出分配给availableFlagT。
-调用上下文变量的同步过程如下:
-如果availableFlagT等于1,则适用以下:
-调用第9.3.2.4条中规定的上下文变量的同步过程,用TableStateIdx0Wpp和TableStateIdx1Wpp作为输入。
-当sps_palette_enabled_flag等于1时,调用第9.3.2.7条中规定的调色板预测器的同步过程。
-否则,按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1。
通过调用第9.3.2.5条中规定的算术解码引擎的初始化过程,初始化都具有16比特寄存器精度的解码引擎寄存器ivlCurrRange和ivlOffset。
可选地,VVC的修改的初始化过程也可以描述如下:
初始化算术解码引擎的上下文变量、以及数组PredictorPaletteSize和StatCoeff如下:
-初始化数组StatCoeff[i],其中i=0...2如下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (1513)
-如果CTU是条带或瓦片中的第一个CTU,则按照第9.3.2.2子条中的规定调用上下文变量的初始化过程,并且将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1。
-否则,当sps_entropy_coding_sync_enabled_flag等于1且CtbAddrX等于CtbToTileColBd[CtbAddrX]时,适用以下:
-使用当前CTB的左上亮度样本的位置(x0,y0)推导空间相邻块T(图12)的左上亮度样本的位置(xNbT,yNbT),如下所示:
(xNbT,yNbT)=(x0,y0-CtbSizeY) (1514)
-调用第6.4.4子条中规定的相邻块可用性的推导过程,用设置为等于(x0,y0)的位置(xCurr,yCurr)、设置为等于(xNbT,yNbT)的相邻位置(xNbY,yNbY)、设置为等于FALSE的checkPredModeY、以及设置为等于0的cIdx作为输入,并且将输出分配给availableFlagT。
-调用上下文变量和调色板预测器的同步过程如下:
-如果availableFlagT等于1,则适用以下:
-调用第9.3.2.4子条中规定的上下文变量的同步过程,用TableStateIdx0Wpp和TableStateIdx1Wpp作为输入。
-当sps_palette_enabled_flag等于1时,调用第9.3.2.7子条中规定的调色板预测器的同步过程。
-否则,按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1。
通过调用第9.3.2.5子条中规定的算术解码引擎的初始化过程,初始化都具有16比特寄存器精度的解码引擎寄存器ivlCurrRange和ivlOffset。
等于1的sps_persistent_rice_adaptation_enabled_flag指定在每个TU开始时使用从先前TU累积的统计信息初始化用于abs_remainder[]和dec_abs_level[]的二值化的Rice参数推导。sps_persistent_rice_adaptation_enabled_flag等于0指定在Rice参数推导中不使用先前TU状态。如果sps_persistent_rice_adaptation_enabled_flag不存在,则推断sps_persistent_rice_adaptation_enabled_flag的值等于0。
图6描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程600的示例。例如,过程600可以实现为按照如上所述修改的HEVC规范对视频进行编码。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)实现图6中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程600。但是其他实施方式也是可能的。
在框602,过程600包括访问视频信号的划分。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU行包括一个或多个CTU,并且每个CTU包括一个或多个用于编码的TU。
在包括框606至框620的框604,过程600包括处理划分中的该组CTU中的每个CTU,以将该划分编码为比特。在框606,过程600包括确定CTU是否是瓦片中的第一个CTU。如果CTU是瓦片中的第一个CTU,在框608,根据第一初始化方案初始化用于CABAC的上下文变量、Rice参数变量StatCoeff、以及调色板预测器变量。在第一初始化方案中,根据第一上下文变量初始化过程例如,HEVC规范的第9.3.2.2条中规定的上下文变量的初始化过程,初始化用于CABAC的上下文变量。根据第一Rice参数变量初始化过程初始化Rice参数变量。例如,第一Rice参数变量初始化过程将Rice参数变量StatCoeff[k]初始化为零,其中,k在0到3的范围内,包括端值。根据第一调色板预测器初始化过程例如,HEVC规范的第9.3.2.3条中规定的调色板预测器变量的初始化过程,初始化调色板预测器变量。如果CTU不是瓦片中的第一个CTU,则过程600继续进行到框610。
在另一示例中,框606中的条件可以改变为(a)CTU是瓦片中的第一个CTU,或者(b)CTU是条带中的第一个CTU并且禁用了依赖条带(例如,dependent_slice_segment_flag等于0意味着当前条带是独立条带)。如果条件(a)或条件(b)中的任一个被满足,则使用上述框608的初始化方案;否则,过程600继续进行到框610。
在框610,过程600包括确定是否启用了并行编码机制WPP以及当前CTU是否是CTU行的第一个CTU。在一些示例中,可以通过标记指示并行编码,该标记的值为0表示禁用了并行编码,并且该标记的值为1表示启用了并行编码。如果确定启用了并行编码机制并且当前CTU是CTU行的第一个CTU,则在框612,过程600包括根据第二初始化方案初始化用于CABAC的上下文变量、Rice参数变量StatCoeff、以及调色板预测器变量。
在第二初始化方案中,确定当前CTU的上相邻块的可用标记availableFlagT,并基于可用标记availableFlagT执行初始化。在一些示例中,基于上相邻块的左上亮度样本的位置确定当前CTU的上相邻块的可用标记。如果可用标记availableFlagT指示上相邻块可用,则根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,根据第二Rice参数变量初始化过程初始化Rice参数变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量。第二上下文变量初始化过程、第二Rice参数变量初始化过程、以及第二调色板预测器初始化过程的示例可以是HEVC标准的第9.3.2.5条中规定的上下文变量、Rice参数变量、以及调色板预测器变量的相应初始化过程,其中,TableStateIdxWpp、TableMpsValWpp、TableStatCoeffWpp、PredictorPaletteSizeWpp、以及TablePredictorPaletteEntriesWpp作为输入。
如果当前CTU的上相邻块的可用标记指示上相邻块不可用,则根据上述第一方案中的相应初始化过程初始化上下文变量、Rice参数变量、以及调色板预测器变量。如果未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,则过程600继续进行到框614。
在框614,过程600包括确定CTU是否是条带中的第一个CTU以及条带是否是依赖条带。如果CTU是条带中的第一个CTU并且条带是依赖条带,则在框616,过程600包括根据第三初始化方案初始化用于CABAC的上下文变量、Rice参数变量(表示为StatCoeff)、以及调色板预测器变量。在第三方案中,根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,但该过程的输入与上文框612描述的第二上下文变量初始化过程的输入不同。类似地,根据第二Rice参数变量初始化过程初始化Rice参数变量,该过程的输入与上文框612描述的第二Rice参数变量初始化过程的输入不同。根据第二调色板预测器初始化过程初始化调色板预测器变量,该过程的输入也与与上文框612描述的第二调色板预测器初始化过程的输入不同。例如,HEVC标准的第9.3.2.5条中规定的上下文变量、Rice参数变量、以及调色板预测器变量的相应初始化过程可以作为第三方案中的初始化过程来执行,第三方案中的初始化过程中TableStateIdxDs、TableMpsValDs、TableStatCoeffDs、PredictorPaletteSizeDs、以及TablePredictorPaletteEntriesDs作为输入。以这种方式,将CTU的变量初始化为来自先前条带中的先前CTU的这些变量的值。如果当前CTU不是条带中的第一个CTU,或者条带不是依赖条带,则在不进行任何初始化的情况下,过程600继续进行到框618。换句话说,对于不满足框606、框610、以及框614中描述的任何条件的CTU,不执行初始化。因此,省去了不必要的初始化过程,从而提高了编码效率。
在框618,过程600包括基于Rice参数变量将CTU中的TU编码为二进制表示。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且Rice参数可以用于例如,通过HEVC规范中规定的Golomb-Rice码对TU进行编码。在框620,过程600包括通过基于上下文变量使用上文讨论的CABAC,将CTU的二进制表示编码为包含在视频的码流中的比特。在一些示例中,将CTU中的TU编码为二进制表示还包括基于调色板预测器变量的调色板编码(palettecoding)。在框622,过程600包括输出编码的视频码流。
图7描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程700的示例。例如,过程700可以实现为按照如上所述具有所建议的更改的HEVC规范对视频进行解码。一个或多个计算设备通过执行合适的程序代码实现图7中描绘的操作。例如,实现视频解码器200的计算设备可以通过执行熵解码模块216、反量化模块218、以及反变换模块219的程序代码实现图7中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程700。但是其他实施方式也是可能的。
在框702,过程700包括访问表示视频信号的划分的二进制串或二进制表示。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU包括一个或多个CTU,并且每个CTU包括多个用于编码的TU。
在包括框706至框720的框704,过程700包括处理划分中的该组CTU中的每个CTU的二进制串,以生成该划分的解码的样本。在框706,过程700包括确定CTU是否是瓦片中的第一个CTU。如果CTU是瓦片中的第一个CTU,在框708,根据第一方案初始化用于CABAC的上下文变量、Rice参数变量StatCoeff、以及调色板预测器变量。在第一方案中,根据第一上下文变量初始化过程例如,HEVC标准的第9.3.2.2条中规定的上下文变量的初始化过程,初始化用于CABAC的上下文变量。根据第一Rice参数变量初始化过程初始化Rice参数变量。例如,第一Rice参数变量初始化过程将Rice参数变量StatCoeff[k]初始化为零,其中,k在0到3的范围内,包括端值。根据第一调色板预测器初始化过程例如,HEVC标准的第9.3.2.3条中规定的调色板预测器变量的初始化过程,初始化调色板预测器变量。如果CTU不是瓦片中的第一个CTU,则过程700继续进行到框710。
在另一示例中,框706中的条件可以改变为(a)CTU是瓦片中的第一个CTU,或者(b)CTU是条带中的第一个CTU并且禁用了依赖条带(例如,dependent_slice_segment_flag等于0意味着当前条带是独立条带)。如果条件(a)或条件(b)中的任一个被满足,则使用上述框708的初始化方案;否则,过程700继续进行到框710。
在框710,过程700包括确定是否启用了并行编码机制WPP以及当前CTU是否是CTU行的第一个CTU。在一些示例中,可以通过标记指示并行编码,该标记的值为0表示禁用了并行编码,并且该标记的值为1表示启用了并行编码。如果确定启用了并行编码机制并且当前CTU是CTU行的第一个CTU,则在框712,过程700包括根据第二初始化方案初始化用于CABAC的上下文变量、Rice参数变量StatCoeff、以及调色板预测器变量。
在第二方案中,确定当前CTU的上相邻块的可用标记availableFlagT,并基于可用标记availableFlagT执行初始化。在一些示例中,基于上相邻块的左上亮度样本的位置确定当前CTU的上相邻块的可用标记。如果可用标记availableFlagT指示上相邻块可用,则根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,根据第二Rice参数变量初始化过程初始化Rice参数变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量。第二上下文变量初始化过程、第二Rice参数变量初始化过程、以及第二调色板预测器初始化过程的示例可以是HEVC标准的第9.3.2.5条中规定的上下文变量、Rice参数变量、以及调色板预测器变量的相应初始化过程,其中,TableStateIdxWpp、TableMpsValWpp、TableStatCoeffWpp、PredictorPaletteSizeWpp、以及TablePredictorPaletteEntriesWpp作为输入。
如果当前CTU的上相邻块的可用标记指示上相邻块不可用,则根据上述第一方案中的相应初始化过程初始化上下文变量、Rice参数变量、以及调色板预测器变量。如果未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,则过程700继续进行到框714。
在框714,过程700包括确定CTU是否是条带中的第一个CTU以及条带是否是依赖条带。如果CTU是条带中的第一个CTU并且条带是依赖条带,则在框716,过程700包括根据第三初始化方案初始化用于CABAC的上下文变量、Rice参数变量StatCoeff、以及调色板预测器变量。在第三方案中,根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,但该过程的输入与上文框712描述的第二上下文变量初始化过程的输入不同。类似地,根据第二Rice参数变量初始化过程初始化Rice参数变量,该过程的输入与上文框712描述的第二Rice参数变量初始化过程的输入不同。根据第二调色板预测器初始化过程初始化调色板预测器变量,该过程的输入也与与上文框712描述的第二调色板预测器初始化过程的输入不同。例如,HEVC标准的第9.3.2.5条中规定的上下文变量、Rice参数变量、以及调色板预测器变量的相应初始化过程可以作为第三方案中的初始化过程来执行,第三方案中的初始化过程中TableStateIdxDs、TableMpsValDs、TableStatCoeffDs、PredictorPaletteSizeDs、以及TablePredictorPaletteEntriesDs作为输入。以这种方式,将CTU的变量初始化为来自先前条带中的先前CTU的这些变量的值。如果当前CTU不是条带中的第一个CTU,或者条带不是依赖条带,则在不进行任何初始化的情况下,过程700继续进行到框718。换句话说,对于不满足框706、框710、以及框714中描述的任何条件的CTU,不执行初始化。以这种方式,省去了不必要的初始化过程,从而提高了编码效率。
在框718,过程700包括通过如上所述的CABAC,基于Rice参数变量和上下文变量将CTU的二进制串或二进制表示解码为系数值。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且计算的Rice参数可以用于例如,通过HEVC规范中规定的Golomb-Rice码对TU进行解码。在框720,过程700包括通过例如上文参考图2所述的反量化和反变换,重建CTU中的TU的像素值。在一些示例中,对CTU中TU进行解码还包括基于使用调色板编码进行编码的视频部分的调色板预测器变量的调色板编码。在框722,过程700包括输出解码的视频划分。
图8描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程800的示例。例如,过程800可以实现为按照如上所述VVC标准对视频进行编码。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)实现图8中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程800。但是其他实施方式也是可能的。
在框802,过程800包括访问视频信号的划分。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU行包括一个或多个CTU,并且每个CTU包括一个或多个用于编码的TU。
在包括框808至框820的框804,过程800包括处理划分中的该组CTU中的每个CTU,以将该划分编码为比特。在框808,过程800包括将Rice参数变量StatCoeff初始化为初始值。例如,Rice参数变量StatCoeff可以根据以下设置为如上所述的初始值:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0
其中,i=0...2,StatCoeff表示历史计数器,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导。
在框810,过程800包括确定CTU是否是瓦片或条带中的第一个CTU。如果CTU是瓦片或条带中的第一个CTU,在框812,根据第一初始化方案初始化用于CABAC的上下文变量和调色板预测器变量。在第一初始化方案中,根据第一上下文变量初始化过程例如,VVC标准的第9.3.2.2条中规定的上下文变量的初始化过程,初始化用于CABAC的上下文变量。根据第一调色板预测器初始化过程初始化调色板预测器变量。例如,在第一调色板预测器初始化过程中,调色板预测器变量PredictorPaletteSize[chType]可以初始化为0,其中,chType=0或1。如果CTU不是瓦片或条带中的第一个CTU,则过程800继续进行到框814。
在框814,过程800包括确定是否启用了并行编码机制WPP以及当前CTU是否是CTU行的第一个CTU。在一些示例中,可以通过标记指示并行编码,该标记的值为0表示禁用了并行编码,并且该标记的值为1表示启用了并行编码。如果确定启用了并行编码机制并且当前CTU是CTU行的第一个CTU,则在框816,过程800包括根据第二初始化方案初始化用于CABAC的上下文变量和调色板预测器变量。
在第二初始化方案中,确定当前CTU的上相邻块的可用标记availableFlagT,并基于可用标记availableFlagT执行初始化。在一些示例中,基于上相邻块的左上亮度样本的位置确定当前CTU的上相邻块的可用标记。如果可用标记availableFlagT指示上相邻块可用,则根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量。第二上下文变量初始化过程的示例可以是VVC标准的第9.3.2.4子条中规定的上下文变量初始化过程,其中,TableStateIdx0Wpp和TableStateIdx1Wpp作为输入。第二调色板预测器初始化过程的示例可以是VVC标准的第9.3.2.7子条中规定的调色板预测器初始化过程。
如果当前CTU的上相邻块的可用标记指示上相邻块不可用,则根据上述第一方案中的相应初始化过程初始化上下文变量和调色板预测器变量。如果未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,则在不进行任何初始化过程的情况下,过程800继续进行到框818。换句话说,对于不满足框810和框814中描述的任何条件的CTU,不执行初始化。以这种方式,省去了不必要的初始化过程,从而提高了编码效率。
在框818,过程800包括基于Rice参数变量将CTU中的TU编码为二进制表示。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且Rice参数可以用于例如,通过VVC规范中规定的TR和有限k阶EGk二值化过程的组合对TU进行编码。在框820,过程800包括通过基于上下文变量使用上文讨论的CABAC,将CTU的二进制表示编码为包含在视频的码流中的比特。在一些示例中,将CTU中的TU编码为二进制表示还包括基于调色板预测器变量的调色板编码。在框822,过程800包括输出编码的视频码流。
图9描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程900的示例。例如,过程900可以实现为按照如上所述的VVC标准对视频进行解码。一个或多个计算设备通过执行合适的程序代码实现图9中描绘的操作。例如,实现视频解码器200的计算设备可以通过执行熵解码模块216、反量化模块218、以及反变换模块219的程序代码实现图9中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程900。但是其他实施方式也是可能的。
在框902,过程900包括访问表示视频信号的划分的二进制串或二进制表示。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU行包括一个或多个CTU,并且每个CTU包括一个或多个用于编码的TU。
在包括框906至框920的框904,过程900包括处理划分中的该组CTU中的每个CTU的二进制串,以生成该划分的解码的样本。在框908,过程900包括将Rice参数变量StatCoeff初始化为初始值。例如,Rice参数变量StatCoeff可以根据以下设置为如上所述的初始值:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0
其中,i=0...2,StatCoeff表示历史计数器,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导。
在框910,过程900包括确定CTU是否是瓦片或条带中的第一个CTU。如果CTU是瓦片或条带中的第一个CTU,在框912,根据第一方案初始化用于CABAC的上下文变量和调色板预测器变量。在第一方案中,根据第一上下文变量初始化过程例如,VVC标准的第9.3.2.2条中规定的上下文变量的初始化过程,初始化用于CABAC的上下文变量。根据第一调色板预测器初始化过程初始化调色板预测器变量。例如,调色板预测器变量PredictorPaletteSize[chType]可以初始化为0,其中,chType=0或1。如果CTU不是瓦片或条带中的第一个CTU,则过程900继续进行到框914。
在框914,过程900包括确定是否启用了并行编码机制WPP以及当前CTU是否是CTU行的第一个CTU。在一些示例中,可以通过标记指示并行编码,该标记的值为0表示禁用了并行编码,并且该标记的值为1表示启用了并行编码。如果确定启用了并行编码机制并且当前CTU是CTU行的第一个CTU,则在框916,过程900包括根据第二初始化方案初始化用于CABAC的上下文变量和调色板预测器变量。
在第二方案中,确定当前CTU的上相邻块的可用标记availableFlagT,并基于可用标记availableFlagT执行初始化。在一些示例中,基于上相邻块的左上亮度样本的位置确定当前CTU的上相邻块的可用标记。如果可用标记availableFlagT指示上相邻块可用,则根据第二上下文变量初始化过程初始化用于CABAC的上下文变量,以及根据第二调色板预测器初始化过程初始化调色板预测器变量。第二上下文变量初始化过程的示例可以是VVC标准的第9.3.2.4子条中规定的上下文变量初始化过程,其中,TableStateIdx0Wpp和TableStateIdx1Wpp作为输入。第二调色板预测器初始化过程的示例可以是VVC标准的第9.3.2.7子条中规定的调色板预测器初始化过程。
如果当前CTU的上相邻块的可用标记指示上相邻块不可用,则根据上述第一方案中的相应初始化过程初始化上下文变量和调色板预测器变量。如果未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,则在不进行任何初始化过程的情况下,过程900继续进行到框918。换句话说,对于不满足框910和框914中描述的任何条件的CTU,不执行初始化。以这种方式,省去了不必要的初始化过程,从而提高了编码效率。
在框918,过程900包括通过如上所述的CABAC,基于Rice参数变量和上下文变量将CTU的二进制串或二进制表示解码为系数值。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且计算的Rice参数可以用于例如,通过VVC规范中规定的TR和有限k阶EGk二值化过程的组合对TU进行解码。在框920,过程900包括通过例如上文参考图2所述的反量化和反变换,重建CTU中的TU的像素值。在一些示例中,对CTU中TU进行解码还包括基于使用调色板编码进行编码的视频部分的调色板预测器变量的调色板编码。在框922,过程900包括输出解码的视频划分。
如上所述,当分别为VVC和HEVC启用并行处理时,现有的并行处理初始化会导致一个或两个CTU的延迟。这种延迟减慢了视频编码过程。例如,启用WPP时,HEVC和VVC中的相邻CTU行之间分别存在两个CTU或一个CTU的延迟。当图像高度较大且CTU的大小相对较小时,图像或条带中的CTU行数可能较大,这可能会导致最后一个CTU行的多个CTU的延迟。
在一些实施例中,消除了并行处理的初始化中的延迟,从而提高了编码和解码过程的速度。为了消除WPP的延迟,启用WPP时,对于每个CTU行中的第一个CTU,在对当前图像进行编码之前,CTU之间的所有因变量(例如,用于CABAC的上下文变量、调色板预测的变量、以及用于Rice参数推导的变量等)被重置为这些因变量各自的初始值。根据现有的HEVC和VVC规范,可能的更改如下所示(下划线部分代表添加的部分,删除线部分代表省去的部分)。
对于HEVC:
初始化算术解码引擎的上下文变量、Rice参数初始化状态、以及调色板预测器变量如下:
-如果CTU是瓦片中的第一个CTU,或者如果entropy_coding_sync_enabled_flag 等于1,并且要么CtbAddrInRs%PicWidthInCtbsY等于0,要么TileId[CtbAddrInTs]不等于 TileId[CtbAddrRsToTs[CtbAddrInRs-1]],或者如果CtbAddrInRs等于slice_segment_ address且dependent_slice_segment_flag等于1,则适用以下:
-按照第9.3.2.2条中的规定调用上下文变量的初始化过程。
-将变量StatCoeff[k]设置为等于0,其中,k在0到3的范围内,包括端值。
-按照第9.3.2.3条中的规定调用调色板预测器变量的初始化过程。
按照第9.3.2.6条中的规定调用算术解码引擎的初始化过程。
对于VVC:
初始化算术解码引擎的上下文变量如下:
-如果CTU是条带或瓦片中的第一个CTU,或者如果sps_entropy_coding_sync_ enabled_flag等于1并且CtbAddrX等于CtbToTileColBd[CtbAddrX],则按照第9.3.2.2条中的规定调用上下文变量的初始化过程,并且将数组PredictorPaletteSize[chType]初始化为0,其中chType=0,1,并且初始化数组StatCoeff[i],其中i=0...2如下:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0 (1513)
通过调用第9.3.2.5条中规定的算术解码引擎的初始化过程,初始化都具有16比特寄存器精度的解码引擎寄存器ivlCurrRange和ivlOffset。
图10描绘根据本公开的一些实施例的用于对视频的划分进行编码的过程1000的示例。例如,过程1000可以实现为按照如上所述的HEVC标准或VVC标准对视频进行编码。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)实现图10中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程1000。但是其他实施方式也是可能的。
在框1002,过程1000包括访问视频信号的划分。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU包括一个或多个CTU,并且每个CTU包括多个用于编码的TU。
在包括框1006至框1012的框1004,过程1000包括处理划分中的该组CTU中的每个CTU,以将该划分编码为比特。在框1006,过程1000包括确定是否满足初始化条件。该初始化条件包括:(1)CTU是瓦片中的第一个CTU,或者(2)CTU是瓦片中的第一个CTU,或者(3)启用了并行编码WPP并且CTU是瓦片的CTU行中的第一个CTU。
如果满足初始化条件,则在框1008,根据初始化方案初始化用于CABAC的上下文变量、Rice参数变量、以及调色板预测器变量。在该初始化方案中,根据上下文变量的初始化过程初始化用于CABAC的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,以及根据调色板预测器条目的初始化过程初始化调色板预测器变量。在HEVC中,上下文变量的初始化过程可以是HEVC规范的第9.3.2.2条中规定的过程。Rice参数变量初始化过程可以将Rice参数变量StatCoeff[k]设置为0,其中,k在0到3的范围内。调色板预测器初始化过程可以是HEVC规范的第9.3.2.3条中规定的过程。在VVC中,上下文变量初始化过程可以是VVC规范的第9.3.2.2条中规定的过程。Rice参数变量初始化过程可以根据以下设置Rice参数变量StatCoeff:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff表示历史计数器,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导,并且调色板预测器初始化过程包括将调色板预测器变量设置为0。调色板预测器初始化过程可以将调色板预测器变量设置为0。
如果不满足初始化条件,过程1000继续进行到框1010。换句话说,如果不满足初始化条件,则不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化。与过程600和过程800相比,对于满足初始化条件的CTU,仅执行一个初始化方案。此外,并行编码的初始化独立于先前CTU行,因此消除了基于先前CTU行的初始化引起的编码延迟。
在框1010,过程1000包括基于Rice参数变量将CTU中的TU编码为二进制表示。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且Rice参数可以用于例如,通过HEVC标准中规定的Golomb-Rice码对TU进行编码。在框1012,过程1000包括通过基于上下文变量使用上文讨论的CABAC,将CTU的二进制表示编码为包含在视频的码流中的比特。在一些示例中,将CTU中的TU编码为二进制表示还包括基于调色板预测器变量的调色板编码。在框1014,过程1000包括输出编码的视频码流。
图11描绘根据本公开的一些实施例的用于对视频的划分进行解码的过程1100的示例。例如,过程1100可以实现为按照如上所述的HEVC标准或VVC标准对视频进行编码。一个或多个计算设备通过执行合适的程序代码实现图11中描绘的操作。例如,实现视频解码器200的计算设备可以通过执行熵解码模块216、反量化模块218、以及反变换模块219的程序代码实现图11中描绘的操作。出于说明性目的,参考附图中描绘的一些示例描述过程1100。但是其他实施方式也是可能的。
在框1102,过程1100包括访问表示视频信号的划分的二进制串或二进制表示。划分可以是视频编码器在执行编码时作为单元处理的视频帧、条带、或瓦片或任何类型的划分。该划分包括如图5所示排列成CTU行的一组CTU。每个CTU包括一个或多个CTU,并且每个CTU包括多个用于编码的TU。
在包括框1106至框1112的框1104,过程1100包括处理划分中的该组CTU中的每个CTU的二进制串,以生成该划分的解码的样本。在框1106,过程1100包括确定是否满足初始化条件。该初始化条件包括:(1)CTU是瓦片中的第一个CTU,或者(2)CTU是瓦片中的第一个CTU,或者(3)启用了并行编码并且CTU是瓦片的CTU行中的第一个CTU。
如果满足初始化条件,则在框1108,根据初始化方案初始化用于CABAC的上下文变量、Rice参数变量、以及调色板预测器变量。在该初始化方案中,根据上下文变量的初始化过程初始化用于CABAC的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,以及根据调色板预测器条目的初始化过程初始化调色板预测器变量。在HEVC中,上下文变量的初始化过程可以是HEVC规范的第9.3.2.2条中规定的过程。Rice参数变量初始化过程可以将Rice参数变量StatCoeff[k]设置为0,其中,k在0到3的范围内。调色板预测器初始化过程可以是HEVC规范的第9.3.2.3条中规定的过程。在VVC中,上下文变量初始化过程可以是VVC规范的第9.3.2.2条中规定的过程。Rice参数变量初始化过程可以根据以下设置Rice参数变量:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff表示历史计数器,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导,并且调色板预测器初始化过程包括将调色板预测器变量设置为0。调色板预测器初始化过程可以将调色板预测器变量设置为0。
如果不满足初始化条件,过程1100继续进行到框1110。换句话说,如果不满足初始化条件,则不对上下文变量、Rice参数变量、以及调色板预测器变量执行初始化。与过程700和过程900相比,对于满足初始化条件的CTU,仅执行一个初始化方案。此外,并行编码的初始化独立于先前CTU行,因此消除了基于先前CTU行的初始化引起的编码延迟。
在框1110,过程1100包括通过如上所述的CABAC,基于Rice参数变量和上下文变量将CTU的二进制串或二进制表示解码为系数值。例如,可以基于Rice参数变量StatCoeff计算Rice参数,并且计算的Rice参数可以用于例如,通过VVC规范中规定的TR和有限k阶EGk二值化过程的组合或HEVC规范中规定的Golomb-Rice码对TU进行解码。在框1112,过程1100包括通过例如上文参考图2所述的反量化和反变换,重建CTU中的TU的像素值。在一些示例中,对CTU中TU进行解码还包括基于使用调色板编码进行编码的视频部分的调色板预测器变量的调色板编码。在框1114,过程1114包括输出解码的视频划分。
实现视频编码相关量化的计算***示例
任何合适的计算***都可以用于执行本文描述的操作。例如,图12描绘可以实现图1的视频编码器100或图2的视频解码器200的计算设备1200的示例。在一些实施例中,计算设备1200可以包括处理器1212,该处理器1212通信地耦合至存储器1214,并且该处理器1212执行计算机可执行程序代码和/或访问存储在存储器1214中的信息。处理器1212可以包括微处理器、专用集成电路(“ASIC”)、状态机、或其他处理设备。处理器1212可以包括多个处理设备中的任何处理设备(包括一个)。这样的处理器可以包括存储有指令的计算机可读介质或者可以与存储有指令的计算机可读介质通信,当由处理器1212执行时,指令使得处理器执行本文所描述的操作。
存储器1214可以包括任何合适的非暂时性计算机可读介质。计算机可读介质可以包括能够向处理器提供计算机可读指令或其他程序代码的任何电子、光学、磁性、或其他存储设备。计算机可读介质的非限制性示例包括磁盘、存储芯片、ROM、RAM、ASIC、配置的处理器、光存储、磁带或其他磁存储、或者计算机处理器可以从中读取指令的任何其他介质。指令可以包括由编译器和/或解释器从以任何合适的计算机编程语言编写的代码生成的处理器特定指令,上述计算机编程语言包括例如C、C++、C#、Visual Basic、Java、Python、Perl、JavaScript、以及ActionScript。
计算设备1200还可以包括总线1216。总线1216可以通信地耦合计算设备1200的一个或多个组件。计算设备1200还可以包括多个外部或内部设备,例如,输入或输出设备。例如,计算设备1200示出了输入/输出(“I/O”)接口1218,该接口1218可以从一个或多个输入设备1220接收输入或者向一个或多个输出设备1222提供输出。一个或多个输入设备1220和一个或多个输出设备1222可以通信地耦合到I/O接口1218。可以通过任何合适的方式(例如,通过印刷电路板的连接、通过电缆的连接、通过无线传输的通信等)实现通信耦合。输入设备1220的非限制性示例包括触摸屏(例如,用于对触摸区域进行成像的一个或多个相机或用于检测由触摸引起的压力变化的压力传感器)、鼠标、键盘、或可以用于响应计算设备用户的物理动作生成输入事件的任何其他设备。输出设备1222的非限制性示例包括LCD屏幕、外部监视器、扬声器、或可用于显示或以其他方式呈现由计算设备生成的输出的任何其他设备。
计算设备1200可以执行用于处理器1212以执行上文关于图1至图11所描述的操作中的一个或多个的程序代码。程序代码可以包括视频编码器100或视频解码器200。程序代码可以驻存在存储器1214或任何合适的计算机可读介质中,并且可以由处理器1212或任何其他合适的处理器执行。
计算设备1200还可以包括至少一个网络接口设备1224。网络接口设备1224可以包括适合于建立到一个或多个数据网络1228的有线或无线数据连接的任何设备或设备组。网络接口设备1224的非限制性示例包括以太网网络适配器、调制解调器等。计算设备1200可以经由网络接口设备1224将消息作为电信号或光信号发送。
常规注意事项
本文阐述了许多具体细节以提供对所要求保护的主题的透彻理解。然而,本领域技术人员将理解,可以在没有这些具体细节的情况下实践所要求保护的主题。在其他情况下,没有详细描述普通技术人员已知的方法、装置或***,以免模糊要求保护的主题。
除非另有具体说明,否则应当理解,贯穿本说明书的讨论使用诸如“处理”、“计算”、“运算”、“确定”和“识别”等术语是指计算设备(例如,一个或多个计算机或类似的电子计算设备或设备)的动作或过程,上述计算设备操纵或转换表示为计算平台的存储器、寄存器、或其他信息存储设备、传输设备、或显示设备内的物理电子量或磁量的数据。
本文讨论的一个或多个***不限于任何特定的硬件架构或配置。计算设备可以包括提供基于一个或多个输入的结果的任何合适的组件布置。合适的计算设备包括访问所存储的软件的基于多用途微处理器的计算机***,该***访问从实现本主题的一个或多个实施例的通用计算设备到专用计算设备编程或配置计算***的存储软件。任何合适的编程、脚本、或其他类型的语言或语言组合可以用于在编程或配置计算设备时使用的软件中实现本文包含的教导。
本文公开的方法的实施例可以在这样的计算设备的操作中执行。可以改变上述示例中呈现的框的顺序—例如,框可以重新排序、组合、和/或分为子框。一些框或过程可以并行执行。
本文中使用的“适于”或“用于”意味着开放和包容的语言,不排除适于或用于执行附加任务或步骤的设备。此外,“基于”的使用意味着开放和包容,因为“基于”一个或多个所列举的条件或值的过程、步骤、计算、或其他动作实际上可以基于上述所列举的条件或值之外的附加条件或值。本文中包括的标题、列表、以及编号仅为了便于解释,并无意限制。
虽然已经针对本文的具体实施例详细描述了本主题,但是应当理解,本领域技术人员在理解前述内容后,可以容易地对这些实施例进行改变、变化和等同。因此,应当理解,本公开是出于示例而非限制的目的而提出的,并且不排除包括对本领域普通技术人员来说显而易见的对本主题的更改、变化和/或添加。

Claims (40)

1.一种用于从视频码流解码视频的方法,所述方法包括:
访问表示所述视频的划分的二进制串,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
对于所述划分中的所述多个CTU中的每个CTU,
确定所述CTU是否是瓦片中的第一个CTU;
响应于确定所述CTU是瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;
响应于确定所述CTU不是瓦片中的第一个CTU,确定是否启用了并行编码以及所述CTU是否是瓦片的CTU行中的第一个CTU;
响应于确定启用了所述并行编码并且所述CTU是瓦片的CTU行中的第一个CTU,
确定所述CTU的上相邻块的可用标记,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用,根据第二上下文变量初始化过程初始化所述上下文变量,根据第二Rice参数变量初始化过程初始化所述Rice参数变量,以及根据第二调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块不可用,根据所述第一上下文变量初始化过程初始化所述上下文变量,根据所述第一Rice参数变量初始化过程初始化所述Rice参数变量,以及根据所述第一调色板预测器初始化过程初始化所述调色板预测器变量;
响应于确定未启用所述并行编码或者所述CTU不是瓦片的CTU行中的第一个CTU,
确定所述CTU是否是条带中的第一个CTU以及所述条带是否是依赖条带,
响应于确定所述CTU是条带中的第一个CTU并且所述条带是依赖条带,根据第三上下文变量初始化过程初始化所述上下文变量,根据第三Rice参数变量初始化过程初始化所述Rice参数变量,以及根据第三调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU不是条带中的第一个CTU或者所述条带不是依赖条带,不对所述上下文变量、所述Rice参数变量、以及所述调色板预测器变量执行初始化;以及
对所述CTU进行解码,包括:
基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值,以及
从所述系数值确定所述CTU的像素值。
2.根据权利要求1所述的方法,其中,所述划分是帧、条带、或瓦片。
3.根据权利要求1所述的方法,其中,对所述CTU进行解码还包括:进一步基于所述调色板预测器变量,将对应于所述CTU的所述二进制串解码为所述CTU的所述系数值。
4.根据权利要求1所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将对应于所述CTU的所述二进制串解码为所述系数值。
5.根据权利要求1所述的方法,其中,所述第一Rice参数变量初始化过程包括将所述Rice参数变量设置为零。
6.根据权利要求1所述的方法,其中,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用而调用的所述第二上下文变量初始化过程、所述第二Rice参数变量初始化过程、以及所述第二调色板预测器初始化过程,基于来自所述CTU的先前CTU行中的另一CTU的变量初始化相应变量;以及
响应于确定所述CTU是条带中的第一个CTU而调用的所述第三上下文变量初始化过程、所述第三Rice参数变量初始化过程、以及所述第三调色板预测器初始化过程,基于所述CTU的先前CTU初始化相应变量。
7.根据权利要求1所述的方法,其中,所述CTU的所述上相邻块的所述可用标记是基于所述上相邻块的左上亮度样本的位置确定的。
8.一种用于从视频码流解码视频的方法,所述方法包括:
访问表示所述视频的划分的二进制串,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
对于所述划分中的所述多个CTU中的每个CTU,
将Rice参数变量初始化为初始值;
确定所述CTU是否是条带或瓦片中的第一个CTU;
响应于确定所述CTU是条带或瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;
响应于确定所述CTU不是条带或瓦片中的第一个CTU,确定是否启用了并行编码以及所述CTU是否是瓦片的CTU行中的第一个CTU;
响应于确定启用了所述并行编码并且所述CTU是瓦片的CTU行中的第一个CTU,
确定所述CTU的上相邻块的可用标记,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用,根据第二上下文变量初始化过程初始化所述上下文变量,以及根据第二调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块不可用,根据所述第一上下文变量初始化过程初始化所述上下文变量,以及根据所述第一调色板预测器初始化过程初始化所述调色板预测器变量;
响应于确定未启用所述并行编码或者所述CTU不是瓦片的CTU行中的第一个CTU,不对所述上下文变量和所述调色板预测器变量执行初始化;以及
对所述CTU进行解码,包括:
基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值,以及
从所述系数值确定所述CTU的像素值。
9.根据权利要求8所述的方法,其中,所述划分是帧、条带、或瓦片。
10.根据权利要求8所述的方法,其中,对所述CTU进行解码还包括:进一步基于所述调色板预测器变量,将对应于所述CTU的所述二进制串解码为所述CTU的所述系数值。
11.根据权利要求8所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将对应于所述CTU的所述二进制串解码为所述系数值。
12.根据权利要求8所述的方法,其中,将所述Rice参数变量初始化为初始值包括根据以下设置所述Rice参数变量:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff[i]表示所述Rice参数变量,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且所述sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导。
13.根据权利要求8所述的方法,其中,所述第一调色板预测器初始化过程包括将所述调色板预测器变量设置为0。
14.根据权利要求8所述的方法,其中,当启用了调色板编码时,执行响应于确定所述CTU是条带中的第一个CTU而调用的所述第二调色板预测器初始化过程。
15.根据权利要求8所述的方法,其中,所述CTU的所述上相邻块的所述可用标记是基于所述上相邻块的左上亮度样本的位置确定的。
16.一种用于从视频码流解码视频的方法,所述方法包括:
访问表示所述视频的划分的二进制串,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
对于所述划分中的所述多个CTU中的每个CTU,
确定满足初始化条件,所述初始化条件包括(a)所述CTU是瓦片中的第一个CTU,或者(b)
所述CTU是瓦片中的第一个CTU,或者(c)启用了并行编码并且所述CTU是瓦片的CTU行中的第一个CTU;
响应于确定满足所述初始化条件,根据上下文变量的初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,以及根据调色板预测器条目的初始化过程初始化调色板预测器变量;
响应于确定不满足所述初始化条件,不对所述上下文变量、所述Rice参数变量、以及所述调色板预测器变量执行初始化;以及
对所述CTU进行解码,包括:
基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值,以及
从所述系数值确定所述CTU的像素值。
17.根据权利要求16所述的方法,其中,对所述CTU进行解码还包括:进一步基于所述调色板预测器变量,将对应于所述CTU的所述二进制串解码为所述CTU的所述系数值。
18.根据权利要求16所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将对应于所述CTU的所述二进制串解码为所述CTU的系数值包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将对应于所述CTU的所述二进制串解码为所述系数值。
19.根据权利要求16所述的方法,其中,所述Rice参数变量初始化过程包括根据以下设置所述Rice参数变量:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff[i]表示所述Rice参数变量,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且所述sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导,并且所述调色板预测器初始化过程包括将所述调色板预测器变量设置为0。
20.根据权利要求16所述的方法,其中,Rice参数变量初始化过程包括将所述Rice参数变量StatCoeff[k]设置为0,其中,k在0到3的范围内。
21.一种用于编码视频的方法,所述方法包括:
访问所述视频的划分,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
处理所述视频的所述划分以生成所述划分的二进制表示,所述处理包括:
对于所述划分中的所述多个CTU中的每个CTU,
确定所述CTU是否是瓦片中的第一个CTU;
响应于确定所述CTU是瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,根据第一Rice参数变量初始化过程初始化Rice参数变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;
响应于确定所述CTU不是瓦片中的第一个CTU,确定是否启用了并行编码以及所述CTU是否是瓦片的CTU行中的第一个CTU;
响应于确定启用了所述并行编码并且所述CTU是瓦片的CTU行中的第一个CTU,
确定所述CTU的上相邻块的可用标记,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用,根据第二上下文变量初始化过程初始化所述上下文变量,根据第二Rice参数变量初始化过程初始化所述Rice参数变量,以及根据第二调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块不可用,根据所述第一上下文变量初始化过程初始化所述上下文变量,根据所述第一Rice参数变量初始化过程初始化所述Rice参数变量,以及根据所述第一调色板预测器初始化过程初始化所述调色板预测器变量;
响应于确定未启用所述并行编码或者所述CTU不是瓦片的CTU行中的第一个CTU,
确定所述CTU是否是条带中的第一个CTU以及所述条带是否是依赖条带,
响应于确定所述CTU是条带中的第一个CTU并且所述条带是依赖条带,根据第三上下文变量初始化过程初始化所述上下文变量,根据第三Rice参数变量初始化过程初始化所述Rice参数变量,以及根据第三调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU不是条带中的第一个CTU或者所述条带不是依赖条带,不对所述上下文变量、所述Rice参数变量、以及所述调色板预测器变量执行初始化;以及
对所述CTU进行编码,包括基于所述Rice参数变量和所述上下文变量,将所述CTU中的变换单元(TU)的系数值编码为二进制表示,以及
将所述划分的所述二进制表示编码为所述视频的码流。
22.根据权利要求21所述的方法,其中,所述划分是帧、条带、或瓦片。
23.根据权利要求21所述的方法,其中,对所述CTU进行编码还包括:进一步基于所述调色板预测器变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
24.根据权利要求21所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
25.根据权利要求21所述的方法,其中,所述第一Rice参数变量初始化过程包括将所述Rice参数变量设置为零。
26.根据权利要求21所述的方法,其中,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用而调用的所述第二上下文变量初始化过程、所述第二Rice参数变量初始化过程、以及所述第二调色板预测器初始化过程,基于来自所述CTU的先前CTU行中的另一CTU的变量初始化相应变量;以及
响应于确定所述CTU是条带中的第一个CTU而调用的所述第三上下文变量初始化过程、所述第三Rice参数变量初始化过程、以及所述第三调色板预测器初始化过程,基于所述CTU的先前CTU初始化相应变量。
27.根据权利要求21所述的方法,其中,所述CTU的所述上相邻块的所述可用标记是基于所述上相邻块的左上亮度样本的位置确定的。
28.一种用于编码视频的方法,所述方法包括:
访问所述视频的划分,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
处理所述视频的所述划分以生成所述划分的二进制表示,所述处理包括:
对于所述划分中的所述多个CTU中的每个CTU,
将Rice参数变量初始化为初始值;
确定所述CTU是否是条带或瓦片中的第一个CTU;
响应于确定所述CTU是条带或瓦片中的第一个CTU,根据第一上下文变量初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,以及根据第一调色板预测器初始化过程初始化调色板预测器变量;
响应于确定所述CTU不是条带或瓦片中的第一个CTU,确定是否启用了并行编码以及所述CTU是否是瓦片的CTU行中的第一个CTU;
响应于确定启用了所述并行编码并且所述CTU是瓦片的CTU行中的第一个CTU,
确定所述CTU的上相邻块的可用标记,
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块可用,根据第二上下文变量初始化过程初始化所述上下文变量,以及根据第二调色板预测器初始化过程初始化所述调色板预测器变量,以及
响应于确定所述CTU的所述上相邻块的所述可用标记指示所述上相邻块不可用,根据所述第一上下文变量初始化过程初始化所述上下文变量,以及根据所述第一调色板预测器初始化过程初始化所述调色板预测器变量;
响应于确定未启用所述并行编码或者所述CTU不是瓦片的CTU行中的第一个CTU,不对所述上下文变量和所述调色板预测器变量执行初始化;以及
对所述CTU进行编码,包括基于所述Rice参数变量和所述上下文变量,将所述CTU中的变换单元(TU)的系数值编码为二进制表示,以及
将所述划分的所述二进制表示编码为所述视频的码流。
29.根据权利要求28所述的方法,其中,所述划分是帧、条带、或瓦片。
30.根据权利要求28所述的方法,其中,对所述CTU进行编码还包括:进一步基于所述调色板预测器变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
31.根据权利要求28所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
32.根据权利要求28所述的方法,其中,将所述Rice参数变量初始化为初始值包括根据以下设置所述Rice参数变量:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff[i]表示所述Rice参数变量,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且所述sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导。
33.根据权利要求28所述的方法,其中,所述第一调色板预测器初始化过程包括将所述调色板预测器变量设置为0。
34.根据权利要求28所述的方法,其中,当启用了调色板编码时,执行响应于确定所述CTU是条带中的第一个CTU而调用的所述第二调色板预测器初始化过程。
35.根据权利要求28所述的方法,其中,所述CTU的所述上相邻块的所述可用标记是基于所述上相邻块的左上亮度样本的位置确定的。
36.一种用于编码视频的方法,所述方法包括:
访问所述视频的划分,所述划分包括形成一个或多个编码树单元(CTU)行的多个CTU;
处理所述视频的所述划分以生成所述划分的二进制表示,所述处理包括:
对于所述划分中的所述多个CTU中的每个CTU,
确定满足初始化条件,所述初始化条件包括(a)所述CTU是瓦片中的第一个CTU,或者(b)
所述CTU是瓦片中的第一个CTU,或者(c)启用了并行编码并且所述CTU是瓦片的CTU行中的第一个CTU;
响应于确定满足所述初始化条件,根据上下文变量的初始化过程初始化用于上下文自适应二进制算术编码(CABAC)的上下文变量,根据Rice参数变量初始化过程初始化Rice参数变量,
以及根据调色板预测器条目的初始化过程初始化调色板预测器变量;
响应于确定不满足所述初始化条件,不对所述上下文变量、所述Rice参数变量、以及所述调色板预测器变量执行初始化;以及
对所述CTU进行编码,包括基于所述Rice参数变量和所述上下文变量,将所述CTU中的变换单元(TU)的系数值编码为二进制表示,以及
将所述划分的所述二进制表示编码为所述视频的码流。
37.根据权利要求36所述的方法,其中,对所述CTU进行编码还包括:进一步基于所述调色板预测器变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
38.根据权利要求36所述的方法,其中,基于所述Rice参数变量和所述上下文变量,将所述CTU中的所述TU的所述系数值编码为所述二进制表示包括:基于所述Rice参数变量计算所述CTU的Rice参数,以及基于计算的所述Rice参数将所述CTU中的所述TU的所述系数值编码为所述二进制表示。
39.根据权利要求36所述的方法,其中,所述Rice参数变量初始化过程包括根据以下设置所述Rice参数变量:
StatCoeff[i]=sps_persistent_rice_adaptation_enabled_flag?2*Floor(Log2(BitDepth-10):0,
其中,i=0...2,StatCoeff[i]表示所述Rice参数变量,Floor(x)表示小于或等于x的最大整数,以及Log2(x)是x的以2为底的对数,并且所述sps_persistent_rice_adaptation_enabled_flag的值为1表示启用了基于历史的Rice参数推导,并且所述调色板预测器初始化过程包括将所述调色板预测器变量设置为0。
40.根据权利要求36所述的方法,其中,Rice参数变量初始化过程包括将所述Rice参数变量StatCoeff[k]设置为0,其中,k在0到3的范围内。
CN202280074729.6A 2021-11-11 2022-11-11 用于视频编码的初始化处理 Pending CN118216153A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202163263941P 2021-11-11 2021-11-11
US63/263,941 2021-11-11
PCT/US2022/079744 WO2023086956A1 (en) 2021-11-11 2022-11-11 Initialization processing for video coding

Publications (1)

Publication Number Publication Date
CN118216153A true CN118216153A (zh) 2024-06-18

Family

ID=86336704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280074729.6A Pending CN118216153A (zh) 2021-11-11 2022-11-11 用于视频编码的初始化处理

Country Status (3)

Country Link
CN (1) CN118216153A (zh)
AU (1) AU2022386662A1 (zh)
WO (1) WO2023086956A1 (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10291940B2 (en) * 2014-05-23 2019-05-14 Qualcomm Incorporated Coding runs with escape in palette-based video coding
WO2015194187A1 (en) * 2014-06-20 2015-12-23 Sharp Kabushiki Kaisha Harmonized palette coding
US20160234498A1 (en) * 2015-02-05 2016-08-11 Sharp Laboratories Of America, Inc. Methods and systems for palette table coding

Also Published As

Publication number Publication date
WO2023086956A1 (en) 2023-05-19
AU2022386662A1 (en) 2024-05-30

Similar Documents

Publication Publication Date Title
KR102030425B1 (ko) 제한된 오프셋 보상 및 루프 필터를 기반으로 하는 영상 부호화 및 복호화 방법 및 그 장치
CN113826383B (zh) 变换跳过模式的块维度设置
CN113826398B (zh) 变换跳过模式和其它编解码工具之间的交互
CA3000758A1 (en) Method and apparatus of palette index map coding for screen content coding
US20240179323A1 (en) Operation range extension for versatile video coding
CN113853787A (zh) 基于子块使用变换跳过模式
WO2023028555A1 (en) Independent history-based rice parameter derivations for video coding
WO2021263251A1 (en) State transition for dependent quantization in video coding
CN118216153A (zh) 用于视频编码的初始化处理
CN117529914A (zh) 在视频编码中用于波前并行处理的基于历史的莱斯参数推导
WO2021136470A1 (en) Clustering based palette mode for video coding
CN118020294A (zh) 用于视频编码的基于历史的rice参数推导
CN117981306A (zh) 用于视频编码的独立基于历史的莱斯参数推导
CN117837148A (zh) 用于视频编解码的基于历史的莱斯编码参数推导
EP4388748A2 (en) History-based rice parameter derivations for video coding
WO2022213122A1 (en) State transition for trellis quantization in video coding
WO2022217245A1 (en) Remaining level binarization for video coding
CN116965028A (zh) 用于视频编码的剩余等级二值化
WO2023212684A1 (en) Subblock coding inference in video coding
WO2023200933A1 (en) Cross-component model adjustment for video coding
CN118369922A (zh) 用信号发送用于视频编码的通用约束信息
KR20240089011A (ko) 선택 가능한 뉴럴 네트워크 기반 코딩 도구를 사용하는 비디오 코딩
WO2023172851A1 (en) Model adjustment for local illumination compensation in video coding

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication