CN117581540A - 编解码方法、码流、编码器、解码器及计算机存储介质 - Google Patents
编解码方法、码流、编码器、解码器及计算机存储介质 Download PDFInfo
- Publication number
- CN117581540A CN117581540A CN202180099798.8A CN202180099798A CN117581540A CN 117581540 A CN117581540 A CN 117581540A CN 202180099798 A CN202180099798 A CN 202180099798A CN 117581540 A CN117581540 A CN 117581540A
- Authority
- CN
- China
- Prior art keywords
- identification information
- zero coefficient
- component
- last non
- last
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 338
- 230000006835 compression Effects 0.000 claims abstract description 48
- 238000007906 compression Methods 0.000 claims abstract description 48
- 230000009466 transformation Effects 0.000 claims description 40
- 238000004590 computer program Methods 0.000 claims description 22
- 230000007306 turnover Effects 0.000 claims description 20
- 239000011159 matrix material Substances 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 description 37
- 238000001914 filtration Methods 0.000 description 21
- 238000013139 quantization Methods 0.000 description 21
- 238000010586 diagram Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 14
- 238000009795 derivation Methods 0.000 description 12
- 230000003044 adaptive effect Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 241000023320 Luma <angiosperm> Species 0.000 description 8
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 239000000047 product Substances 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 230000000153 supplemental effect Effects 0.000 description 4
- 239000002699 waste material Substances 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 239000011449 brick Substances 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011056 performance test Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/167—Position within a video image, e.g. region of interest [ROI]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/129—Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/136—Incoming video signal characteristics or properties
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/146—Data rate or code amount at the encoder output
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/174—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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 block, e.g. a macroblock
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/18—Methods 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 a set of transform coefficients
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/184—Methods 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 bits, e.g. of the compressed video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/186—Methods 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 a colour or a chrominance component
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/48—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using compressed domain processing techniques other than decoding, e.g. modification of transform coefficients, variable length coding [VLC] data or run-length data
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请实施例公开了一种编解码方法、码流、编码器、解码器及计算机存储介质,该方法包括:解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,可以提升压缩效率。
Description
本申请实施例涉及视频编解码技术领域,尤其涉及一种编解码方法、码流、编码器、解码器及计算机存储介质。
随着人们对视频显示质量要求的提高,计算机视觉相关领域得到了越来越多的关注。近年来,图像处理技术在各行各业都取得了成功地应用。对于视频图像的编解码过程而言,在编码端,针对待编码的图像数据,在经过变换和量化处理之后将通过熵编码单元进行压缩编码,而熵编码处理后所生成的码流将传输到解码端;然后解析码流,再经过反量化和逆变换处理之后,可以恢复出原始输入的图像数据。
目前,高位宽、高质量、高码率的视频编解码(简称为“三高视频”)相较于较低位宽、低质量、低码率的视频编解码(可称为“常规视频”),通常需要编解码的系数更多,而且系数更大。这样,对于三高视频来说,已有的相关方案在码流中可能会带来更大的开销,产生浪费。
发明内容
本申请实施例提供一种编解码方法、码流、编码器、解码器及计算机存储介质,可以应用于高位宽、高码率、高质量或无损压缩的视频编解码场景,并且能够提升压缩效率。
本申请实施例的技术方案可以如下实现:
第一方面,本申请实施例提供了一种解码方法,应用于解码器,该方法包括:
解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;
当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
第二方面,本申请实施例提供了一种编码方法,应用于编码器,该方法包括:
确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;
根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
第三方面,本申请实施例提供了一种码流,该码流是根据待编码信息进行比特编码生成的,待编码信息包括下述至少之一:第一语法元素标识信息、第二语法元素标识信息、第三语法元素标识信息、分量标识信息、最后一个系数使能标识信息和子块默认编码标识信息;其中,
第一语法元素标识信息用于指示当前序列是否允许使用最后一个非零系数位置翻转,第二语法元素标识信息用于指示当前序列是否使用标准扩展版本,第三语法元素标识信息用于指示当前序列是否使用范围扩展,分量标识信息用于指示当前片的分量是否使用最后一个非零系数位置翻转,最后一个系数使能标识信息用于指示当前块是否使用最后一个系数位置,子块默认编码标识信息用于指示当前块内的待编码子块是否默认编码;其中,当前序列包括当前片,当前片包括当前块。
第四方面,本申请实施例提供了一种编码器,该编码器包括第一确定单元和编码单元;其中,
第一确定单元,配置为确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;
第一确定单元,还配置为根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;
编码单元,配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
第五方面,本申请实施例提供了一种编码器,该编码器包括第一存储器和第一处理器;其中,
第一存储器,用于存储能够在第一处理器上运行的计算机程序;
第一处理器,用于在运行计算机程序时,执行如第二方面所述的方法。
第六方面,本申请实施例提供了一种解码器,该解码器包括解析单元和第二确定单元;其中,
解析单元,配置为解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;
第二确定单元,配置为当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;
解析单元,还配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
第七方面,本申请实施例提供了一种解码器,该解码器包括第二存储器和第二处理器;其中,
第二存储器,用于存储能够在第二处理器上运行的计算机程序;
第二处理器,用于在运行计算机程序时,执行如第一方面所述的方法。
第八方面,本申请实施例提供了一种计算机存储介质,该计算机存储介质存储有计算机程序,所述计算机程序被执行时实现如第一方面所述的方法、或者实现如第二方面所述的方法。
本申请实施例提供了一种编解码方法、码流、编码器、解码器及计算机存储介质,在编码器中,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。在解码器中,解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用分量标识信息对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
图1为相关技术提供的一种编码框架的应用示意图;
图2为相关技术提供的一种当前系数与相邻系数的位置关系示意图;
图3为相关技术提供的一种bin的算数解码过程的流程示意图;
图4为相关技术提供的一种二元符号的算数解码过程的流程示意图;
图5为相关技术提供的一种算数解码引擎的重归一化的流程示意图;
图6为相关技术提供的一种旁路解码过程的流程示意图;
图7为相关技术提供的一种可能有非零系数区域与强制为0区域的位置关系示意图;
图8A为本申请实施例提供的一种编码器的***组成示意图;
图8B为本申请实施例提供的一种解码器的***组成示意图;
图9为本申请实施例提供的一种解码方法的流程示意图;
图10A为本申请实施例提供的一种最后一个非零系数的位置相对于当前块左上角的位置示意图;
图10B为本申请实施例提供的一种最后一个非零系数的位置相对于当前块右下角的位置示意图;
图11为本申请实施例提供的一种编码方法的流程示意图;
图12为本申请实施例提供的一种编码器的组成结构示意图;
图13为本申请实施例提供的一种编码器的具体硬件结构示意图;
图14为本申请实施例提供的一种解码器的组成结构示意图;
图15为本申请实施例提供的一种解码器的具体硬件结构示意图。
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解 的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。还需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅是用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
在视频图像中,一般采用第一图像分量、第二图像分量和第三图像分量来表征编码块(Coding Block,CB)。其中,这三个图像分量分别为一个亮度分量、一个蓝色色度分量和一个红色色度分量,具体地,亮度分量通常使用符号Y表示,蓝色色度分量通常使用符号Cb或者U表示,红色色度分量通常使用符号Cr或者V表示;这样,视频图像可以用YCbCr格式表示,也可以用YUV格式表示。
对本申请实施例进行进一步详细说明之前,先对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释:
动态图像专家组(Moving Picture Experts Group,MPEG)
联合视频专家组(Joint Video Experts Team,JVET)
开放媒体联盟(Alliance for Open Media,AOM)
新一代视频编码标准H.266/多功能视频编码(Versatile Video Coding,VVC)
VVC的参考软件测试平台(VVC Test Model,VTM)
音视频编码标准(Audio Video Standard,AVS)
AVS的高性能测试模型(High-Performance Model,HPM)
基于上下文的自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding,CABAC)
原始字节序列载荷(Raw Byte Sequence Payload,RBSP)
普通残差编码(Regular Residual Coding,RRC)
变换跳过残差编码(Transform Skip Residual Coding,TSRC)
可以理解,目前通用的视频编解码标准(如VVC)都采用基于块的混合编码框架。视频图像中的每一帧被分割成相同大小(如128×128,64×64等)的正方形的最大编码单元(Largest Coding Unit,LCU),每个最大编码单元还可以根据规则划分成矩形的编码单元(Coding Unit,CU);而且编码单元可能还会划分成更小的预测单元(Prediction Unit,PU)、变换单元(Transform Unit,TU)等。具体地,如图1所示,混合编码框架可以包括有预测(Prediction)、变换(Transform)、量化(Quantization)、熵编码(Entropy Coding)、环路滤波(In Loop Filter)等模块。其中,预测模块可以包括帧内预测(Intra Prediction)和帧间预测(Inter Prediction),帧间预测可以包括运动估计(Motion Estimation)和运动补偿(Motion Compensation)。由于视频图像的一个帧内相邻像素之间存在很强的相关性,在视频编解码技术中使用帧内预测方式能够消除相邻像素之间的空间冗余;但是由于视频图像中的相邻帧之间也存在着很强的相似性,在视频编解码技术中使用帧间预测方式消除相邻帧之间的时间冗余,从而能够提高编解码效率。
视频编解码器的基本流程如下:在编码器中,将一帧图像划分成块,对当前块使用帧内预测或帧间预测产生当前块的预测块,当前块的原始块减去预测块得到残差块,对残差块进行变换、量化得到量化系数矩阵,对量化系数矩阵进行熵编码输出到码流中。在解码器中,对当前块使用帧内预测或帧间预测产生当前块的预测块,另一方面解码码流得到量化系数矩阵,对量化系数矩阵进行反量化、逆变换得到残差块,将预测块和残差块相加得到重建块。重建块组成重建图像,基于图像或基于块对重建图像进行环路滤波得到解码图像。编码器同样需要和解码器类似的操作获得解码图像。解码图像可以为后续的帧作为帧间预测的参考帧。编码器确定的块划分信息,预测、变换、量化、熵编码、环路滤波等模式信息或者参数信息如果有必要需要输出到码流中;然后解码器通过解析及根据已有信息进行分析确定与编码器相同的块划分信息,预测、变换、量化、熵编码、环路滤波等模式信息或者参数信息,从而保证编码器获得的解码图像和解码器获得的解码图像相同。编码器获得的解码图像通常也叫做重建图像。在预测时可以将当前块划分成预测单元,在变换时可以将当前块划分成变换单元,预测单元和变换单元的划分可以不同。上述是基于块的混合编码框架下的视频编码器和解码器的基本流程,随着技术的发展,该框架或流程的一些模块或步骤可能会被优化,本申请实施例适用于该基于块的混合编码框架下的视频编解码器的基本流程,但不限于该框架及流程。
在本申请实施例中,当前块(Current Block)可以是当前编码单元(CU)、当前预测单元(PU)、或者当前变换块(TU)等。其中,块划分信息,预测、变换、量化的各种模式及参数信息,系数等通过熵编码写入码流中。假定不同元素的概率是不同的,为出现概率较大的元素分配较短的码字,为出现概率较小的元素分配较长的码字,能获得比定长编码更高的编码效率。但是如果不同元素的概率相近或基本相同,熵编码的压缩空间就有限。CABAC是一种常用熵编码方法,HEVC和VVC等都使用CABAC 进行熵编码。CABAC可以使用上下文模型可以提升压缩效率,但是上下文模式的使用及更新也使得操作更加复杂。CABAC中有一种旁路(bypass)模式,在旁路模式下不需要使用和更新上下文模型,可以达到更高的吞吐量(throughput)。在本申请实施例中,可以把CABAC中需要使用和更新上下文模型的模式叫做上下文模式。
一般情况下,需要先根据定义的方法确定上下文模型,在调用定义的二元符号的算数解码过程时,上下文模型的参数可以作为输入。上下文模型的选择在相邻系数之间还存在依赖关系。例如,图2示出了相关技术提供的一种当前系数与相邻系数的位置关系示意图。在图2中,黑色填充的块表示当前系数,网格线填充的块表示相邻系数;如2图所示,当前系数的sig_coeff_flag选择哪个上下文模型需要根据其右边和下边和右下边相邻的5个系数的信息来确定。根据图2进一步可以看出,上下文模式的操作较旁路模式的操作复杂得多,而且还有相邻系数之间的依赖性。
对于CABAC的算数编码引擎,如果需要使用上下文模式,需要调用定义的二元符号的算数解码过程,其中包括状态转移过程也就是上下文模型的更新。而在二元符号的算数解码过程中会调用算数解码引擎的重归一化过程。而在使用旁路模式时需要调用旁路解码过程。
下面以VVC中使用CABAC为例进行介绍:
对于CABAC的算数编码引擎,算数解码过程的输入是ctxTable,ctxIdx,bypassFlag以及算数解码引擎的状态变量ivlCurrRange和ivlOffset,算数解码过程的输出是bin的值。
其中,ctxTable是选择上下文模式时使用的表格,ctxIdx是上下文模型索引。
图3示出了相关技术提供的一种bin的算数解码过程的流程示意图。如图3所示,为了解码bin的值,上下文索引表ctxTable,上下文模型索引ctxIdx,旁路模式使能标志bypassFlag作为输入被传输到算数解码过程DecodeBin(ctxTable,ctxIdx,bypassFlag),具体如下:
如果bypassFlag的值为1,则调用旁路解码过程DecodeBypass();
否则,如果bypassFlag的值为0,ctxTable的值为0,且ctxIdx的值为0,则调用结束解码过程DecodeTerminate();
否则(bypassFlag的值为0且ctxTable的值不为0),调用定义的二元符号的算数解码过程DecodeDecision(ctxTable,ctxIdx)。
进一步地,对于二元符号的算数解码过程,该过程的输入是变量ctxTable,ctxIdx,ivlCurrRange,和ivlOffset,该过程的输出是解码的值binVal,更新后的变量ivlCurrRange和ivlOffset。
图4示出了相关技术提供的一种二元符号的算数解码过程的流程示意图。如图4所示,可以利用DecodeDecision(ctxTable,ctxIdx)输入上下文索引表ctxTable和上下文模型索引ctxIdx,以及算数解码引擎的状态变量ivlCurrRange和ivlOffset。其中,pStateIdx0和pStateIdx1是当前上下文模型的两个状态。
(1)变量ivlLpsRange的值按如下方法导出:
给定ivlCurrRange的当前值,变量qRangeIdx按如下方法导出:
qRangeIdx=ivlCurrRange>>5
给定qRangeIdx,ctxTable和ctxIdx对应的pStateIdx0和pStateIdx1,valMps和ivlLpsRange按如下方法导出:
pState=pStateIdx1+16×pStateIdx0;
valMps=pState>>14;
ivlLpsRange=(qRangeIdx×((valMps?32767–pState:pState)>>9)>>1)+4。
(2)变量ivlCurrRange的值设为ivlCurrRange–ivlLpsRange,并执行如下操作:
如果ivlOffset大于或等于ivlCurrRange,那么变量binVal的值为1–valMps,并更新变量ivlOffset和ivlCurrRange,其中,ivlOffset的值为ivlOffset减去ivlCurrRange,ivlCurrRange的值为ivlLpsRange;
否则(ivlOffset小于ivlCurrRange),变量binVal的值为valMps。
给定binVal的值,执行定义的状态转移(statetransition)。基于ivlCurrRange的当前值,可以执行定义的重归一化(renormalization)。
进一步地,对于状态转移过程,该过程的输入是当前的pStateIdx0和pStateIdx1,以及解出的值binVal;输出是更新的ctxTable和ctxIdx对应的上下文变量pStateIdx0和pStateIdx1。其中,变量shift0和shift1由shiftIdx导出,这里定义了shiftIdx与ctxTable和ctxIdx的对应关系,如下:
shift0=(shiftIdx>>2)+2;
shift1=(shiftIdx&3)+3+shift0。
基于解出的值binVal,与ctxTable和ctxIdx对应的两个变量pStateIdx0和pStateIdx1的更新如下:
pStateIdx0=pStateIdx0-(pStateIdx0>>shift0)+(1023×binVal>>shift0);
pStateIdx1=pStateIdx1-(pStateIdx1>>shift1)+(16383×binVal>>shift1)。
进一步地,算数解码引擎的重归一化过程的输入是片数据中的bits和变量ivlCurrRange和ivlOffset,输出是更新的变量ivlCurrRange和ivlOffset。
图5示出了相关技术提供的一种算数解码引擎的重归一化的流程示意图,如图5所示,进入ReNormD过程,ivlCurrRange的当前值首选与256比较,后续步骤如下:
如果ivlCurrRange大于或等于256,那么不需要重归一化,RenormD过程结束;
否则(ivlCurrRange小于256),进入重归一化循环。在这个循环中,ivlCurrRange的值乘2,也就是左移一位。ivlOffset的值乘2,也就是左移一位。用read_bits(1)得到的一位移入到ivlOffset中,具体如下:
ivlCurrRange=ivlCurrRange<<1;
ivlOffset=ivlOffset<<1;
ivlOffset=ivlOffset|read_bits(1)。
整个过程中码流中的数据不应该导致ivlOffset大于或等于ivlCurrRange。
进一步地,二元符号的旁路解码过程的输入是片数据的bits和变量ivlCurrRange和ivlOffset,输出是更新的变量ivlOffset和解出的值binVal。
当bypassFlag为1时旁路解码过程被调用,图6示出了相关技术提供的一种旁路解码过程的流程示意图,如图6所示,首先更新变量ivlOffset,即ivlOffset的值乘2,也就是左移一位。用read_bits(1)得到的一位移入到ivlOffset中,具体如下:
ivlOffset=ivlOffset<<1;
ivlOffset=ivlOffset|read_bits(1)。
然后,ivlOffset的值会和ivlCurrRange的值比较,后续步骤如下:
如果ivlOffset大于或等于ivlCurrRange,那么binVal的值设为1,ivlOffset等于ivlOffset减去ivlCurrRange;
否则(ivlOffset小于ivlCurrRange),binVal的值设为0。
整个过程中码流中的数据不应该导致ivlOffset大于或等于ivlCurrRange。
还应理解,在现在的视频编解码标准中,对于残差通常支持一种或多种变换(transform)以及变换跳过(transform skip)。变换有离散余弦变换(Discrete Cosine Transform,DCT)等,使用变换的残差块在变换(及量化)以后通常体现出一定的特性,如某些变换(及量化)后由于能量大多集中在低频区域而使得左上角的区域系数较大,右下角的区域系数较小甚至出现很多0系数。而变换跳过,顾名思义不做变换,变换跳过后的系数的分布规律与变换后的系数是不同的,因而可以使用不同的系数编码方法。比如在VVC中对变换跳过后的系数使用RRC,对变换跳过的系数使用TSRC。
一般的变换,如DCT变换,这时候变换后的块,从左往右代表的频率由低到高,从上到下代表的频率由低到高。左上角代表低频,右下角代表高频。人眼对低频的信息更敏感,而对高频的信息不是特别敏感。利用这种特性,一些高频的信息被做更多的处理或去掉对视觉影响较小。有些技术,如强制置零(zero-out),可以强制将某些高频信息置0。比如对64x64的块强制将横坐标大于或等于32、或者纵坐标大于或等于32的位置的系数置0。上述只是一个简单的示例,zero-out的范围可能会有更多复杂的导出方法,这里不再赘述。如图7所示,左上角部分可能存在非零系数(即为可能有非零系数区域),右下角部分将全部置零(即为强制为0区域)。这样,对于后面的系数编码来说,zero-out强制置0的区域的系数由于肯定是0而不需要编码。
进一步地,由于对通常的视频的残差进行变换(及量化)后系数分布显现出左上角系数较大而右下角很多0系数的特性,系数编码时通常会使用一些方法使得左上角一定范围内的系数需要进行编码,而右下角一定范围内的系数不需要编码,也就是默认这些系数为0。一种方法是在编码一个块的系数时,先确定这个块的按扫描顺序的最后一个非零系数的位置。确定出这个位置以后,按扫描顺序最后一个非零系数的位置后面的系数全部认为是0,即不需要编码;只有最后一个非零系数位置及之前的系数需要编码。例如在VVC中,使用last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix来确定最后一个非零系数的位置(LastSignificantCoeffX,LastSignificantCoeffY)。
(a)last_sig_coeff_x_prefix确定当前块中按扫描顺序最后一个非零系数的水平(或列)坐标的前缀(prefix)。last_sig_coeff_x_prefix的值应该在0到(log2ZoTbWidth<<1)-1,包含这两个边界值的范围内。
如果last_sig_coeff_x_prefix不存在,那么last_sig_coeff_x_prefix的值为0。
(b)last_sig_coeff_y_prefix确定当前块中按扫描顺序最后一个非零系数的竖直(或行)坐标的前缀(prefix)。last_sig_coeff_y_prefix的值应该在0到(log2ZoTbHeight<<1)-1,包含这两个边界值的 范围内。
如果last_sig_coeff_y_prefix不存在,那么last_sig_coeff_y_prefix的值为0。
(c)last_sig_coeff_x_suffix确定当前块中按扫描顺序最后一个非零系数的水平(或列)坐标的后缀(suffix)。last_sig_coeff_x_suffix的值应该在0到(1<<((last_sig_coeff_x_prefix>>1)-1))–1,包含这两个边界值的范围内。
当前变换块中按扫描顺序最后一个非零系数的水平(或列)坐标的值LastSignificantCoeffX按如下方法导出:
如果last_sig_coeff_x_suffix不存在,那么
LastSignificantCoeffX=last_sig_coeff_x_prefix;
否则(last_sig_coeff_x_suffix存在),
LastSignificantCoeffX=(1<<((last_sig_coeff_x_prefix>>1)-1))*(2+(last_sig_coeff_x_prefix&1))+
last_sig_coeff_x_suffix。
(d)last_sig_coeff_y_suffix确定当前变换块中按扫描顺序最后一个非零系数的竖直(或行)坐标的后缀(suffix)。last_sig_coeff_x_suffix的值应该在0到(1<<((last_sig_coeff_y_prefix>>1)-1))–1,包含这两个边界值的范围内。
当前变换块中按扫描顺序最后一个非零系数的竖直(或行)坐标的值LastSignificantCoeffY按如下方法导出:
如果last_sig_coeff_y_suffix不存在,那么
LastSignificantCoeffY=last_sig_coeff_y_prefix;
否则(last_sig_coeff_y_suffix存在),
LastSignificantCoeffY=(1<<((last_sig_coeff_y_prefix>>1)-1))*(2+(last_sig_coeff_y_prefix&1))+last_sig_coeff_y_suffix。
进一步地,最后一个非零系数及之前的系数全都要进行编码,但是在普通视频中,即使是这些系数中仍然有一定比例的系数是0,VVC中使用当前子块是否编码的标志sb_coded_flag来确定当前子块中的系数是否需要编码。如果不需要编码则认为当前子块中的系数全为0。这里,子块通常是n×n的子块,如4×4的子块。
sb_coded_flag[xS][yS]确定当前变换块中位置在(xS,yS)的子块的如下信息,其中,子块是变换系数值的数组:
如果sb_coded_flag[xS][yS]的值为0,那么当前变换块中位置在(xS,yS)的子块内的所有变换系数的值为0;
如果sb_coded_flag[xS][yS]不存在,那么sb_coded_flag[xS][yS]的值为1。
进一步地,在处理系数编码时,利用系数的特性可以提升压缩效率。例如,对通常的视频,需要编码的系数中,有一定比例的系数是0,因而可以用一个语法元素来表示当前系数是否是0,这个语法元素通常是一个二元符号。如果当前系数是0,那么意味着对当前系数的编码已经结束;否则,还需要继续编码当前系数。又如,对通常的视频,在非0系数中,有一定比例的系数的绝对值是1,因而可以用一个语法元素来表示当前系数的绝对值是否大于1,这个语法元素通常是一个二元符号。如果当前系数的绝对值不大于1,那么意味着对当前系数的编码已经结束;否则,还需要继续编码当前系数。例如,在VVC中涉及的语法元素如下,
sig_coeff_flag[xC][yC]用来确定当前变换块在变换系数位置(xC,yC)的对应的变换系数是不是非零系数:
如果sig_coeff_flag[xC][yC]的值是0,那么(xC,yC)位置的变换系数的值设为0;
否则(sig_coeff_flag[xC][yC]的值是1),(xC,yC)位置的变换系数是非零系数。
如果sig_coeff_flag[xC][yC]不存在,那么做如下推断:
如果transform_skip_flag[x0][y0][cIdx]的值为0或者sh_ts_residual_coding_disabled_flag的值为1:
如果(xC,yC)是最后按扫描顺序一个非零系数的位置(LastSignificantCoeffX,LastSignificantCoeffY)或如下条件全为真,那么sig_coeff_flag[xC][yC]的值推断为1:
(xC&((1<<log2SbW)-1),yC&((1<<log2SbH)-1))等于(0,0);
inferSbDcSigCoeffFlag的值等于1;
sb_coded_flag[xS][yS]的值1;
否则,sig_coeff_flag[xC][yC]的值推断为0;
否则(transform_skip_flag[x0][y0][cIdx]的值为1且sh_ts_residual_coding_disabled_flag的值为0):
如果如下条件全为真,那么sig_coeff_flag[xC][yC]的值推断为1:
(xC&((1<<log2SbW)-1),yC&((1<<log2SbH)-1))等于((1<<log2SbW)-1,(1<<log2SbH)-1);
inferSbSigCoeffFlag的值为1;
sb_coded_flag[xS][yS]的值为1;
否则,sig_coeff_flag[xC][yC]的值推断为0。
abs_level_gtx_flag[n][j]用来确定(扫描顺序第n个)变换系数的绝对值是否大于(j<<1)+1。如果abs_level_gtx_flag[n][j]不存在,那么abs_level_gtx_flag[n][j]的值为0。
这样,如果在处理完上述标志(或称为语法元素)后,当前系数还没有编码结束,那么需要编码系数绝对值的剩余值。如VVC中的abs_remainder。
abs_remainder[n]用来确定扫描顺序第n个变换系数的用Golomb-Rice编码的剩余绝对值。如果abs_remainder[n]不存在,那么abs_remainder[n]的值为0。
进一步地,在VVC中,sig_coeff_flag和abs_level_gtx_flag等语法元素使用上下文模式编码,而abs_remainder使用旁路模式编码。上述提到了上下文模式编码较旁路模式编码更复杂,直观理解就是处理起来更慢,如果需要编码的系数很多,使用太多的上下文模式编码会影响解码速度。因而可以对使用上下文模式编码的语法元素的个数进行限制,比如使用上下文模式编码的二元符号的个数超过一个阈值后,后续的系数编码强制使用旁路模式编码。如VVC中的dec_abs_level。
dec_abs_level[n]是扫描位置n处的一个用Golomb-Rice编码的中间值。解析dec_abs_level[n]时可以导出ZeroPos[n],在位置(xC,yC)处的量化系数的绝对值AbsLevel[xC][yC]按如下方法导出:
如果dec_abs_level[n]不存在或dec_abs_level[n]的值等于ZeroPos[n],那么AbsLevel[xC][yC]的值为0;
否则,如果dec_abs_level[n]的值小于ZeroPos[n],那么AbsLevel[xC][yC]的值为dec_abs_level[n]+1;
否则(dec_abs_level[n]的值大于ZeroPos[n]),AbsLevel[xC][yC]的值为dec_abs_level[n]。
上述涉及的都是系数的绝对值,非零系数的正负号可以用系数正负号标志coeff_sign_flag或一些正负号导出的方法来确定。coeff_sign_flag[n]可以按如下方法确定扫描位置n的变换系数的正负号:
如果coeff_sign_flag[n]的值为0,那么对应的变换系数为正值;
否则(coeff_sign_flag[n]的值为1),对应的变换系数为负值。
如果coeff_sign_flag[n]不存在,那么coeff_sign_flag[n]的值为0;这时候根据CoeffSignLevel[xC][yC]确定坐标(xC,yC)上的变换系数的正负号:
如果CoeffSignLevel[xC][yC]的值为0,那么对应的变换系数为0;
否则,如果CoeffSignLevel[xC][yC]的值为1,那么对应的变换系数为正值;否则(CoeffSignLevel[xC][yC]的值为-1),对应的变换系数为负值。
还需要说明的是,CoeffSignLevel[xC][yC]还可以使用其他一些方法导出,这里不再赘述。
另外,在VVC中还使用了一个系数的值的奇偶性标志par_level_flag。根据这个标志可以知道当前系数的值的奇偶性,在确定当前系数的值以及依赖量化(Dependent Quantization)中会使用到。
par_level_flag[n]确定按扫描顺序位置n的变换系数的奇偶性。如果par_level_flag[n]不存在,那么par_level_flag[n]的值为0。
par_level_flag除了确定变换系数的奇偶性还可以用来和abs_level_gtx_flag、abs_remainder等共同确定系数的大小。
在这里,由于上下文模式编码需要选择、使用并更新上下文模式,而旁路模式编码不需要选择、使用并更新上下文模式,通常的做法是在一定范围内把上下文模式编码的语法元素放在一起,旁路模式编码的语法元素放在一起,这样对硬件设计更加友好。比如说先把一个块中的所有的上下文模式编码的语法元素处理完,再处理旁路模式编码的语法元素。当前块中的所有的上下文模式编码的语法元素可能还会分几个组,一个块中的所有的旁路模式编码的语法元素可能还会分几个组。
在一种具体的示例中,RRC的具体语法如表1所示。
表1
其中,数组AbsLevel[xC][yC]代表当前变换块的变换系数的绝对值的数组。数组AbsLevelPass1[xC][yC]代表当前变换块的变换系数的部分重建的绝对值的数组。数组的索引xC和yC表示当前变换块中的(xC,yC)位置。
进入residual_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)函数后,需要确定一些块尺寸的信息,如确定zero-out后的块尺寸的对数log2ZoTbWidth、log2ZoTbHeight,横坐标在[0,(1<<log2ZoTbWidth)–1]、纵坐标在[0,(1<<log2ZoTbHeight)–1]范围内的系数可能是非零系数。这里,(1<<log2ZoTbWidth)表示zero-out后的变换块的宽度,(1<<log2ZoTbHeight)表示zero-out后的变换块的高度。然后根据last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等确定最后一个非零系数的位置。按扫描顺序最后一个非零系数之前的系数可能是非零系数。然后确定remBinsPass1的值,即使用等式remBinsPass1=((1<<(log2TbWidth+log2TbHeight))×7)>>2确定。remBinsPass1就确定了当前块中使用上下文模式编码的语法元素的个数,本申请实施例可以理解remBinsPass1为remaining binaries inpass1的意思,也就是第一轮中剩余的二元符号的个数。按扫描顺序最后一个非零系数之前的系数需要编码。对这些系数所在的子块,依次确定当前子块是否需要编码,如果需要编码,该方法中把一个子块中上下文模式编码的语法元素放在了第一轮中,旁路模式编码的语法元素放在了后面。每个系数最多可能需要处理4个上下文模式编码的语法元素1个sig_coeff_flag,2个abs_level_gtx_flag,1个par_level_flag。在第一轮中,每次处理完一个上下文模式编码的语法元素remBinsPass1就会减1。如果一个系数足够大,在第一轮处理完上下文模式编码的几个语法元素后还需要处理剩余值,即abs_remainder。而如果remBinsPass1已经足够小了(不满足remBinsPass1>=4),第一轮就会结束,剩下的系数就会直接用旁路模式处理,即dec_abs_level。
在另一种具体的示例中,TSRC的具体语法如表2所示。
表2
进入residual_ts_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)函数后,需要确定一些块尺寸的信息。然后确定RemCcbs的值,即使用等式RemCcbs=((1<<(log2TbWidth+log2TbHeight))×7)>>2确定。RemCcbs就确定了当前块中使用上下文模式编码的语法元素的个数,本申请实施例可以理解RemCcbs为remainingcontextcoded binaries的意思,也就是剩余的上下文模式编码的二元符号的个数。对每一个子块,确定当前子块是否需要编码。如果需要编码,与上述RRC不同,TSRC方法中把一个子块中上下文模式编码的语法元素放在了两轮中,每个系数在第一轮和第二轮中分别最多处理4个上下文模式编码的语法元素。旁路模式编码的语法元素放在了后面。在第一轮和第二轮中,每次处理完一个上下文模式编码的语法元素remBinsPass1就会减1。如果一个系数足够大,在第一轮和第二轮处理完上下文模式编码的几个语法元素后还需要处理剩余值,即abs_remainder。而如果remBinsPass1已经足够小了(不满足remBinsPass1>=4),前两轮就会结束,剩下的系数就会直接用旁路模式处理,这里仍然是abs_remainder。
简言之,在相关技术中,已有的这种系数编码方法对于目前常用的视频,如消费类的视频,有很好的压缩效率。消费类视频通常每个像素的位宽为8位或者10位,消费类视频通常码率不会太高,通常为几兆每秒(MB/s)或更低。但是有一些应用的视频的像素需要更高位宽,如每个像素的位宽为12位、14位或16位或更多。更高的位宽通常会带来更大的系数,更多的非零系数,从而带来更高的码率。有一些应用的视频需要更高的质量,更高的质量通常也会带来更大的系数,更多的非零系数,从而带来更高的码率。更高的码率对解码器的处理能力如吞吐量就要有更高的要求。
高位宽、高质量、高码率的视频(三高视频)通常较低位宽、低质量、低码率的视频(常规视频)需要编解码的系数更多而且系数更大。比如三高视频中一个块中需要编解码的系数比常规视频中同样大小的一个块中需要编解码的系数多得多。因为常规视频的块中经过预测、变换、量化之后的系数很多都变成了0,而三高视频的块中经过预测、变换、量化之后的系数很多仍然是非0系数。常规视频的块中经过预测、变换、量化之后的系数中需要编码的系数中有很大比例是0,因而用最后一个非零系数位置(LastSignificantCoeffX,LastSignificantCoeffY)来区分是否要编码的系数区域是非常有效的。即使是在最后一个非零系数位置之前的系数仍让有很大比例是0,因而用子块是否编码的标志sb_coded_flag来进一步区分当前子块是否需要编码是非常有效的。但是在当前块中的非零系数非常多,甚至绝大多数系数甚至所有系数都是非零系数时,上述最后一个非零系数位置以及子块是否编码的标志就不会过滤掉太多非零系数,而且本身在码流中编码非零系数位置以及子块是否编码的标志等会占用一定的开销,会产生浪费。
另一方面,所述最后一个非零系数位置以及子块是否编码的标志等都是用上下文模式编码的,上下文模式编码较旁路模式更复杂,处理这些信息还会影响软件及硬件编解码的速度、吞吐量。
又一方面,目前的最后一个非零系数位置(LastSignificantCoeffX,LastSignificantCoeffY)的编码方法是编码最后一个非零系数位置的坐标。在常规视频中,由于非零系数大多集中在左上角而右下角的大片区域是0,LastSignificantCoeffX和LastSignificantCoeffY的值通常较小。而在三高视频中,右下角也会出现大量非零系数,这就导致LastSignificantCoeffX和LastSignificantCoeffY的值通常较大,从而在码流中编码较大的值会带来更大的开销。此外,还有一种可能是在无损压缩时使用本方法,因为无损压缩时不能使用量化,这时候通常系数会比较多,比较大。这时候使用已有的相关方案可能会带来更大的开销,产生浪费,导致压缩效率低。
本申请实施例提供了一种解码方法,通过解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
本申请实施例提供了还一种编码方法,通过确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用分量标识信息对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
下面将结合附图对本申请各实施例进行详细说明。
参见图8A,其示出了本申请实施例提供的一种编码器的***组成框图示例。如图8A所示,编码器100可以包括:分割单元101、预测单元102、第一加法器107、变换单元108、量化单元109、反量化单元110、逆变换单元111、第二加法器112、滤波单元113、解码图片缓存(Decoded Picture Buffer,DPB)单元114和熵编码单元115。这里,编码器100的输入可以是由一系列图片或者一张静态图片组成的视频,编码器100的输出可以是用于表示输入视频的压缩版本的比特流(也可以称为“码流”)。
其中,分割单元101将输入视频中的图片分割成一个或多个编码树单元(Coding Tree Unit,CTU)。分割单元101将图片分成一个或多个图块(或称为瓦片,tile),还可以进一步将一个tile分成一个或多个砖块(brick),这里,一个tile或者一个brick中可以包括一个或多个完整的和/或部分的CTUs。另外,分割单元101可以形成一个或多个切片(slice),其中一个slice可以包括图片中按照栅格顺序排列的一个或多个tiles,或者覆盖图片中矩形区域的一个或多个tiles。分割单元101还可形成一个或多个子图片,其中,一个子图片可以包括一个或多个slices、tiles或bricks。
在编码器100的编码过程中,分割单元101将CTU传送到预测单元102。通常,预测单元102可以由块分割单元103、运动估计(Motion Estimation,ME)单元104、运动补偿(Motion Compensation,MC)单元105和帧内预测单元106组成。具体地,块分割单元103迭代地使用四叉树分割、二叉树分割和三叉树分割而进一步将输入CTU划分成更小的编码单元(Coding Units,CUs)。预测单元102可使用ME单元104和MC单元105获取CU的帧间预测块。帧内预测单元106可使用包括MIP模式的各种帧内预测模式获取CU的帧内预测块。在示例中,率失真优化的运动估计方式可被ME单元104和MC单元105调用以获取帧间预测块,以及率失真优化的模式确定方式可被帧内预测单元106调用以获取帧内预测块。
预测单元102输出CU的预测块,第一加法器107计算分割单元101的输出中的CU和CU的预测块之间的差值,即残差CU。变换单元108读取残差CU并对残差CU执行一个或多个变换操作以获取系数。量化单元109对系数进行量化并输出量化系数(即levels)。反量化单元110对量化系数执行缩放操作以输出重构系数。逆变换单元111执行对应于变换单元108中的变换的一个或多个逆变换并输出重构残差。第二加法器112通过使重构残差和来自预测单元102的CU的预测块相加而计算出重构CU。第二加法器112还将其输出发送到预测单元102以用作帧内预测参考。在图片或子图片中的所有CU被重构之后,滤波单元113对重构图片或子图片执行环路滤波。这里,滤波单元113包含一个或多个滤波器,例如去方块滤波器、采样自适应偏移(Sample Adaptive Offset,SAO)滤波器、自适应环路滤波器(Adaptive Loop Filter,ALF)、亮度映射和色度缩放(Luma Mapping with Chroma Scaling,LMCS)滤波器以及基于神经网络的滤波器等。或者,当滤波单元113确定CU不用作其它CU编码时的参考时,滤波单元113对CU中的一个或多个目标像素执行环路滤波。
滤波单元113的输出是解码图片或子图片,这些解码图片或子图片缓存至DPB单元114。DPB单元114根据时序和控制信息输出解码图片或子图片。这里,存储在DPB单元114中的图片还可用作预测单元102执行帧间预测或帧内预测的参考。最后熵编码单元115将来自编码器100中解码图片所必需的参数(比如控制参数和补充信息等)转换成二进制形式,并根据每个数据单元的语法结构将这样的二进制形式写入码流中,即编码器100最终输出码流。
进一步地,编码器100可以是具有第一处理器和记录计算机程序的第一存储器。当第一处理器读取并运行计算机程序时,编码器100读取输入视频并生成对应的码流。另外,编码器100还可以是具有一个或多个芯片的计算设备。在芯片上实现为集成电路的这些单元具有与图8A中相应单元类似的连接和数据交换功能。
参见图8B,其示出了本申请实施例提供的一种解码器的***组成框图示例。如图8B所示,该解码器200可以包括:解析单元201、预测单元202、反量化单元205、逆变换单元206、加法器207、滤波单元208和解码图片缓存单元209。这里,解码器200的输入是用于表示视频或者一张静态图片的压缩版本的比特流,解码器200的输出可以是由一系列图片组成的解码视频或者一张解码的静态图片。
其中,解码器200的输入码流可以是编码器100所生成的码流。解析单元201对输入码流进行解析并从输入码流获取语法元素的值。解析单元201将语法元素的二进制表示转换成数字值并将数字值发送 到解码器200中的单元以获取一个或多个解码图片。解析单元201还可从输入码流解析一个或多个语法元素以显示解码图片。
在解码器200的解码过程中,解析单元201将语法元素的值以及根据语法元素的值设置或确定的、用于获取一个或多个解码图片的一个或多个变量发送到解码器200中的单元。
预测单元202确定当前解码块(例如CU)的预测块。这里,预测单元202可以包括运动补偿单元203和帧内预测单元204。具体地,当指示帧间解码模式用于对当前解码块进行解码时,预测单元202将来自解析单元201的相关参数传递到运动补偿单元203以获取帧间预测块;当指示帧内预测模式(包括基于MIP模式索引值指示的MIP模式)用于对当前解码块进行解码时,预测单元202将来自解析单元201的相关参数传送到帧内预测单元204以获取帧内预测块。
反量化单元205具有与编码器100中的反量化单元110相同的功能。反量化单元205对来自解析单元201的量化系数(即levels)执行缩放操作以获取重构系数。
逆变换单元206具有与编码器100中的逆变换单元111相同的功能。逆变换单元206执行一个或多个变换操作(即通过编码器100中的逆变换单元111执行的一个或多个变换操作的反操作)以获取重构残差。
加法器207对其输入(来自预测单元202的预测块和来自逆变换单元206的重构残差)执行相加操作以获取当前解码块的重构块。重构块还发送到预测单元202以用作在帧内预测模式下编码的其它块的参考。
在图片或子图片中的所有CU被重构之后,滤波单元208对重构图片或子图片执行环路滤波。滤波单元208包含一个或多个滤波器,例如去方块滤波器、采样自适应补偿滤波器、自适应环路滤波器、亮度映射和色度缩放滤波器以及基于神经网络的滤波器等。或者,当滤波单元208确定重构块不用作对其它块解码时的参考时,滤波单元208对重构块中的一个或多个目标像素执行环路滤波。这里,滤波单元208的输出是解码图片或子图片,解码图片或子图片缓存至DPB单元209。DPB单元209根据时序和控制信息输出解码图片或子图片。存储在DPB单元209中的图片还可用作通过预测单元202执行帧间预测或帧内预测的参考。
进一步地,解码器200可以是具有第二处理器和记录计算机程序的第二存储器。当第一处理器读取并运行计算机程序时,解码器200读取输入码流并生成对应的解码视频。另外,解码器200还可以是具有一个或多个芯片的计算设备。在芯片上实现为集成电路的这些单元具有与图8B中相应单元类似的连接和数据交换功能。
还需要说明的是,当本申请实施例应用于编码器100时,“当前块”具体是指视频图像中的当前待编码的块(也可以简称为“编码块”);当本申请实施例应用于解码器200时,“当前块”具体是指视频图像中的当前待解码的块(也可以简称为“解码块”)。
本申请的一实施例中,参见图9,其示出了本申请实施例提供的一种解码方法的流程示意图。如图9所示,该方法可以包括:
S901:解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息。
需要说明的是,本申请实施例的解码方法,具体是指一种系数解码方法,其应用于解码器。其中,基于图8B所示解码器200的组成结构,该解码方法主要应用于解码器200中的“解析单元201”部分,针对该解析单元201,可以采用基于上下文模型的自适应二进制算术编码模式或者旁路模式进行解码,得到相关标识信息(或语法元素)的取值,进而确定出当前块的系数。
还需要说明的是,视频标准中通常所说的编码可以包括编码和解码两部分,因此,视频编码可以包括编码器侧的编码方法和解码器侧的解码方法。本申请实施例则针对解码器侧的解码方法进行描述。
通常情况下,比如对于常规视频而言,针对系数的解码方法与相关技术中的已有方法相同;但是针对某种情况,比如高位宽或高质量或高码率或无损压缩的视频编解码场景,本申请实施例提供了一种可以修改最后一个非零系数的位置的导出方式。
在本申请实施例中,当前片的分量标识信息为片(slice)级的标志。该分量标识信息用于指示当前片的分量是否使用最后一个非零系数位置翻转。其中,如果当前片的分量使用最后一个非零系数位置翻转,那么意味着当前片的分量对应的当前块使用最后一个非零系数位置翻转;如果当前片的分量不使用最后一个非零系数位置翻转,那么意味着当前片的分量对应的当前块也不使用最后一个非零系数位置翻转。
可以理解地,当前序列可以包括当前片,而当前片内可以包括当前块。在一些实施例中,在解析码 流,确定当前片的分量标识信息之前,该方法还可以包括:
解析码流,确定第一语法元素标识信息;
当第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行解析码流,确定当前片的分量标识信息的步骤。
在本申请实施例中,该方法还可以包括:若第一语法元素标识信息的取值为第一值,则确定第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转;或者,若第一语法元素标识信息的取值为第二值,则确定第一语法元素标识信息指示当前序列不允许使用最后一个非零系数位置翻转。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。具体地,第一语法元素标识信息可以是写入在概述(profile)中的参数,也可以是一个标志(flag)的取值,本申请实施例对此不作任何限定。
以第一语法元素标识信息为一个flag为例,这时候对于第一值和第二值而言,第一值可以设置为1,第二值可以设置为0;或者,第一值还可以设置为true,第二值还可以设置为false;或者,第一值还可以设置为0,第二值还可以设置为1;或者,第一值还可以设置为false,第二值还可以设置为true。示例性地,对于flag而言,一般情况下,第一值可以为1,第二值可以为0,但是并不作任何限定。
还需要说明的是,第一语法元素标识信息为序列级的标志,用sps_reverse_last_sig_coeff_flag表示,可以用于指示当前序列是否允许使用最后一个非零系数位置翻转。这样,在解码得到当前序列允许使用最后一个非零系数位置翻转时,可以进一步解码slice级的分量标识信息,以便判断当前片的分量是否使用最后一个非零系数位置翻转。
进一步地,对于解码获得第一语法元素标识信息之前,在一种可能的实施例中,该方法还可以包括:
解析码流,确定第二语法元素标识信息;
当第二语法元素标识信息指示当前序列使用标准扩展版本时,执行解析码流,确定第一语法元素标识信息的步骤。
对于解码获得第一语法元素标识信息之前,在另一种可能的实施例中,该方法还可以包括:
解析码流,确定第三语法元素标识信息;
当第三语法元素标识信息指示当前序列使用范围扩展时,执行解析码流,确定第一语法元素标识信息的步骤。
对于解码获得第一语法元素标识信息之前,在又一种可能的实施例中,该方法还可以包括:
解析码流,确定第二语法元素标识信息;
当第二语法元素标识信息指示当前序列使用标准扩展版本时,解析码流,确定第三语法元素标识信息;
当第三语法元素标识信息指示当前序列使用范围扩展时,执行解析码流,确定第一语法元素标识信息的步骤。
需要说明的是,第二语法元素标识信息和第三语法元素标识信息均为序列级的标志。其中,第二语法元素标识信息用sps_extension_flag表示,可以用于指示当前序列是否使用标准扩展版本;第三语法元素标识信息用sps_range_extension_flag表示,可以用于指示当前序列是否使用范围扩展。
也就是说,在解码获得第一语法元素标识信息(sps_reverse_last_sig_coeff_flag)之前,可以是在解析码流获得sps_extension_flag之后,如果sps_extension_flag指示当前序列使用标准扩展版本,那么解码获得sps_reverse_last_sig_coeff_flag;或者,也可以是在解析码流获得sps_range_extension_flag之后,如果sps_range_extension_flag指示当前序列使用使用范围扩展,那么解码获得sps_reverse_last_sig_coeff_flag;或者,甚至也可以是在解析码流获得sps_extension_flag之后,如果sps_extension_flag指示当前序列使用标准扩展版本,那么解析码流获得sps_range_extension_flag;如果sps_range_extension_flag指示当前序列使用使用范围扩展,那么再解码获得sps_reverse_last_sig_coeff_flag;但是本申请实施例不作任何限定。
进一步地,在一些实施例中中,该方法还可以包括:若第二语法元素标识信息的取值为第一值,则确定第二语法元素标识信息指示当前序列使用标准扩展版本;或者,若第二语法元素标识信息的取值为第二值,则确定第二语法元素标识信息指示当前序列不使用标准扩展版本。
进一步地,在一些实施例中中,该方法还可以包括:若第三语法元素标识信息的取值为第一值,则确定第三语法元素标识信息指示当前序列使用范围扩展;或者,若第三语法元素标识信息的取值为第二值,则确定第三语法元素标识信息指示当前序列不使用范围扩展。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
还需要说明的是,第二语法元素标识信息用sps_extension_flag表示,第三语法元素标识信息用 sps_range_extension_flag表示。这样,在序列级,如果sps_extension_flag的取值为1,即当前序列使用标准扩展版本,那么需要解码sps_range_extension_flag;如果sps_range_extension_flag的取值为1,即当前序列使用范围扩展,那么需要解码sps_reverse_last_sig_coeff_flag;如果sps_reverse_last_sig_coeff_flag的取值为1,即当前序列允许使用最后一个非零系数位置翻转,那么还需要进一步解码片级的分量标识信息,以便判断当前片的分量是否使用最后一个非零系数位置翻转。
在一些实施例中,当前序列使用范围扩展,可以包括:当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。
也就是说,相比较于常规视频,本申请实施例所述的视频具有高位宽、高质量、高码率、高帧率和无损压缩等特性。
进一步地,第一语法元素标识信息、第二语法元素标识信息和第三语法元素标识信息等可以是序列(sequence)级的标志,甚至也可以是更高级别的标志,比如视频可用性信息(Video Usability Information,VUI)、补充增强信息(Supplemental Enhancement Information,SEI)等。
在一种具体的示例中,针对视频的当前序列,对于第二语法元素标识信息(sps_extension_flag),判断当前序列是否使用标准扩展版本;换句话说,判断当前序列在标准的扩展版本中是否可以打开,比如说VVC中针对高位宽、高码率等编码制定的扩展版本。当sps_extension_flag的取值为1时,这时候需要解码第一语法元素标识信息(sps_reverse_last_sig_coeff_flag),否则不需要解码第一语法元素标识信息(sps_reverse_last_sig_coeff_flag)。
在另一种具体的示例中,针对视频的当前序列,当sps_extension_flag的取值为1时,这时候还需要解码第三语法元素标识信息(sps_range_extension_flag),判断当前序列是否使用范围扩展(range extension),比如高位宽、高码率、高帧率和无损压缩等的标志。下面将以四种情况为例分别进行描述。
在一种可能的实施方式中,当第三语法元素标识信息为高位宽标识信息时,该方法还可以包括:若高位宽标识信息指示当前序列满足高位宽,则确定当前序列使用范围扩展。
在另一种可能的实施方式中,当第三语法元素标识信息为高码率标识信息时,该方法还可以包括:若高码率标识信息指示当前序列满足高码率,则确定当前序列使用范围扩展。
在又一种可能的实施方式中,当第三语法元素标识信息为高质量标识信息时,该方法还可以包括:若高质量标识信息指示当前序列满足高质量,则确定当前序列使用范围扩展。
在又一种可能的实施方式中,当第三语法元素标识信息为无损压缩标识信息时,该方法还可以包括:若无损压缩标识信息指示当前序列满足无损压缩,则确定当前序列使用范围扩展。
示例性地,以序列级为例,第三语法元素标识信息还可以是高位宽标识信息(用sps_high_bit_depth_flag表示),用于指示当前序列是否为高位宽序列;或者也可以替换为高码率标识信息(用sps_high_bit_rate_flag表示),用于指示当前序列是否为高码率序列;或者也可以替换为其他指示高位宽、高码率、高质量或者无损压缩的标识信息,本申请实施例不作具体限定。
进一步地,在一些实施例中,对于S901来说,所述解析码流,确定当前片的分量对应的当前块的最后一个非零系数的坐标信息,可以包括:
解析码流,获取当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
根据最后一个非零系数的水平坐标的前缀信息和最后一个非零系数的水平坐标的后缀信息,确定最后一个非零系数的水平坐标;
根据最后一个非零系数的竖直坐标的前缀信息和最后一个非零系数的竖直坐标的后缀信息,确定最后一个非零系数的竖直坐标;
根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定当前块的最后一个非零系数的坐标信息。
需要说明的是,最后一个非零系数的水平坐标的前缀信息用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_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix确定。
还需要说明的是,last_sig_coeff_x_prefix和last_sig_coeff_x_suffix确定的是最后一个非零系数的横坐标(即水平坐标),last_sig_coeff_y_prefix和last_sig_coeff_y_suffix确定的是最后一个非零系数的纵 坐标(即竖直坐标),也就得到了最后一个非零系数的坐标信息。
在本申请实施例中,对于最后一个非零系数位置翻转标识信息而言,可以用reverse_last_sig_coeff_flag表示。其中,最后一个非零系数位置翻转标识信息至少可以为下述其中一项的标识信息:序列(sequence)级、图像(picture)级、片(slice)级和块(block)级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
也就是说,reverse_last_sig_coeff_flag可能是一个序列级或者更高级别的标志,或者也可能是图像级的标志或者片级的标志或者块级的标志或者其他级别的标志。另外,块级的标志可以包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或者其他块级的标志,本申请实施例均不作任何限定。
在本申请实施例中,序列级的最后一个非零系数位置翻转标识信息可以用sps_reverse_last_sig_coeff_flag表示,片级的最后一个非零系数位置翻转标识信息可以用sh_reverse_last_sig_coeff_flag表示。
还需要说明的是,对于片级的最后一个非零系数位置翻转标识信息,还可以称为当前片的分量标识信息。在一些实施例中,该方法还可以包括:
若分量标识信息的取值为第一值,则确定分量标识信息指示当前片的分量使用最后一个非零系数位置翻转;或者,
若分量标识信息的取值为第二值,则确定分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
以第一值为1,第二值为0为例,如果解码获得分量标识信息的取值为1,那么可以确定分量标识信息指示当前片的分量使用最后一个非零系数位置翻转;如果解码获得分量标识信息的取值为0,那么可以确定分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转。
S902:当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置。
S903:按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
需要说明的是,在本申请实施例中,当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,意味着当前片的分量对应的当前块也使用最后一个非零系数位置翻转,这时候可以确定当前块的最后一个非零系数的坐标信息为最后一个非零系数的位置相对于所述当前块的右下角位置之间的水平距离和竖直距离。
在一些实施例中,所述对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置,可以包括:
确定当前块的宽度和高度;
根据当前块的宽度与最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离进行减法计算,得到所述最后一个非零系数的水平坐标;以及
根据当前块的高度与最后一个非零系数的位置相对于当前块的右下角位置之间的竖直距离进行减法计算,得到最后一个非零系数的竖直坐标;
根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定当前块的最后一个非零系数的位置。
需要说明的是,最后一个非零系数的坐标信息通常为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离。对于常规视频来说,由于非零系数大多数集中在左上角,而右下角的大片区域为0;但是对于高位宽、高质量、高码率的视频编解码来说,右下角也会出现大量的非零系数,使得最后一个非零系数的坐标信息的值通常较大,这时候为了节省开销,系数编码的时候需要进行坐标变换(具体可以是坐标翻转计算,即坐标翻转后最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离和竖直距离),那么在系数解码时也需要进行坐标翻转计算,再次翻转后可以恢复出最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离,从而确定出最后一个非零系数的位置,以便按照预设扫描顺序对当前块内的最后一个非零系数的位置之前的所有系数进行编码。
还需要说明的是,对于所属当前片的分量对应的当前块,可以是没有zero-out变换的块,也可以是zero-out变换后的块。以zero-out变换后的块为例,这时候当前块的宽度为1<<log2ZoTbWidth,当前块的高度是1<<log2ZoTbHeight;那么在分量标识信息指示当前片的分量使用最后一个非零系数位置翻转 的情况下,
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,等式右边的(LastSignificantCoeffX,LastSignificantCoeffY)表示通过解码获得的最后一个非零系数的坐标信息,等式左边的(LastSignificantCoeffX,LastSignificantCoeffY)表示最后一个非零系数的位置(也可以看作最后一个非零系数的目标坐标信息)。
除此之外,在一些实施例中,该方法还可以包括:
当分量标识信息指示所述当前片的分量不使用最后一个非零系数位置翻转时,确定当前块的最后一个非零系数的坐标信息为最后一个非零系数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离;
根据最后一个非零系数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离,确定所述当前块的最后一个非零系数的位置。
需要说明的是,如果分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转,意味着当前片的分量对应的当前块也不使用最后一个非零系数位置翻转,那么通过解码获取的最后一个非零系数的坐标信息即可以看作最后一个非零系数的目标坐标信息。在本申请实施例中,最后一个非零系数的目标坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离。
进一步地,在一些实施例中,该方法还可以包括:
当分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转时,根据最后一个非零系数的坐标信息直接确定当前块的最后一个非零系数的位置;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定所述当前块的系数。
需要说明的是,预设扫描顺序可以是对角线、Zigzag、水平、垂直、4×4子块扫描或者任何其它扫描顺序,本申请实施例不作任何限定。
还需要说明的是,在获取到当前片的分量标识信息之后,如果当前片的分量标识信息的取值为1,即当前片的分量需要使用最后一个非零系数位置翻转,那么对于所属当前片的分量对应的当前块,在解码得到最后一个非零系数的坐标信息之后,需要对最后一个非零系数的坐标信息进行计算,确定出当前块的最后一个非零系数的位置;然后按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,以得到当前块的系数。如果当前片的分量标识信息的取值为1,即当前片的分量不需要使用最后一个非零系数位置翻转,那么对于所属当前片的分量对应的当前块,在解码得到最后一个非零系数的坐标信息之后,可以根据最后一个非零系数的坐标信息直接确定出当前块的最后一个非零系数的位置;然后按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,以得到当前块的系数。
如此,针对某种情况,在系数编码时,本申请实施例提供一种修改最后一个非零系数的位置导出方法。也就是说通常情况下,系数的编解码方法还是与相关技术的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码。通常情况下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix编码的是最后一个非零系数位置的横坐标,也就是相对于当前块左上角的水平距离;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix编码的是最后一个非零系数位置的纵坐标,也就是相对于当前块左上角的竖直距离,如图10A所示。而在高位宽或高质量或高码率或无损压缩的视频编解码的情况下,最后一个非零系数的位置普遍接近于当前块所有可能是非0系数的区域的右下角。在这种情况下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix编码的是最后一个非零系数位置相对于当前块所有可能是非0系数的区域的右下角的水平距离;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix编码的是最后一个非零系数位置相对于当前块所有可能是非0系数的区域的右下角的竖直距离,如图10B所示。例如,如果当前块所有可能是非0系数的区域为(0,0)到((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的矩形区域,那么last_sig_coeff_x_prefix、last_sig_coeff_x_suffix编码的是最后一个非零系数位置相对于当前块((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的水平距离。last_sig_coeff_y_prefix、last_sig_coeff_y_suffix编码的是最后一个非零系数位置相对于当前块((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)的竖直距离。
针对语义的修改如下:
当前块中按预设扫描顺序最后一个非零系数的水平(或列)坐标的值LastSignificantCoeffX按如下方法导出:
如果last_sig_coeff_x_suffix不存在,那么,
LastSignificantCoeffX=last_sig_coeff_x_prefix;
否则(last_sig_coeff_x_suffix存在),
LastSignificantCoeffX=(1<<((last_sig_coeff_x_prefix>>1)-1))*(2+(last_sig_coeff_x_prefix&1))+ last_sig_coeff_x_suffix;
如果reverse_last_sig_coeff_flag的取值为1,那么
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
当前块中按扫描顺序最后一个非零系数的竖直(或行)坐标的值LastSignificantCoeffY按如下方法导出:
如果last_sig_coeff_y_suffix不存在,那么,
LastSignificantCoeffY=last_sig_coeff_y_prefix;
否则(last_sig_coeff_y_suffix存在):
LastSignificantCoeffY=(1<<((last_sig_coeff_y_prefix>>1)-1))*(2+(last_sig_coeff_y_prefix&1))+last_sig_coeff_y_suffix;
如果reverse_last_sig_coeff_flag的取值为1,那么
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,reverse_last_sig_coeff_flag是最后一个非零系数位置翻转标志,表示最后一个非零系数的位置是否需要翻转。如果reverse_last_sig_coeff_flag的取值为1,表示最后一个非零系数的位置需要翻转;否则,表示最后一个非零系数的位置不需要翻转。
还需要说明的是,reverse_last_sig_coeff_flag可能是一个序列(sequence)级或者更高级别的标志,也可能是图像(picture)级的标志或片(slice)级的标志或块(block)级的标志或其他级别的标志,块级的标志包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或其他块级的标志。示例性地,序列级的reverse_last_sig_coeff_flag可以用sps_reverse_last_sig_coeff_flag表示,片级的reverse_last_sig_coeff_flag可以用sh_reverse_last_sig_coeff_flag表示。
另外,reverse_last_sig_coeff_flag可能依赖于一些其他的标志,比如高位宽标识信息或高码率标识信息或第二语法元素标识信息(SPS扩展标志,sps_extension_flag)等,SPS扩展标志在标准的扩展版本中可以打开,比如说VVC针对高位宽,高码率编码制定的扩展版本。即当高位宽标识信息或高码率标识信息的取值为1时,这时候需要解码reverse_last_sig_coeff_flag标志;否则,不需要解码reverse_last_sig_coeff_flag标志。
在一种具体的示例中,假定存在序列级的标识信息sps_extension_flag、sps_range_extension_flag和sps_reverse_last_sig_coeff_flag。在序列级,如果sps_extension_flag的取值为1,那么需要解码sps_range_extension_flag。如果sps_range_extension_flag的取值为1,那么需要解码sps_reverse_last_sig_coeff_flag。其中,sps_reverse_last_sig_coeff_flag表示当前序列的最后一个非零系数位置翻转的标志。如果sps_reverse_last_sig_coeff_flag的取值为1,那么确定当前序列内的块使用最后一个非零系数位置翻转;否则(即sps_reverse_last_sig_coeff_flag的取值为0),确定当前序列内的块不使用最后一个非零系数位置翻转。现有语法表中的reverse_last_sig_coeff_flag修改为sps_reverse_last_sig_coeff_flag。
可以理解地,sps_extension_flag表示当前序列是否使用标准的扩展版本的标志。sps_range_extension_flag表示当前序列是否使用范围扩展,比如高位宽,高码率等等的标志。
在一种实现方式中,其语法元素表的修改如下(Sequence parameter set RBSP syntax),参见表3。
表3
在另一种实现方式中,其语法元素表的修改如下(Sequence parameter set range extension syntax), 参见表4。
表4
基于表3和表4中的语法元素,sps_extension_flag的取值等于1,表示语法元素sps_range_extension_flag和sps_extension_7bits会出现在SPS RBSP语法结构中;sps_extension_flag的取值等于0,表示这些语法元素不会出现。
其中,sps_range_extension_flag的取值等于1,表示sps_range_extension()语法结构会在SPS RBSP语法结构中出现;如果sps_range_extension_flag没有出现,那么确定sps_range_extension_flag的取值等于0。
sps_reverse_last_sig_coeff_flag的取值等于1,表示当前序列内的块使用最后一个非零系数位置翻转;否则(即sps_reverse_last_sig_coeff_flag的取值等于0),表示当前序列内的块不使用最后一个非零系数位置翻转。
在另一个具体的示例中,假定存在序列级的标识信息sps_extension_flag、sps_range_extension_flag和sps_reverse_last_sig_coeff_enabled_flag。在序列(sequence)级,如果sps_extension_flag的取值为1,那么需要解码sps_range_extension_flag。如果sps_range_extension_flag的取值为1,那么需要解码sps_reverse_last_sig_coeff_enabled_flag。其中,sps_reverse_last_sig_coeff_enabled_flag是当前序列的最后一个非零系数位置翻转技术允许使用的标志。如果sps_reverse_last_sig_coeff_enabled_flag的取值为1,表示当前序列内的块允许使用最后一个非零系数位置翻转;否则(即sps_reverse_last_sig_coeff_enabled_flag的取值为0),表示当前序列内的块不允许使用最后一个非零系数位置翻转。如果sps_reverse_last_sig_coeff_enabled_flag没有出现,那么确定sps_reverse_last_sig_coeff_enabled_flag的取值为0。在片(slice)级,如果sps_reverse_last_sig_coeff_enabled_flag的取值为1,那么需要解码sh_reverse_last_sig_coeff_flag。其中,sh_reverse_last_sig_coeff_flag是当前片的最后一个非零系数位置翻转的标志。如果sh_reverse_last_sig_coeff_flag的取值为1,表示当前片内的块使用最后一个非零系数位置翻转;否则(即sh_reverse_last_sig_coeff_flag的取值为0),表示当前片内的块不使用最后一个非零系数位置翻转。如果sh_reverse_last_sig_coeff_flag没有出现,那么确定sh_reverse_last_sig_coeff_flag的取值为0。现有语法表中的reverse_last_sig_coeff_flag修改为sh_reverse_last_sig_coeff_flag。
需要注意的是,对于最后一个非零系数位置翻转的标志,在序列级,其语义为“是否允许使用”;在片级,其语义为“确定是否使用”。
在又一种实现方式中,其语法元素表的修改如下(Slice header syntax),参见表5。
表5
基于表5中的语法元素,sps_reverse_last_sig_coeff_enabled_flag的取值等于1,表示当前序列内的块允许使用最后一个非零系数位置翻转;否则(即sps_reverse_last_sig_coeff_enabled_flag的取值等于0),表示当前序列内的块不允许使用最后一个非零系数位置翻转。
sh_reverse_last_sig_coeff_flag的取值等于1,表示当前片内的块使用最后一个非零系数位置翻转;否则(即sh_reverse_last_sig_coeff_flag的取值等于0),表示当前片内的块不使用最后一个非零系数位置翻转。如果sh_reverse_last_sig_coeff_flag没有出现,那么确定sh_reverse_last_sig_coeff_flag的取值等于0。
可以理解地,针对sh_reverse_last_sig_coeff_flag,即当前片的分量标识信息,可以体现在当前片内的每一个图像分量都可以单独控制是否使用最后一个非零系数位置翻转。
在本申请实施例中,分量可以包括第一图像分量、第二图像分量和第三图像分量。
在一种具体的示例中,第一图像分量为亮度分量,第二图像分量为第一色度分量,第二图像分量为 第二色度分量。其中,亮度分量用Y分量表示,第一色度分量用U(Cb)分量表示,第二色度分量用V(Cr)表示。
在另一种具体的示例中,第一图像分量为红色分量,第二图像分量为绿色分量,第三图像分量为蓝色分量。其中,红色分量用R分量表示,绿色分量用G分量表示,蓝色分量用B表示。
进一步地,在一些实施例中,当分量包括第一图像分量、第二图像分量和第三图像分量时,该方法还可以包括:
基于第一图像分量、第二图像分量和第三图像分量之间的属性关系,判断当前片内第一图像分量、第二图像分量和第三图像分量之间是否存在共用分量标识信息;
根据判断结果,确定当前片的分量标识信息的个数;其中,该分量标识信息的个数为1个或2个或3个。
具体来讲,对于确定分量标识信息的个数,可以包括:
若当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定当前片的分量标识信息的个数为1个;或者,
若当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定当前片的分量标识信息的个数为2个;或者,
若当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定当前片的分量标识信息的个数为3个。
在本申请实施例中,一方面,由于各个图像分量的属性不同,图像分量如RGB格式视频的R、G、B或YUV格式的Y、U、V(Y,Cb,Cr),以及其他可能的格式。对YUV格式,可以有YUV444,YUV422,YUV420等格式,对人眼来说,亮度的变化比色度更敏感,因而有时用诸如YUV422,YUV420等格式对色度进行降采样,而且通常色度的量化步长会比亮度更大,起到降低码率的效果。
另一方面,一些跨分量的编码技术利用各个分量之间的相关性来提高编码效率。比如跨分量预测技术中的跨分量线性模型预测模式(Cross-Component Linear Model,CCLM),利用亮度分量的重建值以及线性模型来对色度分量进行预测。CCLM可以提高色度分量的预测准确性,从而减少了色度分量的残差。另外,还有一些技术进一步地利用亮度分量和一个色度分量的信息对另外一个分量进行预测从而进一步提高压缩效率。跨分量自适应环路滤波技术(Cross-Component Adaptive Loop Filter,CCALF)在环路滤波时,将一些亮度分量的细节补充到色度分量上,以提升压缩效率。由于色度分量的细节可以由亮度分量补充一些,这也使得在编码残差时可以允许更大的失真。
这样,由于各图像分量之间本身的属性不同,以及一些跨分量技术的使用,使得各个图像分量的残差分布规律并不始终一致。比如说在码率很高,质量要求很高视频编解码中,不同分量的非零系数的分布情况相似,比如非零系数都逼近于可能是非零系数的区域的右下角位置。但是在一些码率不是特别高,质量要求不是特别高得视频编解码中,不同分量的非零系数的分布情况可能会不一样,比如说Y分量的非零系数都逼近可能是非零系数的区域的右下角位置,而U/V分量的非零系数只分布在左上角位置;或者是U分量的非零系数也接近于右下角位置,而V分量的非零系数只分布在左上角位置。
因此,本申请实施例可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制3个图像分量是否使用本申请实施例的方法。或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制亮度分量,另一个分量标识信息来控制两个色度分量。或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法,比如3个图像分量可以是RGB中的R,G,B,或YUV中的Y,U,V,或Y,Cb,Cr。
在一种可能的实施方式中,当分量标识信息的个数为1个时,解析码流,确定当前片的分量标识信息,包括:解析码流,确定当前片的第一分量标识信息;
相应地,该方法还可以包括:若第一分量标识信息的取值为第一值,则确定当前片的第一图像分量、第二图像分量和第三图像分量均使用最后一个非零系数位置翻转;或者,若第一分量标识信息的取值为第二值,则确定当前片的第一图像分量、第二图像分量和第三图像分量均不使用最后一个非零系数位置翻转。
在另一种可能的实施方式中,当分量标识信息的个数为2个时,解析码流,确定当前片的分量标识信息,包括:解析码流,确定当前片的第二分量标识信息和第三分量标识信息;
相应地,该方法还可以包括:若第二分量标识信息的取值为第一值,则确定当前片的第一图像分量、第二图像分量和第三图像分量的其中两个图像分量均使用最后一个非零系数位置翻转;或者,若第二分量标识信息的取值为第二值,则确定当前片的第一图像分量、第二图像分量和第三图像分量的其中两个 图像分量均不使用最后一个非零系数位置翻转;以及
若第三分量标识信息的取值为第一值,则确定当前片的除其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转;或者,若第三分量标识信息的取值为第二值,则确定当前片的除其中两个图像分量之外的剩余图像分量不使用最后一个非零系数位置翻转。
在又一种可能的实施方式中,当分量标识信息的个数为3个时,解析码流,确定当前片的分量标识信息,包括:解析码流,确定当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;
相应地,该方法还可以包括:若第四分量标识信息的取值为第一值,则确定当前片的第一图像分量使用最后一个非零系数位置翻转;或者,若第四分量标识信息的取值为第二值,则确定当前片的第一图像分量不使用最后一个非零系数位置翻转;以及
若第五分量标识信息的取值为第一值,则确定当前片的第二图像分量使用最后一个非零系数位置翻转;或者,若第五分量标识信息的取值为第二值,则确定当前片的第二图像分量不使用最后一个非零系数位置翻转;以及
若第六分量标识信息的取值为第一值,则确定当前片的第三图像分量使用最后一个非零系数位置翻转;或者,若第六分量标识信息的取值为第二值,则确定当前片的第三图像分量不使用最后一个非零系数位置翻转。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
还需要说明的是,这里的分量标识信息为片级的标志,可以用sh_reverse_last_sig_coeff_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_reverse_last_sig_coeff_flag[0]、sh_reverse_last_sig_coeff_flag[1]和sh_reverse_last_sig_coeff_flag[2]。其中,第四分量标识信息用sh_reverse_last_sig_coeff_flag[0]表示,用于指示当前片的第一图像分量对应的当前块是否使用最后一个非零系数位置翻转;第五分量标识信息用sh_reverse_last_sig_coeff_flag[1]表示,用于指示当前片的第二图像分量对应的当前块是否使用最后一个非零系数位置翻转;第六分量标识信息用sh_reverse_last_sig_coeff_flag[2]表示,用于指示当前片的第三图像分量对应的当前块是否使用最后一个非零系数位置翻转。
在一种具体的示例中,以YUV这三个图像分量中每一个图像分量均单独设置一个分量标识信息进行控制。假定存在序列级的标识信息sps_extension_flag、sps_range_extension_flag和sps_reverse_last_sig_coeff_enabled_flag。在序列级,解码获取sps_extension_flag,如果sps_extension_flag的取值为1,那么需要解码获取sps_range_extension_flag;如果sps_range_extension_flag的取值为1,那么需要解码获取sps_reverse_last_sig_coeff_enabled_flag。其中,sps_reverse_last_sig_coeff_enabled_flag是当前序列的最后一个非零系数位置翻转技术允许使用的标志。如果sps_reverse_last_sig_coeff_enabled_flag的取值为1,表示当前序列内的块允许使用最后一个非零系数位置翻转;否则(即sps_reverse_last_sig_coeff_enabled_flag的取值为0),表示当前序列内的块不允许使用最后一个非零系数位置翻转。如果sps_reverse_last_sig_coeff_enabled_flag没有出现,那么sps_reverse_last_sig_coeff_enabled_flag的取值为0。在片级,如果sps_reverse_last_sig_coeff_enabled_flag的取值为1,那么需要进一步解码获取分量标识信息(sh_reverse_last_sig_coeff_flag[0],sh_reverse_last_sig_coeff_flag[1],sh_reverse_last_sig_coeff_flag[2])。其中,sh_reverse_last_sig_coeff_flag[cIdx],cIdx的取值为0、1、2,表示当前片的第cIdx分量的最后一个非零系数位置翻转标志。如果sh_reverse_last_sig_coeff_flag[cIdx]的取值为1,表示当前片内的第cIdx分量的块使用最后一个非零系数位置翻转;否则(即sh_reverse_last_sig_coeff_flag[cIdx]的取值为0),表示当前片内的第cIdx分量的块不使用最后一个非零系数位置翻转。如果sh_reverse_last_sig_coeff_flag[cIdx]没有出现,那么sh_reverse_last_sig_coeff_flag[cIdx]的取值为0。
在一种可能的实施方式中,对于YUV格式,第0分量对应Y分量,第1分量对应U(Cb)分量,第2分量对应V(Cr)分量。
在另一种可能的实施方式中,对于RGB格式,第0分量对应R分量,第1分量对应G分量,第2分量对应B分量。
示例性地,以YUV格式为例,如果sh_reverse_last_sig_coeff_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)使用最后一个非零系数位置翻转;如果sh_reverse_last_sig_coeff_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)使用最后一个非零系数位置翻转;如果sh_reverse_last_sig_coeff_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)使用最后一个非零系数位置翻转。
在一种实现方式中,其语法元素表的修改如下(Sequence parameter set RBSP syntax),参见表6。
表6
在另一种实现方式中,其语法元素表的修改如下(Sequence parameter set range extension syntax),参见表7。
表7
在又一种实现方式中,其语法元素表的修改如下(Slice header syntax),参见表8。
表8
在又一种实现方式中,对于Slice header syntax还存在另一种修改形式,其语法元素表的修改如下(Slice header syntax),参见表9。
表9
这里,一种可能的情况是startComp等于0,numComps等于3。
针对语义的修改如下:
当前块中按预设扫描顺序最后一个非零系数的水平(或列)坐标的值LastSignificantCoeffX按如下方法导出:
如果last_sig_coeff_x_suffix不存在,那么,
LastSignificantCoeffX=last_sig_coeff_x_prefix;
否则(last_sig_coeff_x_suffix存在),
LastSignificantCoeffX=(1<<((last_sig_coeff_x_prefix>>1)-1))*(2+(last_sig_coeff_x_prefix&1))+last_sig_coeff_x_suffix;
如果sh_reverse_last_sig_coeff_flag[cIdx]的取值为1,那么
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
当前块中按扫描顺序最后一个非零系数的竖直(或行)坐标的值LastSignificantCoeffY按如下方法导出:
如果last_sig_coeff_y_suffix不存在,那么,
LastSignificantCoeffY=last_sig_coeff_y_prefix;
否则(last_sig_coeff_y_suffix存在):
LastSignificantCoeffY=(1<<((last_sig_coeff_y_prefix>>1)-1))*(2+(last_sig_coeff_y_prefix&1))+last_sig_coeff_y_suffix;
如果sh_reverse_last_sig_coeff_flag[cIdx]的取值为1,那么
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
在这里,sh_reverse_last_sig_coeff_flag[cIdx]表示当前片的第cIdx分量的最后一个非零系数位置翻转标志,cIdx的取值为0、1、2。
还可以理解,在第三语法元素标识信息指示当前序列使用范围扩展时,这时候还可默认需要编码所有可能需要编码的系数,也就是不再使用最后一个非零系数的位置,而是按预设扫描顺序把当前块所有可能不为0的系数都扫描到;因此,本申请实施例还可以引入最后一个系数使能标识信息,用于确定当前块是否使用最后一个系数位置。
在一些实施例中,当第三语法元素标识信息指示当前序列使用范围扩展时,该方法还可以包括:
解析码流,确定当前块的最后一个系数使能标识信息;
当最后一个系数使能标识信息指示当前块使用最后一个系数位置时,按照预设扫描顺序对最后一个系数位置之前的所有系数进行解码,确定当前块的系数。
需要说明的是,对于最后一个系数使能标识信息而言,可以用default_last_coeff_enabled_flag表示。在本申请实施例中,最后一个系数使能标识信息至少可以为下述其中一项的标识信息:序列级、图像级、片级和块级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
也就是说,default_last_coeff_enabled_flag可能是一个序列级或者更高级别的标志,也可能是图像级的标志或者片级的标志或者块级的标志或者其他级别的标志。另外,块级的标志可以包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或者其他块级的标志,本申请实施例不作任何限定。
在一些实施例中,该方法还可以包括:
若最后一个系数使能标识信息的取值为第一值,则确定最后一个系数使能标识信息指示当前块使用最后一个系数位置;或者,
若最后一个系数使能标识信息的取值为第二值,则确定最后一个系数使能标识信息指示当前块不使用最后一个系数位置。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
这样,以第一值为1,第二值为0为例,如果default_last_coeff_enabled_flag的取值为1,那么可以确定default_last_coeff_enabled_flag指示当前块使用最后一个系数位置;或者,如果default_last_coeff_enabled_flag的取值为0,那么可以确定default_last_coeff_enabled_flag指示当前块不使用最后一个系数位置。
在当前块使用最后一个系数位置的情况下,这时候可以按照预设扫描顺序对最后一个系数位置之前的所有系数进行解码,进而确定出当前块的系数。
进一步地,在当前块不使用最后一个系数位置的情况下,即最后一个系数使能标识信息的取值为0,在一些实施例中,该方法还可以包括:
解析码流,获取当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
根据最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息,确定最后一个非零系数的位置;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
需要说明的是,如果当前块不使用最后一个系数位置,那么这时候需要解码获取最后一个非零系数的位置。具体地,通过解析码流,获取last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_ prefix、last_sig_coeff_y_suffix;然后根据last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix,进而确定出最后一个非零系数的位置。否则,如果当前块使用最后一个系数位置,这时候不再需要确定最后一个非零系数的位置,也就不再需要解码获取last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix。
还需要说明的是,如果当前块使用最后一个系数位置,那么可以按照预设扫描顺序对最后一个系数位置之前的所有系数进行解码;如果当前块不使用最后一个系数位置,那么可以按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码。这里,预设扫描顺序可以是对角线、Zigzag、水平、垂直、4×4子块扫描或者任何其它扫描顺序,本申请实施例不作任何限定。
进一步地,对于最后一个系数位置而言,在一些实施例中,最后一个系数位置是当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,最后一个系数位置是当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
需要注意的是,本申请实施例中的最后一个系数位置并不代表最后一个非零系数的位置。因为最后一个系数位置上的系数可能是0,而最后一个非零系数的位置上的系数一定不是0。
在一种特定示例中,该方法还可以包括:将最后一个非零系数的位置设置在最后一个系数位置。
也就是说,本申请实施例仍然可以使用最后一个非零系数的位置,这时候需要把最后一个非零系数的位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。
进一步地,最后一个系数位置可以用(LastCoeffX,LastCoeffY)表示,即当前块按照预设扫描顺序所有可能不为0的系数的最后位置。在一些实施例中,该方法还可以包括:
确定当前块在预设操作后得到变换块的宽度和高度;
根据变换块的宽度和高度进行坐标计算,得到变换块的右下角坐标信息;
根据变换块的右下角坐标信息,确定所述最后一个系数位置。
在这里,预设操作至少包括:强制置零(zero-out)操作。
需要说明的是,(LastCoeffX,LastCoeffY)表示zero-out后的变换块的右下角坐标信息;其中,(LastCoeffX,LastCoeffY)的导出方法如下:
LastCoeffX=(1<<log2ZoTbWidth)-1;
LastCoeffY=(1<<log2ZoTbHeight)-1。
这样,如果default_last_coeff_enabled_flag的取值为1,那么根据(LastCoeffX,LastCoeffY)即可确定出最后一个系数位置。
在一种特定示例中,仍然使用最后一个非零系数的位置,这时候可以把最后一个非零系数的位置放在按照预设扫描顺序的当前块所有可能为0的系数的最后位置。在一些实施例中,该方法还可以包括:
当将最后一个非零系数的位置设置在最后一个系数位置时,根据变换块的右下角坐标信息,确定最后一个非零系数的位置。
也就是说,最后一个非零系数的位置可以用(LastSignificantCoeffX,LastSignificantCoeffY)表示,(LastSignificantCoeffX,LastSignificantCoeffY)的导出方法如下:
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1;
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)表示zero-out后的变换块的右下角坐标信息。如果default_last_coeff_enabled_flag的取值为1,那么根据(LastSignificantCoeffX,LastSignificantCoeffY)即可确定出最后一个非零系数的位置。
如此,针对某种情况,在系数编码时,默认需要编码所有可能需要编码的系数。也就是说通常情况下,系数的编解码方法还是与相关技术中的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码。默认需要编码所有可能需要编码的系数,也就是说不再使用最后一个非零系数的位置,而是按预设扫描顺序把当前块所有可能不为0的系数都扫描到;或者说,把最后一个需要编码的系数位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。这个位置通常是指当前块所有可能不为0的系数所组成的矩阵的右下角位置。这里使用最后一个需要编码的系数位置而不是最后一个非零系数的位置。因为最后一个需要编码的系数位置上的系数可能是0,而最后一个非零系数的位置上的系数一定不是0。
一种特例是仍然使用最后一个非零系数的位置,这时候把最后一个非零系数的位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。
另外,按预设扫描顺序的当前块所有可能不为0的系数,是因为除了最后一个非零系数之外还有一些其他技术使得一个块中的某些系数默认为0。例如,可以是上述提到的zero-out。
针对语义的修改如表10所示。
表10
本申请实施例中,可以在解码最后一个非零系数所需的信息前加一个条件,即如果default_last_coeff_enabled_flag不成立(即default_last_coeff_enabled_flag的取值等于0),那么才需要解码last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等语法元素。如果default_last_coeff_enabled_flag成立(即default_last_coeff_enabled_flag的取值等于1),那么不需要解码last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix等语法元素。
在这里,default_last_coeff_enabled_flag是默认最后一个系数使能标志,用于指示是否使用默认最后一个系数。如果default_last_coeff_enabled_flag的取值为1,表示使用默认最后一个系数位置,即把最后一个需要编码的系数位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置;否则,表示不使用默认最后一个系数位置。
如果如果default_last_coeff_enabled_flag的取值为1,那么默认最后一个系数位置(LastCoeffX,LastCoeffY)为当前块按预设扫描顺序所有可能不为0的系数的最后位置。按预设扫描顺序(LastCoeffX,LastCoeffY)之前的系数都需要扫描。在本申请实施例中,(LastCoeffX,LastCoeffY)导出方法如下:
LastCoeffX=(1<<log2ZoTbWidth)-1;
LastCoeffY=(1<<log2ZoTbHeight)-1。
其中,(LastCoeffX,LastCoeffY)是zero-out后的变换块的右下角位置的坐标信息。
一种特例是仍然使用最后一个非零系数的位置,把最后一个非零系数的位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。在本申请实施例中,最后一个非零系数的位置(LastSignificantCoeffX,LastSignificantCoeffY)导出方法如下:
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1;
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)是zero-out后的变换块的右下角位置的坐标信息。
还需要说明的是,default_last_coeff_enabled_flag可能是一个序列(sequence)级或者更高级别的标志,也可能是图像(picture)级的标志或片(slice)级的标志或块(block)级的标志或其他级别的标志,块级的标志包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或其他块级的标志。
另外,default_last_coeff_enabled_flag可能依赖于一些其他的标志,比如高位宽标识信息或高码率标识信息等。即当高位宽标识信息或高码率标识信息的取值为1时,需要解码default_last_coeff_enabled_flag标志;否则,不需要解码default_last_coeff_enabled_flag标志。
在一种具体的示例中,以序列级为例,假定有一个序列级的标志sps_high_bit_depth_flag指示当前的视频序列是否为高位宽序列。如果sps_high_bit_depth_flag的取值为1,那么表示当前的视频序列是高位宽序列;否则,表示当前的视频序列不是高位宽序列。在序列级,如果sps_high_bit_depth_flag的取值为1,那么需要解码sps_default_last_coeff_enabled_flag。这里,sps_default_last_coeff_enabled_flag是当前序列的默认最后一个系数使能标志。如果sps_default_last_coeff_enabled_flag的取值为1,那么表示当前序列内的块使用默认最后一个系数;否则(即sps_default_last_coeff_enabled_flag的取值为0),表示当前序列内的块不使用默认最后一个系数。上述语法表中的default_last_coeff_enabled_flag变更为sps_default_last_coeff_enabled_flag。
在实现中,其语法元素表的修改如下(Sequence parameter set RBSP syntax),参见表11。
表11
在另一种具体的示例中,以片(slice)级为例,假定有一个序列级的标志sps_high_bit_depth_flag指示当前的视频序列是否为高位宽序列。如果sps_high_bit_depth_flag的取值为1,那么表示当前的视频序列是高位宽序列;否则,表示当前的视频序列不是高位宽序列。在slice级,如果sps_high_bit_depth_flag的取值为1,那么需要解码sh_default_last_coeff_enabled_flag。这里,sh_default_last_coeff_enabled_flag是当前片的默认最后一个系数使能标志。如果sh_default_last_coeff_enabled_flag的取值为1,那么表示当前片内的块使用默认最后一个系数;否则(即sh_default_last_coeff_enabled_flag的取值为0),表示当前片内的块不使用默认最后一个系数。上述语法表中的default_last_coeff_enabled_flag变更为sh_default_last_coeff_enabled_flag。
在实现中,其语法元素表的修改如下(Slice header syntax),参见表12。
表12
在本申请实施例中,针对sh_default_last_coeff_enabled_flag,即当前片的默认最后一个系数使能标识信息,也可以体现在当前片内的每一个图像分量都可以单独控制是否使用默认最后一个系数。
具体来说,当前片的默认最后一个系数使能标识信息,也可以用sh_default_last_coeff_enabled_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_default_last_coeff_enabled_flag[0]、sh_default_last_coeff_enabled_flag[1]和sh_default_last_coeff_enabled_flag[2]。其中,sh_default_last_coeff_enabled_flag[0]用于指示当前片的第一图像分量对应的当前块是否使用默认最后一个系数;sh_default_last_coeff_enabled_flag[1]用于指示当前片的第二图像分量对应的当前块是否使用默认最后一个系数;sh_default_last_coeff_enabled_flag[2]用于指示当前片的第三图像分量对应的当前块是否使用默认最后一个系数。
在这里,本申请实施例也可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制3个图像分量是否使用本申请实施例的方法。或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制亮度分量,另一个分量标识信息来控制两个色度分量。或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法,比如3个图像分量可以是RGB中的R,G,B,或YUV中的Y,U,V,或Y,Cb,Cr。
示例性地,以YUV格式为例,且分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。其中,如果sh_default_last_coeff_enabled_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)对应的块使用默认最后一个系数;如果sh_default_last_coeff_enabled_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)对应的块使用默认最后一个系数;如果sh_default_last_coeff_enabled_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)对应的块使用默认最后一个系数。
还可以理解,在第三语法元素标识信息指示当前序列使用范围扩展时,还可以扫描到的子块都默认需要编码,这时候就不需要在码流中传输sb_coded_flag,即编码器/解码器均不需要处理这个标志,以加快编解码速度。因此,本申请实施例还可以引入子块默认编码标识信息,用于确定当前块内的待解码子块是否为默认编码。
在一些实施例中,当当第三语法元素标识信息指示当前序列使用范围扩展时,该方法还可以包括:
解析码流,确定当前块的子块默认编码标识信息;
当子块默认编码标识信息指示当前块内的待解码子块默认编码时,对待解码子块内的所有系数进行解码。
需要说明的是,如果子块默认编码标识信息指示当前块内的待解码子块默认编码,那么可以确定出子块编码标识信息的取值为第一值,此时需要对待解码子块内的所有系数进行解码。
还需要说明的是,对于子块默认标识信息而言,可以用default_sb_coded_flag表示。在本申请实施例中,子块默认编码标识信息至少为下述其中一项的标识信息:序列级、图像级、片级和块级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
也就是说,default_sb_coded_flag可能是一个序列级或者更高级别的标志,也可能是图像级的标志或者片级的标志或者块级的标志或者其他级别的标志。另外,块级的标志可以包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或者其他块级的标志,本申请实施例均不作任何限定。
在一些实施例中,该方法还可以包括:若子块默认编码标识信息的取值为第一值,则确定子块默认编码标识信息指示当前块内的待解码子块默认编码;或者,若子块默认编码标识信息的取值为第二值,则确定子块默认编码标识信息指示当前块内的待解码子块不默认编码。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。具体地,第一语法元素标识信息可以是写入在概述(profile)中的参数,也可以是一个标志(flag)的取值,本申请实施例对此不作任何限定。
以第一语法元素标识信息为一个flag为例,这时候对于第一值和第二值而言,第一值可以设置为1,第二值可以设置为0;或者,第一值还可以设置为true,第二值还可以设置为false;或者,第一值还可以设置为0,第二值还可以设置为1;或者,第一值还可以设置为false,第二值还可以设置为true;这里不作任何限定。
这样,以第一值为1,第二值为0为例,如果default_sb_coded_flag的取值为1,那么可以确定default_sb_coded_flag指示待解码子块默认需要编码;或者,如果default_sb_coded_flag的取值为0,那么可以确定default_sb_coded_flag指示待解码子块不默认需要编码。
在待解码子块默认需要编码的情况下,这时候default_sb_coded_flag的取值为1,意味着sb_coded_flag的取值为1,即不再需要解码sb_coded_flag,此时默认需要对待解码子块内的所有系数进行解码。
进一步地,在待解码子块不默认需要编码的情况下,即default_sb_coded_flag的取值为0,在一些实施例中,该方法还可以包括:
解析码流,确定待解码子块的子块编码标识信息;
当子块编码标识信息的取值为第一值时,对待解码子块内的所有系数进行解码。
需要说明的是,如果待解码子块不默认需要编码,那么这时候还需要解码获取子块编码标识信息;然后根据子块编码标识信息来确定是否对待解码子块内的所有系数进行解码。
进一步地,对于子块编码标识信息而言,该方法还可以包括:若子块编码标识信息的取值为第一值,则确定对待解码子块内的所有系数进行解码;或者,若子块编码标识信息的取值为第二值,则确定待解码子块内的所有系数均为零。
在本申请实施例中,子块编码标识信息可以用sb_coded_flag表示。以第一值为1,第二值为0为例,如果sb_coded_flag的取值为1,那么可以确定需要对待解码子块内的所有系数进行解码;或者,如果sb_coded_flag的取值为0,那么可以确定不需要对待解码子块内的所有系数进行解码,这时候待解码子块内的所有系数均为零。
如此,针对某种情况,在系数编码时,扫描到的子块都默认需要编码,或者说扫描到的子块都默认包含非零系数。也就是说通常情况下,系数的编解码方法还是与相关技术中的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码。这种情况下非零系数很多,扫描到的子块几乎都是需要编码;或者说,扫描到的子块几乎都包含非零系数。这样就不需要在码流中传输sb_coded_flag,编码器/解码器也就不需要处理这个标志,从而能够加快编解码速度。由于去掉了一个几乎没有的标志,此时还会带来一点压缩性能的提升。
针对语义的修改如表13所示。
表13
其中,default_sb_coded_flag是默认子块需要编码的标志。如果default_sb_coded_flag的取值为1,那么可以确定sb_coded_flag[xS][yS]的取值为1,这时候不需要再从码流中进行解码;否则(default_sb_coded_flag的取值为0),还需要从码流中解码sb_coded_flag[xS][yS]。
还需要说明的是,default_sb_coded_flag可能是一个序列(sequence)级或者更高级别的标志,也可能是图像(picture)级的标志或片(slice)级的标志或块(block)级的标志或其他级别的标志,块级的标志包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或其他块级的标志。
另外,default_sb_coded_flag可能依赖于一些其他的标志,比如高位宽标识信息或高码率标识信息等。即当高位宽标识信息或高码率标识信息的取值为1时,需要解码default_sb_coded_flag标志;否则,不需要解码default_sb_coded_flag标志。
在一种具体的示例中,以序列级为例,假定有一个序列级的标志sps_high_bit_depth_flag指示当前的视频序列是否为高位宽序列。如果sps_high_bit_depth_flag的取值为1,那么表示当前的视频序列是高位宽序列;否则,表示当前的视频序列不是高位宽序列。在序列级,如果sps_high_bit_depth_flag的取值为1,那么需要解码sps_default_sb_coded_flag。这里,sps_default_sb_coded_flag是当前序列的默认子块需要编码的标志。如果sps_default_sb_coded_flag的取值为1,那么表示当前序列内的块默认子块需要编码;否则(即sps_default_sb_coded_flag的取值为0),表示当前序列内的块不默认子块需要编码。上述语法表中的default_sb_coded_flag变更为sps_default_sb_coded_flag。
在实现中,其语法元素表的修改如下(Sequence parameter set RBSP syntax),参见表14。
表14
在另一种具体的示例中,以片(slice)级为例,假定有一个序列级的标志sps_high_bit_depth_flag指示当前的视频序列是否为高位宽序列。如果sps_high_bit_depth_flag的取值为1,那么表示当前的视频序列是高位宽序列;否则,表示当前的视频序列不是高位宽序列。在slice级,如果sps_high_bit_depth_flag的取值为1,那么需要解码sh_default_sb_coded_flag。这里,sh_default_sb_coded_flag是当前片的默认子块需要编码的标志。如果sh_default_sb_coded_flag的取值为1,那么表示当前片内的块默认子块需要编码;否则(即sh_default_sb_coded_flag的取值为0),表示当前片内的块不默认子块需要编码。上述语法表中的default_sb_coded_flag变更为sh_default_sb_coded_flag。
在实现中,其语法元素表的修改如下(Slice header syntax),参见表15。
表15
需要注意的是,序列级的标志sps_high_bit_depth_flag指示当前序列是否为高位宽序列的标志,也可以替换为sps_high_bit_rate_flag指示当前序列是否为高码率序列的标志;甚至也可以替换为其他指示高位宽、高码率、高质量或无损编码等的标志,这里不作任何限定。
在本申请实施例中,针对sh_default_sb_coded_flag,即当前片的默认子块需要编码标识信息,也可以体现在当前片内的每一个图像分量都可以单独控制是否使用默认子块需要编码。
具体来说,当前片的默认子块需要编码标识信息,也可以用sh_default_sb_coded_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_default_sb_coded_flag[0]、sh_default_sb_coded_flag[1]和sh_default_sb_coded_flag[2]。其中,sh_default_sb_coded_flag[0]用于指示当前片的第一图像分量对应的当前块是否使用默认子块需要编码;sh_default_sb_coded_flag[1]用于指示当前片的第二图像分量对应的当前块是否使用默认子块需要编码;sh_default_sb_coded_flag[2]用于指示当前片的第三图像分量对应的 当前块是否使用默认子块需要编码。
在这里,本申请实施例也可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制3个图像分量是否使用本申请实施例的方法。或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制亮度分量,另一个分量标识信息来控制两个色度分量。或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法,比如3个图像分量可以是RGB中的R,G,B,或YUV中的Y,U,V,或Y,Cb,Cr。
示例性地,以YUV格式为例,且分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。其中,如果sh_default_sb_coded_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)对应的块使用默认子块需要编码;如果sh_default_sb_coded_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)对应的块使用默认子块需要编码;如果sh_default_sb_coded_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)对应的块使用默认子块需要编码。
简言之,针对视频中的所有图像分量,除了可以采用统一的标识信息控制使用本申请实施例的方法之外,还可以是分别采用不同的标识信息单独控制各个图像分量使用本申请实施例的方法,也可以是采用两个标识信息来控制所有图像分量使用本申请实施例的方法,即可以使用多于一个的标识信息来控制不同图像分量对本申请实施例的使用。其中,所有图像分量可以是指如RGB格式视频的R、G、B,或者YUV格式的Y、U、V(Y,Cb,Cr)等。
本实施例提供了一种解码方法,应用于解码器。通过解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以更细化的对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
本申请的另一实施例中,参见图11,其示出了本申请实施例提供的一种编码方法的流程示意图。如图11所示,该方法可以包括:
S1101:确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置。
S1102:根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息。
S1103:按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
需要说明的是,本申请实施例的编码方法,具体是指一种系数编码方法,其应用于编码器。其中,基于图8A所示编码器100的组成结构,该编码方法主要应用于编码器100中的“熵编码单元115”部分,针对该熵编码单元115,可以采用基于上下文模型的自适应二进制算术编码模式或者旁路模式对相关标识信息(或语法元素)进行熵编码,然后写入码流。
还需要说明的是,视频标准中通常所说的编码可以包括编码和解码两部分,因此,视频编码包括编码器侧的编码方法和解码器侧的解码方法。本申请实施例则针对编码器侧的编码方法进行描述。
通常情况下,比如对于常规视频而言,针对系数的编码方法与相关技术中的已有方法相同;但是针对某种情况,比如高位宽或高质量或高码率或无损压缩的视频编解码,本申请实施例提供了一种可以修改最后一个非零系数的位置的导出方式,这时候本申请实施例需要引入分量标识信息,以便确定当前片的分量是否使用最后一个非零系数位置翻转。
在本申请实施例中,分量标识信息为片(slice)级的标志。该分量标识信息用于指示当前片的分量是否使用最后一个非零系数位置翻转。其中,如果当前片的分量使用最后一个非零系数位置翻转,那么意味着当前片的分量对应的当前块使用最后一个非零系数位置翻转;如果当前片的分量不使用最后一个非零系数位置翻转,那么意味着当前片的分量对应的当前块也不使用最后一个非零系数位置翻转。
可以理解地,当前序列包括当前片,当前片内可以包括当前块。在一些实施例中,在确定当前片的 分量标识信息之前,该方法还可以包括:
确定第一语法元素标识信息;
当第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行确定当前片的分量标识信息的步骤。
在本申请实施例中,对于确定第一语法元素标识信息,可以包括:若当前序列允许使用最后一个非零系数位置翻转,则确定第一语法元素标识信息的取值为第一值;或者,若当前序列不允许使用最后一个非零系数位置翻转,则确定第一语法元素标识信息的取值为第二值。
进一步地,该方法还可以包括:将第一语法元素标识信息写入码流。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。具体地,第一语法元素标识信息可以是写入在概述(profile)中的参数,也可以是一个标志(flag)的取值,本申请实施例对此不作任何限定。
以第一语法元素标识信息为一个flag为例,这时候对于第一值和第二值而言,第一值可以设置为1,第二值可以设置为0;或者,第一值还可以设置为true,第二值还可以设置为false;或者,第一值还可以设置为0,第二值还可以设置为1;或者,第一值还可以设置为false,第二值还可以设置为true。示例性地,对于flag而言,一般情况下,第一值可以为1,第二值可以为0,但是并不作任何限定。
还需要说明的是,第一语法元素标识信息为序列级的标志,用sps_reverse_last_sig_coeff_flag表示,可以用于指示当前序列是否允许使用最后一个非零系数位置翻转。这样,在确定出当前序列允许使用最后一个非零系数位置翻转时,可以进一步确定片级的分量标识信息,以便判断当前片的分量是否使用最后一个非零系数位置翻转。
进一步地,对于解码获得第一语法元素标识信息之前,在一种可能的实施例中,该方法还可以包括:
解析码流,确定第二语法元素标识信息;
当第二语法元素标识信息指示当前序列使用标准扩展版本时,执行解析码流,确定第一语法元素标识信息的步骤。
对于解码获得第一语法元素标识信息之前,在另一种可能的实施例中,该方法还可以包括:
解析码流,确定第三语法元素标识信息;
当第三语法元素标识信息指示当前序列使用范围扩展时,执行解析码流,确定第一语法元素标识信息的步骤。
对于解码获得第一语法元素标识信息之前,在又一种可能的实施例中,该方法还可以包括:
解析码流,确定第二语法元素标识信息;
当第二语法元素标识信息指示当前序列使用标准扩展版本时,解析码流,确定第三语法元素标识信息;
当第三语法元素标识信息指示当前序列使用范围扩展时,执行解析码流,确定第一语法元素标识信息的步骤。
需要说明的是,第二语法元素标识信息和第三语法元素标识信息均为序列级的标志。其中,第二语法元素标识信息用sps_extension_flag表示,可以用于指示当前序列是否使用标准扩展版本;第三语法元素标识信息用sps_range_extension_flag表示,可以用于指示当前序列是否使用范围扩展。
也就是说,在解码获得第一语法元素标识信息(sps_reverse_last_sig_coeff_flag)之前,可以是在解析码流获得sps_extension_flag之后,如果sps_extension_flag指示当前序列使用标准扩展版本,那么解码获得sps_reverse_last_sig_coeff_flag;或者,也可以是在解析码流获得sps_range_extension_flag之后,如果sps_range_extension_flag指示当前序列使用使用范围扩展,那么解码获得sps_reverse_last_sig_coeff_flag;或者,甚至也可以是在解析码流获得sps_extension_flag之后,如果sps_extension_flag指示当前序列使用标准扩展版本,那么解析码流获得sps_range_extension_flag;如果sps_range_extension_flag指示当前序列使用使用范围扩展,那么再解码获得sps_reverse_last_sig_coeff_flag;但是本申请实施例不作任何限定。
在本申请实施例中,对于确定第二语法元素标识信息,可以包括:若当前序列使用标准扩展版本,则确定第二语法元素标识信息的取值为第一值;或者,若当前序列不使用标准扩展版本,则确定第二语法元素标识信息的取值为第二值。
进一步地,该方法还可以包括:将第二语法元素标识信息写入码流。
在本申请实施例中,对于确定第三语法元素标识信息,可以包括:若当前序列使用范围扩展,则确定第三语法元素标识信息的取值为第一值;或者,若当前序列不使用范围扩展,则确定第三语法元素标识信息的取值为第二值。
进一步地,该方法还可以包括:将第三语法元素标识信息写入码流。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
还需要说明的是,第二语法元素标识信息用sps_extension_flag表示,第三语法元素标识信息用sps_range_extension_flag表示。这样,在序列级,如果sps_extension_flag的取值为1,即当前序列使用标准扩展版本,那么需要确定sps_range_extension_flag;如果sps_range_extension_flag的取值为1,即当前序列使用范围扩展,那么需要确定sps_reverse_last_sig_coeff_flag;如果sps_reverse_last_sig_coeff_flag的取值为1,即当前序列允许使用最后一个非零系数位置翻转,那么还需要进一步确定片级的分量标识信息,以便判断当前片的分量是否使用最后一个非零系数位置翻转。
在一些实施例中,当前序列使用范围扩展,可以包括:当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。下面将以四种情况为例分别进行描述。
在一种可能的实施方式中,当第三语法元素标识信息为高位宽标识信息时,该方法还可以包括:若高位宽标识信息指示当前序列满足高位宽,则确定当前序列使用范围扩展。
在另一种可能的实施方式中,当第三语法元素标识信息为高码率标识信息时,该方法还可以包括:若高码率标识信息指示当前序列满足高码率,则确定当前序列使用范围扩展。
在又一种可能的实施方式中,当第三语法元素标识信息为高质量标识信息时,该方法还可以包括:若高质量标识信息指示当前序列满足高质量,则确定当前序列使用范围扩展。
在又一种可能的实施方式中,当第三语法元素标识信息为无损压缩标识信息时,该方法还可以包括:若无损压缩标识信息指示当前序列满足无损压缩,则确定当前序列使用范围扩展。
示例性地,以序列级为例,第三语法元素标识信息还可以是高位宽标识信息(用sps_high_bit_depth_flag表示),用于指示当前序列是否为高位宽序列;或者也可以替换为高码率标识信息(用sps_high_bit_rate_flag表示),用于指示当前序列是否为高码率序列;或者也可以替换为其他指示高位宽、高码率、高质量或者无损压缩的标识信息,本申请实施例不作具体限定。
在本申请实施例中,第一语法元素标识信息、第二语法元素标识信息和第三语法元素标识信息等可以是序列(sequence)级的标志,甚至也可以是更高级别的标志,比如视频可用性信息(Video Usability Information,VUI)、补充增强信息(Supplemental Enhancement Information,SEI)等。
进一步地,对于最后一个非零系数位置翻转标识信息而言,可以用reverse_last_sig_coeff_flag表示。其中,最后一个非零系数位置翻转标识信息至少可以为下述其中一项的标识信息:序列(sequence)级、图像(picture)级、片(slice)级和块(block)级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
也就是说,reverse_last_sig_coeff_flag可能是一个序列级或者更高级别的标志,也可能是图像级的标志或者片级的标志或者块级的标志或者其他级别的标志。另外,块级的标志可以包括最大编码单元(LCU)级的标志或编码树单元(CTU)级的标志或编码树单元(CTU)级的标志或编码单元(CU)级的标志或者其他块级的标志,本申请实施例均不作任何限定。
在本申请实施例中,序列级的最后一个非零系数位置翻转标识信息可以用sps_reverse_last_sig_coeff_flag表示,片级的最后一个非零系数位置翻转标识信息可以用sh_reverse_last_sig_coeff_flag表示。
还需要说明的是,对于片级的最后一个非零系数位置翻转标识信息,还可以称为当前片的分量标识信息。在一些实施例中,所述确定当前片的分量标识信息,可以包括:
若当前片的分量使用最后一个非零系数位置翻转,则确定分量标识信息的取值为第一值;或者,
若当前片的分量不使用最后一个非零系数位置翻转,则确定分量标识信息的取值为第二值。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
以第一值为1,第二值为0为例,如果当前片的分量使用最后一个非零系数位置翻转,即所属当前片的分量对应的当前块使用最后一个非零系数位置翻转,那么可以确定分量标识信息的取值为1;如果当前片的分量不使用最后一个非零系数位置翻转,即所属当前片的分量对应的当前块也不使用最后一个非零系数位置翻转,那么可以确定分量标识信息的取值为0。
进一步地,对于所属当前片的分量对应的当前块,最后一个非零系数的位置可以包括最后一个非零系数的初始水平坐标和初始竖直坐标。当初始水平坐标和初始竖直坐标为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离时,所述根据所述分量标识信息以及所述最后一个非零系数的位置,确定所述当前块的最后一个非零系数的坐标信息,可以包括:
若分量标识信息的取值为第一值,则根据最后一个非零系数的初始水平坐标和初始竖直坐标进行计算,确定最后一个非零系数的坐标信息;或者,
若分量标识信息的取值为第二值,则根据最后一个非零系数的初始水平坐标和初始竖直坐标直接确定最后一个非零系数的坐标信息。
换言之,在一些实施例中,该方法还可以包括:
若分量标识信息的取值为第一值,则确定最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离和竖直距离;或者,
若分量标识信息的取值为第二值,则最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离。
也就是说,最后一个非零系数的坐标信息通常为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离。对于常规视频来说,由于非零系数大多集中在左上角,而右下角的大片区域为0;但是对于高位宽、高质量、高码率的视频编解码来说,右下角也会出现大量的非零系数,使得最后一个非零系数的坐标信息的值通常较大,这时候为了节省开销,系数编码的时候需要进行坐标变换(具体可以是坐标翻转计算,即坐标翻转后最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离和竖直距离),那么后续在解码器中,系数解码时也需要进行坐标翻转计算,再次翻转后可以恢复出最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离,从而确定出最后一个非零系数的位置。
进一步地,在一些实施例中,所述根据最后一个非零系数的初始水平坐标和初始竖直坐标进行计算,确定最后一个非零系数的坐标信息,可以包括:
确定当前块的宽度和高度;
根据当前块的宽度与最后一个非零系数的初始水平坐标进行减法计算,得到最后一个非零系数的水平坐标;以及
根据当前块的高度与最后一个非零系数的初始竖直坐标进行减法计算,得到最后一个非零系数的竖直坐标;
根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定最后一个非零系数的坐标信息。
需要说明的是,对于所属当前片的分量对应的当前块,可以是没有zero-out变换的块,也可以是zero-out变换后的块。以zero-out变换后的块为例,这时候当前块的宽度为1<<log2ZoTbWidth,当前块的高度是1<<log2ZoTbHeight;那么在分量标识信息指示使用最后一个非零系数位置翻转的情况下,
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffX;
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffY。
其中,等式右边的(LastSignificantCoeffX,LastSignificantCoeffY)表示直接确定的最后一个非零系数的坐标信息(即最后一个非零系数的初始水平坐标和初始竖直坐标),等式左边的(LastSignificantCoeffX,LastSignificantCoeffY)表示坐标翻转后得到的最后一个非零系数的坐标信息(也即在当前块使用最后一个非零系数位置翻转的情况下,被写入码流的最后一个非零系数的坐标信息)。
在一些实施例中,将最后一个非零系数的坐标信息写入码流,可以包括:
根据最后一个非零系数的坐标信息,确定当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
将所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息写入码流。
需要说明的是,最后一个非零系数的水平坐标的前缀信息用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_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix写入码流,以便解码器能够通过解析码流确定出最后一个非零系数的坐标信息。
在本申请实施例中,预设扫描顺序可以是对角线、Zigzag、水平、垂直、4×4子块扫描或者任何其它扫描顺序,这里不作任何限定。
如此,本申请实施例提供一种修改最后一个非零系数的位置导出方式。也就是说通常情况下,系数的编解码方法还是与相关技术的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码。由于通常情况下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix编码的是最后一个非零系数位置的横坐标,也就是相对于当前块左上角的水平距离;last_sig_coeff_y_prefix、 last_sig_coeff_y_suffix编码的是最后一个非零系数位置的纵坐标,也就是相对于当前块左上角的竖直距离,如图10A所示。而在高位宽或高质量或高码率的视频或无损压缩的视频编解码的情况下,最后一个非零系数的位置普遍接近于当前块所有可能是非0系数的区域的右下角。在这种情况下,last_sig_coeff_x_prefix、last_sig_coeff_x_suffix编码的是最后一个非零系数位置相对于当前块所有可能是非0系数的区域的右下角的水平距离;last_sig_coeff_y_prefix、last_sig_coeff_y_suffix编码的是最后一个非零系数位置相对于当前块所有可能是非0系数的区域的右下角的竖直距离,如图10B所示;因此,本申请实施例可以通过引入reverse_last_sig_coeff_flag,从而可以解决在码流中编码较大的值会带来更大的开销问题。
进一步地,针对片级的reverse_last_sig_coeff_flag(即当前片的分量标识信息,sh_reverse_last_sig_coeff_flag),可以体现在当前片内的每一个图像分量都可以单独控制是否使用最后一个非零系数位置翻转。
在本申请实施例中,分量可以包括第一图像分量、第二图像分量和第三图像分量。
在一种具体的示例中,第一图像分量为亮度分量,第二图像分量为第一色度分量,第二图像分量为第二色度分量。其中,亮度分量用Y分量表示,第一色度分量用U(Cb)分量表示,第二色度分量用V(Cr)表示。
在另一种具体的示例中,第一图像分量为红色分量,第二图像分量为绿色分量,第三图像分量为蓝色分量。其中,红色分量用R分量表示,绿色分量用G分量表示,蓝色分量用B表示。
进一步地,在一些实施例中,当分量包括第一图像分量、第二图像分量和第三图像分量时,该方法还可以包括:
基于第一图像分量、第二图像分量和第三图像分量之间的属性关系,判断当前片内第一图像分量、第二图像分量和第三图像分量之间是否存在共用分量标识信息;
根据判断结果,确定当前片的分量标识信息的个数;其中,该分量标识信息的个数为1个或2个或3个。
具体来讲,对于确定分量标识信息的个数,可以包括:
若当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定当前片的分量标识信息的个数为1个;或者,
若当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定当前片的分量标识信息的个数为2个;或者,
若当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定当前片的分量标识信息的个数为3个。
在本申请实施例中,由于各图像分量之间本身的属性不同,以及一些跨分量技术的使用,使得各个图像分量的残差分布规律并不始终一致。比如说在码率很高,质量要求很高视频编解码中,不同分量的非零系数的分布情况相似,比如非零系数都逼近于可能是非零系数的区域的右下角位置。但是在一些码率不是特别高,质量要求不是特别高得视频编解码中,不同分量的非零系数的分布情况可能会不一样,比如说Y分量的非零系数都逼近可能是非零系数的区域的右下角位置,而U/V分量的非零系数只分布在左上角位置;或者是U分量的非零系数也接近于右下角位置,而V分量的非零系数只分布在左上角位置。
因此,本申请实施例可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制3个图像分量是否使用本申请实施例的方法。或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法,比如一个分量标识信息来控制亮度分量,另一个分量标识信息来控制两个色度分量。或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法,比如3个图像分量可以是RGB中的R,G,B,或YUV中的Y,U,V,或Y,Cb,Cr。
在一种可能的实施方式中,当分量标识信息的个数为1个时,确定当前片的分量标识信息,可以包括:确定当前片的第一分量标识信息;
相应地,该方法还可以包括:若第一分量标识信息的取值为第一值,则确定当前片的第一图像分量、第二图像分量和第三图像分量均使用最后一个非零系数位置翻转;或者,若第一分量标识信息的取值为第二值,则确定当前片的第一图像分量、第二图像分量和第三图像分量均不使用最后一个非零系数位置翻转。
在另一种可能的实施方式中,当分量标识信息的个数为2个时,确定当前片的分量标识信息,可以包括:确定当前片的第二分量标识信息和第三分量标识信息;
相应地,该方法还可以包括:若第二分量标识信息的取值为第一值,则确定当前片的其中两个图像分量均使用最后一个非零系数位置翻转;或者,若第二分量标识信息的取值为第二值,则确定当前片的其中两个图像分量均不使用最后一个非零系数位置翻转;以及
若第三分量标识信息的取值为第一值,则确定当前片的除其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转;或者,若第三分量标识信息的取值为第二值,则确定当前片的除其中两个图像分量之外的剩余图像分量不使用最后一个非零系数位置翻转。
在又一种可能的实施方式中,当分量标识信息的个数为3个时,确定当前片的分量标识信息,可以包括:确定当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;
相应地,该方法还可以包括:若第四分量标识信息的取值为第一值,则确定当前片的第一图像分量使用最后一个非零系数位置翻转;或者,若第四分量标识信息的取值为第二值,则确定当前片的第一图像分量不使用最后一个非零系数位置翻转;以及
若第五分量标识信息的取值为第一值,则确定当前片的第二图像分量使用最后一个非零系数位置翻转;或者,若第五分量标识信息的取值为第二值,则确定当前片的第二图像分量不使用最后一个非零系数位置翻转;以及
若第六分量标识信息的取值为第一值,则确定当前片的第三图像分量使用最后一个非零系数位置翻转;或者,若第六分量标识信息的取值为第二值,则确定当前片的第三图像分量不使用最后一个非零系数位置翻转。
需要说明的是,第一值和第二值不同,而且第一值和第二值可以是参数形式,也可以是数字形式。在一种具体的示例中,第一值可以设置为1,第二值可以设置为0,但是并不作任何限定。
还需要说明的是,这里的分量标识信息为片级的标志,可以用sh_reverse_last_sig_coeff_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_reverse_last_sig_coeff_flag[0]、sh_reverse_last_sig_coeff_flag[1]和sh_reverse_last_sig_coeff_flag[2]。其中,第四分量标识信息用sh_reverse_last_sig_coeff_flag[0]表示,用于指示当前片的第一图像分量对应的当前块是否使用最后一个非零系数位置翻转;第五分量标识信息用sh_reverse_last_sig_coeff_flag[1]表示,用于指示当前片的第二图像分量对应的当前块是否使用最后一个非零系数位置翻转;第六分量标识信息用sh_reverse_last_sig_coeff_flag[2]表示,用于指示当前片的第三图像分量对应的当前块是否使用最后一个非零系数位置翻转。
示例性地,以YUV格式为例,且分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。其中,如果sh_reverse_last_sig_coeff_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)对应的块使用最后一个非零系数位置翻转;如果sh_reverse_last_sig_coeff_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)对应的块使用最后一个非零系数位置翻转;如果sh_reverse_last_sig_coeff_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)对应的块使用最后一个非零系数位置翻转。
还可以理解,在第三语法元素标识信息指示当前序列使用范围扩展时,这时候还可默认需要编码所有可能需要编码的系数,也就是不再使用最后一个非零系数的位置,而是按预设扫描顺序把当前块所有可能不为0的系数都扫描到;因此,本申请实施例还可以引入最后一个系数使能标识信息,用于确定当前块是否使用最后一个系数位置。
在一些实施例中,当第三语法元素标识信息指示当前序列使用范围扩展时,该方法还可以包括:
确定当前块的最后一个系数使能标识信息;
当最后一个系数使能标识信息指示当前块使用最后一个系数位置时,按照预设扫描顺序对所述最后一个系数位置之前的所有系数进行编码,并将编码后得到的比特信息、视频标识信息以及最后一个系数使能标识信息写入码流。
需要说明的是,对于最后一个系数使能标识信息而言,可以用default_last_coeff_enabled_flag表示。在本申请实施例中,最后一个系数使能标识信息至少可以为下述其中一项的标识信息:序列级、图像级、片级和块级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
还需要说明的是,对于最后一个系数使能标识信息而言,在一些实施例中,所述确定当前块的最后一个系数使能标识信息,可以包括:
若当前块使用所述最后一个系数位置,则确定最后一个系数使能标识信息的取值为第一值;或者,
若当前块不使用所述最后一个系数位置,则确定最后一个系数使能标识信息的取值为第二值。
也就是说,以第一值为1,第二值为0为例,如果确定当前块使用最后一个系数位置,那么default_last_coeff_enabled_flag的取值为1;或者,如果确定当前块不使用最后一个系数位置,那么 default_last_coeff_enabled_flag的取值为0。
进一步地,对于最后一个系数位置而言,在一些实施例中,最后一个系数位置是当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,最后一个系数位置是当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
需要注意的是,本申请实施例中的最后一个系数位置并不代表最后一个非零系数的位置。因为最后一个系数位置上的系数可能是0,而最后一个非零系数的位置上的系数一定不是0。
在一种特定示例中,该方法还可以包括:将最后一个非零系数的位置设置在所述最后一个系数位置。
也就是说,本申请实施例仍然可以使用最后一个非零系数的位置,这时候需要把最后一个非零系数的位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。
进一步地,最后一个系数位置可以用(LastCoeffX,LastCoeffY)表示,即当前块按照预设扫描顺序所有可能不为0的系数的最后位置。在一些实施例中,该方法还可以包括:
确定所述当前块在预设操作后得到变换块的宽度和高度;
根据所述变换块的宽度和高度进行坐标计算,得到所述变换块的右下角坐标信息;
根据所述变换块的右下角坐标信息,确定所述最后一个系数位置。
在这里,预设操作至少包括:强制置零(zero-out)操作。
需要说明的是,(LastCoeffX,LastCoeffY)表示zero-out后的变换块的右下角坐标信息;其中,(LastCoeffX,LastCoeffY)的导出方法如下:
LastCoeffX=(1<<log2ZoTbWidth)-1;
LastCoeffY=(1<<log2ZoTbHeight)-1。
这样,如果default_last_coeff_enabled_flag的取值为1,那么根据(LastCoeffX,LastCoeffY)即可确定出最后一个系数位置。
在一种特定示例中,仍然使用最后一个非零系数的位置,这时候可以把最后一个非零系数的位置放在按照预设扫描顺序的当前块所有可能为0的系数的最后位置。在一些实施例中,该方法还可以包括:
当将最后一个非零系数的位置设置在所述最后一个系数位置时,根据所述变换块的右下角坐标信息,确定所述最后一个非零系数的位置。
也就是说,最后一个非零系数的位置可以用(LastSignificantCoeffX,LastSignificantCoeffY)表示,(LastSignificantCoeffX,LastSignificantCoeffY)的导出方法如下:
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1;
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1。
其中,(LastSignificantCoeffX,LastSignificantCoeffY)表示zero-out后的变换块的右下角坐标信息。如果default_last_coeff_enabled_flag的取值为1,那么根据(LastSignificantCoeffX,LastSignificantCoeffY)即可确定出最后一个非零系数的位置。
进一步地,在最后一个系数使能标识信息指示当前块不使用最后一个系数位置的情况下,即最后一个系数使能标识信息的取值为0,在一些实施例中,该方法还可以包括:
确定当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
根据所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息,确定所述最后一个非零系数的位置;
按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行编码,并将所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息写入码流。
需要说明的是,如果当前块不使用最后一个系数位置,那么这时候需要确定最后一个非零系数的位置。具体地,需要确定last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix;然后将last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffix写入码流。
如此,在系数编码时,默认需要编码所有可能需要编码的系数。也就是说通常情况下,系数编解码方法还是与相关技术中的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码,默认需要编码所有可能需要编码的系数,也就是说不再使用最后一个非零系数的位置,而是按预设扫描顺序把当前块所有可能不为0的系数都扫描到;或者说,把最后一个需要编码的系数位置放在按预设扫描顺序的当前块所有可能不为0的系数的最后位置。这个位置通常是指当前块所有可能不为0的系数所组成的矩阵的右下角位置。因此,本申请实施例可以通过引入 default_last_coeff_enabled_flag,这时候可以减少甚至消除关于最后一个非零系数位置的相关语法元素,能够节省开销,避免造成浪费。
进一步地,针对sh_default_last_coeff_enabled_flag,即当前片的默认最后一个系数使能标识信息,也可以体现在当前片内的每一个图像分量都可以单独控制是否使用默认最后一个系数。
具体来说,当前片的默认最后一个系数使能标识信息,也可以用sh_default_last_coeff_enabled_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_default_last_coeff_enabled_flag[0]、sh_default_last_coeff_enabled_flag[1]和sh_default_last_coeff_enabled_flag[2]。其中,sh_default_last_coeff_enabled_flag[0]用于指示当前片的第一图像分量对应的当前块是否使用默认最后一个系数;sh_default_last_coeff_enabled_flag[1]用于指示当前片的第二图像分量对应的当前块是否使用默认最后一个系数;sh_default_last_coeff_enabled_flag[2]用于指示当前片的第三图像分量对应的当前块是否使用默认最后一个系数。
在这里,本申请实施例也可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法;或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法;或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。
示例性地,以YUV格式为例,且分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。其中,如果sh_default_last_coeff_enabled_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)对应的块使用默认最后一个系数;如果sh_default_last_coeff_enabled_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)对应的块使用默认最后一个系数;如果sh_default_last_coeff_enabled_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)对应的块使用默认最后一个系数。
还可以理解,在第三语法元素标识信息指示当前序列使用范围扩展时,还可以扫描到的子块都默认需要编码,这时候就不需要在码流中传输sb_coded_flag,即编码器/解码器均不需要处理这个标志,以加快编解码速度。因此,本申请实施例还可以引入子块默认编码标识信息,用于确定当前块内的待解码子块是否为默认编码。
在一些实施例中,当第三语法元素标识信息指示当前序列使用范围扩展时,该方法还可以包括:
确定当前块内的待编码子块的子块默认编码标识信息;
当子块默认编码标识信息指示所述待编码子块默认编码时,对待编码子块内的所有系数进行编码,并将编码后得到的比特信息以及所述子块默认编码标识信息写入码流。
需要说明的是,对于子块默认标识信息而言,可以用default_sb_coded_flag表示。在本申请实施例中,子块默认编码标识信息至少为下述其中一项的标识信息:序列级、图像级、片级和块级;甚至也可以为更高级别(如VUI、SEI等)的标识信息,这里不作任何限定。
还需要说明的是,对于子块默认标识信息而言,在一些实施例中,所述确定待编码子块的子块默认编码标识信息,可以包括:若待编码子块默认编码,则确定子块默认编码标识信息的取值为第一值;或者,若待编码子块不默认编码,则确定子块默认编码标识信息的取值为第二值。
这样,以第一值为1,第二值为0为例,如果确定待编码子块默认需要编码,那么default_sb_coded_flag的取值为1;或者,如果确定待编码子块不默认需要编码,那么default_sb_coded_flag的取值为0。
在待编码子块默认需要编码的情况下,这时候default_sb_coded_flag的取值为1,意味着sb_coded_flag的取值为1,即不再需要编码sb_coded_flag。但是在待编码子块不默认需要编码的情况下,即当子块默认编码标识信息指示待编码子块不默认编码时,在一些实施例中,该方法还可以包括:确定待编码子块的子块编码标识信息,并将子块编码标识信息写入码流。
进一步地,在一些实施例中,所述确定所述待编码子块的子块编码标识信息,可以包括:若子块内需进行编码,则确定子块编码标识信息的取值为第一值;或者,若子块内的所有系数均为零,则确定子块编码标识信息的取值为第二值。
在本申请实施例中,子块编码标识信息可以用sb_coded_flag表示。以第一值为1,第二值为0为例,如果确定需要对待编码子块进行编码,意味着待编码子块内包含有待编码的非零系数,那么sb_coded_flag的取值为1;或者,如果确定不需要对待编码子块进行编码,意味着待编码子块内的所有系数均为零,那么sb_coded_flag的取值为0。
如此,在系数编码时,扫描到的子块都默认需要编码,或者说扫描到的子块都默认包含非零系数。 也就是说通常情况下,系数编码的方法还是与相关技术中的已有方法一样。某种情况,比如可以是指高位宽或高质量或高码率的视频或无损压缩的视频编解码,这种情况下非零系数很多,扫描到的子块几乎都是需要编码;或者说,扫描到的子块几乎都包含非零系数。这样就不需要在码流中传输sb_coded_flag,编码器也就不需要处理这个标志,从而能够加快编解码速度。由于去掉了一个几乎没有的标志,此时还会带来一点压缩性能的提升。
进一步地,针对sh_default_sb_coded_flag,即当前片的默认子块需要编码标识信息,也可以体现在当前片内的每一个图像分量都可以单独控制是否使用默认子块需要编码。
具体来说,当前片的默认子块需要编码标识信息,也可以用sh_default_sb_coded_flag[cIdx]表示,其中,cIdx的取值为0、1、2。具体来说,当使用3个分量标识信息来分别控制3个图像分量时,这三个分量标识信息可以包括:sh_default_sb_coded_flag[0]、sh_default_sb_coded_flag[1]和sh_default_sb_coded_flag[2]。其中,sh_default_sb_coded_flag[0]用于指示当前片的第一图像分量对应的当前块是否使用默认子块需要编码;sh_default_sb_coded_flag[1]用于指示当前片的第二图像分量对应的当前块是否使用默认子块需要编码;sh_default_sb_coded_flag[2]用于指示当前片的第三图像分量对应的当前块是否使用默认子块需要编码。
在这里,本申请实施例也可以使用一个或多个的分量标识信息来控制不同图像分量对本申请实施例的使用。示例性地,可以使用1个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法;或者可以分别使用2个分量标识信息来控制标志来控制3个图像分量是否使用本申请实施例的方法;或者还可以分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。
在一种具体的示例中,以YUV格式为例,且分别使用3个分量标识信息来控制3个图像分量各自是否使用本申请实施例的方法。其中,如果sh_default_sb_coded_flag[0]的取值为1,那么确定当前片的第一图像分量(比如Y分量)对应的块使用默认子块需要编码;如果sh_default_sb_coded_flag[1]的取值为1,那么确定当前片的第二图像分量(比如U分量)对应的块使用默认子块需要编码;如果sh_default_sb_coded_flag[2]的取值为1,那么确定当前片的第三图像分量(比如V分量)对应的块使用默认子块需要编码。
简言之,针对视频中的所有图像分量,除了可以采用统一的标识信息控制使用本申请实施例的方法之外,还可以是分别采用不同的标识信息单独控制各个图像分量使用本申请实施例的方法,也可以是采用两个标识信息来控制所有图像分量使用本申请实施例的方法,即可以使用多于一个的标识信息来控制不同图像分量对本申请实施例的使用。其中,所有图像分量可以是指如RGB格式视频的R、G、B,或者YUV格式的Y、U、V(Y,Cb,Cr)等。
本实施例还提供了一种编码方法,应用于编码器。通过确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用更细化的对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
本申请的又一实施例中,本申请实施例提供了一种码流,该码流可以是根据待编码信息进行比特编码生成的,待编码信息包括下述至少之一:第一语法元素标识信息、第二语法元素标识信息、第三语法元素标识信息、分量标识信息、最后一个系数使能标识信息和子块默认编码标识信息;其中,
第一语法元素标识信息用于指示当前序列是否允许使用最后一个非零系数位置翻转,第二语法元素标识信息用于指示当前序列是否使用标准扩展版本,第三语法元素标识信息用于指示当前序列是否使用范围扩展,分量标识信息用于指示当前片的分量是否使用最后一个非零系数位置翻转,最后一个系数使能标识信息用于指示当前块是否使用最后一个系数位置,子块默认编码标识信息用于指示当前块内的待编码子块是否默认编码;其中,当前序列包括当前片,当前片包括当前块。
在本申请实施例中,这里还提供了一种编解码***,编解码***可以包括编码器和解码器。其中,编码器在生成码流后,将该码流传输至解码器,以便解码器通过解析码流获得相关解码信息,比如第一语法元素标识信息、第二语法元素标识信息、第三语法元素标识信息、分量标识信息、最后一个系数使能标识信息和子块默认编码标识信息以及当前块的最后一个非零系数的坐标信息等。
本申请的再一实施例中,基于前述实施例相同的发明构思,参见图12,其示出了本申请实施例提供的一种编码器120的组成结构示意图。如图12所示,该编码器120可以包括:第一确定单元1201和编码单元1202;其中,
第一确定单元1201,配置为确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;
第一确定单元1201,还配置为根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;
编码单元1202,配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
在一些实施例中,第一确定单元1201,还配置为确定第一语法元素标识信息;以及当第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行确定当前片的分量标识信息的步骤;其中,当前序列包括当前片。
在一些实施例中,第一确定单元1201,还配置为确定第二语法元素标识信息;以及当第二语法元素标识信息指示当前序列使用标准扩展版本时,确定第三语法元素标识信息;以及当第三语法元素标识信息指示当前序列使用范围扩展时,执行确定第一语法元素标识信息的步骤。
在一些实施例中,第一确定单元1201,还配置为若当前序列使用标准扩展版本,则确定第二语法元素标识信息的取值为第一值;或者,若当前序列不使用标准扩展版本,则确定第二语法元素标识信息的取值为第二值。
在一些实施例中,编码单元1202,还配置为将第二语法元素标识信息写入码流。
在一些实施例中,第一确定单元1201,还配置为若当前序列使用范围扩展,则确定第三语法元素标识信息的取值为第一值;或者,若当前序列不使用范围扩展,则确定第三语法元素标识信息的取值为第二值。
在一些实施例中,编码单元1202,还配置为将第三语法元素标识信息写入码流。
在一些实施例中,当前序列使用范围扩展,包括:当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。
在一些实施例中,第一确定单元1201,还配置为若当前序列允许使用最后一个非零系数位置翻转,则确定第一语法元素标识信息的取值为第一值;或者,若当前序列不允许使用最后一个非零系数位置翻转,则确定第一语法元素标识信息的取值为第二值。
在一些实施例中,编码单元1202,还配置为将第一语法元素标识信息写入码流。
在一些实施例中,第一确定单元1201,还配置为若当前片的分量使用最后一个非零系数位置翻转,则确定分量标识信息的取值为第一值;或者,若当前片的分量不使用最后一个非零系数位置翻转,则确定分量标识信息的取值为第二值。
在一些实施例中,分量包括下述至少之一:第一图像分量、第二图像分量和第三图像分量;其中,
第一图像分量为亮度分量,第二图像分量为第一色度分量,第二图像分量为第二色度分量;或者,
第一图像分量为红色分量,第二图像分量为绿色分量,第三图像分量为蓝色分量。
在一些实施例中,第一确定单元1201,还配置为当分量包括第一图像分量、第二图像分量和第三图像分量时,若当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定当前片的分量标识信息的个数为1个;或者,若当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定当前片的分量标识信息的个数为2个;或者,若当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定当前片的分量标识信息的个数为3个。
在一些实施例中,第一确定单元1201,还配置为确定当前片的第一分量标识信息;
相应地,第一确定单元1201,还配置为若当前片的第一图像分量、第二图像分量和第三图像分量均使用最后一个非零系数位置翻转,则确定第一分量标识信息的取值为第一值。
在一些实施例中,第一确定单元1201,还配置为确定当前片的第二分量标识信息和第三分量标识信息;
相应地,第一确定单元1201,还配置为若当前片的第一图像分量、第二图像分量和第三图像分量的其中两个图像分量均使用最后一个非零系数位置翻转,则确定第二分量标识信息的取值为第一值;以及若当前片的除其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转,则确定第三分量标识信息的取值为第一值。
在一些实施例中,第一确定单元1201,还配置为确定当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;
相应地,第一确定单元1201,还配置为若当前片的第一图像分量使用最后一个非零系数位置翻转,则确定第四分量标识信息的取值为第一值;以及若当前片的第二图像分量使用最后一个非零系数位置翻转,则确定第五分量标识信息的取值为第一值;以及若当前片的第三图像分量使用最后一个非零系数位置翻转,则确定第六分量标识信息的取值为第一值。
在一些实施例中,最后一个非零系数的位置包括最后一个非零系数的初始水平坐标和初始竖直坐标,初始水平坐标和初始竖直坐标为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离;
相应地,第一确定单元1201,还配置为若分量标识信息的取值为第一值,则根据最后一个非零系数的初始水平坐标和初始竖直坐标进行计算,确定最后一个非零系数的坐标信息;或者,若分量标识信息的取值为第二值,则根据最后一个非零系数的初始水平坐标和初始竖直坐标直接确定最后一个非零系数的坐标信息。
在一些实施例中,第一确定单元1201,还配置为确定当前块的宽度和高度;以及根据当前块的宽度与最后一个非零系数的初始水平坐标进行减法计算,得到最后一个非零系数的水平坐标;以及根据当前块的高度与最后一个非零系数的初始竖直坐标进行减法计算,得到最后一个非零系数的竖直坐标;以及根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定最后一个非零系数的坐标信息。
在一些实施例中,第一确定单元1201,还配置为若分量标识信息的取值为第一值,则确定最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离和竖直距离;或者,若分量标识信息的取值为第二值,则最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离。
在一些实施例中,第一确定单元1201,还配置为根据最后一个非零系数的坐标信息,确定当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
编码单元1202,还配置为将最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息写入码流。
在一些实施例中,第一确定单元1201,还配置为当第三语法元素标识信息指示当前序列使用范围扩展时,确定当前块的最后一个系数使能标识信息;
编码单元1202,还配置为当最后一个系数使能标识信息指示当前块使用最后一个系数位置时,按照预设扫描顺序对最后一个系数位置之前的所有系数进行编码,并将编码后得到的比特信息以及最后一个系数使能标识信息写入码流。
在一些实施例中,第一确定单元1201,还配置为若当前块使用最后一个系数位置,则确定最后一个系数使能标识信息的取值为第一值;或者,若当前块不使用最后一个系数位置,则确定最后一个系数使能标识信息的取值为第二值。
在一些实施例中,最后一个系数位置是当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,最后一个系数位置是当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
在一些实施例中,第一确定单元1201,还配置为将最后一个非零系数的位置设置在最后一个系数位置。
在一些实施例中,第一确定单元1201,还配置为确定当前块在预设操作后得到变换块的宽度和高度;以及根据变换块的宽度和高度进行坐标计算,得到变换块的右下角坐标信息;以及根据变换块的右下角坐标信息,确定最后一个系数位置。
在一些实施例中,预设操作至少包括:强制置零(zero-out)操作。
在一些实施例中,第一确定单元1201,还配置为当将最后一个非零系数的位置设置在最后一个系数位置时,根据变换块的右下角坐标信息,确定最后一个非零系数的位置。
在一些实施例中,第一确定单元1201,还配置为当最后一个系数使能标识信息指示当前块不使用最后一个系数位置时,确定当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;以及根据最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息,确定最后一个非零系数的位置;
编码单元1202,还配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非 零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息写入码流。
在一些实施例中,第一确定单元1201,还配置为当第三语法元素标识信息指示当前序列使用范围扩展时,确定当前块内的待编码子块的子块默认编码标识信息;
编码单元1202,还配置为当子块默认编码标识信息指示待编码子块默认编码时,对待编码子块内的所有系数进行编码,并将编码后得到的比特信息以及子块默认编码标识信息写入码流。
在一些实施例中,第一确定单元1201,还配置为当子块默认编码标识信息指示待编码子块不默认编码时,确定待编码子块的子块编码标识信息;
编码单元1202,还配置为将子块编码标识信息写入码流。
在一些实施例中,第一确定单元1201,还配置为若待编码子块默认编码,则确定子块默认编码标识信息的取值为第一值;或者,若待编码子块不默认编码,则确定子块默认编码标识信息的取值为第二值。
在一些实施例中,第一确定单元1201,还配置为若子块内需进行编码,则确定子块编码标识信息的取值为第一值;或者,若子块内的所有系数均为零,则确定子块编码标识信息的取值为第二值。
在一些实施例中,第一值为1,第二值为0。
可以理解地,在本申请实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
因此,本申请实施例提供了一种计算机存储介质,应用于编码器120,该计算机存储介质存储有计算机程序,所述计算机程序被第一处理器执行时实现前述实施例中任一项所述的方法。
基于上述编码器120的组成以及计算机存储介质,参见图13,其示出了本申请实施例提供的编码器120的具体硬件结构示意图。如图13所示,可以包括:第一通信接口1301、第一存储器1302和第一处理器1303;各个组件通过第一总线***1304耦合在一起。可理解,第一总线***1304用于实现这些组件之间的连接通信。第一总线***1304除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图13中将各种总线都标为第一总线***1304。其中,
第一通信接口1301,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第一存储器1302,用于存储能够在第一处理器1303上运行的计算机程序;
第一处理器1303,用于在运行所述计算机程序时,执行:
确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;
根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。
可以理解,本申请实施例中的第一存储器1302可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DRRAM)。本申请描述的***和方法的第一存储器1302旨在包括但不限于这些和任意其它适合类型的存储器。
而第一处理器1303可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过第一处理器1303中的硬件的集成逻辑电路或者软件形式的指令完成。上述的第一处理 器1303可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于第一存储器1302,第一处理器1303读取第一存储器1302中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本申请描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(Application Specific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSP Device,DSPD)、可编程逻辑设备(Programmable Logic Device,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。对于软件实现,可通过执行本申请所述功能的模块(例如过程、函数等)来实现本申请所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
可选地,作为另一个实施例,第一处理器1303还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
本实施例提供了一种编码器,该编码器可以包括第一确定单元和编码单元。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用更细化的对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
本申请的再一实施例中,基于前述实施例相同的发明构思,参见图14,其示出了本申请实施例提供的一种解码器140的组成结构示意图。如图14所示,该解码器140可以包括:解析单元1401和第二确定单元1402;其中,
解析单元1401,配置为解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;
第二确定单元1402,配置为当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;
解析单元1401,还配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
在一些实施例中,解析单元1401,还配置为解析码流,确定第一语法元素标识信息;
第二确定单元1402,还配置为当第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行解析码流,确定当前片的分量标识信息的步骤;其中,当前序列包括当前片。
在一些实施例中,解析单元1401,还配置为解析码流,确定第二语法元素标识信息;以及当第二语法元素标识信息指示当前序列使用标准扩展版本时,解析码流,确定第三语法元素标识信息;以及当第三语法元素标识信息指示当前序列使用范围扩展时,执行解析码流,确定第一语法元素标识信息的步骤。
在一些实施例中,第二确定单元1402,还配置为若第二语法元素标识信息的取值为第一值,则确定第二语法元素标识信息指示当前序列使用标准扩展版本;或者,若第二语法元素标识信息的取值为第二值,则确定第二语法元素标识信息指示当前序列不使用标准扩展版本。
在一些实施例中,第二确定单元1402,还配置为若第三语法元素标识信息的取值为第一值,则确定第三语法元素标识信息指示当前序列使用范围扩展;或者,若第三语法元素标识信息的取值为第二值,则确定第三语法元素标识信息指示当前序列不使用范围扩展。
在一些实施例中,当前序列使用范围扩展,包括:当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。
在一些实施例中,第二确定单元1402,还配置为若第一语法元素标识信息的取值为第一值,则确定第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转;或者,若第一语法元素标识信息的取值为第二值,则确定第一语法元素标识信息指示当前序列不允许使用最后一个非零系数位置翻转。
在一些实施例中,第二确定单元1402,还配置为若分量标识信息的取值为第一值,则确定分量标 识信息指示当前片的分量使用最后一个非零系数位置翻转;或者,若分量标识信息的取值为第二值,则确定分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转。
在一些实施例中,第二确定单元1402,还配置为当分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转时,根据最后一个非零系数的坐标信息直接确定当前块的最后一个非零系数的位置;
解析单元1401,还配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
在一些实施例中,分量包括下述至少之一:第一图像分量、第二图像分量和第三图像分量;其中,
第一图像分量为亮度分量,第二图像分量为第一色度分量,第二图像分量为第二色度分量;或者,
第一图像分量为红色分量,第二图像分量为绿色分量,第三图像分量为蓝色分量。
在一些实施例中,第二确定单元1402,还配置为当分量包括第一图像分量、第二图像分量和第三图像分量时,若当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定当前片的分量标识信息的个数为1个;或者,若当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定当前片的分量标识信息的个数为2个;或者,若当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定当前片的分量标识信息的个数为3个。
在一些实施例中,解析单元1401,还配置为解析码流,确定当前片的第一分量标识信息;
相应地,第二确定单元1402,还配置为若第一分量标识信息的取值为第一值,则确定当前片的第一图像分量、第二图像分量和第三图像分量均使用最后一个非零系数位置翻转。
在一些实施例中,解析单元1401,还配置为解析码流,确定当前片的第二分量标识信息和第三分量标识信息;
相应地,第二确定单元1402,还配置为若第二分量标识信息的取值为第一值,则确定当前片的第一图像分量、第二图像分量和第三图像分量的其中两个图像分量均使用最后一个非零系数位置翻转;以及若第三分量标识信息的取值为第一值,则确定当前片的除其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转。
在一些实施例中,解析单元1401,还配置为解析码流,确定当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;
相应地,第二确定单元1402,还配置为若第四分量标识信息的取值为第一值,则确定当前片的第一图像分量使用最后一个非零系数位置翻转;以及若第五分量标识信息的取值为第一值,则确定当前片的第二图像分量使用最后一个非零系数位置翻转;以及若第六分量标识信息的取值为第一值,则确定当前片的第三图像分量使用最后一个非零系数位置翻转。
在一些实施例中,解析单元1401,还配置为解析码流,获取当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
第二确定单元1402,还配置为根据最后一个非零系数的水平坐标的前缀信息和最后一个非零系数的水平坐标的后缀信息,确定最后一个非零系数的水平坐标;以及根据最后一个非零系数的竖直坐标的前缀信息和最后一个非零系数的竖直坐标的后缀信息,确定最后一个非零系数的竖直坐标;以及根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定当前块的最后一个非零系数的坐标信息。
在一些实施例中,第二确定单元1402,还配置为当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,确定当前块的最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离和竖直距离;
相应地,第二确定单元1402,还配置为确定当前块的宽度和高度;以及根据当前块的宽度与最后一个非零系数的位置相对于当前块的右下角位置之间的水平距离进行减法计算,得到最后一个非零系数的水平坐标;以及根据当前块的高度与最后一个非零系数的位置相对于当前块的右下角位置之间的竖直距离进行减法计算,得到最后一个非零系数的竖直坐标;以及根据最后一个非零系数的水平坐标和最后一个非零系数的竖直坐标,确定当前块的最后一个非零系数的位置。
在一些实施例中,第二确定单元1402,还配置为当分量标识信息指示当前片的分量不使用最后一个非零系数位置翻转时,确定当前块的最后一个非零系数的坐标信息为最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离;以及根据最后一个非零系数的位置相对于当前块的左上角位置之间的水平距离和竖直距离,确定当前块的最后一个非零系数的位置。
在一些实施例中,解析单元1401,还配置为当第三语法元素标识信息指示当前序列使用范围扩展时,解析码流,确定当前块的最后一个系数使能标识信息;以及当最后一个系数使能标识信息指示当前 块使用最后一个系数位置时,按照预设扫描顺序对最后一个系数位置之前的所有系数进行解码,确定当前块的系数。
在一些实施例中,第二确定单元1402,还配置为若最后一个系数使能标识信息的取值为第一值,则确定最后一个系数使能标识信息指示当前块使用最后一个系数位置;或者,若最后一个系数使能标识信息的取值为第二值,则确定最后一个系数使能标识信息指示当前块不使用最后一个系数位置。
在一些实施例中,解析单元1401,还配置为当最后一个系数使能标识信息的取值为第二值时,解析码流,获取当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;
第二确定单元1402,还配置为根据最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息,确定最后一个非零系数的位置;
解析单元1401,还配置为按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
在一些实施例中,最后一个系数位置是当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,最后一个系数位置是当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
在一些实施例中,第二确定单元1402,还配置为将最后一个非零系数的位置设置在最后一个系数位置。
在一些实施例中,第二确定单元1402,还配置为确定当前块在预设操作后得到变换块的宽度和高度;以及根据变换块的宽度和高度进行坐标计算,得到变换块的右下角坐标信息;以及根据变换块的右下角坐标信息,确定最后一个系数位置。
在一些实施例中,预设操作至少包括:强制置零(zero-out)操作。
在一些实施例中,第二确定单元1402,还配置为当将最后一个非零系数的位置设置在最后一个系数位置时,根据变换块的右下角坐标信息,确定最后一个非零系数的位置。
在一些实施例中,解析单元1401,还配置为当第三语法元素标识信息指示当前序列使用范围扩展时,解析码流,确定当前块的子块默认编码标识信息;以及当子块默认编码标识信息指示当前块内的待解码子块默认编码时,对待解码子块内的所有系数进行解码。
在一些实施例中,解析单元1401,还配置为当子块默认编码标识信息指示当前块内的待解码子块不默认编码时,解析码流,确定待解码子块的子块编码标识信息;以及当子块编码标识信息的取值为第一值时,对待解码子块内的所有系数进行解码。
在一些实施例中,第二确定单元1402,还配置为若子块默认编码标识信息的取值为第一值,则确定子块默认编码标识信息指示当前块内的待解码子块默认编码;或者,若子块默认编码标识信息的取值为第二值,则确定子块默认编码标识信息指示当前块内的待解码子块不默认编码。
在一些实施例中,第二确定单元1402,还配置为若子块编码标识信息的取值为第一值,则确定对待解码子块内的所有系数进行解码;或者,若子块编码标识信息的取值为第二值,则确定待解码子块内的所有系数均为零。
在一些实施例中,第一值为1,第二值为0。
可以理解地,在本实施例中,“单元”可以是部分电路、部分处理器、部分程序或软件等等,当然也可以是模块,还可以是非模块化的。而且在本实施例中的各组成部分可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本实施例提供了一种计算机存储介质,应用于解码器140,该计算机存储介质存储有计算机程序,所述计算机程序被第二处理器执行时实现前述实施例中任一项所述的方法。
基于上述解码器140的组成以及计算机存储介质,参见图15,其示出了本申请实施例提供的解码器140的具体硬件结构示意图。如图15所示,可以包括:第二通信接口1501、第二存储器1502和第二处理器1503;各个组件通过第二总线***1504耦合在一起。可理解,第二总线***1504用于实现这些组件之间的连接通信。第二总线***1504除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图15中将各种总线都标为第二总线***1504。其中,
第二通信接口1501,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
第二存储器1502,用于存储能够在第二处理器1503上运行的计算机程序;
第二处理器1503,用于在运行所述计算机程序时,执行:
解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;
当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;
按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。
可选地,作为另一个实施例,第二处理器1503还配置为在运行所述计算机程序时,执行前述实施例中任一项所述的方法。
可以理解,第二存储器1502与第一存储器1302的硬件功能类似,第二处理器1503与第一处理器1303的硬件功能类似;这里不再详述。
本实施例提供了一种解码器,该解码器可以包括解析单元和第二确定单元。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用更细化的对各个图像分量分别控制最后一个非零系数的导出方式,即分别控制各个图像分量是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
需要说明的是,在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
本申请实施例中,在编码器中,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的位置;根据分量标识信息以及最后一个非零系数的位置,确定当前块的最后一个非零系数的坐标信息;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、分量标识信息以及最后一个非零系数的坐标信息写入码流。在解码器中,解析码流,确定当前片的分量标识信息,以及确定当前片的分量对应的当前块的最后一个非零系数的坐标信息;当分量标识信息指示当前片的分量使用最后一个非零系数位置翻转时,对最后一个非零系数的坐标信息进行计算,得到当前块的最后一个非零系数的位置;按照预设扫描顺序对最后一个非零系数的位置之前的所有系数进行解码,确定当前块的系数。这样,在高位宽、高码率、高质量或无损的视频编解码场景中,依据非零系数的分布规律设置合理的最后一个非零系数的导出方式,可以减少码流中编码所带来的开销,能够提高压缩效率;另外,由于各个图像分量的非零系数分布规律不同,还可以利用分量标识信息对各个图像分量分别控制是否使用最后一个非零系数位置翻转技术,从而能够进一步地提高压缩效率。
Claims (69)
- 一种解码方法,应用于解码器,所述方法包括:解析码流,确定当前片的分量标识信息,以及确定所述当前片的分量对应的当前块的最后一个非零系数的坐标信息;当所述分量标识信息指示所述当前片的分量使用最后一个非零系数位置翻转时,对所述最后一个非零系数的坐标信息进行计算,得到所述当前块的最后一个非零系数的位置;按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行解码,确定所述当前块的系数。
- 根据权利要求1所述的方法,其中,所述方法还包括:解析码流,确定第一语法元素标识信息;当所述第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行所述解析码流,确定当前片的分量标识信息的步骤;其中,所述当前序列包括所述当前片。
- 根据权利要求2所述的方法,其中,所述方法还包括:解析码流,确定第二语法元素标识信息;当所述第二语法元素标识信息指示所述当前序列使用标准扩展版本时,解析所述码流,确定第三语法元素标识信息;当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,执行所述解析码流,确定第一语法元素标识信息的步骤。
- 根据权利要求3所述的方法,其中,所述方法还包括:若所述第二语法元素标识信息的取值为第一值,则确定所述第二语法元素标识信息指示所述当前序列使用标准扩展版本;或者,若所述第二语法元素标识信息的取值为第二值,则确定所述第二语法元素标识信息指示所述当前序列不使用标准扩展版本。
- 根据权利要求3所述的方法,其中,所述方法还包括:若所述第三语法元素标识信息的取值为第一值,则确定所述第三语法元素标识信息指示所述当前序列使用范围扩展;或者,若所述第三语法元素标识信息的取值为第二值,则确定所述第三语法元素标识信息指示所述当前序列不使用范围扩展。
- 根据权利要求5所述的方法,其中,所述当前序列使用范围扩展,包括:所述当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。
- 根据权利要求2所述的方法,其中,所述方法还包括:若所述第一语法元素标识信息的取值为第一值,则确定所述第一语法元素标识信息指示所述当前序列允许使用最后一个非零系数位置翻转;或者,若所述第一语法元素标识信息的取值为第二值,则确定所述第一语法元素标识信息指示所述当前序列不允许使用最后一个非零系数位置翻转。
- 根据权利要求1所述的方法,其中,所述方法还包括:若所述分量标识信息的取值为第一值,则确定所述分量标识信息指示所述当前片的分量使用最后一个非零系数位置翻转;或者,若所述分量标识信息的取值为第二值,则确定所述分量标识信息指示所述当前片的分量不使用最后一个非零系数位置翻转。
- 根据权利要求8所述的方法,其中,所述方法还包括:当所述分量标识信息指示所述当前片的分量不使用最后一个非零系数位置翻转时,根据所述最后一个非零系数的坐标信息直接确定所述当前块的最后一个非零系数的位置;按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行解码,确定所述当前块的系数。
- 根据权利要求1所述的方法,其中,所述分量包括下述至少之一:第一图像分量、第二图像分量和第三图像分量;其中,所述第一图像分量为亮度分量,所述第二图像分量为第一色度分量,所述第二图像分量为第二色度分量;或者,所述第一图像分量为红色分量,所述第二图像分量为绿色分量,所述第三图像分量为蓝色分量。
- 根据权利要求9所述的方法,其中,当所述分量包括第一图像分量、第二图像分量和第三图像分量时,所述方法还包括:若所述当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定所述当前片的分量标识信息的个数为1个;或者,若所述当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定所述当前片的分量标识信息的个数为2个;或者,若所述当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定所述当前片的分量标识信息的个数为3个。
- 根据权利要求10所述的方法,其中,所述解析码流,确定当前片的分量标识信息,包括:解析所述码流,确定所述当前片的第一分量标识信息;相应地,所述方法还包括:若所述第一分量标识信息的取值为第一值,则确定所述当前片的所述第一图像分量、所述第二图像分量和所述第三图像分量均使用最后一个非零系数位置翻转。
- 根据权利要求10所述的方法,其中,所述解析码流,确定当前片的分量标识信息,包括:解析所述码流,确定所述当前片的第二分量标识信息和第三分量标识信息;相应地,所述方法还包括:若所述第二分量标识信息的取值为第一值,则确定所述当前片的所述第一图像分量、所述第二图像分量和所述第三图像分量的其中两个图像分量均使用最后一个非零系数位置翻转;若所述第三分量标识信息的取值为第一值,则确定所述当前片的除所述其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转。
- 根据权利要求11所述的方法,其中,所述解析码流,确定当前片的分量标识信息,包括:解析所述码流,确定所述当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;相应地,所述方法还包括:若所述第四分量标识信息的取值为第一值,则确定所述当前片的所述第一图像分量使用最后一个非零系数位置翻转;若所述第五分量标识信息的取值为第一值,则确定所述当前片的所述第二图像分量使用最后一个非零系数位置翻转;若所述第六分量标识信息的取值为第一值,则确定所述当前片的所述第三图像分量使用最后一个非零系数位置翻转。
- 根据权利要求1所述的方法,其中,所述解析码流,确定所述当前片的分量对应的当前块的最后一个非零系数的坐标信息,包括:解析所述码流,获取所述当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;根据所述最后一个非零系数的水平坐标的前缀信息和所述最后一个非零系数的水平坐标的后缀信息,确定所述最后一个非零系数的水平坐标;根据所述最后一个非零系数的竖直坐标的前缀信息和所述最后一个非零系数的竖直坐标的后缀信息,确定所述最后一个非零系数的竖直坐标;根据所述最后一个非零系数的水平坐标和所述最后一个非零系数的竖直坐标,确定所述当前块的最后一个非零系数的坐标信息。
- 根据权利要求1所述的方法,其中,所述方法还包括:当所述分量标识信息指示所述当前片的分量使用最后一个非零系数位置翻转时,确定所述当前块的最后一个非零系数的坐标信息为所述最后一个非零系数的位置相对于所述当前块的右下角位置之间的水平距离和竖直距离;相应地,所述对所述最后一个非零系数的坐标信息进行计算,得到所述当前块的最后一个非零系数的位置,包括:确定所述当前块的宽度和高度;根据所述当前块的宽度与所述最后一个非零系数的位置相对于所述当前块的右下角位置之间的水平距离进行减法计算,得到所述最后一个非零系数的水平坐标;以及根据所述当前块的高度与所述最后一个非零系数的位置相对于所述当前块的右下角位置之间的竖直距离进行减法计算,得到所述最后一个非零系数的竖直坐标;根据所述最后一个非零系数的水平坐标和所述最后一个非零系数的竖直坐标,确定所述当前块的最 后一个非零系数的位置。
- 根据权利要求1所述的方法,其中,所述方法还包括:当所述分量标识信息指示所述当前片的分量不使用最后一个非零系数位置翻转时,确定所述当前块的最后一个非零系数的坐标信息为所述最后一个非零系数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离;根据所述最后一个非零系数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离,确定所述当前块的最后一个非零系数的位置。
- 根据权利要求3至6任一项所述的方法,其中,当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,所述方法还包括:解析所述码流,确定所述当前块的最后一个系数使能标识信息;当所述最后一个系数使能标识信息指示所述当前块使用最后一个系数位置时,按照预设扫描顺序对所述最后一个系数位置之前的所有系数进行解码,确定所述当前块的系数。
- 根据权利要求18所述的方法,其中,所述方法还包括:若所述最后一个系数使能标识信息的取值为第一值,则确定所述最后一个系数使能标识信息指示所述当前块使用所述最后一个系数位置;或者,若所述最后一个系数使能标识信息的取值为第二值,则确定所述最后一个系数使能标识信息指示所述当前块不使用所述最后一个系数位置。
- 根据权利要求19所述的方法,其中,当所述最后一个系数使能标识信息的取值为第二值时,所述方法还包括:解析所述码流,获取所述当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;根据所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息,确定所述最后一个非零系数的位置;按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行解码,确定所述当前块的系数。
- 根据权利要求18所述的方法,其中,所述最后一个系数位置是所述当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,所述最后一个系数位置是所述当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
- 根据权利要求18所述的方法,其中,所述方法还包括:将最后一个非零系数的位置设置在所述最后一个系数位置。
- 根据权利要求18所述的方法,其中,所述方法还包括:确定所述当前块在预设操作后得到变换块的宽度和高度;根据所述变换块的宽度和高度进行坐标计算,得到所述变换块的右下角坐标信息;根据所述变换块的右下角坐标信息,确定所述最后一个系数位置。
- 根据权利要求23所述的方法,其中,所述预设操作至少包括:强制置零(zero-out)操作。
- 根据权利要求23所述的方法,其中,所述方法还包括:当将最后一个非零系数的位置设置在所述最后一个系数位置时,根据所述变换块的右下角坐标信息,确定所述最后一个非零系数的位置。
- 根据权利要求3至6任一项所述的方法,其中,当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,所述方法还包括:解析所述码流,确定所述当前块的子块默认编码标识信息;当所述子块默认编码标识信息指示所述当前块内的待解码子块默认编码时,对所述待解码子块内的所有系数进行解码。
- 根据权利要求26所述的方法,其中,当所述子块默认编码标识信息指示所述当前块内的待解码子块不默认编码时,所述方法还包括:解析所述码流,确定所述待解码子块的子块编码标识信息;当所述子块编码标识信息的取值为第一值时,对所述待解码子块内的所有系数进行解码。
- 根据权利要求26所述的方法,其中,所述方法还包括:若所述子块默认编码标识信息的取值为第一值,则确定所述子块默认编码标识信息指示所述当前块 内的所述待解码子块默认编码;或者,若所述子块默认编码标识信息的取值为第二值,则确定所述子块默认编码标识信息指示所述当前块内的所述待解码子块不默认编码。
- 根据权利要求27所述的方法,其中,所述方法还包括:若所述子块编码标识信息的取值为第一值,则确定对所述待解码子块内的所有系数进行解码;或者,若所述子块编码标识信息的取值为第二值,则确定所述待解码子块内的所有系数均为零。
- 根据权利要求4、5、7、8、19、28和29中任一项所述的方法,其中,所述第一值为1,所述第二值为0。
- 一种编码方法,应用于编码器,所述方法包括:确定当前片的分量标识信息,以及确定所述当前片的分量对应的当前块的最后一个非零系数的位置;根据所述分量标识信息以及所述最后一个非零系数的位置,确定所述当前块的最后一个非零系数的坐标信息;按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、所述分量标识信息以及所述最后一个非零系数的坐标信息写入码流。
- 根据权利要求31所述的方法,其中,在所述确定当前片的分量标识信息之前,所述方法还包括:确定第一语法元素标识信息;当所述第一语法元素标识信息指示当前序列允许使用最后一个非零系数位置翻转时,执行所述确定当前片的分量标识信息的步骤;其中,所述当前序列包括所述当前片。
- 根据权利要求32所述的方法,其中,在所述确定第一语法元素标识信息之前,所述方法还包括:确定第二语法元素标识信息;当所述第二语法元素标识信息指示所述当前序列使用标准扩展版本时,确定第三语法元素标识信息;当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,执行所述确定第一语法元素标识信息的步骤。
- 根据权利要求33所述的方法,其中,所述确定第二语法元素标识信息,包括:若所述当前序列使用标准扩展版本,则确定所述第二语法元素标识信息的取值为第一值;或者,若所述当前序列不使用标准扩展版本,则确定所述第二语法元素标识信息的取值为第二值。
- 根据权利要求34所述的方法,其中,所述方法还包括:将所述第二语法元素标识信息写入所述码流。
- 根据权利要求33所述的方法,其中,所述确定第三语法元素标识信息,包括:若所述当前序列使用范围扩展,则确定所述第三语法元素标识信息的取值为第一值;或者,若所述当前序列不使用范围扩展,则确定所述第三语法元素标识信息的取值为第二值。
- 根据权利要求36所述的方法,其中,所述方法还包括:将所述第三语法元素标识信息写入所述码流。
- 根据权利要求36所述的方法,其中,所述当前序列使用范围扩展,包括:所述当前序列满足下述至少之一:高位宽、高质量、高码率、高帧率和无损压缩。
- 根据权利要求32所述的方法,其中,所述确定第一语法元素标识信息,包括:若所述当前序列允许使用最后一个非零系数位置翻转,则确定所述第一语法元素标识信息的取值为第一值;或者,若所述当前序列不允许使用最后一个非零系数位置翻转,则确定所述第一语法元素标识信息的取值为第二值。
- 根据权利要求39所述的方法,其中,所述方法还包括:将所述第一语法元素标识信息写入所述码流。
- 根据权利要求31所述的方法,其中,所述确定当前片的分量标识信息,包括:若所述当前片的分量使用最后一个非零系数位置翻转,则确定所述分量标识信息的取值为第一值;或者,若所述当前片的分量不使用最后一个非零系数位置翻转,则确定所述分量标识信息的取值为第二值。
- 根据权利要求31所述的方法,其中,所述分量包括下述至少之一:第一图像分量、第二图像分量和第三图像分量;其中,所述第一图像分量为亮度分量,所述第二图像分量为第一色度分量,所述第二图像分量为第二色度分量;或者,所述第一图像分量为红色分量,所述第二图像分量为绿色分量,所述第三图像分量为蓝色分量。
- 根据权利要求42所述的方法,其中,当所述分量包括第一图像分量、第二图像分量和第三图像分量时,所述方法还包括:若所述当前片的第一图像分量、第二图像分量和第三图像分量全部共用一个分量标识信息,则确定所述当前片的分量标识信息的个数为1个;或者,若所述当前片的第一图像分量、第二图像分量和第三图像分量中的其中两个图像分量共用一个分量标识信息,则确定所述当前片的分量标识信息的个数为2个;或者,若所述当前片的第一图像分量、第二图像分量和第三图像分量各自使用一个分量标识信息,则确定所述当前片的分量标识信息的个数为3个。
- 根据权利要求42所述的方法,其中,所述确定当前片的分量标识信息,包括:确定所述当前片的第一分量标识信息;相应地,所述方法还包括:若所述当前片的所述第一图像分量、所述第二图像分量和所述第三图像分量均使用最后一个非零系数位置翻转,则确定所述第一分量标识信息的取值为第一值。
- 根据权利要求42所述的方法,其中,所述确定当前片的分量标识信息,包括:确定所述当前片的第二分量标识信息和第三分量标识信息;相应地,所述方法还包括:若所述当前片的所述第一图像分量、所述第二图像分量和所述第三图像分量的其中两个图像分量均使用最后一个非零系数位置翻转,则确定所述第二分量标识信息的取值为第一值;若所述当前片的除所述其中两个图像分量之外的剩余图像分量使用最后一个非零系数位置翻转,则确定所述第三分量标识信息的取值为第一值。
- 根据权利要求42所述的方法,其中,所述确定当前片的分量标识信息,包括:确定所述当前片的第四分量标识信息、第五分量标识信息和第六分量标识信息;相应地,所述方法还包括:若所述当前片的所述第一图像分量使用最后一个非零系数位置翻转,则确定所述第四分量标识信息的取值为第一值;若所述当前片的所述第二图像分量使用最后一个非零系数位置翻转,则确定所述第五分量标识信息的取值为第一值;若所述当前片的所述第三图像分量使用最后一个非零系数位置翻转,则确定所述第六分量标识信息的取值为第一值。
- 根据权利要求41所述的方法,其中,所述最后一个非零系数的位置包括所述最后一个非零系数的初始水平坐标和初始竖直坐标,所述初始水平坐标和所述初始竖直坐标为所述最后一个非零系数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离;相应地,所述根据所述分量标识信息以及所述最后一个非零系数的位置,确定所述当前块的最后一个非零系数的坐标信息,包括:若所述分量标识信息的取值为第一值,则根据所述最后一个非零系数的初始水平坐标和初始竖直坐标进行计算,确定所述最后一个非零系数的坐标信息;或者,若所述分量标识信息的取值为第二值,则根据所述最后一个非零系数的初始水平坐标和初始竖直坐标直接确定所述最后一个非零系数的坐标信息。
- 根据权利要求47所述的方法,其中,所述根据所述最后一个非零系数的初始水平坐标和初始竖直坐标进行计算,确定所述最后一个非零系数的坐标信息,包括:确定所述当前块的宽度和高度;根据所述当前块的宽度与所述最后一个非零系数的初始水平坐标进行减法计算,得到所述最后一个非零系数的水平坐标;以及根据所述当前块的高度与所述最后一个非零系数的初始竖直坐标进行减法计算,得到所述最后一个非零系数的竖直坐标;根据所述最后一个非零系数的水平坐标和所述最后一个非零系数的竖直坐标,确定所述最后一个非零系数的坐标信息。
- 根据权利要求47所述的方法,其中,所述方法还包括:若所述分量标识信息的取值为第一值,则确定所述最后一个非零系数的坐标信息为所述最后一个非零系数的位置相对于所述当前块的右下角位置之间的水平距离和竖直距离;或者,若所述分量标识信息的取值为第二值,则所述最后一个非零系数的坐标信息为所述最后一个非零系 数的位置相对于所述当前块的左上角位置之间的水平距离和竖直距离。
- 根据权利要求31所述的方法,其中,将所述最后一个非零系数的坐标信息写入码流,包括:根据所述最后一个非零系数的坐标信息,确定所述当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;将所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息写入码流。
- 根据权利要求33至38任一项所述的方法,其中,当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,所述方法还包括:确定所述当前块的最后一个系数使能标识信息;当所述最后一个系数使能标识信息指示所述当前块使用最后一个系数位置时,按照预设扫描顺序对所述最后一个系数位置之前的所有系数进行编码,并将编码后得到的比特信息以及所述最后一个系数使能标识信息写入码流。
- 根据权利要求51所述的方法,其中,所述确定所述当前块的最后一个系数使能标识信息,包括:若所述当前块使用所述最后一个系数位置,则确定所述最后一个系数使能标识信息的取值为第一值;或者,若所述当前块不使用所述最后一个系数位置,则确定所述最后一个系数使能标识信息的取值为第二值。
- 根据权利要求51所述的方法,其中,所述最后一个系数位置是所述当前块中所有可能不为零的系数所组成的矩阵的右下角位置;或者,所述最后一个系数位置是所述当前块根据预设扫描顺序执行扫描所有可能不为零的系数的最后位置。
- 根据权利要求51所述的方法,其中,所述方法还包括:将最后一个非零系数的位置设置在所述最后一个系数位置。
- 根据权利要求51所述的方法,其中,所述方法还包括:确定所述当前块在预设操作后得到变换块的宽度和高度;根据所述变换块的宽度和高度进行坐标计算,得到所述变换块的右下角坐标信息;根据所述变换块的右下角坐标信息,确定所述最后一个系数位置。
- 根据权利要求55所述的方法,其中,所述预设操作至少包括:强制置零(zero-out)操作。
- 根据权利要求55所述的方法,其中,所述方法还包括:当将最后一个非零系数的位置设置在所述最后一个系数位置时,根据所述变换块的右下角坐标信息,确定所述最后一个非零系数的位置。
- 根据权利要求51所述的方法,其中,当所述最后一个系数使能标识信息指示所述当前块不使用所述最后一个系数位置时,所述方法还包括:确定所述当前块的最后一个非零系数的水平坐标的前缀信息、最后一个非零系数的竖直坐标的前缀信息、最后一个非零系数的水平坐标的后缀信息和最后一个非零系数的竖直坐标的后缀信息;根据所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息,确定所述最后一个非零系数的位置;按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行编码,并将所述最后一个非零系数的水平坐标的前缀信息、所述最后一个非零系数的竖直坐标的前缀信息、所述最后一个非零系数的水平坐标的后缀信息和所述最后一个非零系数的竖直坐标的后缀信息写入码流。
- 根据权利要求31至58任一项所述的方法,其中,当所述第三语法元素标识信息指示所述当前序列使用范围扩展时,所述方法还包括:确定所述当前块内的待编码子块的子块默认编码标识信息;当所述子块默认编码标识信息指示所述待编码子块默认编码时,对所述待编码子块内的所有系数进行编码,并将编码后得到的比特信息以及所述子块默认编码标识信息写入码流。
- 根据权利要求59所述的方法,其中,所述方法还包括:当所述子块默认编码标识信息指示所述待编码子块不默认编码时,确定所述待编码子块的子块编码标识信息,并将所述子块编码标识信息写入码流。
- 根据权利要求59所述的方法,其中,所述确定待编码子块的子块默认编码标识信息,包括:若所述待编码子块默认编码,则确定所述子块默认编码标识信息的取值为第一值;或者,若所述待编码子块不默认编码,则确定所述子块默认编码标识信息的取值为第二值。
- 根据权利要求60所述的方法,其中,所述确定所述待编码子块的子块编码标识信息,包括:若所述子块内需进行编码,则确定所述子块编码标识信息的取值为第一值;或者,若所述子块内的所有系数均为零,则确定所述子块编码标识信息的取值为第二值。
- 根据权利要求34、36、39、41、52、61和62中任一项所述的方法,其中,所述第一值为1,所述第二值为0。
- 一种码流,其中,所述码流是根据待编码信息进行比特编码生成的,所述待编码信息包括下述至少之一:第一语法元素标识信息、第二语法元素标识信息、第三语法元素标识信息、分量标识信息、最后一个系数使能标识信息和子块默认编码标识信息;其中,所述第一语法元素标识信息用于指示当前序列是否允许使用最后一个非零系数位置翻转,所述第二语法元素标识信息用于指示当前序列是否使用标准扩展版本,所述第三语法元素标识信息用于指示当前序列是否使用范围扩展,所述分量标识信息用于指示当前片的分量是否使用最后一个非零系数位置翻转,所述最后一个系数使能标识信息用于指示当前块是否使用最后一个系数位置,所述子块默认编码标识信息用于指示当前块内的待编码子块是否默认编码;其中,所述当前序列包括所述当前片,所述当前片包括所述当前块。
- 一种编码器,所述编码器包括第一确定单元和编码单元;其中,所述第一确定单元,配置为确定当前片的分量标识信息,以及确定所述当前片的分量对应的当前块的最后一个非零系数的位置;所述第一确定单元,还配置为根据所述分量标识信息以及所述最后一个非零系数的位置,确定所述当前块的最后一个非零系数的坐标信息;所述编码单元,配置为按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行编码,并将编码后得到的比特信息、所述分量标识信息以及所述最后一个非零系数的坐标信息写入码流。
- 一种编码器,所述编码器包括第一存储器和第一处理器;其中,所述第一存储器,用于存储能够在所述第一处理器上运行的计算机程序;所述第一处理器,用于在运行所述计算机程序时,执行如权利要求31至63任一项所述的方法。
- 一种解码器,所述解码器包括解析单元和第二确定单元;其中,所述解析单元,配置为解析码流,确定当前片的分量标识信息,以及确定所述当前片的分量对应的当前块的最后一个非零系数的坐标信息;所述第二确定单元,配置为当所述分量标识信息指示所述当前片的分量使用最后一个非零系数位置翻转时,对所述最后一个非零系数的坐标信息进行计算,得到所述当前块的最后一个非零系数的位置;所述解析单元,还配置为按照预设扫描顺序对所述最后一个非零系数的位置之前的所有系数进行解码,确定所述当前块的系数。
- 一种解码器,所述解码器包括第二存储器和第二处理器;其中,所述第二存储器,用于存储能够在所述第二处理器上运行的计算机程序;所述第二处理器,用于在运行所述计算机程序时,执行如权利要求1至30任一项所述的方法。
- 一种计算机存储介质,其中,所述计算机存储介质存储有计算机程序,所述计算机程序被执行时实现如权利要求1至30任一项所述的方法、或者实现如权利要求31至63任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/103250 WO2023272517A1 (zh) | 2021-06-29 | 2021-06-29 | 编解码方法、码流、编码器、解码器及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117581540A true CN117581540A (zh) | 2024-02-20 |
Family
ID=84689860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180099798.8A Pending CN117581540A (zh) | 2021-06-29 | 2021-06-29 | 编解码方法、码流、编码器、解码器及计算机存储介质 |
Country Status (9)
Country | Link |
---|---|
US (1) | US20240089466A1 (zh) |
EP (1) | EP4395319A1 (zh) |
JP (1) | JP2024523793A (zh) |
KR (1) | KR20240027581A (zh) |
CN (1) | CN117581540A (zh) |
AU (1) | AU2021454442A1 (zh) |
MX (1) | MX2023014685A (zh) |
TW (1) | TW202301873A (zh) |
WO (1) | WO2023272517A1 (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102752592B (zh) * | 2012-06-20 | 2015-02-11 | 深圳广晟信源技术有限公司 | 视频变换系数的熵编码方法 |
US9215464B2 (en) * | 2013-09-19 | 2015-12-15 | Blackberry Limited | Coding position data for the last non-zero transform coefficient in a coefficient group |
CN107211146A (zh) * | 2014-11-21 | 2017-09-26 | Vid拓展公司 | 一维变换模式和系数扫描顺序 |
KR20180040515A (ko) * | 2015-09-10 | 2018-04-20 | 삼성전자주식회사 | 부호화 장치, 복호화 장치, 그 부호화 및 복호화 방법 |
KR20220134632A (ko) * | 2020-02-27 | 2022-10-05 | 엘지전자 주식회사 | 영상 디코딩 방법 및 그 장치 |
CN112543338B (zh) * | 2020-10-16 | 2022-03-04 | 腾讯科技(深圳)有限公司 | 视频解码方法、装置、计算机可读介质及电子设备 |
US11895310B2 (en) * | 2021-07-02 | 2024-02-06 | Sharp Kabushiki Kaisha | Systems and methods for signaling operation range profile information in video coding |
-
2021
- 2021-06-29 WO PCT/CN2021/103250 patent/WO2023272517A1/zh active Application Filing
- 2021-06-29 JP JP2023572244A patent/JP2024523793A/ja active Pending
- 2021-06-29 KR KR1020237040066A patent/KR20240027581A/ko active Search and Examination
- 2021-06-29 CN CN202180099798.8A patent/CN117581540A/zh active Pending
- 2021-06-29 AU AU2021454442A patent/AU2021454442A1/en active Pending
- 2021-06-29 MX MX2023014685A patent/MX2023014685A/es unknown
- 2021-06-29 EP EP21947474.9A patent/EP4395319A1/en active Pending
-
2022
- 2022-06-23 TW TW111123498A patent/TW202301873A/zh unknown
-
2023
- 2023-11-20 US US18/513,932 patent/US20240089466A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4395319A1 (en) | 2024-07-03 |
US20240089466A1 (en) | 2024-03-14 |
MX2023014685A (es) | 2024-01-12 |
JP2024523793A (ja) | 2024-07-02 |
TW202301873A (zh) | 2023-01-01 |
KR20240027581A (ko) | 2024-03-04 |
AU2021454442A1 (en) | 2023-12-21 |
WO2023272517A1 (zh) | 2023-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108028932B (zh) | 用于视频译码的调色板预测初始化及合并 | |
EP3146722B1 (en) | Maximum palette parameters in palette-based video coding | |
US9648330B2 (en) | Inter-color component residual prediction | |
US9648332B2 (en) | Adaptive inter-color component residual prediction | |
CN107277539B (zh) | 减少用于上下文自适应熵解码中的行缓存的方法及装置 | |
KR101958536B1 (ko) | 팔레트-기반 비디오 코딩에서 런들을 코딩 | |
CN113115047B (zh) | 视频编解码方法和设备 | |
CA2933395C (en) | Data encoding and decoding | |
US20160234494A1 (en) | Restriction on palette block size in video coding | |
KR20170007462A (ko) | 팔레트-기반 비디오 코딩에서의 탈출 샘플 코딩 | |
JP2015524216A (ja) | 映像コーディングにおけるロスレスコーディングモード及びパルスコード変調(pcm)モードのシグナリングの統一 | |
WO2012138032A1 (ko) | 영상 정보 부호화 방법 및 복호화 방법 | |
US20240129512A1 (en) | Encoding and decoding method, encoder, decoder, and storage medium | |
WO2021218890A1 (en) | Method and apparatus for imposing bitstream constraints in video coding | |
CN117581540A (zh) | 编解码方法、码流、编码器、解码器及计算机存储介质 | |
CN117319687A (zh) | 系数编解码方法、编码器、解码器以及计算机存储介质 | |
WO2022217417A1 (zh) | 编解码方法、编码器、解码器以及存储介质 | |
WO2022193394A1 (zh) | 系数的编解码方法、编码器、解码器及计算机存储介质 | |
CN116998149A (zh) | 系数的编解码方法、编码器、解码器及计算机存储介质 | |
JP2022548685A (ja) | 画像データの符号化及び復号化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |