KR20200112958A - 루마 및 크로마 블록 파티셔닝 - Google Patents

루마 및 크로마 블록 파티셔닝 Download PDF

Info

Publication number
KR20200112958A
KR20200112958A KR1020207024921A KR20207024921A KR20200112958A KR 20200112958 A KR20200112958 A KR 20200112958A KR 1020207024921 A KR1020207024921 A KR 1020207024921A KR 20207024921 A KR20207024921 A KR 20207024921A KR 20200112958 A KR20200112958 A KR 20200112958A
Authority
KR
South Korea
Prior art keywords
coding
chroma
luma
coding tree
subtree
Prior art date
Application number
KR1020207024921A
Other languages
English (en)
Other versions
KR102410200B1 (ko
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 KR20200112958A publication Critical patent/KR20200112958A/ko
Application granted granted Critical
Publication of KR102410200B1 publication Critical patent/KR102410200B1/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/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/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/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/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/1883Methods 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 relating to sub-band structure, e.g. hierarchical level, directional tree, e.g. low-high [LH], high-low [HL], high-high [HH]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • 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/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)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Color Television Systems (AREA)

Abstract

비디오 코딩 메커니즘이 개시된다. 비디오 코딩 메커니즘은 루마 샘플과 크로마 샘플을 포함하는 코딩 트리 유닛을 획득하는 것을 포함한다. 비디오 코딩 메커니즘은, 제1 코딩 트리 노드의 크기가 임계값을 초과하면 공용 코딩 트리에 따라 루마 샘플과 크로마 샘플을 파티셔닝한다. 또한, 비디오 코딩 메커니즘은, 제2 코딩 트리 노드의 크기가 임계값보다 작거나 같으면 루마 코딩 서브트리로 루마 샘플을 파티셔닝한다. 또한, 비디오 코딩 메커니즘은, 제3 코딩 트리 노드의 크기가 임계값보다 작거나 같으면 크로마 코딩 서브트리로 크로마 샘플을 파티셔닝한다. 루마 코딩 서브트리는 크로마 코딩 서브트리와는 다른 분할 모드를 포함한다.

Description

루마 및 크로마 블록 파티셔닝
이 특허 출원은 Yin Zhao 등에 의해 2018년 4월 19일에 출원된 미국 임시 특허 출원 번호 제62/660,121호("Separate Luma and Chroma Block Partitioning For Video Coding"), 및 Yin Zhao 등에 의해 2018년 8월 18일에 출원된 미국 임시 특허 출원 번호 제62/732,675호("Partition Method, And Device")에 대해 우선권을 주장하는 바이며, 그 전체 내용이 원용에 의해 본 명세서에 포함된다.
본 개시는 일반적으로 비디오 코딩에 관한 것으로, 상세하게는 비디오 코딩에서 루마 및 크로마 코딩 블록을 파티셔닝하기 위한 코딩 트리를 생성하는 것에 관한 것이다.
비교적 짧은 비디오를 묘사하는 데 필요한 비디오 데이터의 양이 상당할 수 있고, 이로 인해 데이터가 스트리밍되거나 또는 그렇지 않으면 대역폭 용량이 제한된 통신 네트워크를 통해 통신할 때 어려움이 있을 수 있다. 따라서, 현대 통신 네트워크를 통해 통신되기 전에 비디오 데이터가 보통 압축된다. 메모리 자원이 제한될 수 있으므로 비디오가 저장 장치에 저장될 때, 비디오의 크기도 문제가 될 수 있다. 비디오 압축 장치는 종종 소스에서 소프트웨어 및/또는 하드웨어를 이용하여 전송 또는 저장 전에 비디오 데이터를 코딩함으로써, 디지털 비디오 이미지를 표현하는 데 필요한 데이터 양을 감소시킨다. 그런 다음, 압축된 데이터는 비디오 데이터를 디코딩하는 비디오 압축 해제 장치에 의해 목적지에서 수신된다. 네트워크 자원이 제한되고 더 높은 비디오 품질에 대한 요구사항이 계속 늘어남에 따라, 이미지 품질을 거의 희생하지 않거나 또는 전혀 희생하지 않고 압축률을 개선하는 개선된 압축 및 압축 해제 기술이 바람직하다.
일 실시예에서, 본 개시는 비디오 코딩 장치에 구현되는 방법을 포함한다. 상기 비디오 코딩 장치에 구현되는 방법은, 상기 비디오 코딩 장치의 프로세서가, 코딩 트리 노드를 포함하는 코딩 트리 유닛(coding tree unit)을 획득하는 단계를 포함한다. 상기 비디오 코딩 장치에 구현되는 방법은, 상기 프로세서가, 제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라, 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 루마 샘플(luma sample)과 크로마 샘플(chroma sample)을 파티셔닝하는 단계를 더 포함한다. 상기 비디오 코딩 장치에 구현되는 방법은, 상기 프로세서가, 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하는 단계를 더 포함한다. 상기 비디오 코딩 장치에 구현되는 방법은, 상기 프로세서가, 상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하는 단계를 더 포함한다. 이 실시예에서, 더 작은 블록(예를 들어, 임계값보다 작거나 같은 블록)을 위한 서로 다른 코딩 트리(예를 들어, 서브트리)로 분할하면서, 동일한 코딩 트리는 더 큰 블록(예를 들어, 임계값을 초과하는 블록)을 위한 루마 샘플과 크로마 샘플 모두에 사용된다. 개별적인 트리가 루마 샘플과 크로마 샘플에 대해 상이한 분할을 허용하고, 따라서 전체 코딩 효율을 높이기 위해 조정될 수 있다. 하지만, 단일 트리 대신에 개별적인 트리를 사용하면 더 많은 처리 자원이 필요하고 최종 인코딩에서 더 많은 메모리 공간을 사용하게 된다. 공용 코딩 트리를 임계값 이하의 서로 다른 하위트리로 분할하면, 루마 블록으로부터의 전체 트리가 대부분의 크로마 블록에 재사용되는(예를 들어, 복잡도와 메모리 사용을 낮추는) 동시에 더 작은 루마 블록과 크로마 블록에 대한 하위 트리가 조정(예를 들어, 코딩 효율이 증가)될 수 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 다른 구현이 제공된다. 여기서, 상기 임계값은 4,096 픽셀이거나 또는 베이스가 2인 로그 영역에서 6이다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 코딩 트리 유닛은 인트라 예측(Intra-prediction, I) 프레임 내에 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 크로마 샘플은 청색 차이 크로마(Cb) 샘플과 적색 차이 크로마(Cr) 샘플을 포함하고, 상기 Cb 샘플과 Cr 샘플은 공용 크로마 코딩 서브트리에 의해 파티셔닝된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 비디오 코딩 장치는 인코더이다. 상기 비디오 코딩 장치에 구현되는 방법은, 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 사이의 분리를 나타내기 위해 luma_chroma_separate 플래그를 비트스트림으로 인코딩하는 단계를 포함한다. 상기 luma_chroma_separate 플래그는 상이한 루마 코딩 서브트리와 크로마 코딩 서브트리가 사용되고 있다는 것을 상기 디코더에 지시하는 메커니즘을 제공한다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 비디오 코딩 장치는 디코더이다. 상기 비디오 코딩 장치에 구현되는 방법은, 비트스트림으로부터 luma_chroma_separate 플래그를 수신하는 단계를 더 포함한다. 상기 luma_chroma_separate 플래그는 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타낸다. 상기 루마 샘플과 크로마 샘플은 상기 luma_chroma_separate 플래그의 값에 기초하여 개별적인 코딩 서브트리에 의해 파티셔닝된다. 상기 luma_chroma_separate 플래그는 상이한 루마 코딩 서브트리와 크로마 코딩 서브트리가 사용되고 있다는 것을 상기 디코더에 지시하는 메커니즘을 제공한다.
일 실시예에서, 본 개시는 비디오 인코더를 포함하고, 상기 비디오 인코더는 코딩 트리 노드를 포함하는 코딩 트리 유닛을 획득하도록 구성된 프로세서를 포함한다. 또한, 상기 프로세서는, 상기 제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 상기 루마 샘플과 상기 크로마 샘플을 파티셔닝하도록 구성된다. 또한, 상기 프로세서는, 상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하도록 구성된다. 또한, 상기 프로세서는, 상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하도록 구성된다. 또한, 상기 프로세서는 상기 공용 코딩 트리, 상기 루마 코딩 서브트리, 및 상기 크로마 코딩 서브트리에 기초하여 상기 크로마 샘플과 상기 루마 샘플을 비트스트림으로 인코딩하도록 구성된다. 상기 비디오 인코더는 상기 프로세서에 연결된 송신기를 더 포함한다. 상기 송신기는 비디오 디코더에 의해 표시되는 상기 크로마 샘플과 상기 루마 샘플의 재구성을 지원하기 위해 상기 비트스트림을 전송하도록 구성된다. 이 실시예에서, 더 작은 블록(예를 들어, 임계값보다 작거나 같은 블록)을 위한 상이한 코딩 트리(예를 들어, 서브트리)로 분할하면서, 동일한 코딩 트리는 더 큰 블록(예를 들어, 임계값을 초과하는 블록)을 위한 루마 샘플과 크로마 샘플 모두에 사용된다. 개별적인 트리가 루마 샘플과 크로마 샘플을 위한 상이한 분할을 허용하고, 따라서 전체 코딩 효율을 높이기 위해 조정될 수 있다. 하지만, 단일 트리 대신에 개별적인 트리를 사용하면 더 많은 처리 자원이 필요하고 최종 인코딩에서 더 많은 메모리 공간을 사용하게 된다. 공용 코딩 트리를 임계값 이하의 상이한 하위트리로 분할하면 루마 블록으로부터의 전체 트리가 대부분의 크로마에 재사용되는(예를 들어, 복잡도와 메모리 사용을 낮추는) 동시에 더 작은 루마 블록과 크로마 블록에 대한 하위 트리가 조정(예를 들어, 코딩 효율이 증가)될 수 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 임계값은 4,096 픽셀 또는 상기 베이스가 2인 로그 영역에서 6이다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 코딩 트리 유닛은 I 프레임 내에 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 크로마 샘플은 청색 차이 크로마(Cb) 샘플과 적색 차이 크로마(Cr) 샘플을 포함하고, 상기 Cb 샘플과 Cr 샘플은 공용 크로마 코딩 서브트리에 의해 파티셔닝된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 프로세서는 추가적으로, 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타내기 위해 luma_chroma_separate 플래그를 비트스트림으로 인코딩하도록 구성된다. 상기 luma_chroma_separate 플래그는 상이한 루마 코딩 서브트리와 크로마 코딩 서브트리가 사용되고 있다는 것을 상기 디코더에 지시하는 메커니즘을 제공한다.
일 실시예에서, 본 개시는 수신기를 포함하는 비디오 디코더를 포함한다. 상기 수신기는 루마 데이터와 크로마 데이터를 포함하는 코딩 트리 유닛을 포함하는 비트스트림을 수신한다. 상기 비디오 디코더는 상기 수신기에 연결된 프로세서를 더 포함한다. 상기 프로세서는, 제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리로 상기 루마 데이터와 상기 크로마 데이터를 파티셔닝하도록 구성된다. 상기 프로세서는 추가적으로, 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리로 상기 루마 데이터를 파티셔닝하도록 구성된다. 상기 프로세서는 추가적으로, 제3 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리로 상기 크로마 데이터를 파티셔닝하도록 구성된다. 여기서, 상기 루마 코딩 서브트리는 상기 크로마 코딩 서브트리와는 다른 분할 모드를 포함한다. 상기 프로세서는 추가적으로, 상기 공용 코딩 트리, 상기 루마 코딩 서브트리, 및 상기 크로마 코딩 서브트리에 기초하여 상기 크로마 데이터와 상기 루마 데이터를 비디오 프레임의 슬라이스에 재구성하도록 구성된다. 상기 프로세서는 추가적으로, 상기 비디오 프레임을 디스플레이 쪽으로 포워딩하도록 구성된다. 이 실시예에서, 더 작은 블록(예를 들어, 임계값보다 작거나 같은 블록)을 위한 서로 다른 코딩 트리(예를 들어, 서브트리)로 분할하면서, 동일한 코딩 트리는 더 큰 블록(예를 들어, 임계값을 초과하는 블록)을 위한 루마 샘플과 크로마 샘플 모두에 사용된다. 개별적인 트리가 루마 샘플과 크로마 샘플에 대해 상이한 분할을 허용하고, 따라서 전체 코딩 효율을 높이기 위해 조정될 수 있다. 하지만, 단일 트리 대신에 개별적인 트리를 사용하면 더 많은 처리 자원이 필요하고 최종 인코딩에서 더 많은 메모리 공간을 사용하게 된다. 공용 코딩 트리를 임계값 이하의 서로 다른 하위트리로 분할하면, 루마 블록으로부터의 전체 트리가 대부분의 크로마 블록에 재사용되는(예를 들어, 복잡도와 메모리 사용을 낮추는) 동시에 더 작은 루마 블록과 크로마 블록에 대한 하위 트리가 조정(예를 들어, 코딩 효율이 증가)될 수 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 임계값은 4,096 픽셀 또는 상기 베이스가 2인 로그 영역에서 6이다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 루마 데이터와 크로마 데이터는, 상기 코딩 트리 유닛이 비디오 프레임 내의 I 타입 슬라이스에 포함되면 상이한 코딩 서브트리에 의해 파티셔닝된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 크로마 데이터는 Cb 데이터와 Cr 데이터를 포함하고, 상기 Cb 데이터와 Cr 데이터는 공용 크로마 코딩 서브트리에 의해 파티셔닝된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 프로세서는 추가적으로, 상기 비트스트림으로부터 luma_chroma_separate 플래그를 획득하도록 구성되어 있고, 상기 luma_chroma_separate 플래그는 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 사이의 분리를 나타내며, 상기 루마 데이터와 크로마 데이터는 상기 luma_chroma_separate 플래그의 값에 기초하여 서로 다른 코딩 서브트리에 의해 파티셔닝된다. 상기 luma_chroma_separate 플래그는 상이한 루마 코딩 서브트리와 크로마 코딩 서브트리가 사용되고 있다는 것을 상기 디코더에 지시하는 메커니즘을 제공한다.
일 실시예에서, 본 개시는 비디오 코딩 장치에 의해 사용될 컴퓨터 프로그램 제품을 포함하는 비일시적 컴퓨터 판독가능 매체를 포함하고, 상기 컴퓨터 프로그램 제품은 상기 비일시적 컴퓨터 판독가능 매체에 저장된 컴퓨터 실행가능 명령을 포함하며, 상기 컴퓨터 실행가능 명령은 프로세서에 의해 실행될 때 상기 비디오 디코더로 하여금 전술한 양태 중 어느 양태의 비디오 코딩 장치에 구현되는 방법을 수행하게 한다.
일 실시예에서, 본 개시는, 코딩 트리 노드를 포함하는 코딩 트리 유닛을 획득하기 위한 페칭 수단(fetching means)을 포함하는 비디오 코딩 장치를 포함한다. 또한, 상기 비디오 코딩 장치는, 제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 루마 샘플과 크로마 샘플을 파티셔닝하기 위한 공용 트리 파티셔닝 수단을 포함한다. 또한, 상기 비디오 코딩 장치는, 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하기 위한 루마 코딩 서브트리 파티셔닝 수단을 포함한다. 또한, 상기 비디오 코딩 장치는, 상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리를 가지고 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하기 위한 크로마 코딩 서브트리 파티셔닝 수단을 포함한다. 이 실시예에서, 더 작은 블록(예를 들어, 임계값보다 작거나 같은 블록)을 위한 서로 다른 코딩 트리(예를 들어, 서브트리)로 분할하면서, 동일한 코딩 트리는 더 큰 블록(예를 들어, 임계값을 초과하는 블록)을 위한 루마 샘플과 크로마 샘플 모두에 사용된다. 개별적인 트리가 루마 샘플과 크로마 샘플에 대해 상이한 분할을 허용하고, 따라서 전체 코딩 효율을 높이기 위해 조정될 수 있다. 하지만, 단일 트리 대신에 개별적인 트리를 사용하면 더 많은 처리 자원이 필요하고 최종 인코딩에서 더 많은 메모리 공간을 사용하게 된다. 공용 코딩 트리를 임계값 이하의 서로 다른 하위트리로 분할하면, 루마 블록으로부터의 전체 트리가 대부분의 크로마 블록에 재사용되는(예를 들어, 복잡도와 메모리 사용을 낮추는) 동시에 더 작은 루마 블록과 크로마 블록에 대한 하위 트리가 조정(예를 들어, 코딩 효율이 증가)될 수 있다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 페칭 수단, 상기 공용 트리 파티셔닝 수단, 상기 루마 서브트리 파티셔닝 수단, 및 상기 크로마 서브트리 파티셔닝 수단은 추가적으로, 상기 전술한 양태 중 어느 양태의 비디오 코딩 장치에 구현되는 방법을 수행하기 위한 수단이다.
일 실시예에서, 본 개시는 방법을 제공한다. 상기 방법은, 코딩 트리 유닛이 I 프레임 내에 있다고 결정하는 단계; 및
상기 코딩 트리 유닛에 대응하는 코딩 트리의 제1 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 공용 코딩 트리를 가지고 있는 제1 코딩 트리 노드와 연관된 루마 샘플의 코딩 블록과 크로마 샘플의 코딩 블록을 분할하는 단계; 상기 코딩 트리의 제2 코딩 트리 노드가 상기 임계값보다 작거나 같은 크기를 가지고 있으면, 루마 코딩 트리를 가지고 있는 상기 제2 코딩 트리 노드와 연관된 루마 샘플의 코딩 블록을 분할하고, 크로마 코딩 트리를 가지고 있는 상기 제2 코딩 트리 노드와 연관된 크로마 샘플의 코딩 블록을 분할하는 단계를 포함한다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 임계값은 4,096 루마 샘플 또는 2,048 루마 샘플이다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 공용 코딩 트리는 쿼드트리 분할(quad-tree split)된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 제1 코딩 트리 노드의 분할 모드가 포함된다.
선택적으로, 전술한 양태 중 어느 양태에서, 이 양태의 또 다른 구현이 제공된다. 여기서, 상기 크기는 log2Cb크기로 표현되고, 상기 임계값은 6이다.
일 실시예에서, 본 개시는 상기 전술한 양태 중 어느 양태를 수행하도록 구성된 프로세서를 포함하는 비디오 코딩 장치를 포함한다.
명확성을 위해, 전술한 실시예 중 어느 하나가 전술한 다른 실시예 중 하나 이상의 실시예와 결합되어 본 개시의 범위 내에서 새로운 실시예를 생성할 수 있다.
이러한 특징 그리고 다른 특징은 첨부 도면 및 청구 범위와 관련하여 다음의 상세한 설명으로부터 더 명확하게 이해될 것이다.
본 개시의 더 완전한 이해를 위해, 첨부 도면 및 상세한 설명과 관련하여 다음의 간략한 설명을 참조한다. 여기서, 동일한 참조 번호는 동일한 부분을 나타낸다.
도 1은 비디오 신호를 코딩하는 예시적인 방법을 나타낸 흐름도이다.
도 2는 비디오 코딩을 위한 예시적인 코딩 및 디코딩(codec) 시스템의 개략도이다.
도 3은 루마 블록과 크로마 블록을 파티셔닝할 수 있는 예시적인 비디오 인코더를 나타낸 개략도이다.
도 4는 루마 블록과 크로마 블록을 파티셔닝할 수 있는 예시적인 비디오 디코더를 나타낸 개략도이다.
도 5는 코딩 트리 유닛(coding tree unit, CTU)을 루마 코딩 블록(coding block, CB)과 크로마 CB를 포함하는 코딩 유닛(coding unit, CU)으로 파티셔닝하는 예시적인 메커니즘을 나타낸 개략도이다.
도 6은 CTU에 적용된 예시적인 코딩 트리를 나타낸다.
도 7은 코딩 트리에 사용되는 분할 모드의 예시적인 세트를 나타낸 개략도이다.
도 8은 임계 크기를 초과하는 CB에 대한 공용 코딩 트리와, 임계 크기보다 작거나 같은 크기를 가진 CB에 대한 분할 서브트리로 CTU를 파티셔닝하는 예시적인 방법을 나타낸 흐름도이다.
도 9는 예시적인 비디오 코딩 장치의 개략도이다.
도 10은 임계 크기를 초과하는 CB에 대한 공용 코딩 트리와, 임계 크기보다 작거나 같은 크기를 가진 CB에 대한 분할 서브트리로 CTU를 파티셔닝하는 예시적인 시스템의 개략도이다.
도 11은 임계 크기를 초과하는 CB에 대한 공용 코딩 트리와, 임계 크기보다 작거나 같은 크기를 가진 CB에 대한 분할된 서브트리로 CTU를 파티셔닝하는 예시적인 방법을 나타낸 흐름도이다.
이하, 하나 이상의 실시예의 예시적인 구현이 제공되지만, 개시된 시스템 및/또는 방법이 현재 알려져 있거나 또는 존재하는지 여부와 무관하게 어떠한 수의 기술을 사용하여 구현될 수 있다는 것을 처음부터 이해해야 한다. 본 개시는 본 명세서에 예시되고 설명되는 예시적인 설계와 구현을 포함하여, 아래에 예시된 예시적인 구현, 도면, 및 기술에 한정되지 말아야 하며, 균등물의 전체 범위와 함께 첨부된 청구항의 범위 내에서 수정될 수 있다.
비디오 코딩이 비디오 프레임을 블록으로 파티셔닝하고, 인트라 예측(intra-prediction)과 인터 예측(inter-prediction)을 통해 이 블록을 인코딩하여 비디오 파일의 크기를 압축하는 것을 포함한다. 본 개시는 파티셔닝 과정의 개선에 관한 것이다. 비디오 프레임이 먼저 코딩 트리 유닛(coding tree unit, CTU)으로 분할된다. CTU는 루마 샘플(예를 들어, 밝은 값과 어두운 값), 및 크로마 값(예를 들어, 색상)으로 표현되는 픽셀 데이터를 포함한다. CTU는 하나 이상의 코딩 트리에 의해 파티셔닝되어 코딩될 수 있는 코딩 블록(coding block, CB)을 생성한다(예를 들어, 인코더에서 인코딩되거나 또는 디코더에서 디코딩된다). 일부 시스템에서, 단일 코딩 트리가 루마 샘플과 크로마 샘플을 모두 분할하는 데 사용된다. 이러한 시스템의 문제점이 CTU 내의 루마 샘플이고, CTU 내의 크로마 샘플이 상당히 다른 패턴을 포함할 수 있다는 것이다. 이처럼, 루마 성분에 대한 효율적인 인코딩을 지원하는 코딩 트리가 크로마 성분에 대한 비효율적인 인코딩을 초래할 수 있고, 그 반대의 경우도 마찬가지이다. 그러므로, 이러한 시스템은 차선의 코딩 효율(예를 들어, 줄어든 압축 및 더 큰 파일 크기)로 압축된 비디오 파일을 생성할 수 있다.
교체 시스템에서, 상이한 코딩 트리가 루마 샘플과 크로마 샘플에 사용된다. 이러한 시스템으로 인해 블록 인코딩을 위한 코딩 효율이 높아진다. 하지만, 각각의 CTU에 대해 개별적인 루마 코딩 트리와 크로마 코딩 트리를 결정하는 것은, 코딩 과정의 복잡도를 실질적으로 높인다. 예를 들어, 코딩 트리의 개수가 2배로 선택됨에 따라, 이러한 접근법은 인코딩의 파티셔닝 부분 동안 사용되는 처리 자원의 양을 두 배로 늘릴 수 있다. 또한, 선택된 코딩 트리가 파티션 데이터로서 비트 스트림으로 인코딩된다. 따라서, 각각의 CTU에 대한 개별적인 루마 코딩 트리와 크로마 코딩 트리를 사용하면 인코딩에 저장된 파티션 데이터의 양이 (예를 들어, 인코딩된 트리의 개수의 2배로) 증가됨으로써, 블록 인코딩에 의해 획득된 코딩 효율 중 일부를 상쇄시킬 수 있다.
본 명세서에는 CTU 파티셔닝을 개선하기 위한 메커니즘이 개시된다. 대응하는 CB가 미리 정의된 임계값(예를 들어, 4096 픽셀)보다 크면, 공용 코딩 트리가 루마 샘플과 크로마 샘플 모두를 코딩하는 데 사용된다. 임계 크기보다 작거나 같은 루마 CB와 크로마 CB는 각각 루마 코딩 서브트리와 크로마 코딩 서브트리에 의해 파티셔닝된다. 루마 코딩 서브트리와 크로마 코딩 서브트리는 서로 다를 수 있다. 그러므로, 서브트리는 루마 샘플과 크로마 샘플 사이의 변화에 기초하여 코딩 효율을 높이도록 선택될 수 있다. 또한, 분할 루마 코딩 서브트리와 크로마 코딩 서브트리를 가지고 있는 공용 코딩 트리는 완전히 분리된 2개의 코딩 트리보다 적은 데이터를 사용한다. 그러므로, 분할된 서브트리를 가지고 있는 코딩 트리는 개별적인 코딩 트리에 비해 코딩 효율을 증가시킨다. 또한, 분할된 서브트리를 가지고 있는 코딩 트리를 선택하는 것은, 2개의 분리된 코딩 트리를 선택하는 것보다 덜 복잡하기 때문에 처리 자원을 더 적게 사용한다. 예를 들어, 분할된 서브트리를 가지고 있는 있는 코딩 트리를 선택하는 과정이, CTU에 대한 한 쌍의 코딩 트리를 선택하는 과정보다 더 빠르게 일어날 수 있다. 본 명세서에 개시되는 분할 서브트리 메커니즘은, 비디오 프레임의 인트라 예측(intra-prediction, I) 슬라이스(예를 들어, I 유형의 슬라이스)에 적용될 수 있다. 분할 서브트리 메커니즘은 예측(P) 슬라이스와 양방향 예측(B) 슬라이스(예를 들어, 각각 P 유형과 B 유형의 슬라이스)에 적용될 수 있다. 하나의 예에서, 분할 서브트리 메커니즘이 암시될 수 있고, 따라서 일반적으로 (예를 들어, I 슬라이스에 대해) 사용된다. 다른 예에서, 분할 서브트리가 대응하는 CTU에 사용되는지 여부를 나타내기 위해, luma_chroma_separate 플래그가 비트스트림의 CTU 관련 구문에 설정될 수 있다. 따라서, 본 명세서에 설명된 분할 서브트리 메커니즘은, 인코딩을 위해 CTU를 파티셔닝할 때 인코더에 의해 그리고 디코딩을 위해 CTU를 파티셔닝할 때 대응하는 디코더에 의해 사용될 수 있다.
도 1은 비디오 신호를 코딩하는 예시적인 연산 방법(100)을 나타낸 흐름도이다. 구체적으로, 인코더에서 비디오 신호가 인코딩된다. 인코딩 과정은 다양한 메커니즘을 이용하여 비디오 신호를 압축하여 비디오 파일 크기를 줄인다. 파일 크기가 작으면, 압축된 비디오 파일을 사용자에게 전송하는 동시에 관련 대역폭 오버헤드를 줄일 수 있다. 그런 다음, 디코더는 압축된 비디오 파일을 디코딩하여 최종 사용자에게 표시할 원본 비디오 신호를 재구성한다. 디코딩 과정은 일반적으로, 디코더가 비디오 신호를 일관되게 재구성할 수 있도록 인코딩 과정을 미러링한다.
단계 101에서, 비디오 신호가 인코더에 입력된다. 예를 들어, 비디오 신호는 메모리에 저장된 무압축 비디오 파일일 수 있다. 다른 예를 들면, 비디오 파일은 비디오 카메라와 같은 비디오 캡처 장치에 의해 캡처될 수 있고, 비디오의 라이브 스트리밍을 지원하도록 인코딩될 수 있다. 비디오 파일은 오디오 성분과 비디오 성분 모두를 포함할 수 있다. 비디오 성분은 일련의 이미지 프레임을 포함하고, 이 시퀀스에서 보여질 때 움직임의 시각적 인상을 제공한다. 이미지 프레임은 광의 관점에서 표현되는 픽셀(본 명세서에서는 루마 성분(또는 루마 샘플)이라고 함)과 컬러(크로마 성분(또는 컬러 샘플)이라고 함)을 포함한다. 일부 예에서, 프레임은 3차원 보기를 지원하기 위해 깊이 값을 포함할 수도 있다.
단계 103에서, 비디오가 블록으로 파티셔닝된다. 파티셔닝은 압축을 위해 각각의 프레임 내의 픽셀을 정사각형 및/또는 직사각형 블록으로 다시 나누는 것을 포함한다. CTU는 루마 샘플과 크로마 샘플을 모두 포함한다. 코딩 트리가 CTU를 블록으로 분할하는 데 사용될 수 있고, 그런 다음 추가적인 인코딩을 지원하는 구성이 획득될 때까지 이러한 블록이 반복적으로 세분화될 수 있다. 예를 들어, 프레임의 루마 성분은 개별 블록이 비교적 균일한 조명 값을 포함할 때까지 세분화될 수 있다. 또한, 프레임의 크로마 성분은 개별 블록이 상대적으로 균일한 색상 값을 포함할 때까지 세분화될 수 있다. 따라서, 파티셔닝 메커니즘은 비디오 프레임의 내용에 따라 달라진다.
단계 105에서, 단계 103에서 파티셔닝된 이미지 블록을 압축하기 위해 다양한 압축 메커니즘이 사용된다. 예를 들어, 인터 예측(inter-prediction) 및/또는 인트라 예측(intra-prediction)이 사용될 수 있다. 인트라 예측은 공용 씬에 있는 객체가 연속적인 프레임에 나타나는 경향이 있다는 사실을 활용하도록 설계된다. 따라서, 참조 프레임 내의 객체를 묘사하는 블록이, 인접 프레임에서 반복적으로 묘사될 필요가 없다. 구체적으로, 표와 같은 객체가 복수의 프레임에 걸쳐 일정한 위치에 그대로 있을 수 있다. 따라서, 표는 한 번 묘사되고, 인접 프레임은 참조 프레임을 다시 참조할 수 있다. 패턴 매칭 메커니즘이 복수의 프레임에 걸쳐 객체를 매칭하는 데 사용될 수 있다. 또한, 움직이는 객체는, 예를 들어 객체 이동 또는 카메라 이동으로 인해 복수의 프레임에 걸쳐 표현될 수 있다. 특정 예로서, 비디오가 복수의 프레임에 걸쳐 화면을 가로 질러 움직이는 자동차를 보여줄 수 있다. 움직임 벡터가 이러한 움직임을 묘사하는 데 사용될 수 있다. 움직임 벡터가 프레임 내의 객체의 좌표에서 참조 프레임 내의 객체의 좌표까지의 오프셋을 제공하는 2차원 벡터이다. 이와 같이, 인터 예측은 현재 프레임 내의 이미지 블록을 참조 프레임 내의 대응하는 블록으로부터의 오프셋을 나타내는 움직임 벡터의 세트로서 인코딩할 수 있다.
인트라 예측은 공용 프레임 내의 블록을 인코딩한다. 인트라 예측은 루마 성분과 크로마 성분이 하나의 프레임에 밀집하는 경향이 있다는 사실을 활용한다. 예를 들어, 나무의 일부에 있는 녹색 부분이 유사한 녹색 부분에 인접하게 위치하는 경향이 있다. 인트라 예측은 복수의 방향성 예측 모드(예를 들어, HEVC에서 33개), 평면 모드, 및 DC(direct current) 모드를 사용한다. 이러한 방향성 모드는 현재 블록이 대응하는 방향에서 이웃 블록의 샘플과 유사하거나/동일하다는 것을 나타낸다. 평면 모드는 행/열을 따라 일련의 블록(예를 들어, 평면)이 행의 가장자리에서 이웃 블록에 기초하여 보간될 수 있다는 것을 나타낸다. 평면 모드는, 사실상, 값을 변경할 때 상대적으로 일정한 기울기를 이용하여 행/열에 걸쳐 광/색상이 부드럽게 전환된다는 것을 나타낸다. DC 모드는 경계 평활화(boundary smoothing)에 사용되고 또한 블록이 방향성 예측 모드의 각도 방향과 연관된 모든 이웃 블록의 샘플과 연관된 평균 값과 유사하거나/동일하다는 것을 나타낸다. 따라서, 인트라 예측 블록은 이미지 블록을 실제 값 대신에 다양한 관계형 예측 모드 값으로 나타낼 수 있다. 또한, 인터 예측 블록은 이미지 블록을 실제 값 대신에 움직임 벡터 값으로 나타낼 수 있다. 어느 경우든지, 예측 블록은 경우에 따라 이미지 블록을 정확하게 표현하지 못할 수 있다. 어떠한 차이도 잔여 블록(residual block)에 저장된다. 파일을 추가로 압축하기 위해 변환이 잔여 블록에 적용될 수 있다.
단계 107에서, 다양한 필터링 기술이 적용될 수 있다. HEVC에서, 이러한 필터가 인루프 필터링 방식에 따라 적용된다. 전술한 블록 기반의 예측은 디코더에서 뭉툭한 이미지가 생성되게 할 수 있다. 또한, 블록 기반의 예측 방식은 블록을 인코딩한 후 나중에 참조 블록으로 사용할 인코딩된 블록을 재구성할 수 있다. 인루프 필터링 방식은 잡음 억제 필터, 디블로킹 필터(de-blocking filter), 적응형 루프 필터(adaptive loop filter), 및 샘플 적응형 오프셋(sample adaptive offset, SAO) 필터를 블록/프레임에 반복적으로 적용한다. 이러한 필터는 인코딩된 파일이 정확하게 재구성될 수 있도록 이러한 블로킹 아티팩트(blocking artifact)를 완화시킨다. 또한, 이러한 필터는, 아티팩트가 재구성된 참조 블록에 기초하여 인코딩된 후속 블록에서 추가적인 아티팩트를 생성할 가능성이 적을 수 있도록 재구성된 참조 블록에서 아티팩트를 완화시킨다.
일단 비디오 신호가 파티셔닝되고, 압축되며, 필터링되었으면, 단계 109에서 결과 데이터가 비트 스트림으로 인코딩된다. 비트 스트림은 전술한 데이터뿐만 아니라 디코더에서 적절한 비디오 신호 재구성을 지원하는 데 필요한 어떠한 시그널링 데이터도 포함한다. 예를 들어, 이러한 데이터는 파티션 데이터, 예측 데이터, 잔여 블록, 및 코딩 명령을 디코더에 제공하는 다양한 플래그를 포함할 수 있다. 비트 스트림은 요청시 디코더 쪽으로의 전송을 위해 메모리에 저장될 수 있다. 비트 스트림은 복수의 디코더 쪽으로 브로드캐스트되거나 및/또는 멀티캐스트될 수도 있다. 비트 스트림 생성은 반복적 과정이다. 따라서, 단계 101, 단계 103, 단계 105, 단계 107, 및 단계 109는 많은 프레임과 블록에 걸쳐 연속적으로 및/또는 동시에 일어날 수 있다. 도 1에 도시된 순서가 명확성과 설명의 편의를 위해 제공된 것으로, 비디오 코딩 순서를 특정 순서로 한정하려는 것이 아니다.
디코더는 단계 111에서 비트스트림을 수신하고 디코딩 과정을 시작한다. 구체적으로, 디코더는 엔트로피 디코딩 방식을 이용하여 비트 스트림을 대응하는 구문과 비디오 데이터로 변환한다. 디코더는 비트스트림으로부터의 구문 데이터를 이용하여 단계 111에서 프레임에 대한 파티션을 결정한다. 파티셔닝은 단계 103의 블록 파티셔닝 결과와 일치해야 한다. 이제, 단계 111에서 사용되는 엔트로피 인코딩/디코딩에 대해 설명한다. 인코더는 압축 과정 중에 많은 선택, 예컨대 입력 이미지 내의 값의 공간적 위치에 기초하여 가능한 여러 선택 중에서 블록 분할 방식을 선택한다. 정확한 선택을 시그널링하는 것은 다수의 빈(bin)을 사용할 수 있다. 본 명세서에서 사용되는 바와 같이, 빈은 변수로 취급되는 이진 값(예를 들어, 컨텍스트에 따라 달라질 수 있는 비트 값)이다. 엔트로피 코딩을 사용하면 인코더가 특정 경우에 명확하게 실행 불가능한 옵션을 폐기하고 허용 가능한 옵션 세트를 남길 수 있다. 그런 다음, 각각의 허용 가능한 옵션에는 코드 워드가 할당된다. 코드워드의 길이가 허용 가능한 옵션의 개수에 기초한다(예를 들어, 2개의 옵션에 대해 하나의 빈, 그리고 3~4개의 옵션에 대해 2개의 빈 등). 그런 다음, 인코더는 선택된 옵션에 대한 코드워드를 인코딩한다. 이 방식은, 가능한 모든 옵션의 잠재적으로 큰 집합으로부터의 선택을 고유하게 나타내는 것이 아니라, 허용 가능한 옵션의 작은 부분집합으로부터의 선택을 고유하게 나타내기 위해, 코드 워드가 원하는 만큼 크기 때문에 코드워드의 크기를 줄인다. 그런 다음, 디코더는 인코더와 유사한 방식으로 허용 가능한 옵션의 집합을 결정함으로써 이 선택을 디코딩한다. 허용 가능한 옵션의 집합을 결정함으로써, 디코더는 코드워드를 판독하고 인코더가 내린 선택을 결정할 수 있다.
단계 113에서, 디코더가 블록 디코딩을 수행한다. 특히, 디코더는 역변환을 이용하여 잔여 블록을 생성한다. 그런 다음, 디코더는 잔여 블록 및 대응하는 예측 블록을 사용하여 파티셔닝에 따라 이미지 블록을 재구성한다. 예측 블록은 단계 105에서 인코더에 생성된 트라 예측 블록과 인터 예측 블록을 모두 포함할 수 있다. 그런 다음, 재구성된 이미지 블록은 단계 111에서 결정된 파티셔닝 데이터에 따라, 재구성된 비디오 신호의 프레임에 위치한다. 전술한 바와 같이, 단계 113에 대한 구문은 엔트로피 코딩을 통해 비트스트림으로 시그널링될 수도 있다.
단계 115에서, 재구성된 비디오 신호의 프레임에 대해 인코더에서 단계 107과 유사한 방식으로 필터링이 수행된다. 예를 들어, 잡음 억제 필터, 디블로킹 필터, 적응형 루프 필터, 및 SAO 필터가 프레임에 적용되어 블로킹 아티팩트를 제거할 수 있다. 일단 프레임이 필터링되면, 최종 사용자가 볼 수 있도록 비디오 신호는 단계 117에서 디스플레이에 출력될 수 있다.
본 개시는 CTU를 파티셔닝할 때 증가된 코딩 효율(예를 들어, 파일 크기 감소) 및/또는 감소된 코딩 복잡도(예를 들어, 줄어든 프로세서 자원 사용)을 제공하기 위한 수정에 관한 것이다. 그러므로, 본 개시는 인코더에서 단계 103의 블록 파티셔닝 및 인코더에서 단계 111의 파티션을 결정하는 기능을 개선한다. 특히, 단계 103과 단계 111에서, 대응하는 CB가 임계값보다 큰 크기이기만 하면, 공용 코딩 트리가 CTU 내의 루마 샘플과 크로마 샘플 모두를 분할하는 데 사용된다. 임계값보다 작거나 같은 CB의 경우, 코딩 트리는 각각 임계값 이하의 임계 루마 CB와 크로마 CB에 대해 상이한 파티션을 수행할 수 있는 루마 코딩 서브트리와 크로마 코딩 서브트리로 분할한다 .
도 2는 비디오 코딩을 위한 예시적인 코딩 및 디코딩(codec) 시스템(200)의 개략도이다. 특히, 코덱 시스템(200)은 연산 방법(100)의 구현을 지원하는 기능을 제공한다. 코덱 시스템(200)은 인코더 및 디코더 양쪽에 사용되는 구성 요소를 묘사하기 위해 일반화되어 있다. 코덱 시스템(200)은 연산 방법(100)에서 단계 101과 단계 103과 관련하여 설명된 비디오 신호를 수신하여 파티셔닝하여 파티셔닝된 신호(201)를 초래한다. 그런 다음, 코덱 시스템(200)은 연산 방법(100)에서 단계 105, 단계 107, 및 단계 109와 관련하여 논의된 바와 같이 인코더로서 동작할 때 분할된 비디오 신호(201)를 코딩된 비트 스트림으로 압축한다. 디코더로서 동작할 때, 코덱 시스템(200)은 연산 방법(100)에서 단계 111, 단계 113, 단계 115, 및 단계 117과 관련하여 설명된 비트 스트림으로부터 출력 비디오 신호를 생성한다. 코덱 시스템(200)은 일반 코더 제어 컴포넌트(211), 변환 스케일링 및 양자화 컴포넌트(213), 인트라-픽처 추정 컴포넌트(215), 인트라-픽처 예측 컴포넌트(217), 움직임 보상 컴포넌트(219), 움직임 추정 컴포넌트(221), 스케일링 및 역변환 컴포넌트(229), 필터 제어 분석 컴포넌트(227), 인루프 필터 컴포넌트(225), 디코딩된 픽처 버퍼 컴포넌트(223), 및 헤더 포맷팅 및 컨텍스트 적응형 이진 산술 코딩(context adaptive binary arithmetic coding, CABAC) 컴포넌트(231)를 포함한다. 이러한 컴포넌트는 도시된 바와 같이 결합된다. 도 2에서, 검은 선이 인코딩/디코딩될 데이터의 이동을 나타내고, 파선이 다른 컴포넌트의 동작을 제어하는 제어 데이터의 이동을 나타낸다. 코덱 시스템(200)의 컴포넌트는 모두 인코더에 존재할 수 있다. 디코더는 코덱 시스템(200)의 컴포넌트의 부분집합을 포함할 수 있다. 예를 들어, 디코더는 인트라-픽처 예측 컴포넌트(217), 움직임 보상 컴포넌트(219), 스케일링 및 역변환 컴포넌트(229), 인루프 필터 컴포넌트(225), 및 디코딩된 픽처 버퍼 컴포넌트(223)를 포함할 수 있다. 이하, 이러한 구성 요소에 대해 설명한다.
파티셔닝된 비디오 신호(201)는 코딩 트리에 의해 픽셀의 블록에 파티셔닝되는 캡쳐된 비디오 시퀀스이다. 코딩 트리가 다양한 파티셔닝 모드를 이용하여 픽셀의 블록을 더 작은 픽셀의 블록으로 세분화한다. 이러한 블록은 더 작은 블록으로 더 세분화될 수 있다. 이러한 블록을 코딩 트리 상의 노드라 한다. 더 큰 부모 노드가 더 작은 자식 노드로 분할된다. 노드가 세분화되는 횟수를 노드/코딩 트리의 깊이라고 한다. 분할된 블록은 경우에 따라 코딩 유닛(CU)에 포함될 수 있다. 예를 들어, CU는 CU에 대한 대응하는 구문 명령과 함께 루마 블록, 적색 차이 크로마(Cr) 블록, 및 청색 차이 크로마(Cb) 블록을 포함하는 CTU의 하위 부분일 수 있다. 이 분할 모드는 사용되는 분할 모드에 따라 노드를 각각 다양한 형상의 2개, 또는 3개, 또는 4개의 자식 노드로 분할하는 데 사용되는 2진 트리(binary tree, BT), 트리플 트리(triple tree, TT), 및 쿼드 트리(quad tree, QT)를 포함할 수 있다. 파티셔닝된 비디오 신호(201)는 압축을 위해 일반 코더 제어 컴포넌트(211), 변환 스케일링 및 양자화 컴포넌트(213), 인트라-픽처 추정 컴포넌트(215), 필터 제어 분석 컴포넌트(227), 및 움직임 추정 컴포넌트(221)에 포워딩된다.
일반 코더 제어 컴포넌트(211)는 적용 제약 조건에 따라 비디오 시퀀스의 이미지를 비트 스트림으로 코딩하는 것과 관련된 결정을 내리도록 구성된다. 예를 들어, 일반 코더 제어 컴포넌트(211)는 비트 레이트/비트 스트림 크기 대 재구성 품질의 최적화를 관리한다. 이러한 결정은 저장 공간/대역폭 이용 가능성과 이미지 해상도 요청에 기초하여 내려질 수 있다. 일반 코더 제어 컴포넌트(211)는 또한 버퍼 언더런 및 오버런 문제를 완화시키기 위해 전송 속도의 관점에서 버퍼 이용율을 관리한다. 이러한 문제를 관리하기 위해, 일반 코더 제어 컴포넌트(211)는 다른 컴포넌트에 의한 파티셔닝, 예측, 및 필터링을 관리한다. 예를 들어, 일반 코더 제어 컴포넌트(211)는 해상도를 높이고 대역폭 사용을 낮추기 위해 압축 복잡도를 동적으로 증가시키거나 또는 해상도 및 대역폭 사용을 낮추기 위해 압축 복잡도를 동적으로 낮출 수 있다. 따라서, 일반 코더 제어 컴포넌트(211)는 비디오 신호 재구성 품질과 비트 레이트 문제의 균형을 맞추기 위해 코덱 시스템 (200)의 다른 컴포넌트를 제어한다. 일반 코더 제어 컴포넌트(211)는 다른 컴포넌트의 동작을 제어하는 제어 데이터를 생성한다. 또한, 제어 데이터는 헤더 포맷팅 및 CABAC 컴포넌트(231)에 포워딩되어 비트 스트림으로 인코딩됨으로써, 디코더에서의 디코딩을 위한 파라미터를 시그널링한다.
파티셔닝된 비디오 신호(201)는 또한 인터 예측을 위해 움직임 추정 컴포넌트(221)와 움직임 보상 컴포넌트(219)에 송신된다. 분할된 비디오 신호201)의 프레임 또는 슬라이스가 복수의 비디오 블록으로 분할될 수 있다. 움직임 추정 컴포넌트(221)와 움직임 보상 컴포넌트(219)는 하나 이상의 참조 프레임에서 하나 이상의 블록에 대해 수신된 비디오 블록의 인터-예측 코딩을 수행하여 시간적 예측을 제공한다. 코덱 시스템(200)은, 예를 들어 비디오 데이터의 각각의 블록에 대한 적절한 코딩 모드를 선택하기 위해 복수의 코딩 패스(coding pass)를 수행할 수 있다.
움직임 추정 컴포넌트(221)와 움직임 보상 컴포넌트(219)는 고도로 통합될 수 있지만, 개념적 목적을 위해 개별적으로 설명된다. 움직임 추정 컴포넌트(221)에 의해 수행되는 움직임 추정은 움직임 벡터를 생성하는 과정으로, 비디오 블록에 대한 움직임을 추정한다. 예를 들어, 움직임 벡터가 예측 블록에 대한 코딩된 객체의 변위를 나타낼 수 있다. 픽셀 차이의 관점에서, 예측 블록이 코딩될 블록과 밀접하게 일치하는 것으로 발견된 블록이다. 예측 블록을 참조 블록이라고도 할 수 있다. 이러한 픽셀 차이는 절대 차이의 합(sum of absolute difference, SAD), 또는 제곱 차이의 합(sum of absolute difference, SSD), 또는 다른 차이 메트릭에 의해 결정될 수 있다. HEVC는 CTU, 코딩 트리 블록(coding tree block, CTB), 및 CU를 포함하는 여러 개의 코딩된 객체를 사용한다. 예를 들어, CTU가 CTB로 분할될 수 있고, 그런 다음 CU에 포함되기 위해 CB로 분할될 수 있다. CU가 예측 데이터를 포함하는 예측 단위(prediction unit, PU) 및/또는 CU에 대한 변환된 잔여 데이터를 포함하는 변환 단위(transform unit, TU)로서 인코딩될 수 있다. 움직임 추정 컴포넌트(221)는 레이트 왜곡 최적화 과정의 일부로서 레이트 왜곡 분석을 이용하여 움직임 벡터, PU, 및 TU를 생성한다. 예를 들어, 움직임 추정 컴포넌트(221)는 현재 블록/프레임에 대한 복수의 참조 블록과 복수의 움직임 벡터 등을 결정할 수 있고, 최상의 레이트 왜곡 특성을 가진 참조 블록과 움직임 벡터 등을 선택할 수 있다. 최상의 레이트 왜곡 특성은 비디오 재구성의 품질(예를 들어, 압축에 의한 데이터 손실량)과 코딩 효율(예를 들어, 최종 인코딩의 크기)의 균형을 맞춘다.
일부 예에서, 코덱 시스템(200)은 디코딩된 픽처 버퍼 컴포넌트(223)에 저장된 참조 픽처의 정수 이하의 픽셀 위치에 대한 값을 계산할 수 있다. 예를 들어, 비디오 코덱 시스템(200)은 참조 픽처의 1/4 픽셀 위치, 또는 1/8 픽셀 위치, 또는 다른 분수 픽셀 위치의 값을 보간할 수 있다. 따라서, 움직임 추정 컴포넌트(221)는 풀 픽셀 위치와 분수 픽셀 위치에 대한 움직임 검색을 수행하고, 분수 픽셀 정밀도를 가진 움직임 벡터를 출력할 수 있다. 움직임 추정 컴포넌트(221)는 PU의 위치를 참조 픽처의 예측 블록의 위치와 비교함으로써, 인터-코딩된 슬라이스에서 비디오 블록의 PU에 대한 움직임 벡터를 계산한다. 움직임 추정 컴포넌트(221)는 인코딩 및 움직임을 위한 헤더 포맷 및 CABAC 컴포넌트(231)로의 움직임 데이터로서 계산된 움직임 벡터를 움직임 보상 컴포넌트(219)에 출력한다.
움직임 보상 컴포넌트(219)에 의해 수행되는 움직임 보상은, 움직임 추정 컴포넌트(221)에 의해 결정된 움직임 벡터에 기초하여 예측 블록을 페칭하거나 또는 생성하는 것을 포함할 수 있다. 다시, 일부 예에서, 움직임 추정 컴포넌트(221)와 움직임 보상 컴포넌트(219)는 기능적으로 통합될 수 있다. 현재 비디오 블록의 PU에 대한 움직임 벡터를 수신하면, 움직임 보상 컴포넌트(219)는 움직임 벡터가 가리키는 예측 블록을 찾을 수 있다. 그런 다음, 코딩된 현재 비디오 블록의 픽셀 값에서 예측 블록의 픽셀 값을 차감하여 잔여 비디오 블록이 형성되고, 픽셀 차이 값이 형성된다. 일반적으로, 움직임 추정 컴포넌트(221)는 루마 성분에 대한 움직임 추정을 수행하고, 움직임 보상 컴포넌트(219)는 크로마 성분과 루마 성분 모두에 대해 루마 성분에 기초하여 계산된 움직임 벡터를 사용한다. 예측 블록과 잔여 블록은 변환 스케일링 및 양자화 컴포넌트(213)에 포워딩된다.
분할된 비디오 신호(201)는 또한 인트라 픽처 추정 컴포넌트(215)와 인트라-픽처 예측 컴포넌트(217)에 송신된다. 움직임 추정 컴포넌트(221) 및 움직임 보상 컴포넌트(219)와 마찬가지로, 인트라 픽처 추정 컴포넌트(215)와 인트라-픽처 예측 컴포넌트(217)는 고도로 통합될 수 있지만, 개념적 목적을 위해 별도로 도시되어 있다. 전술한 바와 같이, 인트라 픽처 추정 컴포넌트(215)와 인트라-픽처 예측 컴포넌트(217)는 프레임들 간에 움직임 추정 컴포넌트(221)와 움직임 보상 컴포넌트(219)에 의해 수행되는 인터 예측에 대한 대안으로서 현재 프레임 내의 블록에 대해 현재 블록을 인터-예측(inter-predict)한다. 특히, 인트라-픽처 추정 컴포넌트(215)는 현재 블록을 인코딩하기 위해 사용할 인트라-예측 모드를 결정한다. 일부 예에서, 인트라-픽처 추정 컴포넌트(215)는 복수의 테스트된 인트라-예측 모드로부터 적절한 인트라-예측 모드를 선택하여 현재 블록을 인코딩한다. 그런 다음, 선택된 인트라 예측 모드는 인코딩을 위해 헤더 포맷팅 및 CABAC 컴포넌트(231)에 포워딩된다.
예를 들어, 인트라-픽처 추정 컴포넌트(215)는 테스트된 다양한 인트라 예측 모드에 대한 레이트 왜곡 분석을 이용하여 레이트-왜곡 값을 계산하고, 테스트된 모드 중에서 최상의 레이트-왜곡 특성을 가진 인트라-예측 모드를 선택한다. 레이트-왜곡 분석은 일반적으로, 인코딩된 블록을 생성하는 데 사용되는 비트레이트(예를 들어, 비트 수)뿐만 아니라 인코딩된 블록과 인코딩된 블록을 생성하기 위해 인코딩되었던 원래의 인코딩되지 않은 블록 사이의 왜곡(또는 오류)의 양을 결정한다. 인트라-픽처 추정 컴포넌트(215)는 다양한 인코딩된 블록에 대한 왜곡 및 레이트로부터 비율을 계산하여, 어떤 인트라-예측 모드가 블록에 대해 최상의 레이트-왜곡 값을 나타내는지를 결정한다. 또한, 인트라-픽처 추정 컴포넌트(215)는 레이트-왜곡 최적화(rate-distortion optimization, RDO)에 기반한 깊이 모델링 모드(depth modeling mode, DMM)를 이용하여 깊이 맵의 깊이 블록을 코딩하도록 구성될 수 있다.
인트라-픽처 예측 컴포넌트(217)는 인코더 상에 구현될 때 인트라-픽처 추정 컴포넌트(215)에 의해 결정되는 선택된 인트라 예측 모드에 기초하여 예측 블록으로부터 잔여 블록을 생성하거나 또는 디코더 상에 구현될 때 비트스트림으로부터 잔여 블록을 판독할 수 있다. 잔여 블록은 행렬로 표시되는 예측 블록과 원래 블록 간의 값의 차이를 포함한다. 그런 다음, 잔여 블록은 변환 스케일링 및 양자화 컴포넌트(213)에 포워딩된다. 인트라-픽처 추정 컴포넌트(215)와 인트라-픽처 예측 컴포넌트(217)는 루마 성분과 크로마 성분 모두에 대해 연산할 수 있다.
변환 스케일링 및 양자화 컴포넌트(213)는 잔여 블록을 더 압축하도록 구성된다. 변환 스케일링 및 양자화 컴포넌트(213)는 이산 코사인 변환(discrete cosine transform, DCT), 이산 사인 변환(discrete sine transform, DST), 또는 개념적으로 유사한 변환과 같은 변환을 잔여 블록에 적용하여 잔여 변환 계수 값을 포함하는 비디오 블록을 생성한다. 웨이블릿 변환(Wavelet transform), 정수 변환, 또는 부대역 변환, 또는 다른 유형의 변환이 사용될 수도 있다. 이 변환은 픽셀 값 영역에서 변환 영역으로, 예컨대 주파수 영역으로 잔여 정보를 변환할 수 있다. 또한, 변환 스케일링 및 양자화 컴포넌트(213)는, 예를 들어 주파수에 기초하여 변환된 잔여 정보를 스케일링하도록 구성된다. 서로 다른 주파수 정보가 서로 다른 단위(granularity)로 양자화될 수 있도록, 이러한 스케일링이 스케일 팩터를 잔여 정보에 적용함으로써, 재구성된 비디오의 최종 시각 품질에 영향을 미칠 수 있다. 또한, 변환 스케일링 및 양자화 컴포넌트(213)는 비트 레이트를 더 낮추기 위해 변환 계수를 양자화하도록 구성된다. 양자화 과정은 이러한 계수의 일부 또는 전부와 연관된 비트 깊이를 감소시킬 수 있다. 양자화의 정도는 양자화 파라미터를 조정함으로써 수정될 수 있다. 일부 예에서, 그런 다음, 변환 스케일링 및 양자화 컴포넌트(213)는 양자화된 변환 계수를 포함하는 행렬의 스캔을 수행할 수 있다. 양자화된 변환 계수는 헤더 포맷팅 및 CABAC 컴포넌트(231)에 포워딩되어 비트 스트림으로 인코딩된다.
스케일링 및 역변환 컴포넌트(229)는 변환 스케일링 및 양자화 컴포넌트(213)의 역연산을 적용하여 움직임 추정을 지원한다. 스케일링 및 역변환 컴포넌트(229)는, 예를 들어 다른 현재 블록에 대한 예측 블록이 될 수 있는 참조 블록으로서 나중에 사용하기 위해 역스케일링, 변환, 및/또는 양자화를 적용하여 픽셀 영역에서 잔여 블록을 재구성한다. 움직임 추정 컴포넌트(221) 및/또는 움직임 보상 컴포넌트(219)는, 나중에 블록/프레임의 움직임 추정에 사용하기 위해 잔여 블록을 대응하는 예측 블록에 다시 추가하여 참조 블록을 계산할 수 있다. 스케일링, 양자화, 및 변환 중에 생성된 아티팩트를 완화시키기 위해, 필터가 재구성된 참조 블록에 적용된다. 그렇지 않으면, 이러한 아티팩트는 후속 블록이 예측될 때 부정확한 예측을 유발할 수 있다(그리고 추가적인 아티팩트를 생성할 수 있다).
필터 제어 분석 컴포넌트(227)와 인루프 필터 컴포넌트(225)는 잔여 블록 및/또는 재구성된 이미지 블록에 필터를 적용한다. 예를 들어, 스케일링 및 역변환 컴포넌트(229)로부터의 변환된 잔여 블록은 인트라-픽처 예측 컴포넌트(217) 및/또는 움직임 보상 컴포넌트(219)로부터의 대응하는 예측 블록과 결합되어 원래 이미지 블록을 재구성할 수 있다. 그런 다음, 이러한 필터는 재구성된 이미지 블록에 적용될 수 있다. 일부 예에서, 필터는 대신에 잔여 블록에 적용될 수 있다. 도 2의 다른 컴포넌트와 마찬가지로, 필터 제어 분석 컴포넌트(227)와 인루프 필터 컴포넌트(225)는 고도로 통합되어 함께 구현될 수 있지만, 개념적 목적을 위해 별도로 도시되어 있다. 재구성된 참조 블록에 적용된 필터는 특정 공간 영역에 적용되고, 이러한 필터가 적용되는 방식을 조정하는 복수의 파라미터를 포함한다. 필터 제어 분석 컴포넌트(227)는 재구성된 참조 블록을 분석하여, 이러한 필터가 적용되어야 하는 위치를 결정하고 대응하는 파라미터를 설정한다. 이러한 데이터는 인코딩을 위한 필터 제어 데이터로서 헤더 포맷팅 및 CABAC 컴포넌트(231)에 포워딩된다. 인루프 필터 컴포넌트(225)는 필터 제어 데이터에 기초하여 이러한 필터를 적용한다. 이러한 필터는 디블로킹 필터, 잡음 억제 필터, SAO 필터, 및 적응형 루프 필터를 포함할 수 있다. 이 예에 따르면, 이러한 필터는 공간/픽셀 영역(예를 들어, 재구성된 픽셀 블록) 또는 주파수 영역에서 적용될 수 있다.
인코더로서 동작할 때, 필터링된 재구성된 이미지 블록, 잔여 블록, 및/또는 예측 블록은, 전술한 바와 같이 나중에 움직임 추정에 사용하기 위해, 디코딩된 픽처 버퍼 컴포넌트(223)에 저장된다. 디코더로서 동작할 때, 디코딩된 픽처 버퍼 컴포넌트(223)는 재구성되어 필터링되는 블록을 출력 비디오 신호의 일부로서 저장하고 이를 디스플레이 쪽으로 포워딩한다
디코딩된 픽처 버퍼 컴포넌트(223)는 예측 블록, 잔여 블록, 및/또는 재구성된 이미지 블록을 저장할 수 있는 임의의 메모리 장치일 수 있다.
헤더 포맷팅 및 CABAC 컴포넌트(231)는 코덱 시스템(200)의 다양한 컴포넌트로부터 데이터를 수신하고, 디코더 쪽으로의 전송을 위해 이러한 데이터를 코딩된 비트스트림으로 인코딩한다. 구체적으로, 헤더 포맷팅 및 CABAC 컴포넌트(231)는 다양한 헤더를 생성하여 일반 제어 데이터 및 필터 제어 데이터와 같은 제어 데이터를 인코딩한다. 또한, 인트라 예측과 움직임 데이터를 포함하는 예측 데이터는 물론 양자화된 변환 계수 데이터 형태의 잔여 데이터가 모두 비트 스트림으로 인코딩된다. 최종 비트 스트림은 파티셔닝된 원래 비디오 신호(201)를 재구성하기 위해 디코더에 필요한 모든 정보를 포함한다. 이러한 정보는 또한 인트라 예측 모드 인덱스 테이블(코드워드 매핑 테이블이라고도 함), 다양한 블록에 대한 컨텍스트를 인코딩하는 정의, 가장 유망한 인트라-예측 모드의 지시, 및 파티션 정보의 지시 등을 포함할 수 있다. 이러한 데이터는 엔트로피 코딩을 이용하여 인코딩될 수 있다. 예를 들어, 이 정보는 콘텍스트 적응형 가변 길이 코딩(Context adaptive variable length coding, CAVLC), CABAC, 구문 기반의 컨텍스트 적응형 2진 산술 코딩(syntax-based context-adaptive binary arithmetic coding, SBAC), 확률 간격 파티셔닝 엔트로피(probability interval partitioning entropy, PIPE) 코딩, 또는 다른 엔트로피 코딩 기술을 이용하여 인코딩될 수 있다. 엔트로피 코딩 후에, 코딩된 비트 스트림은 다른 장치(예를 들어, 비디오 디코더)에 전송되거나 또는 나중의 전송이나 검색을 위해 보관될 수 있다.
본 개시는 CTU를 파티셔닝할 때 증가된 코딩 효율(예를 들어, 파일 크기 감소) 및/또는 감소된 코딩 복잡도(예를 들어, 감소된 프로세서 자원 사용)를 제공하기 위한 수정을 포함한다. 그러므로, 본 개시는 코덱 시스템(200)의 나머지 부분이 인코딩하거나 및/또는 디코딩하기 위한 파티셔닝된 비디오 신호(201)를 생성할 때 코덱 시스템(200)의 기능을 개선한다. 구체적으로, 파티셔닝된 비디오 신호(201)를 생성할 때, 대응하는 CB가 임계 값보다 큰 크기이면, 공용 코딩 트리가 CTU에서 루마 샘플과 크로마 샘플 모두를 분할하는 데 사용된다. 임계값 이하인 CB의 경우, 코딩 트리는 각각 임계값 이하의 루마 CB와 크로마 CB에 대해 상이한 파티션을 수행할 수 있는 루마 코딩 서브트리와 크로마 코딩 서브트리로 분할된다.
도 3은 루마 블록과 크로마 블록을 파티셔닝할 수 있는 예시적인 비디오 인코더(300)를 도시한 블록도이다. 비디오 인코더(300)는 코덱 시스템(200)의 인코딩 기능을 구현하거나 및/또는 연산 방법(100)의 단계 101, 단계 103, 단계 105, 단계 107 및/또는 단계 109를 구현하는 데 사용될 수 있다. 인코더(300)는 입력 비디오 신호를 파티셔닝함으로써, 분할된 비디오 신호(201)와 실질적으로 유사한 비디오 신호(301)를 파티셔닝한다. 그런 다음, 분할된 비디오 신호(301)는 인코더(300)의 컴포넌트에 의해 압축되어 비트 스트림으로 인코딩된다.
구체적으로, 파티셔닝된 비디오 신호(301)는 인트라 예측을 위해 인트라-픽처 예측 컴포넌트(317)에 포워딩된다. 인트라-픽처 예측 컴포넌트(317)는 인트라-픽처 추정 컴포넌트(215) 및 인트라-픽처 예측 컴포넌트(217)와 실질적으로 유사할 수 있다. 분할된 비디오 신호(301)는 또한 디코딩된 픽처 버퍼 컴포넌트(323) 내의 참조 블록에 기초하여 인터-예측을 위한 움직임 보상 컴포넌트(321)에 포워딩된다. 움직임 보상 컴포넌트(321)는 움직임 추정 컴포넌트(221) 및 움직임 보상 컴포넌트(219)와 실질적으로 유사할 수 있다. 인트라-픽처 예측 컴포넌트(317)와 움직임 보상 컴포넌트(321)로부터의 예측 블록과 잔여 블록은, 잔여 블록의 변환 및 양자화를 위해 변환 및 양자화 컴포넌트(313)에 포워딩된다. 변환 및 양자화 컴포넌트(313)는 변환 스케일링 및 양자화 컴포넌트(213)와 실질적으로 유사할 수 있다. 변환 및 양자화된 잔여 블록 및 대응하는 예측 블록은 (관련 제어 데이터와 함께) 비트 스트림으로의 코딩을 위해 엔트로피 코딩 컴포넌트(331)에 포워딩된다. 엔트로피 코딩 컴포넌트(331)는 헤더 포맷팅 및 CABAC 컴포넌트(231)와 실질적으로 유사할 수 있다.
변환 및 양자화된 잔여 블록 및/또는 대응하는 예측 블록은 또한 움직임 보상 컴포넌트(321)에 의해 사용될 참조 블록으로의 재구성을 위해 변환 및 양자화 컴포넌트(313)에서 역변환 및 양자화 컴포넌트(329)로 포워딩된다. 역변환 및 양자화 컴포넌트(329)는 스케일링 및 역변환 컴포넌트(229)와 실질적으로 유사할 수 있다. 상기 예에 따라, 인루프 필터 컴포넌트(325) 내의 인루프 필터는 잔여 블록 및/또는 재구성된 참조 블록에도 적용된다. 인루프 필터 컴포넌트(325)는 필터 제어 분석 컴포넌트(227) 및 인루프 필터 컴포넌트(225)와 실질적으로 유사할 수 있다. 인루프 필터 컴포넌트(325)는 인루프 필터 컴포넌트(225)에 대해 설명한 바와 같이 복수의 필터를 포함할 수 있다. 그런 다음, 필터링된 블록은 디코딩된 픽처 버퍼 컴포넌트(323)에 저장되어 움직임 보상 컴포넌트(321)에 의해 참조 블록으로 사용된다. 디코딩된 픽처 버퍼 컴포넌트(323)는 디코딩된 픽처 버퍼 컴포넌트(223)와 실질적으로 유사할 수 있다.
비디오 인코더(300)는 전술한 바와 같이 다른 컴포넌트를 통한 추가적인 압축을 위해 일련의 비디오 프레임을 수신하고 이를 파티셔닝된 비디오 신호(301)로 분할한다. 비디오 프레임은 슬라이스로 분할된다. 특히, 프레임의 일부가 단방향 인터-예측을 위해 움직임 보상 컴포넌트(321)에 의해 선택되고, 하나 이상의 P 슬라이스에 포함된다. 이 프레임의 다른 일부가 양방향 인터 예측을 위해 움직임 보상 컴포넌트(321)에 의해 선택되고, 하나 이상의 B 슬라이스에 포함된다. 프레임의 또 다른 부분이 인트라-예측을 위해 인트라-픽처 예측 컴포넌트(317)에 의해 선택되고, 하나 이상의 I 슬라이스에 포함된다. 개시된 메커니즘이 P 슬라이스와 B 슬라이스에 대해 연산 가능하지만, 다수의 예에서 I 슬라이스에 대해 코딩 효율이 가장 현저하게 증가한다. 따라서, 주로 I 슬라이스를 참조하여 개시된 메커니즘에 대해 설명한다.
비디오 프레임 내의 슬라이스가 CTU로 더 세분화된다. CTU가 루마 샘플과 크로마 샘플을 모두 포함한다. 그런 다음, 코딩 트리가 선택되어 각각의 CTU에 적용된다. CTU를 파티셔닝 목적을 위한 CTB라고 할 수 있다. CTB에 대한 코딩 트리는 선택된 파티셔닝 모드를 적용하여 CTB를 루마 CB로 분할한다. CTB에 대한 코딩 트리는 선택된 파티셔닝 모드를 적용하여 CTB를 크로마 CB로 분할한다. 루마 CB 및 대응하는 크로마 CB(예를 들어, Cr과 Cb 모두)는 각각 대응하는 구문 정보와 함께 CU에 포함된다. CU는, 압축을 위해 움직임 보상 컴포넌트(321), 인트라-픽처 예측 컴포넌트(317), 및/또는 변환 및 양자화 컴포넌트(313)에 포워딩되는 파티셔닝된 비디오 신호(301)를 구성한다.
개시된 메커니즘은 동일한 코딩 트리(본 명세서에서 공용 코딩 트리라고도 함)를 CTU 내의 모든 샘플에 적용한다. 하지만, 인코더 시스템(300)은 코딩 트리를 CTU에 적용하기 위한 임계값을 사용한다. 임계값을 초과하는 크기의 루마 코딩 블록과 크로마 코딩 블록은 동일한 코딩 트리로 파티셔닝되고, 따라서 동일한 분할 모드로 분할되어 동일한 파티션을 초래한다. 코딩 트리는 임계값 이하의 크기인 루마 블록과 크로마 코딩 블록에 대한 루마 코딩 서브트리와 크로마 코딩 서브트리로 각각 분할된다. 따라서, 루마 블록에 대한 최종 파티션은 임계값에 도달할 때까지 크로마 블록에 대한 최종 파티션과 동일하다. 그런 다음 파티션이 분기하여 코딩 서브트리로 하여금 루마 샘플과 크로마 샘플 사이의 차이를 고려하여 파티셔닝 모드를 선택하게 함으로써 코딩 효율성을 최적화할 수 있다. 이 방식으로, CTU 내의 모든 샘플에 대해 단일 코딩 트리를 사용하는 것에 비해 전반적인 코딩 효율이 높아진다. 또한, 공유된 코딩 트리는 (예를 들어, 비트 스트림의 구문에서) CTU에 대해 한 번만 계산되고 한 번만 저장된다. 서브트리는 (예를 들어, 서브트리들 간의 차이로서) 개별적으로 계산되고 개별적으로 저장된다. 하지만, 다른 서브트리에 대한 계산 복잡도와 인코딩 크기의 증가가 개별적인 코딩 트리에 대한 복잡도와 인코딩 크기보다 현저하게 작다. 그러므로, 개시된 메커니즘은, 최종 비트스트림의 파일 크기를 줄일 뿐만 아니라 복잡도도 감소시키고 그에 따라 다른 파티셔닝 메커니즘에 비해 프로세서 자원 사용을 감소시킴으로써 전체 코딩 효율을 증가시킨다.
도 4는 루마 블록과 로마 블록을 파티셔닝할 수 있는 예시적인 비디오 디코더(400)를 도시한 블록도이다. 비디오 디코더(400)는 코덱 시스템(200)의 디코딩 기능을 구현하거나 및/또는 연산 방법(100)의 단계 111, 단계 113, 단계 115, 및/또는 단계 117를 구현하는 데 사용될 수 있다. 디코더(400)는, 예를 들어 인코더(300)로부터 비트스트림을 수신하고, 최종 사용자에게 표시하기 위해 비트스트림에 기초하여 재구성되는 출력 비디오 신호를 생성한다.
비트 스트림은 엔트로피 디코딩 컴포넌트(433)에 의해 수신된다. 엔트로피 디코딩 컴포넌트(433)는 CAVLC, CABAC, SBAC, PIPE 코딩, 또는 다른 엔트로피 코딩 기술과 같은 엔트로피 디코딩 방식을 구현하도록 구성된다. 예를 들어, 엔트로피 디코딩 컴포넌트(433)는, 헤더 정보를 이용하여 비트스트림 내의 코드워드로서 인코딩된 추가 데이터를 해석할 컨텍스트를 제공할 수 있다. 디코딩된 정보는 비디오 신호를 디코딩하기 위해 원하는 어떠한 정보, 예컨대 일반 제어 데이터, 필터 제어 데이터, 파티션 정보, 움직임 데이터, 예측 데이터, 및 잔여 블록으로부터의 양자화된 변환 계수를 포함한다. 양자화된 변환 계수는 잔여 블록으로 재구성하기 위해 역변환 및 양자화 컴포넌트(429)에 포워딩된다. 역변환 및 양자화 컴포넌트(429)는 역변환 및 양자화 컴포넌트(329)와 유사할 수 있다.
재구성되는 잔여 블록 및/또는 예측 블록은 인트라 예측 연산에 기초하여 이미지 블록으로 재구성하기 위해 인트라-픽처 예측 컴포넌트(417)에 포워딩된다. 인트라-픽처 예측 컴포넌트(417)는 인트라-픽처 추정 컴포넌트(215) 및 인트파-픽처 예측 컴포넌트(217)와 유사할 수 있다. 구체적으로, 인트라-픽처 예측 컴포넌트(417)는 예측 모드를 이용하여 프레임에서 참조 블록을 찾고, 그 결과에 잔여 블록을 적용하여 인트라 예측된 이미지 블록을 재구성한다. 재구성되는 인트라 예측된 이미지 블록 및/또는 잔여 블록 및 대응하는 인터-예측 데이터는, 디코딩된 픽처 버퍼 컴포넌트(223) 및 루프 필터 컴포넌트(225)와 실질적으로 각각 유사할 수 있는 인루프 필터 컴포넌트(425)를 통해 디코딩된 픽처 버퍼 컴포넌트(423)에 포워딩된다. 인루프 필터 컴포넌트(425)는 재구성되는 이미지 블록, 잔여 블록, 및/또는 예측 블록을 필터링하고, 이러한 정보는 디코딩된 픽처 버퍼 컴포넌트(423)에 저장된다. 디코딩된 픽처 버퍼 컴포넌트(423)로부터의 재구성된 이미지 블록은 인터-예측을 위해 움직임 보상 컴포넌트(421)에 포워딩된다. 움직임 보상 컴포넌트(421)는 움직임 추정 컴포넌트(221) 및/또는 움직임 보상 컴포넌트(219)와 실질적으로 유사할 수 있다. 구체적으로, 움직임 보상 컴포넌트(421)는 참조 블록으로부터의 움직임 벡터를 이용하여 예측 블록을 생성하고, 이 결과에 잔여 블록을 적용하여 이미지 블록을 재구성한다. 결과적으로 재구성된 블록은, 인루프 필터 컴포넌트(425)를 통해, 디코딩된 픽처 버퍼 컴포넌트(423)에 포워딩될 수도 있다. 디코딩된 픽처 버퍼 컴포넌트(423)는 파티션 정보를 통해 프레임으로 재구성될 수 있는 추가적인 재구성된 이미지 블록을 계속 저장한다. 이러한 프레임은 시퀀스에 배치될 수도 있다. 이 시퀀스는 재구성된 출력 비디오 신호로서 디스플레이 쪽으로 출력된다.
비디오 인코더(300)와 마찬가지로, 비디오 디코더(400)는 임계값 이상의 크기를 가진 루마 블록과 크로마 블록에 대해 공용 코딩 트리를 적용하고, 크기가 임계값보다 작거나 같은 루마 블록과 크로마 블록에 대해 분할된 코딩 서브트리를 적용하여 파티셔닝을 수행한다. 구체적으로, 디코더(400)의 엔트로피 디코딩 컴포넌트(433)는 CTU에 대한 구문으로부터 공용 코딩 트리, 루마 코딩 서브트리, 및 크로마 코딩 서브트리를 획득한다. 각각의 CTU에 대해, 임계값에 도달한 루마 샘플을 루마 코딩 블록으로 분할하기 위해 공용 코딩 트리가 적용된다. 그런 다음, 루마 코딩 서브트리가 적용되어 루마 코딩 블록을 임계값보다 작거나 같은 크기로 세분화한다. 또한, 크로마 샘플을 임계값에 도달한 크로마 코딩 단위 블록으로 분할하기 위해 공용 코딩 트리가 적용된다. 그런 다음, 크로마 코딩 서브트리가 적용되어 크로마 코딩 블록을 임계값보다 작거나 같은 크기로 세분화한다. 동일한 코딩 트리와 크로마 코딩 서브트리는 Cr 샘플과 Cb 샘플에 모두 적용될 수 있다. 결과적인 코딩 블록은 CU에 결합되어 움직임 보상 컴포넌트(421), 인트라-픽처 예측 컴포넌트(417), 및/또는 역변환 및 양자화 컴포넌트(429)에 포워딩됨으로써, 출력 비디오 신호의 일부로서 사용자에게 표시하기 위한 최종 비디오 프레임으로 디코딩할 수 있다.
공용 코딩 트리와 분할 서브트리를 사용하면 비트 스트림의 파일 크기가 줄어들고, 따라서 인코더 시스템(300)에서와 같이 디코더 시스템(400)의 코딩 효율을 증가시킨다. 또한, 공용 코딩 트리가 임계값에 도달할 때까지 루마 샘플과 크로마 샘플 모두에 적용되기 때문에 복잡도 감소가 달성될 수 있고, 이는 별도의 코딩 트리를 적용하는 것보다 적은 처리 자원을 필요로 할 수 있다. 연산 방법(100), 코덱 시스템 (200), 인코더 시스템 (300), 및 디코더 시스템(400)에 사용되는 바와 같이, 이하의 도면을 참조하여 공용 코딩 트리와 분할 서브트리를 사용하는 분할 메커니즘에 대해 상세하게 설명한다.
도 5는 CTU를 루마 CB와 크로마 CB를 포함하는 코딩 유닛(CU)으로 파티셔닝하는 예시적인 메커니즘(500)을 도시한 개략도이다. 메커니즘(500)은 비디오 프레임을 파티셔닝할 때 연산 방법(100), 코덱 시스템(200), 인코더 시스템(300), 및/또는 디코더 시스템(400)에 의해 사용될 수 있다.
비디오 프레임이 수신되고 하나 이상의 슬라이스(540)로 분할된다. 슬라이스(540)가 동일한 프레임 내의 다른 영역과는 개별적으로 인코딩되는 프레임의 공간적으로 별개의 영역이다. 프레임의 영역은 대응하는 영역에 대한 할당된 코딩 메커니즘에 기초하여 슬라이스(540)에 할당된다. 단방향 인터 예측과 양방향 인터 예측을 위해 지정된 프레임 영역은 각각 P 슬라이스와 B 슬라이스(540)에 할당된다. 인트라 예측을 위해 지정된 프레임의 영역은 I 슬라이스(540)에 할당된다.
슬라이스(540)는 CTU(541)로 분할된다. CTU(541)는 완전한 코딩 트리(547)의 적용을 수용할 수 있는 가장 큰 픽셀 블록이다(예를 들어, 코딩 트리(547)는 일반적으로 CTU(541) 경계를 가로 질러 있지 않다). CTU(541) 크기가 구문에 의해 정의되고, 예를 들어 64 픽셀 × 64 픽셀, 32 픽셀 × 32 픽셀, 및 16 픽셀 × 16 픽셀 등이 될 수 있다. CTU (541)가 일부 예에서 직사각형일 수도 있다. CTU(541)는 루마 샘플(542)와 크로마 샘플(544)을 모두 포함한다. 루마 샘플(542)이 광 값이고, 크로마 샘플(544)은 색상 값이다. 크로마 샘플(544)은 Cb 값과 Cr 값을 모두 포함할 수 있다. 일부 컨텍스트에서 루마 샘플(542)과 크로마 샘플(544)을 각각 루마 데이터와 크로마 데이터라 할 수도 있다는 것을 유의해야 한다.
코딩 트리(547), 루마 코딩 서브트리(548), 및 크로마 코딩 서브트리(550)가 임계값(549)에 기초하여 루마 샘플(542)과 크로마 샘플(544)에 적용된다. 코딩 트리(547)가 자식 및/또는 부모 관계에 의해 관련된 결정 노드의 목록이다. 각각의 노드는 대응하는 샘플을 파티셔닝하는 분할 모드와 연관된다. 코딩 트리(547)의 제1 노드(예를 들어, 루트 노드)는 파티셔닝 모드를 적용하여 루마 샘플(542) 또는 크로마 샘플(544)을 대응하는 블록으로 파티셔닝한다. 하위 노드는 코딩 트리(547)의 가지에 도달할 때까지 블록의 대응하는 부분을 더 작은 블록으로 세분화하기 위해 추가적인 파티셔닝 모드를 재귀적으로 적용한다.
전술한 바와 같이, 코딩 트리(547)는 대응하는 블록이 임계값(549)에 의해 지시된 크기로 분할될 때까지 루마 샘플(542)과 크로마 샘플(544) 모두에 적용된다. 임계값(549)은 정의된 수치 크기 값이다. 예를 들어, 임계값(549)은 4096 픽셀, 2048 픽셀, 및 1024 픽셀 등일 수 있다. 또한, 임계값(549)은 일부 경우에 log2Cbsize와 같은 로그 기반의 값으로 표현될 수 있다. 여기서, log2Cbsize는 로그 2에 4096 픽셀과 동일한 코딩 블록 크기(예를 들어, 6 픽셀)를 곱한 것이다.
루마 코딩 서브트리(548)와 크로마 코딩 서브트리(550)는 임계값(549)보다 작거나 같은 크기로 분할되는 코딩 블록에 적용된다. 구체적으로, 루마 코딩 블록(543)과 크로마 코딩 블록(545)은 각각 CTU(541)에 대한 루마 샘플(542)과 크로마 샘플(544)의 부분집합을 포함한다. 따라서, 이러한 블록의 크기가 임계값 미만인 경우, 루마 코딩 서브트리(548)와 크로마 코딩 서브트리(550)는 루마 코딩 블록(543)과 크로마 코딩 블록(545)에 적용되어 루마 샘플(542)과 크로마 샘플(544)을 각각 추가로 분할한다. 코딩 서브트리가 코딩 트리(547)의 자식인 루트 노드를 가지고 있는 코딩 트리이다. 코딩 서브트리는 루마 샘플(542)에 적용하기 위한 루마 코딩 서브트리(548)와 크로마 샘플(544)에 적용하기 위한 크로마 코딩 서브트리(550)를 포함한다. 루마 코딩 서브트리(548)와 크로마 코딩 서브트리(550)는 서로 다를 수 있고, 이는 더 큰 파티션이 루마 샘플(542)과 크로마 샘플(544) 모두에 의해 공유되더라도 루마 샘플(542)과 크로마 샘플(544)에 대해 상이한 하위 파티션을 허용한다. 따라서, 루마 샘플(542)과 크로마 샘플(544)은 임계값(549)에 도달할 때까지 코딩 트리(547)에 따라 동일한 분할 모드에 의해 분할된다. 그 후, 코딩 트리(547)에 의해 생성된 루마 블록과 크로마 블록은 상이한 루마 코딩 서브트리(548)와 크로마 코딩 서브트리(550)에 기초하여 상이한 분할 모드에 적용된다.
코딩 트리(547)와 루마 코딩 서브트리(548)는 루마 샘플(542)을 루마 코딩 블록(543)으로 분할한다. 코딩 트리(547)와 크로마 코딩 서브트리(550)는 크로마 샘플(544)을 크로마 코딩 블록(545)으로 분할한다. 루마 코딩 블록(543)이 추가적인 압축을 위해 지정된 루마 샘플(542)의 파티셔닝된 그룹이다. 크로마 코딩 블록(545)이 추가적인 압축을 위해 지정된 크로마 샘플(544)의 파티셔닝된 그룹이다. 루마 코딩 블록(543) 및 관련된 크로마 코딩 블록(545)은 코딩 유닛(546)에 할당될 수 있다. 코딩 유닛(546)이 인터 예측 및/또는 인트라 예측을 통해 비디오 압축을 위해 포워딩되는 관련된 픽셀 샘플 값의 그룹이다. 슬라이스(540)가 I 슬라이스(540)인 경우, 코딩 유닛(546)은 인트라 예측을 위해 포워딩된다. 슬라이스(540)가 P 슬라이스(540) 또는 B 슬라이스(540)인 경우, 코딩 유닛(546)은 인터-예측을 위해 포워딩된다. 코딩 유닛(546)은 Cr 샘플 값을 가진 Cr 크로마 코딩 블록(551) 및 Cb 샘플 값을 가진 Cb 크로마 코딩 블록(552)을 포함하는 단일 루마 코딩 블록(543)과 크로마 코딩 블록(545)을 포함할 수 있다.
도 6은 코딩 트리(547) 및 CTU(541)와 실질적으로 유사할 수 있는 CTU에 적용되는 예시적인 코딩 트리(600)를 각각 도시한다. 따라서, 코딩 트리(600)는 비디오 프레임을 파티셔닝할 때 연산 방법(100), 코덱 시스템(200), 인코더 시스템(300), 디코더 시스템(400), 및/또는 메커니즘(500)에 의해 사용될 수 있다. 예를 들어, 코딩 트리(600)는 코딩 트리(547), 루마 코딩 서브트리(548), 및/또는 크로마 코딩 서브트리(550)를 구현할 수 있는 루마 및/또는 크로마 코딩 서브트리(614)를 가지고 있는 공용 코딩 트리(613)를 포함할 수 있다.
코딩 트리(600)가 CTU를 CU를 구성하는 CB로 분할하는 데 사용된다. 코딩 트리(600)는, 예시된 예에서 예를 들어 루트 노드(611), 제2 계층 노드(615), 제3 계층 노드(617), 및 제4 계층 노드(619)를 포함하는 복수의 노드를 포함한다. 노드의 4개의 계층이 도시되어 있지만 CTU 크기와 최소 블록 크기에 따라 어떠한 수의 계층도 사용될 수 있다는 것을 유의해야 한다. 노드(611, 615, 617, 619)가 도 6에 검은 점으로 표현되어 있다. 코딩 트리(600) 노드는, 본 명세서에서 사용된 바와 같이, 블록을 복수의 더 작은 픽셀의 블록으로 파티셔닝하기 위해 분할 모드가 적용될 수 있는 대응하는 크기의 픽셀의 블록이다. 도시된 예에서, 노드는 대응하는 블록을 4개의 작은 블록으로 분할하는 쿼드 트리 파티셔닝 모드를 사용한다. 이 과정은 사전 정의된 조건에 도달할 때까지 계속될 수 있다. 이러한 사전 정의된 조건은, 최소 블록 크기 및/또는 블록의 신호 특성(예를 들어, 주파수 영역에서 블록 내 데이터 계수)을 포함할 수 있다. 예를 들어, 루트 노드(611)에서, 블록, 이 경우 CTU을 더 작은 블록으로 파티셔닝하기 위해 분할 모드가 적용될 수 있다. 대응하는 파티션이 있는 분할 모드가 선택되어 다른 값을 가진 픽셀을 다른 블록으로 분리하고, 유사한 값을 가진 픽셀을 공용 블록으로 그룹화한다. 루트 노드(611)에서 파티셔닝된 블록은 제2 계층 노드(615)가 된다. 각각의 노드에서, 블록의 신호 특성과 블록 크기가 검사된다. 신호 특성이 블록이 상대적으로 유사한 값의 픽셀을 포함한다는 것을 나타내면, 블록은 더 이상 분할되지 않을 수 있다. 또한, 블록이 최소 크기에 도달하면, 블록은 더 이상 분할되지 않을 수 있다. 도시된 예에서, 제2 계층 노드(615) 중 3개의 노드가 대응하는 파티션으로 추가적인 파티셔닝 모드를 적용함으로써 더 분할되어 제3 계층 노드(617)가 된다. 이 예에서, 제2 계층 노드(615) 중 하나가 더 분할되지 않는데, 이는 예를 들어 블록 내의 샘플과 관련된 신호 특성(예를 들어, 주파수 영역에서 계수)이 블록이 상대적으로 유사한 값의 픽셀을 포함한다는 것을 나타내기 때문이다. 마찬가지로, 제3 계층 노드(617)는 이 예에서 제4 계층 노드(619)로 분할될 수 있다.
따라서, 코딩 트리(600)가 CTU에 적용될 때, 코딩 트리(600)는 대응하는 분할 모드로 루트 노드(611)를 전체 CTU에 적용하여 CTU를 블록으로 파티셔닝한다. 그런 다음, 코딩 트리(600)는 최소 블록 크기와 신호 특성 제약조건에 따라 각각의 블록 층을 더 작은 블록으로 재귀적으로 파티셔닝하기 위해 점진적으로 더 작은 크기의 노드(615, 617, 및/또는 619)를 적용한다. 쿼드 트리 분할 모드가 도 6에 도시되어 있지만, 다수의 분할 모드가 아래에서 설명되는 바와 같이 사용될 수 있다.
전술한 바와 같이, 루마 성분과 크로마 성분의 신호 특성은 크게 다를 수 있다. 따라서, 루마 블록에 대한 효율적인 분할 모드가, 동일한 위치에 있는 크로마 블록에 대한 효율적인 분할 모드와는 다를 수 있다. 이처럼, 공용 코딩 트리(613)는 노드(611, 615) 및 임계값보다 큰 대응하는 블록에 사용될 수 있다. 별도의 루마 및 크로마 코딩 서브트리(614)가 임계값보다 작거나 같은 노드 및 대응하는 블록을 분할하는 데 사용될 수 있고, 이 경우 제3 계층 노드(617)를 제4 계층 노드(619)로 분할하는 데 사용될 수 있다. 코딩 서브트리(614)는 공용 코딩 트리(613)의 자식인 루트 노드를 가지고 있는 코딩 트리이다. 공용 코딩 트리(613)는 실선으로 표시되고, 코딩 서브트리(614)는 점선으로 표시된다. 특히, 노드(611, 615)가 임계값보다 큰 크기와 연관되면, 노드(611, 615)는 공용 코딩 트리(613) 상에 위치한다. 노드(617, 619)가 임계값 이하인 경우, 노드(617, 619)는 코딩 서브트리(614) 상에 위치한다. 루마 코딩 서브트리(614)에 대해 선택된 노드 및 대응하는 분할 모드는 크로마 코딩 서브트리(614)를 결정할 때 다른 노드 및/또는 분할 모드로 대체될 수 있다. 이 경우, 루마 코딩 서브트리의 노드(617)는 크로마 코딩 서브트리의 노드(617)와는 다른 파티셔닝 모드를 사용할 수 있고, 결과적으로 상이한 코딩 서브트리(614)에 대한 상이한 노드(619)가 된다. 이를 통해 루마 코딩 블록과 크로마 코딩 블록은 서로 다른 작은 크기의 파티션을 사용하면서 유사한 전체 파티션을 유지할 수 있다.
도 7은 코딩 트리(547), 루마 코딩 서브트리(548), 크로마 코딩 서브트리 550), 코딩 트리(600), 공용 코딩 트리(613), 및 코딩 서브트리(614)와 같은 코딩 트리에 사용되는 분할 모드(700)의 예시적인 집합을 나타낸 개략도이다. 이처럼, 분할 모드 집합(700)은 연산 방법(100), 코덱 시스템(200), 인코더 시스템(300), 및/또는 디코더 시스템(400)을 동작시켜 비디오 프레임을 파티셔닝할 때 메커니즘(500)에 사용될 수 있다. 분할 모드(700)의 세트는 쿼드 트리(quad tree, QT)(701), 수직 이진 트리(vertical binary tree, VBT)(703), 수평 이진 트리(horizontal binary tree, HBT)(705), 수직 삼중 트리(vertical triple tree, VTT)(707) 및 수평 삼중 트리(horizontal triple tree, HTT)(709)를 포함한다. 코딩 트리의 각각의 노드(및 코딩 서브트리 내의 각각의 노드)는 분할 모드(700)의 집합 중 하나를 샘플의 블록에 적용한다. 그러므로, 코딩 트리/서브트리 내의 부모 노드가 샘플의 그룹에 파티셔닝 모드를 적용하여 2개, 또는 3개, 또는 4개의 블록을 생성한다(분할 모드에 따라 다름). 그런 다음, 자식 노드는 더 많은 파티셔닝 모드를 적용하여 부모 노드에 의해 생성된 블록을 더 분할한다. 이러한 자식 노드의 자식 노드는 코딩 트리/서브트리의 끝에 도달할 때까지 이러한 블록을 더 세분화할 수 있다. 특정 노드에 대한 분할 모드는 분할 모드(700)의 집합으로부터 (예를 들어, 인코더에서 RDO 과정에 의해) 선택되어 유사한 값을 가진 샘플을 순차적으로 그룹화함으로써, 인트라 예측 및/또는 인터 예측에 의한 효율적인 압축을 지원한다. 디코더에서, 코딩 트리, 서브트리, 및 분할 모드는, 예를 들어 슬라이스, CTU, 및/또는 대응하는 코딩 유닛에 대한 파라미터 집합 내의 구문에 저장된 바와 같이 비트스트림으로부터 결정될 수 있다.
QT(701)가 코딩 블록을 4개의 동일한 서브블록으로 분할하는 분할 모드이다. 따라서, QT(701)는 루마 샘플 블록을 동일한 크기의 4개의 블록의 루마 샘플로 분할한다. 또한, QT(701)가 크로마 샘플 블록을 동일한 크기의 4개의 더 작은 블록의 크로마 샘플로 분할한다.
VBT(703)가 코딩 블록을 동일한 크기의 2개의 서브블록으로 분할하는 분할 모드이다. 이러한 서브블록은 원래 코딩 블록의 높이, 및 너비의 1/2과 동일하다. 따라서, VBT(703)가 루마 샘플의 부모 블록을 루마 샘플의 부모 블록의 높이와 같고 너비가 1/2인 동일한 크기의 루마 샘플의 2개의 자식 블록으로 분할한다. 또한, VBT(703)가 크로마 샘플의 부모 블록을 크로마 샘플의 부모 블록의 높이와 같고 너비가 1/2인 동일한 크기의 크로마 샘플의 2개의 자식 블록으로 분할한다.
HBT(705)가 코딩 블록을 동일한 크기의 2개의 서브블록으로 분할하는 분할 모드이다. 이러한 서브 블록은 원래 코딩 블록의 너비와 동일하고 높이가 1/2이다. 따라서, HBT(705)가 루마 샘플의 부모 블록을 루마 샘플의 부모 블록과 동일한 너비와 높이의 1/2을 가진 동일한 크기의 2개의 자식 블록으로 분할한다. 또한, HBT(705)가 크로마 샘플의 부모 블록을 크로마 샘플의 부모 블록의 폭과 동일하고 높이가 1/2인 동일한 크기의 크로마 샘플의 2개의 자식 블록으로 분할한다.
VTT(707)가 코딩 블록을 3개의 서브블록으로 분할하는 분할 모드이다. 이러한 서브블록은 원래 코딩 블록과 동일한 높이를 가진다. 서브블록 중 하나가 원래 코딩 블록의 너비의 1/2을 가지고 있고, 서브블록 중 2개가 원래 코딩 블록의 폭의 1/4의 너비를 가지고 있다. 따라서, VTT(707)가 루마 샘플의 부모 블록을 루마 샘플의 부모 블록과 높이가 같고 루마 샘플의 부모 블록의 너비의 1/4, 1/2, 및 1/4을 가진 루마 샘플의 3개의 자식 블록으로 각각 분할한다. 또한, VTT(707)가 크로마 샘플의 부모 블록을 크로마 샘플의 부모 블록과 높이가 같고 크로마 샘플의 부모 블록의 너비의 1/4, 1/2, 및 1/4을 가진 크로마 샘플의 3개의 자식 블록으로 각각 분할한다.
HTT(709)가 코딩 블록을 3개의 서브블록으로 분할하는 분할 모드이다. 이러한 서브블록은 원래 코딩 블록과 동일한 너비를 가지고 있다. 이러한 서브 블록 중 하나의 높이가 원래 코딩 블록 높이의 1/2이고, 이러한 서브블록 중 2개의 높이가 원래 코딩 블록의 높이의 1/4이다. 따라서, HTT(709)가 루마 샘플의 부모 블록을 루마 샘플의 부모 블록과 너비가 같고 루마 샘플의 부모 블록의 높이의 1/4, 1/2, 및 1/4을 갖는 루마 샘플의 3개의 서브블록으로 각각 분할한다. 또한, HTT(709)가 크로마 샘플의 부모 블록을 크로마 샘플의 부모 블록과 동일한 너비와 크로마 샘플의 부모 블록 높이의 1/4, 1/2, 및 1/4을 가진 크로마 샘플의 3개의 서브블록으로 각각 분할한다.
도 8은 임계 크기, 예컨대 임계값(549)을 초과하는 코딩 트리 노드에 대해, 공용 코딩 트리, 예컨대 코딩 트리(547) 및/또는 코딩 트리(613)로, 그리고 임계 크기보다 작거나 같은 크기의 코딩 트리 노드에 대해, 분할된 서브트리, 예컨대 루마 코딩 서브트리(548), 크로마 코딩 서브트리(550), 및/또는 코딩 서브트리(614)로 CTU, 예컨대 CTU(541)를 파티셔닝하는 예시적인 방법(800)의 흐름도이다. 예시적인 방법(800)은 분할 모드(700)의 집합을 이용함으로써 메커니즘(500)을 구현하는 데 사용될 수 있다. 예시적인 방법(800)은 비디오 프레임으로부터의 샘플을 코딩 블록으로 파티셔닝하기 위해 연산 방법(100), 코덱 시스템(200), 인코더 시스템(300), 및/또는 디코더 시스템(400)에 사용될 수 있다.
예시적인 방법(800)이 디코더에 사용되는 경우, 선택적 단계 801이 일어날 수 있다. 일부 예에서, 공용 코딩 트리 및 분할된 루마/크로마 코딩 서브트리에 의한 파티셔닝이 선택적이다. 이러한 예에서, 인코더가 luma_chroma_separate 플래그를 인코딩할 수 있다. luma_chroma_separate 플래그는 루마 코딩 블록과 크로마 코딩 블록에 대해 별도의 코딩 서브트리가 사용된다는 것을 나타내도록 (예를 들어, 1로) 설정될 수 있다. luma_chroma_separate 플래그는 루마 및 크로마 블록이 별도의 코딩 서브트리를 사용하지 않는다는 것을 나타내도록 설정 해제될(예를 들어, 0으로 설정될) 수 있다. 따라서, 일부 예에서, 디코더는 별도의 코딩 서브트리가 파티셔닝에 사용되어야 하는지 여부를 판정하기 위해 비트스트림으로부터 luma_chroma_separate 플래그를 획득하거나/수신할 수 있다. luma_chroma_separate 플래그가 루마 코딩 서브트리와 크로마 코딩 서브트리 간의 분할을 나타내는 경우, 디코더는 luma_chroma_separate 플래그의 값에 기초하여 상이한 코딩 서브트리로 루마 샘플과 크로마 샘플을 파티셔닝하기 위해 준비할 수 있다. 다른 예에서, 예시적인 방법(800)이 I 슬라이스 내의 모든 CTU에 적용된다. 이러한 예에서, 코딩 트리 유닛이 비디오 프레임 내의 I 슬라이스에 포함될 때, 루마 샘플과 크로마 샘플은 상이한 코딩 서브트리에 의해 파티셔닝된다. 이러한 경우, 이러한 예에서 분할 서브트리의 사용이 암시적이므로, 단계 801이 생략될 수 있다.
단계 803에서, 코딩 트리 유닛이 획득된다. 설명한 바와 같이, 코딩 트리 유닛은 루마 샘플과 크로마 샘플을 모두 포함한다. 인코더에서 연산할 때, 코딩 트리 유닛은 메모리로부터 획득되거나 및/또는 비디오 프레임의 슬라이스로부터 획득된다. 디코더에서 연산할 때, 코딩 트리 유닛은 인코더로부터 수신된 비트 스트림으로부터 획득된다.
단계 805에서, 루마 샘플과 크로마 샘플은 임계값을 초과하는 크기를 가진 코딩 트리 노드(예를 들어, 제1 코딩 트리 노드)를 위한 공용 코딩 트리에 따라 파티셔닝된다. 코딩 트리 노드 크기는 대응하는 코딩 트리 노드에서 세분화된 현재 코딩 블록의 크기이다. 임계값은 구문으로 저장되거나 또는 미리 정의될 수 있다. 예를 들어, 임계값은 4096 픽셀, 2048 픽셀, 1024 픽셀 등일 수 있다. 단계 805가 논의의 명확성을 위해 단계 807과 단계 809로부터 분할된다는 것을 유의해야 한다. 예시적인 구현에서, 단계 805와 단계 807이 루마 샘플에 대해 수행되고, 그런 다음 단계 805와 단계 809가 크로마 샘플에 대해 수행된다. 그러므로, 설명을 명확하게 하기 위해 단계 순서가 포함되고, 제한적인 것으로 간주해서는 안 된다.
단계 807에서, 임계치보다 작거나 같은 크기를 가진 코딩 트리 노드(예를 들어, 제2 코딩 트리 노드)와 연관된 루마 샘플은 루마 코딩 서브트리로 파티셔닝된다. 단계 809에서, 임계치보다 작거나 같은 크기를 가진 코딩 트리 노드(예를 들어, 제3 코딩 트리 노드)와 연관된 크로마 샘플은 크로마 코딩 서브트리로 파티셔닝된다. 그러므로, 루마 블록과 크로마 블록에 대한 전체 파티션(예를 들어, 더 큰/부모 파티션)은 단계 805에서 공용 코딩 트리를 사용하는 것으로 인해 유사하다. 하지만, 루마 코딩 블록과 크로마 블록에 대한 더 작은 파티션/자식 파티션은 다를 수 있고, 크로마 블록은 코딩 효율성을 높이기 위해 루마 신호와 크로마 신호의 차이에 맞게 조정될 수 있다. 이는 단계 807의 루마 코딩 서브트리와 단계 809의 크로마 코딩 서브트리 간의 차이 때문이다. 크로마 샘플은 Cb 샘플과 Cr 샘플모두를 포함할 수 있다는 것을 유의해야 한다
Cb 샘플과 Cr 샘플은 단계 809에서 공용 크로마 코딩 서브트리에 의해 파티셔닝된다.
선택적 단계 811이 인코더 또는 디코더에서 사용될 수 있다. 예시적인 방법(800)이 인코더 상에서 연산할 때, 파티셔닝으로 인한 루마 코딩 블록과 크로마 코딩 블록은 예를 들어 코딩 단위로서 압축되고, 비트 스트림으로 인코딩된다. 코딩 트리, 루마 코딩 서브트리, 및 크로마 코딩 서브트리도 비트 스트림으로 인코딩된다. 예를 들어, 공용 코딩 트리는 TREE_L_C로서 비트 스트림으로 코딩될 수 있고, 루마 코딩 서브트리는 TREE_L로서 비트스트림으로 코딩될 수 있으며, 크로마 코딩 서브트리는 TREE_C로서 비트 스트림으로 코딩될 수 있다. 그런 다음, 비트 스트림은 비디오 디코더에서 표시하기 위한 크로마 코딩 블록과 루마 코딩 블록의 재구성을 지원하기 위해 디코더 쪽으로 전송된다.
또한, 별도의 루마 코딩 서브트리와 크로마 코딩 서브트리가 인코더의 재량에 따라 선택되는 예에서, 인코더는 luma_chroma_separate 플래그를 (구문으로서) 비트스트림으로 인코딩하여 단계 811에서 루마 코딩 서브트리와 크로마 코딩 서브트리 간의 분할을 디코더에 지시한다. 분할된 서브트리가 I 슬라이스로부터의 모든 CTU에 사용될 때, luma_chroma_separate 플래그는 생략될 수 있다.
예시적인 방법(800)이 디코더에서 사용될 때, 디코더는 단계 811에서 (예를 들어, 인터-예측의 인트라-예측을 통해) 루마 블록과 크로마 블록을 재구성한다. 그런 다음, 디코딩된 블록은 공용 코딩 트리, 루마 코딩 서브트리, 및 크로마 코딩 서브트리에 기초하여 비디오 프레임의 슬라이스에 배열될 수 있다. 슬라이스는 비디오 프레임에 배열될 수 있고, 그런 다음 비디오 프레임은 비디오 시퀀스에 포함될 수 있다. 그런 다음, 비디오 프레임/비디오 시퀀스는 최종 사용자에게 표시하기 위해 디스플레이에 포워딩된다.
아래의 표 1은 분할 코딩 서브트리의 사용이 I 슬라이스 CTU에 대해 암시적일 때 예시적인 방법(800)을 구현하는 구문의 예이다.
(표 1)
Figure pct00001
Coding_tree_unit은 나머지 코드가 특정 코딩 트리 유닛에 고유하다는 것을 나타낸다. 슬라이스의 유형(type_slice)이 I 슬라이스이고 qtbtt_dual_tree_intra_flag가 설정된 경우, 코딩 트리 유닛은 dual_tree_implicit_qt_split 함수가 나타내는 바와 같이 묵시적으로 분할 코딩 트리를 사용한다. qtbtt_dual_tree_intra_flag는, I 슬라이스에 대해, 각각의 CTU가 묵시적 쿼드트리 분할을 사용하여 64 × 64 루마 샘플을 가지고 있는 코딩 유닛으로 분할된다는 것과, 이러한 코딩 유닛이 루마 및 크로마에 대한 2개의 별도의 coding_quadtree 구문 구조의 루트라는 것을 지정하기 위해 설정된다. dual_tree_implicit_qt_split 함수는, log2Cbsize가 6보다 클 때(예를 들어, 4096 픽셀), 공용 루마/크로마 코딩 트리(TREE_L_C 상태로 표시됨)를 생성하는 함수를 사용한다. 구체적으로, 코딩 블록 X가 자식 코딩 블록으로 분할된다. 코딩 블록 X는 log2CbSize로 표시되는 코딩 블록 X의 크기에 기초하여 위치하는 왼쪽 상단 샘플(x0, y0)과 오른쪽 하단 샘플(x1, y1)의 위치에 기초하여 분할된니다. 자식 코딩 블록은 크기가 코딩 블록 X의 크기의 1/2인 log2CbSize-1일 수 있다. 이는 코딩 블록 크기가 log2로 표현되므로 log2CbSize-1이 log2CbSize의 크기의 1/2이기 때문이다. dual_tree_implicit_qt_split 함수는 조건 검사에 따라, 1회 ~ 4회 호출될 수 있는 재귀 함수이고, 결과적으로 1 ~ 4 개의 자식 코딩 블록이 생성됩니다. dual_tree_implicit_qt_split 함수는 자식 블록의 크기(log2CbSize -1) 및 왼쪽 상단 샘플(x0, y0)의 크기에 기초하여 먼저 호출되어 왼쪽 상단 자식 코딩 블록을 생성한다. 오른쪽 하단 샘플 x1의 수평 위치가 픽처 내에 있으면, pic_width_in_luma_samples로 표시된 바와 같이, dual_tree_implicit_qt_split 함수가 자식 블록의 크기(log2CbSize -1) 및 오른쪽 상단 샘플(x1, y0)의 크기에 기초하여 호출되어 오른쪽 상단 자식 코딩 블록을 생성한다. 왼쪽 하단 샘플 y1의 수직 위치가 픽처 내에 있으면, pic_height_in_luma_samples로 표시된 바와 같이, dual_tree_implicit_qt_split 함수가 자식 블록의 크기(log2CbSize -1) 및 하단 왼쪽 샘플(x0, y1)의 크기에 기초하여 호출되어 왼쪽 하단 자식 코딩 블록을 생성한다. 오른쪽 하단 샘플 x1의 수평 위치와 왼쪽 하단 샘플 y1의 수직 위치가 픽처 내에 있으면, pic_width_in_luma_samples 및 pic_height_in_luma_samples로 표시된 바와 같이, dual_tree_implicit_qt_split 함수가 자식 블록의 크기(log2CbSize -1) 및 오른쪽 하단 샘플(x1, y1)에 기초하여 호출되어 오른쪽 하단 자식 코딩 블록을 생성한다. 예를 들어, 픽처의 오른쪽 경계 또는 아래쪽 경계 근처의 코딩 블록 X의 위치로 인해 오른쪽 아래 샘플(x1, y1)이 픽처 외부에서 선택되면, 4개 미만의 자식 코딩 블록(예를 들어, 2개의 자식 코딩 블록)이 생성된다. 그렇지 않으면, 4개의 자식 코딩 블록이 생성된다. dual_tree_implicit_qt_split 함수는 부모 코딩 블록의 cqtDepth에 기초하여 생성된 각각의 자식 코딩 블록에 대한 쿼드트리 깊이(cqtDepth)를 증가시켜 코딩 트리의 현재 깊이를 추적한다.
log2Cbsize(코딩 블록 X의 크기)가 6보다 크지 않으면(예를 들어, 6 이외의 값), 루마 코딩 서브트리(DUAL_TREE_LUMA)가 루마 블록에 사용되고, 크로마 코딩 서브트리(DUAL_TREE_CHROMA)가 크로마 블록에 사용된다. 구체적으로, 좌측 상단 샘플(x0, y0), 코딩 블록 크기(log2CbSize), 및 대응하는 루마 코딩 서브트리 또는 크로마 코딩 서브트리(DUAL_TREE_LUMA 또는 DUAL_TREE_CHROMA)에 기초하여 코딩 블록 X를 각각 분할하는 coding_quadtree 기능이 호출된다. coding_quadtree 함수는 또한 전술한 바와 같이 cqtDepth 값으로 코딩 블록 깊이를 추적한다.
아래의 표 2는 분할 코딩 서브트리의 사용이 인코더에 대해 자유 재량으로 결정할 수 있을 때 예시적인 방법(800)을 구현하는 구문의 예이다.
(표 2)
Figure pct00002
표 2에서, coding_tree_node(x, y, w, h, tree_status)가 현재 노드의 파티셔닝 정보를 설명하는 구문 구조이다. 여기서, x와 y는 각각 현재 노드의 왼쪽 상단 모서리의 좌표이고, w와 h는 각각 현재 노드의 너비와 높이이며, tree_status는 현재 노드의 트리 상태이다. 다른 예로서 w와 h가 log2(w)와 log2(h)로 대체될 수도 있다는 것을 유의해야 한다. 유사하게, coding_unit(x, y, w, h, tree_status)이 예측 정보와 변환 정보 등과 같은 코딩 유닛 정보를 기술하는 구문 구조이다. 오른쪽 열에서, ae(v)는 구문 요소가 CABAC(Context-Adaptive Binary Arithmetic Coding)에 의해 코딩된다는 것을 나타낸다.
현재 노드의 tree_status가 TREE_L_C이고 또한 노드가 임계값 T보다 크면, 노드는 TREE_L_C 상태를 사용한다. 이 경우, luma_chorma_separate 플래그는 비트 스트림에 제공되지 않고, 그 값이 0으로 도출된다. 현재 노드의 tree_status가 TREE_L_C이고 또한 노드가 임계값 T보다 크면, luma_chroma_separate 플래그가 비트 스트림으로 시그널링된다. tree_status가 TREE_L_C가 아니면, luma_chroma_separate 플래그는 0으로 도출된다.
luma_chroma_separate가 0이면, (구문 요소(split_mode)에 의해 지시된 바와 같이) 하나의 분할 모드만이 파싱된다. 분할 모드에 따라, 노드는 CU로 결정되거나 또는 N개의 자식 노드로 분할한다. 여기서, derive_child_node(split_mode, N, x_c, y_c, w_c, h_c)는 분할 모드에 기초하여 N개의 자식 노드의 좌표, 너비, 및 높이를 도출하는 처리를 나타낸다. 자식 노드는 현재 노드의 트리 상태를 상속한다.
luma_chroma_separate가 1이면, 현재 노드에서의 루마 블록과 크로마 블록에 대한 파티셔닝이 분리되고, (구문 요소(split_mode 및 split_mode_2nd)에 의해 지시된 바와 같이) 2개의 분할 모드가 파싱된다. 하나의 분할 모드가 루마 블록을 파티셔닝하는 데 사용되고, 다른 하나가 2개의 크로마 블록을 파티셔닝하는 데 사용된다. 루마 블록의 자식 노드의 트리 상태가 TREE_L로 수정되고, 크로마 블록의 자식 노드의 트리 상태가 TREE_C로 수정된다. 트리 상태는 또한 하나의 루마 블록 및/또는 2개의 크로마 블록이 코딩 유닛에 포함되는지 여부를 나타내기 위해 코딩 유닛에 전달된다.
도 9는 예시적인 비디오 코딩 장치(900)의 개략도이다. 비디오 코딩 장치(900)는 본 명세서에 설명된 바와 같이 개시된 예/실시예를 구현하는 데 적합하다. 비디오 코딩 장치(900)는 다운스트림 포트(920), 업스트림 포트(950), 및/또는 네트워크를 통해 업스트림 및/또는 다운스트림 데이터를 통신하기 위한 송신기 및/또는 수신기를 포함하는 송수신기 유닛(Tx/Rx)(910)을 포함한다. 비디오 코딩 장치(900)는 또한 데이터를 처리하기 위한 로직 유닛 및/또는 중앙처리장치(central processing unit, CPU)를 포함하는 프로세서(930), 및 데이터를 저장하기 위한 메모리(932)를 포함한다. 비디오 코딩 장치(900)는 또한 광 또는 무선 통신 네트워크를 통해 데이터의 통신을 위한 업스트림 포트(950) 및/또는 다운스트림 포트(920)에 연결된 광전(optical-to-electrical, OE) 컴포넌트, 전광(electrical-to-optical, EO) 컴포넌트, 및/또는 무선 통신 컴포넌트를 포함할 수 있다. 비디오 코딩 장치(900)는 사용자와 데이터를 통신하기 위한 입력 및/또는 출력(I/O) 장치(960)를 더 포함할 수 있다. I/O 장치(960)는 비디오 데이터를 표시하기 위한 디스플레이, 오디오 데이터를 출력하기 위한 스피커 등과 같은 출력 장치를 포함할 수 있다. I/O 장치(960)는 또한 키보드, 마우스, 트랙볼 등과 같은 입력 장치 및/또는 이러한 출력 장치와 상호 작용하기 위한 대응하는 인터페이스를 포함할 수 있다.
프로세서(930)는 하드웨어와 소프트웨어에 의해 구현된다. 프로세서(930)는 하나 이상의 CPU 칩, 코어(예를 들어, 멀티 코어 프로세서), 필드 프로그래머블 게이트 어레이(field-programmable gate array, FPGA), 주문형 반도체(application specific integrated circuit, ASIC), 및 디지털 신호 프로세서(digital signal processor, DSP)로서 구현될 수 있다. 프로세서(930)는 다운스트림 포트(920), Tx/Rx(910), 업스트림 포트(950), 및 메모리(932)와 통신한다. 프로세서(930)는 코딩 모듈(914)을 포함한다. 코딩 모듈(914)은 전술한 개시된 실시예, 예컨대 코딩 트리(600), 분할 모드(700)의 집합, 및/또는 본 명세서에 설명된 다른 어떤 방법/메커니즘을 사용하는 방법(100, 800), 및 메커니즘(500)을 구현한다. 또한, 코딩 모듈(914)은 코덱 시스템(200), 인코더(300), 및/또는 디코더(400)를 구현할 수 있다. 예를 들어, 코딩 모듈(914)은 코딩 트리 유닛을 파티셔닝하는 데 사용될 수 있다. 구체적으로, 코딩 모듈(914)은 임계값보다 큰 블록 내의 루마 샘플과 크로마 샘플에 공용 코딩 트리를 적용할 수 있다. 코딩 모듈(914)은 상이한 루마 코딩 서브트리와 크로마 코딩 서브트리를 크기가 임계치보다 작거나 같은 루마 블록과 크로마 블록에 각각 적용할 수도 있다. 따라서, 코딩 모듈(914)은 비디오 코딩 장치(900)로 하여금 더 적은 처리 자원을 이용하여 더 큰 코딩 효율로 연산하게 하거나 및/또는 코딩 트리 유닛을 파티셔닝하게 한다. 이와 같이, 코딩 모듈(914)은 비디오 코딩 장치(900)의 기능을 개선할 뿐만 아니라 비디오 코딩 기술에 고유한 문제를 다룬다. 또한, 코딩 모듈(914)은 비디오 코딩 장치(900)의 다른 상태로의 변환에 영향을 미친다. 대안적으로, 코딩 모듈(914)은 메모리(932)에 저장되고 프로세서(930)에 의해 실행되는 명령으로서(예를 들어, 비일시적 매체에 저장된 컴퓨터 프로그램 제품으로서) 구현될 수 있다.
메모리(932)는 하나 이상의 메모리 유형, 예컨대 디스크, 테이프 드라이브, 솔리드 스테이트 드라이브(solid-state drive), 읽기 전용 메모리(read only memory, ROM), 랜덤 액세스 메모리(random access memory, RAM), 플래시 메모리, TCAM(ternary content-addressable memory), 정적 랜덤 액세스 메모리(static random-access memory, SRAM) 등을 포함한다. 메모리(932)는 오버플로우 데이터 저장 장치로서, 실행을 위해 이러한 프로그램이 선택될 때 프로그램을 저장하고, 프로그램 실행 중에 판독된 명령 및 데이터를 저장하는 데 사용될 수 있다.
도 10은 임계 크기를 초과하는 블록을 코딩하기 위한 공용 코딩 트리 및 임계 크기보다 작거나 같은 크기의 코딩 블록에 대한 분할 서브트리로 CTU를 파티셔닝하기 위한 예시적인 시스템(1000)의 개략도이다. 예시적인 시스템(1000)은 연산 방법(100), 메커니즘(500), 예시적인 방법(800), 코덱 시스템(200), 인코더(300), 디코더(400), 및/또는 비디오 코딩 장치(900)를 구현할 수 있는 비디오 인코더(1002)와 비디오 디코더(1010)를 포함한다. 또한, 비디오 인코더(1002)와 비디오 디코더(1010)는 분할 모드(700)의 집합을 이용하여 코딩 트리(613)와 코딩 서브트리(614)로 파티셔닝을 수행할 수 있다.
비디오 인코더(1002)는 코딩 트리 노드를 포함하는 코딩 트리 유닛을 획득하기 위한 페칭 모듈(fetching module)(1001)을 포함한다. 비디오 코딩 장치는 제1 코딩 트리 노드가 임계값을 초과할 때 공용 코딩 트리로 루마 샘플과 크로마 샘플을 분할하기 위한 공용 트리 파티셔닝 모듈(1003)을 더 포함한다. 비디오 코딩 장치는 제2 코딩 트리 노드의 크기가 임계값보다 작거나 같을 때 루마 코딩 서브트리가 있는 코딩 트리 유닛의 제2 코딩 트리 노드에서 루마 샘플을 분할하기 위한 루마 코딩 서브트리 파티셔닝 모듈(1005)을 더 포함한다. 비디오 코딩 장치는, 제2 코딩 트리 노드의 크기가 임계값보다 작거나 같을 때, 크로마 코딩 서브트리를 가지고 있는 코딩 트리 유닛의 제2 코딩 트리 노드에서 크로마 샘플을 분할하기 위한 크로마 코딩 서브트리 파티셔닝 모듈(1007)을 더 포함한다. 전술한 바와 같이, 루마 코딩 서브트리는 상이한 파티셔닝을 포함할 수 있으므로 크로마 코딩 서브트리와는 다른 파티셔닝 모드를 포함할 수 있다. 크로마 샘플과 루마 샘플은 공용 코딩 트리, 루마 코딩 서브트리, 및 크로마 코딩 서브트리에 기초하여 비트 스트림으로 인코딩된다. 비디오 인코더(1002)는, 비디오 디코더(1010)에서 표시하기 위한 크로마 샘플과 루마 샘플의 재구성을 지원하기 위해 비트스트림을 전송하는 송신기(1009)를 더 포함한다.
비디오 디코더(1010)는 루마 데이터와 크로마 데이터를 포함하는 코딩 트리 유닛을 포함하는 비트스트림을 수신하기 위한 수신기(1017)를 포함한다. 비디오 디코더(1010)는, 코딩 트리 노드를 포함하는 코딩 트리 유닛을 획득하기 위한 페칭 모듈(1011)을 더 포함한다. 비디오 디코더(1010)는, 제1 코딩 트리 노드가 임계값을 초과할 때 공용 코딩 트리로 루마 데이터와 크로마 데이터를 분할하기 위한 공용 트리 파티셔닝 모듈(1013)을 더 포함한다. 비디오 디코더(1010)는, 제2 코딩 트리 노드의 크기가 임계값보다 작거나 같을 때, 코딩 트리 유닛의 제2 코딩 트리 노드에서 루마 데이터를 루마 코딩 서브트리로 분할하기 위한 루마 서브트리 파티셔닝 모듈(1015)을 더 포함한다. 비디오 디코더(1010)는, 제2 코딩 트리 노드의 크기가 임계값보다 작거나 같을 때, 코딩 트리 유닛의 제2 코딩 트리 노드에서 크로마 데이터를 크로마 코딩 서브트리로 분할하기 위한 크로마 서브트리 파티셔닝 모듈(1019)을 더 포함한다. 전술한 바와 같이, 루마 코딩 서브트리는 상이한 파티셔닝, 따라서 크로마 코딩 서브트리와는 다른 분할 모드을 포함한다. 그런 다음, 비디오 디코더(1010)는 공용 코딩 트리, 루마 코딩 서브트리, 및 크로마 코딩 서브트리에 기초하여 크로마 데이터와 루마 데이터를 비디오 프레임의 슬라이스에 재구성할 수 있다. 비디오 디코더(1010)는 디스플레이쪽으로 비디오 프레임을 포워딩할 수도 있다.
도 11은 임계값 크기, 예컨대 임계값(549)을 초과하는 CB에 대해, 공용 코딩 트리, 예컨대 코딩 트리(547) 및/또는 코딩 트리(613)로, 그리고 임계값 크기보다 작거나 같은 크기의 CB에 대해, 분할된 서브트리, 예컨대 루마 코딩 서브트리(548), 크로마 코딩 서브트리(550), 및/또는 코딩 서브트리(614)로 CTU, 예컨대 CTU(541)를 파티셔닝하는 예시적인 방법(1100)의 흐름도이다. 예시적인 방법(1100)은 분할 모드(700)의 집합을 사용하여 메커니즘(500)을 구현하는 데 사용될 수 있다. 예시적인 방법(1100)은 비디오 프레임으로부터의 샘플을 코딩 블록에 파티셔닝하기 위해 연산 방법(100), 코덱 시스템(200), 인코더 시스템(300), 및/또는 디코더 시스템(400)에 사용될 수 있다.
예시적인 방법(1100)은 코딩 트리 유닛이 단계 1101에서 I 슬라이스 내에 있다고 결정하는 단계를 포함한다. 예를 들어, 디코더가 루마 샘플과 크로마 샘플을 포함하는 코딩 트리 유닛을 루마 블록과 크로마 블록으로 각각 파티셔닝하는 데 적용될 분할 모드에 대한 코딩 트리, 루마 코딩 서브트리, 및/또는 크로마 코딩 서브트리를 파싱할 수 있다. 코딩 트리 유닛이 비디오 프레임의 I 슬라이스에 포함되면, 예시적인 방법(1100)이 적용될 수 있다.
단계 1103에서, 코딩 트리의 제1 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 제1 코딩 트리 노드와 연관된 루마 샘플의 코딩 블록과 크로마 샘플의 코딩 블록은 공용 코딩 트리에 의해 분할된다. 예를 들어, 임계값은 4096 루마 샘플 또는 2048 루마 샘플일 수 있다. 분할 모드는 코딩 트리 노드가 임계 값보다 큰 크기를 가지고 있을 때의 쿼드트리 분할일 수 있다. 일부 예에서, 분할 모드는 코딩 트리 노드가 임계치보다 큰 크기를 가지고 있을 때 묵시적으로 시그널링될 수 있다.
단계 1107에서, 코딩 트리의 제2 코딩 트리 노드가 임계값보다 작거나 같은 크기를 가지고 있을 때, 제2 코딩 트리 노드와 연관된 코딩 트리 유닛의 루마 샘플의 코딩 블록은 루마 코딩 트리에 따라 분할될 수 있다. 일부 컨텍스트에서 루마 코딩 서브트리를 루마 코딩 트리라고도 할 수 있다. 또한, 코딩 트리의 제2 코딩 트리 노드가 임계값보다 작거나 같은 크기를 가지고 있으면, 제2 코딩 트리 노드와 연관된 코딩 트리 유닛의 크로마 샘플의 코딩 블록은 크로마 코딩 트리에 따라 분할될 수 있다. YUV4:2:0 데이터의 경우, 64 × 64 루마 코딩 블록이 32 × 32 Cb 크로마 코딩 블록 및 32 × 32 Cr 크로마 코딩 블록에 대응한다는 것을 유의해야 한다. 하지만, 코딩 트리 노드의 크기를 표시할 때, 코딩 트리 노드는 루마 샘플을 이용하여 측정될 수 있다. 예를 들어, 2개의 32 × 32 크로마 블록만을 포함하는 코딩 트리 노드는 64 × 64 코딩 트리 노드의 크기로서 측정될 수 있다.
예시적인 방법(1100)은 다음 구문에 따라 구현될 수 있다.
dual_tree_implicit_qt_split( x0, y0, log2CbSize, cqtDepth ) {
if( log2CbSize > 6 ) {
x1 = x0 + ( 1 << ( log2CbSize - 1 ) )
y1 = y0 + ( 1 << ( log2CbSize - 1 ) )
dual_tree_implicit_qt_split( x0, y0, log2CbSize - 1, cqtDepth + 1 )
if( x1 < pic_width_in_luma_samples )
dual_tree_implicit_qt_split( x1, y0, log2CbSize - 1, cqtDepth + 1 )
if( y1 < pic_height_in_luma_samples )
dual_tree_implicit_qt_split( x0, y1, log2CbSize - 1, cqtDepth + 1 )
if( x1 < pic_width_in_luma_samples && y1 < pic_height_in_luma_samples )
dual_tree_implicit_qt_split( x1, y1, log2CbSize - 1, cqtDepth + 1 )
} else {
coding_quadtree( x0, y0, log2CbSize, cqtDepth, DUAL_TREE_LUMA )
coding_quadtree( x0, y0, log2CbSize, cqtDepth, DUAL_TREE_CHROMA )
}
}
임계값이 log2CbSize > 6으로 표시될 때, DUAL_TREE_LUMA는 루마 코딩 트리를 나타내고, DUAL_TREE_CHROMA는 크로마 코딩 트리를 나타낸다.
중간 구성 요소가 존재하지 않으면, 제1 구성 요소와 제2 구성 요소 사이의 선, 또는 트레이스, 또는 다른 매체를 제외하고, 제1 구성 요소가 제2 구성 요소에 직접 연결된다. 제1 구성 요소와 제2 구성 요소 사이에 라인, 또는 트레이스, 또는 다른 매체 이외에 중간의 구성 요소가 있을 때 제1 구성 요소가 제2 구성 요소에 간접적으로 연결된다. "연결"이라는 용어와 그 변형이 직접 연결과 간접 연결을 모두 포함한다. "약"이라는 용어의 사용은 달리 명시하지 않으면 후속 숫자의 ±10 %를 포함하는 범위를 의미한다.
여러 실시예가 본 개시에서 제공되었지만, 개시된 시스템과 방법이 본 개시의 사상 또는 범위를 벗어나지 않고 많은 다른 구체적인 형태로 구현될 수 있다고 이해할 수 있을 것이다. 본 예는 예시적인 것으로 제한적이지 않은 것으로 간주되어야 하고, 이러한 의도는 본 명세서에서 제공된 세부사항에 한정되지 않을 것이다. 예를 들어, 다양한 요소 또는 구성 요소는 다른 시스템에 결합되거나 통합될 수 있거나 또는 소정의 특징이 생략될 수 있거나 또는 구현되지 않을 수 있다.
또한, 다양한 실시예에서 별개인 것으로 또는 분리된 것으로 설명되거나 또는 도시된 기술, 시스템, 서브시스템, 및 방법이 본 개시의 보호범위에서 벗어나지 않고도 다른 시스템, 컴포넌트, 기술, 또는 방법과 결합될 수 있거나 또는 통합될 수 있다. 변경, 대체, 및 변경의 다른 예가 당업자에 의해 확인될 수 있고, 본 명세서에 개시된 사상 및 범위를 벗어나지 않고 이루어질 수 있다.

Claims (29)

  1. 비디오 코딩 장치에 구현되는 방법으로서,
    상기 비디오 코딩 장치의 프로세서가, 코딩 트리 노드를 포함하는 코딩 트리 유닛(coding tree unit)을 획득하는 단계;
    상기 프로세서가, 제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 루마 샘플(luma sample)과 크로마 샘플(chroma sample)을 파티셔닝하는 단계;
    상기 프로세서가, 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하는 단계; 및
    상기 프로세서가, 상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하는 단계
    를 포함하는 비디오 코딩 장치에 구현되는 방법.
  2. 제1항에 있어서,
    상기 임계값은 4,096 픽셀이거나 또는 베이스가 2인 로그 영역에서 6인, 비디오 코딩 장치에 구현되는 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 코딩 트리 유닛이 인트라 예측(Intra-prediction, I) 픽처/프레임 내에 있는, 비디오 코딩 장치에 구현되는 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    크로마 샘플은 청색 차이 크로마(Cb) 샘플과 적색 차이 크로마(Cr) 샘플을 포함하고, 상기 Cb 샘플과 Cr 샘플은 공용 크로마 코딩 서브트리에 의해 파티셔닝되는, 비디오 코딩 장치에 구현되는 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 비디오 코딩 장치는 인코더이고,
    상기 비디오 코딩 장치에 구현되는 방법이,
    상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타내기 위해 luma_chroma_separate 플래그를 비트스트림으로 인코딩하는 단계
    를 더 포함하는 비디오 코딩 장치에 구현되는 방법.
  6. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 비디오 코딩 장치는 디코더이고,
    상기 비디오 코딩 장치에 구현되는 방법이,
    비트스트림으로부터 luma_chroma_separate 플래그를 수신하는 단계 - 상기 luma_chroma_separate 플래그는 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타내고, 상기 루마 샘플과 크로마 샘플은 상기 luma_chroma_separate 플래그의 값에 기초하여 개별적인 코딩 서브트리에 의해 파티셔닝됨 -
    를 더 포함하는 비디오 코딩 장치에 구현되는 방법.
  7. 비디오 인코더로서,
    프로세서; 및
    상기 프로세서에 연결된 송신기
    를 포함하고,
    상기 송신기는,
    코딩 트리 노드를 포함하는 코딩 트리 유닛(coding tree unit)을 획득하고;
    제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 루마 샘플(luma sample)과 크로마 샘플(chroma sample)을 파티셔닝하며;
    제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하고;
    상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하며;
    상기 공용 코딩 트리, 상기 루마 코딩 서브트리, 및 상기 크로마 코딩 서브트리에 기초하여 상기 크로마 샘플과 상기 루마 샘플을 비트스트림으로 인코딩하도록 구성되고,
    상기 송신기는, 비디오 디코더에 의해 표시되는 상기 크로마 샘플과 상기 루마 샘플의 재구성을 지원하기 위해 상기 비트스트림을 전송하도록 구성된, 비디오 인코더.
  8. 제8항에 있어서,
    상기 임계값은 4,096 픽셀이거나 또는 베이스가 2인 로그 영역에서 6인, 비디오 인코더.
  9. 제7항 또는 제8항에 있어서,
    상기 코딩 트리 유닛은 인트라 예측(Intra-prediction, I) 픽처/프레임인, 비디오 인코더.
  10. 제7항 내지 제9항 중 어느 한 항에 있어서,
    크로마 샘플은 청색 차이 크로마(Cb) 샘플과 적색 차이 크로마(Cr) 샘플을 포함하고, 상기 Cb 샘플과 Cr 샘플은 공용 크로마 코딩 서브트리에 의해 파티셔닝되는, 비디오 인코더.
  11. 제7항 내지 제10항 중 어느 한 항에 있어서,
    상기 프로세서는 추가적으로, luma_chroma_separate 플래그를 상기 비트스트림으로 인코딩하도록 구성되고, 상기 luma_chroma_separate 플래그는 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타내며, 상기 루마 샘플과 크로마 샘플은 상기 luma_chroma_separate 플래그의 값에 기초하여 개별적인 코딩 서브트리에 의해 파티셔닝되는, 비디오 인코더.
  12. 비디오 디코더로서,
    루마 데이터(luma data)와 크로마 데이터(chroma data)를 포함하는 코딩 트리 유닛(coding tree unit)을 포함하는 비트스트림을 수신하도록 구성된 수신기; 및
    상기 수신기에 연결된 프로세서
    를 포함하고,
    상기 프로세서는,
    제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리로 상기 루마 데이터와 상기 크로마 데이터를 파티셔닝하고;
    제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리로 상기 루마 데이터를 파티셔닝하며;
    제3 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리로 상기 크로마 데이터를 파티셔닝하고 - 여기서, 상기 루마 코딩 서브트리는 상기 크로마 코딩 서브트리와는 다른 세트의 분할 모드를 포함하고 있음 -;
    상기 공용 코딩 트리, 상기 루마 코딩 서브트리, 및 상기 크로마 코딩 서브트리에 기초하여 상기 크로마 데이터와 상기 루마 데이터를 비디오 프레임의 슬라이스에 재구성하고;
    디스플레이 쪽으로 상기 비디오 프레임을 포워딩하도록 구성된, 비디오 디코더.
  13. 제12항에 있어서,
    상기 임계값은 4,096 픽셀인, 비디오 디코더.
  14. 제12항 또는 제13항에 있어서,
    상기 코딩 트리 유닛이 비디오 프레임 내의 인트라 예측(Intra-predcition, I) 유형 슬라이스/픽처에 포함되면, 루마 데이터와 크로마 데이터는 서로 다른 코딩 서브트리에 의해 파티셔닝되는, 비디오 디코더.
  15. 제12항 내지 제14항 중 어느 한 항에 있어서,
    크로마 데이터는 청색 차이 크로마(Cb) 데이터와 적색 차이 크로마(Cr) 데이터를 포함하고, 상기 Cb 데이터와 Cr 데이터는 공용 크로마 코딩 서브트리에 의해 파티셔닝되는, 비디오 디코더.
  16. 제12항 내지 제15항 중 어느 한 항에 있어서,
    상기 프로세서는 추가적으로, 상기 비트스트림으로부터 luma_chroma_separate 플래그를 획득하도록 구성되고, 상기 luma_chroma_separate 플래그는 상기 루마 코딩 서브트리와 상기 크로마 코딩 서브트리 간의 분할을 나타내며, 상기 루마 데이터와 상기 크로마 데이터는 상기 luma_chroma_separate 플래그의 값에 기초하여 서로 다른 코딩 서브트리에 의해 파티셔닝되는, 비디오 디코더.
  17. 비일시적 컴퓨터 판독가능 매체로서,
    상기 비일시적 컴퓨터 판독가능 매체는 비디오 코딩 장치에 의해 사용되는 컴퓨터 프로그램 제품을 포함하고, 상기 컴퓨터 프로그램 제품은, 프로세서에 의해 실행될 때 비디오 디코더로 하여금 제1항 내지 제6항 중 어느 한 항의 비디오 코딩 장치에 구현되는 방법을 수행하게 할 수 있도록, 상기 비일시적 컴퓨터 판독가능 매체에 저장된 컴퓨터 실행가능 명령을 포함하는, 비일시적 컴퓨터 판독가능 매체.
  18. 비디오 코딩 장치로서,
    코딩 트리 노드를 포함하는 코딩 트리 유닛(coding tree unit)을 획득하기 위한 페칭 수단(fetching means);
    제1 코딩 트리 노드의 크기가 임계값을 초과하면, 공용 코딩 트리에 따라 상기 코딩 트리 유닛의 제1 코딩 트리 노드에서 루마 샘플(luma sample)과 크로마 샘플(chroma sample)을 파티셔닝하기 위한 공용 트리 파티셔닝 수단;
    제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 루마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 루마 샘플을 파티셔닝하기 위한 루마 코딩 서브트리 파티셔닝 수단; 및
    상기 제2 코딩 트리 노드의 크기가 상기 임계값보다 작거나 같으면, 크로마 코딩 서브트리가 있는 상기 코딩 트리 유닛의 제2 코딩 트리 노드에서 상기 크로마 샘플을 파티셔닝하기 위한 크로마 코딩 서브트리 파티셔닝 수단
    을 포함하는 비디오 코딩 장치.
  19. 제18항에 있어서,
    상기 페칭 수단, 상기 공용 트리 파티셔닝 수단, 상기 루마 서브트리 파티셔닝 수단, 및 상기 크로마 서브트리 파티셔닝 수단은 추가적으로, 제1항 내지 제6항 중 어느 한 항의 비디오 코딩 장치에 구현되는 방법을 수행하기 위한 수단인, 비디오 코딩 장치.
  20. 방법으로서,
    코딩 트리 유닛(coding tree unit)이 인트라 예측(intra-prediction, I) 픽처/프레임 내에 있다고 결정하는 단계;
    상기 코딩 트리 유닛에 대응하는 코딩 트리의 제1 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 공용 코딩 트리가 있는 상기 제1 코딩 트리 노드와 연관된 루마 샘플(luma sample)의 코딩 블록과 크로마 샘플(chroma sample)의 코딩 블록을 분할하는 단계; 및
    상기 코딩 트리의 제2 코딩 트리 노드가 상기 임계값보다 작거나 같은 크기를 가지고 있으면, 루마 코딩 트리가 있는 상기 제2 코딩 트리 노드와 연관된 루마 샘플의 코딩 블록을 분할하고, 크로마 코딩 트리가 있는 상기 제2 코딩 트리 노드와 연관된 크로마 샘플의 코딩 블록을 분할하는 단계
    를 포함하는 방법.
  21. 제20항에 있어서,
    상기 임계값은 4,096 루마 샘플 또는 2,048 루마 샘플인, 방법.
  22. 제20항 또는 제21항에 있어서,
    상기 공용 코딩 트리는 쿼드트리 분할(quad-tree split)되는, 방법.
  23. 제20항 내지 제22항 중 어느 한 항에 있어서,
    상기 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 상기 제1 코딩 트리 노드의 분할 모드가 포함되는, 방법.
  24. 제20항 내지 제23항 중 어느 한 항에 있어서,
    상기 크기는 log2CbSize로 표현되고, 상기 임계값은 6인, 방법.
  25. 비디오 코딩 장치로서,
    상기 비디오 코딩 장치는 프로세서를 포함하고,
    상기 프로세서는,
    코딩 트리 유닛(coding tree unit)이 인트라 예측(intra-prediction, I) 픽처/프레임 내에 있다고 결정하고;
    상기 코딩 트리 유닛에 대응하는 코딩 트리의 제1 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 공용 코딩 트리가 있는 상기 제1 코딩 트리 노드와 연관된 루마 샘플(luma sample)의 코딩 블록과 크로마 샘플의 코딩 블록(chroma sample)을 분할하고;
    상기 코딩 트리의 제2 코딩 트리 노드가 상기 임계값보다 작거나 같은 크기를 가지고 있으면, 루마 코딩 트리가 있는 상기 제2 코딩 트리 노드와 연관된 루마 샘플의 코딩 블록을 분할하고, 크로마 코딩 트리가 있는 상기 제2 코딩 트리 노드와 연관된 크로마 샘플의 코딩 블록을 분할하도록 구성된, 비디오 코딩 장치.
  26. 제25항에 있어서,
    상기 임계값은 4,096 루마 샘플 또는 2,048 루마 샘플인, 비디오 코딩 장치.
  27. 제25항 또는 제26항에 있어서,
    상기 공용 코딩 트리는 쿼드트리 분할(quad-tree split)되는, 비디오 코딩 장치.
  28. 제25항 내지 제27항 중 어느 한 항에 있어서,
    상기 코딩 트리 노드가 임계값보다 큰 크기를 가지고 있으면, 상기 제1 코딩 트리 노드의 분할 모드가 포함되는, 비디오 코딩 장치.
  29. 제25항 내지 제28항 중 어느 한 항에 있어서,
    상기 크기는 log2CbSize로 표현되고, 상기 임계값은 6인, 비디오 코딩 장치.
KR1020207024921A 2018-04-19 2019-03-05 루마 및 크로마 블록 파티셔닝 KR102410200B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862660121P 2018-04-19 2018-04-19
US62/660,121 2018-04-19
US201862732675P 2018-09-18 2018-09-18
US62/732,675 2018-09-18
PCT/US2019/020740 WO2019203940A1 (en) 2018-04-19 2019-03-05 Luma and chroma block partitioning

Publications (2)

Publication Number Publication Date
KR20200112958A true KR20200112958A (ko) 2020-10-05
KR102410200B1 KR102410200B1 (ko) 2022-06-16

Family

ID=65861713

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207024921A KR102410200B1 (ko) 2018-04-19 2019-03-05 루마 및 크로마 블록 파티셔닝

Country Status (13)

Country Link
US (2) US11109026B2 (ko)
EP (2) EP4072146A1 (ko)
JP (2) JP7279074B2 (ko)
KR (1) KR102410200B1 (ko)
CN (1) CN112385239A (ko)
CY (1) CY1125341T1 (ko)
DK (1) DK3738315T3 (ko)
ES (1) ES2909309T3 (ko)
HU (1) HUE057767T2 (ko)
PL (1) PL3738315T3 (ko)
PT (1) PT3738315T (ko)
RS (1) RS63025B1 (ko)
WO (1) WO2019203940A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2018311926B2 (en) * 2017-08-03 2022-08-18 FG Innovation Company Limited Systems and methods for partitioning video blocks in an inter prediction slice of video data
KR102584502B1 (ko) * 2018-05-10 2023-10-04 삼성전자주식회사 영상의 부호화 및 복호화를 위한 영상의 분할 방법 및 장치
JP2021525468A (ja) * 2018-05-29 2021-09-24 インターデジタル ヴイシー ホールディングス, インコーポレイテッド 部分的に共有されている輝度および彩度のコード化木を用いたビデオ符号化および復号化の方法および装置
CN110719478B (zh) 2018-07-15 2023-02-07 北京字节跳动网络技术有限公司 跨分量帧内预测模式导出
US11509931B2 (en) * 2019-06-07 2022-11-22 Tencent America LLC Method and apparatus for video coding
KR20220024008A (ko) * 2019-06-21 2022-03-03 파나소닉 인텔렉츄얼 프로퍼티 코포레이션 오브 아메리카 비디오 코딩 시스템 및 방법
BR112022001981A2 (pt) * 2019-08-06 2022-05-10 Beijing Bytedance Network Tech Co Ltd Método e aparelho de processamento de vídeo, e, mídia legível por computador
MX2022002188A (es) 2019-09-02 2022-03-11 Beijing Bytedance Network Tech Co Ltd Determinacion de modo de codificacion basada en formato de color.
KR102649584B1 (ko) 2019-09-21 2024-03-21 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 크로마 인트라 모드에 기초한 크기 제한
US11432018B2 (en) * 2020-05-11 2022-08-30 Tencent America LLC Semi-decoupled partitioning for video coding
US11876970B2 (en) 2021-07-22 2024-01-16 Tencent America LLC Non-interleaved separate tree

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170077203A (ko) * 2014-12-10 2017-07-05 미디어텍 싱가폴 피티이. 엘티디. 2진 트리 블록 분할을 사용한 비디오 코딩 방법

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9462275B2 (en) 2012-01-30 2016-10-04 Qualcomm Incorporated Residual quad tree (RQT) coding for video coding
WO2016074147A1 (en) 2014-11-11 2016-05-19 Mediatek Singapore Pte. Ltd. Separated coding tree for luma and chroma
EP4040789B1 (en) * 2016-02-11 2023-10-18 InterDigital VC Holdings, Inc. Method and device for encoding/decoding an image unit comprising image data represented by a luminance channel and at least one chrominance channel
WO2017205704A1 (en) * 2016-05-25 2017-11-30 Arris Enterprises Llc General block partitioning method
CA3025488A1 (en) * 2016-05-25 2017-11-30 Arris Enterprises Llc Weighted angular prediction for intra coding
CN109196863B (zh) 2016-05-27 2021-07-30 夏普株式会社 用于改变量化参数的系统和方法
US11025903B2 (en) * 2017-01-13 2021-06-01 Qualcomm Incorporated Coding video data using derived chroma mode
EP3577899A4 (en) * 2017-01-31 2020-06-17 Sharp Kabushiki Kaisha SYSTEMS AND METHODS FOR SCALING TRANSFORM COEFFICIENT LEVEL VALUES

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170077203A (ko) * 2014-12-10 2017-07-05 미디어텍 싱가폴 피티이. 엘티디. 2진 트리 블록 분할을 사용한 비디오 코딩 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Adam Wieckowski, et al. NextSoftware: An alternative implementation the Joint Exploration Model (JEM), Joint Video exploration Team(JVET), JVET-H0084, 2017-12-06, pp. 1-12* *

Also Published As

Publication number Publication date
US11109026B2 (en) 2021-08-31
KR102410200B1 (ko) 2022-06-16
JP2021523590A (ja) 2021-09-02
PT3738315T (pt) 2022-03-30
JP7485803B2 (ja) 2024-05-16
PL3738315T3 (pl) 2022-05-09
EP3738315A1 (en) 2020-11-18
EP3738315B1 (en) 2022-01-26
HUE057767T2 (hu) 2022-06-28
JP7279074B2 (ja) 2023-05-22
WO2019203940A1 (en) 2019-10-24
US20210037242A1 (en) 2021-02-04
DK3738315T3 (da) 2022-04-11
CY1125341T1 (el) 2024-02-16
RS63025B1 (sr) 2022-04-29
JP2023052640A (ja) 2023-04-11
ES2909309T3 (es) 2022-05-06
CN112385239A (zh) 2021-02-19
US20210368174A1 (en) 2021-11-25
EP4072146A1 (en) 2022-10-12

Similar Documents

Publication Publication Date Title
US11184610B2 (en) Intra-prediction with multiple reference lines
KR102661416B1 (ko) 인코더, 디코더 및 대응하는 방법
KR102410200B1 (ko) 루마 및 크로마 블록 파티셔닝
US11528506B2 (en) Intra-prediction using a cross-component linear model in video coding
US10623738B2 (en) Noise suppression filter
JP7150861B2 (ja) ビデオコーディングのための空間変動変換
KR20220055500A (ko) 픽처 레벨에서 논-픽처-레벨 신택스 요소의 시그널링
US20230239518A1 (en) Constrained Coding Tree for Video Coding

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant