KR20210050572A - 비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템 - Google Patents

비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템 Download PDF

Info

Publication number
KR20210050572A
KR20210050572A KR1020217010428A KR20217010428A KR20210050572A KR 20210050572 A KR20210050572 A KR 20210050572A KR 1020217010428 A KR1020217010428 A KR 1020217010428A KR 20217010428 A KR20217010428 A KR 20217010428A KR 20210050572 A KR20210050572 A KR 20210050572A
Authority
KR
South Korea
Prior art keywords
chroma
luma
split
coding tree
split options
Prior art date
Application number
KR1020217010428A
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 KR20210050572A publication Critical patent/KR20210050572A/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/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • 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/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/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/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • 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
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • 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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/523Motion estimation or motion compensation with sub-pixel accuracy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • 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/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/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)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Color Television Systems (AREA)

Abstract

비트스트림으로부터, 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 시스템 및 방법. 방법은 이미지 프레임을 수신하는 단계 - 이미지 프레임은 크로마 포맷을 가지며, 이미지 프레임의 크로마 채널들은 이미지 프레임의 루마 채널에 대해 서브 샘플링됨 -; 및 코딩 트리 유닛의 영역의 치수들에 따라 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하는 단계를 포함한다. 방법은 또한 영역의 치수들에 따라 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하는 단계 - 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들을 낳음 -; 및 비트스트림으로부터 플래그들을 결정하여 결정된 루마 스플릿 옵션들 중 하나 및 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 블록들을 디코딩하는 단계를 포함한다.

Description

비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
[관련 출원(들)에 대한 참조]
본 출원은 35 U.S.C.§119 하에 2018년 9월 21일자로 출원된 호주 특허 출원 제2018233042호의 출원일의 이득을 주장하며, 이 출원은 본 명세서에 완전히 제시된 것처럼 그 전체가 참조로 포함된다.
본 발명은 일반적으로 디지털 비디오 신호 처리에 관한 것으로, 특히, 비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템에 관한 것이다. 본 발명은 또한 비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 컴퓨터 프로그램이 기록된 컴퓨터 판독가능 매체를 포함하는 컴퓨터 프로그램 제품에 관한 것이다.
비디오 데이터의 송신 및 저장을 위한 애플리케이션들을 포함하는, 비디오 코딩을 위한 많은 애플리케이션들이 현재 존재한다. 많은 비디오 코딩 표준들이 또한 개발되었고, 다른 비디오 코딩 표준들이 현재 개발 중이다. 비디오 코딩 표준화에서의 최근의 개발은 "JVET(Joint Video Experts Team)"라고 불리는 그룹을 형성하게 하였다. JVET(Joint Video Experts Team)는 "VCEG(Video Coding Experts Group)"로도 알려진 ITU(International Telecommunication Union)의 ITU-T(Telecommunication Standardisation Sector)의 SG16/Q6(Study Group 16, Question)의 멤버들, 및 "MPEG(Moving Picture Experts Group)"로도 알려진 ISO/IEC JTC1/SC29/WG11(International Organisations for Standardisation/International Electrotechnical Commission Joint Technical Committee 1/Subcommittee 29/Working Group 11)의 멤버들을 포함한다.
JVET(Joint Video Experts Team)는 CfP(Call for Proposals)를 발행했고, 응답들은 미국 샌디에고에서의 10번째 회의에서 분석되었다. 제출된 응답들은 현재의 최신 비디오 압축 표준, 즉 "HEVC(high efficiency video coding)"의 비디오 압축 능력을 상당히 능가하는 능력을 보여주었다. 이러한 성과에 기초하여, VVC(versatile video coding)로 명명되는 새로운 비디오 압축 표준을 개발하기 위한 프로젝트를 시작하기로 결정되었다. VVC는, 특히 비디오 포맷들이 (예를 들어, 더 높은 해상도 및 더 높은 프레임 레이트를 가져서) 용량이 증가하고 또한 대역폭 비용들이 비교적 높은 WAN들을 통한 서비스 전달에 대한 증가하는 시장 수요를 다뤄야 함에 따라 점점 더 높아지는 압축 성능에 대한 지속적인 수요를 해결할 것으로 예상된다. 동시에, VVC는 동시대의 실리콘 공정에서 구현가능해야만 하고 또한 달성된 성능 대 구현 비용 간의 수용가능한 절충(예를 들어, 실리콘 면적, CPU 프로세서 부하, 메모리 이용률 및 대역폭의 관점에서)을 제공해야만 한다.
비디오 데이터는 이미지 데이터의 프레임들의 시퀀스를 포함하며, 이들 각각은 하나 이상의 색 채널을 포함한다. 일반적으로, 하나의 원색 채널 및 2개의 2차 색 채널이 필요하다. 원색 채널은 일반적으로 "루마" 채널로 지칭되고, 2차 색 채널(들)은 일반적으로 "크로마" 채널들로 지칭된다. 비디오 데이터가 전형적으로 RGB(적색-녹색-청색) 색 공간에서 디스플레이되지만, 이러한 색 공간은 3개의 각자의 성분 사이에 높은 상관 정도를 갖는다. 인코더 또는 디코더에 의해 보이는 비디오 데이터 표현은 종종 YCbCr과 같은 색 공간을 이용하고 있다. YCbCr은 휘도에 집중하는데, Y(주요) 채널에서의 전달 함수에 따라 '루마'에 매핑되고 Cb 및 Cr(보조) 채널들에서의 크로마에 매핑된다. 또한, Cb 및 Cr 채널들은 루마 채널에 비해 더 낮은 레이트로 공간적으로 샘플링될 수 있는데, 예를 들어, 수평으로 절반이고 수직으로 절반이며, '4:2:0 크로마 포맷'으로 알려져 있다. 4:2:0 크로마 포맷은, 인터넷 비디오 스트리밍, 방송 텔레비전, 및 Blu-RayTM상의 스토리지와 같은, "소비자" 응용분야들에서 흔히 사용된다. Cb 및 Cr 채널들을 수평으로 하프 레이트로 서브샘플링하고 수직으로 서브샘플링하지 않는 것은 '4:2:2 크로마 포맷'으로 알려져 있다. 4:2:2 크로마 포맷은 영화 제작 등을 위한 장면의 캡처를 포함하는 전문적인 응용분야들에서 통상적으로 사용된다. 4:2:2 크로마 포맷의 더 높은 샘플링 레이트는 결과적인 비디오를 컬러 그레이딩과 같은 편집 동작들에 대해 더 복원성 있게 만든다. 소비자들에게 배포되기 전에, 4:2:2 크로마 포맷 자료는 종종 4:2:0 크로마 포맷으로 변환되고 이어서 소비자들에의 배포 전에 인코딩된다. 크로마 포맷 이외에, 비디오는 해상도 및 프레임 레이트를 특징으로 한다. 예시적인 해상도들은 3840×2160의 해상도를 갖는 초고화질(UHD) 또는 7680×4320의 해상도를 갖는 "8K"이고, 예시적인 프레임 레이트들은 60 또는 120Hz이다. 루마 샘플 레이트는 초당 대략 500 메가 샘플 내지 초당 몇 기가 샘플의 범위일 수 있다. 4:2:0 크로마 포맷에 대해, 각각의 크로마 채널의 샘플 레이트는 루마 샘플 레이트의 1/4이고 4:2:2 크로마 포맷에 대해, 각각의 크로마 채널의 샘플 레이트는 루마 샘플 레이트의 1/2이다.
VVC 표준은 프레임이 먼저 CTU(coding tree unit)들로 알려진 정사각형 영역들의 어레이로 분할되는 '블록 기반' 코덱이다. CTU들은 일반적으로 128×128 루마 샘플들과 같은 비교적 큰 영역을 점유한다. 그러나, 각각의 프레임의 우측 및 하단 에지에서의 CTU들은 영역이 더 작을 수 있다. 루마 채널에 대한 '코딩 트리' 및 크로마 채널들에 대한 추가적인 코딩 트리가 각각의 CTU와 연관된다. 코딩 트리는 CTU의 영역을 CB(coding block)들이라고도 지칭되는 블록들의 세트로 분해하는 것을 정의한다. 또한, 단일 코딩 트리가 루마 채널 및 크로마 채널들 모두에 대해 블록들을 특정하는 것이 가능하며, 이 경우 블록들은 CU(coding unit)들로 지칭되며, 각각의 CU는 각각의 색 채널에 대한 코딩 블록을 갖는다. CB들은 특정 순서로 인코딩 또는 디코딩을 위해 처리된다. 4:2:0 크로마 포맷의 사용의 결과로서, 128×128 루마 샘플 영역에 대한 루마 코딩 트리를 갖는 CTU는 128×128 루마 샘플 영역과 병치되는, 64×64 크로마 샘플 영역에 대한 대응하는 크로마 코딩 트리를 갖는다. 단일 코딩 트리가 루마 채널 및 크로마 채널들에 대해 이용 중일 때, 주어진 영역에 대한 병치된 블록들의 컬렉션들은 일반적으로 '유닛들', 예를 들어, 앞서 언급한 CU들뿐만 아니라 '예측 유닛들(prediction unit, PUs) 및 '변환 유닛들'(transform units, TUs)로 지칭된다. 주어진 영역에 대해 별개의 코딩 트리들이 사용될 때, 앞서 언급한 CB들뿐만 아니라 '예측 블록들'(prediction blocks, PBs) 및 '변환 블록들'(transform blocks, TBs)이 사용된다.
'유닛들'과 '블록들' 사이의 위의 구별에도 불구하고, '블록'이라는 용어는 동작들이 모든 색 채널들에 적용되는 프레임의 영역(area)들 또는 영역(region)들에 대한 일반적인 용어로서 사용될 수 있다.
각각의 CU에 대해, 프레임 데이터의 대응하는 영역의 콘텐츠(샘플 값들)의 예측(PU)이 생성된다('예측 유닛'). 또한, 인코더에 대한 입력에서 보이는 영역의 콘텐츠들과 예측 사이의 차이(또는 공간 영역에서의 '잔차'(residual)의 표현이 형성된다. 각각의 색 채널에서의 차이는 잔차 계수들의 시퀀스로서 변환 코딩되어, 주어진 CU에 대해 하나 이상의 TU를 형성할 수 있다. 적용된 변환은 잔차 값들의 각각의 블록에 적용되는 DCT(Discrete Cosine Transform) 또는 다른 변환일 수 있다. 이러한 1차 변환은 개별적으로 적용되는데, 즉, 2차원 변환은 2개의 패스로 수행된다. 블록은 먼저 블록에서의 샘플들의 각각의 행에 1차원 변환을 적용함으로써 변환된다. 그 후, 부분 결과는, 부분 결과의 각각의 열에 1차원 변환을 적용하여 잔차 샘플들을 실질적으로 상관해제시키는 변환 계수들의 최종 블록을 생성함으로써 변환된다. 각각의 측면 치수가 2의 거듭제곱인 직사각형 형상의 블록들의 변환들을 포함하여, 다양한 크기의 변환들이 VVC 표준에 의해 지원된다. 변환 계수들은 비트스트림으로 엔트로피 인코딩하기 위해 양자화된다.
PB들을 생성하기 위해 공간 예측('인트라 예측'(intra prediction))이 사용될 때, 현재 PB에 대한 예측된 샘플들을 생성하기 위해 참조 샘플들의 세트가 사용된다. 참조 샘플들은 이미 '재구성된' (인트라 예측된 샘플들에 대한 잔차 샘플들의 추가) PB에 인접한 샘플들을 포함한다. 이러한 인접한 샘플들은 PB 위의 행 및 PB의 좌측의 열을 형성한다. 행 및 열은 또한 PB 경계를 넘어 연장되어 추가의 인근 샘플들을 포함한다. Z-오더 스캔에서의 스캐닝 블록들로 인해, 참조 샘플들의 일부는 바로 선행하는 블록에서 재구성되었을 것이다. 바로 선행하는 블록으로부터의 샘플들의 사용은 비디오 인코더 또는 디코더를 통한 블록들의 처리량을 제한할 수 있는 피드백 의존성을 초래한다.
본 발명의 목적은 기존 배열들의 하나 이상의 단점을 실질적으로 극복하거나 적어도 개선하는 것이다.
본 개시내용의 일 양태는 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 비트스트림으로부터 디코딩하는 방법을 제공하며, 이 방법은: 이미지 프레임을 수신하는 단계 - 이미지 프레임은 크로마 포맷을 가지며, 이미지 프레임의 크로마 채널들은 이미지 프레임의 루마 채널에 대해 서브샘플링됨 -; 상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하는 단계; 영역의 치수들에 따라 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하는 단계 - 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들이라는 결과를 낳음 -; 및 비트스트림으로부터 플래그들을 결정하여 결정된 루마 스플릿 옵션들 중 하나 및 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 블록들을 디코딩하는 단계를 포함한다.
또 다른 양태에 따르면, 크로마 블록 크기는 이미지 프레임의 크로마 채널들에 대한 16개 샘플의 배수이다.
또 다른 양태에 따르면, 결정된 루마 스플릿 옵션들은 이미지 프레임의 루마 채널에 대한 16개 샘플의 배수인 루마 블록 크기라는 결과를 낳는다.
또 다른 양태에 따르면, 2 샘플의 폭을 갖는 크로마 블록들은 블록의 서브 블록들로의 분할을 이용하여 코딩되며, 각각의 서브 블록은 크기가 2×8 샘플이다.
또 다른 양태에 따르면, 2 샘플의 폭을 갖는 크로마 블록들은 블록의 서브 블록들로의 분할을 이용하여 코딩되며, 각각의 서브 블록은 크기가 8×2 샘플이다.
본 개시내용의 또 다른 양태는 비트스트림으로부터, 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 방법을 구현하기 위한 컴퓨터 프로그램을 저장한 비일시적 컴퓨터 판독가능 매체를 제공하며, 이 프로그램은: 이미지 프레임을 수신하기 위한 코드 - 이미지 프레임은 크로마 포맷을 갖고, 이미지 프레임의 크로마 채널들은 이미지 프레임의 루마 채널에 대해 서브샘플링됨-; 코딩 트리 유닛의 영역의 치수들에 따라 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하기 위한 코드; 영역의 치수들에 따라 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하기 위한 코드 - 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들이라는 결과를 낳음 -; 및 비트스트림으로부터 플래그들을 결정하여 결정된 루마 스플릿 옵션들 중 하나 및 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 블록들을 디코딩하기 위한 코드를 포함한다.
본 개시내용의 또 다른 양태는 비디오 디코더를 제공하고, 이 비디오 디코더는: 비트스트림으로부터 이미지 프레임의 코딩 트리 유닛을 수신하고 - 이미지 프레임은 크로마 포맷을 가지며, 이미지 프레임의 크로마 채널들은 이미지 프레임의 루마 채널에 대해 서브샘플링됨 -; 코딩 트리 유닛의 영역의 치수들에 따라 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하고; 영역의 치수들에 따라 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하고 - 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들이라는 결과를 낳음 -; 및 비트스트림으로부터 플래그들을 결정하여 결정된 루마 스플릿 옵션들 중 하나 및 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 블록들을 디코딩하도록 구성된다.
본 개시내용의 또 다른 양태는 시스템을 제공하고, 이 시스템은: 메모리; 및 프로세서를 포함하고, 프로세서는 비트스트림으로부터, 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 방법을 구현하기 위해 메모리에 저장된 코드를 실행하도록 구성되고, 이 방법은: 이미지 프레임을 수신하는 단계 - 이미지 프레임은 크로마 포맷을 갖고, 이미지 프레임의 크로마 채널들은 이미지 프레임의 루마 채널에 대해 서브샘플링됨 -; 상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하는 단계; 영역의 치수들에 따라 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하는 단계 - 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 블록들이라는 결과를 낳음 -; 및 비트스트림으로부터 플래그들을 결정하여 결정된 루마 스플릿 옵션들 중 하나 및 결정된 허용가능한 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 블록들을 디코딩하는 단계를 포함한다.
다른 양태들도 개시된다.
본 발명의 적어도 하나의 실시예가 다음의 도면들 및 부록들을 참조하여 이제 설명될 것이다.
도 1은 비디오 인코딩 및 디코딩 시스템을 도시한 개략 블록도이다.
도 2a 및 도 2b는 도 1의 비디오 인코딩 및 디코딩 시스템 중 하나 또는 둘 다가 실시될 수 있는 범용 컴퓨터 시스템의 개략 블록도를 형성한다.
도 3은 비디오 인코더의 기능 모듈들을 도시하는 개략 블록도이다.
도 4는 비디오 디코더의 기능 모듈들을 도시하는 개략 블록도이다.
도 5는 VVC의 트리 구조에서 블록의 하나 이상의 블록으로의 이용가능한 분할들을 도시하는 개략 블록도이다.
도 6은 VVC의 트리 구조에서 블록의 하나 이상의 블록으로의 허용된 분할들을 달성하는 데이터흐름의 개략 예시이다.
도 7a 및 도 7b는 CTU의 다수의 코딩 유닛으로의 예시적 분할을 도시한다.
도 8은 변환 블록 크기들 및 연관된 스캔 패턴들의 컬렉션을 도시하는 도면이다.
도 9는 루마 코딩 트리와 크로마 코딩 트리에서의 허용된 스플릿들의 리스트들을 생성하는 규칙들을 도시하는 도면이다.
도 10은 이미지 프레임의 코딩 트리를 비디오 비트스트림으로 인코딩하기 위한 방법의 흐름도이다.
도 11은 비디오 비트스트림으로부터 이미지 프레임의 코딩 트리를 디코딩하는 방법의 흐름도이다.
도 12는 이미지 프레임의 루마 및 크로마 코딩 트리들을 비디오 비트스트림으로 인코딩하기 위한 방법의 흐름도이다.
도 13은 비디오 비트스트림으로부터 이미지 프레임의 루마 및 크로마 코딩 트리들을 인코딩하기 위한 방법의 흐름도이다.
첨부 도면들 중 임의의 하나 이상에서 동일한 참조 번호들을 갖는 단계들 및/또는 특징들이 참조되는 경우, 그 단계들 및/또는 특징들은, 반대 의도가 나타나지 않는 한, 이 설명의 목적을 위해 동일한 기능(들) 또는 동작(들)을 갖는다.
앞서 설명한 대로, 바로 선행하는 블록으로부터의 샘플들의 사용은 비디오 인코더 또는 디코더를 통한 블록들의 처리량을 제한할 수 있는 피드백 의존성을 초래한다. 전형적인 실시간 인코딩 및 디코딩 애플리케이션들에 필요한 대로 처리 블록들의 높은 레이트가 유지될 수 있는 것을 보장하기 위해 결과적인 피드백 의존성 루프의 심각성을 완화시키는 방법들이 바람직하다. 피드백 의존성 루프는 최신 비디오 포맷들의 높은 샘플 레이트들, 예를 들어, 초당 500 내지 4000 샘플에 대해 특히 문제가 되는 반면, ASIC(application-specific integrated circuits) 클록 주파수들은 통상적으로 수백 MHz이다.
도 1은 비디오 인코딩 및 디코딩 시스템(100)의 기능 모듈들을 도시하는 개략 블록도이다. 시스템(100)은 마주치는 최악의 경우의 블록 처리 레이트를 감소시키기 위해 루마 및 크로마 코딩 트리들에서의 영역들의 허용된 세분화에 대해 상이한 규칙을 활용할 수 있다. 예를 들어, 시스템(100)은, 블록의 종횡비에 관계없이, 블록들이 16(sixteen)개 샘플의 배수로서 항상 크기가 정해지도록 동작할 수 있다. 잔차 계수 코딩은 또한, 2 샘플의 폭 또는 높이를 갖는 블록들의 경우를 포함하여, 16 블록 크기의 배수를 이용할 수 있다.
시스템(100)은 소스 디바이스(110) 및 목적지 디바이스(130)를 포함한다. 통신 채널(120)은 인코딩된 비디오 정보를 소스 디바이스(110)로부터 목적지 디바이스(130)로 통신하기 위해 사용된다. 일부 구성들에서, 소스 디바이스(110) 및 목적지 디바이스(130) 어느 하나 또는 둘 다는 각자의 모바일 폰 핸드셋들 또는 "스마트폰들"을 포함할 수 있으며, 이 경우에 통신 채널(120)은 무선 채널이다. 다른 구성에서, 소스 디바이스(110) 및 목적지 디바이스(130)는 비디오 회의 장비를 포함할 수 있으며, 이 경우에 통신 채널(120)은 전형적으로 인터넷 접속과 같은 유선 채널이다. 더욱이, 소스 디바이스(110) 및 목적지 디바이스(130)는 OTA(over-the-air) 텔레비전 방송들을 지원하는 디바이스들, 케이블 텔레비전 애플리케이션들, 인터넷 비디오 애플리케이션들(스트리밍을 포함함) 및 인코딩된 비디오 데이터가 파일 서버에서의 하드 디스크 드라이브들과 같은 일부 컴퓨터 판독가능 저장 매체상에서 캡처되는 애플리케이션들을 포함하는 광범위한 디바이스들 중 임의의 것을 포함할 수 있다.
도 1에 도시된 바와 같이, 소스 디바이스(110)는 비디오 소스(112), 비디오 인코더(114) 및 송신기(116)를 포함한다. 비디오 소스(112)는 전형적으로 이미지 캡처 센서와 같은, 캡처된 비디오 프레임 데이터((113)으로 도시됨)의 소스, 비일시적 기록 매체상에 저장된 이전에 캡처된 비디오 시퀀스, 또는 원격 이미지 캡처 센서로부터의 비디오 피드를 포함한다. 비디오 소스(112)는 또한, 예를 들어, 컴퓨팅 디바이스, 예를 들어, 태블릿 컴퓨터상에서 실행되는 운영 체제 및 다양한 애플리케이션들의 비디오 출력을 디스플레이하는 컴퓨터 그래픽 카드의 출력일 수 있다. 비디오 소스(112)로서 이미지 캡처 센서를 포함할 수 있는 소스 디바이스들(110)의 예들은 스마트 폰들, 비디오 캠코더들, 전문 비디오 카메라들, 및 네트워크 비디오 카메라들을 포함한다.
비디오 인코더(114)는 도 3을 참조하여 더 설명되는 바와 같이 비디오 소스(112)로부터의 캡처된 프레임 데이터(화살표(113)로 표시됨)를 비트스트림(화살표(115)로 표시됨)으로 변환(또는 '인코딩')한다. 비트스트림(115)은 인코딩된 비디오 데이터(또는 "인코딩된 비디오 정보")로서 통신 채널(120)을 통해 송신기(116)에 의해 송신된다. 또한, 비트스트림(115)이 나중에 통신 채널(120)을 통해 송신될 때까지 또는 통신 채널(120)을 통한 송신 대신에 "플래시" 메모리 또는 하드 디스크 드라이브와 같은 비일시적 저장 디바이스(122)에 저장되는 것이 가능하다.
목적지 디바이스(130)는 수신기(132), 비디오 디코더(134) 및 디스플레이 디바이스(136)를 포함한다. 수신기(132)는 통신 채널(120)로부터 인코딩된 비디오 데이터를 수신하고 수신된 비디오 데이터를 비트스트림(화살표(133)으로 표시됨)으로서 비디오 디코더(134)에 전달한다. 이후 비디오 디코더(134)는 (화살표(135)로 표시된) 디코딩된 프레임 데이터를 디스플레이 디바이스(136)에 출력한다. 디코딩된 프레임 데이터(135)는 프레임 데이터(113)와 동일한 크로마 포맷을 갖는다. 디스플레이 디바이스(136)의 예는 음극선관, 스마트폰, 태블릿 컴퓨터, 컴퓨터 모니터에서와 같은 또는 독립형 텔레비전 세트에서와 같은 액정 디스플레이를 포함한다. 소스 디바이스(110) 및 목적지 디바이스(130) 각각의 기능이 단일 디바이스로 구현되는 것도 가능하며, 그 예는 모바일 전화 핸드셋 및 태블릿 컴퓨터를 포함한다.
앞서 언급된 예시적인 디바이스들에도 불구하고, 소스 디바이스(110) 및 목적지 디바이스(130) 각각은, 전형적으로 하드웨어와 소프트웨어 컴포넌트들의 조합을 통해 범용 컴퓨팅 시스템 내에 구성될 수 있다. 도 2a는 컴퓨터 시스템(200)을 예시하는데, 이 컴퓨터 시스템은: 컴퓨터 모듈(201); 키보드(202), 마우스 포인터 디바이스(203), 스캐너(226), 비디오 소스(112)로서 구성될 수 있는 카메라(227), 및 마이크로폰(280)과 같은 입력 디바이스들; 및 프린터(215), 디스플레이 디바이스(136)로서 구성될 수 있는 디스플레이 디바이스(214), 및 라우드스피커(217)를 포함하는 출력 디바이스들을 포함한다. 외부 Modem(Modulator-Demodulator) 송수신기 디바이스(216)는 접속(221)을 통해 통신 네트워크(220)로/로부터 통신하기 위해 컴퓨터 모듈(201)에 의해 사용될 수 있다. 통신 채널(120)을 나타낼 수 있는 통신 네트워크(220)는 인터넷, 셀룰러 통신 네트워크, 또는 사설 WAN과 같은 광역 네트워크(WAN)일 수 있다. 접속(221)이 전화선인 경우, 모뎀(216)은 전통적인 "다이얼-업" 모뎀일 수 있다. 대안적으로, 접속(221)이 고용량(예컨대, 케이블 또는 광학) 접속인 경우, 모뎀(216)은 광대역 모뎀일 수 있다. 무선 모뎀은 또한 통신 네트워크(220)로의 무선 접속을 위해 사용될 수 있다. 송수신기 디바이스(216)는 송신기(116) 및 수신기(132)의 기능을 제공할 수 있고, 통신 채널(120)은 접속(221)에서 구현될 수 있다.
컴퓨터 모듈(201)은 전형적으로 적어도 하나의 프로세서 유닛(205) 및 메모리 유닛(206)을 포함한다. 예를 들어, 메모리 유닛(206)은 반도체 랜덤 액세스 메모리(RAM) 및 반도체 판독 전용 메모리(ROM)를 가질 수 있다. 컴퓨터 모듈(201)은 또한 비디오 디스플레이(214), 라우드스피커들(217) 및 마이크로폰(280)에 결합되는 오디오-비디오 인터페이스(207); 키보드(202), 마우스(203), 스캐너(226), 카메라(227) 및 선택적으로 조이스틱 또는 다른 휴먼 인터페이스 디바이스(도시되지 않음)에 결합되는 I/O 인터페이스(213); 및 외부 모뎀(216) 및 프린터(215)를 위한 인터페이스(208)를 포함하는 다수의 입력/출력(I/O) 인터페이스를 포함한다. 오디오-비디오 인터페이스(207)로부터 컴퓨터 모니터(214)로의 신호는 일반적으로 컴퓨터 그래픽 카드의 출력이다. 일부 구현들에서, 모뎀(216)은 컴퓨터 모듈(201) 내에, 예를 들어, 인터페이스(208) 내에 통합될 수 있다. 컴퓨터 모듈(201)은 또한, LAN(Local Area Network)으로 알려진 로컬 영역 통신 네트워크(local-area communications network)(222)에 대한 접속(223)을 통한 컴퓨터 시스템(200)의 결합을 허용하는 로컬 네트워크 인터페이스(211)를 갖는다. 도 2a에 예시된 바와 같이, 로컬 통신 네트워크(222)는 또한 접속(224)을 통해 광역 네트워크(220)에 결합될 수 있으며, 접속은 전형적으로 소위 "방화벽" 디바이스 또는 유사한 기능의 디바이스를 포함할 것이다. 로컬 네트워크 인터페이스(211)는 EthernetTM 회로 카드, BluetoothTM 무선 배열 또는 IEEE 802.11 무선 배열을 포함할 수 있는데; 그러나, 수많은 다른 타입의 인터페이스가 인터페이스(211)에 대해 실시될 수 있다. 로컬 네트워크 인터페이스(211)는 또한 송신기(116) 및 수신기(132)의 기능을 제공할 수 있고, 통신 채널(120)은 또한 로컬 통신 네트워크(222)에서 구현될 수 있다.
I/O 인터페이스들(208 및 213)은 직렬 및 병렬 접속성 중 어느 하나 또는 둘 다를 제공할 수 있으며, 전자는 전형적으로 USB(Universal Serial Bus) 표준에 따라 구현되고 대응하는 USB 커넥터들(도시되지 않음)을 갖는다. 저장 디바이스들(209)이 제공되고 전형적으로 하드 디스크 드라이브(HDD)(210)를 포함한다. 플로피 디스크 드라이브 및 자기 테이프 드라이브(도시되지 않음)와 같은 다른 저장 디바이스들도 사용될 수 있다. 광 디스크 드라이브(212)는 전형적으로 데이터의 비휘발성 소스로서 기능하도록 제공된다. 예를 들어, 광학 디스크들(예를 들어, CD-ROM, DVD, Blu ray DiscTM), USB-RAM, 휴대용, 외부 하드 드라이브들, 및 플로피 디스크들과 같은 휴대용 메모리 디바이스들은 컴퓨터 시스템(200)에 대한 데이터의 적절한 소스들로서 사용될 수 있다. 전형적으로, HDD(210), 광 드라이브(212), 네트워크들(220 및 222) 중 임의의 것은 또한 비디오 소스(112)로서, 또는 디스플레이(214)를 통한 재생을 위해 저장될 디코딩된 비디오 데이터에 대한 목적지로서 동작하도록 구성될 수 있다. 시스템(100)의 소스 디바이스(110) 및 목적지 디바이스(130)는 컴퓨터 시스템(200)에서 구현될 수 있다.
컴퓨터 모듈(201)의 컴포넌트들(205 내지 213)은 전형적으로 인터커넥트된 버스(204)를 통해, 그리고 관련 기술분야의 통상의 기술자에게 알려진 컴퓨터 시스템(200)의 종래의 동작 모드를 낳는 방식으로 통신한다. 예를 들어, 프로세서(205)는 접속(218)을 이용하여 시스템 버스(204)에 결합된다. 마찬가지로, 메모리(206) 및 광학 디스크 드라이브(212)는 접속들(219)에 의해 시스템 버스(204)에 결합된다. 설명된 구성이 실시될 수 있는 컴퓨터의 예는 IBM-PC 및 호환 컴퓨터들, Sun SPARCstation, Apple MacTM 또는 유사한 컴퓨터 시스템을 포함한다.
적절한 또는 원하는 경우, 비디오 인코더(114) 및 비디오 디코더(134)는 물론이고 이하에서 설명되는 방법들이 컴퓨터 시스템(200)을 사용하여 구현될 수 있다. 특히, 비디오 인코더(114), 비디오 디코더(134) 및 설명될 방법들은 컴퓨터 시스템(200) 내에서 실행가능한 하나 이상의 소프트웨어 애플리케이션 프로그램(233)으로서 구현될 수 있다. 특히, 컴퓨터 시스템(200) 내에서 수행되는 소프트웨어(233)에서의 명령어들(231)(도 2b 참조)에 의해 비디오 인코더(114), 비디오 디코더(134) 및 설명된 방법들의 단계들이 이루어진다. 소프트웨어 명령어들(231)은 각각이 하나 이상의 특정 작업을 수행하기 위한 하나 이상의 코드 모듈로서 형성될 수 있다. 소프트웨어는 또한 2개의 별개의 부분으로 분할될 수 있고, 여기서 제1 부분 및 대응하는 코드 모듈들은 설명된 방법들을 수행하고, 제2 부분 및 대응하는 코드 모듈들은 제1 부분과 사용자 사이의 사용자 인터페이스를 관리한다.
소프트웨어는 예를 들어, 다음에 설명되는 저장 디바이스들을 포함하는 컴퓨터 판독가능 매체에 저장될 수 있다. 소프트웨어는 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내로 로딩되고, 그 후 컴퓨터 시스템(200)에 의해 실행된다. 컴퓨터 판독가능 매체상에 기록된 그러한 소프트웨어 또는 컴퓨터 프로그램을 갖는 컴퓨터 판독가능 매체는 컴퓨터 프로그램 제품이다. 컴퓨터 시스템(200)에서의 컴퓨터 프로그램 제품의 사용은 바람직하게는 비디오 인코더(114), 비디오 디코더(134) 및 설명된 방법들을 구현하기 위한 유리한 장치를 달성한다.
소프트웨어(233)는 전형적으로 HDD(210) 또는 메모리(206)에 저장된다. 소프트웨어는 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내로 로딩되고, 컴퓨터 시스템(200)에 의해 실행된다. 따라서, 예를 들어, 소프트웨어(233)는 광학 디스크 드라이브(212)에 의해 판독되는 광학적으로 판독가능한 디스크 저장 매체(예를 들어, CD-ROM)(225)상에 저장될 수 있다.
일부 예들에서, 애플리케이션 프로그램들(233)은 하나 이상의 CD-ROM(225)상에 인코딩되어 사용자에게 공급되어 대응하는 드라이브(212)를 통해 판독될 수 있거나, 대안적으로 네트워크들(220 또는 222)로부터 사용자에 의해 판독될 수 있다. 또한, 소프트웨어는 또한 다른 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내로 로딩될 수 있다. 컴퓨터 판독가능 저장 매체는 실행 및/또는 처리를 위해 컴퓨터 시스템(200)에 기록된 명령어들 및/또는 데이터를 제공하는 임의의 비일시적 유형의 저장 매체를 지칭한다. 이러한 저장 매체의 예는, 이러한 디바이스가 컴퓨터 모듈(201)의 내부 또는 외부에 있든지 아니든지 간에, 플로피 디스크, 자기 테이프, CD-ROM, DVD, Blu-ray DiscTM, 하드 디스크 드라이브, ROM 또는 집적 회로, USB 메모리, 광자기 디스크, 또는 PCMCIA 카드 등과 같은 컴퓨터 판독가능 카드를 포함한다. 소프트웨어, 애플리케이션 프로그램들, 명령어들 및/또는 비디오 데이터 또는 인코딩된 비디오 데이터를 컴퓨터 모듈(401)에 제공하는 데 또한 참여할 수 있는 일시적 또는 비유형의(non-tangible) 컴퓨터 판독가능 송신 매체들의 예들은 무선 또는 적외선 송신 채널들뿐만 아니라 또 다른 컴퓨터 또는 네트워크화된 디바이스에의 네트워크 접속, 및 웹사이트들상에 기록된 이메일 송신들 및 정보 등을 포함하는 인터넷 또는 인트라넷들 등을 포함한다.
위에서 언급된 애플리케이션 프로그램들(233)의 제2 부분 및 대응하는 코드 모듈들은 디스플레이(214)상에 렌더링되거나 다른 방식으로 표현될 하나 이상의 그래픽 사용자 인터페이스(GUI)를 구현하도록 실행될 수 있다. 전형적으로 키보드(202) 및 마우스(203)의 조작을 통해, 컴퓨터 시스템(200) 및 애플리케이션의 사용자는 GUI(들)와 연관된 애플리케이션들에 제어 커맨드 및/또는 입력을 제공하기 위해 기능적으로 적응가능한 방식으로 인터페이스를 조작할 수 있다. 라우드스피커들(217)을 통해 출력되는 음성 프롬프트들 및 마이크로폰(280)을 통해 입력되는 사용자 음성 커맨드들을 이용하는 오디오 인터페이스와 같은 다른 형식들의 기능적으로 적응가능한 사용자 인터페이스들이 또한 구현될 수 있다.
도 2b는 프로세서(205) 및 "메모리"(234)의 상세한 개략 블록도이다. 메모리(234)는 도 2a의 컴퓨터 모듈(201)에 의해 액세스될 수 있는 (HDD(209) 및 반도체 메모리(206)를 포함하는) 모든 메모리 모듈들의 논리적 모음을 나타낸다.
컴퓨터 모듈(201)이 초기에 전원이 켜지면, POST(power-on self-test) 프로그램(250)이 실행된다. POST 프로그램(250)은 전형적으로 도 2a의 반도체 메모리(206)의 ROM(249)에 저장된다. 소프트웨어를 저장하는 ROM(249)과 같은 하드웨어 디바이스는 때때로 펌웨어라고 지칭된다. POST 프로그램(250)은 적절한 기능을 보장하기 위해 컴퓨터 모듈(201) 내의 하드웨어를 조사하고, 정확한 동작을 위해, 프로세서(205), 메모리(234)(209, 206), 및 또한 전형적으로 ROM(249)에 저장된 기본 입출력 시스템 소프트웨어(BIOS) 모듈(251)을 검사한다. 일단 POST 프로그램(250)이 성공적으로 실행되면, BIOS(251)는 도 2a의 하드 디스크 드라이브(210)를 활성화시킨다. 하드 디스크 드라이브(210)의 활성화는 하드 디스크 드라이브(210)상에 상주하는 부트스트랩 로더 프로그램(252)이 프로세서(205)를 통해 실행되게 야기한다. 이는 운영 체제(253)를 RAM 메모리(206) 내에 로드하고, 그 상에서 운영 체제(253)는 동작을 시작한다. 운영 체제(253)는 프로세서 관리, 메모리 관리, 디바이스 관리, 저장소 관리, 소프트웨어 애플리케이션 인터페이스, 및 일반 사용자 인터페이스를 포함하는, 다양한 하이 레벨 기능들을 이행하기 위해, 프로세서(205)에 의해 실행가능한 시스템 레벨 애플리케이션이다.
운영 체제(253)는 컴퓨터 모듈(201)상에서 실행되는 각각의 프로세스 또는 애플리케이션이 또 다른 프로세스에 할당된 메모리와 충돌하지 않고서 실행될 충분한 메모리를 갖도록 보장하기 위해 메모리(234)(209, 206)를 관리한다. 또한, 도 2a의 컴퓨터 시스템(200)에서 이용가능한 상이한 타입의 메모리는 각각의 프로세스가 효과적으로 실행될 수 있도록 적절하게 사용되어야만 한다. 따라서, 모아진 메모리(234)는 (달리 언급되지 않는 한) 메모리의 특정 세그먼트들이 어떻게 할당되는지를 예시하도록 의도된 것이 아니라, 오히려 컴퓨터 시스템(200)에 의해 액세스가능한 메모리의 일반적인 뷰 및 그러한 것이 어떻게 사용되는지를 제공하도록 의도된다.
도 2b에 도시된 바와 같이, 프로세서(205)는 제어 유닛(239), 산술 로직 유닛(ALU)(240), 및 때때로 캐시 메모리라고 불리는 로컬 또는 내부 메모리(248)를 포함하는 다수의 기능 모듈을 포함한다. 캐시 메모리(248)는 전형적으로 레지스터 섹션에 다수의 저장 레지스터(244-246)를 포함한다. 하나 이상의 내부 버스(241)가 이들 기능 모듈들을 기능적으로 인터커넥트시킨다. 프로세서(205)는 전형적으로 또한 접속(218)을 이용하여 시스템 버스(204)를 통해 외부 디바이스들과 통신하기 위한 하나 이상의 인터페이스(242)를 갖는다. 메모리(234)는 접속(219)을 이용하여 버스(204)에 결합된다.
애플리케이션 프로그램(233)은 조건부 분기 및 루프 명령어들을 포함할 수 있는 명령어들의 시퀀스(231)를 포함한다. 프로그램(233)은 또한 프로그램(233)의 실행에 사용되는 데이터(232)를 포함할 수 있다. 명령어들(231) 및 데이터(232)는 제각기 메모리 위치들(228, 229, 230) 및 (235, 236, 237)에 저장된다. 명령어들(231) 및 메모리 위치들(228-230)의 상대적 크기에 좌우되어, 특정 명령어는 메모리 위치(230)에 도시된 명령어에 의해 묘사된 바와 같이 단일 메모리 위치에 저장될 수 있다. 대안적으로, 명령어는 메모리 위치들(228 및 229)에 도시된 명령어 세그먼트들에 의해 묘사된 바와 같이, 그 각각이 개별 메모리 위치에 저장되는 다수의 부분으로 세그먼트화될 수 있다.
일반적으로, 프로세서(205)는 그 안에서 실행되는 명령어들의 세트를 제공받는다. 프로세서(205)는, 프로세서(205)가 명령어들의 또 다른 세트를 실행함으로써 그에 반응하는 후속 입력을 대기한다. 각각의 입력은 입력 디바이스들(202, 203) 중 하나 이상에 의해 생성된 데이터, 네트워크들(220, 202) 중 하나를 통해 외부 소스로부터 수신된 데이터, 저장 디바이스들(206, 209) 중 하나로부터 검색된 데이터, 또는 대응하는 판독기(212)에 삽입된 저장 매체(225)로부터 검색된 데이터를 포함하는 다수의 소스 중 하나 이상으로부터 제공될 수 있으며, 이들 모두는 도 2a에 묘사되어 있다. 명령어들의 세트의 실행은 일부 경우들에서 데이터의 출력이라는 결과를 낳을 수 있다. 실행은 또한 데이터 또는 변수들을 메모리(234)에 저장하는 것을 수반할 수 있다.
비디오 인코더(114), 비디오 디코더(134), 및 설명된 방법은 대응하는 메모리 위치들(255, 256, 257)에서 메모리(234)에 저장되는 입력 변수들(254)을 사용할 수 있다. 비디오 인코더(114), 비디오 디코더(134), 및 설명된 방법은 대응하는 메모리 위치들(262, 263, 264)에서 메모리(234)에 저장되는 출력 변수들(261)을 생성한다. 중간 변수들(258)은 메모리 위치들(259, 260, 266, 및 267)에 저장될 수 있다.
도 2b의 프로세서(205)를 참조하면, 레지스터들(244, 245, 246), 산술 논리 유닛(ALU)(240), 및 제어 유닛(239)은 함께 작업하여 프로그램(233)을 구성하는 명령어 세트에서의 모든 명령어마다에 대해 "페치, 디코드, 및 실행" 사이클들을 수행하는 데 필요한 마이크로연산들의 시퀀스들을 수행한다. 각각의 페치, 디코드, 및 실행 사이클은 다음을 포함한다:
메모리 위치(228, 229, 230)로부터 명령어(231)를 페치 또는 판독하는 페치 동작;
제어 유닛(239)이 어느 명령어가 페치되었는지를 결정하는 디코드 동작; 및
제어 유닛(239) 및/또는 ALU(240)가 명령어를 실행하는 실행 동작.
그 후, 다음 명령어에 대한 추가 페치, 디코드, 및 실행 사이클이 실행될 수 있다. 유사하게, 제어 유닛(239)이 메모리 위치(232)에 값을 저장하거나 기입하는 저장 사이클이 수행될 수 있다.
설명될 도 10 내지 도 13의 방법에서의 각각의 단계 또는 서브 프로세스는 프로그램(233)의 하나 이상의 세그먼트와 연관되어 있으며, 프로그램(233)의 주목한 세그먼트들에 대한 명령어 세트에서의 모든 명령어마다에 대한 페치, 디코드, 및 실행 사이클들을 수행하기 위해 함께 작업하는 프로세서(205) 내의 레지스터 섹션(244, 245, 247), ALU(240), 및 제어 유닛(239)에 의해 전형적으로 수행된다.
도 3은 비디오 인코더(114)의 기능 모듈들을 도시하는 개략 블록도이다. 도 4는 비디오 디코더(134)의 기능 모듈들을 도시하는 개략 블록도이다. 일반적으로, 데이터는, 블록들을 고정 크기의 서브 블록들로 분할하는 것과 같은 샘플들 또는 계수들의 그룹들로, 또는 어레이들로서 비디오 인코더(114) 및 비디오 디코더(134) 내에서의 기능 모듈들 간에 전달된다. 비디오 인코더(114) 및 비디오 디코더(134)는 도 2a 및 도 2b에 도시된 바와 같이 범용 컴퓨터 시스템(200)을 이용하여 구현될 수 있고, 여기서 다양한 기능 모듈은 컴퓨터 시스템(200) 내의 전용 하드웨어에 의해, 하드 디스크 드라이브(205)상에 상주하고 프로세서(205)에 의한 그 실행 시에 제어되는 소프트웨어 애플리케이션 프로그램(233)의 하나 이상의 소프트웨어 코드 모듈과 같은 컴퓨터 시스템(200) 내에서 실행가능한 소프트웨어에 의해 구현될 수 있다. 대안적으로, 비디오 인코더(114) 및 비디오 디코더(134)는 컴퓨터 시스템(200) 내에서 실행가능한 소프트웨어와 전용 하드웨어의 조합에 의해 구현될 수 있다. 비디오 인코더(114), 비디오 디코더(134) 및 설명된 방법들은 설명된 방법들의 기능들 또는 서브 기능들을 수행하는 하나 이상의 집적 회로와 같은 전용 하드웨어로 대안적으로 구현될 수 있다. 그러한 전용 하드웨어는 그래픽 처리 유닛(GPU)들, 디지털 신호 프로세서(DSP)들, 주문형 표준 제품(ASSP)들, 주문형 집적 회로(ASIC)들, 필드 프로그래머블 게이트 어레이(FPGA)들 또는 하나 이상의 마이크로프로세서 및 연관된 메모리들을 포함할 수 있다. 특히, 비디오 인코더(114)는 모듈들(310-386)을 포함하고, 비디오 디코더(134)는 소프트웨어 애플리케이션 프로그램(233)의 하나 이상의 소프트웨어 코드 모듈로서 각각 구현될 수 있는 모듈들(420-496)을 포함한다.
도 3의 비디오 인코더(114)가 VVC(versatile video coding) 비디오 인코딩 파이프라인의 일례이지만, 본 명세서에 설명된 처리 단계들을 수행하기 위해 다른 비디오 코덱들도 사용될 수 있다. 비디오 인코더(114)는 일련의 프레임과 같은 캡처된 프레임 데이터(113)를 수신하고, 각각의 프레임은 하나 이상의 색 채널을 포함한다. 프레임 데이터(113)는 4:2:0 크로마 포맷 또는 4:2:2 크로마 포맷일 수 있다. 블록 파티셔너(310)는 먼저 프레임 데이터(113)를 CTU들로 분할하는데, 일반적으로 형상이 정사각형이고 CTU들에 대한 특정 크기가 사용되도록 구성된다. CTU들의 크기는 예를 들어, 64×64, 128×128, 또는 256×256 루마 샘플일 수 있다. 블록 파티셔너(310)는 또한 각각의 CTU를, 루마 코딩 트리 및 크로마 코딩 트리에 따라 하나 이상의 CB로 분할한다. CB들은 다양한 크기를 가지며, 정사각형 및 비-정사각형 종횡비들 둘 다를 포함할 수 있다. 블록 파티셔너(310)의 동작은 도 10을 참조하여 더 설명된다. 그러나, VVC 표준에서, CB들, CU들, PU들, 및 TU들은 항상 2의 거듭제곱들인 측 길이들을 갖는다. 따라서, 312로서 표현되는 현재 CB가 블록 파티셔너(310)로부터 출력되어, CTU의 루마 코딩 트리 및 크로마 코딩 트리에 따라, CTU의 하나 이상의 블록에 걸친 반복에 따라 진행한다. CTU들을 CB들로 파티셔닝하기 위한 옵션들은 도 5 및 도 6을 참조하여 이하에서 더 설명된다.
프레임 데이터(113)의 제1 분할로부터 생기는 CTU들은 래스터 스캔 순서로 스캔될 수 있고, 하나 이상의 "슬라이스"로 그룹화될 수 있다. 슬라이스는 '인트라'(또는 'I') 슬라이스일 수 있다. 인트라 슬라이스(I 슬라이스)는 슬라이스에서의 모든 CU마다 인트라 예측됨을 나타낸다. 대안적으로, 슬라이스는 단방향- 또는 양방향-예측(제각기, 'P' 또는 'B' 슬라이스)될 수 있어서, 슬라이스에서 단일- 및 양방향-예측의 추가적인 이용가능성을 제각기 나타낸다.
각각의 CTU에 대해, 비디오 인코더(114)는 2개의 스테이지로 동작한다. 제1 스테이지('검색' 스테이지로 지칭됨)에서, 블록 파티셔너(310)는 코딩 트리의 다양한 잠재적인 구성을 테스트한다. 코딩 트리의 각각의 잠재적인 구성은 연관된 '후보' CB들을 갖는다. 제1 스테이지는 낮은 왜곡으로 높은 압축 효율을 제공하는 CB들을 선택하기 위해 다양한 후보 CB를 테스트하는 것을 수반한다. 테스트는 일반적으로 레이트(코딩 비용)와 왜곡(입력 프레임 데이터(113)에 대한 에러)의 가중된 조합에 기초하여 후보 CB가 평가되는 라그랑즈 최적화를 수반한다. '최상의' 후보 CB들(가장 낮은 평가된 레이트/왜곡을 갖는 CB들)은 비트스트림(115)으로의 후속 인코딩을 위해 선택된다. 후보 CB들의 평가에 포함된 것은 주어진 영역에 대해 CB를 사용하거나 또는 다양한 스플릿 옵션에 따라 영역을 추가로 스플릿하고 추가 CB들을 갖는 더 작은 결과 영역들 각각을 코딩하거나, 또는 영역들을 좀 더 스플릿하기 위한 옵션이다. 그 결과, 검색 스테이지에서 CB들 및 코딩 트리 자체들 둘 다가 선택된다.
비디오 인코더(114)는 각각의 CB, 예를 들어, CB(312)에 대해 화살표(320)로 표시된 예측 블록(PB)을 생성한다. PB(320)는 연관된 CB(312)의 콘텐츠들의 예측이다. 감산기 모듈(322)은 PB(320)와 CB(312) 사이의, (324)로 표시된 차이(또는 차이가 공간 도메인에 있는 것을 지칭하는 '잔차(residual)')를 생성한다. 차이(324)는 PB(320) 및 CB(312)에서의 대응하는 샘플들 사이의 블록 크기 차이이다. 차이(324)는 변환되고, 양자화되고 화살표(336)로 표시된 변환 블록(TB)으로서 표현된다. PB(320) 및 연관된 TB(336)는 전형적으로 예를 들어, 평가된 비용 또는 왜곡에 기초하여 많은 가능한 후보 CB 중 하나로부터 선택된다.
후보 코딩 블록(CB)은 연관된 PB 및 결과적인 잔차에 대해 비디오 인코더(114)에 이용 가능한 예측 모드들 중 하나로부터 생기는 CB이다. 각각의 후보 CB는 도 8을 참조하여 후술하는 바와 같이 하나 이상의 대응하는 TB라는 결과를 낳는다. TB(336)는 차이(324)의 양자화되고 변환된 표현이다. 비디오 디코더(114)에서의 예측된 PB와 조합될 때, TB(336)는 비트스트림에서의 추가적인 시그널링을 희생하여 디코딩된 CB들과 원래의 CB(312) 사이의 차이를 감소시킨다.
따라서, 각각의 후보 코딩 블록(CB), 즉 변환 블록(TB)과 조합된 예측 블록(PB)은 연관된 코딩 비용(또는 '레이트') 및 연관된 차이(또는 '왜곡')를 갖는다. 레이트는 전형적으로 비트들로 측정된다. CB의 왜곡은 전형적으로 SAD(sum of absolute differences) 또는 SSD(sum of squared differences)와 같은, 샘플 값들에서의 차이로서 추정된다. 각각의 후보 PB로부터 생기는 추정은 (화살표(388)로 표현된) 인트라 예측 모드를 결정하기 위해 차이(324)를 이용하여 모드 선택기(386)에 의해 결정된다. 각각의 후보 예측 모드와 연관된 코딩 비용의 추정 및 대응하는 잔차 코딩은 잔차의 엔트로피 코딩보다 상당히 낮은 비용으로 수행될 수 있다. 따라서, 레이트 왜곡 의미에서 최적의 모드를 결정하기 위해 다수의 후보 모드가 평가될 수 있다.
레이트 왜곡의 관점에서 최적 모드를 결정하는 것은 전형적으로 라그랑즈 최적화의 변형을 사용하여 달성된다. 인트라 예측 모드(388)의 선택은 전형적으로 특정 인트라 예측 모드의 적용으로부터 생기는 잔차 데이터에 대한 코딩 비용을 결정하는 것을 수반한다. 코딩 비용은 'SATD(sum of absolute transformed differences)'를 사용함으로써 근사화될 수 있으며, 그에 의해 하다마드(Hadamard) 변환과 같은 비교적 간단한 변환이 이용되어 추정되고 변환된 잔차 비용을 획득한다. 비교적 간단한 변환들을 사용하는 일부 구현에서, 단순화된 추정 방법으로부터 생기는 비용들은 그렇지 않았으면 전체 평가로부터 결정되었을 실제 비용들과 단조적으로 관련된다. 단조적으로 관련된 추정된 비용들을 갖는 구현들에서, 단순화된 추정 방법은 비디오 인코더(114)에서의 복잡도의 감소와 함께 동일한 결정(즉, 인트라 예측 모드)을 행하기 위해 사용될 수 있다. 추정된 비용과 실제 비용 사이의 관계에서 가능한 비-단조성(non-monotonicity)을 허용하기 위해, 단순화된 추정 방법이 최상의 후보들의 리스트를 생성하기 위해 사용될 수 있다. 비-단조성(non-monotonicity)은, 예를 들어, 잔차 데이터의 코딩에 이용가능한 추가의 모드 결정들로부터 생길 수 있다. 최상의 후보들의 리스트는 임의 수의 것일 수 있다. 후보들 각각에 대한 잔차 데이터를 코딩하기 위한 최적의 모드 선택들을 확립하기 위해 최상의 후보들을 이용하여 더 완전한 검색이 수행될 수 있어서, 다른 모드 결정들과 함께 인트라 예측 모드의 최종 선택을 허용한다.
다른 모드 결정들은 '변환 스킵(transform skip)'으로 알려진, 순방향 변환을 스킵하는 능력을 포함한다. 변환들을 스킵하는 것은 변환 기저 함수들로서의 표현을 통해 감소된 코딩 비용에 대한 적절한 상관을 결여하는 잔차 데이터에 적합하다. 비교적 단순한 컴퓨터 생성 그래픽과 같은 특정 타입의 콘텐츠가 유사한 거동을 나타낼 수 있다. '스킵된 변환(skipped transform)'의 경우, 변환 자체가 수행되지 않을지라도 잔차 계수들은 여전히 코딩된다.
라그랑주 또는 유사한 최적화 처리는 (블록 파티셔너(310)에 의한) CTU의 CB들로의 최적의 파티셔닝을 선택할 뿐만 아니라 복수의 가능성으로부터 최상의 예측 모드를 선택하는데 채택될 수 있다. 모드 선택기 모듈(386)에서 후보 모드들의 라그랑즈 최적화 프로세스의 적용을 통해, 최저 비용 측정을 갖는 인트라 예측 모드가 '최상의' 모드로서 선택된다. '최상의' 모드는 선택된 인트라 예측 모드(388)이고, 또한 엔트로피 인코더(338)에 의해 비트스트림(115)으로 인코딩된다. 모드 선택기 모듈(386)의 동작에 의한 인트라 예측 모드(388)의 선택은 블록 파티셔너(310)의 동작으로 확장된다. 예를 들어, 인트라 예측 모드(388)의 선택을 위한 후보들은 주어진 블록에 적용가능한 모드들, 및 주어진 블록과 집합적으로 병치된 다중의 더 작은 블록에 적용가능한 추가적 모드들을 포함할 수 있다. 주어진 블록 및 더 작은 병치된 블록들에 적용가능한 모드들을 포함하는 경우들에서, 후보들의 선택의 프로세스는 또한 암시적으로 CTU의 CB들로의 최상의 계층적 분해를 결정하는 프로세스이다.
비디오 인코더(114)의 제2 동작 스테이지('코딩' 스테이지로 지칭됨)에서, 선택된 루마 코딩 트리 및 선택된 크로마 코딩 트리, 따라서 각각의 선택된 CB에 걸친 반복이 비디오 인코더(114)에서 수행된다. 반복에서, CB들은 본 명세서에서 추가로 설명되는 바와 같이, 비트스트림(115)으로 인코딩된다.
엔트로피 인코더(338)는 신택스 요소들의 가변 길이 코딩 및 신택스 요소들의 산술 코딩 둘 다를 지원한다. 컨텍스트 적응 2진 산술 코딩 프로세스를 이용하여 산술 코딩이 지원된다. 산술 코딩된 신택스 요소들은 하나 이상의 '빈(bin)'의 시퀀스들로 구성된다. 빈들은 비트들과 같이 '0' 또는 '1'의 값을 갖는다. 그러나, 빈들은 비트스트림(115)에서 이산 비트들로서 인코딩되지 않는다. 빈들은 연관된 예측된(또는 '가능성 있는' 또는 '가장 가능성 있는') 값 및 '컨텍스트'로 알려진 연관된 확률을 갖는다. 코딩될 실제 빈이 예측된 값과 매칭될 때, '최대 확률 심볼(most probable symbol, MPS)'이 코딩된다. 최대 확률 심볼을 코딩하는 것은 소비된 비트들의 관점에서 비교적 저렴하다. 코딩될 실제 빈이 가능성 있는 값과 매칭되지 않을 때, '최소 확률 심볼(least probable symbol, LPS)'이 코딩된다. 최소 확률 심볼을 코딩하는 것은 소비된 비트들의 관점에서 비교적 높은 비용을 갖는다. 빈 코딩 기술은 '0' 대 '1'의 확률이 스큐(skew)되는 빈들의 효율적인 코딩을 가능하게 한다. 2개의 가능한 값(즉, "플래그")을 갖는 신택스 요소의 경우, 단일 빈이 적절하다. 많은 가능한 값들을 갖는 신택스 요소들의 경우, 빈들의 시퀀스가 필요하다.
시퀀스에서의 더 이른 빈들의 값에 기초하여 시퀀스에서의 더 나중의 빈들의 존재가 결정될 수 있다. 또한, 각각의 빈은 둘 이상의 컨텍스트와 연관될 수 있다. 특정 컨텍스트의 선택은 신택스 요소의 더 이른 빈들, 이웃 신택스 요소들의 빈 값들(즉, 이웃 블록으로부터의 것들) 등에 의존할 수 있다. 컨텍스트 코딩된 빈(context-coded bin)이 인코딩될 때마다, 해당 빈(있는 경우)에 대해 선택된 컨텍스트는 새로운 빈 값을 반영하는 방식으로 갱신된다. 이와 같이, 2진 산술 코딩 방식은 적응적이라고 말한다.
또한, 컨텍스트를 결여한 빈들('바이패스 빈들')이 비디오 인코더(114)에 의해 지원된다. 바이패스 빈들은 '0' 과 '1' 사이의 등가 확률 분포(equiprobable distribution)를 가정하여 코딩된다. 따라서, 각각의 빈은 비트스트림(115)에서 1 비트를 점유한다. 컨텍스트의 부재는 메모리를 절약하고 복잡성을 감소시키므로, 특정한 빈에 대한 값들의 분포가 스큐되지 않는 경우에 바이패스 빈들이 사용된다. 컨텍스트 및 적응을 채택하는 엔트로피 코더의 일례는 CABAC(context adaptive binary arithmetic coder)로서 본 기술 분야에 공지되어 있고 이 코더의 많은 변형들이 비디오 코딩에서 채택되었다.
엔트로피 인코더(338)는 컨텍스트 코딩된 빈 및 바이패스 코딩된 빈의 조합을 사용하여 인트라 예측 모드(388)를 인코딩한다. 전형적으로, '최대 확률 모드들'의 리스트가 비디오 인코더(114)에서 생성된다. 최대 확률 모드들의 리스트는 전형적으로 3개 또는 6개의 모드와 같은 고정된 길이를 갖고, 더 이른 블록들에서 마주치는 모드들을 포함할 수 있다. 컨텍스트 코딩된 빈은 인트라 예측 모드가 최대 확률 모드들 중 하나인지를 나타내는 플래그를 인코딩한다. 인트라 예측 모드(388)가 최대 확률 모드들 중 하나인 경우, 바이패스 코딩된 빈들을 사용하는 추가의 시그널링이 인코딩된다. 인코딩된 추가 시그널링은, 예를 들어, 절단된 단항 빈 문자열을 이용하여, 어느 최대 확률 모드가 인트라 예측 모드(388)에 대응하는지를 나타낸다. 그렇지 않으면, 인트라 예측 모드(388)는 '잔여 모드'로서 인코딩된다. 잔여 모드로서 인코딩하는 것은, 최대 확률 모드 리스트에 존재하는 것들 이외의 인트라 예측 모드들을 표현하기 위해, 바이패스 코딩된 빈들을 사용하여 또한 코딩된, 고정 길이 코드와 같은 대안 신택스를 사용한다.
멀티플렉서 모듈(384)은 결정된 최상의 인트라 예측 모드(388)에 따라 PB(320)를 출력하여, 각각의 후보 CB의 테스트된 예측 모드로부터 선택한다. 후보 예측 모드들은 비디오 인코더(114)에 의해 지원되는 모든 생각 가능한 예측 모드를 포함할 필요는 없다.
예측 모드들은 대체로 2가지 카테고리로 나누어진다. 제1 카테고리는 '인트라-프레임 예측'('인트라 예측'이라고도 지칭됨)이다. 인트라-프레임 예측에서, 블록에 대한 예측이 생성되고, 생성 방법은 현재 프레임으로부터 획득된 다른 샘플들을 사용할 수 있다. 인트라-예측된 PB에 대해, 상이한 인트라-예측 모드들이 루마 및 크로마에 대해 사용되는 것이 가능하고, 따라서 인트라 예측은 주로 PB들에 대한 동작의 관점에서 설명된다.
예측 모드들의 제2 카테고리는 '인터-프레임 예측'('인터 예측'이라고도 지칭됨)이다. 인터-프레임 예측에서, 블록에 대한 예측은 비트스트림에서의 코딩 프레임들의 순서로 현재 프레임에 선행하는 1개 또는 2개의 프레임으로부터의 샘플들을 사용하여 생성된다. 또한, 인터-프레임 예측의 경우, 전형적으로 루마 채널 및 크로마 채널 둘 다에 대해 단일 코딩 트리가 사용된다. 비트스트림에서의 코딩 프레임들의 순서는 캡처되거나 디스플레이될 때의 프레임들의 순서와 상이할 수 있다. 하나의 프레임이 예측을 위해 사용될 때, 블록은 '단방향 예측'이라고 말하며, 하나의 연관된 움직임 벡터를 갖는다. 2개의 프레임이 예측을 위해 사용될 때, 블록은 "양방향 예측(bi-predicted)"이라고 말하며, 2개의 연관된 움직임 벡터를 갖는다. P 슬라이스의 경우, 각각의 CU는 인트라 예측 또는 단방향 예측될 수 있다. B 슬라이스의 경우, 각각의 CU는 인트라 예측, 단방향 예측, 또는 양방향 예측될 수 있다. 프레임들은 전형적으로 '픽처 그룹' 구조를 이용하여 코딩되어, 프레임들의 시간적 계층 구조를 가능하게 한다. 프레임들의 시간적 계층 구조는 프레임이 프레임들의 디스플레이 순서로 선행 및 후속 픽처를 참조할 수 있게 한다. 이미지들은 각각의 프레임을 디코딩하기 위한 종속성들이 충족되는 것을 보장하는 데 필요한 순서로 코딩된다.
인터 예측의 서브카테고리는 '스킵 모드'로 지칭된다. 인터 예측 및 스킵 모드들은 2개의 별개의 모드로서 설명된다. 그러나, 인터 예측 모드 및 스킵 모드 둘 다는 선행 프레임들로부터의 샘플들의 블록들을 참조하는 움직임 벡터들을 수반한다. 인터 예측은 움직임 벡터 예측자에 대한 움직임 벡터를 지정하는 코딩된 움직임 벡터 델타를 수반한다. 움직임 벡터 예측자는 '병합 인덱스'로 선택된 하나 이상의 후보 움직임 벡터의 리스트로부터 획득된다. 코딩된 움직임 벡터 델타는 선택된 움직임 벡터 예측에 공간 오프셋을 제공한다. 인터 예측은 또한 비트스트림(133)에서 코딩된 잔차를 사용한다. 스킵 모드는 여러 움직임 벡터 후보로부터 하나를 선택하기 위해 인덱스('병합 인덱스'로 또한 명명됨)만을 사용한다. 선택된 후보는 어떠한 추가적인 시그널링도 없이 사용된다. 또한, 스킵 모드는 임의의 잔차 계수들의 코딩을 지원하지 않는다. 스킵 모드가 사용될 때 코딩된 잔차 계수들의 부재는 스킵 모드에 대한 변환들을 수행할 필요가 없다는 것을 의미한다. 따라서, 스킵 모드는 전형적으로 파이프라인 처리 문제를 야기하지 않는다. 파이프라인 처리 문제는 인트라 예측된 CU들 및 인터 예측된 CU들에 대한 경우일 수 있다. 스킵 모드의 제한된 시그널링으로 인해, 스킵 모드는 비교적 높은 품질의 참조 프레임들이 이용가능할 때 매우 높은 압축 성능을 달성하는데 유용하다. 랜덤 액세스 픽처 그룹 구조의 더 높은 시간적 계층들에서의 양방향 예측 CU들은 전형적으로 기저의 움직임을 정확하게 반영하는 움직임 벡터 후보들 및 고품질 참조 픽처들을 갖는다.
샘플들은 움직임 벡터 및 참조 픽처 인덱스에 따라 선택된다. 움직임 벡터 및 참조 픽처 인덱스는 모든 색 채널에 적용되고, 따라서 인터 예측은 주로 PB들보다는 PU들에 대한 동작의 관점에서 설명된다. 각각의 카테고리(즉, 인트라 예측 및 인터 예측) 내에서, 상이한 기법들이 적용되어 PU를 생성할 수 있다. 예를 들어, 인트라 예측은 규정된 필터링 및 생성 프로세스에 따라 PU를 생성하는 방향과 조합하여, 이전에 재구성된 샘플들의 인접한 행들 및 열들로부터의 값들을 사용할 수 있다. 대안적으로, PU는 적은 수의 파라미터를 사용하여 기술될 수 있다. 인터 예측 방법들은 움직임 파라미터들의 수 및 그들의 정밀도에 있어서 변할 수 있다. 움직임 파라미터들은 전형적으로 참조 프레임들 각각에 대한 공간 변환에 더해서 참조 프레임들의 리스트들로부터의 어느 참조 프레임(들)이 사용될 것인지를 나타내는 참조 프레임 인덱스를 포함하지만, 더 많은 프레임들, 특수 프레임들, 또는 스케일링 및 회전과 같은 복잡한 아핀 파라미터들을 포함할 수 있다. 그에 부가하여, 참조된 샘플 블록들에 기초하여 조밀한 움직임 추정들을 생성하기 위해 미리 결정된 움직임 리파인먼트(refinement) 프로세스가 적용될 수 있다.
'최상의' PB(320)를 결정하고 선택하고, 감산기(322)에서의 원래의 샘플 블록으로부터 PB(320)를 감산하면, (324)로서 표현되는 최저 코딩 비용(324)을 갖는 잔차가 획득되고 손실 압축을 거친다. 손실 압축 프로세스는 변환, 양자화 및 엔트로피 코딩의 단계들을 포함한다. 변환 모듈(326)은 차이(324)에 순방향 변환을 적용하고, 차이(324)를 주파수 도메인으로 변환하고, 화살표(332)로 표현된 변환 계수들을 생성한다. 순방향 변환은 전형적으로 분리가능하여, 각각의 블록의 행들의 세트 및 이어서 열들의 세트를 변환한다. 행들 및 열들의 각각의 세트의 변환은 1차원 변환들을 먼저 블록의 각각의 행에 적용하여 부분 결과를 생성한 다음 부분 결과의 각각의 열에 적용하여 최종 결과를 생성함으로써 수행된다.
변환 계수들(332)은 양자화기 모듈(334)에 전달된다. 모듈(334)에서, '양자화 파라미터'에 따른 양자화가 수행되어 화살표(336)로 표현된 잔차 계수들을 생성한다. 양자화 파라미터는 주어진 TB에 대해 일정하며, 따라서 TB에 대한 잔차 계수들의 생성을 위한 균일한 스케일링이라는 결과를 낳는다. 또한, '양자화 행렬'의 적용에 의해 불균일한 스케일링이 가능하며, 그에 의해, 양자화 파라미터 및 전형적으로 TB의 크기와 동일한 크기를 갖는 스케일링 행렬에서의 대응하는 엔트리의 조합으로부터 각각의 잔차 계수에 대해 적용되는 스케일링 인자가 도출된다. 잔차 계수들(336)은 비트스트림(115)에서의 인코딩을 위해 엔트로피 인코더(338)에 공급된다. 전형적으로, TU의 적어도 하나의 유의 잔차 계수(significant residual coefficient)를 갖는 각각의 TB의 잔차 계수들은 스캔 패턴에 따라 값들의 순서화된 리스트를 생성하기 위해 스캐닝된다. 스캔 패턴은 일반적으로 TB를 4×4 '서브 블록들'의 시퀀스로서 스캐닝하여, 서브 블록들의 배열이 TB의 크기에 의존하면서, 잔차 계수들의 4×4 세트들의 세분성(granularity)으로 정규 스캐닝 동작을 제공한다. 추가적으로, 예측 모드(388) 및 대응하는 블록 파티셔닝은 또한 비트스트림(115)에서 인코딩된다.
전술한 바와 같이, 비디오 인코더(114)는 비디오 디코더(134)에서 보이는 프레임 표현에 대응하는 프레임 표현에 액세스할 필요가 있다. 따라서, 잔차 계수들(336)은 또한 양자화 해제기 모듈(340)에 의해 역양자화되어, 화살표(342)로 표현된 역 변환 계수들을 생성한다. 역변환 계수들(342)은 TU의, 화살표(350)로 표현된, 잔차 샘플들을 생성하기 위해 역변환 모듈(348)을 통과한다. 합산 모듈(352)은 잔차 샘플들(350) 및 PU(320)를 합산하여 CU의 재구성된 샘플들(화살표(354)로 표시됨)을 생성한다.
재구성된 샘플들(354)은 참조 샘플 캐시(356) 및 인 루프(in-loop) 필터 모듈(368)로 전달된다. ASIC상의 정적 RAM을 사용하여 전형적으로 구현되는 참조 샘플 캐시(356)(따라서 고가의 오프 칩 메모리 액세스를 회피함)는 프레임에서의 후속 CU들에 대한 인트라 프레임 PB들을 생성하기 위한 종속성들을 만족시키는데 필요한 최소 샘플 스토리지를 제공한다. 최소 종속성들은 CTU들의 다음 행에 의한 사용 및 CTU의 높이에 의해 그 범위가 설정되는 열 버퍼링을 위해, CTU들의 행의 하단을 따른 샘플들의 '라인 버퍼'를 전형적으로 포함한다. 참조 샘플 캐시(356)는 참조 샘플들(화살표(358)로 표현됨)을 참조 샘플 필터(360)에 공급한다. 샘플 필터(360)는 평활화 연산을 적용하여 필터링된 참조 샘플들(화살표(362)로 표시됨)을 생성한다. 필터링된 참조 샘플들(362)은 인트라 프레임 예측 모듈(364)에 의해 사용되어 화살표(366)로 표현된, 샘플들의 인트라 예측된 블록을 생성한다. 각각의 후보 인트라 예측 모드에 대해, 인트라 프레임 예측 모듈(364)은 샘플들의 블록, 즉 (366)을 생성한다.
인 루프 필터 모듈(368)은 재구성된 샘플들(354)에 몇 개의 필터링 스테이지를 적용한다. 필터링 스테이지들은 불연속성에 기인하는 아티팩트를 감소시키기 위해 CU 경계들에 정렬된 평활화를 적용하는 '디블로킹 필터(deblocking filter, DBF)'를 포함한다. 인 루프 필터 모듈(368)에 존재하는 또 다른 필터링 스테이지는 '적응성 루프 필터(adaptive loop filter, ALF)'이고, 이것은 위너(Wiener) 기반 적응성 필터를 적용하여 왜곡을 더 감소시킨다. 인 루프 필터 모듈(368)에서의 추가의 이용가능한 필터링 스테이지는 'SAO(sample adaptive offset)' 필터이다. SAO 필터는 먼저 재구성된 샘플들을 하나 또는 다중의 카테고리로 분류하고, 할당된 카테고리에 따라 샘플 레벨에서 오프셋을 적용함으로써 동작한다.
화살표(370)로 표현된 필터링된 샘플은 인 루프 필터 모듈(368)로부터 출력된다. 필터링된 샘플들(370)은 프레임 버퍼(372)에 저장된다. 프레임 버퍼(372)는 전형적으로 여러 개(예를 들어, 최대 16개)의 픽처를 저장하는 용량을 가지며, 따라서 메모리(206)에 저장된다. 프레임 버퍼(372)는 요구되는 큰 메모리 소비로 인해 온-칩 메모리를 사용하여 전형적으로 저장되지 않는다. 이와 같이, 프레임 버퍼(372)에의 액세스는 메모리 대역폭의 면에서 볼 때 비용이 많이 든다. 프레임 버퍼(372)는 참조 프레임들(화살표 374로 표현됨)을 움직임 추정 모듈(376) 및 움직임 보상 모듈(380)에 제공한다.
움직임 추정 모듈(376)은 다수의 '움직임 벡터'(378로 표시됨)를 추정하며, 각각은 프레임 버퍼(372)에서의 참조 프레임들 중 하나에서의 블록을 참조하는, 현재 CB의 위치로부터의 데카르트 공간 오프셋이다. (382로 표현되는) 참조 샘플들의 필터링된 블록이 각각의 움직임 벡터에 대해 생성된다. 필터링된 참조 샘플들(382)은 모드 선택기(386)에 의한 잠재적 선택을 위해 이용 가능한 추가 후보 모드들을 형성한다. 더욱이, 주어진 CU에 대해, PU(320)는 하나의 참조 블록을 사용하여 형성될 수 있거나('단방향 예측') 또는 2개의 참조 블록을 사용하여 형성될 수 있다('양방향 예측'). 선택된 움직임 벡터에 대해, 움직임 보상 모듈(380)은 움직임 벡터들에서 서브 픽셀 정확도를 지원하는 필터링 프로세스에 따라 PB(320)를 생성한다. 이와 같이, 움직임 추정 모듈(376)(이것은 많은 후보 움직임 벡터들에 대해 동작함)은 감소된 계산 복잡성을 달성하기 위해 움직임 보상 모듈(380)(이것은 선택된 후보에 대해서만 동작함)의 것과 비교하여 단순화된 필터링 프로세스를 수행할 수 있다.
도 3의 비디오 인코더(114)가 VVC(versatile video coding)를 참조하여 기술되어 있지만, 다른 비디오 코딩 표준 또는 구현이 또한 모듈들(310 내지 386)의 처리 스테이지들을 채택할 수 있다. 프레임 데이터(113)(및 비트스트림(115))는 또한 메모리(206), 하드 디스크 드라이브(210), CD-ROM, Blu-ray diskTM 또는 다른 컴퓨터 판독가능 저장 매체로부터 판독(또는 그것에 기입)될 수 있다. 또한, 프레임 데이터(113)(및 비트스트림(115))는 통신 네트워크(220) 또는 무선 주파수 수신기에 접속된 서버와 같은 외부 소스로부터 수신(또는 그것에 송신)될 수 있다.
비디오 디코더(134)는 도 4에 도시되어 있다. 도 4의 비디오 디코더(134)가 VVC(versatile video coding) 비디오 인코딩 파이프라인의 일례이지만, 본 명세서에 기술된 처리 스테이지들을 수행하기 위해 다른 비디오 코덱들도 사용될 수 있다. 도 4에 도시된 바와 같이, 비트스트림(133)은 비디오 디코더(134)에 입력된다. 비트스트림(133)은 메모리(206), 하드 디스크 드라이브(210), CD-ROM, Blu-ray diskTM 또는 다른 비일시적 컴퓨터 판독가능 저장 매체로부터 판독될 수 있다. 대안적으로, 비트스트림(133)은 통신 네트워크(220) 또는 무선 주파수 수신기에 접속된 서버와 같은 외부 소스로부터 수신될 수 있다. 비트스트림(133)은 디코딩될 캡처된 프레임 데이터를 표현하는 인코딩된 신택스 요소들을 포함한다.
비트스트림(133)은 엔트로피 디코더 모듈(420)에 입력된다. 엔트로피 디코더 모듈(420)은 비트스트림(133)으로부터 신택스 요소들을 추출하고 신택스 요소들의 값들을 비디오 디코더(134)에서의 다른 모듈들에 전달한다. 엔트로피 디코더 모듈(420)은 CABAC 알고리즘을 적용하여 비트스트림(133)으로부터 신택스 요소들을 디코딩한다. 디코딩된 신택스 요소들은 비디오 디코더(134) 내의 파라미터들을 재구성하기 위해 사용된다. 파라미터들은 잔차 계수들(화살표(424)로 표현됨) 및 인트라 예측 모드와 같은 모드 선택 정보(화살표(458)로 표현됨)를 포함한다. 모드 선택 정보는 또한 움직임 벡터들, 및 각각의 CTU의 하나 이상의 CB로의 파티셔닝과 같은 정보를 포함한다. 파라미터들은, 전형적으로 이전에 디코딩된 CB들로부터의 샘플 데이터와 조합하여, PB들을 생성하는데 이용된다.
잔차 계수들(424)은 양자화 해제기 모듈(428)에 입력된다. 양자화 해제기 모듈(428)은 잔차 계수들(424)에 대해 역 스케일링(또는 '스케일링')을 수행하여 양자화 파라미터에 따라 재구성된 변환 계수들(화살표(440)로 표현됨)을 생성한다. 비균일 역 양자화 행렬을 사용하는 것이 비트스트림(133)에 표시된다면, 비디오 디코더(134)는 스케일링 인자들의 시퀀스로서 비트스트림(133)으로부터의 양자화 행렬을 판독하고 스케일링 인자들을 행렬로 배열한다. 역 스케일링은 양자화 파라미터와 조합하여 양자화 행렬을 사용하여 재구성된 변환 계수들(440)을 생성한다.
재구성된 변환 계수들(440)은 역변환 모듈(444)에 전달된다. 모듈(444)은 계수들을 주파수 도메인으로부터 공간 도메인으로 되돌려 변환한다. TB는 유의 잔차 계수들 및 비 유의 잔차 계수 값들에 실효적으로 기초한다. 모듈(444)의 동작의 결과는 화살표(448)로 표현된 잔차 샘플들의 블록이다. 잔차 샘플들(448)은 대응하는 CU와 크기가 동일하다. 잔차 샘플들(448)은 합산 모듈(450)에 공급된다. 합산 모듈(450)에서, 잔차 샘플들(448)은 (화살표(452)로 표현된) 디코딩된 PB에 합산되어, 화살표(456)로 표현된 재구성된 샘플들의 블록을 생성한다. 재구성된 샘플들(456)은 재구성된 샘플 캐시(460) 및 인 루프 필터링 모듈(488)에 공급된다. 인 루프 필터링 모듈(488)은 (492)로 표현되는 프레임 샘플들의 재구성된 블록들을 생성한다. 프레임 샘플들(492)은 프레임 버퍼(496)에 기입된다.
재구성된 샘플 캐시(460)는 비디오 인코더(114)의 재구성된 샘플 캐시(356)와 유사하게 동작한다. 재구성된 샘플 캐시(460)는 (예를 들어, 전형적으로 온 칩 메모리인, 대신에 데이터(232)를 사용함으로써) 메모리(206) 없이 후속 CB들을 인트라 예측하는 데 필요한 재구성된 샘플에 대한 스토리지를 제공한다. 화살표(464)로 표현된 참조 샘플들은 재구성된 샘플 캐시(460)로부터 획득되고 참조 샘플 필터(468)에 공급되어 화살표(472)로 표시된 필터링된 참조 샘플들을 생성한다. 필터링된 참조 샘플들(472)은 인트라 프레임 예측 모듈(476)에 공급된다. 모듈(476)은, 비트스트림(133)에서 시그널링되고 엔트로피 디코더(420)에 의해 디코딩되는 인트라 예측 모드 파라미터(458)에 따라, 화살표(480)로 표현된 인트라 예측된 샘플들의 블록을 생성한다.
인트라 예측이 현재 CB에 대해 비트스트림(133)에서 표시될 때, 인트라 예측된 샘플들(480)은 멀티플렉서 모듈(484)을 통해 디코딩된 PB(452)를 형성한다.
인터 예측이 현재 CB에 대해 비트스트림(133)에서 표시될 때, 움직임 보상 모듈(434)은 프레임 버퍼(496)로부터 샘플들의 블록을 선택하고 필터링하기 위해 움직임 벡터 및 참조 프레임 인덱스를 사용하여, (438)로 표현된 인터 예측된 샘플들의 블록을 생성한다. 샘플들의 블록(498)은 프레임 버퍼(496)에 저장된 이전에 디코딩된 프레임으로부터 획득된다. 양방향 예측의 경우, 디코딩된 PB(452)에 대한 샘플들을 생성하기 위해 샘플들의 2개의 블록이 생성되고 함께 혼합된다. 프레임 버퍼(496)는 인 루프 필터링 모듈(488)로부터의 필터링된 블록 데이터(492)로 채워진다. 비디오 인코더(114)의 인 루프 필터링 모듈(368)에서와 같이, 인 루프 필터링 모듈(488)은 DBF, ALF 및 SAO 필터링 동작들 중 임의의 것, 적어도, 또는 전부를 적용한다. 인 루프 필터링 모듈(368)은 재구성된 샘플들(456)로부터 필터링된 블록 데이터(492)를 생성한다.
도 5는 VVC(versatile video coding)의 트리 구조에서 영역의 하나 이상의 서브 영역으로의 이용가능한 분할 또는 스플릿의 컬렉션(500)을 도시한 개략 블록도이다. 도 3을 참조하여 설명된 바와 같이, 라그랑즈 최적화에 의해 결정된 바와 같이, 컬렉션(500)에 도시된 분할들은 각각의 CTU를 코딩 트리에 따라 하나 이상의 CU 또는 CB로 분할하기 위해 인코더(114)의 블록 파티셔너(310)에 이용가능하다.
컬렉션(500)이 정사각형 영역들만이 다른, 가능하게는 비-정사각형 서브-영역들로 분할되는 것을 도시하지만, 다이어그램(500)은 잠재적 분할들을 도시하고 있지만 포함 영역(containing region)이 정사각형일 필요는 없다는 것을 이해해야 한다. 포함 영역이 비-정사각형인 경우, 분할로부터 생기는 블록들의 치수들은 포함 블록의 종횡비에 따라 스케일링된다. 일단 영역이 추가로 스플릿되지 않으면, 즉, 코딩 트리의 리프 노드에서, CU는 해당 영역을 점유한다. 블록 파티셔너(310)에 의한 CTU의 하나 이상의 CU로의 특정 세분(subdivision)은 CTU의 '코딩 트리'로 지칭된다. 영역들을 서브-영역들로 세분화하는 프로세스는 결과적인 서브-영역들이 최소 CU 사이즈에 도달할 때 종료되어야만 한다. 예를 들어, 4×4보다 작은 크기들을 금지하도록 CU들을 제약하는 것에 더하여, CU들은 4의 최소 폭 또는 높이를 갖도록 제약된다. 폭 및 높이 관점에서 또는 폭 또는 높이 관점 둘 모두에서 다른 최소값들이 또한 가능하다. 세분 프로세스는 또한 가장 깊은 분해 레벨 이전에 종료되어, 최소 CU 크기보다 큰 CU라는 결과를 낳을 수 있다. 스플릿이 발생하지 않을 수 있어서, 단일 CU가 CTU 전체를 점유하는 결과를 낳을 수 있다. CTU 전체를 점유하는 단일 CU는 가장 큰 이용가능한 코딩 유닛 크기이다. 또한, 스플릿이 발생하지 않은 CU들은 처리 영역 크기보다 크다. 코딩 트리의 최고 레벨에서의 2진 또는 3진 스플릿의 결과로서, 64×128, 128×64, 32×128, 및 128×32와 같은 CU 크기들이 가능하며, 이들 각각은 또한 처리 영역 크기보다 크다. 도 10을 참조하여 더 설명되는 처리 영역 크기보다 큰 CUS의 예들.
코딩 트리의 리프 노드들에는 더 이상의 세분 없이 CU들이 존재한다. 예를 들어, 리프 노드(510)는 하나의 CU를 포함한다. 코딩 트리의 비-리프(non-leaf) 노드들에는 2개 이상의 추가 노드로의 스플릿이 존재하고, 이들 각각은 따라서 하나의 CU인 리프 노드를 포함하거나 또는 더 작은 영역들로의 추가 스플릿들을 포함할 수 있다.
쿼드-트리 스플릿(512)은 도 5에 도시된 바와 같이 포함 영역을 4개의 동일 크기 영역으로 분할한다. HEVC와 비교하여, VVC(versatile video coding)는 수평 2진 스플릿(514) 및 수직 2진 스플릿(516)의 추가에 의해 추가적인 유연성을 달성한다. 스플릿들(514, 516) 각각은 포함 영역을 2개의 동일 크기 영역으로 분할한다. 분할은 포함 블록 내의 수평 경계(514) 또는 수직 경계(516)를 따른다.
3진(ternary) 수평 스플릿(518) 및 3진 수직 스플릿(520)의 추가에 의해 VVC에서 추가의 유연성이 달성된다. 3진 스플릿들(518 및 520)은 블록을, 포함 영역의 폭 또는 높이의 1/4 및 3/4를 따라 수평으로(518) 또는 수직으로(520) 경계를 이루는 3개의 영역으로 분할한다. 쿼드 트리, 2진 트리, 및 3진 트리의 조합은 'QTBTTT'로 지칭된다. 트리의 루트는 0개 이상의 쿼드트리 스플릿(트리의 'QT' 섹션)을 포함한다. 일단 QT 섹션이 종료되면, 0개 이상의 2진 또는 3진 스플릿(트리의 '멀티-트리' 또는 'MT' 섹션)이 발생할 수 있고, 최종적으로 트리의 리프 노드들에서의 CB들 또는 CU들에서 종료된다. 트리가 모든 색 채널들을 설명하는 경우, 트리 리프 노드들은 CU들이다. 트리가 루마 채널 또는 크로마 채널들을 설명하는 경우, 트리 리프 노드들은 CB들이다.
쿼드 트리만을 지원하고 따라서 정사각형 블록들만을 지원하는 HEVC와 비교하여, QTBTTT는 특히 2진 트리 및/또는 3진 트리 스플릿들의 가능한 재귀적 적용을 고려하면, 더 많은 가능한 CU 크기들이라는 결과를 낳는다. 특이한 (예를 들어, 비 정사각형) 블록 크기들에 대한 잠재성은 블록 폭 또는 높이가 4개 미만의 샘플이거나 또는 4개 샘플의 배수가 아닌 결과를 낳는 스플릿들을 제거하기 위해 스플릿 옵션들을 제약함으로써 감소될 수 있다. 일반적으로, 제약은 루마 샘플들을 고려하는데 적용될 것이다. 그러나, 설명된 배열들에서, 제약은 크로마 채널들에 대한 블록들에 개별적으로 적용될 수 있다. 크로마 채널들에 대한 스플릿 옵션들에 대한 제약의 적용은, 예를 들어, 프레임 데이터가 4:2:0 크로마 포맷 또는 4:2:2 크로마 포맷일 때, 루마 대 크로마에 대한 상이한 최소 블록 크기들이라는 결과를 낳을 수 있다. 각각의 스플릿은, 포함 영역에 대해, 변경되지 않은, 이등분된 또는 사등분된 측면 치수를 갖는 서브-영역들을 생성한다. 그 후, CTU 크기는 2의 거듭제곱이기 때문에, 모든 CU들의 측면 치수들도 2의 거듭제곱들이다.
도 6은 VVC에 이용되는 QTBTTT(또는 '코딩 트리') 구조의 데이터 흐름(600)을 예시하는 개략 흐름도이다. QTBTTT 구조는 CTU의 하나 이상의 CU로의 분할을 정의하기 위해 각각의 CTU에 대해 사용된다. 각각의 CTU의 QTBTTT 구조는 비디오 인코더(114)에서의 블록 파티셔너(310)에 의해 결정되고, 비트스트림(115)으로 인코딩되거나 또는 비디오 디코더(134)에서의 엔트로피 디코더(420)에 의해 비트스트림(133)으로부터 디코딩된다. 데이터 흐름(600)은, 도 5에 도시된 분할들에 따라, CTU를 하나 이상의 CU로 분할하기 위해 블록 파티셔너(310)가 이용할 수 있는 허용가능한 조합들을 더 특징으로 한다.
계층의 상단 레벨, 즉 CTU에서 시작하여, 0개 이상의 쿼드-트리 분할이 먼저 수행된다. 구체적으로, 블록 파티셔너(310)에 의해 쿼드-트리(QT) 스플릿 결정(610)이 이루어진다. '1' 심볼을 반환하는 (610)에서의 결정은 쿼드-트리 스플릿(512)에 따라 현재 노드를 4개의 서브 노드로 스플릿하라는 결정을 나타낸다. 그 결과는, (620)에서와 같이, 4개의 새로운 노드의 생성이고, 각각의 새로운 노드에 대해 QT 스플릿 결정(610)으로 회귀한다. 각각의 새로운 노드는 래스터 (또는 Z-스캔) 순서로 고려된다. 대안적으로, QT 스플릿 결정(610)이 어떤 추가 스플릿도 수행되지 않을 것임을 나타내는 경우('0' 심볼을 반환함), 쿼드-트리 파티셔닝이 중단되고 멀티-트리(MT) 스플릿들이 후속하여 고려된다.
먼저, 블록 파티셔너(310)에 의해 MT 스플릿 결정(612)이 행해진다. (612)에서, MT 스플릿을 수행하라는 결정이 표시된다. 결정(612)에서 '0' 심볼을 반환하는 것은, 노드를 서브 노드들로 추가로 스플릿하는 것이 더 이상 수행되지 않을 것임을 나타낸다. 노드의 추가 스플릿이 수행되지 않는 경우, 노드는 코딩 트리의 리프 노드이고 CU에 대응한다. (622)에서, 리프 노드가 출력된다. 대안적으로, MT 스플릿(612)이 MT 스플릿을 수행하라는 결정을 나타내면('1' 심볼을 반환하면), 블록 파티셔너(310)는 방향 결정(614)으로 진행한다.
방향 결정(614)은 수평('H' 또는 '0') 또는 수직('V' 또는 '1')으로서 MT 스플릿의 방향을 나타낸다. 블록 파티셔너(310)는 결정(614)이 수평 방향을 나타내는 '0'을 반환하는 경우, 결정(616)으로 진행한다. 블록 파티셔너(310)는 결정(614)이 수직 방향을 나타내는 '1'을 반환하는 경우, 결정(618)으로 진행한다.
결정들(616 및 618) 각각에서, MT 스플릿을 위한 파티션의 수는 BT/TT 스플릿에서 2개(2진 스플릿 또는 'BT' 노드) 또는 3개(3진 스플릿 또는 'TT')로서 표시된다. 즉, BT/TT 스플릿 결정(616)은 (614)로부터의 표시된 방향이 수평일 때 블록 파티셔너(310)에 의해 이루어지고 BT/TT 스플릿 결정(618)은 (614)로부터의 표시된 방향이 수직일 때 블록 파티셔너(310)에 의해 이루어진다.
BT/TT 스플릿 결정(616)은 수평 스플릿이 '0'을 반환함으로써 표시되는 2진 스플릿(514)인지 '1'을 반환함으로써 표시되는 3진 스플릿(518)인지를 표시한다. BT/TT 스플릿 결정(616)이 2진 스플릿을 나타내는 경우, HBT CTU 노드 생성 단계(625)에서 2개의 노드가 2진 수평 스플릿(514)에 따라 블록 파티셔너(310)에 의해 생성된다. BT/TT 스플릿(616)이 3진 스플릿을 나타내는 경우, HTT CTU 노드 생성 단계(626)에서 3개의 노드가 3진 수평 스플릿(518)에 따라 블록 파티셔너(310)에 의해 생성된다.
BT/TT 스플릿 결정(618)은 수직 스플릿이 '0'을 반환함으로써 표시되는 2진 스플릿(516)인지 '1'을 반환함으로써 표시되는 3진 스플릿(520)인지를 표시한다. BT/TT 스플릿(618)이 2진 스플릿을 나타내는 경우, VBT CTU 노드 생성 단계(627)에서, 2개의 노드가 수직 2진 스플릿(516)에 따라 블록 파티셔너(310)에 의해 생성된다. BT/TT 스플릿(618)이 3진 스플릿을 나타내는 경우, VTT CTU 노드 생성 단계(628)에서 3개의 노드가 수직 3진 스플릿(520)에 따라 블록 파티셔너(310)에 의해 생성된다. 단계들(625-628)로부터 생기는 각각의 노드에 대해, MT 스플릿 결정(612)으로의 데이터 흐름(600)의 회귀는 방향(614)에 의존하여 좌측 대 우측 또는 상단 대 하단 순서로 적용된다. 그 결과, 2진 트리 및 3진 트리 스플릿들이 다양한 크기들을 갖는 CU들을 생성하기 위해 적용될 수 있다.
코딩 트리의 각각의 노드에서의 허용된 및 허용되지 않은 스플릿들의 세트들이 도 9를 참조하여 더 설명된다.
도 7a 및 7b는 CTU(710)의 다수의 CU 또는 CB로의 예시적인 분할(700)을 제공한다. 예시적인 CU(712)가 도 7a에 도시되어 있다. 도 7a는 CTU(710)에서의 CU들의 공간 배열을 도시한다. 예시적인 분할(700)은 또한 도 7b에서 코딩 트리(720)로서 도시되어 있다.
도 7a의 CTU(710)에서의 각각의 비-리프 노드, 예를 들어, 노드들(714, 716 및 718)에서, (추가로 분할될 수 있거나 CU들일 수 있는) 포함된 노드들은 코딩 트리(720)에서의 열들로서 표현되는, 노드들의 리스트들을 생성하기 위해 "Z-오더"로 스캐닝 또는 순회(traverse)된다. 쿼드-트리 스플릿의 경우, Z-오더 스캐닝은 좌측 상단에서 우측으로 이어서 좌측 하단에서 우측으로의 순서가 되는 결과를 낳는다. 수평 및 수직 스플릿들에 대해, Z-오더 스캐닝(순회)은 제각기 상단에서 하단으로의 스캔 그리고 좌측에서 우측으로의 스캔으로 단순화된다. 도 7b의 코딩 트리(720)는 적용된 스캔 순서에 따라 모든 노드들 및 CU들을 열거한다. 각각의 스플릿은 리프 노드(CU)에 도달할 때까지 트리의 다음 레벨에서 2, 3 또는 4개의 새로운 노드의 리스트를 생성한다.
블록 파티셔너(310)에 의해 이미지를 CTU들로 분해하고 추가로 CU들로 분해하고, 또한 도 3을 참조하여 설명된 바와 같이 CU들을 이용하여 각각의 잔차 블록(324)을 생성하였으므로, 잔차 블록들은 비디오 인코더(114)에 의해 순방향 변환 및 양자화를 겪게 된다. 결과적인 TB들(336)은 엔트로피 코딩 모듈(338)의 동작의 일부로서 잔차 계수들의 순차적 리스트를 형성하도록 후속적으로 스캐닝된다. 비트스트림(133)으로부터 TB들을 획득하기 위해 비디오 디코더(134)에서 동등한 프로세스가 수행된다.
도 7a 및 도 7b의 예는 루마 채널 및 크로마 채널 둘 다에 적용가능한 코딩 트리를 기술한다. 그러나, 도 7a 및 도 7b의 예는 또한 단지 루마 채널에 적용 가능한 코딩 트리 또는 단지 크로마 채널들에 적용 가능한 코딩 트리의 순회의 관점에서의 거동을 예시한다. 많은 네스팅된 스플릿들을 갖는 코딩 트리들에 대하여, 더 깊은 레벨들에서의 이용가능한 스플릿 옵션들은 대응하는 작은 영역들에 대한 이용가능한 블록 크기들에 대한 제한들에 의해 제약된다. 작은 영역들에 대해 이용가능한 블록 크기들에 대한 제한들은 블록 처리 레이트가 너무 높아서 구현들에 대한 합리적이지 않은 부담을 주는 최악의 경우를 방지하기 위해 부여된다. 특히, 블록 크기들이 크로마에서 16(sixteen)개 샘플의 배수이어야 한다는 제약은 구현들이 16(sixteen)개 샘플의 세분성으로 샘플들을 처리할 수 있게 한다. 블록 크기들을 16개 샘플의 배수로 제약하는 것은 특히 '인트라 재구성' 피드백 루프, 즉 모듈들(450, 460, 468, 476, 및 484)을 수반하는 도 4의 비디오 디코더(134)에서의 경로, 및 비디오 인코더(114)에서의 등가 경로와 관련된다. 특히, 블록 크기를 16(sixteen)개 샘플의 배수로 제약하는 것은 인트라 예측 모드에서 처리량을 유지하는 것을 돕는다. 예를 들어, 'SIMD(simultaneous data multiple instruction)' 마이크로프로세서 아키텍처들은 흔히 16개의 샘플을 포함할 수 있는 광 워드(wide word)들에 대해 동작한다. 또한, 하드웨어 아키텍처들은 인트라 재구성 피드백 루프를 따라 샘플들을 전송하기 위해 16개 샘플의 폭을 갖는 버스들과 같은 넓은 버스들을 사용할 수 있다. 더 작은 블록 크기, 예를 들어, 4개의 샘플이 사용되었다면, 버스는 충분히 이용되지 않을 것인데, 예를 들어, 샘플 데이터를 포함하는 버스 폭의 1/4만이 이용된다. 충분히 이용되지 않는 버스는 더 작은 블록들(즉, 16개 미만의 샘플)을 처리할 수 있지만, 다수 또는 모든 블록들이 상대적으로 작은 크기를 갖는 것과 같은 최악의 경우의 시나리오들에서, 충분히 이용되지 않는 것은 인코더(114) 또는 디코더(134)의 실시간 동작을 못하게 하는 결과를 낳을 수 있다. 인터 예측의 경우, 각각의 블록은 (버퍼(372 또는 496)와 같은) 프레임 버퍼로부터 획득된 참조 샘플들에 의존한다. 선행 프레임을 처리할 때 프레임 버퍼가 참조 샘플들로 채워짐에 따라, 인터 예측된 블록들을 생성하기 위해 블록별 동작에 영향을 미치는 피드백 의존성 루프가 없다. 인트라 프레임 재구성에 관계된 피드백 의존성 루프 외에도, 인트라 예측 모드(458)의 결정에 관계된 추가적인 및 동시적인 피드백 루프가 존재한다. 인트라 예측 모드(458)는 최대 확률 모드 리스트로부터 모드를 선택하거나, 또는 잔여 모드 리스트로부터 모드를 선택함으로써 결정된다. 최대 확률 모드 리스트 및 잔여 모드 리스트의 결정은 이웃 블록들의 인트라 예측 모드들을 필요로 한다. 비교적 작은 블록 크기들이 사용될 때, 최대 확률 모드 리스트 및 잔여 모드 리스트는 더 빈번하게, 즉, 샘플들에서의 블록 크기 및 채널의 샘플링 레이트에 의해 지배되는 빈도에서 결정될 필요가 있다.
도 8은 4:2:0 크로마 포맷의 사용으로부터 생기는 크로마 채널들에 대한 변환 블록 크기들 및 연관된 스캔 패턴들의 컬렉션(800)을 도시하는 도면이다. 컬렉션(800)은 또한 4:2:2 크로마 포맷에 대해 사용될 수 있다. 설명된 배열들은, 이미지 프레임의 크로마 채널들이 이미지 프레임의 루마 채널에 대해, 특히 4:2:0 및 4:2:2 포맷들에 대해 서브샘플링되는 크로마 포맷을 갖는 이미지 프레임들과 함께 사용하기에 적합하다. 컬렉션(800)은 모든 가능한 크로마 변환 블록 크기를 포함하지 않는다. 16 이하의 폭 또는 8 이하의 높이를 갖는 크로마 변환 블록들만이 도 8에 도시되어 있다. 폭 및 높이가 더 큰 크로마 블록이 발생할 수 있지만, 참조의 용이함을 위해 도 8에 도시되어 있지 않다. 추가적인 크로마 변환 크기들은 코딩 트리가 루마와 크로마 채널들 간에 공유되는 경우에 2×16, 4×16, 8×16, 16×16, 및 32×32이다. 크로마 채널들의 코딩 트리가 루마 채널의 코딩 트리와 분리되어 있는 경우에 대해('듀얼 코딩 트리'), 다음의 추가적인 크로마 변환 크기들이 또한 이용가능하다: 2×32, 4×32, 8×32, 16×32, 32×2, 32×4, 32×8, 및 32×16. 그러나, 컬렉션(800)은 더 큰 TB들을 스캐닝하기 위해 유사하게 적용될 수 있는 TB들을 스캐닝하기 위한 접근법을 보여준다.
금지된 변환 크기들의 세트(810)는 변환 블록 크기들 2×2, 2×4, 및 4×2를 포함하며, 이들 모두는 16개 샘플보다 작은 영역들을 갖는다. 다시 말해서, 특히 인트라 예측된 CB들에 대해, 16(sixteen)개 크로마 샘플들의 최소 변환 크기가 설명된 배열들의 동작으로부터 초래된다. 금지된 변환 크기들(810)의 사례들은 도 9를 참조하여 설명된 스플릿 옵션들을 결정함으로써 회피된다. 변환들에서의 잔차 계수들은 변환이 '서브 블록들'(또는 '계수 그룹들')로 분할되는 2 계층 접근법에서 스캐닝된다. 스캐닝은 최종 유의(0이 아닌) 계수로부터 DC(좌측 상단) 계수로 되돌려 향하는 스캔 경로를 따라 발생한다. 스캔 경로는 각각의 서브 블록('하위 계층') 내에서의 진행 및 하나의 서브 블록으로부터 다음의 것('상위 계층')으로의 진행으로서 정의된다. 컬렉션(800)에서, 8×2 TB(820)는 8×2 서브 블록, 즉 16개의 잔차 계수를 포함하는 서브 블록을 사용한다. 2×8 TB(822)는 2×8 서브 블록을 사용하는데, 즉 16개의 잔차 계수를 또한 포함한다.
2의 폭 또는 높이를 갖고, 다른 치수는 8의 배수인 TB들은 다수의 2×8 또는 8×2 서브 블록들을 사용한다. 따라서, 2개 샘플의 폭을 갖는 일부 예에서의 크로마 블록들은 블록의, 각각이 크기 2×8 샘플인 서브 블록들로의 분할을 이용하여 코딩되고, 2개 샘플의 높이를 갖는 크로마 블록들은 일부 예에서 블록의, 각각이 크기 8×2 샘플인 서브 블록들로의 분할을 이용하여 코딩된다. 예를 들어, 16×2 TB(816)는 2개의 8×2 서브 블록을 가지며, 각각의 서브블록은 TB(820)에 대해 도시된 바와 같이 스캐닝된다. 서브 블록 진행(817)에 도시된 바와 같이 하나의 서브 블록으로부터 다음의 것으로의 스캐닝의 진행.
2×32 TB(도 8에 도시되지 않음)는 1×4 어레이(one by four array)로 배열된 4개의 2×8 서브 블록을 사용한다. 각각의 서브 블록의 잔차 계수들은 2×8 TB(822)에 대해 도시된 바와 같이 스캐닝되며, 서브 블록들은 1×4 어레이의 최하위 서브 블록으로부터 최상위 서브 블록으로 진행한다.
더 큰 TB들이 유사한 스캔 진행을 따른다. 각각이 4 이상인 폭 및 높이를 갖는 모든 TB들에 대해, 4×4 서브 블록 스캔이 이용된다. 예를 들어, 4×8 TB(823)는 하부 서브 블록으로부터 상부 서브 블록으로 진행하면서 4×4 서브 블록 스캔(824)을 이용한다. 4×4 TB(825)가 유사한 방식으로 스캐닝될 수 있다. 8×8 TB(829)는 4개의 4×4 서브 블록에 대해 진행(830)을 사용한다. 모든 경우에서, 서브 블록 내의 스캔 및 서브 블록으로부터 서브 블록으로의 진행은 역방향 대각 스캔을 따르는데, 즉 스캔은 TB의 '최종' 유의 잔차 계수로부터 좌측 상단 잔차 계수를 향해 되돌려 진행한다. 도 8은 또한 예를 들어, 8×4 TB(832), 16×4 TB(834) 및 16×8 TB(836)에 걸친 스캔 순서를 도시한다. 또한, 스캔 경로를 따르는 최종 유의 계수의 위치에 의존하여, 서브 블록의 최종 유의 계수 위치로부터 되돌려 좌측 상단 잔차 계수까지의 최종 유의 잔차 계수를 포함하는 서브 블록의 부분만이 스캐닝될 필요가 있다. 순방향으로 스캔 경로를 따라 더 멀리 있는 (즉, 블록의 우측 하단에 더 가까운) 서브 블록들은 스캐닝될 필요가 없다. 컬렉션(800) 및 특히 금지된 변환 크기들(810)은 도 9를 참조하여 설명된 바와 같이 코딩 트리의 영역들(또는 노드들)을 서브 영역들(또는 서브 노드들)로 스플릿하는 능력에 제한을 가한다.
2×2, 2×4 및 4×2 TB들(TB들(810)의 세트)을 사용하는 VVC 시스템에서, 2×2 서브 블록이 2개 샘플의 폭 및/또는 높이의 TB들에 대해 채택될 수 있다. 전술한 바와 같이, TB들(810)의 이용은 인트라 재구성 피드백 의존성 루프에서의 처리량 제약을 증가시킨다. 더욱이, 4개의 계수만을 갖는 서브 블록의 이용은 더 높은 처리량에서 잔차 계수들을 파싱하는 어려움을 증가시킨다. 특히, 각각의 서브 블록에 대해, '유의성 맵(significance map)'은 그 안에 포함된 각각의 잔차 계수의 유의성을 나타낸다. 1-값 유의성 플래그의 코딩은 잔차 계수의 크기를 적어도 1로서 확립하고 0-값 플래그의 코딩은 잔차 계수의 크기를 0으로서 확립한다. (1부터 앞으로의) 잔차 계수 크기 및 부호는 '유의' 잔차 계수들에 대해서만 코딩된다. 어떠한 유의성 비트도 코딩되지 않고, DC 계수에 대해 (0으로부터의) 크기가 항상 코딩된다. 고 처리량 인코더들 및 디코더들은 실시간 동작을 유지하기 위해 클록 사이클당 다수의 유의성 맵 빈을 인코딩 또는 디코딩할 필요가 있을 수 있다. 사이클당 멀티-빈 인코딩 및 디코딩의 어려움은, 인터-빈 의존성들이 더 많을 때, 예를 들어, 더 작은 서브 블록 크기가 이용될 때 증가한다. 시스템(100)에서, 블록 크기에 관계없이, (최종 유의성 계수를 포함하는 서브 블록의 예외에도 불구하고) 서브 블록 크기들은 16이다.
도 9는 인트라 예측이 사용 중일 때 루마 코딩 트리 및 크로마 코딩 트리에서 허용된 스플릿들의 리스트들을 생성하기 위한 규칙들의 세트(900)를 도시하는 도면이다. 프레임들의 시퀀스 중 제1 프레임을 포함하는 특정 프레임들에 대해, 모든 블록들은 인트라 예측을 사용한다. 다른 프레임들은 인터 예측된 블록과 인트라 예측된 블록의 혼합을 허용할 수 있다. 코딩 트리의 이용가능한 스플릿들의 전체 세트가 도 6을 참조하여 설명되었지만, 이용가능한 변환 크기들에 대한 제한들은 주어진 영역 크기에 대한 특정 스플릿 옵션들에 대한 제약들을 부여한다. 후술하는 바와 같이, 루마 및 크로마 채널들 각각에 대한 스플릿 옵션들은 대응하는 코딩 트리 유닛의 영역의 치수들에 따라 결정된다.
VVC는 루마 및 크로마 샘플들에 대한 상이한 코딩 트리들의 이용을 허용하므로, 크로마 샘플들에 대해 허용가능한 스플릿 옵션들은 루마 샘플들에 대한 스플릿 옵션들과 상이하다. 따라서, 규칙들의 세트(900)는 크로마 영역에 대한 규칙들의 세트(920) 및 루마 영역에 대한 규칙들의 세트(910)로 분할된다. 루마 코딩 트리 및 크로마 코딩 트리에 대해 별개의 규칙들이 도시되어, 변환 블록들의 상이한 컬렉션이 루마 채널 및 크로마 채널들에 대해 이용될 수 있게 한다. 특히, 루마 채널 및 크로마 채널들에 대해 이용가능한 블록들의 컬렉션이 크로마 포맷에 의해 관계된다는 요건은 없다. 코딩 트리의 노드들을 순회(traverse)할 때, 영역 크기를 갖는 스플릿 옵션들의 세트의 이용가능성을 체크함으로써 허용된 스플릿들의 리스트가 획득된다. 그 자체가 CB들을 사용하여 코딩될 수 있는 영역들을 낳는 스플릿 옵션들이 허용된 스플릿들의 리스트에 추가된다. CB를 사용하여 코딩될 영역에 대해, 영역 크기는 컬렉션(800)으로부터의 특정 크기의 정수 개수의 변환으로 코딩을 가능하게 해야만 한다. 특정 크기는 영역 크기(폭 및 높이 둘 다를 고려함)를 초과하지 않는 가장 큰 크기로 선택된다. 이와 같이, 더 작은 영역들에 대해 단일 변환이 사용되고, 영역 크기가 가장 큰 이용가능한 변환의 것을 초과하는 경우, 가장 큰 이용가능한 변환이 타일링되어 영역 전체를 점유한다.
세트(920)로 크로마 영역을 처리할 때, 스플릿 옵션들의 초기 스플릿 리스트가 생성된다. 각각의 스플릿 옵션은 영역 크기에 대해 테스트되어 스플릿 옵션이 금지된 크기의 서브 영역들을 낳는지, 즉 컬렉션(800)의 변환들의 크기보다 작은지를 결정한다. 허용된 크기들의 서브 영역들을 낳는, 즉 컬렉션(800)의 정수 개수의 최소 변환 크기와 매칭되는 스플릿 옵션들이 허용된 크로마 스플릿 리스트(970)에 추가된다.
예를 들어, QT 모드(도 6의 결정(610)에 대응함)에 있는 경우, 쿼드트리 스플릿들은, 스플릿이 크로마 채널들에 대해 제각기 2×2 또는 2×4의 변환 크기들을 초래할 것이므로 영역이 4:2:0 포맷에서의 크기 8×8 또는 4:2:2 포맷에서의 8×16을 갖는 경우에는 허용되지 않는다. 허용가능한 영역 크기는 화살표(921)로 표시된다. 유사하게, 크로마 규칙 세트(920)에 대한 다른 허용가능한 스플릿들은 화살표들(922, 923, 924, 925, 및 926)에 의해 표시되며, 아래에서 도 10 및 도 11과 관련하여 논의된다.
크로마 채널들에 대한 영역 크기들은 루마 샘플 그리드의 관점에서 설명된다. 예를 들어, 8×4 영역은 4:2:0 크로마 포맷이 사용 중일 때 크로마 채널들에 대한 4×2 변환에 대응한다. 4:2:2 크로마 포맷이 사용 중일 때, 8×4 영역은 크로마에서의 4×4 변환에 대응한다. 4:4:4 크로마 포맷이 사용 중인 경우, 크로마는 루마에 대해 서브샘플링되지 않으므로, 크로마에서의 변환 크기는 영역 크기에 대응한다.
허용가능 루마 변환 스플릿들은 4×4가 허용되지 않음에 따라 상이한 최소 크기 제약과 관계된다. 4×4 루마 PB가 16개 샘플의 배수라는 요건을 충족시키지만, 루마에서의 샘플 레이트는 4:2:0 크로마 포맷에서의 비디오에 대한 각각의 크로마 채널의 샘플 레이트의 4배이다. 4×4 루마 예측 블록들이 (예를 들어, SIMD 아키텍처들 또는 폭이 16개 샘플의 버스 아키텍처들에서) 버스 과소 이용을 초래하지 않더라도, 인트라 재구성 피드백 루프 및 인트라 예측 모드 결정 피드백 루프가 비교적 높은 샘플 레이트들에서의 동작을 수용하는 것은 어렵다. 루마 채널에서 4×4 블록들을 금지하는 것은 피드백 루프들의 심각성을 높은 샘플 레이트들에서의 구현이 실현가능한 레벨로 감소시킨다. 규칙 세트(920)와 유사하게, 집합(910)에서의 허용가능한 스플릿들이 화살표(901 내지 906)로 도시되어, 허용가능한 스플릿들의 리스트(972)를 생성하기 위해 사용된다. 허용가능한 스플릿 옵션들은 아래의 도 10 및 도 11과 관련하여 더 설명된다.
도 10은 이미지 프레임의 코딩 트리를 비디오 비트스트림으로 인코딩하는 방법(1000)을 도시한다. 방법(1000)은 도 12를 참조하여 설명된 바와 같이 루마 코딩 트리 및 크로마 코딩 트리 각각에 대해 수행되어, CTU에 대한 각각의 코딩 트리를 결정하고 그 결과 얻어진 코딩 트리들을 비트스트림(115)으로 인코딩하는 결과를 낳는다. 방법(1000)은 구성된 FPGA, ASIC, 또는 ASSP와 같은 장치에 의해 구현될 수 있다. 덧붙여, 방법(1000)은 프로세서(205)의 실행 하에서 비디오 인코더(114)에 의해 수행될 수 있다. 이와 같이, 방법(1000)은 컴퓨터 판독가능 저장 매체상에 및/또는 메모리(206)에 저장될 수 있다. 각각의 CTU의 루마 코딩 트리 및 크로마 코딩 트리에 대해 기동된 방법(1000)은 초기 스플릿 옵션들의 생성 단계(1010)에서 시작하는데, '현재 노드'(또는 현재 영역)가 루마 또는 코딩 트리의 루트, 즉 전체 CTU를 점유하는 영역이다. 방법(1000)은 프레임 데이터(113)가 블록 파티셔너(310)에 의해 수신될 때 루마 및 크로마 코딩 트리들 각각에 대해 인코더(114)에 의해 구현된다.
초기 스플릿 옵션 생성 단계(1010)에서, 프로세서(205)는 코딩 트리의 현재 노드에 대한 스플릿 옵션들을 생성한다. 스플릿 옵션들은 방법(1000)의 반복에 의존하여 루마 채널 또는 크로마 채널에 대해 생성된다. 초기에, 코딩 트리는 쿼드트리(QT) 스테이지에 있고, 여기서 유일한 허용된 스플릿은 쿼드트리 스플릿(도 5의 스플릿(512)), 또는 스플릿의 중단(도 5의 (510) 참조)이다. 더욱이, 인트라 예측된 블록들만을 사용하도록 코딩된 프레임 또는 슬라이스에 대해, 루마 및 크로마 코딩 트리들은 그들의 루트 노드들에서 스플릿된 쿼드트리를 포함한다. 결과적으로, 128×128 CTU에 대해, 4:2:0 크로마 포맷이 사용될 때, 최대 루마 인트라 예측된 CB는 64×64이고 최대 크로마 인트라 예측된 CB는 32×32이다. 인트라 예측된 및 인터 예측된 블록들 중 어느 하나 또는 둘 다를 사용하도록 코딩된 슬라이스의 프레임에 대해, 루마 및 크로마 코딩 트리들은 그들의 루트 노드들에서 스플릿된 쿼드트리를 포함할 필요가 없다. 그러나, 인트라 예측된 CB들은 64×64 루마 샘플 그리드의 경계들에 걸쳐 있는 것이 허용되지 않는다. 쿼드트리 스플릿이 중단되었을 때, 코딩 트리는 도 6의 결정(312)에 대응하여, 멀티-트리(MT) 스테이지에 있다고 말해진다. 멀티-트리 스테이지에서, 스플릿 옵션들은 (i) 분할을 중단하는 것(즉, 510) - 이 경우에 현재 노드에 대응하는 영역은 CB를 사용하여 코딩됨 -, 또는 (ii) 스플릿을 계속하는 것이다. 초기 스플릿 옵션들로서, 수평 및 수직 방향들 둘 모두에서의 2진 및 3진 스플릿들(도 5의 514-520 참조)이 사용될 수 있다. 단계(1010)의 결과로서, 코딩 트리 스테이지(즉, QT 또는 MT)에 대한 모든 가능한 스플릿들의 리스트가 생성된다. 프로세서(205)에서의 제어는 단계(1010)로부터 크로마 포맷 결정 단계(1020)로 진행한다.
크로마 포맷 결정 단계(1020)에서, 프로세서(205)는 프레임 데이터(113)의 크로마 포맷을 4:2:0 크로마 포맷 또는 4:2:2 크로마 포맷 중 하나로서 결정한다. 크로마 포맷은 프레임 데이터의 속성이며, 동작 동안 변경되지 않는다. 따라서, 크로마 포맷은 구성 파일 또는 레지스터와 같은 수단에 의해 비디오 인코더(113)에 제공된다. 결정된 크로마 포맷은 비트스트림(113)에서, 예를 들어, 'chroma_format_idc' 신택스 요소를 사용하여 인코딩되며, 비디오에 대해 한 번만 인코딩된다. 프로세서(205)에서의 제어는 단계(1020)로부터 허용된 스플릿 생성 단계(1030)로 진행한다.
허용된 스플릿 생성 단계(1030)에서, 프로세서(205)는 허용된 스플릿 유형들을 단계(1010)의 각각의 스플릿 옵션에 제약하는 규칙들을 적용하여 허용된 스플릿 리스트를 생성한다. 루마 코딩 트리를 처리할 때, 허용된 루마 스플릿 리스트(972)가 단계(1030)의 실행에 의해 생성된다. 크로마 코딩 트리를 처리할 때, 허용된 크로마 스플릿 리스트(970)가 단계(1030)의 실행에 의해 생성된다. 허용된 스플릿 유형들을 제약하는 규칙들은 루마 채널 및 크로마 채널 각각에서 이용가능한 변환 크기들을 고려한다.
일반적으로, 루마 채널에서의 N×M 변환의 경우, 4:2:0 크로마 포맷이 사용될 때 크로마 채널들에 대해 이용가능한 N/2×M/2 변환이 존재하거나 또는 4:2:2 크로마 포맷이 사용될 때 크로마 채널들에 대해 이용가능한 N/2×M 변환이 존재한다. 이와 같이, 스플릿 규칙들은 일반적으로 루마 및 크로마 채널들에 대해 동등하다. 그러나, 작은 블록 크기들에 대한 예외들이 있다. 특히, 4×8 및 8×4 루마 변환들은 대응하는 크로마에서의 2×4 및 4×2 변환들을 갖지 않는다. 또한, 4×4 루마 변환 또는 2×2 크로마 변환을 초래하는 스플릿들은 허용되지 않는다. 규칙들은 루마 채널 및 크로마 채널에서 동등한데, 그 이유는 2×2 크로마 변환의 영역 크기가 4:2:0 크로마 포맷에 대한 4×4 루마 샘플들이기 때문이다.
루마의 변환 세트가 크로마의 변환 세트와 상이한 정도까지, 루마와 크로마 사이의 허용된 스플릿 옵션들에 차이들이 존재한다. 코딩 트리에서 루마 노드를 처리할 때, 각각의 스플릿 옵션(도 9에 도시된 510-520)에 대해, 루마 노드의 영역 크기가 평가된다. 스플릿 없음 경우(510)는 항상 허용되며, 따라서 화살표(912)로 도시된 바와 같이 허용된 루마 스플릿 리스트(972)에 항상 추가된다. 영역 크기가 8×8일 때 쿼드트리 스플릿(512)이 허용되지 않아서, 허용되지 않은 4×4 루마 변환 크기를 사용하는 것을 회피한다. 더 큰 영역 크기들에 대해, 쿼드트리 스플릿이 허용되고 화살표(911)에 의해 도시된 바와 같이 허용된 루마 스플릿 리스트(972)에 추가된다. 루마 코딩 트리의 MT 스테이지에 있을 때, 루마에서의 4×4 변환의 사용을 방지하기 위해 다음의 스플릿들이 허용되지 않는다:
- 4×8 영역의 수평 2진 스플릿(4×4 블록들의 쌍 회피). 화살표(913)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
- 8×4 영역의 수직 2진 스플릿(4×4 블록들의 쌍 회피). 화살표(914)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
- 4×16 또는 더 작은 영역의 수평 3진 스플릿(스플릿의 제1 및 제3 블록들이 4×4 블록들인 것을 회피함). 화살표(915)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
- 16×4 또는 더 작은 영역의 수직 3진 스플릿(스플릿의 제1 및 제3 블록들이 4×4 블록들인 것을 회피함). 화살표(916)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
또한, 4보다 작은 높이의 폭을 갖는 블록을 초래할 루마에서의 임의의 스플릿이 금지된다. 폭 또는 높이가 4보다 작고 블록 크기가 4×4인 것의 회피로 인한 스플릿에 대한 제한에 직면하지 않는다면, 스플릿은 허용된 루마 스플릿 리스트(972)에 추가된다.
크로마 코딩 트리에서 크로마 노드를 처리할 때, 각각의 스플릿 옵션에 대해, 노드의 영역 크기에 관한 대응하는 규칙이 참조되어 스플릿 옵션을 허용된 크로마 스플릿 리스트(970)에 추가할지를 결정한다. 루마 코딩 트리에서와 같이, 크로마 코딩 트리는 쿼드트리 스플릿(512) 또는 스플릿 없음(510)이 허용되는 'QT' 스테이지(도 6의 결정(610)에 대응)에서 시작한다. 일단 스플릿 없음(510)이 발생하면, 코딩 트리는 (도 6의 결정(612)에 대응하는) 'MT' 스테이지에 진입한다. MT 스테이지에서, (i) 스플릿 없음이 노드와 연관된 영역을 점유하는 CB의 존재를 표시하거나, 또는 (ii) 스플릿들(514-520) 중 하나가 발생한다. 스플릿들(514-520) 중 하나의 스플릿의 발생은 영역을 서브 영역들로 분할한다. 결과적인 서브 영역들 각각은 또한 허용된 스플릿 옵션들을 결정하기 위해 평가된다.
코딩 트리의 QT 스테이지에서 및 4:2:0 크로마 포맷을 사용하여, 노드가 영역 크기가 8×8(즉, 4×4 크로마 변환)에 도달한 것을 갖는 경우, 어떠한 추가적인 쿼드트리 스플릿들도 가능하지 않다. 또한, 어떤 다른 스플릿 옵션들도 이용가능하지 않다. 이용가능한 옵션은 '스플릿 없음'이 노드에 대한 허용된 크로마 스플릿에 추가되게 하는 것이다. 결과적으로, 단일 4×4 CB가 노드에 존재한다.
코딩 트리의 QT 스테이지에서 및 4:2:2 크로마 포맷을 이용하여, 노드가 8×16의 영역 크기(즉, 4×8 크로마 변환)를 갖는 경우, 어떤 추가 쿼드트리 스플릿들도 가능하지 않고 단계(1030)는 코딩 트리의 MT 스테이지에 진입한다. MT 스테이지에서의 8×16 영역은 단일의 4×8 크로마 변환을 가질 수 있거나, 또는 2개의 8×8 영역 및 그에 따른 한 쌍의 4×4 크로마 변환을 낳는 수평 스플릿 또는 2개의 4×16 영역 및 그에 따른 한 쌍의 2×8 크로마 변환을 낳는 수직 스플릿을 가질 수 있다. MT 스테이지에서의 크로마 코딩 트리에서, 크기 4×4, 4×8, 및 8×4의 영역들을 초래하고 따라서 크기 2×2, 2×4 및 4×2의 변환들을 도입하는 스플릿들은 금지되며, 다음과 같이 열거된다:
- 8×8 영역(4×2 크로마 변환들의 쌍을 회피함) 또는 4×16 영역(2×4 크로마 변환들의 쌍을 회피함)의 수평 2진 스플릿. 화살표(923)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
- 8×8 영역(4×2 크로마 변환들의 쌍을 회피함) 또는 16×4 영역(2×4 크로마 변환들의 쌍을 회피함)의 수직 2진 스플릿. 화살표(924)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
- 4×16 영역(2×2 크로마 변환을 사용하는 제1 및 제3 서브 영역 및 크로마 변환을 사용하는 중앙 2×4 서브 영역을 회피함) 또는 8×16 영역(제1 및 제3 서브 영역에서의 2×4 크로마 변환들을 회피함)의 수평 3진 스플릿. 화살표(925)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
16×4 영역(2×2 크로마 변환들을 사용하는 제1 및 제3 서브 영역 및 크로마 변환을 사용하는 중앙 4×2 서브 영역을 회피함) 또는 16×8 영역(제1 및 제3 서브 영역에서 4×2 크로마 변환들을 회피함)의 수직 3진 스플릿. 화살표(926)에 의해 도시된 바와 같이, 나머지 스플릿들이 허용된다.
상기 제약에 더하여, 2보다 작은 폭 또는 높이를 갖는 서브 영역들을 초래할 스플릿들이 금지된다. 단계(1010)의 각각의 스플릿 옵션을 고려하면, 상기 규칙들이 참조되고 금지되지 않은 스플릿 옵션들이 단계(1030)의 실행에서 크로마 스플릿 옵션 리스트(970)에 추가된다. 일단 초기 스플릿 옵션들이 허용된 스플릿들의 리스트(크로마에 대한 리스트(970) 및 루마에 대한 리스트(972))에 리파인되면, 블록 파티셔너(310)는 라그랑즈 최적화에 따라 예측 모드들 및 코딩 비용들을 평가함으로써 허용된 스플릿들 중 하나를 선택한다. 프로세서(205)에서의 제어는 단계(1030)로부터 제로 허용된 스플릿 테스트(1040)로 진행한다.
제로 허용된 스플릿 테스트(1040)에서, 프로세서(205)는 스플릿 옵션 리스트(970 또는 972)가 "스플릿 없음" 엔트리(분할 510)만을 포함하는지를 테스트한다. 만일 그렇다면(단계(1040)에서 "예"), 어떤 추가 스플릿들도 가능하지 않다. 현재 노드에 CB가 존재하고, 프로세서(205)에서의 제어는 코딩 블록 인코딩 단계(1070)로 진행한다. 스플릿들이 가능하다면(단계(1040)에서 "아니오"), 프로세서(205)에서의 제어는 코딩 트리 스테이지 테스트 단계(1050)로 진행한다.
코딩 트리 스테이지 테스트 단계(1050)에서, 프로세서(205)는 코딩 트리에서의 현재 노드의 스테이지, 즉 스테이지가 QT인지 MT인지를 체크한다. 노드가 QT 스테이지에 있는 경우, 블록 파티셔너(310)의 결정은 QT 스테이지에 유지되고, 프로세서(205)에서의 제어는 QT 스플릿 인코딩 단계(1055)로 진행한다. 노드가 MT 스테이지에 있거나 또는 블록 파티셔너(310)의 결정이 코딩 트리의 현재 노드에 대해 QT 스테이지에서 MT 스테이지로 전이하는 것인 경우, 프로세서(205)에서의 제어는 MT 스플릿 인코딩 단계(1060)로 진행한다.
QT 스플릿 인코딩 단계(1055)에서, 엔트로피 인코더(338)는 프로세서(205)의 실행 하에 '1'의 값을 갖는 QT 스플릿 플래그(도 6의 결정(610)과 관련하여 설명됨)를 비트스트림(115)으로 인코딩한다. 1의 값을 갖는 QT 스플릿 플래그는 현재 노드를 4개의 서브-모드, 즉 쿼드트리 스플릿(512)으로의 분할을 표시한다. 프로세서(205)에서의 제어는 단계(1055)로부터 재귀 서브 영역 단계(10100)로 진행한다.
MT 스플릿 인코딩 단계(1060)에서, 엔트로피 인코더(338)는, 프로세서(205)의 실행 하에서, MT 스플릿의 유형을 표시하기 위해 추가 플래그들을 비트스트림(115)으로 인코딩한다. 현재 노드가 코딩 트리의 QT 스테이지에서 MT 스테이지로의 전이에 있는 경우, '0'의 값을 갖는 QT 스플릿 플래그(도 6의 결정(610)과 관련하여 설명됨)가 비트스트림(115)으로 인코딩된다. 단계(1030)에서 결정된 바와 같이, '스플릿 없음' 경우 이외의 적어도 하나의 스플릿이 허용되는 경우, MT 스플릿 플래그는 스플릿 없음(510)의 선택을 나타낸다(MT 분할 플래그에 대해 '0'을 인코딩함, 도 6의 결정(612) 참조). 단계(1060)은 "아니오"를 반환하고, 프로세서(205)에서의 제어는 코딩 블록 인코딩 단계(1070)로 진행한다.
그렇지 않다면, 블록 파티셔너(310)에 의한 스플릿들(514-520) 중 하나의 스플릿의 선택은 MT 스플릿 플래그, 즉 (612)에 대해 '1'을 인코딩함으로써 표시된다. 단계(1060)는 "예"를 반환하고, 프로세서(205)에서의 제어는 B/T H/V 스플릿 인코딩 단계(1090)로 진행한다.
코딩 블록 인코딩 단계(1070)에서, 엔트로피 인코더(338)는, 프로세서(205)의 실행 하에서, 코딩 블록의 예측 모드 및 잔차 계수들을 비트스트림(115)으로 인코딩한다. 인트라 예측된 CB들에 대해, 인트라 예측 모드가 인코딩되고, 인터 예측된 CB들에 대해, 움직임 벡터가 코딩된다. 잔차 계수들은 스캔 경로에서의 최종 유의 잔차 계수로부터 블록의 DC 계수를 향해 되돌려 진행하는 스캔에 따라 인코딩된다.
또한, 계수들은 '서브 블록들'로 그룹화되며, 그에 대해 적절한 경우 코딩된 서브 블록 플래그가 인코딩되어 서브 블록에서의 적어도 하나의 유의 잔차 계수의 존재를 표시한다. 서브 블록에 어떤 유의 잔차 계수들도 존재하지 않는 경우, 서브 블록에서의 각각의 잔차 계수에 대한 개별 유의 플래그들을 코딩할 필요가 없다. 최종 유의 잔차 계수를 포함하는 서브 블록은 코딩된 서브 블록 플래그를 요구하지 않는다. 코딩된 서브 블록 플래그는 DC(블록의 좌측 상단) 잔차 계수를 포함하는 서브 블록에 대해 코딩되지 않는다. 서브 블록 크기들은 루마에서는 항상 4×4이고, 크로마에서는 도 8에 도시된 바와 같이 주어진 블록에 대해 2×8 또는 4×4 또는 8×2 중 하나이다. 따라서, 서브 블록 크기는 항상 16이고, 이는 컬렉션(800)의 경우에서와 같이 항상 16의 배수인 블록 크기들과 일치한다. 프로세서(205)에서의 제어는 단계(1070)로부터 최종 코딩 블록 테스트 단계(1080)로 진행한다.
최종 코딩 블록 테스트(1080)에서, 프로세서(205)는 현재 코딩 블록이 코딩 트리에서의 최종 CB인지를 결정한다. 계층적 Z-오더 스캔 덕분에, 최종 CB는 CTU의 우측 하부 코너를 점유하는 CB이다. 현재 CB가 코딩 트리에서 최종 CB이면(단계(1080)에서 "예"), 방법(1000)은 종료된다. 일단 방법(1000)이 루마 코딩 트리를 처리하였다면, 방법(1000)이 기동되어 크로마 코딩 트리를 처리한다. 프로세서(205)는 루마 코딩 트리 및 크로마 코딩 트리를 처리하기 위해 방법(1000)의 2개의 인스턴스를 병렬로 수행할 수 있다. 방법(1000)의 2개의 인스턴스가 병렬로 수행되는 경우, 엔트로피 인코더(338)는 결정론적 비트스트림을 생성하기 위해 직렬화된 방식으로 루마 및 크로마에 대한 동작을 수행한다. 즉, 병렬 인코더에 의해 생성된 비트스트림은 직렬 디코더에 의해 디코딩가능해야만 한다. 그렇지 않고, 단계(1080)가 "아니오"를 반환하면, 현재 노드는 도 7a 및 도 7b에 예시된 바와 같이, 계층적 Z-오더 스캔에 따라 다음 노드로 진행한다. 프로세서(205)에서의 제어는 초기 스플릿 옵션 생성 단계(1010)로 진행한다.
B/T H/V 스플릿 인코딩 단계(1090)에서, 엔트로피 인코더(338)는, 프로세서(205)의 실행 하에, 허용된 스플릿 리스트 중 어느 스플릿이 블록 파티셔너(310)에 의해 선택되었는지를 나타내는 추가 플래그들을 비트스트림(115)으로 인코딩한다. 허용된 스플릿 리스트가 '분할 없음' 경우 이외의 하나의 스플릿만을 포함하는 경우, 하나의 스플릿은 블록 파티셔너(310)에 의해 선택되었어야만 하고, 스플릿을 식별하기 위해 추가적인 플래그들을 인코딩할 필요가 없다. 만일 허용된 스플릿들의 리스트가 수평 방향 및 수직 방향 둘 모두로의 스플릿들을 포함한다면, 엔트로피 인코더(338)는 블록 파티셔너(310)에 의해 선택된 스플릿의 방향을 나타내는 플래그를 인코딩한다. 만일 허용된 스플릿들의 리스트가 2진 및 3진 스플릿들 둘 모두를 포함한다면, 엔트로피 인코더(338)는 블록 파티셔너(310)에 의해 선택된 스플릿의 유형(즉, 2진 또는 3진)을 나타내는 플래그를 인코딩한다. 프로세서(205)에서의 제어는 단계(1090)로부터 재귀적 서브 영역 단계(10100)로 진행한다.
재귀적 서브 영역 단계(10100)에서, 프로세서(205)는 단계(1030)의 결정된 스플릿에 따라 서브 영역들을 생성한다. 방법(1000)은 생성된 서브 영역들 또는 노드들 각각에 대해 재귀적으로 기동되어, 코딩 트리 전체에 걸쳐 재귀를 낳는다. 방법(1000)의 재귀적 기동은, 도 7a 및 7b에 도시된 바와 같이, 코딩 트리의 계층적 Z-오더 스캔에 따라 하나의 서브 영역 또는 노드로부터 다음의 것으로 진행한다. 스플릿으로부터 생기는 자식 노드들이 서브 영역들을 생성하기 위해 방법(1000)에 의해 처리되었을 때, 재귀는 코딩 트리에서의 다음 형제 노드로 진행한다. 어떠한 추가 형제 노드들도 없다면, 재귀는 부모 노드로 진행하고, 이 시점에서 다음 노드(예를 들어, 부모의 형제)가 서브 영역들이 그에 대해 생성될 다음 노드로서 선택된다. 부모 노드가 코딩 트리의 QT 스테이지에 있는 경우, 부모 노드로의 복귀는 코딩 트리의 QT 스테이지로의 복귀라는 결과를 낳는다.
따라서, 단계들(1055, 1060, 1090, 및 1070) 각각은 결정된 허용가능한 스플릿 옵션들에 대한 플래그들을 비트스트림으로 인코딩하도록 동작한다. 각각의 스플릿 옵션은 크로마 또는 루마 채널들 중 하나에 대해 결정된다. 스플릿 옵션들은 코딩 트리의 영역들의 치수들에 기초하여 결정될 수 있다.
도 11은 비디오 비트스트림으로부터 이미지 프레임에서의 코딩 트리를 디코딩하기 위한 방법(1100)을 도시한다. 방법(1100)은 도 13을 참조하여 설명된 바와 같이 루마 코딩 트리 및 크로마 코딩 트리 각각에 대해 수행되어, CTU에 대해 및 비트스트림(133)으로부터 각각의 코딩 트리를 디코딩하는 결과를 낳는다. 방법(1100)은 구성된 FPGA, ASIC, 또는 ASSP와 같은 장치에 의해 구현될 수 있다. 또한, 방법(1100)은 프로세서(205)의 실행 하에서 비디오 디코더(134)에 의해 수행될 수 있다. 이와 같이, 방법(1100)은 컴퓨터 판독가능 저장 매체상에 및/또는 메모리(206)에 저장될 수 있다. 각각의 CTU의 루마 코딩 트리 및 크로마 코딩 트리에 대해 기동된 방법(1100)은 초기 스플릿 옵션 생성 단계(1110)에서 시작되는데, '현재 노드'(또는 현재 영역)은 루마 또는 코딩 트리의 루트, 즉 전체 CTU를 점유하는 영역이다.
초기 스플릿 옵션 생성 단계(1110)에서, 프로세서(205)는 코딩 트리의 현재 노드에 대한 스플릿 옵션들을 생성한다. 초기에, 코딩 트리는 쿼드트리(QT) 스테이지에 있고, 여기서 유일한 허용된 스플릿은 쿼드트리 스플릿(스플릿(512)), 또는 스플릿(스플릿(510))의 중단이다. 더욱이, 인트라 예측된 블록들만을 사용하도록 코딩된 프레임 또는 슬라이스에 대해, 루마 및 크로마 코딩 트리들은 그들의 루트 노드들에서 스플릿된 쿼드트리를 포함한다. 쿼드트리 스플릿이 중단되었을 때, 코딩 트리는 멀티-트리(MT) 스테이지에 있다고 말해진다. 멀티-트리 스테이지에서, 스플릿 옵션들은 (i) 스플릿을 중단하는 것((510)을 사용) - 이 경우에 현재 노드에 대응하는 영역은 CB를 사용하여 코딩됨 -, 또는 (ii) 스플릿을 계속하는 것이다. 초기 스플릿 옵션들로서, 수평 및 수직 방향들 둘 모두에서의 2진 및 3진 스플릿들(스플릿들 514-520)이 이용가능하다. 단계(1110)의 결과로서, 코딩 트리 스테이지(즉, QT 또는 MT)에 대한 모든 가능한 스플릿들의 리스트가 생성된다. 프로세서(205)에서의 제어는 크로마 포맷 결정 단계(1120)로 진행한다.
크로마 포맷 결정 단계(1120)에서, 프로세서(205)는 프레임 데이터(135)의 크로마 포맷을 4:2:0 크로마 포맷 또는 4:2:2 크로마 포맷 중 하나로서 결정한다. 예를 들어, "chroma_format_idc" 신택스 요소는 프로세서(205)의 실행 하에서 엔트로피 디코더(420)에 의해 비트스트림(113)으로부터 판독되어 크로마 포맷을 결정할 수 있다. 프로세서(205)에서의 제어는 단계(1120)로부터 허용된 스플릿 생성 단계(1130)로 진행한다.
허용된 스플릿 생성 단계(1130)에서, 프로세서(205)는 허용된 스플릿 유형들을 단계(1110)의 각각의 스플릿 옵션에 제약하는 규칙들을 적용하여 허용된 스플릿 리스트를 생성한다. 루마 코딩 트리를 처리할 때, 허용된 루마 스플릿 리스트(972)가 생성된다. 단계(1130)은 방법(100)의 단계(1030)과 동일한 방식에 따라 동작하며, 따라서 비디오 디코더(134)에서의 루마 및 크로마 코딩 트리들에서의 노드들의 허용된 스플릿 리스트들은 비디오 인코더(114)에서의 루마 및 크로마 코딩 트리들에서의 노드들의 허용된 스플릿 리스트들과 동일하다. 단계(1030)는 루마 또는 크로마 코딩 트리가 처리되고 있는지에 의존하여 허용된 스플릿들(970, 972)의 리스트들 중 하나를 생성하도록 동작한다. 단계(1030) 및 도 9와 관련하여 설명된 바와 같이, 크로마 스플릿 옵션들은 루마 스플릿 옵션들과 상이하고, 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 블록들을 낳는다. 프로세서(205)에서의 제어는 QT/MT 테스트 단계(1140)으로 진행한다.
QT/MT 테스트 단계(1140)에서, 프로세서(205)는 현재 노드(영역)가 코딩 트리의 QT 스테이지에 또는 코딩 트리의 MT 스테이지에 있는지를 테스트한다. 현재 노드가 코딩 트리의 QT 스테이지에 있고 허용된 스플릿들의 리스트가 '쿼드 스플릿' 옵션(스플릿 512)을 포함하는 경우, 프로세서에서의 제어는 QT 스플릿 디코딩 단계(1155)로 진행한다. 현재 노드가 코딩 트리의 QT 스테이지에 있고 허용된 스플릿들의 리스트가 '쿼드 스플릿' 옵션을 포함하지 않는 경우, 즉 '분할 없음' 옵션만이 허용되는 경우, 코딩 트리 스테이지는 'MT' 스테이지로 시프트하고, 프로세서(205)에서의 제어는 제로 허용된 스플릿 테스트(1150)로 진행한다. 코딩 트리가 이미 MT 스테이지에 있는 경우, 프로세서(205)에서의 제어는 제로 허용된 스플릿 테스트(1150)로 진행한다.
제로 허용된 스플릿 테스트(1150)에서, 프로세서(205)는 크로마 및 루마 코딩 트리들에 대한 스플릿 옵션 리스트, 즉 (970) 또는 (972)가 제각기 "스플릿 없음" 엔트리(510)만을 포함하는지를 테스트한다. 스플릿 옵션 리스트가 스플릿 없음 엔트리만을 포함하는 경우, 어떤 추가 스플릿들도 가능하지 않고 CB가 현재 노드에 존재한다. 단계(1150)은 "예"를 반환하고, 프로세서에서의 제어는 코딩 블록 디코딩 단계(1170)로 진행한다. 추가 스플릿이 가능하다면(단계(1150)에서 "아니오"), 프로세서에서의 제어는 MT 스플릿 디코딩 단계(1160)로 진행한다.
QT 스플릿 디코딩 단계(1055)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에, 현재 노드를 4개의 서브 모드, 즉 쿼드트리 스플릿(512)으로 분할하는 것이 발생할지를 나타내는 QT 스플릿 플래그(즉, 610)를 비트스트림(133)으로부터 디코딩한다. 쿼드트리 분할이 발생하지 않을 것이라면(단계(1155)에서 "아니오"), 프로세서(205)에서의 제어는 제로 허용된 스플릿 테스트(1150)로 진행한다. 쿼드트리 분할이 발생할 것이라면(단계(1155)에서 "예"), 프로세서(205)에서의 제어는 재귀적 서브 영역 단계(11100)로 진행한다.
MT 스플릿 디코딩 단계(1060)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에, 비트스트림(133)으로부터 추가 플래그들을 디코딩하여 MT 스플릿의 유형을 표시한다. 단계(1130)에서 결정된 바와 같이, "스플릿 없음" 경우 이외의 적어도 하나의 스플릿이 허용되는 경우, MT 스플릿 플래그는 스플릿 없음(510)의 선택을 나타낸다(MT 스플릿 플래그에 대해 "0"을 디코딩함, 즉 (612)). 단계(1060)은 "아니오"를 반환하고, 프로세서(205)에서의 제어는 코딩 블록 디코딩 단계(1170)로 진행한다. 그렇지 않으면, 허용된 스플릿들(970 또는 972)의 스플릿들(514-520) 중 하나를 선택할 필요가 MT 스플릿 플래그, 즉 612에 대해 '1'을 디코딩함으로써 표시된다. 단계(1060)은 "예"를 반환하고, 프로세서(205)에서의 제어는 B/T H/V 스플릿 인코딩 단계(1190)로 진행한다.
코딩 블록 디코딩 단계(1170)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에, 비트스트림(133)으로부터 코딩 블록의 예측 모드 및 잔차 계수들을 디코딩한다. 인트라 예측된 CB들에 대해 인트라 예측 모드가 디코딩되고, 인터 예측된 CB들에 대해 움직임 벡터가 디코딩된다. 잔차 계수들은 스캔 경로에서의 최종 유의 잔차 계수로부터 블록의 DC 계수를 향해 되돌려 진행하는 스캔에 따라 디코딩된다. 더욱이, 계수들은 "서브 블록들"로 그룹화되며, 그에 대해 코딩된 서브 블록 플래그가 디코딩되어 서브 블록에서의 적어도 하나의 유의 잔차 계수의 존재를 나타낸다. 서브 블록에 어던 유의 잔차 계수들도 존재하지 않는 경우, 서브 블록에서의 각각의 잔차 계수에 대한 개별 유의 플래그들을 디코딩할 필요가 없다. 최종 유의 잔차 계수를 포함하는 서브 블록은 서브 블록 플래그의 디코딩을 요구하지 않고, 코딩된 서브 블록 플래그는 DC(블록의 좌측 상단) 잔차 계수를 포함하는 서브 블록에 대해 디코딩되지 않는다. 서브 블록 크기들은 루마에서는 항상 4×4이고, 크로마에서는 도 8에 도시된 바와 같이 주어진 블록에 대해 2×8 또는 4×4 또는 8×2 중 하나이다. 따라서, 서브 블록 크기는 항상 16이고, 이는 컬렉션(800)의 경우에서와 같이 항상 16의 배수인 블록 크기들과 일치한다. 프로세서(205)에서의 제어는 최종 코딩 블록 테스트 단계(1180)로 진행한다.
최종 코딩 블록 테스트(1180)에서, 프로세서(205)는 현재 코딩 블록이 코딩 트리에서 최종 CB인지를 결정한다. 계층적 Z-오더 스캔 덕분에, 최종 CB는 CTU의 우측 하부 코너를 점유하는 것이다. 현재 CB가 코딩 트리에서의 최종의 것이면, 단계(1180)은 "예"를 반환하고 방법(1100)은 종료된다. 일단 방법(1100)이 루마 코딩 트리를 디코딩하였다면, 방법(1100)은 크로마 코딩 트리를 디코딩하기 위해 기동된다. 그렇지 않으면, 현재 노드는 도 7a 및 도 7b에 예시된 바와 같이 계층적 Z-오더 스캔에 따라 다음의 것으로 진행한다. 단계(1180)은 "아니오"를 반환하고, 프로세서(205)에서의 제어는 초기 스플릿 옵션 생성 단계(1110)로 진행한다. 비트스트림(133)을 올바르게 파싱하기 위해, 비디오 디코더(134)는 전형적으로 비디오 인코더(113)에 의해 기입된 것과 동일한 순서로 플래그들 및 다른 신택스 요소들을 판독한다. 그러나, 그들의 종속성이 충족되면, 다른 동작들이 상이한 순서로 및/또는 동시에 수행될 수 있다. 예를 들어, 루마 및 크로마 인트라 재구성을 위한 것들과 같은 동작들의 세트들은 병렬로 수행될 수 있다.
B/T H/V 스플릿 디코딩 단계(1190)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에, 허용된 스플릿 리스트 중 어느 스플릿이 비디오 디코더(134)에 의해 수행되어야 하는지를 나타내는 추가 플래그들을 비트스트림(133)으로부터 디코딩한다. 허용된 스플릿 리스트가 '분할 없음' 경우 이외의 하나의 스플릿만을 포함할 때, 다른 대안이 없기 때문에 하나의 스플릿이 수행될 필요가 있다. 따라서, 스플릿을 식별하기 위해 추가적인 플래그들을 디코딩할 필요가 없다. 이후, 프로세서(205)에서의 제어는 재귀적 서브 영역 단계(11100)로 진행한다. 허용된 스플릿들의 리스트가 수평 및 수직 방향들 둘 모두에서의 스플릿들을 포함할 때, 비트스트림(133)으로부터 스플릿의 방향을 나타내는 플래그를 디코딩한다. 허용된 스플릿들의 리스트가 2진 및 3진 스플릿들 둘 모두를 포함하는 경우, 스플릿의 유형(즉, 2진 또는 3진)을 나타내는 플래그가 비트스트림(133)으로부터 결정된다. 프로세서(205)에서의 제어는 재귀적 서브 영역 단계(11100)로 진행한다.
재귀적 서브 영역 단계(11100)에서, 단계(1190 또는 1155)의 결정된 스플릿에 따른 프로세서(205) 서브 영역들이 생성되고, 방법(1100)이 이들 서브 영역들 또는 노드들 각각에 대해 기동되어, 코딩 트리 전체에 걸쳐 재귀를 낳는다. 방법(1100)의 재귀적 기동은, 도 7a 및 도 7b에 도시된 바와 같이, 코딩 트리의 계층적 Z-오더 스캔에 따라 하나의 서브 영역 또는 노드로부터 다음의 것으로 진행한다. 스플릿으로부터 생기는 자식 노드들이 처리되어 블록들 또는 서브 영역들을 생성하는 경우, 재귀는 코딩 트리에서의 다음 형제 노드로 진행한다. 어떤 추가적인 형제 노드들도 없다면, 재귀는 부모 노드 또는 영역으로 진행한다. 다음 노드(예를 들어, 부모의 형제)가 처리할 다음 노드로서 선택된다. 부모 노드가 코딩 트리의 QT 스테이지에 있는 경우, 부모 노드로의 복귀는 코딩 트리의 QT 스테이지로 복귀하는 것을 낳는다.
따라서, 단계들(1155, 1160, 1190 및 1170)은, 비트스트림(133)으로부터 플래그들을 결정하여 단계(1130)에서 결정된 루마 스플릿 옵션들 중 하나 및 크로마 스플릿 옵션들 중 하나를 선택함으로써 코딩 트리 유닛의 코딩 유닛들을 디코딩하는 동작을 한다.
방법들(1000 및 1100) 및 특히 단계들(1030 및 1130)의 결과로서, 인트라 재구성 루프에서 높은 레이트로 처리하기 어려운 크로마 채널에 대한 비교적 작은 인트라 예측된 블록들이 회피된다. 작은 블록들의 회피는 높은 해상도 및/또는 프레임 레이트들에서의 구현을 용이하게 하며, 여기서 '픽셀 레이트'(처리될 필요가 있는 초당 픽셀들)는 품질의 허용불가능한 저하 없이 높다.
도 12는 이미지 프레임의 루마 및 크로마 코딩 트리들을 비디오 비트스트림으로 인코딩하기 위한 방법(1200)을 도시한다. 방법(1200)은 구성된 FPGA, ASIC, 또는 ASSP와 같은 장치에 의해 구현될 수 있다. 또한, 방법(1200)은 프로세서(205)의 실행 하에 비디오 디코더(114)에 의해 수행될 수 있다. 이와 같이, 방법(1200)은 컴퓨터 판독가능 저장 매체상에 및/또는 메모리(206)에 저장될 수 있다. 방법(1200)은 CTU들로의 프레임 분할 단계(1210)로 시작한다.
CTU들로의 프레임 분할 단계(1210)에서, 블록 파티셔너(310)는, 프로세서(205)의 실행 하에, 프레임 데이터(113)의 현재 프레임을 CTU들의 어레이로 분할한다. 분할로부터 생기는 CTU들에 걸친 인코딩의 진행이 시작된다. 프로세서에서의 제어는 단계(1210)로부터 루마 코딩 트리 인코딩 단계(1220)로 진행한다.
루마 코딩 트리 인코딩 단계(1220)에서, 비디오 인코더(114)는, 프로세서(205)의 실행 하에, 방법(1000)을 수행하여 현재 CTU의 루마 코딩 트리를 결정하고 비트스트림(115)으로 인코딩한다. 현재 CTU는 단계(1210)의 실행으로부터 생기는 CTU들 중 선택된 것이다. 프로세서(205)에서의 제어는 단계(1220)로부터 크로마 코딩 트리 인코딩 단계(1230)로 진행한다.
루마 코딩 트리 인코딩 단계(1230)에서, 비디오 인코더(114)는, 프로세서(205)의 실행 하에, 방법(1000)을 수행하여 현재 CTU의 크로마 코딩 트리를 결정하고 비트스트림(115)으로 인코딩한다. 프로세서(205)에서의 제어는 단계(1230)로부터 최종 CTU 테스트 단계(1240)로 진행한다.
최종 CTU 테스트 단계(1240)에서, 프로세서(205)는 현재 CTU가 슬라이스 또는 프레임에서의 최종의 것인지를 테스트한다. 그렇지 않다면(단계(1240)에서 "아니오"), 비디오 인코더(114)는 프레임에서의 다음 CTU로 진행하고, 프로세서(205)에서의 제어는 단계(1240)로부터 단계(1220)로 되돌려 진행하여 프레임에서의 나머지 CTU들을 계속 처리한다. CTU가 프레임 또는 슬라이스에서의 최종의 것인 경우, 단계(1240)은 "예"를 반환하고 방법(1200)은 종료된다.
도 13은 이미지 프레임의 루마 및 크로마 코딩 트리들을 비디오 비트스트림으로부터 디코딩하기 위한 방법(1300)의 흐름도이다. 방법(1300)은 구성된 FPGA, ASIC, 또는 ASSP와 같은 장치에 의해 구현될 수 있다. 또한, 방법(1300)은 프로세서(205)의 실행 하에서 비디오 디코더(134)에 의해 수행될 수 있다. 이와 같이, 방법(1300)은 컴퓨터 판독가능 저장 매체상에 및/또는 메모리(206)에 저장될 수 있다. 방법(1300)은 CTU들로의 프레임 분할 단계(1310)로 시작한다.
CTU들로의 프레임 분할 단계(1310)에서, 비디오 디코더(134)는, 프로세서(205)의 실행 하에, 디코딩될 프레임 데이터(133)의 현재 프레임의 CTU들의 어레이로의 분할을 결정한다. 결정된 분할로부터 생기는 CTU들에 걸친 디코딩의 진행이 시작된다. 프로세서에서의 제어는 단계(1310)로부터 루마 코딩 트리 디코딩 단계(1320)로 진행한다.
루마 코딩 트리 디코딩 단계(1320)에서, 비디오 디코더(134)는 프로세서(205)의 실행 하에 현재 CTU에 대해 방법(1100)을 첫번째 수행하여 비트스트림(133)으로부터 현재 CTU의 루마 코딩 트리를 디코딩한다. 현재 CTU는 단계(1310)의 실행으로부터 생기는 CTU들 중 선택된 것이다. 프로세서(205)에서의 제어는 단계(1320)로부터 크로마 코딩 트리 디코딩 단계(1330)로 진행한다.
크로마 코딩 트리 디코딩 단계(1330)에서, 비디오 디코더(134)는 프로세서(205)의 실행 하에 현재 CTU에 대해 방법(1100)을 두번째 수행하여 비트스트림(133)으로부터 현재 CTU의 크로마 코딩 트리를 디코딩한다. 프로세서(205)에서의 제어는 단계(1330)로부터 최종 CTU 테스트 단계(1340)로 진행한다.
최종 CTU 테스트 단계(1340)에서, 프로세서(205)는 현재 CTU가 슬라이스 또는 프레임에서의 최종의 것인지를 테스트한다. 그렇지 않다면(단계(1340)에서 "아니오"), 비디오 디코더(134)는 프레임에서의 다음 CTU로 진행하고, 프로세서(205)에서의 제어는 단계(1340)로부터 단계(1320)으로 되돌려 진행하여 비트스트림으로부터 CTU들을 계속 디코딩한다. CTU가 프레임 또는 슬라이스에서의 최종의 것인 경우, 단계(1340)은 "예"를 반환하고 방법(1300)은 종료된다.
잔차 계수들을 크기 16(sixteen)의 서브 블록들로 그룹화하는 것은, 예를 들어, 도 8의 TB들(816 및 823)과 관련하여 설명된 바와 같이 이용하여, 엔트로피 인코더(338) 및 엔트로피 디코더(420)의 구현을 용이하게 한다. 특히, 잔차 계수들을 크기 16의 서브 블록들로 그룹화하는 것은, 예컨대 유의성 맵에 대해, 컨텍스트 코딩된 빈들의 산술 코딩의 구현을 용이하게 하여, 각각의 서브 블록 내에서 고정된 컨텍스트들의 패턴의 사용을 허용한다.
산업상 이용가능성
설명된 구성은 컴퓨터 및 데이터 처리 산업에 및 특히 비디오 및 이미지 신호들과 같은 신호들의 인코딩 및 디코딩을 위한 디지털 신호 처리를 위해 적용가능하여, 높은 압축 효율을 달성한다.
HEVC와 대조적으로, VVC 시스템은 증가된 유연성을 위해 루마 및 크로마 채널들에 대한 개별 코딩 트리들의 사용을 허용한다. 그러나, 앞서 논의한 바와 같이, 처리량에 영향을 미치는 더 작은 크로마 블록의 사용으로 인해 결과적 문제가 발생할 수 있다. 본 명세서에 설명된 구성은 각각의 코딩 트리 유닛이 처리량 문제들을 회피하는 것을 보조하도록 처리되기 위해 적절한 규칙들을 결정한다. 추가적으로, 위에서 설명된 바와 같이, 설명된 구성은, 처리량 문제들을 회피하기 위한 규칙들이 주어지면, 각각의 코딩 트리들을 기술하기 위해 사용되는 컨텍스트 코딩된 빈들의 산술 코딩의 개선된 효율 및 정확도를 제공하는 것을 도울 수 있다.
전술한 내용은 본 발명의 일부 실시예만을 설명하고, 본 발명의 범위 및 사상을 벗어나지 않고 그에 대한 수정들 및/또는 변경들이 이루어질 수 있으며, 실시예들은 예시적인 것이고 제한적이지 않다.
본 명세서의 맥락에서, "포함하는(comprising)"이라는 단어는 "단지 그것으로 구성되는(consisting only of)"이 아니라, "주로 포함하지만 반드시 그것들만 포함하지는 않는" 또는 "갖는" 또는 "포함하는"을 의미한다. "포함하다(comprise)" 및 "포함하다(comprises)"와 같은, 단어 "포함하는(comprising)"의 변형들은 대응하여 변화된 의미들을 갖는다.

Claims (8)

  1. 비트스트림으로부터, 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 방법으로서:
    상기 이미지 프레임을 수신하는 단계 - 상기 이미지 프레임은 크로마 포맷을 가지며, 상기 이미지 프레임의 크로마 채널들은 상기 이미지 프레임의 루마 채널에 대해 서브 샘플링됨-;
    상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하는 단계;
    상기 영역의 치수들에 따라 상기 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하는 단계 - 상기 크로마 스플릿 옵션들은 상기 루마 스플릿 옵션들과 상이하고, 상기 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들을 낳음 -; 및
    상기 비트스트림으로부터 플래그들을 결정하여 상기 결정된 루마 스플릿 옵션들 중 하나 및 상기 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 상기 코딩 트리 유닛의 코딩 블록들을 디코딩하는 단계를 포함하는 방법.
  2. 제1항에 있어서,
    상기 크로마 블록 크기는 상기 이미지 프레임의 크로마 채널들에 대한 16개 샘플의 배수인 방법.
  3. 제1항에 있어서,
    상기 결정된 루마 스플릿 옵션들은 상기 이미지 프레임의 루마 채널에 대한 16개 샘플의 배수인 루마 블록 크기를 낳는 방법.
  4. 제1항에 있어서,
    상기 결정된 루마 스플릿 옵션들은 상기 이미지 프레임의 루마 채널에 대한 16개 샘플의 배수인 루마 블록 크기를 낳고, 2개 샘플의 폭을 갖는 크로마 블록들은 상기 블록의 서브 블록들로의 분할을 이용하여 코딩되고, 각각의 서브 블록은 2×8개 샘플의 크기를 갖는 방법.
  5. 제1항에 있어서,
    상기 결정된 루마 스플릿 옵션들은 상기 이미지 프레임의 루마 채널에 대한 16개 샘플의 배수인 루마 블록 크기를 낳고, 2개 샘플의 높이를 갖는 크로마 블록들은 상기 블록의 서브 블록들로의 분할을 이용하여 코딩되고, 각각의 서브 블록은 8×2개 샘플의 크기를 갖는 방법.
  6. 비트스트림으로부터, 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 방법을 구현하기 위한 컴퓨터 프로그램을 저장하고 있는 비일시적 컴퓨터 판독가능 매체로서, 상기 프로그램은:
    상기 이미지 프레임을 수신하기 위한 코드 - 상기 이미지 프레임은 크로마 포맷을 가지며, 상기 이미지 프레임의 크로마 채널들은 상기 이미지 프레임의 루마 채널에 대해 서브 샘플링됨 -;
    상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하기 위한 코드;
    상기 영역의 치수들에 따라 상기 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하기 위한 코드 - 상기 크로마 스플릿 옵션들은 상기 루마 스플릿 옵션들과 상이하고, 상기 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들을 낳음 -; 및
    상기 비트스트림으로부터 플래그들을 결정하여 상기 결정된 루마 스플릿 옵션들 중 하나 및 상기 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 상기 코딩 트리 유닛의 코딩 블록들을 디코딩하기 위한 코드를 포함하는 비일시적 컴퓨터 판독가능 매체.
  7. 비디오 디코더로서:
    비트스트림으로부터 이미지 프레임의 코딩 트리 유닛을 수신하고 - 상기 이미지 프레임은 크로마 포맷을 갖고, 상기 이미지 프레임의 크로마 채널들은 상기 이미지 프레임의 루마 채널에 대해 서브 샘플링됨 -;
    상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하고;
    상기 영역의 치수들에 따라 상기 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하고 - 상기 크로마 스플릿 옵션들은 상기 루마 스플릿 옵션들과 상이하고, 상기 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 인트라 예측된 블록들을 낳음 -; 및
    상기 비트스트림으로부터 플래그들을 결정하여 상기 결정된 루마 스플릿 옵션들 중 하나 및 상기 결정된 크로마 스플릿 옵션들 중 하나를 선택함으로써 상기 코딩 트리 유닛의 코딩 블록들을 디코딩하도록 구성된 비디오 디코더.
  8. 시스템으로서:
    메모리; 및
    프로세서를 포함하고, 상기 프로세서는 비트스트림으로부터 이미지 프레임에서의 코딩 트리 유닛의 코딩 블록들을 디코딩하는 방법을 구현하기 위해 상기 메모리에 저장된 코드를 실행하도록 구성되고, 상기 방법은:
    상기 이미지 프레임을 수신하는 단계 - 상기 이미지 프레임은 크로마 포맷을 가지며, 상기 이미지 프레임의 크로마 채널들은 상기 이미지 프레임의 루마 채널에 대해 서브 샘플링됨 -;
    상기 코딩 트리 유닛의 영역의 치수들에 따라 상기 코딩 트리 유닛의 루마 채널에 대한 루마 스플릿 옵션들을 결정하는 단계;
    상기 영역의 치수들에 따라 상기 코딩 트리 유닛의 크로마 채널들에 대한 크로마 스플릿 옵션들을 결정하는 단계 - 상기 크로마 스플릿 옵션들은 상기 루마 스플릿 옵션들과 상이하고, 상기 허용가능한 크로마 스플릿 옵션들은 16개 샘플의 최소 크기를 갖는 크로마 블록들을 낳음 -; 및
    상기 비트스트림으로부터 플래그들을 결정하여 상기 결정된 루마 스플릿 옵션들 중 하나 및 상기 결정된 허용가능한 크로마 스플릿 옵션들 중 하나를 선택함으로써 상기 코딩 트리 유닛의 코딩 블록들을 디코딩하는 단계를 포함하는 시스템.
KR1020217010428A 2018-09-21 2019-06-25 비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템 KR20210050572A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
AU2018233042 2018-09-21
AU2018233042A AU2018233042A1 (en) 2018-09-21 2018-09-21 Method, apparatus and system for encoding and decoding a tree of blocks of video samples
PCT/AU2019/050658 WO2020056452A1 (en) 2018-09-21 2019-06-25 Method, apparatus and system for encodng and decoding a tree of blocks of video samples

Publications (1)

Publication Number Publication Date
KR20210050572A true KR20210050572A (ko) 2021-05-07

Family

ID=69886764

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217010428A KR20210050572A (ko) 2018-09-21 2019-06-25 비디오 샘플들의 블록들의 트리를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템

Country Status (10)

Country Link
US (5) US11595699B2 (ko)
EP (1) EP3854091A4 (ko)
JP (2) JP7191211B2 (ko)
KR (1) KR20210050572A (ko)
CN (1) CN112771866A (ko)
AU (1) AU2018233042A1 (ko)
BR (1) BR112021003783A2 (ko)
MX (1) MX2021003054A (ko)
TW (2) TWI820165B (ko)
WO (1) WO2020056452A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102021116357A1 (de) 2020-06-29 2021-12-30 Tyco Electronics Amp Korea Co., Ltd. Steckeranordnung
WO2023277486A1 (ko) * 2021-06-29 2023-01-05 주식회사 케이티 화면내 예측 기반의 비디오 신호 부호화/복호화 방법 및 장치, 그리고 비트스트림을 저장한 기록 매체

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3836542B1 (en) 2018-08-28 2023-10-11 Huawei Technologies Co., Ltd. Picture partition method and device
BR112021013444A2 (pt) * 2019-01-08 2021-10-19 Huawei Technologies Co., Ltd. Método, aparelho e sistema de predição de imagem, dispositivo, e mídia de armazernamento
CN113273197A (zh) * 2019-02-03 2021-08-17 北京字节跳动网络技术有限公司 视频块分割模式的信令通知
AU2019201649A1 (en) 2019-03-11 2020-10-01 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a tree of blocks of video samples
BR112022002006A2 (pt) * 2019-08-06 2022-03-29 Beijing Bytedance Network Tech Co Ltd Método de processamento de vídeo, aparelho de processamento de vídeo, e, mídia legível por computador
EP4008109A4 (en) 2019-09-02 2022-09-14 Beijing Bytedance Network Technology Co., Ltd. ENCODING MODE DETERMINATION BASED ON COLOR FORMAT
MX2022003122A (es) 2019-09-21 2022-04-06 Beijing Bytedance Network Tech Co Ltd Modo intra basado para croma de restriccion de tama?o.
US11432018B2 (en) * 2020-05-11 2022-08-30 Tencent America LLC Semi-decoupled partitioning for video coding
CN111598186B (zh) * 2020-06-05 2021-07-16 腾讯科技(深圳)有限公司 基于纵向联邦学习的决策模型训练方法、预测方法及装置

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2390072C (en) * 2002-06-28 2018-02-27 Adrian Gh Podoleanu Optical mapping apparatus with adjustable depth resolution and multiple functionality
US20100220215A1 (en) * 2009-01-12 2010-09-02 Jorge Rubinstein Video acquisition and processing systems
CN105120265B (zh) 2009-08-12 2019-01-29 汤姆森特许公司 用于改进的帧内色度编码和解码的方法及装置
PL2728869T3 (pl) 2011-06-30 2022-02-28 Sun Patent Trust Sposób dekodowania obrazów
US9807401B2 (en) 2011-11-01 2017-10-31 Qualcomm Incorporated Transform unit partitioning for chroma components in video coding
US8964849B2 (en) 2011-11-01 2015-02-24 Blackberry Limited Multi-level significance maps for encoding and decoding
EP2595380B1 (en) 2011-11-19 2015-10-21 BlackBerry Limited Multi-level significance map scanning
WO2013102293A1 (en) * 2012-01-04 2013-07-11 Mediatek Singapore Pte. Ltd. Improvements of luma-based chroma intra prediction
AU2012200319B2 (en) * 2012-01-19 2015-11-26 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding the significance map for residual coefficients of a transform unit
EP2810440A1 (en) 2012-02-04 2014-12-10 General Instrument Corporation Devices and methods for context reduction in last significant coefficient position coding
US10009612B2 (en) * 2012-04-12 2018-06-26 Hfi Innovation Inc. Method and apparatus for block partition of chroma subsampling formats
WO2013180023A1 (ja) * 2012-06-01 2013-12-05 シャープ株式会社 算術復号装置、画像復号装置、算術符号化装置、および画像符号化装置
US9538175B2 (en) 2012-09-26 2017-01-03 Qualcomm Incorporated Context derivation for context-adaptive, multi-level significance coding
AU2012232992A1 (en) 2012-09-28 2014-04-17 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding the transform units of a coding unit
JP6270861B2 (ja) 2012-11-08 2018-01-31 キヤノン株式会社 符号化単位の変換単位を符号化および復号するための方法、装置およびシステム
US11284103B2 (en) * 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
EP2908524A1 (en) * 2014-02-14 2015-08-19 France Brevets An apparatus for encoding an ultra-high definition video sequence
JP2014143716A (ja) 2014-03-12 2014-08-07 Sony Corp 画像処理装置および方法、プログラム、並びに記録媒体
WO2016074147A1 (en) * 2014-11-11 2016-05-19 Mediatek Singapore Pte. Ltd. Separated coding tree for luma and chroma
US10362310B2 (en) * 2015-10-21 2019-07-23 Qualcomm Incorporated Entropy coding techniques for display stream compression (DSC) of non-4:4:4 chroma sub-sampling
CN105472389B (zh) * 2015-12-01 2018-11-16 上海交通大学 一种用于超高清视频处理系统的片外缓存压缩方法
RU2739251C2 (ru) 2016-02-11 2020-12-22 Томсон Лайсенсинг Способ и устройство для кодирования/декодирования элемента изображения, содержащего данные изображения, представленные каналом составляющей яркости и, по меньшей мере, одним каналом составляющей цветности
CA3037685C (en) * 2016-09-20 2023-03-28 Bae Keun Lee Method and apparatus for processing video signal
US10368080B2 (en) * 2016-10-21 2019-07-30 Microsoft Technology Licensing, Llc Selective upsampling or refresh of chroma sample values
US11190762B2 (en) * 2017-06-21 2021-11-30 Lg Electronics, Inc. Intra-prediction mode-based image processing method and apparatus therefor
EP3836542B1 (en) 2018-08-28 2023-10-11 Huawei Technologies Co., Ltd. Picture partition method and device

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102021116357A1 (de) 2020-06-29 2021-12-30 Tyco Electronics Amp Korea Co., Ltd. Steckeranordnung
WO2023277486A1 (ko) * 2021-06-29 2023-01-05 주식회사 케이티 화면내 예측 기반의 비디오 신호 부호화/복호화 방법 및 장치, 그리고 비트스트림을 저장한 기록 매체

Also Published As

Publication number Publication date
US20220046288A1 (en) 2022-02-10
US20230164363A1 (en) 2023-05-25
US11595699B2 (en) 2023-02-28
EP3854091A1 (en) 2021-07-28
MX2021003054A (es) 2021-05-27
WO2020056452A1 (en) 2020-03-26
US11910028B2 (en) 2024-02-20
EP3854091A4 (en) 2022-08-31
TW202234885A (zh) 2022-09-01
TWI820714B (zh) 2023-11-01
US20230164365A1 (en) 2023-05-25
US20230164364A1 (en) 2023-05-25
JP2022500926A (ja) 2022-01-04
JP7391175B2 (ja) 2023-12-04
US20230156243A1 (en) 2023-05-18
TW202013961A (zh) 2020-04-01
JP7191211B2 (ja) 2022-12-16
JP2023025180A (ja) 2023-02-21
US11930224B2 (en) 2024-03-12
US20230156242A1 (en) 2023-05-18
AU2018233042A1 (en) 2020-04-09
BR112021003783A2 (pt) 2021-05-18
CN112771866A (zh) 2021-05-07
TWI820165B (zh) 2023-11-01

Similar Documents

Publication Publication Date Title
JP7391175B2 (ja) 復号する方法、ビデオ復号装置、符号化する方法、ビデオ符号化装置
KR102579286B1 (ko) 비디오 샘플들의 변환된 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
US20220116600A1 (en) Method, apparatus and system for encoding and decoding a transformed block of video samples
JP7391167B2 (ja) 符号化ブロックを復号する方法、符号化ブロックを符号化する方法、復号装置、符号化装置
KR20220127337A (ko) 비디오 샘플들의 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
TWI788262B (zh) 用以編碼和解碼視頻樣本之區塊樹的方法、設備及系統
KR20210141751A (ko) 비디오 샘플들의 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
US20210306679A1 (en) Method, apparatus and system for encoding and decoding a transformed block of video samples
AU2019284053A1 (en) Method, apparatus and system for encoding and decoding a block of video samples
US12003787B2 (en) Method, apparatus and system for encoding and decoding a tree of blocks of video samples
TWI836542B (zh) 用以編碼及解碼視訊取樣之轉換區塊的方法、設備和非暫態電腦可讀取儲存媒體
AU2020202285A1 (en) Method, apparatus and system for encoding and decoding a block of video samples

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal