KR20230093068A - 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치 - Google Patents

4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치 Download PDF

Info

Publication number
KR20230093068A
KR20230093068A KR1020237019947A KR20237019947A KR20230093068A KR 20230093068 A KR20230093068 A KR 20230093068A KR 1020237019947 A KR1020237019947 A KR 1020237019947A KR 20237019947 A KR20237019947 A KR 20237019947A KR 20230093068 A KR20230093068 A KR 20230093068A
Authority
KR
South Korea
Prior art keywords
flag
intra
coding
video
act
Prior art date
Application number
KR1020237019947A
Other languages
English (en)
Inventor
샤오위 슈
이-원 천
중-촨 마
훙-정 주
샹린 왕
빙 위
Original Assignee
베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드 filed Critical 베이징 다지아 인터넷 인포메이션 테크놀로지 컴퍼니 리미티드
Publication of KR20230093068A publication Critical patent/KR20230093068A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods 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 pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • H04N19/619Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding the transform being operated outside the prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

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

Abstract

전자 장치는 비디오 데이터를 코딩하는 방법을 수행한다. 방법은: 비트스트림으로부터, 코딩 유닛에 대응하는 비디오 데이터를 수신하는 단계 - 코딩 유닛은 인트라-예측 모드(intra-prediction mode) 또는 인터-예측 모드(inter-prediction mode)에 의해 코딩됨 -; 비디오 데이터로부터 제1 신택스 엘리먼트를 수신하는 단계 - 제1 신택스 엘리먼트는 코딩 유닛이 적응적 컬러-공간 변환(ACT)을 이용하여 코딩되었는지 여부를 지시함 -; 코딩 유닛의 잔차들을 생성하기 위하여 비디오 데이터를 프로세싱하는 단계; 코딩 유닛이 ACT를 이용하여 코딩되었다는 제1 신택스 엘리먼트에 기초한 결정에 따라, 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정하는 클립핑 동작을 수행하는 단계; 및 클립핑 동작 후에 역 ACT를 코딩 유닛의 잔차들에 적용하는 단계를 포함한다.

Description

4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치{METHODS AND APPARATUS OF VIDEO CODING IN 4:4:4 CHROMA FORMAT}
본 출원은 2020년 1월 5일자로 출원된 "METHODS AND APPARATUS ON 4:4:4 VIDEO CODING"라는 명칭의 미국 특허 가출원 제62/957,273호 및 2020년 1월 25일자로 출원된 "METHODS AND APPARATUS ON 4:4:4 VIDEO CODING"라는 명칭의 미국 특허 가출원 제62/965,859호에 대한 우선권을 주장하고, 이 가출원들 모두는 그 전체가 참조로 포함된다.
본 출원은 일반적으로, 비디오 데이터 코딩 및 압축에 관한 것으로, 특히, 적응적 컬러-공간 변환(adaptive color-space transform)(ACT) 전에 클립핑 동작(clipping operation)을 수행하는 방법 및 시스템에 관한 것이다.
디지털 비디오는 디지털 텔레비전들, 랩톱 또는 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 디지털 카메라들, 디지털 레코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 스마트 폰들, 비디오 원격회의 디바이스들, 비디오 스트리밍 디바이스들 등과 같은 다양한 전자 디바이스들에 의해 지원된다. 전자 디바이스들은 MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, 파트(Part) 10, 진보된 비디오 코딩(Advanced Video Coding)(AVC), 고효율 비디오 코딩(High Efficiency Video Coding)(HEVC), 및 다용도 비디오 코딩(Versatile Video Coding)(VVC) 표준에 의해 정의된 바와 같은 비디오 압축/압축해제 표준들을 구현함으로써 디지털 비디오 데이터를 송신하고, 수신하고, 인코딩하고, 디코딩하고, 및/또는 저장한다. 비디오 압축은 전형적으로, 비디오 데이터에서 내재된 중복성을 감소시키거나 제거하기 위하여 공간적(인트라 프레임(intra frame)) 예측 및/또는 시간적(인터 프레임(inter frame)) 예측을 수행하는 것을 포함한다. 블록-기반 비디오 코딩을 위하여, 비디오 프레임은 하나 이상의 슬라이스(slice)들로 파티셔닝(partition)되고, 각각의 슬라이스는 코딩 트리 유닛(coding tree unit)(CTU)들로서 또한 지칭될 수 있는 다수의 비디오 블록들을 가진다. 각각의 CTU는 하나의 코딩 유닛(coding unit)(CU)을 포함할 수 있거나, 미리 정의된 최소 CU 크기에 도달할 때까지 더 작은 CU들로 재귀적으로 분할될 수 있다. 각각의 CU(또한, 리프 CU(leaf CU)로 명명됨)는 하나 또는 다수의 변환 유닛(transform unit)(TU)들을 포함하고, 각각의 CU는 또한, 하나 또는 다수의 예측 유닛(prediction unit)(PU)들을 포함한다. 각각의 CU는 인트라, 인터, 또는 인트라 블록 복사(Intra block copy)(IBC) 모드들의 어느 하나에서 코딩될 수 있다. 비디오 프레임의 인트라 코딩된(intra coded) (I) 슬라이스에서의 비디오 블록들은 동일한 비디오 프레임 내에서의 이웃하는 블록들에서의 참조 샘플들에 대한 공간적 예측을 이용하여 인코딩된다. 비디오 프레임의 인터 코딩된 (P(순방향 예측된 픽처들) 또는 B(양방향으로 예측된 픽처들)) 슬라이스에서의 비디오 블록들은 동일한 비디오 프레임 내에서의 이웃하는 블록들에서의 참조 샘플들에 대한 공간적 예측, 또는 다른 이전의 및/또는 미래의 참조 비디오 프레임들에서의 참조 샘플들에 대한 시간적 예측을 이용할 수 있다.
이전에 인코딩되었던 참조 블록, 예컨대, 이웃하는 블록에 기초한 공간적 또는 시간적 예측은 코딩되어야 할 현재의 비디오 블록에 대한 예측 블록으로 귀착된다. 참조 블록을 구하는 프로세스는 블록 정합 알고리즘(block matching algorithm)에 의해 완수될 수 있다. 코딩되어야 할 현재의 블록과 예측 블록 사이의 픽셀 차이들을 표현하는 잔차 데이터(residual data)는 잔차 블록 또는 예측 오차들로서 지칭된다. 인터-코딩된 블록은 예측 블록을 형성하는 참조 프레임에서의 참조 블록을 가리키는 모션 벡터(motion vector) 및 잔차 블록에 따라 인코딩된다. 모션 벡터를 결정하는 프로세스는 전형적으로, 모션 추정(motion estimation)으로서 지칭된다. 인트라 코딩된 블록은 인트라 예측 모드 및 잔차 블록에 따라 인코딩된다. 추가의 압축을 위하여, 잔차 블록은 픽셀 도메인으로부터 변환 도메인, 예컨대, 주파수 도메인으로 변환되어, 그 다음으로, 양자화될 수 있는 잔차 변환 계수들로 귀착된다. 2-차원 어레이로 초기에 배열되는 양자화된 변환 계수들은 변환 계수들의 1-차원 벡터를 생성하도록 스캐닝(scan)될 수 있고, 그 다음으로, 훨씬 더 많은 압축을 달성하기 위하여 비디오 비트스트림으로 엔트로피 인코딩(entropy encode)될 수 있다.
인코딩된 비디오 비트스트림은 그 다음으로, 디지털 비디오 능력을 갖는 또 다른 전자 디바이스에 의해 액세스되거나 유선 또는 무선으로 전자 디바이스로 직접적으로 송신되도록 하기 위하여 컴퓨터-판독가능 저장 매체(예컨대, 플래시 메모리) 내에 저장된다. 전자 디바이스는 그 다음으로, 비트스트림으로부터 신택스 엘리먼트(syntax element)들을 획득하기 위하여 인코딩된 비디오 비트스트림을 예컨대, 파싱(parsing)함으로써 그리고 비트스트림으로부터 획득된 신택스 엘리먼트들에 적어도 부분적으로 기초하여 디지털 비디오 데이터를 인코딩된 비디오 비트스트림으로부터 그 원래의 포맷으로 재구성함으로써 (위에서 설명된 비디오 압축과 반대 프로세스인) 비디오 압축해제를 수행하고, 전자 디바이스의 디스플레이 상에서 재구성된 디지털 비디오 데이터를 렌더링한다.
디지털 비디오 품질이 고해상도로부터 4Kx2K 또는 심지어 8Kx4K로 됨으로써, 인코딩/디코딩되어야 할 비디오 데이터의 양은 지수함수적으로 늘어난다. 그것은 디코딩된 비디오 데이터의 이미지 품질을 유지하면서, 비디오 데이터가 어떻게 더 효율적으로 인코딩/디코딩될 수 있는지의 측면에서 끊임없는 도전이다.
어떤 비디오 컨텐츠, 예컨대, 스크린 컨텐츠 비디오들은 모든 3 개의 컴포넌트들(루마 컴포넌트(luma component) 및 2 개의 크로마 컴포넌트(chroma component)들)이 동일한 해상도를 가지는 4:4:4 크로마 포맷으로 인코딩된다. 4:4:4 크로마 포맷은 (양호한 압축 효율을 달성하는 것에 비친화적인) 4:2:0 크로마 포맷 및 4:2:2 크로마 포맷에서의 것과 비교하여 더 많은 중복성들을 포함하지만, 4:4:4 크로마 포맷은 디코딩된 비디오에서 예리한 에지들과 같은 컬러 정보를 보존하기 위하여 높은 충실도(fidelity)가 요구되는 많은 애플리케이션들을 위한 여전히 바람직한 인코딩 포맷이다. 4:4:4 크로마 포맷 비디오에서 존재하는 중복성들이 주어지면, 4:4:4 비디오의 3 개의 컬러 컴포넌트들(예컨대, YCbCr 도메인에서의 Y, Cb, 및 Cr; 또는 RGB 도메인에서의 G, B, 및 R) 사이의 상관(correlation)들을 활용함으로써 상당한 코딩 개선이 달성될 수 있다는 증거들이 있다. 이 상관들로 인해, HEVC 스크린 컨텐츠 코딩(screen content coding)(SCC) 확장의 개발 동안에, 적응적 컬러-공간 변환(ACT) 툴(tool)은 3 개의 컬러 컴포넌트들 사이의 상관을 활용하기 위하여 채용된다.
본 출원은 비디오 데이터 인코딩 및 디코딩, 더 상세하게는, 적응적 컬러-공간 변환(ACT) 전에 클립핑 동작을 수행하는 방법 및 시스템에 관련된 구현예들을 설명한다.
4:4:4 컬러 포맷으로 원래 캡처되는 비디오 신호에 대하여, 높은 충실도가 디코딩된 비디오 신호에 대하여 희망되고 원래의 컬러 공간, 예컨대, RGB 비디오들에서 풍부한 정보 중복성이 있을 경우에, 원래의 공간에서 비디오를 인코딩하는 것이 바람직하다. 현재의 VVC 표준에서의 일부 인터-컴포넌트 코딩 툴들, 예컨대, 교차-컴포넌트 선형 모델 예측(cross-component linear model prediction)(CCLM)은 4:4:4 비디오 코딩의 효율을 개선시킬 수 있지만, 3 개의 컴포넌트들 사이의 중복성은 완전히 제거되지 않는다. 이것은 오직 Y/G 컴포넌트가 Cb/B 및 Cr/R 컴포넌트들을 예측하기 위하여 사용되는 반면, Cb/B와 Cr/R 컴포넌트들 사이의 상관은 고려되지 않기 때문이다. 대응하게도, 3 개의 컬러 컴포넌트들의 추가의 역-상관(de-correlation)은 4:4:4 비디오 코딩을 위한 코딩 성능을 개선시킬 수 있다.
현재의 VVC 표준에서, 현존하는 인터 및 인트라 툴들의 설계들은 4:2:0 크로마 포맷에서 캡처되는 비디오들에 대해 주로 초점이 맞추어져 있다. 그러므로, 더 양호한 복잡도/성능 절충을 달성하기 위하여, 그 코딩 툴들의 대부분은 루마 컴포넌트에 오직 적용가능하지만, 크로마 컴포넌트들에 대하여 디스에이블되거나(예컨대, 포지션-종속적 인트라 예측 조합(position-dependent intra prediction combination)(PDPC), 멀티-참조 라인(multi-reference line)(MRL), 및 서브-파티션 예측(sub-partition prediction)(ISP)), 루마 및 크로마 컴포넌트들에 대한 상이한 동작들(예컨대, 모션 보상된 예측에 적용되는 보간 필터(interpolation filter)들)을 이용할 수 있다. 그러나, 4:2:0 비디오들과 비교하여, 4:4:4 크로마 포맷에서의 비디오 신호는 매우 상이한 특성들을 표현한다. 예를 들어, 4:4:4 YCbCr 및 RGB 비디오들의 Cb/B 및 Cr/R 컴포넌트들은 더 풍부한 컬러 정보를 표현하고, 4:2:0 비디오들에서의 크로마 컴포넌트들보다 더 많은 고-주파수 정보(예컨대, 에지(edge)들 및 텍스처(texture)들)를 보유한다. 이러한 고려사항으로, 4:2:0 및 4:4:4 비디오들의 둘 모두에 대한 VVC에서 일부 현존하는 코딩 툴들의 동일한 설계를 이용하는 것이 항상 최적일 수 있다.
본 출원의 제1 양태에 따르면, 비디오 데이터를 디코딩하는 방법은: 비트스트림으로부터, 코딩 유닛에 대응하는 비디오 데이터를 수신하는 단계 - 코딩 유닛은 인트라-예측 모드(intra-prediction mode) 또는 인터-예측 모드(inter-prediction mode)에 의해 코딩됨 -; 비디오 데이터로부터 제1 신택스 엘리먼트를 수신하는 단계 - 제1 신택스 엘리먼트는 코딩 유닛이 적응적 컬러-공간 변환(ACT)을 이용하여 코딩되었는지 여부를 지시함 -; 코딩 유닛의 잔차들을 생성하기 위하여 비디오 데이터를 프로세싱하는 단계 - 코딩 유닛이 ACT를 이용하여 코딩되었다는 제1 신택스 엘리먼트에 기초한 결정에 따라, 코딩 유닛의 잔차들에 대한 클립핑 동작을 수행하는 단계; 및 클립핑 동작 후에 코딩 유닛의 잔차들에 역 ACT를 적용하는 단계를 포함한다.
일부 실시예들에서, 클립핑 동작은 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정한다.
본 출원의 제2 양태에 따르면, 전자 장치는 하나 이상의 프로세싱 유닛들, 메모리, 및 메모리 내에 저장된 복수의 프로그램을 포함한다. 프로그램들은, 하나 이상의 프로세싱 유닛들에 의해 실행될 때, 전자 장치로 하여금, 위에서 설명된 바와 같이 비디오 데이터를 디코딩하는 방법을 수행하게 한다.
본 출원의 제3 양태에 따르면, 비-일시적 컴퓨터 판독가능 저장 매체는 하나 이상의 프로세싱 유닛들을 가지는 전자 장치에 의한 실행을 위한 복수의 프로그램을 저장한다. 프로그램들은, 하나 이상의 프로세싱 유닛들에 의해 실행될 때, 전자 장치로 하여금, 위에서 설명된 바와 같이 비디오 데이터를 디코딩하는 방법을 수행하게 한다.
구현예들의 추가의 이해를 제공하기 위하여 포함되고 본 명세서에서 통합되는 명세서의 일부를 구성하는 동반 도면들은 설명된 구현예들을 예시하고, 설명과 함께, 기초적인 원리들을 설명하도록 작용한다. 유사한 참조 번호들은 대응하는 부분들을 지칭한다.
도 1은 본 개시내용의 일부 구현예들에 따라, 예시적인 비디오 인코딩 및 디코딩 시스템을 예시하는 블록도이다.
도 2는 본 개시내용의 일부 구현예들에 따라, 예시적인 비디오 인코더를 예시하는 블록도이다.
도 3은 본 개시내용의 일부 구현예들에 따라, 예시적인 비디오 디코더를 예시하는 블록도이다.
도 4a 내지 도 4e는 본 개시내용의 일부 구현예들에 따라, 프레임이 상이한 크기들 및 형상들의 다수의 비디오 블록들로 어떻게 재귀적으로 파티셔닝되는지를 예시하는 블록도들이다.
도 5a 및 도 5b는 본 개시내용의 일부 구현예들에 따라, RGB 컬러 공간과 YCgCo 컬러 공간 사이의 잔차들을 변환하기 위하여 적응적 컬러-공간 변환(ACT)의 기법을 적용하는 예들을 예시하는 블록도들이다.
도 6은 본 개시내용의 일부 구현예들에 따라, 예시적인 비디오 데이터 디코딩 프로세스에서 크로마 스케일링을 갖는 루마 맵핑(luma mapping with chroma scaling)(LMCS)의 기법을 적용하는 블록도이다.
도 7은 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 적응적 컬러-공간 변환(ACT)의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스를 예시하는 블록도이다.
도 8a 및 도 8b는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 적응적 컬러-공간 변환(ACT) 및 크로마 스케일링을 갖는 루마 맵핑(LMCS)의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스들을 예시하는 블록도들이다.
도 9는 본 개시내용의 일부 구현예들에 따라, 적응적 컬러-공간 변환(ACT) 및 블록 차동 펄스 코딩된 변조(block differential pulse coded modulation)(BDPCM)를 수행하는 것 사이의 예시적인 디코딩 로직들을 예시하는 블록도이다.
도 10은 본 개시내용의 일부 구현예들에 따라, 루마 및 크로마 내부 비트-심도(bit-depth)들이 상이할 때, 상이한 컴포넌트들에 대한 상이한 양자화 파라미터(quantization parameter)(QP) 오프셋들을 적용하는 디코딩 플로우차트이다.
도 11a 및 도 11b는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정하기 위하여 클립핑의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스들을 예시하는 블록도들이다.
도 12는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정하기 위하여 클립핑 동작을 수행함으로써 비디오 데이터를 디코딩하게 하는 예시적인 프로세스를 예시하는 플로우차트이다.
그 예들이 동반 도면들에서 예시되는 예시적인 구현예들에 대해 지금부터 참조가 상세하게 행해질 것이다. 다음의 상세한 설명에서는, 수많은 비-제한적인 특정 세부사항들이 본 명세서에서 제시된 발명 요지를 이해하는 것을 보조하기 위하여 기재된다. 그러나, 다양한 대안들은 청구항들의 범위로부터 이탈하지 않으면서 이용될 수 있고, 발명 요지는 이 특정 세부사항들 없이 실시될 수 있다는 것이 본 기술분야에서의 통상의 기술자에게 분명할 것이다. 예를 들어, 본 명세서에서 제시된 발명 요지는 디지털 비디오 능력들을 갖는 많은 유형들의 전자 디바이스들 상에서 구현될 수 있다는 것이 본 기술분야에서의 통상의 기술자에게 분명할 것이다.
일부 실시예들에서, 방법들은 4:4:4 비디오들에 대한 VVC 표준의 코딩 효율을 개선시키기 위하여 제공된다. 일반적으로, 이 개시내용에서의 기술들의 많은 특징들은 다음과 같이 요약된다.
일부 실시예들에서, 방법들은 잔차 도메인에서 적응적 컬러 공간 변환을 가능하게 하는 현존하는 ACT 설계를 개선시키기 위하여 구현된다. 특히, VVC에서 일부 현존하는 코딩 툴들과의 ACT의 상호작용을 처리하기 위하여 특수한 고려사항들이 행해진다.
일부 실시예들에서, 1) 크로마 컴포넌트들에 대하여 8-탭 보간 필터들을 인에이블하는 것; 2) 크로마 컴포넌트들의 인트라 예측을 위하여 PDPC를 인에이블하는 것; 3) 크로마 컴포넌트들의 인트라 예측을 위하여 MRL을 인에이블하는 것; 4) 크로마 컴포넌트들에 대한 ISP 파티셔닝을 인에이블하는 것을 포함하는 방법들은 4:4:4 비디오들에 대한 VVC 표준에서의 일부 현존하는 인터 및 인트라 코딩 툴들의 효율을 개선시키기 위하여 구현된다.
도 1은 본 개시내용의 일부 구현예들에 따라, 비디오 블록들을 병렬로 인코딩하고 디코딩하기 위한 예시적인 시스템(10)을 예시하는 블록도이다. 도 1에서 도시된 바와 같이, 시스템(10)은 목적지 디바이스(destination device)(14)에 의해 더 이후의 시간에 디코딩되어야 할 비디오 데이터를 생성하고 인코딩하는 출발지 디바이스(source device)(12)를 포함한다. 출발지 디바이스(12) 및 목적지 디바이스(14)는, 데스크톱 또는 랩톱 컴퓨터들, 태블릿 컴퓨터들, 스마트 폰들, 셋톱 박스들, 디지털 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 비디오 스트리밍 디바이스 등을 포함하는 광범위한 전자 디바이스들 중의 임의의 것을 포함할 수 있다. 일부 구현예들에서, 출발지 디바이스(12) 및 목적지 디바이스(14)는 무선 통신 능력들을 구비한다.
일부 구현예들에서, 목적지 디바이스(14)는 링크(16)를 통해 디코딩되어야 할 인코딩된 비디오 데이터를 수신할 수 있다. 링크(16)는 인코딩된 비디오 데이터를 출발지 디바이스(12)로부터 목적지 디바이스(14)로 이동시킬 수 있는 임의의 유형의 통신 매체 또는 디바이스를 포함할 수 있다. 하나의 예에서, 링크(16)는 출발지 디바이스(12)가 인코딩된 비디오 데이터를 실시간으로 목적지 디바이스(14)로 직접 송신하는 것을 가능하게 하기 위한 통신 매체를 포함할 수 있다. 인코딩된 비디오 데이터는 무선 통신 프로토콜과 같은 통신 표준에 따라 변조될 수 있고, 목적지 디바이스(14)로 송신될 수 있다. 통신 매체는 라디오 주파수(radio frequency)(RF) 스펙트럼 또는 하나 이상의 물리적 송신 라인들과 같은 임의의 무선 또는 유선 통신 매체를 포함할 수 있다. 통신 매체는 로컬 영역 네트워크, 광역 네트워크, 또는 인터넷과 같은 글로벌 네트워크와 같은 패킷-기반 네트워크의 일부를 형성할 수 있다. 통신 매체는 출발지 디바이스(12)로부터 목적지 디바이스(14)로의 통신을 용이하게 하기 위하여 유용할 수 있는 라우터들, 스위치들, 기지국들, 또는 임의의 다른 장비를 포함할 수 있다.
일부 다른 구현예들에서, 인코딩된 비디오 데이터는 출력 인터페이스(22)로부터 저장 디바이스(32)로 송신될 수 있다. 추후에, 저장 디바이스(32)에서의 인코딩된 비디오 데이터는 입력 인터페이스(28)를 통해 목적지 디바이스(14)에 의해 액세스될 수 있다. 저장 디바이스(32)는 인코딩된 비디오 데이터를 저장하기 위한 하드 드라이브, 블루-레이(Blu-ray) 디스크들, DVD들, CD-ROM들, 플래시 메모리, 휘발성 또는 비-휘발성 메모리, 또는 임의의 다른 적당한 디지털 저장 매체들과 같은 다양한 분산되거나 로컬 방식으로 액세스된 데이터 저장 매체들 중의 임의의 것을 포함할 수 있다. 추가의 예에서, 저장 디바이스(32)는 출발지 디바이스(12)에 의해 생성된 인코딩된 비디오 데이터를 유지할 수 있는 파일 서버 또는 또 다른 중간 저장 디바이스에 대응할 수 있다. 목적지 디바이스(14)는 스트리밍 또는 다운로딩을 통해 저장 디바이스(32)로부터 저장된 비디오 데이터를 액세스할 수 있다. 파일 서버는 인코딩된 비디오 데이터를 저장할 수 있고 인코딩된 비디오 데이터를 목적지 디바이스(14)로 송신할 수 있는 임의의 유형의 컴퓨터일 수 있다. 예시적인 파일 서버들은 (예컨대, 웹사이트를 위한) 웹 서버, FTP 서버, 네트워크 연결형 스토리지(network attached storage)(NAS) 디바이스들, 또는 로컬 디스크 드라이브를 포함한다. 목적지 디바이스(14)는 무선 채널(예컨대, Wi-Fi 접속), 유선 접속(예컨대, DSL, 케이블 모뎀 등), 또는 파일 서버 상에서 저장된 인코딩된 비디오 데이터를 액세스하기 위하여 적당한 둘 모두의 조합을 포함하는 임의의 표준 데이터 접속을 통해 인코딩된 비디오 데이터를 액세스할 수 있다. 저장 디바이스(32)로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신, 또는 둘 모두의 조합일 수 있다.
도 1에서 도시된 바와 같이, 출발지 디바이스(12)는 비디오 소스(18), 비디오 인코더(20), 및 출력 인터페이스(22)를 포함한다. 비디오 소스(18)는 비디오 캡처 디바이스, 예컨대, 비디오 카메라, 이전에 캡처된 비디오를 포함하는 비디오 아카이브(video archive), 비디오 컨텐츠 제공자로부터 비디오를 수신하기 위한 비디오 공급 인터페이스, 및/또는 소스 비디오로서 컴퓨터 그래픽 데이터를 생성하기 위한 컴퓨터 그래픽 시스템과 같은 소스, 또는 이러한 소스들의 조합을 포함할 수 있다. 하나의 예로서, 비디오 소스(18)가 보안 감시 시스템의 비디오 카메라일 경우에, 출발지 디바이스(12) 및 목적지 디바이스(14)는 카메라 폰들 또는 비디오 폰들을 형성할 수 있다. 그러나, 본 출원에서 설명된 구현예들은 일반적으로 비디오 코딩에 적용가능할 수 있고, 무선 및/또는 유선 애플리케이션들에 적용될 수 있다.
캡처된(captured), 프리-캡처된(pre-captured), 또는 컴퓨터-생성된 비디오는 비디오 인코더(20)에 의해 인코딩될 수 있다. 인코딩된 비디오 데이터는 출발지 디바이스(12)의 출력 인터페이스(22)를 통해 목적지 디바이스(14)로 직접적으로 송신될 수 있다. 인코딩된 비디오 데이터는 또한(또는 대안적으로), 디코딩 및/또는 재생을 위하여, 목적지 디바이스(14) 또는 다른 디바이스들에 의한 더 이후의 액세스를 위해 저장 디바이스(32) 상으로 저장될 수 있다. 출력 인터페이스(22)는 모뎀 및/또는 송신기를 더 포함할 수 있다.
목적지 디바이스(14)는 입력 인터페이스(28), 비디오 디코더(30), 및 디스플레이 디바이스(34)를 포함한다. 입력 인터페이스(28)는 수신기 및/또는 모뎀을 포함할 수 있고, 링크(16) 상에서 인코딩된 비디오 데이터를 수신할 수 있다. 링크(16) 상에서 통신되거나 저장 디바이스(32) 상에서 제공된 인코딩된 비디오 데이터는 비디오 데이터를 디코딩할 시에 비디오 디코더(30)에 의한 이용을 위하여 비디오 인코더(20)에 의해 생성된 다양한 신택스 엘리먼트들을 포함할 수 있다. 이러한 신택스 엘리먼트들은, 통신 매체 상에서 송신되거나, 저장 매체 상에서 저장되거나, 파일 서버에 저장된 인코딩된 비디오 데이터 내에 포함될 수 있다.
일부 구현예들에서, 목적지 디바이스(14)는, 통합된 디스플레이 디바이스, 및 목적지 디바이스(14)와 통신하도록 구성되는 외부 디스플레이 디바이스일 수 있는 디스플레이 디바이스(34)를 포함할 수 있다. 디스플레이 디바이스(34)는 디코딩된 비디오 데이터를 사용자에게 디스플레이하고, 액정 디스플레이(liquid crystal display)(LCD), 플라즈마 디스플레이, 유기 발광 다이오드(organic light emitting diode)(OLED) 디스플레이, 또는 또 다른 유형의 디스플레이 디바이스와 같은 다양한 디스플레이 디바이스들 중의 임의의 것을 포함할 수 있다.
비디오 인코더(20) 및 비디오 디코더(30)는 VVC, HEVC, MPEG-4 파트 10, 진보된 비디오 코딩(Advanced Video Coding)(AVC), 또는 이러한 표준들의 확장들과 같은 독점적 또는 산업 표준들에 따라 동작할 수 있다. 본 출원은 특정 비디오 코딩/디코딩 표준으로 제한되지 않고, 다른 비디오 코딩/디코딩 표준들에 적용가능할 수 있다는 것이 이해되어야 한다. 출발지 디바이스(12)의 비디오 인코더(20)는 이 현재 또는 미래의 표준들 중의 임의의 것에 따라 비디오 데이터를 인코딩하도록 구성될 수 있다는 것이 일반적으로 고려된다. 유사하게, 목적지 디바이스(14)의 비디오 디코더(30)는 이 현재 또는 미래의 표준들 중의 임의의 것에 따라 비디오 데이터를 디코딩하도록 구성될 수 있다는 것이 또한 일반적으로 고려된다.
비디오 인코더(20) 및 비디오 디코더(30)는 각각, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서(digital signal processor)(DSP)들, 애플리케이션 특정 집적 회로(application specific integrated circuit)(ASIC)들, 필드 프로그래밍가능 게이트 어레이(field programmable gate array)(FPGA)들, 개별 로직, 소프트웨어, 하드웨어, 펌웨어, 또는 그 임의의 조합들과 같은 다양한 적당한 인코더 회로부 중의 임의이 것으로서 구현될 수 있다. 소프트웨어로 부분적으로 구현될 때, 전자 디바이스는 소프트웨어를 위한 명령들을 적당한 비-일시적 컴퓨터-판독가능 매체 내에 저장할 수 있고, 본 개시내용에서 개시된 비디오 코딩/디코딩 동작들을 수행하기 위하여 하나 이상의 프로세서들을 이용하여 명령들을 하드웨어로 실행할 수 있다. 비디오 인코더(20) 및 비디오 디코더(30)의 각각은 하나 이상의 인코더들 또는 디코더들 내에 포함될 수 있고, 인코더들 또는 디코더들 중의 어느 하나는 개개의 디바이스에서의 조합된 인코더/디코더(encoder/decoder)(CODEC)의 일부로서 통합될 수 있다.
도 2는 본 출원에서 설명된 일부 구현예들에 따라, 예시적인 비디오 인코더(20)를 예시하는 블록도이다. 비디오 인코더(20)는 비디오 프레임들 내의 비디오 블록들의 인트라 및 인터 예측 코딩을 수행할 수 있다. 인트라 예측 코딩은 주어진 비디오 프레임 또는 픽처 내에서의 비디오 데이터에 있어서의 공간적 중복성을 감소시키거나 제거하기 위하여 공간적 예측에 의존한다. 인터 예측 코딩은 비디오 시퀀스의 인접한 비디오 프레임들 또는 픽처들 내에서의 비디오 데이터에 있어서의 시간적 중복성을 감소시키거나 제거하기 위하여 시간적 예측에 의존한다.
도 2에서 도시된 바와 같이, 비디오 인코더(20)는 비디오 데이터 메모리(40), 예측 프로세싱 유닛(41), 디코딩된 픽처 버퍼(decoded picture buffer)(DPB)(64), 합산기(50), 변환 프로세싱 유닛(52), 양자화 유닛(54), 및 엔트로피 인코딩 유닛(56)을 포함한다. 예측 프로세싱 유닛(41)은 모션 추정 유닛(42), 모션 보상 유닛(44), 파티션 유닛(45), 인트라 예측 프로세싱 유닛(46), 및 인트라 블록 복사(block copy)(BC) 유닛(48)을 더 포함한다. 일부 구현예들에서, 비디오 인코더(20)는 또한, 역 양자화 유닛(58), 역 변환 프로세싱 유닛(60), 및 비디오 블록 재구성을 위한 합산기(62)를 포함한다. 디블록킹 필터(deblocking filter)(도시되지 않음)는 블록 경계들을 필터링하여 재구성된 비디오로부터 블록화 아티팩트(blockiness artifact)들을 제거하기 위하여 합산기(62)와 DPB(64) 사이에서 위치결정될 수 있다. 인 루프 필터(in loop filter)(도시되지 않음)는 또한, 합산기(62)의 출력을 필터링하기 위하여 디블록킹 필터에 추가적으로 이용될 수 있다. 비디오 인코더(20)는 고정된 또는 프로그래밍가능한 하드웨어 유닛의 형태를 취할 수 있거나, 예시된 고정된 또는 프로그래밍가능한 하드웨어 유닛들 중의 하나 이상 사이에서 분할될 수 있다.
비디오 데이터 메모리(40)는 비디오 인코더(20)의 컴포넌트들에 의해 인코딩되어야 할 비디오 데이터를 저장할 수 있다. 비디오 데이터 메모리(40)에서의 비디오 데이터는 예를 들어, 비디오 소스(18)로부터 획득될 수 있다. DPB(64)는 (예컨대, 인트라 또는 인터 예측 코딩 모드들에서) 비디오 인코더(20)에 의해 비디오 데이터를 인코딩할 시의 이용을 위한 참조 비디오 데이터를 저장하는 버퍼이다. 비디오 데이터 메모리(40) 및 DPB(64)는 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수 있다. 다양한 예들에서, 비디오 데이터 메모리(40)는 비디오 인코더(20)의 다른 컴포넌트들과 온-칩(on-chip)일 수 있거나, 그 컴포넌트들에 대하여 오프-칩(off-chip)일 수 있다.
도 2에서 도시된 바와 같이, 비디오 데이터를 수신한 후에, 예측 프로세싱 유닛(41) 내에서의 파티션 유닛(45)은 비디오 데이터를 비디오 블록들로 파티셔닝한다. 이 파티셔닝은 또한, 비디오 데이터와 연관된 쿼드-트리 구조(quad-tree structure)와 같은 미리 정의된 분할 구조들에 따라, 비디오 프레임을 슬라이스들, 타일들, 또는 다른 더 큰 코딩 유닛(CU)들로 파티셔닝하는 것을 포함할 수 있다. 비디오 프레임은 다수의 비디오 블록들(또는 타일들로서 지칭된 비디오 블록들의 세트들)로 분할될 수 있다. 예측 프로세싱 유닛(41)은 오차 결과들(예컨대, 코딩 레이트 및 왜곡의 레벨)에 기초하여 현재의 비디오 블록에 대하여, 복수의 인트라 예측 코딩 모드 중의 하나 또는 복수의 인터 예측 코딩 모드 중의 하나와 같은, 복수의 가능한 예측 코딩 모드 중의 하나를 선택할 수 있다. 예측 프로세싱 유닛(41)은 결과적인 인트라 또는 인터 예측 코딩된 블록을, 잔차 블록을 생성하기 위하여 합산기(50)에, 그리고 추후에 참조 프레임의 일부로서의 이용을 위한 인코딩된 블록을 재구성하기 위하여 합산기(62)에 제공할 수 있다. 예측 프로세싱 유닛(41)은 또한, 모션 벡터들, 인트라-모드 지시자들, 파티션 정보, 및 다른 이러한 신택스 정보와 같은 신택스 엘리먼트들을 엔트로피 인코딩 유닛(56)에 제공한다.
현재의 비디오 블록에 대하여 적절한 인트라 예측 코딩 모드를 선택하기 위하여, 예측 프로세싱 유닛(41) 내에서의 인트라 예측 프로세싱 유닛(46)은 공간적 예측을 제공하기 위하여, 코딩되어야 할 현재의 블록과 동일한 프레임에서의 하나 이상의 이웃하는 블록들에 대한 현재의 비디오 블록의 인트라 예측 코딩을 수행할 수 있다. 예측 프로세싱 유닛(41) 내에서의 모션 추정 유닛(42) 및 모션 보상 유닛(44)은 시간적 예측을 제공하기 위하여 하나 이상의 참조 프레임들에서의 하나 이상의 예측 블록들에 대한 현재의 비디오 블록의 인터 예측 코딩을 수행한다. 비디오 인코더(20)는 예컨대, 비디오 데이터의 각각의 블록에 대한 적절한 코딩 모드를 선택하기 위하여, 다수의 코딩 패스(coding pass)들을 수행할 수 있다.
일부 구현예들에서, 모션 추정 유닛(42)은 비디오 프레임들의 시퀀스 내에서의 미리 결정된 패턴에 따라, 참조 비디오 프레임 내에서의 예측 블록에 대한 현재의 비디오 프레임 내에서의 비디오 블록의 예측 유닛(prediction unit)(PU)의 변위를 지시하는 모션 벡터를 생성함으로써 현재의 비디오 프레임에 대한 인터 예측 모드를 결정한다. 모션 추정 유닛(42)에 의해 수행된 모션 추정은 비디오 블록들에 대한 모션을 추정하는 모션 벡터들을 생성하는 프로세스이다. 예를 들어, 모션 벡터는 현재의 프레임(또는 다른 코딩된 유닛) 내에서 코딩되고 있는 현재의 블록에 대한 참조 프레임(또는 다른 코딩된 유닛) 내에서의 예측 블록에 대한 현재의 비디오 프레임 또는 픽처 내에서의 비디오 블록의 PU의 변위를 지시할 수 있다. 미리 결정된 패턴은 시퀀스에서의 비디오 프레임들을 P 프레임들 또는 B 프레임들로서 지정할 수 있다. 인트라 BC 유닛(48)은 인터 예측을 위한 모션 추정 유닛(42)에 의한 모션 벡터들의 결정과 유사한 방식으로 인트라 BC 코딩을 위한 벡터들, 예컨대, 블록 벡터들을 결정할 수 있거나, 블록 벡터를 결정하기 위하여 모션 추정 유닛(42)을 사용할 수 있다.
예측 블록은, 절대차의 합(sum of absolute difference)(SAD), 제곱차의 합(sum of square difference)(SAD), 또는 다른 차이 메트릭들에 의해 결정될 수 있는 픽셀 차이의 측면에서, 코딩되어야 할 비디오 블록의 PU와 근접하게 정합하는 것으로서 간주되는 참조 프레임의 블록이다. 일부 구현예들에서, 비디오 인코더(20)는 DPB(64) 내에 저장된 참조 프레임들의 정수-미만(sub-integer) 픽셀 포지션들에 대한 값들을 계산할 수 있다. 예를 들어, 비디오 인코더(20)는 참조 프레임의 1/4 픽셀 포지션들, 1/8 픽셀 포지션들, 또는 다른 분수 픽셀 포지션들의 값들을 보간할 수 있다. 그러므로, 모션 추정 유닛(42)은 전체 픽셀 포지션들 및 분수 픽셀 포지션들에 대한 모션 탐색을 수행할 수 있고, 분수 픽셀 정밀도를 갖는 모션 벡터를 출력할 수 있다.
모션 추정 유닛(42)은 PU의 포지션을, 각각이 DPB(64) 내에 저장된 하나 이상의 참조 프레임들을 식별하는 제1 참조 프레임 리스트(List 0) 또는 제2 참조 프레임 리스트(List 1)로부터 선택된 참조 프레임의 예측 블록의 포지션과 비교함으로써, 인터 예측 코딩된 프레임에서의 비디오 블록의 PU에 대한 모션 벡터를 계산한다. 모션 추정 유닛(42)은 계산된 모션 벡터를 모션 보상 유닛(44)으로, 그리고 그 다음으로, 엔트로피 인코딩 유닛(56)으로 전송한다.
모션 보상 유닛(44)에 의해 수행된 모션 보상은 모션 추정 유닛(42)에 의해 결정된 모션 벡터에 기초하여 예측 블록을 페치(fetch)하거나 생성하는 것을 수반할 수 있다. 현재의 비디오 블록의 PU에 대한 모션 벡터를 수신할 시에, 모션 보상 유닛(44)은 모션 벡터가 참조 프레임 리스트들 중의 하나에서 가리키는 예측 블록을 위치시킬 수 있고, DPB(64)로부터 예측 블록을 취출(retrieve)할 수 있고, 예측 블록을 합산기(50)로 포워딩할 수 있다. 합산기(50)는 그 다음으로, 코딩되고 있는 현재의 비디오 블록의 픽셀 값들로부터 모션 보상 유닛(44)에 의해 제공된 예측 블록의 픽셀 값들을 감산함으로써 픽셀 차이 값들의 잔차 비디오 블록을 형성한다. 잔차 비디오 블록을 형성하는 픽셀 차이 값들은 루마 또는 크로마 차이 컴포넌트들 또는 둘 모두를 포함할 수 있다. 모션 보상 유닛(44)은 또한, 비디오 프레임의 비디오 블록들을 디코딩할 시에 비디오 디코더(30)에 의한 이용을 위한 비디오 프레임의 비디오 블록들과 연관된 신택스 엘리먼트들을 생성할 수 있다. 신택스 엘리먼트들은 예를 들어, 예측 블록을 설명하기 위하여 이용된 모션 벡터를 정의하는 신택스 엘리먼트들, 예측 모드를 지시하는 임의의 플래그들, 또는 본 명세서에서 설명된 임의의 다른 신택스 정보를 포함할 수 있다. 모션 추정 유닛(42) 및 모션 보상 유닛(44)은 고도로 통합될 수 있지만, 개념적인 목적들을 위하여 별도로 예시된다는 것에 주목한다.
일부 구현예들에서, 인트라 BC 유닛(48)은 모션 추정 유닛(42) 및 모션 보상 유닛(44)과 관련하여 위에서 설명된 것과 유사한 방식으로 벡터들을 생성할 수 있고 예측 블록들을 페치할 수 있지만, 예측 블록들은 코딩되고 있는 현재의 블록과 동일한 프레임 내에 있고 벡터들은 모션 벡터들과 반대인 블록 벡터들로서 지칭된다. 특히, 인트라 BC 유닛(48)은 현재의 블록을 인코딩하기 위하여 이용하기 위한 인트라-예측 모드를 결정할 수 있다. 일부 예들에서, 인트라 BC 유닛(48)은 예컨대, 별도의 인코딩 패스들 동안에 다양한 인트라-예측 모드들을 이용하여 현재의 블록을 인코딩할 수 있고, 레이트-왜곡 분석을 통해 그 성능을 테스팅할 수 있다. 다음으로, 인트라 BC 유닛(48)은 다양한 테스팅된 인트라-예측 모드들 중에서, 인트라-모드 지시자를 이에 따라 이용하고 생성하기 위한 적절한 인트라-예측 모드를 선택할 수 있다. 예를 들어, 인트라 BC 유닛(48)은 다양한 테스팅된 인트라-예측 모드들에 대한 레이트-왜곡 분석을 이용하여 레이트-왜곡 값을 계산할 수 있고, 테스팅된 모드들 중에서 최상의 레이트-왜곡 특성들을 가지는 인트라-예측 모드를 이용하기 위한 적절한 인트라-예측 모드로서 선택할 수 있다. 레이트-왜곡 분석은 일반적으로, 인코딩된 블록과, 인코딩된 블록을 생성하기 위하여 인코딩되었던 원래의 비인코딩된 블록과의 사이의 왜곡(또는 오차)의 양뿐만 아니라, 인코딩된 블록을 생성하기 위하여 이용된 비트레이트(즉, 비트들의 수)를 결정한다. 인트라 BC 유닛(48)은 어느 인트라-예측 모드가 블록에 대한 최상의 레이트-왜곡 값을 나타내는지를 결정하기 위하여 다양한 인코딩된 블록들에 대한 왜곡들 및 레이트들로부터 비율들을 계산할 수 있다.
다른 예들에서, 인트라 BC 유닛(48)은 본 명세서에서 설명된 구현예들에 따라 인트라 BC 예측을 위한 이러한 기능들을 수행하기 위하여 모션 추정 유닛(42) 및 모션 보상 유닛(44)을 전체적으로 또는 부분적으로 이용할 수 있다. 어느 하나의 경우에, 인트라 블록 복사를 위하여, 예측 블록은 절대차의 합(SAD), 제곱차의 합(SSD), 또는 다른 차이 메트릭들에 의해 결정될 수 있는 픽셀 차이의 측면에서, 코딩되어야 할 블록과 근접하게 정합하는 것으로서 간주되는 블록일 수 있고, 예측 블록의 식별은 정수-미만 픽셀 포지션들에 대한 값들의 계산을 포함할 수 있다.
예측 블록이 인트라 예측에 따라 동일한 프레임으로부터, 또는 인터 예측에 따라 상이한 프레임으로부터의 것인지 관계없이, 비디오 인코더(20)는 코딩되고 있는 현재의 비디오 블록의 픽셀 값들로부터 예측 블록의 픽셀 값들을 감산하여 픽셀 차이 값들을 형성함으로써 잔차 비디오 블록을 형성할 수 있다. 잔차 비디오 블록을 형성하는 픽셀 차이 값들은 루마 및 크로마 컴포넌트 차이들의 둘 모두를 포함할 수 있다.
인트라 예측 프로세싱 유닛(46)은 위에서 설명된 바와 같이, 모션 추정 유닛(42) 및 모션 보상 유닛(44)에 의해 수행된 인터-예측, 또는 인트라 BC 유닛(48)에 의해 수행된 인트라 블록 복사 예측에 대한 대안으로서, 현재의 비디오 블록을 인트라-예측할 수 있다. 특히, 인트라 예측 프로세싱 유닛(46)은 현재의 블록을 인코딩하기 위하여 이용하기 위한 인트라-예측 모드를 결정할 수 있다. 그렇게 행하기 위하여, 인트라 예측 프로세싱 유닛(46)은 예컨대, 별도의 인코딩 패스들 동안에 다양한 인트라 예측 모드들을 이용하여 현재의 블록을 인코딩할 수 있고, 인트라 예측 프로세싱 유닛(46)(또는 일부 예들에서, 모드 선택 유닛)은 테스팅된 인트라 예측 모드들로부터 이용하기 위한 적절한 인트라 예측 모드를 선택할 수 있다. 인트라 예측 프로세싱 유닛(46)은 블록에 대한 선택된 인트라-예측 모드를 지시하는 정보를 엔트로피 인코딩 유닛(56)에 제공할 수 있다. 엔트로피 인코딩 유닛(56)은 비트스트림에서 선택된 인트라-예측 모드를 지시하는 정보를 인코딩할 수 있다.
예측 프로세싱 유닛(41)이 인터 예측 또는 인트라 예측의 어느 하나를 통해 현재의 비디오 블록에 대한 예측 블록을 결정한 후에, 합산기(50)는 현재의 비디오 블록으로부터 예측 블록을 감산함으로써 잔차 비디오 블록을 형성한다. 잔차 블록에서의 잔차 비디오 데이터는 하나 이상의 변환 유닛(TU)들 내에 포함될 수 있고, 변환 프로세싱 유닛(52)에 제공된다. 변환 프로세싱 유닛(52)은 이산 코사인 변환(discrete cosine transform)(DCT) 또는 개념적으로 유사한 변환과 같은 변환을 이용하여 잔차 비디오 데이터를 잔차 변환 계수들로 변환한다.
변환 프로세싱 유닛(52)은 결과적인 변환 계수들을 양자화 유닛(54)으로 전송할 수 있다. 양자화 유닛(54)은 비트 레이트를 추가로 감소시키기 위하여 변환 계수들을 양자화한다. 양자화 프로세스는 또한, 계수들의 일부 또는 전부와 연관된 비트 심도를 감소시킬 수 있다. 양자화도(degree of quantization)는 양자화 파라미터를 조절함으로써 수정될 수 있다. 일부 예들에서, 양자화 유닛(54)은 그 다음으로, 양자화된 변환 계수들을 포함하는 행렬의 스캔(scan)을 수행할 수 있다. 대안적으로, 엔트로피 인코딩 유닛(56)은 스캔을 수행할 수 있다.
양자화에 후속하여, 엔트로피 인코딩 유닛(56)은 예컨대, 컨텍스트 적응적 가변 길이 코딩(context adaptive variable length coding)(CAVLC), 컨텍스트 적응적 2진 산술 코딩(context adaptive binary arithmetic coding)(CABAC), 신택스-기반 컨텍스트-적응적 2진 산술 코딩(syntax-based context-adaptive binary arithmetic coding)(SBAC), 확률 간격 파티셔닝 엔트로피(probability interval partitioning entropy)(PIPE) 코딩, 또는 또 다른 엔트로피 인코딩 방법론 또는 기법을 이용하여 양자화된 변환 계수들을 비디오 비트스트림으로 엔트로피 인코딩한다. 인코딩된 비트스트림은 그 다음으로, 비디오 디코더(30)로 송신될 수 있거나, 비디오 디코더(30)로의 더 이후의 송신 또는 비디오 디코더(30)에 의한 취출을 위하여 저장 디바이스(32) 내에 아카이빙( archive)될 수 있다. 엔트로피 인코딩 유닛(56)은 또한, 코딩되고 있는 현재의 비디오 프레임에 대한 모션 벡터들 및 다른 신택스 엘리먼트들을 엔트로피 인코딩할 수 있다.
역 양자화 유닛(58) 및 역 변환 프로세싱 유닛(60)은 다른 비디오 블록들의 예측을 위한 참조 블록을 생성하기 위해 픽셀 도메인에서 잔차 비디오 블록을 재구성하기 위하여, 역 양자화 및 역 변환을 각각 적용한다. 위에서 주목된 바와 같이, 모션 보상 유닛(44)은 DPB(64) 내에 저장된 프레임들의 하나 이상의 참조 블록들로부터 모션 보상된 예측 블록을 생성할 수 있다. 모션 보상 유닛(44)은 또한, 모션 추정 시의 이용을 위한 정수-미만 픽셀 값들을 계산하기 위하여 하나 이상의 보간 필터들을 예측 블록에 적용할 수 있다.
합산기(62)는 DPB(64)에서의 저장을 위한 참조 블록을 생성하기 위하여, 재구성된 잔차 블록을 모션 보상 유닛(44)에 의해 생성된 모션 보상된 예측 블록에 가산한다. 참조 블록은 그 다음으로, 추후의 비디오 프레임에서 또 다른 비디오 블록을 인터 예측하기 위하여, 인트라 BC 유닛(48), 모션 추정 유닛(42), 및 모션 보상 유닛(44)에 의해 예측 블록으로서 이용될 수 있다.
도 3은 본 출원의 일부 구현예들에 따라, 예시적인 비디오 디코더(30)를 예시하는 블록도이다. 비디오 디코더(30)는 비디오 데이터 메모리(79), 엔트로피 디코딩 유닛(80), 예측 프로세싱 유닛(81), 역 양자화 유닛(86), 역 변환 프로세싱 유닛(88), 합산기(90), 및 DPB(92)를 포함한다. 예측 프로세싱 유닛(81)은 모션 보상 유닛(82), 인트라 예측 프로세싱 유닛(84), 및 인트라 BC 유닛(85)을 더 포함한다. 비디오 디코더(30)는 도 2와 관련하여 비디오 인코더(20)에 대하여 위에서 설명된 인코딩 프로세스와 일반적으로 상반적인 디코딩 프로세스를 수행할 수 있다. 예를 들어, 모션 보상 유닛(82)은 엔트로피 디코딩 유닛(80)으로부터 수신된 모션 벡터들에 기초하여 예측 데이터를 생성할 수 있는 반면, 인트라 예측 유닛(84)은 엔트로피 디코딩 유닛(80)으로부터 수신된 인트라-예측 모드 지시자들에 기초하여 예측 데이터를 생성할 수 있다.
일부 예들에서, 비디오 디코더(30)의 유닛은 본 출원의 구현예들을 수행하도록 작업할당될 수 있다. 또한, 일부 예들에서, 본 개시내용의 구현예들은 비디오 디코더(30)의 유닛들 중의 하나 이상 사이에서 분할될 수 있다. 예를 들어, 인트라 BC 유닛(85)은 단독으로, 또는 모션 보상 유닛(82), 인트라 예측 프로세싱 유닛(84), 및 엔트로피 디코딩 유닛(80)과 같은, 비디오 디코더(30)의 다른 유닛들과 조합하여, 본 출원의 구현예들을 수행할 수 있다. 일부 예들에서, 비디오 디코더(30)는 인트라 BC 유닛(85)을 포함하지 않을 수 있고, 인트라 BC 유닛(85)의 기능성은 모션 보상 유닛(82)과 같은, 예측 프로세싱 유닛(81)의 다른 컴포넌트들에 의해 수행될 수 있다.
비디오 데이터 메모리(79)는 비디오 디코더(30)의 다른 컴포넌트들에 의해 디코딩되어야 할 인코딩된 비디오 비트스트림과 같은 비디오 데이터를 저장할 수 있다. 비디오 데이터 메모리(79) 내에 저장된 비디오 데이터는 예를 들어, 저장 디바이스(32)로부터, 카메라와 같은 로컬 비디오 소스로부터, 비디오 데이터의 유선 또는 무선 네트워크 통신을 통해, 또는 물리적 데이터 저장 매체들(예컨대, 플래시 드라이브 또는 하드 디스크)을 액세스함으로써 획득될 수 있다. 비디오 데이터 메모리(79)는 인코딩된 비디오 비트스트림으로부터의 인코딩된 비디오 데이터를 저장하는 코딩된 픽처 버퍼(coded picture buffer)(CPB)를 포함할 수 있다. 비디오 디코더(30)의 디코딩된 픽처 버퍼(DPB)(92)는 (예컨대, 인트라 또는 인터 예측 코딩 모드들에서) 비디오 디코더(30)에 의해 비디오 데이터를 디코딩할 시의 이용을 위한 참조 비디오 데이터를 저장한다. 비디오 데이터 메모리(79) 및 DPB(92)는 동기식 DRAM(synchronous DRAM)(SDRAM)을 포함하는 동적 랜덤 액세스 메모리(dynamic random access memory)(DRAM), 자기-저항성 RAM(magneto-resistive RAM)(MRAM), 저항성 RAM(resistive RAM)(RRAM), 또는 다른 유형들의 메모리 디바이스들과 같은 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수 있다. 예시적인 목적을 위하여, 비디오 데이터 메모리(79) 및 DPB(92)는 도 3에서의 비디오 디코더(30)의 2 개의 별개의 컴포넌트들로서 도시된다. 그러나, 비디오 데이터 메모리(79) 및 DPB(92)는 동일한 메모리 디바이스 또는 별도의 메모리 디바이스들에 의해 제공될 수 있다는 것이 본 기술분야에서의 통상의 기술자에게 분명할 것이다. 일부 예들에서, 비디오 데이터 메모리(79)는 비디오 디코더(30)의 다른 컴포넌트들과 함께 온-칩(on-chip)일 수 있거나, 그 컴포넌트들에 대해 오프-칩(off-chip)일 수 있다.
디코딩 프로세스 동안에, 비디오 디코더(30)는 인코딩된 비디오 프레임의 비디오 블록들 및 연관된 신택스 엘리먼트들을 표현하는 인코딩된 비디오 비트스트림을 수신한다. 비디오 디코더(30)는 비디오 프레임 레벨 및/또는 비디오 블록 레벨에서 신택스 엘리먼트들을 수신할 수 있다. 비디오 디코더(30)의 엔트로피 디코딩 유닛(80)은 양자화된 계수들, 모션 벡터들 또는 인트라-예측 모드 지시자들, 및 다른 신택스 엘리먼트들을 생성하기 위하여 비트스트림을 엔트로피 디코딩한다. 엔트로피 디코딩 유닛(80)은 그 다음으로, 모션 벡터들 및 다른 신택스 엘리먼트들을 예측 프로세싱 유닛(81)으로 포워딩한다.
비디오 프레임이 인트라 예측 코딩된 (I) 프레임으로서 또는 다른 유형들의 프레임들에서의 인트라 코딩된 예측 블록들에 대하여 코딩될 때, 예측 프로세싱 유닛(81)의 인트라 예측 프로세싱 유닛(84)은 시그널링된 인트라 예측 모드, 및 현재의 프레임의 이전에 디코딩된 블록들로부터의 참조 데이터에 기초하여, 현재의 비디오 프레임의 비디오 블록에 대한 예측 데이터를 생성할 수 있다.
비디오 프레임이 인터-예측 코딩된(즉, B 또는 P) 프레임으로서 코딩될 때, 예측 프로세싱 유닛(81)의 모션 보상 유닛(82)은 엔트로피 디코딩 유닛(80)으로부터 수신된 모션 벡터들 및 다른 신택스 엘리먼트들에 기초하여, 현재의 비디오의 비디오 블록에 대한 하나 이상의 예측 블록들을 생성한다. 예측 블록들의 각각은 참조 프레임 리스트들 중의 하나 내의 참조 프레임으로부터 생성될 수 있다. 비디오 디코더(30)는 DPB(92) 내에 저장된 참조 프레임들에 기초한 디폴트 구성 기법들을 이용하여 참조 프레임 리스트들, List 0 및 List 1을 구성할 수 있다.
일부 예들에서, 비디오 블록이 본 명세서에서 설명된 인트라 BC 모드에 따라 코딩될 때, 예측 프로세싱 유닛(81)의 인트라 BC 유닛(85)은 블록 벡터들 및 다른 신택스 엘리먼트들에 기초하여 현재의 비디오 블록에 대한 예측 블록들을 생성한다. 예측 블록들은 비디오 인코더(20)에 의해 정의된 현재의 비디오 블록과 동일한 픽처의 재구성된 영역 내에 있을 수 있다.
모션 보상 유닛(82) 및/또는 인트라 BC 유닛(85)은 모션 벡터들 및 다른 신택스 엘리먼트들을 파싱함으로써 현재의 비디오 프레임의 비디오 블록에 대한 예측 정보를 결정하고, 그 다음으로, 디코딩되고 있는 현재의 비디오 블록에 대한 예측 블록들을 생성하기 위하여 예측 정보를 이용한다. 예를 들어, 모션 보상 유닛(82)은 비디오 프레임의 비디오 블록들을 코딩하기 위하여 이용된 예측 모드(예컨대, 인트라 또는 인터 예측), 인터 예측 프레임 유형(예컨대, B 또는 P), 프레임에 대한 참조 프레임 리스트들 중의 하나 이상에 대한 구성 정보, 프레임의 각각의 인터 예측 인코딩된 비디오 블록에 대한 모션 벡터들, 프레임의 각각의 인터 예측 코딩된 비디오 블록에 대한 인터 예측 스테이터스(status), 및 현재의 비디오 프레임에서의 비디오 블록들을 디코딩하기 위한 다른 정보를 결정하기 위하여 수신된 신택스 엘리먼트들의 일부를 이용한다.
유사하게, 인트라 BC 유닛(85)은 현재의 비디오 블록이 인트라 BC 모드를 이용하여 예측되었다는 것, 프레임의 어느 비디오 블록들이 재구성된 영역 내에 있고 DPB(92) 내에 저장되어야 하는지의 구성 정보, 프레임의 각각의 인트라 BC 예측된 비디오 블록에 대한 블록 벡터들, 프레임의 각각의 인트라 BC 예측된 비디오 블록에 대한 인트라 BC 예측 스테이터스, 및 현재의 비디오 프레임에서의 비디오 블록들을 디코딩하기 위한 다른 정보를 결정하기 위하여 수신된 신택스 엘리먼트들의 일부, 예컨대, 플래그를 이용할 수 있다.
모션 보상 유닛(82)은 또한, 참조 블록들의 정수-미만 픽셀들에 대한 보간된 값들을 계산하기 위하여, 비디오 블록들의 인코딩 동안에 비디오 인코더(20)에 의해 이용된 바와 같은 보간 필터들을 이용하여 보간을 수행할 수 있다. 이 경우에, 모션 보상 유닛(82)은 수신된 신택스 엘리먼트들로부터 비디오 인코더(20)에 의해 이용된 보간 필터들을 결정할 수 있고, 예측 블록들을 생성하기 위하여 보간 필터들을 이용할 수 있다.
역 양자화 유닛(86)은 양자화도를 결정하기 위하여, 비트스트림에서 제공되고, 비디오 프레임에서의 각각의 비디오 블록에 대하여 비디오 인코더(20)에 의해 계산된 동일한 양자화 파라미터를 이용하여 엔트로피 디코딩 유닛(80)에 의해 엔트로피 디코딩되는 양자화된 변환 계수들을 역 양자화한다. 역 변환 프로세싱 유닛(88)은 픽셀 도메인에서 잔차 블록들을 재구성하기 위하여, 역 변환, 예컨대, 역 DCT, 역 정수 변환, 또는 개념적으로 유사한 역 변환 프로세스를 변환 계수들에 적용한다.
모션 보상 유닛(92) 또는 인트라 BC 유닛(85)이 벡터들 및 다른 신택스 엘리먼트들에 기초하여 현재의 비디오 블록에 대한 예측 블록을 생성한 후에, 합산기(90)는 역 변환 프로세싱 유닛(88)으로부터의 잔차 블록과, 모션 보상 유닛(82) 및 인트라 BC 유닛(85)에 의해 생성된 대응하는 예측 블록을 합산함으로써, 현재의 비디오 블록에 대한 디코딩된 비디오 블록을 재구성한다. 인-루프 필터(in-loop filter)(도시되지 않음)는 디코딩된 비디오 블록을 추가로 프로세싱하기 위하여 합산기(90)와 DPB(92) 사이에서 위치결정될 수 있다. 주어진 프레임에서의 디코딩된 비디오 블록들은 그 다음으로, 다음 비디오 블록들의 추후의 모션 보상을 위하여 이용된 참조 프레임들을 저장하는 DPB(92) 내에 저장된다. DPB(92), 또는 DPB(92)로부터 분리된 메모리 디바이스는 또한, 도 1의 디스플레이 디바이스(34)와 같은 디스플레이 디바이스 상에서의 더 이후의 제시를 위한 디코딩된 비디오를 저장할 수 있다.
전형적인 비디오 코딩 프로세스에서, 비디오 시퀀스는 전형적으로, 프레임들 또는 픽처들의 순서화된 세트를 포함한다. 각각의 프레임은 SL, SCb, 및 SCr로 나타낸 3 개의 샘플 어레이들을 포함할 수 있다. SL은 루마 샘플(luma sample)들의 2-차원 어레이이다. SCb는 Cb 크로마 샘플(chroma sample)들의 2-차원 어레이이다. SCr은 Cr 크로마 샘플들의 2-차원 어레이이다. 다른 사례들에서, 프레임은 단색(monochrome)일 수 있고, 그러므로, 루마 샘플들의 오직 하나의 2-차원 어레이를 포함한다.
도 4a에서 도시된 바와 같이, 비디오 인코더(20)(또는 더 구체적으로, 파티션 유닛(45))는 프레임을 코딩 트리 유닛(coding tree unit)(CTU)들의 세트로 먼저 파티셔닝함으로써 프레임의 인코딩된 표현을 생성한다. 비디오 프레임은 좌측으로부터 우측으로 그리고 상부로부터 하부로 래스터 스캔 순서(raster scan order)로 연속으로 순서화된 정수 개의 CTU들을 포함할 수 있다. 각각의 CTU는 가장 큰 논리적 코딩 유닛이고, CTU의 폭 및 높이는 시퀀스 파라미터 세트(sequence parameter set)에서 비디오 인코더(20)에 의해 시그널링되어, 비디오 시퀀스에서의 모든 CTU들은 128×128, 64×64, 32×32, 및 16×16 중의 하나인 동일한 크기를 가진다. 그러나, 본 출원은 특정한 크기로 반드시 제한되지는 않는다는 것이 주목되어야 한다. 도 4b에서 도시된 바와 같이, 각각의 CTU는 루마 샘플들의 하나의 코딩 트리 블록(coding tree block)(CTB), 크로마 샘플들의 2 개의 대응하는 코딩 트리 블록들, 및 코딩 트리 블록들의 샘플들을 코딩하기 위하여 이용된 신택스 엘리먼트들을 포함할 수 있다. 신택스 엘리먼트들은 픽셀들의 코딩된 블록의 상이한 유형들의 유닛들의 성질들, 및 인터 또는 인트라 예측, 인트라 예측 모드, 모션 벡터들, 및 다른 파라미터들을 포함하여, 비디오 시퀀스가 비디오 디코더(30)에서 어떻게 재구성될 수 있는지를 설명한다. 단색 픽처들, 또는 3 개의 별도의 컬러 평면들을 가지는 픽처들에서, CTU는 단일 코딩 트리 블록, 및 코딩 트리 블록의 샘플들을 코딩하기 위하여 이용된 신택스 엘리먼트들을 포함할 수 있다. 코딩 트리 블록은 샘플들의 NxN 블록일 수 있다.
더 양호한 성능을 달성하기 위하여, 비디오 인코더(20)는 2진-트리 파티셔닝(binary-tree partitioning), 3진-트리 파티셔닝(ternary-tree partitioning), 쿼드-트리 파티셔닝(quad-tree partitioning), 또는 CTU의 코딩 트리 블록들에 대한 둘 모두의 조합과 같은 트리 파티셔닝을 재귀적으로 수행할 수 있고, CTU를 더 작은 코딩 유닛(CU)들로 분할할 수 있다. 도 4c에서 도시된 바와 같이, 64x64 CTU(400)는 4 개의 더 작은 CU로 먼저 분할되고, 각각은 32x32의 블록 크기를 가진다. 4 개의 더 작은 CU들 중에서, CU(410) 및 CU(420)는 블록 크기에 의해 16x16의 4 개의 CU들로 각각 분할된다. 2 개의 16x16 CU들(430 및 440)은 블록 크기에 의해 8x8의 4 개의 CU들로 각각 추가로 분할된다. 도 4d는 도 4c에서 도시된 바와 같은 CTU(400)의 파티션 프로세스의 종료 결과를 예시하는 쿼드-트리 데이터 구조를 도시하고, 쿼드-트리의 각각의 리프 노드(leaf node)는 32x32로부터 8x8까지의 범위인 개개의 크기의 하나의 CU에 대응한다. 도 4b에서 도시된 CTU와 같이, 각각의 CU는 동일한 크기의 프레임의 루마 샘플들의 코딩 블록(CB) 및 크로마 샘플들의 2 개의 대응하는 코딩 블록들, 및 코딩 블록들의 샘플들을 코딩하기 위하여 이용된 신택스 엘리먼트들을 포함할 수 있다. 단색 픽처들, 또는 3 개의 별도의 컬러 평면들을 가지는 픽처들에서, CU는 단일 코딩 블록, 및 코딩 블록의 샘플들을 코딩하기 위하여 이용된 신택스 구조들을 포함할 수 있다. 도 4c 및 도 4d에서 도시된 쿼드-트리 파티셔닝은 오직 예시적인 목적들을 위한 것이고, 하나의 CTU는 쿼드/3진/2진-트리 파티션들에 기초하여 변동하는 국소적 특성들에 적응시키기 위하여 CU들로 분할될 수 있다. 멀티-유형 트리 구조에서, 하나의 CTU는 쿼드-트리 구조에 의해 파티셔닝되고, 각각의 쿼드-트리 리프 CU는 2진 및 3진 트리 구조에 의해 추가로 파티셔닝될 수 있다. 도 4e에서 도시된 바와 같이, 5 개의 파티셔닝 유형들, 즉, 4진 파티셔닝(quaternary partitioning), 수직 2진 파티셔닝, 수평 3진 파티셔닝, 및 수직 3진 파티셔닝이 있다.
일부 구현예들에서, 비디오 인코더(20)는 CU의 코딩 블록을 하나 이상의 MxN 예측 블록(prediction block)(PB)들로 추가로 파티셔닝할 수 있다. 예측 블록은 동일한 예측인 인터 또는 인트라가 적용되는 샘플들의 직사각형(정사각형 또는 비-정사각형) 블록이다. CU의 예측 유닛(PU)은 루마 샘플들의 예측 블록, 크로마 샘플들의 2 개의 대응하는 예측 블록들, 및 예측 블록들을 예측하기 위하여 이용된 신택스 엘리먼트들을 포함할 수 있다. 단색 픽처들, 또는 3 개의 별도의 컬러 평면들을 가지는 픽처들에서, PU는 단일 예측 블록, 및 예측 블록을 예측하기 위하여 이용된 신택스 구조들을 포함할 수 있다. 비디오 인코더(20)는 CU의 각각의 PU의 루마, Cb, 및 Cr 예측 블록들에 대한 예측 루마, Cb, 및 Cr 블록들을 생성할 수 있다.
비디오 인코더(20)는 PU에 대한 예측 블록들을 생성하기 위하여 인트라 예측 또는 인터 예측을 이용할 수 있다. 비디오 인코더(20)가 PU의 예측 블록들을 생성하기 위하여 인트라 예측을 이용할 경우에, 비디오 인코더(20)는 PU와 연관된 프레임의 디코딩된 샘플들에 기초하여 PU의 예측 블록들을 생성할 수 있다. 비디오 인코더(20)가 PU의 예측 블록들을 생성하기 위하여 인터 예측을 이용할 경우에, 비디오 인코더(20)는 PU와 연관된 프레임 이외의 하나 이상의 프레임들의 디코딩된 샘플들에 기초하여 PU의 예측 블록들을 생성할 수 있다.
비디오 인코더(20)가 CU의 하나 이상의 PU들에 대한 예측 루마, Cb, 및 Cr 블록들을 생성한 후에, 비디오 인코더(20)는 CU의 루마 잔차 블록에서의 각각의 샘플이 CU의 예측 루마 블록들 중의 하나에서의 루마 샘플과 CU의 원래의 루마 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 지시하도록, 그 원래의 루마 코딩 블록으로부터 CU의 예측 루마 블록들을 감산함으로써 CU에 대한 루마 잔차 블록을 생성할 수 있다. 유사하게, 비디오 인코더(20)는 CU에 대한 Cb 잔차 블록 및 Cr 잔차 블록을 각각 생성할 수 있어서, CU의 Cb 잔차 블록에서의 각각의 샘플은 CU의 예측 Cb 블록들 중의 하나에서의 Cb 샘플과 CU의 원래의 Cb 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 지시하고, CU의 Cr 잔차 블록에서의 각각의 샘플은 CU의 예측 Cr 블록들 중의 하나에서의 Cr 샘플과 CU의 원래의 Cr 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 지시할 수 있다.
또한, 도 4c에서 예시된 바와 같이, 비디오 인코더(20)는 CU의 루마, Cb, 및 Cr 잔차 블록들을 하나 이상의 루마, Cb, 및 Cr 변환 블록들로 분해하기 위하여 쿼드-트리 파티셔닝을 이용할 수 있다. 변환 블록은 동일한 변환이 적용되는 샘플들의 직사각형(정사각형 또는 비-정사각형) 블록이다. CU의 변환 유닛(TU)은 루마 샘플들의 변환 블록, 크로마 샘플들의 2 개의 대응하는 변환 블록들, 및 변환 블록 샘플들을 변환하기 위하여 이용된 신택스 엘리먼트들을 포함할 수 있다. 따라서, CU의 각각의 TU는 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록과 연관될 수 있다. 일부 예들에서, TU와 연관된 루마 변환 블록은 CU의 루마 잔차 블록의 서브-블록일 수 있다. Cb 변환 블록은 CU의 Cb 잔차 블록의 서브-블록일 수 있다. Cr 변환 블록은 CU의 Cr 잔차 블록의 서브-블록일 수 있다. 단색 픽처들, 3 개의 별도의 컬러 평면들을 가지는 픽처들에서, TU는 단일 변환 블록, 및 변환 블록의 샘플들을 변환하기 위하여 이용된 신택스 구조들을 포함할 수 있다.
비디오 인코더(20)는 TU에 대한 루마 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU의 루마 변환 블록에 적용할 수 있다. 계수 블록은 변환 계수들의 2-차원 어레이일 수 있다. 변환 계수는 스칼라량(scalar quantity)일 수 있다. 비디오 인코더(20)는 TU에 대한 Cb 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU의 Cb 변환 블록에 적용할 수 있다. 비디오 인코더(20)는 TU에 대한 Cr 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU의 Cr 변환 블록에 적용할 수 있다.
계수 블록(예컨대, 루마 계수 블록, Cb 계수 블록, 또는 Cr 계수 블록)을 생성한 후에, 비디오 인코더(20)는 계수 블록을 양자화할 수 있다. 양자화는 일반적으로, 변환 계수들을 표현하기 위하여 이용된 데이터의 양을 아마도 감소시키기 위하여 변환 계수들이 양자화되어 추가의 압축을 제공하는 프로세스를 지칭한다. 비디오 인코더(20)가 계수 블록을 양자화한 후에, 비디오 인코더(20)는 양자화된 변환 계수들을 지시하는 신택스 엘리먼트들을 엔트로피 인코딩할 수 있다. 예를 들어, 비디오 인코더(20)는 양자화된 변환 계수들을 지시하는 신택스 엘리먼트들에 대해 컨텍스트-적응적 2진 산술 코딩(CABAC)을 수행할 수 있다. 최종적으로, 비디오 인코더(20)는 코딩된 프레임들 및 연관된 데이터의 표현을 형성하는 비트들의 시퀀스를 포함하는 비트스트림을 출력할 수 있고, 비트스트림은 저장 디바이스(32)에서 저장되거나 목적지 디바이스(14)로 송신된다.
비디오 인코더(20)에 의해 생성된 비트스트림을 수신한 후에, 비디오 디코더(30)는 비트스트림으로부터 신택스 엘리먼트들을 획득하기 위하여 비트스트림을 파싱할 수 있다. 비디오 디코더(30)는 비트스트림으로부터 획득된 신택스 엘리먼트들에 적어도 부분적으로 기초하여 비디오 데이터의 프레임들을 재구성할 수 있다. 비디오 데이터를 재구성하는 프로세스는 일반적으로, 비디오 인코더(20)에 의해 수행된 인코딩 프로세스와 상반적이다. 예를 들어, 비디오 디코더(30)는 현재의 CU의 TU들과 연관된 잔차 블록들을 재구성하기 위하여 현재의 CU의 TU들과 연관된 계수 블록들에 대해 역 변환들을 수행할 수 있다. 비디오 디코더(30)는 또한, 현재의 CU의 PU들에 대한 예측 블록들의 샘플들을 현재의 CU의 TU들의 변환 블록들의 대응하는 샘플들에 가산함으로써 현재의 CU의 코딩 블록들을 재구성한다. 프레임의 각각의 CU에 대한 코딩 블록들을 재구성한 후에, 비디오 디코더(30)는 프레임을 재구성할 수 있다.
위에서 주목된 바와 같이, 비디오 코딩은 주로 2 개의 모드들, 즉, 인트라-프레임 예측(또는 인트라-예측) 및 인터-프레임 예측(또는 인터-예측)을 이용하여 비디오 압축을 달성한다. 팔레트-기반 코딩(palette-based coding)은 많은 비디오 코딩 표준들에 의해 채택되었던 또 다른 코딩 방식이다. 스크린-생성된 컨텐츠 코딩(screen-generated content coding)을 위하여 특히 적당할 수 있는 팔레트-기반 코딩에서, 비디오 코더(예컨대, 비디오 인코더(20) 또는 비디오 디코더(30))는 주어진 블록의 비디오 데이터를 표현하는 컬러들의 팔레트 테이블(palette table)을 형성한다. 팔레트 테이블은 주어진 블록에서의 가장 지배적인(예컨대, 빈번하게 이용된) 픽셀 값들을 포함한다. 주어진 블록의 비디오 데이터에서 빈번하게 표현되지 않은 픽셀 값들은 팔레트 테이블 내에 포함되지 않거나, 탈출 컬러(excape color)들로서 팔레트 테이블 내에 포함된다.
팔레트 테이블에서의 각각의 엔트리(entry)는 팔레트 테이블 내에 있는 대응하는 픽셀 값에 대한 인덱스를 포함한다. 블록에서의 샘플들에 대한 팔레트 인덱스들은 팔레트 테이블로부터의 어느 엔트리가 어느 샘플을 예측하거나 재구성하기 위하여 이용되어야 하는지를 지시하기 위하여 코딩될 수 있다. 이 팔레트 모드는 비디오 블록들의 픽처, 슬라이스, 타일, 또는 다른 이러한 그룹화의 최초 블록에 대한 팔레트 예측자(palette predictor)를 생성하는 프로세스와 함께 시작한다. 이하에서 설명되는 바와 같이, 추후의 비디오 블록들에 대한 팔레트 예측자는 전형적으로, 이전에 이용된 팔레트 예측자를 업데이팅함으로써 생성된다. 예시적인 목적을 위하여, 팔레트 예측자는 픽처 레벨에서 정의되는 것으로 가정된다. 다시 말해서, 픽처는 다수의 코딩 블록들을 포함할 수 있고, 각각의 그 자신의 팔레트 테이블을 가지지만, 전체 픽처에 대하여 하나의 팔레트 예측자가 있다.
비디오 비트스트림에서 팔레트 엔트리들을 시그널링하기 위하여 필요한 비트들을 감소시키기 위하여, 비디오 디코더는 비디오 블록을 재구성하기 위하여 이용된 팔레트 테이블에서의 새로운 팔레트 엔트리들을 결정하기 위한 팔레트 예측자를 사용할 수 있다. 예를 들어, 팔레트 예측자는 이전에 이용된 팔레트 테이블로부터의 팔레트 엔트리들을 포함할 수 있거나, 또는 심지어, 가장 최근에 이용된 팔레트 테이블의 모든 엔트리들을 포함함으로써 가장 최근에 이용된 팔레트 테이블로 초기화될 수 있다. 일부 구현예들에서, 팔레트 예측자는 가장 최근에 이용된 팔레트 테이블로부터의 전부보다 더 적은 엔트리들을 포함할 수 있고, 그 다음으로, 다른 이전에 이용된 팔레트 테이블들로부터의 일부 엔트리들을 통합할 수 있다. 팔레트 예측자는 상이한 블록들을 코딩하기 위하여 이용된 팔레트 테이블들과 동일한 크기를 가질 수 있거나, 상이한 블록들을 코딩하기 위하여 이용된 팔레트 테이블들보다 클 수 있거나 작을 수 있다. 하나의 예에서, 팔레트 예측자는 64 개의 팔레트 엔트리들을 포함하는 선입선출(first-in-first-out)(FIFO) 테이블로서 구현된다.
팔레트 예측자로부터 비디오 데이터의 블록에 대한 팔레트 테이블을 생성하기 위하여, 비디오 디코더는 인코딩된 비디오 비트스트림으로부터, 팔레트 예측자의 각각의 엔트리에 대한 1-비트 플래그(one-bit flag)를 수신할 수 있다. 1-비트 플래그는 팔레트 예측자의 연관된 엔트리가 팔레트 테이블 내에 포함되어야 한다는 것을 지시하는 제1 값(예컨대, 2진수 1), 또는 팔레트 예측자의 연관된 엔트리가 팔레트 테이블 내에 포함되지 않아야 한다는 것을 지시하는 제2 값(예컨대, 2진수 제로(zero))을 가질 수 있다. 팔레트 예측자의 크기가 비디오 데이터의 블록에 대하여 이용된 팔레트 테이블보다 클 경우에, 일단 팔레트 테이블에 대한 최대 크기에 도달하면, 비디오 디코더는 더 많은 플래그들을 수신하는 것을 정지시킬 수 있다.
일부 구현예들에서, 팔레트 테이블에서의 일부 엔트리들은 팔레트 예측자를 이용하여 결정되는 대신에, 인코딩된 비디오 비트스트림에서 직접적으로 시그널링될 수 있다. 이러한 엔트리들에 대하여, 비디오 디코더는 인코딩된 비디오 비트스트림으로부터, 루마에 대한 픽셀 값들을 지시하는 3 개의 별도의 m-비트 값들, 및 엔트리와 연관된 2 개의 크로마 컴포넌트들을 수신할 수 있고, 여기서, m은 비디오 데이터의 비트 심도를 표현한다. 직접적으로 시그널링된 팔레트 엔트리들을 위하여 필요한 다수의 m-비트 값들과 비교하면, 팔레트 예측자로부터 유도된 그 팔레트 엔트리들은 1-비트 플래그를 오직 요구한다. 그러므로, 팔레트 예측자를 이용하여 일부 또는 모든 팔레트 엔트리들을 시그널링하는 것은 새로운 팔레트 테이블의 엔트리들을 시그널링하기 위하여 필요한 비트들의 수를 상당히 감소시킬 수 있고, 이에 의해, 팔레트 모드 코딩의 전체적인 코딩 효율을 개선시킬 수 있다.
많은 사례들에서, 하나의 블록에 대한 팔레트 예측자는 하나 이상의 이전에 코딩된 블록들을 코딩하기 위하여 이용된 팔레트 테이블에 기초하여 결정된다. 그러나, 픽처, 슬라이스, 또는 타일에서의 최초 코딩 트리 유닛을 코딩할 때, 이전에 코딩된 블록의 팔레트 테이블은 이용가능하지 않을 수 있다. 그러므로, 팔레트 예측자는 이전에 이용된 팔레트 테이블들의 엔트리들을 이용하여 생성될 수 없다. 이러한 경우에, 팔레트 예측자 이니셜라이저(initializer)들의 시퀀스는 시퀀스 파라미터 세트(sequence parameter set)(SPS) 및/또는 픽처 파라미터 세트(picture parameter set)(PPS)에서 시그널링될 수 있고, 팔레트 예측자 이니셜라이저들은 이전에 이용된 팔레트 테이블이 이용가능하지 않을 때에 팔레트 예측자를 생성하기 위하여 이용된 값들이다. SPS는 일반적으로, 각각의 슬라이스 세그먼트 헤더에서 발견된 신택스 엘리먼트에 의해 참조된 PPS에서 발견된 신택스 엘리먼트의 내용에 의해 결정된 바와 같은, 코딩된 비디오 시퀀스(coded video sequence)(CVS)로 칭해진 일련의 연속 코딩된 비디오 픽처들에 적용하는 신택스 엘리먼트들의 신택스 구조를 지칭한다. PPS는 일반적으로, 각각의 슬라이스 세그먼트 헤더에서 발견된 신택스 엘리먼트에 의해 결정된 바와 같은, CVS 내의 하나 이상의 개별적인 픽처들에 적용되는 신택스 엘리먼트들의 신택스 구조를 지칭한다. 따라서, SPS는 일반적으로, PPS보다 더 높은 레벨의 신택스 구조인 것으로 고려되고, 이것은 SPS 내에 포함된 신택스 엘리먼트들이 PPS 내에 포함된 신택스 엘리먼트들과 비교하여, 일반적으로 덜 빈번하게 변경되고 비디오 데이터의 더 큰 부분에 적용된다는 것을 의미한다.
도 5a 내지 도 5b는 본 개시내용의 일부 구현예들에 따라, RGB 컬러 공간과 YCgCo 컬러 공간 사이의 잔차들을 변환하기 위하여 적응적 컬러-공간 변환(ACT)의 기법을 적용하는 예들을 예시하는 블록도들이다.
HEVC 스크린 컨텐츠 코딩 확장에서는 3 개의 컬러 컴포넌트들(예컨대, R, G, 및 B) 사이의 상관(예컨대, 중복성)이 YCgCo 컬러 공간에서 상당히 감소되도록, ACT는 잔차들을 하나의 컬러 공간(예컨대, RGB)으로부터 또 다른 컬러 공간(예컨대, YCgCo)으로 적응적으로 변환하기 위하여 적용된다. 또한, 현존하는 ACT 설계에서, 상이한 컬러 공간들의 적응은 각각의 TU에 대하여 하나의 플래그 tu_act_enabled_flag를 시그널링함으로써 변환 유닛(TU) 레벨에서 수행된다. 플래그 tu_act_enabled_flag가 1과 동일할 때, 그것은 현재의 TU의 잔차들이 YCgCo 공간에서 코딩된다는 것을 지시하고; 이와 다를 경우에(즉, 플래그가 0과 동일함), 그것은 현재의 TU의 잔차들이 (즉, 컬러 공간 변환 없이) 원래의 컬러 공간에서 코딩된다는 것을 지시한다. 추가적으로, 현재의 TU가 무손실 모드(lossless mode)에서 또는 손실 모드(lossy mode)에서 코딩되는지 여부에 따라, 상이한 컬러 공간 변환 공식들이 적용된다. 구체적으로, 손실 모드들에 대한 RGB 컬러 공간과 YCgCo 컬러 공간 사이의 순방향 및 역방향 컬러 공간 변환 공식들은 도 5a에서 정의된다.
무손실 모드에 대하여, RGB-YCgCo 변환(또한, YCgCo-LS로서 공지됨)의 가역적 버전이 이용된다. RGB-YCgCo 변환의 가역적 버전은 도 5b에서 도시된 리프팅 동작(lifting operation)들 및 관련된 설명에 기초하여 구현된다.
도 5a에서 도시된 바와 같이, 손실 모드에서 이용된 순방향 및 역방향 컬러 변환 행렬들은 정규화되지 않는다. 그러므로, YCgCo 신호의 크기는 컬러 변환이 적용된 후에, 원래의 신호의 크기보다 작다. 순방향 컬러 변환에 의해 야기된 크기에 있어서의 감소를 보상하기 위하여, 조절된 양자화 파라미터가 YCgCo 도메인에서의 잔차들에 적용된다. 구체적으로, 컬러 공간 변환이 적용될 때, YCgCo 도메인 잔차들을 양자화하기 위하여 이용되는 QP 값들 QPY, QPCg, 및 QPCo는 각각 QP - 5, QP - 5, 및 QP - 3인 것으로 설정되고, 여기서, QP는 원래의 컬러 공간에서 이용된 양자화 파라미터이다.
도 6은 본 개시내용의 일부 구현예들에 따라, 예시적인 비디오 데이터 디코딩 프로세스에서 크로마 스케일링을 갖는 루마 맵핑(LMCS)의 기법을 적용하는 블록도이다.
VVC에서, LMCS는 인-루프 필터(예컨대, 디-블록킹 필터(de-blocking filter), SAO, 및 ALF) 이전에 적용된 새로운 코딩 툴로서 이용된다. 일반적으로, LMCS는 2 개의 주요 모듈들을 가진다: 1) 적응적 피스별(piecewise) 선형 모델들에 기초한 루마 컴포넌트의 인-루프 맵핑; 2) 루마-종속적 크로마 잔차 스케일링. 도 6은 LMCS가 적용되는 수정된 디코딩 프로세스를 도시한다. 도 6에서, 맵핑된 도메인에서 행해지는 디코딩 모듈들은 엔트로피 디코딩 모듈, 역 양자화 모듈, 역 변환 모듈, 루마 인트라 예측 모듈, 루마 샘플 재구성 모듈(즉, 루마 예측 샘플들 및 루마 잔차 샘플들의 추가)을 포함한다. 원래의(즉, 비-맵핑된) 도메인에서 행해지는 디코딩 모듈들은 모션 보상된 예측 모듈, 크로마 인트라 예측 모듈, 크로마 샘플 재구성 모듈(즉, 크로마 예측 샘플들 및 크로마 잔차 샘플들의 추가), 및 디블록킹 모듈, SAO 모듈, 및 ALF 모듈과 같은 모든 인-루프 필터 모듈들을 포함한다. LMCS에 의해 도입된 새로운 동작 모듈들은 루마 샘플들의 순방향 맵핑 모듈(610), 루마 샘플들의 역방향 맵핑 모듈(620), 및 크로마 잔차 스케일링 모듈(630)을 포함한다.
LMCS의 인-루프 맵핑은 코딩 효율을 개선시키기 위하여 입력 신호의 동적 범위를 조절할 수 있다. 현존하는 LMCS 설계에서의 루마 샘플들의 인-루프 맵핑은 2 개의 맵핑 함수들: 하나의 순방향 맵핑 함수 FwdMap 및 하나의 대응하는 역방향 맵핑 함수 InvMap을 기반으로 한다. 순방향 맵핑 함수는 16 개의 동일-크기 피스들을 갖는 하나의 피스별 선형 모델을 이용하여 인코더로부터 디코더로 시그널링된다. 역방향 맵핑 함수는 순방향 맵핑 함수로부터 직접적으로 유도될 수 있고, 그러므로, 시그널링될 필요가 없다.
루마 맵핑 모델의 파라미터들은 슬라이스 레벨에서 시그널링된다. 존재 플래그(presence flag)는 루마 맵핑 모델이 현재의 슬라이스에 대하여 시그널링되어야 하는지를 지시하기 위하여 먼저 시그널링된다. 루마 맵핑 모델이 현재의 슬라이스에서 존재할 경우에, 대응하는 피스별 선형 모델 파라미터들이 추가로 시그널링된다. 추가적으로, 슬라이스 레벨에서, 또 다른 LMCS 제어 플래그는 슬라이스에 대하여 LMCS를 인에이블/디스에이블하기 위하여 시그널링된다.
크로마 잔차 스케일링 모듈(630)은 인-루프 맵핑이 루마 신호에 적용될 때, 루마 신호와 그 대응하는 크로마 신호들 사이의 양자화 정밀도의 상호작용을 보상하도록 설계된다. 크로마 잔차 스케일링이 현재의 슬라이스에 대하여 인에이블되거나 디스에이블되는지 여부는 슬라이스 헤더에서 또한 시그널링된다. 루마 맵핑이 인에이블될 경우에, 추가적인 플래그는 루마-종속적 크로마 잔차 스케일링이 적용되는지 또는 그렇지 않은지를 지시하기 위하여 시그널링된다. 루마 맵핑이 이용되지 않을 때, 루마-종속적 크로마 잔차 스케일링은 항상 디스에이블되고, 추가적인 플래그가 요구되지 않는다. 추가적으로, 크로마 잔차 스케일링은 4 개 이하의 크로마 샘플들을 포함하는 CU들에 대하여 항상 디스에이블된다.
도 7은 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 적응적 컬러-공간 변환(ACT)의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스를 예시하는 블록도이다.
HEVC SCC에서의 ACT 설계와 유사하게, VVC에서의 ACT는 4:4:4 크로마 포맷인 하나의 CU의 인트라/인터 예측 잔차들을 원래의 컬러 공간(예컨대, RGB 컬러 공간)으로부터 YCgCo 컬러 공간으로 변환한다. 그 결과, 3 개의 컬러 컴포넌트들 사이의 중복성은 더 양호한 코딩 효율을 위하여 감소될 수 있다. 도 7은 역 ACT 모듈(710)의 추가를 통해 역 ACT가 어떻게 VVC 프레임워크에서 적용되는지에 대한 디코딩 플로우차트를 도시한다. ACT가 인에이블된 상태로 인코딩된 CU를 프로세싱할 때, 엔트로피 디코딩, 역 양자화, 및 역 DCT/DST-기반 변환이 CU에 먼저 적용된다. 그 후에, 도 7에서 도시된 바와 같이, 역 ACT는 디코딩된 잔차들을 YCgCo 컬러 공간으로부터 원래의 컬러 공간(예컨대, RGB 및 YCbCr)으로 변환하기 위하여 소환된다. 추가적으로, 손실 모드인 ACT는 정규화되지 않으므로, (-5, -5, -3)의 QP 조절들은 변환된 잔차들의 변경된 크기를 보상하기 위하여 Y, Cg, 및 Co 컴포넌트들에 적용된다.
일부 실시예들에서, ACT 방법은 상이한 컬러 공간들 사이의 컬러 변환을 행하기 위하여 HEVC의 동일한 ACT 코어 변환(core transform)들을 재이용한다. 구체적으로, 컬러 변환들의 2 개의 상이한 버전들은 현재의 CU가 손실 또는 무손실 방식으로 코딩되는지 여부에 따라 적용된다. 손실의 경우에 대한 순방향 및 역방향 컬러 변환들은 도 5a에서 도시된 바와 같은 비가역적 YCgCo 변환 행렬을 이용한다. 무손실의 경우에 대하여, 도 5b에서 도시된 바와 같은 가역적 컬러 변환 YCgCo-LS가 적용된다. 또한, 현존하는 ACT 설계와는 상이하게, 다음의 변경들은 VVC 표준에서의 다른 코딩 툴들과의 그 상호작용을 처리하기 위하여 ACT 방식으로 도입된다.
예를 들어, HEVC에서의 하나의 CU의 잔차들은 다수의 TU들로 파티셔닝될 수 있으므로, ACT 제어 플래그는 컬러 공간 변환이 적용될 필요가 있는지 또는 그렇지 않은지 여부를 지시하기 위하여 각각의 TU에 대하여 별도로 시그널링된다. 그러나, 도 4e와 관련하여 위에서 설명된 바와 같이, 2진 및 3진 파티션 구조로 네스팅된(nested) 하나의 쿼드트리(quadtree)는 다수의 파티션 유형 개념을 대체하기 위하여 VVC에서 적용되고, 이에 따라, HEVC에서 별도의 CU, PU, 및 TU 파티션들을 제거한다. 이것은 대부분의 경우들에 있어서, 최대 지원된 변환 크기가 CU의 하나의 컴포넌트의 폭 또는 높이보다 작지 않다면, 하나의 CU 리프 노드가 또한, 추가의 파티션 없이 예측 및 변환 프로세싱의 유닛으로서 이용된다는 것을 의미한다. 이러한 파티션 구조에 기초하여, CU 레벨에서의 ACT는 적응적으로 인에이블되고 디스에이블된다. 구체적으로, 하나의 플래그 cu_act_enabled_flag는 CU의 잔차들을 코딩하기 위한 원래의 컬러 공간과 YCgCo 컬러 공간 사이에서 선택하기 위하여 각각의 CU에 대하여 시그널링된다. 플래그가 1과 동일할 경우에, 그것은 CU 내의 모든 TU들의 잔차들이 YCgCo 컬러 공간에서 코딩된다는 것을 지시한다. 이와 다르게, 플래그 cu_act_enabled_flag가 0과 동일할 경우에는, CU의 모든 잔차들이 원래의 컬러 공간에서 코딩된다.
일부 실시예들에서는, ACT를 디스에이블하는 상이한 시나리오들이 있다. ACT가 하나의 CU에 대하여 인에이블될 때, 그것은 컬러 공간 변환을 행하기 위하여 모든 3 개의 컴포넌트들의 잔차들을 액세스할 필요가 있다. 그러나, VVC 설계는 각각의 CU가 3 개의 컴포넌트들의 정보를 항상 포함한다는 것을 보장할 수 없다. 개시내용의 실시예에 따르면, CU가 모든 3 개의 컴포넌트들의 정보를 포함하지 않는 그러한 경우들에는, ACT가 강제적으로 디스에이블되어야 한다.
첫째, 일부 실시예들에서, 별도-트리 파티션 구조가 적용될 때, 하나의 CTU 내부의 루마 및 크로마 샘플들은 별도의 파티션 구조들에 기초하여 CU들로 파티셔닝된다. 그 결과, 루마 파티션 트리에서의 CU들은 루마 컴포넌트의 코딩 정보를 오직 포함하고, 크로마 파티션 트리에서의 CU들은 2 개의 크로마 컴포넌트들의 코딩 정보를 오직 포함한다. 현재의 VVC에 따르면, 단일-트리 및 별도-트리 파티션 구조들 사이의 전환은 슬라이스-레벨에서 수행된다. 그러므로, 개시내용의 실시예에 따르면, 별도-트리가 하나의 슬라이스에 적용되는 것으로 밝혀질 때, 그 대신에 제로인 것으로 추론되는 ACT 플래그를 시그널링하지 않으면서, ACT는 슬라이스 내부의 모든 CU들(루마 CU들 및 크로마 CU들의 둘 모두)에 대하여 항상 디스에이블될 것이다.
둘째, 일부 실시예들에서, ISP 모드(이하에서 추가로 설명됨)가 인에이블될 때, TU 파티션은 루마 샘플들에 오직 적용되는 반면, 크로마 샘플들은 다수의 TU들로 추가로 분할하지 않으면서 코딩된다. N이 하나의 인트라 CU에 대한 ISP 서브-파티션들(즉, TU들)의 수인 것으로 가정하면, 현재의 ISP 설계에 따르면, 오직 최후 TU가 루마 및 크로마 컴포넌트들의 둘 모두를 포함하는 반면, 최초 N-1 ISP TU들은 오직 루마 컴포넌트로 구성된다. 개시내용의 실시예에 따르면, ACT는 ISP 모드 하에서 디스에이블된다. ISP 모드에 대하여 ACT를 디스에이블하기 위한 2 개의 방식들이 있다. 제1 방법에서, ACT 인에이블/디스에이블 플래그(즉, cu_act_enabled_flag)는 ISP 모드의 신택스를 시그널링하기 전에 시그널링된다. 이러한 경우에, 플래그 cu_act_enabled_flag가 1과 동일할 때, ISP 모드는 비트스트림에서 시그널링되는 것이 아니라, 제로(즉, 오프로 전환)인 것으로 항상 추론될 것이다. 제2 방법에서, ISP 모드 시그널링은 ACT 플래그의 시그널링을 우회하기 위하여 이용된다. 구체적으로, 이 방법에서, ISP 모드는 플래그 cu_act_enabled_flag 이전에 시그널링된다. ISP 모드가 선택될 때, 플래그 cu_act_enabled_flag는 시그널링되지 않고 제로인 것으로 추론된다. 이와 다를 경우에(ISP 모드가 선택되지 않음), 플래그 cu_act_enabled_flag는 CU의 잔차 코딩을 위한 컬러 공간을 적응적으로 선택하기 위하여 여전히 시그널링될 것이다.
일부 실시예들에서, 루마 및 크로마 파티션 구조가 오정렬되는 CU들에 대하여 ACT를 강제적으로 디스에이블하는 것에 추가적으로, LMCS는 ACT가 적용되는 CU들에 대하여 디스에이블된다. 하나의 실시예에서, 루마 맵핑 및 크로마 잔차 스케일링의 둘 모두는 하나의 CU가 그 잔차들을 코딩하기 위하여 YCgCo 컬러 공간을 선택할 때에(즉, ACT가 1임) 디스에이블된다. 또 다른 실시예에서, ACT가 하나의 CU에 대하여 인에이블될 때, 오직 크로마 잔차 스케일링이 디스에이블되는 반면, 루마 맵핑은 출력 루마 샘플들의 동적 범위를 조절하기 위하여 여전히 적용될 수 있다. 최후의 실시예에서, 루마 맵핑 및 크로마 잔차 스케일링의 둘 모두는 그 잔차들을 코딩하기 위하여 ACT를 적용하는 CU들에 대하여 인에이블된다. ACT를 적용하는 CU들에 대하여 크로마 잔차 스케일링을 가능하게 하기 위한 다수의 방식들이 있을 수 있다. 하나의 방법에서, 크로마 잔차 스케일링은 디코딩 시에 역 ACT 전에 적용된다. 이 방법에 의해, 그것은 ACT가 적용될 때, 크로마 잔차 스케일링이 YCgCo 도메인에서의 크로마 잔차들(즉, Cg 및 Co 잔차들)에 적용된다는 것을 의미한다. 또 다른 방법에서, 크로마 잔차 스케일링은 역 ACT 후에 적용된다. 구체적으로, 제2 방법에 의해, 크로마 스케일링은 원래의 컬러 공간들에서의 잔차들에 적용된다. 입력 비디오가 RGB 포맷으로 캡처되는 것으로 가정하면, 그것은 크로마 잔차 스케일링이 B 및 R 컴포넌트들의 잔차들에 적용된다는 것을 의미한다.
일부 실시예들에서, 신택스 엘리먼트, 예컨대, sps_act_enabled_flag는 ACT가 시퀀스 레벨에서 인에이블되거나 또는 그렇지 않은지를 지시하기 위하여 시퀀스 파라미터 세트(SPS)에 추가된다. 추가적으로, 컬러-공간 변환이 루마 및 크로마 컴포넌트들이 동일한 해상도(예컨대, 4:4:4 크로마 포맷 4:4:4)를 가지는 비디오 컨텐츠에 적용될 때, ACT가 4:4:4 크로마 포맷에 대해 오직 인에이블될 수 있도록, 하나의 비트스트림 준수성 요건이 추가될 필요가 있다. 표 1은 위의 신택스가 추가된 수정된 SPS 신택스 테이블을 예시한다.
표 1: 수정된 SPS 신택스 테이블
seq_parameter_set_rbsp( ) { 디스크립터
...
sps_act_enabled_flag u(1)
...
}
구체적으로, 1과 동일한 sps_act_enabled_flag는 ACT가 인에이블된다는 것을 지시하고, 0과 동일한 sps_act_enabled_flag는 플래그 cu_act_enabled_flag가 SPS를 참조하는 CU들에 대하여 시그널링되는 것이 아니라 0인 것으로 추론되도록, ACT가 디스에이블된다는 것을 지시한다. ChromaArrayType이 3과 동일하지 않을 때, sps_act_enabled_flag의 값이 0과 동일할 것은 비트스트림 준수성(bitstream conformance)요건이다.
또 다른 실시예에서는, sps_act_enabed_flag를 항상 시그널링하는 대신에, 플래그의 시그널링이 입력 신호의 크로마 유형에 따라 조절된다. 구체적으로, ACT가 루마 및 크로마 컴포넌트들이 동일한 해상도일 때에 오직 적용될 수 있다는 것을 고려하면, 플래그 sps_act_enabled_flag는 입력 비디오가 4:4:4 크로마 포맷에서 캡처될 때에 오직 시그널링된다. 이러한 변경으로, 수정된 SPS 신택스 테이블은 다음과 같다:
표 2: 시그널링 조건을 갖는 수정된 SPS 신택스 테이블
seq_parameter_set_rbsp( ) { 디스크립터
...
if(chroma_format_idc == 3)
sps_act_enabled_flag u(1)
...
}
일부 실시예들에서, ACT를 이용하여 비디오 데이터를 디코딩하기 위한 신택스 설계 사양은 다음의 표에서 예시된다.
표 3: ACT 모드를 시그널링하기 위한 사양
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
chType = treeType = = DUAL_TREE_CHROMA? 1 : 0
if( slice_type != I | | sps_ibc_enabled_flag | | sps_palette_enabled_flag) {
if( treeType != DUAL_TREE_CHROMA &&
!( ( ( cbWidth = = 4 && cbHeight = = 4 ) | | modeType = = MODE_TYPE_INTRA )
&& !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && slice_type != I
&& !( cbWidth = = 4 && cbHeight = = 4 ) && modeType = = MODE_TYPE_ALL )
pred_mode_flag ae(v)
if( ( ( slice_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( slice_type != I && ( CuPredMode[ chType ][ x0 ][ y0 ] != MODE_INTRA | |
( cbWidth = = 4 && cbHeight = = 4 && cu_skip_flag[ x0 ][ y0 ] = = 0 ) ) ) ) &&
cbWidth <= 64 && cbHeight <= 64 && modeType != MODE_TYPE_INTER &&
sps_ibc_enabled_flag && treeType != DUAL_TREE_CHROMA )
pred_mode_ibc_flag ae(v)
if( ( ( ( slice_type = = I | | ( cbWidth = = 4 && cbHeight = = 4 ) | | sps_ibc_enabled_flag ) &&
CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) | |
( slice_type != I && !( cbWidth = = 4 && cbHeight = = 4 ) && !sps_ibc_enabled_flag
&& CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) && sps_palette_enabled_flag &&
cbWidth <= 64 && cbHeight <= 64 && && cu_skip_flag[ x0 ][ y0 ] = = 0 &&
modeType != MODE_INTER )
pred_mode_plt_flag ae(v)
}
if( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = =
DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <=
MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY )
&& !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_not_planar_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_not_planar_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
} else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
}
}
}
if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) &&
ChromaArrayType != 0 ) {
if ( pred_mode_plt_flag && treeType = = DUAL_TREE_CHROMA )
palette_coding( x0, y0, cbWidth / SubWidthC, cbHeight / SubHeightC, 1, 2 )
else {
if( !cu_act_enabled_flag ) {
if( CclmEnabled )
cclm_mode_flag ae(v)
if( cclm_mode_flag )
cclm_mode_idx ae(v)
else
intra_chroma_pred_mode ae(v)
}
}
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER
or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
general_merge_flag[ x0 ][ y0 ] ae(v)
if( general_merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight, chType )
} else if ( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_IBC ) {
mvd_coding( x0, y0, 0, 0 )
if( MaxNumIbcMergeCand > 1 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_idx[ x0 ][ y0 ] ae(v)
}
} else {
if( slice_type = = B )
inter_pred_idc[ x0 ][ y0 ] ae(v)
if( sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16 ) {
inter_affine_flag[ x0 ][ y0 ] ae(v)
if( sps_affine_type_flag && inter_affine_flag[ x0 ][ y0 ] )
cu_affine_type_flag[ x0 ][ y0 ] ae(v)
}
if( sps_smvd_enabled_flag && !mvd_l1_zero_flag &&
inter_pred_idc[ x0 ][ y0 ] = = PRED_BI &&
!inter_affine_flag[ x0 ][ y0 ] && RefIdxSymL0 > -1 && RefIdxSymL1 > -1 )
sym_mvd_flag[ x0 ][ y0 ] ae(v)
if( inter_pred_idc[ x0 ][ y0 ] != PRED_L1 ) {
if( NumRefIdxActive[ 0 ] > 1
&& !sym_mvd_flag[ x0 ][ y0 ] )
ref_idx_l0[ x0 ][ y0 ] ae(v)
mvd_coding( x0, y0, 0, 0 )
if( MotionModelIdc[ x0 ][ y0 ] > 0 )
mvd_coding( x0, y0, 0, 1 )
if(MotionModelIdc[ x0 ][ y0 ] > 1 )
mvd_coding( x0, y0, 0, 2 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
} else {
MvdL0[ x0 ][ y0 ][ 0 ] = 0
MvdL0[ x0 ][ y0 ][ 1 ] = 0
}
if( inter_pred_idc[ x0 ][ y0 ] != PRED_L0 ) {
if( NumRefIdxActive[ 1 ] > 1
&& !sym_mvd_flag[ x0 ][ y0 ] )
ref_idx_l1[ x0 ][ y0 ] ae(v)
if( mvd_l1_zero_flag && inter_pred_idc[ x0 ][ y0 ] = = PRED_BI ) {
MvdL1[ x0 ][ y0 ][ 0 ] = 0
MvdL1[ x0 ][ y0 ][ 1 ] = 0
MvdCpL1[ x0 ][ y0 ][ 0 ][ 0 ] = 0
MvdCpL1[ x0 ][ y0 ][ 0 ][ 1 ] = 0
MvdCpL1[ x0 ][ y0 ][ 1 ][ 0 ] = 0
MvdCpL1[ x0 ][ y0 ][ 1 ][ 1 ] = 0
MvdCpL1[ x0 ][ y0 ][ 2 ][ 0 ] = 0
MvdCpL1[ x0 ][ y0 ][ 2 ][ 1 ] = 0
} else {
if( sym_mvd_flag[ x0 ][ y0 ] ) {
MvdL1[ x0 ][ y0 ][ 0 ] = -MvdL0[ x0 ][ y0 ][ 0 ]
MvdL1[ x0 ][ y0 ][ 1 ] = -MvdL0[ x0 ][ y0 ][ 1 ]
} else
mvd_coding( x0, y0, 1, 0 )
if( MotionModelIdc[ x0 ][ y0 ] > 0 )
mvd_coding( x0, y0, 1, 1 )
if(MotionModelIdc[ x0 ][ y0 ] > 1 )
mvd_coding( x0, y0, 1, 2 )
mvp_l1_flag[ x0 ][ y0 ] ae(v)
}
} else {
MvdL1[ x0 ][ y0 ][ 0 ] = 0
MvdL1[ x0 ][ y0 ][ 1 ] = 0
}
if( ( sps_amvr_enabled_flag && inter_affine_flag[ x0 ][ y0 ] = = 0 &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 | |
MvdL1[ x0 ][ y0 ][ 0 ] != 0 | | MvdL1[ x0 ][ y0 ][ 1 ] != 0 ) ) | |
( sps_affine_amvr_enabled_flag && inter_affine_flag[ x0 ][ y0 ] = = 1 &&
( MvdCpL0[ x0 ][ y0 ][ 0 ] [ 0 ] != 0 | | MvdCpL0[ x0 ][ y0 ][ 0 ] [ 1 ] != 0 | |
MvdCpL1[ x0 ][ y0 ][ 0 ] [ 0 ] != 0 | | MvdCpL1[ x0 ][ y0 ][ 0 ] [ 1 ] != 0 | |
MvdCpL0[ x0 ][ y0 ][ 1 ] [ 0 ] != 0 | | MvdCpL0[ x0 ][ y0 ][ 1 ] [ 1 ] != 0 | |
MvdCpL1[ x0 ][ y0 ][ 1 ] [ 0 ] != 0 | | MvdCpL1[ x0 ][ y0 ][ 1 ] [ 1 ] != 0 | |
MvdCpL0[ x0 ][ y0 ][ 2 ] [ 0 ] != 0 | | MvdCpL0[ x0 ][ y0 ][ 2 ] [ 1 ] != 0 | |
MvdCpL1[ x0 ][ y0 ][ 2 ] [ 0 ] != 0 | | MvdCpL1[ x0 ][ y0 ][ 2 ] [ 1 ] != 0 ) ) {
amvr_flag[ x0 ][ y0 ] ae(v)
if( amvr_flag[ x0 ][ y0 ] )
amvr_precision_idx[ x0 ][ y0 ] ae(v)
}
if( sps_bcw_enabled_flag && inter_pred_idc[ x0 ][ y0 ] = = PRED_BI &&
luma_weight_l0_flag[ ref_idx_l0 [ x0 ][ y0 ] ] = = 0 && luma_weight_l1_flag[ ref_idx_l1 [ x0 ][ y0 ] ] = = 0 &&
chroma_weight_l0_flag[ ref_idx_l0 [ x0 ][ y0 ] ] = = 0 &&
chroma_weight_l1_flag[ ref_idx_l1 [ x0 ][ y0 ] ] = = 0 &&
cbWidth * cbHeight >= 256 )
bcw_idx[ x0 ][ y0 ] ae(v)
}
}
if( CuPredMode[ chType ][ x0 ][ y0 ] != MODE_INTRA
&& !pred_mode_plt_flag &&
general_merge_flag[ x0 ][ y0 ] = = 0 )
cu_cbf ae(v)
if( cu_cbf ) {
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTER && sps_sbt_enabled_flag
&& !ciip_flag[ x0 ][ y0 ] && !MergeTriangleFlag[ x0 ][ y0 ] ) {
if( cbWidth  <=  MaxSbtSize && cbHeight  <=  MaxSbtSize ) {
allowSbtVerH = cbWidth  >=  8
allowSbtVerQ = cbWidth  >=  16
allowSbtHorH = cbHeight  >=  8
allowSbtHorQ = cbHeight  >=  16
if( allowSbtVerH | | allowSbtHorH | | allowSbtVerQ | | allowSbtHorQ )
cu_sbt_flag ae(v)
}
if( cu_sbt_flag ) {
if( ( allowSbtVerH | | allowSbtHorH ) && ( allowSbtVerQ
| | allowSbtHorQ) )
cu_sbt_quad_flag ae(v)
if( ( cu_sbt_quad_flag && allowSbtVerQ &&
allowSbtHorQ ) | |
( !cu_sbt_quad_flag && allowSbtVerH && allowSbtHorH ) )
cu_sbt_horizontal_flag ae(v)
cu_sbt_pos_flag ae(v)
}
if( sps_act_enabled_flag && CuPredMode[ chType ][ x0 ][ y0 ] != MODE_INTRA )
cu_act_enabled_flag ae(v)
}
LfnstDcOnly = 1
LfnstZeroOutSigCoeffFlag = 1
transform_tree( x0, y0, cbWidth, cbHeight, treeType )
lfnstWidth = ( treeType = = DUAL_TREE_CHROMA )  ?  cbWidth / SubWidthC
  :  cbWidth
lfnstHeight = ( treeType = = DUAL_TREE_CHROMA )  ?  cbHeight  /  SubHeightC
  :  cbHeight
if( Min( lfnstWidth, lfnstHeight ) >= 4 && sps_lfnst_enabled_flag = = 1 &&
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA &&
IntraSubPartitionsSplitType = = ISP_NO_SPLIT &&
( !intra_mip_flag[ x0 ][ y0 ] | | Min( lfnstWidth, lfnstHeight ) >= 16 ) &&
tu_mts_idx[ x0 ][ y0 ] = = 0 && Max( cbWidth, cbHeight ) <= MaxTbSizeY) {
if( LfnstDcOnly = = 0 && LfnstZeroOutSigCoeffFlag = = 1 )
lfnst_idx[ x0 ][ y0 ] ae(v)
}
}
1과 동일한 플래그 cu_act_enabled_flag는 코딩 유닛의 잔차들이 YCgCo 컬러 공간에서 코딩된다는 것을 지시하고, 0과 동일한 플래그 cu_act_enabled_flag는 코딩 유닛의 잔차들이 원래의 컬러 공간(예컨대, RGB 또는 YCbCr)에서 코딩된다는 것을 지시한다. 플래그 cu_act_enabled_flag가 존재하지 않을 때, 그것은 0과 동일한 것으로 추론된다.
현재의 VVC 작업 초안에서, 입력 비디오가 4:4:4 크로마 포맷으로 캡처될 때, 변환 스킵 모드(transform skip mode)가 루마 및 크로마 컴포넌트들의 둘 모두에 적용될 수 있다. 이러한 설계에 기초하여, 일부 실시예들에서는, ACT와 변환 스킵 사이의 상호작용을 처리하기 위하여 3 개의 방법들이 다음에서 이용된다.
하나의 방법에서, 변환 스킵 모드가 하나의 ACT CU에 대하여 인에이블될 때, 변환 스킵 모드는 루마 컴포넌트에 오직 적용되지만, 크로마 컴포넌트들에는 적용되지 않는다. 일부 실시예들에서, 이러한 방법에 대한 신택스 설계 사양은 다음의 표에서 예시된다.
표 4: 변환 스킵 모드가 루마 컴포넌트에 오직 적용될 때의 신택스 사양
transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { 디스크립터
……
if( tu_cbf_luma[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_CHROMA ) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 0 ] &&..
tbWidth <= MaxTsSize && tbHeight <= MaxTsSize &&
( IntraSubPartitionsSplit[ x0 ][ y0 ]  = =  ISP_NO_SPLIT )
&& !cu_sbt_flag )
transform_skip_flag[ x0 ][ y0 ][ 0 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ] )
residual_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
else
residual_ts_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
}
if( tu_cbf_cb[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA )
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 1 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag && cu_act_enabled_flag )
transform_skip_flag[ x0 ][ y0 ][ 1 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 1 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
if( tu_cbf_cr[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA &&
!( tu_cbf_cb[ x0 ][ y0 ] && tu_joint_cbcr_residual_flag[ x0 ][ y0 ] )) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 2 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag && cu_act_enabled_flag )
transform_skip_flag [ x0 ][ y0 ][ 2 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 2 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
또 다른 방법에서, 변환 스킵 모드는 루마 및 크로마 컴포넌트들의 둘 모두에 적용된다. 일부 실시예들에서, 이러한 방법에 대한 신택스 설계 사양은 다음의 표에서 예시된다.
표 5: 변환 스킵 모드가 루마 및 크로마 컴포넌트들의 둘 모두에 적용될 때의 신택스 사양
transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { 디스크립터
……
if( tu_cbf_luma[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_CHROMA ) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 0 ] &&..
tbWidth <= MaxTsSize && tbHeight <= MaxTsSize &&
( IntraSubPartitionsSplit[ x0 ][ y0 ]  = =  ISP_NO_SPLIT ) && !cu_sbt_flag )
transform_skip_flag[ x0 ][ y0 ][ 0 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ] )
residual_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
else
residual_ts_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
}
if( tu_cbf_cb[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA )
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 1 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag )
transform_skip_flag[ x0 ][ y0 ][ 1 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 1 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
if( tu_cbf_cr[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA &&
!( tu_cbf_cb[ x0 ][ y0 ] && tu_joint_cbcr_residual_flag[ x0 ][ y0 ] )) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 2 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag )
transform_skip_flag [ x0 ][ y0 ][ 2 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 2 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
또 다른 방법에서, 변환 스킵 모드는 ACT가 하나의 CU에 대해 인에이블될 때에 항상 디스에이블된다. 일부 실시예들에서, 이러한 방법에 대한 신택스 설계 사양은 다음의 표에서 예시된다.
표 6: 변환 스킵 모드가 항상 디스에이블될 때의 신택스 사양
transform_unit( x0, y0, tbWidth, tbHeight, treeType, subTuIndex, chType ) { 디스크립터
????
if( tu_cbf_luma[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_CHROMA ) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 0 ] &&..
tbWidth <= MaxTsSize && tbHeight <= MaxTsSize &&
( IntraSubPartitionsSplit[ x0 ][ y0 ]  = =  ISP_NO_SPLIT ) && !cu_sbt_flag && !cu_act_enabled_flag)
transform_skip_flag[ x0 ][ y0 ][ 0 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ] )
residual_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
else
residual_ts_coding( x0, y0, Log2( tbWidth ), Log2( tbHeight ), 0 )
}
if( tu_cbf_cb[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA )
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 1 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag && cu_act_enabled_flag )
transform_skip_flag[ x0 ][ y0 ][ 1 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 1 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 1 )
if( tu_cbf_cr[ x0 ][ y0 ] && treeType  !=  DUAL_TREE_LUMA &&
!( tu_cbf_cb[ x0 ][ y0 ] && tu_joint_cbcr_residual_flag[ x0 ][ y0 ] )) {
if( sps_transform_skip_enabled_flag && !BdpcmFlag[ x0 ][ y0 ][ 2 ] &&
wC <= MaxTsSize && hC <= MaxTsSize && !cu_sbt_flag && cu_act_enabled_flag )
transform_skip_flag [ x0 ][ y0 ][ 2 ] ae(v)
if( !transform_skip_flag[ x0 ][ y0 ][ 2 ] )
residual_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
else
residual_ts_coding( xC, yC, Log2( wC ), Log2( hC ), 2 )
도 8a 및 도 8b는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 적응적 컬러-공간 변환(ACT) 및 크로마 스케일링을 갖는 루마 맵핑의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스들을 예시하는 블록도들이다. 일부 실시예들에서, 비디오 비트스트림은 ACT(예컨대, 도 7에서의 역 ACT(710)) 및 크로마 잔차 스케일링(예컨대, 도 6에서의 크로마 잔차 스케일링(630))의 둘 모두를 이용하여 코딩된다. 일부 다른 실시예들에서, 비디오 비트스트림은 ACT 둘 모두가 아니라, 크로마 잔차 스케일링을 이용하여 코딩되고, 이에 의해, 역 ACT(710)를 요구하지 않는다.
더 구체적으로, 도 8a는 비디오 코더가 역 ACT(710) 전에 크로마 잔차 스케일링(630)을 수행하는 실시예를 도시한다. 그 결과, 비디오 코더는 컬러-공간 변환된 도메인에서 크로마 잔차 스케일링(630)과의 루마 맵핑을 수행한다. 예를 들어, 입력 비디오가 RGB 포맷으로 캡처되고 YCgCo 컬러 공간으로 변환되는 것으로 가정하면, 비디오 코더는 YCgCo 컬러 공간에서의 루마 잔차들 Y에 따라 크로마 잔차들 Cg 및 Co에 대해 크로마 잔차 스케일링(630)을 수행한다.
도 8b는 비디오 코더가 역 ACT(710) 후에 크로마 잔차 스케일링(630)을 수행하는 대안적인 실시예를 도시한다. 그 결과, 비디오 코더는 원래의 컬러-공간 도메인에서 크로마 잔차 스케일링(630)과의 루마 맵핑을 수행한다. 예를 들어, 입력 비디오가 RGB 포맷으로 캡처되는 것으로 가정하면, 비디오 코더는 B 및 R 컴포넌트들에 대한 크로마 잔차 스케일링을 적용한다.
도 9는 본 개시내용의 일부 구현예들에 따라, 적응적 컬러-공간 변환(ACT) 및 블록 차동 펄스 코딩된 변조(BDPCM)를 수행하는 것 사이의 예시적인 디코딩 로직들을 예시하는 블록도이다.
BDPCM은 스크린 컨텐츠 코딩을 위한 코딩 툴이다. 일부 실시예들에서, BDPCM 인에이블 플래그는 시퀀스 레벨에서의 SPS에서 시그널링된다. BDPCM 인에이블 플래그는 변환 스킵 모드가 SPS에서 인에이블될 경우에만 시그널링된다.
BDPCM이 인에이블될 때, CU 크기가 루마 샘플들의 측면에서 MaxTsSize × MaxTsSize보다 작거나 이와 동일할 경우에, 그리고 CU가 인트라 코딩될 경우에, 플래그가 CU 레벨에서 송신되고, 여기서, MaxTsSize는 변환 스킵 모드가 허용되는 최대 블록 크기이다. 이 플래그는 규칙적인 인트라 코딩 또는 BDPCM이 이용되는지 여부를 지시한다. BDPCM이 이용될 경우에, 또 다른 BDPCM 예측 방향 플래그는 예측이 수평 또는 수직인지 여부를 지시하기 위하여 추가로 송신된다. 그 다음으로, 블록은 비필터링된 참조 샘플들을 갖는 규칙적인 수평 또는 수직 인트라 예측 프로세스를 이용하여 예측된다. 잔차는 양자화되고, 각각의 양자화된 잔차와 그 예측자, 즉, (BDPCM 예측 방향에 따라) 수평 또는 수직 이웃하는 포지션의 이전에 코딩된 잔차 사이의 차이가 코딩된다.
크기 M (높이) × N (폭)의 블록에 대하여,
Figure pat00001
,0 ≤ i ≤ 0 ≤ j ≤ N-1이 예측 잔차인 것으로 한다.
Figure pat00002
,0 ≤ i ≤ M-1,0 ≤ j ≤ N-1이 잔차
Figure pat00003
의 양자화된 버전을 나타내는 것으로 한다. BDPCM은 양자화된 잔차 값들에 적용되어, 엘리먼트들
Figure pat00004
을 갖는 수정된 M × N 어레이
Figure pat00005
로 귀착되고, 여기서,
Figure pat00006
은 그 이웃하는 양자화된 잔차 값으로부터 예측된다. 0 ≤ j ≤ (N-1)에 대한 수직 BDPCM 예측 모드에 대하여, 다음은
Figure pat00007
을 유도하기 위하여 이용된다:
Figure pat00008
(1)
0 ≤ i ≤ (M-1)에 대한 수평 BDPCM 예측 모드에 대하여, 다음은
Figure pat00009
을 유도하기 위하여 이용된다:
Figure pat00010
(2)
디코더 측에서, 위의 프로세스는 다음과 같이
Figure pat00011
,0 ≤ i ≤ M-1,0 ≤ j ≤ N-1을 연산하기 위하여 반전된다:
Figure pat00012
수직 BDPCM이 이용될 경우 (3)
Figure pat00013
수평 BDPCM이 이용될 경우 (4)
역 양자화된 잔차들
Figure pat00014
은 재구성된 샘플 값들을 생성하기 위하여 인트라 블록 예측 값들에 가산된다.
예측된 양자화된 잔차 값들
Figure pat00015
은 변환 스킵 모드 잔차 코딩에서의 것과 동일한 잔차 코딩 프로세스를 이용하여 디코더로 전송된다. 미래의 인트라 모드 코딩을 위한 MPM 모드의 측면에서, 수평 또는 수직 예측 모드는 BDPCM 예측 방향이 각각 수평 또는 수직일 경우에 BDPCM-코딩된 CU에 대하여 저장된다. 디블록킹을 위하여, 블록 경계의 측부들 상의 둘 모두의 블록들이 BDPCM을 이용하여 코딩될 경우에, 그 특정한 블록 경계는 디블록킹되지 않는다. 가장 최근의 VVC 작업 초안에 따르면, 입력 비디오가 4:4:4 크로마 포맷일 때, CU-레벨에서 루마 및 크로마 채널에 대하여 2 개의 별도의 플래그들, 즉,intra_bdpcm_luma_flagintra_bdpcm_chroma_flag를 시그널링함으로써, BDPCM은 루마 및 크로마 컴포넌트들의 둘 모두에 적용될 수 있다.
일부 실시예들에서, 비디오 코더는 ACT와 BDPCM 사이의 상호작용을 처리하기 위하여 상이한 로직들을 수행한다. 예를 들어, ACT가 하나의 인트라 CU에 적용될 때, BDPCM은 루마 컴포넌트에 대하여 인에이블되지만, 크로마 컴포넌트들에 대하여 디스에이블된다(910). 일부 실시예들에서, ACT가 하나의 인트라 CU에 적용될 때, BDPCM은 루마 컴포넌트에 대하여 인에이블되지만, 크로마 컴포넌트들에 대하여 BDPCM의 시그널링을 위하여 디스에이블된다. 크로마 BDPCM의 시그널링이 우회될 때, 하나의 실시예에서, intra_bdpcm_chroma_flag 및 intra_bdpcm_chroma_dir의 값들은 루마 컴포넌트, 즉, (즉, 크로마 BDPCM을 위한 루마의 동일한 BDPCM 방향을 이용하는) intra_bdpcm_flag 및 intra_bdpcm_dir_flag의 값들과 동일하다. 또 다른 실시예에서, intra_bdpcm_chroma_flag 및 intrra_bdpcm_chroma_dir_flag의 값들은 이들이 ACT 모드(즉, 크로마 컴포넌트에 대한 크로마 BDPCM 모드를 디스에이블함)에 대하여 시그널링될 때에 제로로 설정된다. 코딩 유닛의 대응하는 수정된 신택스 테이블은 다음과 같이 예시된다:
표 7: 오직 루마 컴포넌트에 대해 인에이블된 BDPCM
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
.....
if( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA && treeType == SINGLE_TREE )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ) && !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_not_planar_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_not_planar_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
} else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
}
}
}
if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) &&
ChromaArrayType != 0 ) {
if ( pred_mode_plt_flag && treeType = = DUAL_TREE_CHROMA )
palette_coding( x0, y0, cbWidth / SubWidthC, cbHeight / SubHeightC, 1, 2 )
else {
if( !cu_act_enabled_flag ) {
if( cbWidth <= MaxTsSize && cbHeight <= MaxTsSize &&
sps_bdpcm_chroma_enabled_flag ) {
intra_bdpcm_chroma_flag ae(v)
if( intra_bdpcm_chroma_flag )
intra_bdpcm_chroma_dir_flag ae(v)
} else {
if( CclmEnabled )
cclm_mode_flag ae(v)
if( cclm_mode_flag )
cclm_mode_idx ae(v)
else
intra_chroma_pred_mode ae(v)
}
}
}
}
....
}
일부 실시예들에서, BDPCM은 ACT가 하나의 인트라 CU에 적용될 때에 루마 및 크로마 컴포넌트들의 둘 모두에 대해 인에이블된다. 코딩 유닛의 대응하는 수정된 신택스 테이블은 다음과 같이 예시된다:
표 8: 루마 및 크로마 컴포넌트들의 둘 모두에 대하여 인에이블된 BDPCM
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
......
if( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA && treeType == SINGLE_TREE )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ) && !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
일부 실시예들에서, BDPCM은 ACT가 하나의 인트라 CU에 적용될 때에 루마 및 크로마 컴포넌트들의 둘 모두에 대해 디스에이블된다. 이러한 경우에, BDPM 관련된신택스 엘리먼트를 시그널링하기 위한 필요성이 없다. 코딩 유닛의 대응하는 수정된 신택스 테이블은 다음과 같이 예시된다:
표 9: BDPCM은 루마 및 크로마 컴포넌트들의 둘 모두에 대하여 디스에이블됨
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
.......
if( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA && treeType == SINGLE_TREE )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize && !cu_act_enabled_flag )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) && cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ) && !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_not_planar_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_not_planar_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
} else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
}
}
}
if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) &&
ChromaArrayType != 0 ) {
if ( pred_mode_plt_flag && treeType = = DUAL_TREE_CHROMA )
palette_coding( x0, y0, cbWidth / SubWidthC, cbHeight / SubHeightC, 1, 2 )
else {
if( !cu_act_enabled_flag ) {
if( cbWidth <= MaxTsSize && cbHeight <= MaxTsSize &&
sps_bdpcm_chroma_enabled_flag ) {
intra_bdpcm_chroma_flag ae(v)
if( intra_bdpcm_chroma_flag )
intra_bdpcm_chroma_dir_flag ae(v)
} else {
if( CclmEnabled )
cclm_mode_flag ae(v)
if( cclm_mode_flag )
cclm_mode_idx ae(v)
else
intra_chroma_pred_mode ae(v)
}
}
}
}
}
일부 실시예들에서, 하나의 제약된 크로마 BDPCM 시그널링 방법은 ACT 모드에 대하여 이용된다. 구체적으로, 크로마 BDPCM 인에이블/디스에이블 플래그, 즉, intra_bdpcm_chroma_flag의 시그널링은 ACT가 적용될 때, 루마 BDPCM의 존재, 즉, intra_bdpcm_flag에 따라 조절된다. 플래그 intra_bdpcm_chroma_flag는 플래그 intra_bdpcm_flag가 1과 동일할 때에(즉, 루마 BDPCM 모드가 인에이블됨) 오직 시그널링된다. 이와 다를 경우에, 플래그 intra_bdpcm_chroma_flag는 제로인 것으로 추론된다(즉, 크로마 BDPCM은 디스에이블됨). 플래그 flag intra_bdpcm_chroma_flag가 1과 동일할 때(즉, 크로마 BDPCM이 인에이블됨), 크로마 컴포넌트들에 대한 적용된 BDPCM 방향은 루마 BDPCM 방향과 동일하도록 항상 설정되고, 즉, 플래그 intra_bdpcm_chroma_dir_flag의 값은 intra_bdpcm_dir_flag의 값과 동일하도록 항상 설정된다. 코딩 유닛의 대응하는 수정된 신택스 테이블은 다음과 같이 예시된다:
표 10: 루마 BDPCM의 존재에 대한 크로마 BDPCM 인에이블/디스에이블 플래그의 시그널링을 조절함
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
......
if(sps_act_enabled_flag && CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA && treeType == SINGLE_TREE )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ) && !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_not_planar_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_not_planar_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
} else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
}
}
}
if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) &&
ChromaArrayType != 0 ) {
if ( pred_mode_plt_flag && treeType = = DUAL_TREE_CHROMA )
palette_coding( x0, y0, cbWidth / SubWidthC, cbHeight / SubHeightC, 1, 2 )
else {
if( cbWidth <= MaxTsSize && cbHeight <= MaxTsSize && (!cu_act_enabled_flag || intra_bdpcm_flag) &&
sps_bdpcm_chroma_enabled_flag ) {
intra_bdpcm_chroma_flag ae(v)
if( intra_bdpcm_chroma_flag && !cu_act_enabled_flag )
intra_bdpcm_chroma_dir_flag ae(v)
} else {
if( !cu_act_enabled_flag ) {
if( CclmEnabled )
cclm_mode_flag ae(v)
if( cclm_mode_flag )
cclm_mode_idx ae(v)
else
intra_chroma_pred_mode ae(v)
}
}
}
}
......
}
일부 실시예들에서는, intra_bdpcm_flag의 값에 기초하여 플래그 intra_bdpcm_chroma_flag의 존재를 조절하는 것이 아니라, 크로마 BDPCM 모드의 시그널링은 ACT가 적용될 때, 루마 컴포넌트의 인트라 예측 모드가 수평 또는 수직의 어느 하나일 때에 조건적으로 인에이블된다. 구체적으로, 이 방법에 의해, 플래그 intra_bdpcm_chroma_flag는 루마 인트라 예측 방향이 순수하게 수평 또는 수직일 때에 오직 시그널링된다. 이와 다를 경우에, 플래그 intra_bdpcm_chroma_flag는 0인 것으로 추론된다(그것은 크로마 BDPCM이 디스에이블된다는 것을 의미함). 플래그 intra_bdpcm_chroma_flag가 1과 동일할 때(즉, 크로마 BDPCM이 인에이블됨), 크로마 컴포넌트들에 대한 적용된 BDPCM 방향은 루마 인트라 예측 방향과 동일하도록 항상 설정된다. 이하의 표에서, 숫자 18 및 50은 현재의 VVC 초안에서의 수평 및 수직 인트라 예측들의 현재의 인트라 예측 인덱스들을 표현한다. 코딩 유닛의 대응하는 수정된 신택스 테이블은 다음과 같이 예시된다:
표 11: 루마 컴포넌트의 인트라 예측 모드가 수평 또는 수직의 어느 하나일 때, 크로마 BDPCM 인에이블/디스에이블 플래그의 시그널링을 조절함
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) { 디스크립터
.....
if(sps_act_enabled_flag && CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA && treeType == SINGLE_TREE )
cu_act_enabled_flag ae(v)
if( CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_INTRA | |
CuPredMode[ chType ][ x0 ][ y0 ] = = MODE_PLT ) {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( pred_mode_plt_flag ) {
if( treeType = = DUAL_TREE_LUMA )
palette_coding( x0, y0, cbWidth, cbHeight, 0, 1 )
else /* SINGLE_TREE */
palette_coding( x0, y0, cbWidth, cbHeight, 0, 3 )
} else {
if( sps_bdpcm_enabled_flag &&
cbWidth <= MaxTsSize && cbHeight <= MaxTsSize )
intra_bdpcm_flag ae(v)
if( intra_bdpcm_flag )
intra_bdpcm_dir_flag ae(v)
else {
if( sps_mip_enabled_flag &&
( Abs( Log2( cbWidth ) - Log2( cbHeight ) ) <= 2 ) &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_mip_flag[ x0 ][ y0 ] ae(v)
if( intra_mip_flag[ x0 ][ y0 ] )
intra_mip_mode[ x0 ][ y0 ] ae(v)
else {
if( sps_mrl_enabled_flag && ( ( y0 % CtbSizeY )  >  0 ) )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if ( sps_isp_enabled_flag && intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ) && !cu_act_enabled_flag)
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] ) {
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 )
intra_luma_not_planar_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_not_planar_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
} else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
}
}
}
if( ( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA ) &&
ChromaArrayType != 0 ) {
if ( pred_mode_plt_flag && treeType = = DUAL_TREE_CHROMA )
palette_coding( x0, y0, cbWidth / SubWidthC, cbHeight / SubHeightC, 1, 2 )
else {
if( cbWidth <= MaxTsSize && cbHeight <= MaxTsSize && (!cu_act_enabled_flag || (IntraPredModeY[ x0 ][ y0 ] == 18 || IntraPredModeY[ x0 ][ y0 ] == 50)) &&
sps_bdpcm_chroma_enabled_flag ) {
intra_bdpcm_chroma_flag ae(v)
if( intra_bdpcm_chroma_flag && !cu_act_enabled_flag )
intra_bdpcm_chroma_dir_flag ae(v)
} else {
if( !cu_act_enabled_flag ) {
if( CclmEnabled )
cclm_mode_flag ae(v)
if( cclm_mode_flag )
cclm_mode_idx ae(v)
else
intra_chroma_pred_mode ae(v)
}
}
}
}
.....
}
일부 실시예들에서는, 루마/크로마 BDPCM 모드에 대한 컨텍스트 모델링이 구현된다. VVC에서의 현재의 BDPCM 설계에서, 루마 및 크로마 컴포넌트들에 대한 BDPCM의 시그널링은 동일한 컨텍스트 모델링을 재이용한다. 상세하게, 하나의 단일 컨텍스트는 루마 BDPCM 인에이블/디스에이블 플래그(즉, intra_bdpcm_flag) 및 크로마 BDPCM 인에이블/디스에이블 플래그(즉, intra_bdpcm_chroma_flag)에 의해 공유되고, 또 다른 단일 컨텍스트는 루마 BDPCM 방향 플래그(즉, intra_bdpcm_dir_flag) 및 크로마 BDPCM 방향 플래그(즉, intra_bdpcm_chroma_dir_flag)에 의해 공유된다.
일부 실시예들에서, 코딩 효율을 개선시키기 위하여, 하나의 방법에서는, 별도의 컨텍스트들이 루마 및 크로마 컴포넌트들의 BDPCM 인에이블/디스에이블을 시그널링하기 위하여 이용된다. 또 다른 실시예에서, BDPCM 방향 플래그를 시그널링하기 위한 별도의 컨텍스트들은 루마 및 크로마 컴포넌트들에 대하여 이용된다. 또 다른 실시예에서, 2 개의 추가적인 컨텍스트들은 크로마 BDPCM 인에이블/디스에이블 플래그를 코딩하기 위하여 이용되고, 여기서, 제1 컨텍스트는 루마 BDPCM 모드가 인에이블될 때, intra_bdpcm_chroma_flag를 시그널링하기 위하여 이용되는 반면, 제2 컨텍스트는 루마 BDPCM 모드가 디스에이블될 때, intra_bdpcm_chroma_flag를 시그널링하기 위하여 이용된다.
일부 실시예들에서, ACT는 무손실 코딩으로 처리된다. HEVC 표준에서, 하나의 CU의 무손실 모드는 하나의 CU-레벨 플래그 cu_transquant_bypass_flag를 1인 것으로 시그널링함으로써 지시된다. 그러나, 진행 중인 VVC 표준화 프로세스에서는, 하나의 상이한 무손실 인에이블 방법이 적용된다. 구체적으로, 하나의 CU가 무손실 모드에서 코딩될 때, 그것은 오직 변환을 스킵하고 양자화 스텝-크기를 1로 이용할 필요가 있다. 이것은 CU-레벨 QP 값을 1로 시그널링하고 TU-레벨 transform_skip_flag를 1로 시그널링함으로써 달성될 수 있다. 그러므로, 개시내용의 하나의 실시예에서, 손실 ACT 변환 및 무손실 ACT 변환은 transform_skip_flag의 값들 및 QP 값들에 따라 하나의 CU/TU에 대하여 전환된다. 플래그 transform_skip_flag가 1과 동일하고 QP 값이 4와 동일할 때, 무손실 ACT 변환이 적용되고; 이와 다를 경우에, ACT 변환의 손실 버전은 이하에서 지시된 바와 같이 적용된다.
transform_skip_flag가 1과 동일하고 QP가 4와 동일할 경우에, x = 0..nTbW - 1, y = 0..nTbH - 1인 잔차 샘플들 rY, rCb, 및 rCr의 (nTbW)x(nTbH) 어레이들은 다음과 같이 수정된다:
Figure pat00016
Figure pat00017
이와 다를 경우에, x = 0..nTbW - 1, y = 0..nTbH - 1인 잔차 샘플들 rY, rCb, 및 rCr의 (nTbW)x(nTbH) 어레이들은 다음과 같이 수정된다:
Figure pat00018
위의 설명에서, 상이한 ACT 변환 행렬들은 손실 및 무손실 코딩을 위하여 이용된다. 또 하나의 통합된 설계를 달성하기 위하여, 무손실 ACT 변환 행렬은 손실 및 무손실 코딩의 둘 모두를 위하여 이용된다. 추가적으로, 무손실 ACT 변환이 Cg 및 Co 컴포넌트들의 동적 범위를 1 비트만큼 증가시킬 것을 고려하면, 추가적인 1-비트 우측 시프트(right shift)는 순방향 ACT 변환 후에 Cg 및 Co 컴포넌트들에 적용되는 반면, 1-비트 좌측 시프트(left shift)는 역 ACT 변환 전에 Cg 및 Co 컴포넌트들에 적용된다. 이하에서 설명된 바와 같이,
transform_skip_flag가 0과 동일하거나 QP가 4와 동일하지 않을 경우에, x = 0..nTbW - 1, y = 0..nTbH - 1인 잔차 샘플들 rCb 및 rCr의 (nTbW)x(nTbH) 어레이들은 다음과 같이 수정된다:
Figure pat00019
x = 0..nTbW - 1, y = 0..nTbH - 1인 잔차 샘플들 rY, rCb, 및 rCr의 (nTbW)x(nTbH) 어레이들은 다음과 같이 수정된다:
Figure pat00020
추가적으로, 위로부터 알 수 있는 바와 같이, ACT가 적용될 때, QP 오프셋들 (-5, -5, -3)은 Y, Cg, 및 Co 컴포넌트들에 적용된다. 그러므로, 작은 입력 QP 값들(예컨대, < 5)에 대하여, 음수 QP들은 정의되지 않은 ACT 변환 계수들의 양자화/탈양자화(quantization/dequantization)를 위하여 이용될 것이다. 이러한 문제를 해결하기 위하여, 적용된 QP 값들이 항상 제로와 동일하거나 더 크도록, 즉, QP’ = max(QPorg- QPoffset, 0)가 되도록, 하나의 클립핑 동작이 ACT의 QP 조절 후에 추가되고, 여기서, QP는 원래의 QP이고, QPoffset는 ACT QP 오프셋이고, QP’는 조절된 QP 값이다.
위에서 언급된 바와 같은 방법에서, 동일한 ACT 변환 행렬들(즉, 무손실 ACT 변환 행렬들)이 손실 및 무손실 코딩의 둘 모두를 위하여 이용되지만, 다음의 2 개의 문제들이 여전히 식별될 수 있다:
상이한 역 ACT 동작들은 현재의 CU가 손실 또는 무손실 CU인지 여부에 따라 여전히 적용된다. 구체적으로, 무손실 CU들에 대하여, 역 ACT 변환이 적용되고; 손실 CU들에 대하여, 추가적인 우측 시프트들은 역 ACT 변환 전에 적용될 필요가 있다. 추가적으로, 디코더는 현재의 CU가 손실 모드 또는 무손실 모드에서 코딩되는지 여부를 알 필요가 있다. 이것은 현재의 VVC 무손실 설계와 불일치한다. 상세하게, 하나의 cu_transquant_bypass_flag를 시그널링함으로써 하나의 CU의 무손실 모드가 지시되는 HEVC 무손실 설계와 달리, VVC에서의 무손실 코딩은 하나의 순수한 비-규범적 방식으로, 즉, 예측 잔차들의 변환을 스킵하고(루마 및 크로마 컴포넌트들에 대한 변환 스킵 모드를 인에이블함), 적절한 QP 값(즉, 4)을 선택하고, 인-루프 필터들과 같은 무손실 코딩을 방지하는 코딩 툴들을 명시적으로 디스에이블하여 행해진다.
ACT 변환들을 정규화하기 위하여 이용되는 QP 오프셋들은 이제 고정된다. 그러나, 코딩 효율의 측면에서의 최적의 QP 오프셋들의 선택은 컨텐츠 자체에 종속적일 수 있다. 그러므로, 그 코딩 이득을 최대화하기 위하여 ACT 툴이 인에이블될 때, 신축적인 QP 오프셋 시그널링을 허용하는 것이 더 유익할 수 있다.
위의 고려사항들에 기초라여, 하나의 통합된 ACT 설계는 다음과 같이 구현된다. 첫째, 무손실 ACT 순방향 및 역방향 변환들은 손실 모드 및 무손실 모드의 둘 모두에서 코딩되는 CU들에 대하여 적용된다. 둘째, 고정된 QP 오프셋들을 이용하는 것이 아니라, 비트스트림에서의 ACT CU들에 적용되는 QP 오프셋들(즉, Y, Cg, 및 Co 컴포넌트들에 적용한 3 개의 QP 오프셋들)은 명시적으로 시그널링된다. 셋째, ACT CU들에 적용되는 QP들의 가능한 오버플로우 쟁점을 방지하기 위하여, 클립핑 동작들은 유효한 QP 범위까지의 각각의 ACT CU의 결과적인 QP들에 적용된다. 알 수 있는 바와 같이, 위의 방법에 기초하여, 손실 코딩과 무손실 코딩 사이의 선택은 순수한 인코더-단독 수정들에 의해(즉, 상이한 인코더 설정들을 이용하여) 실현될 수 있다. 디코딩 동작은 ACT CU의 손실 및 무손실 코딩의 둘 모두에 대하여 동일하다. 구체적으로, 무손실 코딩을 가능하게 하기 위하여, 현존하는 인코더-측 무손실 구성들에 추가적으로, 인코더는 오직, 3 개의 QP 오프셋들의 값들을 제로(zero)들로서 시그널링할 필요가 있다. 다른 한편으로, 손실 코딩을 가능하게 하기 위하여, 인코더는 비-제로(non-zero) QP 오프셋들을 시그널링할 수 있다. 예를 들어, 하나의 실시예에서, 손실 코딩에서 무손실 ACT 변환에 의해 야기된 동적 범위 변경을 보상하기 위하여, QP 오프셋들 (-5, 1, 3)은 ACT가 적용될 때, Y, Cg, 및 Co 컴포넌트들에 대하여 시그널링될 수 있다. 다른 한편으로, ACT QP 오프셋들은 상이한 세분화도들에서 상이한 QP 적응을 제공할 수 있는 상이한 코딩 레벨들, 예를 들어, 시퀀스 파라미터 세트(SPS), 픽처 파라미터 세트(PPS), 픽처 헤더, 코딩 블록 그룹 레벨 등에서 시그널링될 수 있다. 다음의 표는 QP 오프셋 시그널링이 SPS에서 수행되는 하나의 예를 제공한다.
표 12: QP 오프셋 시그널링이 SPS에서 수행되는 신택스 사양
sequence_parameter_set { 디스크립터
...
if(sps_act_enabled_flag){
sps_act_y_qp_offset_plus5 se(v)
sps_act_cg_qp_offset_minus1 se(v)
sps_ act_co_qp_offset_minus3 se(v)
}
...
}
또 다른 실시예에서, 하나의 하이-레벨 제어 플래그는 SPS 또는 PPS에서 추가된다(예컨대, picture_header_act_qp_offset_present_flag). 플래그가 제로와 동일할 때, 그것은 SPS 또는 PPS에서 시그널링되는 QP 오프셋들이 ACT 모드에서 코딩되는 모든 CU들에 적용될 것이라는 것을 의미한다. 이와 다르게, 플래그가 1과 동일할 때, 추가적인 QP 오프셋 신택스(예컨대, picture_header_y_qp_offset_plus5, picture_header_cg_qp_offset_minus1, 및 picture_header_co_qp_offset_minus3)는 하나의 특정 픽처에서 ACT CU들에 대한 적용된 QP 값들을 별도로 제어하기 위하여 픽처 헤더에서 추가로 시그널링될 수 있다.
다른 한편으로, 시그널링된 QP 오프셋들은 또한, 최종적인 ACT QP 값들을 유효한 동적 범위로 클립핑하기 위하여 적용되어야 한다. 추가적으로, 상이한 클립핑 범위는 변환으로 그리고 변환 없이 코딩되는 CU들에 적용될 수 있다. 예를 들어, 변환들이 적용되지 않을 때, 최종적인 QP는 4보다 작지 않아야 한다. ACP QP 오프셋들이 SPS 레벨에서 시그널링되는 것으로 가정하면, ACT CU들에 대한 대응하는 QP 값 유도 프로세스는 이하에서와 같이 설명될 수 있다:
Figure pat00021
또 다른 실시예에서는, 코딩 효율을 개선시키기 위하여, 인코더가 ACT CU들에 적용되는 QP 오프셋들을 조절하기 위한 더 많은 신축성들을 허용하기 위하여 PPS 레벨에서 ACT QP 오프셋들을 시그널링하면서, ACT 인에이블/디스에이블 플래그가 SPS 레벨에서 시그널링된다. 구체적으로, 설명된 변경들을 갖는 SPS 및 PPS 신택스 테이블들은 다음의 표에서 존재한다.
표 13: PPS 레벨에서 ACT QP 오프셋들을 시그널링하면서, ACT 인에이블/디스에이블 플래그가 SPS 레벨에서 시그널링되는 신택스 사양
seq_parameter_set_rbsp( ) { 디스크립터
...
if(chroma_format_idc == 3)
sps_act_enabled_flag u(1)
...
}
pic_parameter_set_rbsp( ) { 디스크립터
pps_act_qp_offset_present_flag u(1)
if( pps_act_qp_offset_present_flag ) {
pps_act_y_qp_offset_plus5 se(v)
pps_act_cg_qp_offset_minus1 se(v)
pps_act_co_qp_offset_minus3 se(v)
}
rbsp_trailing_bits( )
}
1과 동일한 pps_act_qp_offset_present_flag는 pps_act_y_qp_offset_plus5, pps_act_cg_qp_offset_minus1, 및 pps_act_co_qp_offset_minus3이 비트스트림에서 존재한다는 것을 특정한다. pps_act_qp_offset_present_flag가 0과 동일할 때, 신택스 엘리먼트들 pps_act_y_qp_offset_plus5, pps_act_cg_qp_offset_minus1, 및 pps_act_co_qp_offset_minus3이 비트스트림에서 존재하지 않는다. sps_act_enabled_flag가 0과 동일할 때, pps_act_qp_offset_present_flag의 값이 0이어야 한다는 것이 비트스트림 준수성이다.
pps_act_y_qp_offset_plus5, pps_act_cg_qp_offset_minus1, 및 pps_act_co_qp_offset_minus3은 cu_act_enabled_flag가 1과 동일한 코딩 블록의 루마 및 크로마 컴포넌트들에 대하여 이용된 양자화 파라미터의 값들에 적용되는 오프셋들을 결정하기 위하여 이용된다. 존재하지 않을 때, pps_act_y_qp_offset_plus5, pps_act_cg_qp_offset_minus1, 및 pps_act_cr_qp_offset_minus3의 값들은 0과 동일한 것으로 추론된다.
위의 PPS 시그널링에서, 크로마 잔차들의 공동 코딩(joint coding of chroma residuals)(JCCR) 모드가 적용되거나 또는 그렇지 않을 때, 동일한 QP 오프셋 값들이 ACT CU들에 적용된다. 하나의 신호 크로마 컴포넌트들의 잔차들만이 JCCR 모드에서 코딩된다는 것을 고려하면, 이러한 설계는 최적이 아닐 수 있다. 그러므로, 하나의 더 양호한 코딩 이득을 달성하기 위하여, JCCR 모드가 하나의 ACT CU에 적용될 때, 하나의 상이한 QP 오프셋이 크로마 컴포넌트들의 잔차들을 코딩하기 위하여 적용될 수 있다. 이러한 고려사항에 기초하여, 하나의 별도의 QP 오프셋 시그널링은 이하에서와 같이 특정된 바와 같이, JCCR 모드에 대한 PPS에서 추가된다.
표 14: 별도의 QP 오프셋 시그널링이 JCCR 모드에 대하여 PPS에서 추가되는 신택스 사양
pic_parameter_set_rbsp( ) { 디스크립터
pps_act_qp_offset_present_flag u(1)
if( pps_act_qp_offset_present_flag ) {
pps_act_y_qp_offset_plus5 se(v)
pps_act_cg_qp_offset_minus1 se(v)
pps_act_co_qp_offset_minus3 se(v)
pps_joint_cbcr_qp_offset se(v)
}
rbsp_trailing_bits( )
}
pps_joint_cbcr_qp_offset은 공동 크로마 잔차 코딩이 적용되는 코딩 블록의 크로마 잔차들에 대하여 이용된 양자화 파라미터의 값들에 적용되는 오프셋을 결정하기 위하여 이용된다. 존재하지 않을 때, pps_joint_cbcr_qp_offset의 값은 제로와 동일한 것으로 추론된다.
일부 실시예들에서, 도 10은 내부 루미 및 크로마 비트-심도들이 상이할 때, ACT를 처리하는 방법을 도시한다. 구체적으로, 도 10은 본 개시내용의 일부 구현예들에 따라, 루마 및 크로마 내부 비트-심도들이 상이할 때, 상이한 컴포넌트들에 대한 상이한 QP 오프셋들을 적용하는 디코딩 플로우차트이다.
현존하는 VVC 사양에 따르면, 루마 및 크로마 컴포넌트들은 코딩을 위하여 상이한 내부 비트-심도들(BitDepthY 및 BitDepthC로 나타내어짐)을 이용하도록 허용된다. 그러나, 현존하는 ACT 설계는 내부 루마 및 크로마 비트-심도들이 동일한다는 것을 항상 가정한다. 이 섹션에서, 방법들은 BitDepthY가 BitDepthC와 동일하지 않을 때에 ACT를 개선시키도록 구현된다.
제1 방법에서, ACT 툴은 내부 루마 비트-심도가 크로마 컴포넌트들의 그것과 동일하지 않을 때에 항상 디스에이블된다.
제2 방법에서는, 다른 컴포넌트의 비트 심도와 정합하기 위하여 더 작은 비트 심도를 갖는 컴포넌트를 좌측 시프트함으로써 루마 컴포넌트 및 크로마 컴포넌트들의 비트 심도들을 정렬하는 것이 제2 해결책에서 구현되고; 그 다음으로, 스케일링된 컴포넌트는 컬러 변환 후의 우측 비트 시프트를 통해 원래의 비트 심도로 재조절될 것이다.
HEVC와 유사하게, 양자화 스텝 크기는 QP의 각각의 증분(increment)과 함께 약
Figure pat00022
배 증가하고, 매 6 개의 증분들에 대하여 정확하게 2 배로 된다. 이러한 설계에 기초하여, 제2 방법에서는, 루마 및 크로마 사이의 내부 비트-심도를 보상하기 위하여,
Figure pat00023
만큼 더 작은 내부-비트 심도를 갖는 컴포넌트에 이용되는 QP 값을 증가시키는 것이 구현되고, 여기서,
Figure pat00024
은 루마 및 크로마 내부 비트-심도 사이의 차이이다. 그 다음으로, 컴포넌트의 잔차들은
Figure pat00025
비트들의 우측 시프트들을 적용함으로써 원래의 동적 범위로 시프트 백(shift back)된다. 도 10은 위의 방법이 적용될 때의 대응하는 디코딩 프로세스를 예시한다. 예를 들어, 입력 QP 값이 qp인 것으로 가정하면, Y, Cg, 및 Co 컴포넌트들에 적용되는 디폴트 QP 값들은 qp-5, qp-5, 및 qp-3과 동일하다. 또한, 루마 내부 비트-심도가 크로마 비트-심도보다 더 높은 것으로, 즉,
Figure pat00026
= BitDepthY - BitDepthC인 것으로 가정된다. 그 다음으로, 루마 및 크로마 컴포넌트들에 적용되는 최종적인 QP 값들은 qp-5, qp-5+6
Figure pat00027
, 및 qp-3+6
Figure pat00028
와 동일하다.
일부 실시예들에서는, 인코더 스피드-업 로직들이 구현된다. 하나의 CU의 잔차 코딩을 위한 컬러 공간을 선택하기 위하여, 가장 간단한 접근법은 인코더가 코딩 모드(예컨대, 인트라 코딩 모드, 인터 코딩 모드, 및 IBC 모드)를 2 번, 하나는 ACT가 인에이블된 상태로 그리고 다른 하나는 ACT가 디스에이브된 상태로 체크하게 하는 것이다. 이것은 인코딩 복잡도를 거의 2 배로 할 수 있다. ACT의 인코딩 복잡돌르 추가로 감소시키기 위하여, 다음의 인코더 스피드-업 로직들이 이 개시내용에서 구현된다:
첫째, YCgCo 공간은 RGB 공간보다 더 간결하므로, 입력 비디오가 RGB 포맷일 때, ACT 툴을 인에이블하는 레이트-왜곡(rate-distortion)(R-D) 비용을 먼저 체크하고, 그 다음으로, ACT 툴을 디스에이블하는 R-D 비용을 체크하는 것이 구현된다. 추가적으로, 컬러 공간 변환을 디스에이블하는 R-D 비용의 계산은 ACT가 인에이블될 때, 적어도 하나의 비-제로 계수가 있을 경우에 오직 행해진다. 대안적으로, 입력 비디오가 YCbCr 포맷일 때, ACT를 디스에이블하는 R-D 비용을 체크하고, 그 다음으로, ACT를 인에이블하는 R-D 체크를 행하는 것이 구현된다. 두 번째 R-D 체크(즉, ACT를 인에이블하는 것)는 ACT가 디스에이블될 때, 적어도 하나의 비-제로 계수가 있을 때에 오직 수행된다.
둘째, 테스팅된 코딩 모드들의 수를 감소시키기 위하여, 2 개의 컬러 공간들에 대하여 동일한 코딩 모드들을 이용하는 것이 구현된다. 더 구체적으로, 인트라 모드에 대하여, 전체 R-D 비용 비교를 위한 선택된 인트라 예측 모드들은 2 개의 컬러 공간들 사이에서 공유되고; 인터 모드에 대하여, 선택된 모션 벡터, 참조 픽처, 모션 벡터 예측자, 및 (인터 병합 모드에 대하여 이용된) 병합 인덱스는 2 개의 컬러 공간들 사이에서 공유되고; IBC 모드에 대하여, 선택된 블록 벡터 및 블록 벡터 예측자 및 (IBC 병합 모드에 대하여 이용된) 병합 인덱스는 2 개의 컬러 공간들 사이에서 공유된다.
셋째, VVC에서 이용된 쿼드/2진/3진-트리 파티션 구조 때문에, 하나의 동일한 블록 파티션은 상이한 파티션 조합들을 통해 획득될 수 있다. 컬러 공간 선택을 스피드-업하기 위하여, 하나의 동일한 블록이 상이한 파티션 경로를 통해 달성될 때, ACT 인에이블/디스에이블 판정을 이용하는 것이 구현된다. 구체적으로, 하나의 특정 CU의 잔차들을 코딩하기 위한 선택된 컬러 공간은 CU가 먼저 코딩될 때에 저장될 것이다. 그 다음으로, 동일한 CU가 또 다른 파티션 경로에 의해 획득될 때, 2 개의 공간들 사이에서 선택하는 대신에, 저장된 컬러 공간 판정이 직접적으로 재이용될 것이다.
넷째, 하나의 CU와 그 공간적 이웃들 사이의 강력한 상관을 고려하면, 얼마나 많은 컬러 공간들이 현재의 CU의 잔차 코딩을 위해 검사될 필요가 있는지를 판정하기 위하여 그 공간적 이웃하는 블록들의 컬러 공간 선택 정보를 이용하는 것이 구현된다. 예를 들어, 그 잔차들을 코딩하기 위하여 YCgCo 공간을 선택하는 충분한 수의 공간적 이웃하는 블록이 있을 경우에, 현재의 CU가 동일한 컬러 공간을 선택할 가능성이 있다는 것을 추론하는 것이 합리적이다. 대응하게도, 원래의 컬러 공간에서의 현재의 CU의 잔차들을 코딩하는 R-D 체크가 스킵될 수 있다. 원래의 컬러 공간을 선택하는 충분한 공간적 이웃들이 있을 경우에, YCgCo 도메인에서의 잔차 코딩의 R-D 체크가 우회될 수 있다. 이와 다를 경우에, 2 개의 컬러 공간들의 둘 모두가 테스팅될 필요가 있다.
다섯째, 동일한 영역에서 CU들 사이의 강력한 상관들이 있다는 것을 고려하면, 하나의 CU는 그 잔차들을 코딩하기 위한 그 부모 CU(parent CU)와 동일한 컬러 공간을 선택할 수 있다. 또는 자식 CU는 선택된 컬러 공간 및 각각의 컬러 공간의 RD 비용과 같은, 그 부모의 정보로부터 컬러 공간을 유도할 수 있다. 그러므로, 인코딩 복잡도를 단순화하기 위하여, RGB 도메인에서 잔차 코딩의 R-D 비용을 체크하는 것은 그 부모 CU의 잔차가 YCgCo 도메인에서 인코딩될 경우에 하나의 CU에 대하여 스킵될 것이고; 추가적으로, YCgCo 도메인에서 잔차 코딩의 RD 비용을 체크하는 것은 그 부모 CU의 잔차가 RGB 도메인에서 인코딩될 경우에 스킵될 것이다. 또 다른 보수적인 방식은 2 개의 컬러 공간들이 그 부모 CU의 인코딩에서 테스팅될 경우에 2 개의 컬러 공간들에서 그 부모 CU의 R-D 비용들을 이용하는 것이다. 그 부모 CU가 YCgCo 컬러 공간을 선택하고 YCgCo의 RD 비용이 RGB의 그것보다 훨씬 작을 경우에, 그리고 그 반대의 경우에, RGB 컬러 공간은 스킵될 것이다.
일부 실시예들에서, 4:4:4 비디오 코딩 효율은 크로마 컴포넌트들에 대한 루마-단독 코딩 툴들을 인에이블함으로써 개선된다. VVC 설계의 주요한 초점은 4:2:0 크로마 포맷으로 캡처된 비디오들에 대한 것이므로, 현존하는 인터/인트라 코딩 툴들의 대부분은 루마 컴포넌트에 대하여 오직 인에이블되지만, 크로마 컴포넌트들에 대하여 디스에이블된다. 그러나, 더 이전에 논의된 바와 같이, 4:4:4 크로마 포맷인 비디오 신호들은 4:2:0 비디오 신호들과 비교할 때에 상당히 상이한 특성들을 보인다. 예를 들어, 루마 컴포넌트와 유사하게, 4:4:4 YCbCr/RGB 비디오들의 Cb/B 및 Cr/R 컴포넌트들은 유용한 고-주파수 텍스처들 및 에지 정보를 종종 포함한다. 이것은 통상적으로 매우 평활하고 루마 컴포넌트보다 훨씬 더 적은 정보를 포함하는 4:2:0 비디오들에서의 크로마 컴포넌트들과 상이하다. 이러한 분석에 기초하여, 다음의 방법들은 입력 비디오가 4:4:4 크로마 포맷일 때, 현재의 VVC에서의 일부 루마-단독 코딩 툴들을 크로마 컴포넌트들로 확장하도록 구현된다.
첫째, 루마 보간 필터들은 크로마 컴포넌트들에 대하여 인에이블된다. HEVC와 같이, VVC 표준은 시간적 이웃하는 픽처들 사이의 중복성을 활용하기 위하여 모션 보상된 예측 기법을 사용하고, 이 기법은 Y 컴포넌트에 대한 하나의 16 픽셀 및 Cb 및 Cr 컴포넌트들에 대한 하나의 32 픽셀만큼 정확한 모션 벡터들을 지원한다. 분수 샘플(fractional sample)들은 분리가능한 8-탭 필터들의 세트를 이용하여 보간된다. 분리가능한 4-탭 필터들이 4:2:0 비디오 포맷의 경우에 대하여 이용되는 것을 제외하고는, Cb 및 Cr 컴포넌트들의 분수 보간은 Y 컴포넌트의 그것과 필수적으로 동일하다. 이것은 4:2:0 비디오들에 대하여, Cb 및 Cr 컴포넌트들은 Y 컴포넌트보다 훨씬 더 적은 정보를 포함하고, 4-탭 보간 필터들은 8-탭 보간 필터들을 이용하는 것과 비교할 때, Cb 및 Cr 컴포넌트들에 대한 모션 보상된 예측의 효율을 희생시키지 않으면서, 분수 보간 필터링의 복잡도를 감소시킬 수 있기 때문이다.
이전에 지적된 바와 같이, 현존하는 4-탭 크로마 보간 필터들은 4:4:4 비디오들에서의 크로마 컴포넌트들의 모션 보상된 예측을 위한 분수 샘플들을 보간하기 위하여 효율적이지 않을 수 있다. 그러므로, 개시내용의 하나의 실시예에서는, 4:4:4 비디오들에서의 루마 및 크로마 컴포넌트들의 둘 모두의 분수 샘플 보간들을 위한 (4:2:0 비디오들에서의 루마 컴포넌트에 대하여 이용되는) 8-탭 보간 필터들의 동일한 세트를 이용하는 것이 구현된다. 또 다른 실시예에서, 코딩 효율과 복잡도 사이의 더 양호한 절충을 위하여, 4:4:4 비디오들에서의 크로마 샘플들에 대한 적응적 보간 필터 선택을 가능하게 하는 것이 구현된다. 예를 들어, 하나의 보간 필터 선택 플래그는 8-탭 보간 필터들(또는 다른 보간 필터들) 또는 디폴트 4-탭 보간 필터들이 다양한 코딩 레벨들에서 크로마 컴포넌트들에 대하여 이용되는지 여부를 지시하기 위하여 SPS, PPS, 및/또는 슬라이스 레벨에서 시그널링될 수 있다.
둘째, PDPC 및 MRL은 크로마 컴포넌트들에 대하여 인에이블된다.
VVC에서의 포지션-종속적 인트라 예측 조합(PDPC) 툴은 비필터링된 참조 샘플들과의 인트라 예측 샘플들의 가중화된 조합을 채용함으로써 위의 사상을 확장한다. 현재의 VVC 작업 초안에서, PDPC는 시그널링 없이 다음의 인트라 모드들에 대하여 인에이블된다: 평면형, DC, 수평(즉, 모드 18), 수직(즉, 모드 50), 하부-좌측 대각선 방향들에 근접한 각도 방향들(즉, 모드 2, 3, 4, ..., 10), 및 상부-우측 대각선 방향들에 근접한 각도 방향들(즉, 모드 58, 59, 60, ..., 66). 좌표 (x, y)로서 위치된 예측 샘플이 pred(x,y)인 것으로 가정하면, PDPC 이후의 그 대응하는 값은 다음으로서 계산되고
Figure pat00029
여기서, Rx,-1, R-1,y는 현재의 샘플 (x, y)의 상부 및 좌측에서 위치된 참조 샘플들을 각각 표현하고, R-1,-1은 현재의 블록의 상부-좌측 코너에서 위치된 참조 샘플을 표현한다. 위의 수학식에서의 가중치들 wL, wT, 및 wTL은 다음과 같이 설명된 바와 같이 예측 모드 및 샘플 포지션에 따라 적응적으로 선택되고, 여기서, 현재의 코딩 블록은 W × H의 크기인 것으로 가정된다:
DC 모드에 대하여,
Figure pat00030
평면형 모드에 대하여,
Figure pat00031
수평 모드에 대하여:
Figure pat00032
수직 모드에 대하여:
Figure pat00033
하부-좌측 대각선 방향들에 대하여:
Figure pat00034
상부-우측 대각선 방향들에 대하여:
Figure pat00035
재구성된 샘플들의 오직 최근접 행/열이 참조인 HEVC와 달리, 2 개의 추가적인 행들/열들이 인트라 예측을 위하여 이용되는 VVC에서 멀티-참조 라인(multi-reference line)(MRL)이 도입된다. 선택된 참조 행/열의 인덱스는 인코더로부터 디코더로 시그널링된다. 비-최근접 행/열이 선택될 때, 평면형 및 DC 모드들은 현재의 블록을 예측하기 위하여 이용될 수 있는 인트라 모드들의 세트로부터 제외된다.
현재의 VVC 설계에서, PDPC 툴은 인트라 예측 샘플들 사이의 불연속성 및 재구성된 이웃하는 샘플들로부터 유도된 그 참조 샘플들을 감소/제거하기 위하여 루마 컴포넌트에 의해 오직 채용된다. 그러나, 더 이전에 언급된 바와 같이, 4:4:4 크로마 포맷인 비디오 신호들에서의 크로마 블록들에서 풍부한 텍스처 정보가 있을 수 있다. 그러므로, 예측 품질을 개선시키기 위하여 비필터링된 참조 샘플들 및 인트라 예측 샘플들의 가중화된 평균을 이용하는 PDPC와 같은 툴은 또한, 4:4:4 비디오들의 크로마 코딩 효율을 개선시키기 위하여 유익해야 한다. 이러한 고려사항에 기초하여, 개시내용의 하나의 실시예에서는, 4:4:4 비디오들에서의 크로마 컴포넌트들의 인트라 예측을 위한 PDPC 프로세스를 가능하게 하는 것이 구현된다.
동일한 고려사항은 또한, MRL 툴로 확장될 수 있다. 현재의 VVC에서, MRL은 크로마 컴포넌트들에 적용될 수 없다. 개시내용의 실시예에 기초하여, 하나의 인트라 CU의 크로마 컴포넌트들에 대한 하나의 MRL 인덱스를 시그널링함으로써 4:4:4 비디오들을 위한 크로마 컴포넌트들에 대한 MRL을 인에이블 하는 것이 구현된다. 상이한 방법들은 이 실시예에 기초하여 이용될 수 있다. 하나의 방법에서, 하나의 추가적인 MRL 인덱스는 시그널링될 수 있고 Cb/B 및 Cr/R 컴포넌트들의 둘 모두에 의해 공유될 수 있다. 또 다른 방법에서는, 각각의 크로마 컴포넌트에 대하여 하나인 2 개의 MRL 인덱스들을 시그널링하는 것이 구현된다. 제3 방법에서는, 추가적인 MRL 시그널링이 크로마 컴포넌트들에 대한 MRL을 인에이블하기 위하여 필요하지 않도록, 크로마 컴포넌트들의 인트라 예측을 위한 루마 MRL 인덱스를 재이용하는 것이 구현된다.
셋째, ISP는 크로마 컴포넌트들에 대하여 인에이블된다.
일부 실시예들에서, 서브-파티션 예측(sub-partition prediction)(ISP)으로 칭해진 하나의 코딩 툴은 인트라 코딩 효율을 추가로 개선시키기 위하여 VVC로 도입된다. 기존의 인트라 모드는 블록의 인트라 예측 샘플들을 생성하기 위하여 하나의 CU에 이웃하는 재구성된 샘플들을 오직 사용한다. 이러한 설계에 기초하여, 예측된 샘플들과 참조 샘플들 사이의 공간적 상관은 이들 사이의 거리에 대략적으로 비례적이다. 그러므로, 내부 부분에서의 샘플들(특히, 블록의 하부-우측 코너에서 위치된 샘플들)은 통상적으로, 블록 경계들에 근접한 샘플들보다 열악한 예측 품질을 가진다. 블록 크기에 따라, ISP는 현재의 CU를 수평 또는 수직 방향의 어느 하나에서의 2 또는 4 개의 서브블록들로 분할하고, 각각의 서브-블록은 적어도 16 개의 샘플들을 포함한다. 하나의 서브블록에서의 재구성된 샘플들은 다음 서브블록에서의 샘플들을 예측하기 위한 참조들로서 이용될 수 있다. 위의 프로세스는 현재의 CU 내의 모든 서브블록들이 코딩될 때까지 반복된다. 추가적으로, 시그널링 오버헤드를 감소시키기 위하여, 하나의 ISP CU 내부의 모든 서브블록들은 동일한 인트라 모드를 공유한다. 추가적으로, 현존하는 ISP 설계에 따르면, 서브블록 파티션은 루마 컴포넌트에 오직 적용가능하다. 구체적으로, 하나의 ISP CU의 오직 루마 샘플들은 다수의 서브블록들(또는 TU들)로 추가로 분할될 수 있고, 각각의 루마 서브블록들은 별도로 코딩된다. 그러나, ISP CU의 크로마 샘플들은 분할되지 않는다. 다시 말해서, 크로마 컴포넌트들에 대하여, CU는 추가의 파티셔닝 없이, 인트라 예측, 변환, 양자화, 및 엔트로피 코딩을 위한 프로세싱 유닛으로서 이용된다.
현재의 VVC에서, ISP 모드가 인에이블될 때, TU 파티션은 루마 샘플들에 오직 적용되는 반면, 크로마 샘플들은 다수의 TU들로 추가로 분할하지 않으면서 코딩된다. 개시내용의 실시예에 따르면, 크로마 평면들에서의 풍부한 텍스처 정보로 인해, 4:4:4 비디오들에서의 크로마 코딩을 위한 ISP 모드를 또한 인에이블하는 것이 구현된다. 상이한 방법들은 이 실시예에 기초하여 이용될 수 있다. 하나의 방법에서, 하나의 추가적인 ISP 인덱스는 시그널링되고, 2 개의 크로마 컴포넌트들에 의해 공유된다. 또 다른 방법에서는, Cb/B에 대한 하나 및 Cr/R에 대한 다른 하나인 2 개의 추가적인 ISP 인덱스들을 별도로 시그널링하는 것이 구현된다. 제3 방법에서는, 2 개의 크로마 컴포넌트들의 ISP 예측을 위하여 루마 컴포넌트들에 대하여 이용되는 ISP 인덱스를 재이용하는 것이 구현된다.
넷째, 행렬 기반 인트라 예측(Matrix based intra prediction)(MIP)은 새로운 인트라 예측 기법으로서 크로마 컴포넌트들에 대하여 인에이블된다.
W 및 높이 H의 직사각형 블록의 샘플들을 예측하기 위하여, MIP는 블록의 좌측의 H 개의 재구성된 이웃하는 경계 샘플들의 하나의 라인, 및 블록 상부의 W 개의 재구성된 이웃하는 경계 샘플들의 하나의 라인을 입력으로서 취한다. 재구성된 샘플들이 이용불가능할 경우에, 이들은 기존의 인트라 예측에서 행해진 바와 같이 생성된다.
일부 실시예들에서, MIP 모드는 루마 컴포넌트들에 대하여 오직 인에이블된다. 크로마 컴포넌트들에 대하여 ISP 모드를 인에이블하는 동일한 이유들로 인해, 하나의 실시예에서는, 444 비디오들을 위한 크로마 컴포넌트들에 대하여 MIP를 인에이블하는 것이 구현된다. 2 개의 시그널링 방법들이 적용될 수 있다. 제1 방법에서는, 하나가 루마 컴포넌트에 대하여 이용되고 다른 하나가 2 개의 크로마 컴포넌트들에 대하여 이용되는 2 개의 MIP 모드들을 별도로 시그널링하는 것이 구현된다. 제2 방법에서는, 루마 및 크로마 컴포넌트들에 의해 공유된 하나의 단일 MIP 모드를 오직 시그널링하는 것이 구현된다.
다섯째, 다수 변환 선택(Multiple Transform Selection)(MTS)은 크로마 컴포넌트들에 대하여 인에이블된다.
HEVC에서 채용되었던 DCT-II에 추가적으로, MTS 방식은 인터 및 인트라 코딩된 블록들의 둘 모두를 잔차 코딩하기 위하여 이용된다. 그것은 DCT8/DST7로부터의 다수의 선택된 변환들을 이용한다. 새롭게 도입된 변환 행렬들은 DST-VII 및 DCT-VIII이다.
현재의 VVC에서, MTS 툴들은 루마 컴포넌트들에 대하여 오직 인에이블된다. 개시내용의 하나의 실시예에서는, 444 비디오들을 위한 크로마 컴포넌트들에 대하여 MIP를 인에이블하는 것이 구현된다. 2 개의 시그널링 방법들이 적용될 수 있다. 제1 방법에서는, MTS가 하나의 CU에 대하여 인에이블될 때, 하나가 루마 컴포넌트에 대하여 이용되고 다른 하나가 2 개의 크로마 컴포넌트들에 대하여 이용되는 2 개의 변환 인덱스들을 별도로 시그널링하는 것이 구현된다. 제2 방법에서는, MTS가 인에이블될 때, 루마 및 크로마 컴포넌트들에 의해 공유되는 하나의 변환 인덱스를 시그널링하는 것이 구현된다.
일부 실시예들에서, 고정된 룩업 테이블이 루마 QP에 기초하여 크로마 컴포넌트들로부터 이용된 양자화 파라미터(QP)를 유도하기 위하여 이용되는 HEVC 표준과 달리, 루마-투-크로마(luma-to-chroma) 맵핑 테이블은 VVC 표준에서 인코더로부터 디코더로 송신되고, 이는 피스별 선형 함수의 몇몇 피봇 포인트(pivot point)들에 의해 정의된다. 구체적으로, 루마-투-크로마 맵핑 테이블의 신택스 엘리먼트들 및 재구성 프로세스는 이하에서와 같이 설명된다:
표 15: 루마-투-크로마 맵핑 테이블의 신택스 엘리먼트들 및 재구성 프로세스
seq_parameter_set_rbsp( ) { 디스크립터
....
if( ChromaArrayType != 0 ) {
same_qp_table_for_chroma u(1)
numQpTables = same_qp_table_for_chroma ? 1 : ( sps_joint_cbcr_enabled_flag ? 3 : 2 )
for( i = 0; i < numQpTables; i++ ) {
qp_table_start_minus26[ i ] se(v)
num_points_in_qp_table_minus1[ i ] ue(v)
for( j = 0; j <= num_points_in_qp_table_minus1[ i ]; j++ ) {
delta_qp_in_val_minus1[ i ][ j ] ue(v)
delta_qp_diff_val[ i ][ j ] ue(v)
}
}
}
....
}
1과 동일한 same_qp_table_for_chroma는, 오직 하나의 크로마 QP 맵핑 테이블이 시그널링되고 이 테이블은 Cb 및 Cr 잔차들 및 추가적으로, sps_joint_cbcr_enabled_flag가 1과 동일할 때에 공동 Cb-Cr 잔차들에 적용된다는 것을 특정한다. 0과 동일한 same_qp_table_for_chroma는, Cb 및 Cr에 대하여 2 개 및 sps_joint_cbcr_enabled_flag가 1과 동일할 때에 공동 Cb-Cr에 대하여 추가적인 하나인 크로마 QP 맵핑 테이블들이 SPS에서 시그널링된다는 것을 특정한다. same_qp_table_for_chroma가 비트스트림에서 존재하지 않을 때, same_qp_table_for_chroma의 값은 1과 동일한 것으로 추론된다.qp_table_start_minus26[ i ] 플러스(plus) 26은 i-번째 크로마 QP 맵핑 테이블을 설명하기 위하여 이용된 시작 루마 및 크로마 QP를 특정한다. qp_table_start_minus26[ i ]의 값은 -26 - QpBdOffset 내지 36까지의 범위에 있을 것이다. qp_table_start_minus26[ i ]이 비트스트림에서 존재하지 않을 때, qp_table_start_minus26[ i ]의 값은 0과 동일한 것으로 추론된다.
num_points_in_qp_table_minus1[ i ] 플러스 1은 i-번째 크로마 QP 맵핑 테이블을 설명하기 위하여 이용된 포인트들의 수를 특정한다. num_points_in_qp_table_minus1[ i ]의 값은 0 내지 63 + QpBdOffset까지의 범위일 것이다. num_points_in_qp_table_minus1[ 0 ]이 비트스트림에서 존재하지 않을 때, num_points_in_qp_table_minus1[ 0 ]의 값은 0과 동일한 것으로 추론된다.
delta_qp_in_val_minus1[ i ][ j ]은 i-번째 크로마 QP 맵핑 테이블의 j-번째 피봇 포인트의 입력 좌표를 유도하기 위하여 이용된 델타 값을 특정한다. delta_qp_in_val_minus1[ 0 ][ j ]이 비트스트림에서 존재하지 않을 때, delta_qp_in_val_minus1[ 0 ][ j ]의 값은 0과 동일한 것으로 추론된다.
delta_qp_diff_val[ i ][ j ]는 i-번째 크로마 QP 맵핑 테이블의 j-번째 피봇 포인트의 출력 좌표를 유도하기 위하여 이용된 델타 값을 특정한다.
i = 0..numQpTables - 1에 대한 i-번째 크로마 QP 맵핑 테이블 ChromaQpTable[ i ]은 다음과 같이 유도된다:
Figure pat00036
Figure pat00037
일부 실시예들에서, RGB 비디오들을 위한 개선된 루마-투-크로마 맵핑 함수가 본 명세서에서 개시된다.
일부 실시예들에서, 입력 비디오가 RGB 포맷일 때, 하나의 2-피스 선형 함수는 루마 QP들을 크로마 QP들로 맵핑하기 위하여 인코더로부터 디코더로 송신된다. 이것은 신택스 엘리먼트 same_qp_table_for_chroma = 1, qp_table_start_minus26[0] = 0, num_points_in_qp_table_minus1[0] = 0, delta_qp_in_val_minus1[0][0] = 0, 및 delta_qp_diff_val[0][0] = 0을 설정함으로써 행해진다. 구체적으로, 대응하는 루마-투-크로마 QP 맵핑 함수는 다음으로서 정의된다
Figure pat00038
(5)
내부 코딩 비트-심도가 10-비트인 것으로 가정하면, 표 16은 RGB 코딩을 위하여 적용되는 루마-투-크로마 QP 맵핑 함수를 예시한다.
표 16: RGB 코딩을 위하여 이용된 루마-투-크로마 QP 맵핑 테이블
루마
QP
-12 -11 -10 …… 25 26 27 28 29 …… 60 61 62 63
크로마QP -12 -11 -10 …… 25 26 26 27 28 …… 59 60 61 62
(5)에서 도시된 바와 같이, 루마 QP가 26보다 클 때, 비동일한 QP 값들은 루마 및 크로마 컴포넌트들을 코딩하기 위하여 이용된다. 일부 실시예들에서는, 다음의 수학식에 의해 특정된 바와 같이, 모드 판정을 위한 R-D 비용을 계산할 때, 가중화된 크로마 왜곡이 이용된다는 것을 고려하면, 비동일한 QP 값들은 양자화/탈-양자화 프로세스 뿐만 아니라, 레이트-왜곡(R-D) 최적화 동안에 행해지는 판정들에 대해 영향들을 가진다.
Figure pat00039
(6)
여기서,
Figure pat00040
Figure pat00041
은 각각 루마 및 크로마 컴포넌트들의 왜곡이고;
Figure pat00042
은 비트들의 수이고;
Figure pat00043
은 라그랑제 승수(Lagrange multiplier)이고;
Figure pat00044
은 다음으로서 계산되는 크로마 왜곡을 위한 가중화 파라미터이다
Figure pat00045
(7)
그러나, YCbCr/YUV 비디오들과 비교하면, RGB 비디오들의 3 개의 채널들 사이에는 더 강력한 상관이 있다. 그러므로, 강력한 텍스처들 및 고-주파수 정보는 통상적으로, 비디오 컨텐츠가 RGB 포맷으로 캡처될 때, 즉, R, G, 및 B에서의 정보가 동일하게 중요할 때에 모든 3 개의 컴포넌트들에서 존재한다. 그러므로, 개시내용의 하나의 실시예에서, 동일한 QP 값들은 RGB 코딩을 위하여 모든 3 개의 채널들에 적용된다. 이것은 대응하는 루마-투-크로마 QP 맵핑 신택스 엘리먼트들을 same_qp_table_for_chroma = 1, qp_table_start_minus26[0] = 0, num_points_in_qp_table_minus1[0] = 0, delta_qp_in_val_minus1[0][0] = 0, 및 delta_qp_diff_val[0][0] = 1로서 설정함으로써 행해질 수 있다. 대응하게도, 본 명세서에서 개시된 방법으로, RGB 루마-투-크로마 맵핑 함수는 수학식 (8) 및 표 17에 의해 예시된다.
Figure pat00046
(8)
표 17: RGB 코딩을 위하여 이용된 루마-투-크로마 QP 맵핑 테이블
루마
QP
-12 -11 -10 …… 25 26 27 28 29 …… 60 61 62 63
크로마QP -12 -11 -10 …… 25 26 27 28 29 …… 60 61 62 63
도 11a 및 도 11b는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더가 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정하기 위하여 클립핑의 기법을 구현하게 하는 예시적인 비디오 디코딩 프로세스들을 예시하는 블록도들이다.
더 구체적으로, 도 11a는 클립핑 동작(1102)이 역 ACT(1104)의 입력에 적용되는 예들을 도시한다. 도 11b는 클립핑 동작들(1102 및 1106)이 역 ACT(1104)의 입력 및 출력의 둘 모두에 적용되는 예들을 도시한다. 일부 실시예들에서, 클립핑 동작들(1102 및 1106)은 동일하다. 일부 실시예들에서는, 클립핑 동작들(1102 및 1106)이 상이하다.
일부 실시예들에서, 비트-심도 제어 방법은 ACT로 구현된다. 현존하는 ACT 설계에 따르면, 디코더에서의 역 ACT 프로세스에 대한 입력은 다른 잔차 디코딩 프로세스들, 예컨대, 역 변환, 역 BDPCM, 및 역 JCCR로부터의 출력 잔차들이다. 현재의 구현예에서, 그 잔차 샘플들은 16-비트 부하 정수들의 최대치에 도달할 수 있다. 이러한 설계에 의해, 역 ACT는 16-비트 구현예에 의해 구현될 수 없고, 이것은 하드웨어 구현을 위하여 매우 고가이다. 이러한 쟁점을 해결하기 위하여, 하나의 클립핑 동작은 역 ACT 프로세스의 입력 잔차들에 적용된다. 하나의 실시예에서, 다음의 클립핑 동작은 역 ACT 프로세스의 입력 잔차들에 적용된다:
Figure pat00047
여기서, Bitdepth는 내부 코딩 비트-심도이다.
또 다른 실시예에서, 또 다른 클립핑 동작은 이하에서 도시된 바와 같은 역 ACT 프로세스의 입력 잔차들에 적용된다:
Figure pat00048
추가적으로, 또 다른 실시예에서, 클립핑 동작은 역 ACT의 출력 잔차들에 적용된다. 하나의 실시예에서, 다음의 클립핑 동작은 역 ACT의 출력에 적용된다:
Figure pat00049
또 다른 실시예에서, 다음의 클립핑 동작은 역 ACT의 출력에 적용된다:
Figure pat00050
도 5b에서 도시된 리프팅 동작들에서 도시된 바와 같이, 가역적 YCgCo 변환이 적용될 때, 리프팅 동작으로 인해, Cg 및 Co 컴포넌트들의 동적 범위는 1 비트만큼 증가될 것이다. 그러므로, 가역적 YCgCo 변환으로부터 출력된 잔차 샘플들의 정밀도를 유지하기 위하여, 하나의 실시예에서, 역 ACT의 입력 잔차들은 다음의 수학식에 기초하여 클립핑된다:
Figure pat00051
또 다른 실시예에서, 상이한 클립핑 동작들은 역 ACT에 대한 입력 Y, Cg, 및 Co 잔차들에 적용된다. 구체적으로, Y 컴포넌트의 비트-심도가 가역적 ACT 변환 전후에 비변경된 상태로 유지하므로, 역 ACT에 대한 입력 루마 잔차들은 다음의 동작에 의해 클립핑된다:
Figure pat00052
Cg 및 Co 컴포넌트들에 대하여, 증가된 비트-심도로 인해, 역 ACT에 대한 대응하는 입력 잔차들은 다음의 동작에 의해 클립핑된다:
Figure pat00053
또 다른 실시예에서, 역 ACT에 대한 입력 잔차들은 다음의 동작에 의해 클립핑된다:
Figure pat00054
여기서,
Figure pat00055
은 하나의 고정된 수이다.
도 12는 본 개시내용의 일부 구현예들에 따라, 비디오 디코더(예컨대, 비디오 디코더(30))가 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정하기 위하여 클립핑 동작을 수행함으로써 비디오 데이터를 디코딩하게 하는 예시적인 프로세스를 예시하는 플로우차트(1200)이다.
비디오 디코더(30)는 비트스트림으로부터, 코딩 유닛에 대응하는 비디오 데이터를 수신하고, 여기서, 코딩 유닛은 인트라-예측 모드 또는 인터-예측 모드에 의해 코딩된다(1210).
비디오 디코더(30)는 그 다음으로, 비디오 데이터로부터 제1 신택스 엘리먼트를 수신한다. 제1 신택스 엘리먼트는 코딩 유닛이 적응적 컬러-공간 변환(ACT)을 이용하여 코딩되었는지 여부를 지시한다(1220).
비디오 디코더(30)는 그 다음으로, 코딩 유닛의 잔차들을 생성하기 위하여 비디오 데이터를 프로세싱한다(1230). 코딩 유닛이 ACT를 이용하여 코딩되었다는 제1 신택스 엘리먼트에 기초한 결정에 따라, 비디오 디코더(30)는 코딩 유닛의 잔차들에 대한 클립핑 동작을 수행한다(1240). 비디오 디코더(30)는 클립핑 동작 후에, 역 ACT를 코딩 유닛의 잔차들에 적용한다(1250).
일부 실시예들에서, 클립핑 동작은 역 ACT에 의한 프로세싱을 위한 미리 정의된 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 한정한다.
일부 실시예들에서, 클립핑 동작은 다음으로서 정의되고
Figure pat00056
여기서, M은 클립핑 동작에 대한 입력이고, Bitdepth는 내부 코딩 비트-심도이고,
Figure pat00057
Figure pat00058
로부터
Figure pat00059
까지의 범위 내에 있는 클립핑 동작의 출력이다. 일부 실시예들에서, 입력 M이
Figure pat00060
보다 작을 경우에, 클립핑 동작의 출력은
Figure pat00061
로 설정된다. 일부 실시예들에서, 입력 M이
Figure pat00062
보다 클 경우에, 클립핑 동작의 출력은
Figure pat00063
로 설정된다.
일부 실시예들에서, 클립핑 동작은 다음으로서 정의되고
Figure pat00064
여기서, M은 클립핑 동작에 대한 입력이고, Bitdepth는 내부 코딩 비트-심도이고,
Figure pat00065
Figure pat00066
로부터
Figure pat00067
까지의 범위 내에 있는 클립핑 동작의 출력이다. 일부 실시예들에서, 입력 M이
Figure pat00068
보다 작을 경우에, 클립핑 동작의 출력은
Figure pat00069
로 설정된다. 일부 실시예들에서, 입력 M이
Figure pat00070
보다 클 경우에, 클립핑 동작의 출력은
Figure pat00071
로 설정된다.
일부 실시예들에서, 클립핑 동작을 수행하기 전에, 비디오 디코더(30)는 역 변환을 코딩 유닛의 잔차들에 적용한다.
일부 실시예들에서, 역 ACT를 코딩 유닛의 잔차들에 적용한 후에, 비디오 디코더(30)는 제2 클립핑 동작을 코딩 유닛의 잔차들에 적용한다.
일부 실시예들에서, 클립핑 동작은 역 ACT에 의해 구현된 고정된 내부 코딩 비트-심도 범위 내에서 코딩 유닛의 잔차들의 동적 범위를 조절한다.
일부 실시예들에서, 고정된 내부 코딩 비트-심도는 15이다.
일부 실시예들에서, 비디오 데이터로부터 제1 신택스 엘리먼트를 수신한 후에, 비디오 디코더(30)는 비디오 데이터로부터 제2 신택스 엘리먼트를 수신하고, 여기서, 제2 신택스 엘리먼트는 클립핑 동작에서 이용된 가변 내부 코딩 비트-심도를 지시한다.
일부 실시예들에서, 비디오 데이터로부터 제1 신택스 엘리먼트를 수신한 후에, 비디오 디코더(30)는 비디오 데이터로부터 제2 신택스 엘리먼트를 수신하고, 여기서, 제2 신택스 엘리먼트는 제1 내부 코딩 비트-심도를 지시하고, 클립핑 동작에서 이용된 제2 내부 코딩 비트-심도는 제1 내부 코딩 비트-심도 플러스 1이다.
일부 실시예들에서, 클립핑 동작은 코딩 유닛의 잔차들의 루마 컴포넌트에 적용된 제1 클립핑 동작, 및 코딩 유닛의 잔차들의 크로마 컴포넌트들에 적용된 제2 클립핑 동작을 더 포함한다.
일부 실시예들에서, 제1 클립핑 동작은 코딩 유닛의 잔차들의 루마 컴포넌트의 동적 범위를 제1 내부 코딩 비트-심도 플러스 1의 범위 내에 있도록 한정하고, 제2 클립핑 동작은 코딩 유닛의 잔차들의 크로마 컴포넌트들의 동적 범위를 제2 내부 코딩 비트-심도 플러스 1의 범위 내에 있도록 한정하고, 제2 내부 코딩 비트-심도는 제1 내부 코딩 비트-심도 플러스 1이다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수 있다. 소프트웨어로 구현될 경우, 기능들은 하나 이상의 명령들 또는 코드로서, 컴퓨터-판독가능 매체 상에 저장되거나 컴퓨터-판독가능 매체 상에서 송신될 수 있고, 하드웨어-기반 프로세싱 유닛에 의해 실행될 수 있다. 컴퓨터-판독가능 매체들은 데이터 저장 매체들과 같은 유형의 매체에 대응하는 컴퓨터-판독가능 저장 매체들, 또는 예컨대, 통신 프로토콜에 따라 하나의 장소로부터 또 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들을 포함할 수 있다. 이러한 방식으로, 컴퓨터 판독가능 매체는 일반적으로 (1) 비-일시적인 유형의 컴퓨터 판독가능 저장 매체 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체들은 본 출원에서 설명된 구현예들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위하여 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수 있다.
본 명세서에서의 구현예들의 설명에서 이용된 용어는 오직 특정한 구현예들을 설명하는 목적을 위한 것이고, 청구항들의 범위를 제한하도록 의도되지 않는다. 구현예들의 설명 및 첨부된 청구항들에서 이용된 바와 같이, 단수 형태들 "a", "an", 및 "the"는 문맥이 명확하게 이와 다르게 지시하지 않으면, 복수 형태들을 마찬가지로 포함하도록 의도된다. 본 명세서에서 이용된 바와 같은 용어 "및/또는(and/or)"은 연관된 열거된 항목들 중의 하나 이상의 항목의 임의의 그리고 모든 가능한 조합들을 지칭하고 이를 망라한다는 것이 또한 이해될 것이다. 이 명세서에서 이용될 때, 용어들 "포함한다(comprises)" 및/또는 "포함하는(comprising)"은 기재된 특징들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 이상의 다른 특징들, 엘리먼트들, 컴포넌트들, 및/또는 그 그룹들의 존재 또는 추가를 배제하지 않는다는 것이 추가로 이해될 것이다.
용어들 제1, 제2 등은 다양한 엘리먼트들을 설명하기 위하여 본 명세서에서 이용될 수 있지만, 이 엘리먼트들은 이 용어들에 의해 제한되지 않아야 한다는 것이 또한 이해될 것이다. 이 용어들은 하나의 엘리먼트를 또 다른 것으로부터 구별하기 위하여 오직 이용된다. 예를 들어, 구현예들의 범위로부터 이탈하지 않으면서, 제1 전극은 제2 전극으로 칭해질 수 있고, 유사하게, 제2 전극은 제1 전극으로 칭해질 수 있다. 제1 전극 및 제2 전극은 둘 모두 전극들이지만, 이들은 동일한 전극이 아니다.
본 출원의 설명은 예시 및 설명의 목적들을 위하여 제시되었고, 철저한 것으로 또는 개시된 형태인 발명으로 제한되도록 의도되지 않는다. 많은 수정들, 변형들, 및 대안적인 구현예들은 상기한 설명들 및 연관된 도면들에서 제시된 교시사항들의 이익을 가지는 본 기술분야에서의 통상의 기술자들에게 분명할 것이다. 실시예는 발명의 실제적인 응용예의 원리들을 최상으로 설명하기 위하여, 그리고 본 기술분야에서의 통상의 기술자들이 다양한 구현예들에 대한 발명을 이해하고 고려된 특정한 이용에 적합한 바와 같이, 기초적인 원리들 및 다양한 수정들을 갖는 다양한 구현예들을 최상으로 사용하는 것을 가능하게 하기 위하여 선택되었고 설명되었다. 그러므로, 청구항들의 범위는 개시된 구현예들의 특정 예들로 제한되지 않아야 한다는 것과, 수정들 및 다른 구현예들이 첨부된 청구항들의 범위 내에 포함되도록 의도된다는 것이 이해되어야 한다.

Claims (11)

  1. 비디오 데이터를 인코딩하는 방법으로서,
    비디오 픽처로부터 분할된 복수의 코딩 유닛(CU)들을 획득하는 단계 - 상기 복수의 코딩 유닛들 각각은 인트라 예측 모드 또는 인터 예측 모드에 의해 인코딩됨 -;
    상기 복수의 코딩 유닛들의 각 코딩 유닛에 대해:
    제1 신택스 엘리먼트를 생성하는 단계 - 상기 제1 신택스 엘리먼트는 적응적 컬러-공간 변환(adaptive color-space transform, ACT)을 사용하여 코딩되었지 여부를 지시함 -; 및
    상기 제1 신택스 엘리먼트를 디코딩 측으로 전송하여, 상기 코딩 유닛이 상기 ACT를 사용하여 인코딩되었음을 상기 제1 신택스 엘리먼트로부터 결정할 때, 상기 디코딩 측이:
    상기 코딩 유닛의 잔차들에 클립핑 동작을 수행하는 단계; 및
    상기 클립핑 동작 후에 역 ACT를 상기 코딩 유닛의 잔차들에 적용하는 단계
    를 포함하는 동작들을 수행하는 단계
    를 포함하고,
    상기 클립핑 동작은, 상기 역 ACT에 의한 프로세싱을 위한 고정된 내부 코딩 비트-심도에 기초하여 결정되는 고정된 내부 코딩 비트-심도 범위 내에서 상기 코딩 유닛의 상기 잔차들의 동적 범위를 조절하는, 방법.
  2. 제1항에 있어서,
    상기 클립핑 동작은,
    Figure pat00072
    으로서 정의되고,
    M은 상기 클립핑 동작에 대한 입력이고, Bitdepth는 상기 고정된 내부 코딩 비트-심도이고,
    Figure pat00073
    Figure pat00074
    로부터
    Figure pat00075
    까지의 상기 고정된 내부 코딩 비트-심도 범위 내에 있는 상기 클립핑 동작의 출력인, 방법.
  3. 제1항에 있어서,
    상기 동작들은 상기 클립핑 동작을 수행하기 전에, 역 변환을 상기 코딩 유닛의 상기 잔차들을 생성하기 위해 적용하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서,
    상기 동작들은 상기 역 ACT를 상기 코딩 유닛의 상기 잔차들에 적용한 후에, 제2 클립핑 동작을 상기 코딩 유닛의 상기 잔차들에 적용하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서,
    상기 고정된 내부 코딩 비트-심도는 15인, 방법.
  6. 제1항에 있어서,
    상기 제1 신택스 엘리먼트를 생성한 후에, 제2 신택스 엘리먼트를 생성하는 단계 - 상기 제2 신택스 엘리먼트는 제1 고정된 내부 코딩 비트-심도를 지시하고, 상기 클립핑 동작에서 이용된 제2 고정된 내부 코딩 비트-심도는 상기 제1 고정된 내부 코딩 비트-심도 플러스 1임 - 를 더 포함하는 방법.
  7. 제1항에 있어서,
    상기 클립핑 동작은 상기 코딩 유닛의 상기 잔차들의 루마 컴포넌트에 적용된 제1 클립핑 동작, 및 상기 코딩 유닛의 상기 잔차들의 크로마 컴포넌트들에 적용된 제2 클립핑 동작을 더 포함하는, 방법.
  8. 제7항에 있어서,
    상기 제1 클립핑 동작은 상기 코딩 유닛의 상기 잔차들의 상기 루마 컴포넌트의 동적 범위를 제1 고정된 내부 코딩 비트-심도 플러스 1의 범위 내에 있도록 한정하고, 상기 제2 클립핑 동작은 상기 코딩 유닛의 상기 잔차들의 상기 크로마 컴포넌트들의 동적 범위를 제2 고정된 내부 코딩 비트-심도 플러스 1의 범위 내에 있도록 한정하고, 상기 제2 고정된 내부 코딩 비트-심도는 상기 제1 고정된 내부 코딩 비트-심도 플러스 1인, 방법.
  9. 전자 장치로서,
    하나 이상의 프로세싱 유닛들;
    상기 하나 이상의 프로세싱 유닛들에 결합된 메모리; 및
    상기 하나 이상의 프로세싱 유닛들에 의해 실행될 때, 비디오 비트스트림을 생성하기 위해 상기 전자 장치로 하여금, 제1항 내지 제8항 중 어느 한 항의 상기 방법을 수행하게 하는, 상기 메모리 내에 저장된 복수의 프로그램
    을 포함하는 전자 장치.
  10. 하나 이상의 프로세싱 유닛들을 가지는 전자 장치에 의한 실행을 위한 복수의 프로그램을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체로서,
    상기 복수의 프로그램은, 상기 하나 이상의 프로세싱 유닛들에 의해 실행될 때, 비디오 비트스트림을 생성하고 상기 생성된 비디오 비트스트림을 상기 비-일시적 컴퓨터-판독가능 저장 매체에 저장하기 위해 상기 전자 장치로 하여금, 제1항 내지 제8항 중 어느 한 항의 상기 방법을 수행하게 하는, 비-일시적 컴퓨터-판독가능 저장 매체.
  11. 컴퓨터-판독가능 매체에 저장된 컴퓨터 프로그램으로서,
    하나 이상의 프로세서를 포함하는 컴퓨팅 디바이스에 의해 실행되는 명령을 포함하고,
    상기 명령이 상기 하나 이상의 프로세서에 의해 실행되면, 비디오 비트스트림을 생성하기 위해 상기 컴퓨팅 디바이스로 하여금 제1항 내지 제8항 중 어느 한 항의 방법의 단계들을 수행하게 하는,
    컴퓨터-판독가능 매체에 저장된 컴퓨터 프로그램.
KR1020237019947A 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치 KR20230093068A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US202062957273P 2020-01-05 2020-01-05
US62/957,273 2020-01-05
US202062965859P 2020-01-25 2020-01-25
US62/965,859 2020-01-25
PCT/US2021/012165 WO2021138697A1 (en) 2020-01-05 2021-01-05 Methods and apparatus of video coding in 4:4:4 chroma format
KR1020227027134A KR102554345B1 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020227027134A Division KR102554345B1 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치

Publications (1)

Publication Number Publication Date
KR20230093068A true KR20230093068A (ko) 2023-06-26

Family

ID=76686983

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020237019947A KR20230093068A (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
KR1020237021513A KR20230098378A9 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
KR1020227027134A KR102554345B1 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
KR1020237021807A KR20230101946A (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및장치

Family Applications After (3)

Application Number Title Priority Date Filing Date
KR1020237021513A KR20230098378A9 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
KR1020227027134A KR102554345B1 (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
KR1020237021807A KR20230101946A (ko) 2020-01-05 2021-01-05 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및장치

Country Status (7)

Country Link
US (1) US20220345705A1 (ko)
EP (1) EP4085637A4 (ko)
JP (1) JP2022553450A (ko)
KR (4) KR20230093068A (ko)
CN (4) CN117939152A (ko)
MX (1) MX2022008206A (ko)
WO (1) WO2021138697A1 (ko)

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140376611A1 (en) * 2013-06-21 2014-12-25 Qualcomm Incorporated Adaptive color transforms for video coding
US11070810B2 (en) * 2014-03-14 2021-07-20 Qualcomm Incorporated Modifying bit depths in color-space transform coding
US10116937B2 (en) * 2014-03-27 2018-10-30 Microsoft Technology Licensing, Llc Adjusting quantization/scaling and inverse quantization/scaling when switching color spaces
US20150373327A1 (en) * 2014-06-20 2015-12-24 Qualcomm Incorporated Block adaptive color-space conversion coding
WO2016040865A1 (en) * 2014-09-12 2016-03-17 Vid Scale, Inc. Inter-component de-correlation for video coding
GB2531004A (en) * 2014-10-06 2016-04-13 Canon Kk Residual colour transform signalled at sequence level for specific coding modes
WO2016054765A1 (en) * 2014-10-08 2016-04-14 Microsoft Technology Licensing, Llc Adjustments to encoding and decoding when switching color spaces
US10158836B2 (en) * 2015-01-30 2018-12-18 Qualcomm Incorporated Clipping for cross-component prediction and adaptive color transform for video coding
US10735774B2 (en) * 2016-05-13 2020-08-04 Interdigital Vc Holdings, Inc. Method and apparatus for video coding with adaptive clipping
EP3297282A1 (en) * 2016-09-15 2018-03-21 Thomson Licensing Method and apparatus for video coding with adaptive clipping

Also Published As

Publication number Publication date
EP4085637A1 (en) 2022-11-09
KR102554345B1 (ko) 2023-07-10
CN115244930A (zh) 2022-10-25
WO2021138697A1 (en) 2021-07-08
CN117939152A (zh) 2024-04-26
KR20230098378A9 (ko) 2024-03-25
KR20230101946A (ko) 2023-07-06
US20220345705A1 (en) 2022-10-27
CN117979013A (zh) 2024-05-03
EP4085637A4 (en) 2023-06-07
KR20230098378A (ko) 2023-07-03
CN116055737A (zh) 2023-05-02
KR20220114107A (ko) 2022-08-17
MX2022008206A (es) 2022-08-17
JP2022553450A (ja) 2022-12-22
CN116055737B (zh) 2023-12-29

Similar Documents

Publication Publication Date Title
US20220201301A1 (en) Methods and apparatus of video coding in 4:4:4 chroma format
US20230109849A1 (en) Methods and apparatus of video coding in 4:4:4 color format
US20220329859A1 (en) Methods and apparatus of video coding in 4:4:4 chroma format
US20220303580A1 (en) Methods and apparatus of video coding in 4:4:4 chroma format
WO2021134072A1 (en) Methods and apparatus of video coding in 4:4:4 chroma format
KR102554345B1 (ko) 4:4:4 크로마 포맷에서의 비디오 코딩의 방법들 및 장치
US20220345750A1 (en) Methods and apparatus of video coding in 4:4:4 chroma format
KR20240068073A (ko) 4:4:4 색 포맷의 비디오 코딩 방법 및 장치

Legal Events

Date Code Title Description
A107 Divisional application of patent