KR101647904B1 - 비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출 - Google Patents

비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출 Download PDF

Info

Publication number
KR101647904B1
KR101647904B1 KR1020147013054A KR20147013054A KR101647904B1 KR 101647904 B1 KR101647904 B1 KR 101647904B1 KR 1020147013054 A KR1020147013054 A KR 1020147013054A KR 20147013054 A KR20147013054 A KR 20147013054A KR 101647904 B1 KR101647904 B1 KR 101647904B1
Authority
KR
South Korea
Prior art keywords
video
video unit
unit
current
neighboring
Prior art date
Application number
KR1020147013054A
Other languages
English (en)
Other versions
KR20140085510A (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 KR20140085510A publication Critical patent/KR20140085510A/ko
Application granted granted Critical
Publication of KR101647904B1 publication Critical patent/KR101647904B1/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/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/192Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • 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)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Abstract

비디오 데이터에 대한 비디오 인코딩 또는 디코딩 동작의 부분으로서, 비디오 코더는 비디오 데이터의 현재 비디오 유닛에 대한 코딩 동작을 수행한다. 현재 비디오 유닛에 대한 코딩 동작을 수행하는 부분으로서, 비디오 코더는 현재 비디오 유닛에 이웃하는 하나 이상의 비디오 유닛들의 가용성들을 결정한다. 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 결정하기 위하여, 비디오 코더는, 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별한다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 비디오 코더는 그 다음에 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행한다.

Description

비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출{DETECTING AVAILABILITIES OF NEIGHBORING VIDEO UNITS FOR VIDEO CODING}
관련 출원들에 대한 상호 참조
본 출원은 2011년 10월 18일자로 출원된 미국 가출원 제61/548,630호를 우선권 주장하며, 그 전체 내용은 참조로 본원에 통합된다.
기술 분야
본 출원은 비디오 코딩, 예컨대, 비디오 인코딩 및 디코딩의 분야에 관한 것이다.
디지털 비디오 능력들은 디지털 텔레비전들, 디지털 직접 브로드캐스트 시스템들, 무선 브로드캐스트 시스템들, 개인휴대 정보단말들 (PDAs), 랩톱 또는 데스크톱 컴퓨터들, 디지털 카메라들, 디지털 레코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 디바이스들, 비디오 게임 콘솔들, 셀룰러 또는 위성 무선 전화기들, 비디오 원격회의 디바이스들 등을 포함하는 넓은 범위의 디바이스들에 통합될 수 있다. 디지털 비디오 디바이스들은 MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, 파트 10, 어드밴스드 비디오 코딩 (Advanced Video Coding; AVC) 에 의해 규정된 표준들 및 이러한 표준들의 확장물들에 기재된 것들과 같은 비디오 압축 기법들을 구현하여, 디지털 비디오 정보를 더 효율적으로 송신하고 수신한다. 새로운 비디오 코딩 표준들, 이를테면 MPEG 및 ITU-T 간의 협력체인 JCT-VC (Joint Collaborative Team - Video Coding) 에 의해 개발 중인 고 효율 비디오 코딩 (High Efficiency Video Coding; HEVC) 표준이 개발 중에 있다. 신흥 (emerging) HEVC 표준은 때때로 H.265라고 지칭되지만, 이러한 지정은 공식적으로 이루어진 것은 아니다.
본 개시물의 기법들은 대체로 비디오 코딩 동안의 이웃하는 비디오 유닛들의 가용성들을 결정하는 것에 관련된다. 더 구체적으로는, 비디오 코더가 현재 비디오 유닛에 대해 비디오 코딩 동작을 수행한다. 비디오 코딩 동작을 수행하는 부분으로서, 일부 예들에서, 비디오 코더는 현재 비디오 유닛의 부모 비디오 유닛의 가용성들에 기초하여 룩업 테이블에서 엔트리를 식별할 수도 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 이런 방식으로, 룩업 테이블은 비디오 코더가 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 검출하는 것을 허용한다. 비디오 코더는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성에 기초하여 현재 비디오 유닛에 코딩 동작을 수행한다.
하나의 예에서, 본 개시물은 비디오 데이터를 코딩하는 방법을 설명한다. 그 방법은 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별하는 단계를 포함한다. 현재 비디오 유닛은 비디오 데이터의 화상 내에 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 더욱이, 그 방법은 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하는 단계를 포함한다.
다른 예에서, 본 개시물은 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별하도록 구성된 하나 이상의 프로세서들을 포함하는 비디오 코딩 장치를 설명한다. 현재 비디오 유닛은 화상 내에 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 하나 이상의 프로세서들은 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하도록 추가로 구성된다.
다른 예에서, 본 개시물은 비디오 데이터를 코딩하는 비디오 코딩 장치를 설명한다. 그 비디오 코딩 장치는 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별하는 수단을 포함한다. 현재 비디오 유닛은 비디오 데이터의 화상 내에 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 그 비디오 코딩 장치는 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하는 수단을 더 포함한다.
다른 예에서, 본 개시물은, 실행되는 경우, 하나 이상의 프로세서들로 하여금, 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별하도록 하는 명령들을 저장하고 있는 컴퓨터 판독가능 매체를 포함하는 컴퓨터 프로그램 제품을 설명한다. 현재 비디오 유닛은 화상 내에 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낸다. 덧붙여서, 명령들은, 실행되는 경우, 하나 이상의 프로세서로 하여금, 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하도록 한다.
본 개시물의 하나 이상의 양태들의 상세는 첨부 도면들 및 다음의 설명에서 언급된다. 본 개시물에서 설명되는 기법들의 다른 특징들, 목적들, 및 이점들은 상세한 설명 및 도면들로부터, 그리고 청구항들로부터 명확하게 될 것이다.
도 1은 본 개시물의 기법들을 활용할 수도 있는 일 예의 비디오 코딩 시스템을 도시하는 블록도이다.
도 2는 화상의 트리블록들 및 슬라이스들로의 일 예의 파티셔닝을 도시하는 개념도이다.
도 3은 화상의 트리블록들의 일 예의 래스터 스캔 순서를 도시하는 개념도이다.
도 4는 점차적으로 더 작은 비디오 코딩 유닛들로 파티셔닝되는 일 예의 트리블록을 도시하는 개념도이다.
도 5는 트리블록을 파티셔닝하는 일 예의 쿼드트리 데이터 구조를 도시하는 개념도이다.
도 6은 z-스캔 순서에 따른 트리블록의 비-파티셔닝된 코딩 유닛들의 일 예의 시퀀스화 (sequencing) 를 도시하는 개념도이다.
도 7은 비디오 시퀀스를 인코딩하는 비디오 인코더의 일 예를 도시하는 블록도이다.
도 8은 인코딩된 비디오 시퀀스를 디코딩하는 비디오 디코더의 일 예를 도시하는 블록도이다.
도 9는 현재 비디오 유닛의 이웃들의 가용성들을 결정하는 일 예의 재귀적 동작을 도시하는 흐름도이다.
도 10은 비디오 유닛의 예의 이웃들을 도시하는 개념도이다.
도 11은 세분된 비-리프 (non-leaf) 비디오 유닛 및 이웃하는 비디오 유닛들 사이의 예의 관계를 도시하는 개념도이다.
도 12는 비-리프 비디오 유닛의 좌측 상부 서브 유닛의 이웃들의 예의 가용성들을 도시하는 개념도이다.
도 13은 비-리프 비디오 유닛의 우측 상부 서브 유닛의 이웃들의 예의 가용성들을 도시하는 개념도이다.
도 14는 비-리프 비디오 유닛의 좌측 하부 서브 유닛의 이웃들의 예의 가용성들을 도시하는 개념도이다.
도 15는 비-리프 비디오 유닛의 우측 하부 서브 유닛의 이웃들의 예의 가용성들을 도시하는 개념도이다.
도 16은 현재 비디오 유닛의 이웃들의 가용성들을 결정하는 다른 예의 동작을 도시하는 흐름도이다.
도 17은 64 개의 기본 비디오 유닛들로 파티셔닝된 LCU의 개념도이다.
도 18은 좌측 아래 이웃들에 대한 일 예의 룩업 테이블 (LUT) 을 도시하는 개념도이다.
도 19는 좌측 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다.
도 20은 좌측 위 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다.
도 21은 위쪽 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다.
도 22는 우측 위 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다.
도 23은 현재 비디오 유닛의 이웃들의 가용성들을 결정하는 다른 예의 동작을 도시하는 흐름도이다.
첨부된 도면들이 예들을 도시한다. 첨부된 도면들에서 참조 번호들에 의해 나타낸 엘리먼트들은 다음의 설명에서 유사한 참조 번호들에 의해 나타낸 엘리먼트들에 대응한다. 본 개시물에서, 엘리먼트들이 서수 단어들 (예컨대, "제 1", "제 2", "제 3" 등) 로 시작하는 이름들을 갖는 것은 반드시 그 엘리먼트들이 특정 순서를 가진다는 것을 의미하지는 않는다. 오히려, 그런 서수 단어들은 단지 동일한 또는 유사한 유형의 상이한 엘리먼트들을 언급하기 위해 사용된다.
본 개시물의 기법들은 비디오 코더가 화상의 비디오 유닛의 이웃의 가용성을 결정할 수도 있는 효율을 증가시킬 수도 있다. 본원에서 설명에 사용되는 바와 같이, 용어 "비디오 코더"는 비디오 인코더들 및 비디오 디코더들 양쪽 모두를 일반적으로 지칭한다. 본 개시물에서, 용어들 "비디오 코딩" 또는 "코딩"은 비디오 인코딩 및 비디오 디코딩을 일반적으로 지칭할 수도 있다. "비디오 유닛"는 화소 값들의 연속하는 그룹들에 대응할 수도 있다. 제 1 비디오 유닛의 하나 이상의 화소 값들이 화상 내에서 제 2 비디오 유닛의 하나 이상의 화소 값들에 인접하다면, 제 1 비디오 유닛은 제 2 비디오 유닛의 이웃일 수도 있다 (즉, 제 1 비디오 유닛은 제 2 비디오 유닛에 이웃한다).
비디오 유닛에 대해 비디오 코딩 프로세스를 수행하는 경우, 비디오 코더가 비디오 유닛을 코딩하기 위해 이웃하는 비디오 유닛과 연관된 데이터를 사용할 수 있으면, 그 이웃하는 비디오 유닛은 "이용가능 (available)"할 수도 있다. 비디오 코더가 비디오 유닛을 코딩하기 위해 이웃하는 비디오 유닛과 연관된 데이터를 사용할 수 없으면, 그 이웃하는 비디오 유닛은 "이용불가능 (unavailable)"할 수도 있다. 예를 들어, 비디오 인코더가 비디오 유닛에 대해 비디오 인코딩 프로세스를 수행하는 경우, 비디오 인코더가 이웃하는 비디오 유닛을 아직 인코딩하지 않았으면, 이웃하는 비디오 유닛이 존재하지 않으면, 이웃하는 비디오 유닛이 비디오 유닛과는 상이한 슬라이스에 있으면, 또는 아니면 비디오 인코더가 비디오 유닛을 인코딩하기 위해 이웃하는 비디오 유닛과 연관된 데이터를 사용할 수 없으면, 그 이웃하는 비디오 유닛은 이용불가능할 수도 있다. 비디오 인코더가 비디오 블록에 대해 비디오 디코딩 프로세스를 수행하는 경우, 비디오 디코더가 이웃하는 비디오 유닛을 아직 디코딩하지 않았으면, 이웃하는 비디오 유닛이 존재하지 않으면, 이웃하는 비디오 유닛이 비디오 유닛과는 상이한 슬라이스에 있으면, 또는 아니면 비디오 디코더가 비디오 유닛을 디코딩하기 위해 이웃하는 비디오 유닛과 연관된 데이터를 사용할 수 없으면, 그 이웃하는 비디오 유닛은 이용불가능할 수도 있다.
인트라 예측 또는 모션 벡터 예측을 위한 것과 같이, 이웃하는 비디오 유닛이 이용가능한지의 여부를 결정하는 것을 필요로 할 수도 있는 다양한 이유들이 있을 수도 있다. 예를 들어, 비디오 인코더 또는 비디오 디코더는 현재 비디오 유닛의 화소 값들을 인트라 예측하기 위하여 이웃하는 비디오 유닛의 화소 값들에 액세스할 필요가 있을 수도 있다. 이 예에서, 비디오 디코더가 이웃하는 비디오 유닛을 아직 디코딩하지 않았으면 비디오 디코더는 이웃하는 비디오 유닛의 화소 값들에 액세스할 수 없을 수도 있다. 다른 예에서, 모션 벡터 예측의 경우, 비디오 인코더 또는 비디오 디코더는, 예컨대, 병합 또는 스킵 모드들, 또는 AMVP (advanced motion vector prediction) 모드들에서 사용하기 위해, 현재 비디오 유닛에 대한 모션 데이터를 생성하기 위하여 이웃하는 비디오 유닛에 대한 모션 데이터에 액세스할 필요가 있을 수도 있다. 다른 예들에서, 이웃하는 비디오 유닛의 가용성은 다양한 신택스 엘리먼트들의 엔트로피 코딩을 위한 콘텍스트들을 결정하는데 필요할 수도 있다. 이들 예들에서, 비디오 인코더가 이웃하는 비디오 유닛을 아직 인코딩하지 않았으면, 비디오 인코더는 이웃하는 비디오 유닛에 대한 모션 데이터에 액세스할 수 없을 수도 있다.
본 개시물의 기법들에 따라, 비디오 코더는 복수의 엔트리들을 포함하는 룩업 테이블 (LUT) 을 저장할 수도 있다. 그 비디오 코더는 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여 LUT에서의 특정 엔트리에 액세스할 수도 있다. LUT에서의 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 특정할 수도 있다. 이런 식으로, 비디오 코더는 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 결정하는데 LUT를 사용할 수도 있다. 이런 식으로 이웃하는 비디오 유닛들의 가용성들을 결정하는 것은 이웃하는 비디오 유닛들의 가용성들을 결정하는 이전에 제안된 기법들보다 적은 메모리 액세스들을 필요로 할 수도 있고, 가용성의 비교적 신속한 검출을 촉진할 수도 있다.
도 1은 본 개시물에서 설명되는 기법들을 활용할 수도 있는 일 예의 비디오 코딩 시스템 (10) 을 도시하는 블록도이다. 도 1의 예에서 도시된 바와 같이, 비디오 코딩 시스템 (10) 은 소스 디바이스 (12) 와 목적지 디바이스 (14) 를 구비한다. 소스 디바이스 (12) 는 인코딩된 비디오 데이터를 생성한다. 목적지 디바이스 (14) 는 인코딩된 비디오 데이터를 나중에 디코딩할 수도 있다. 소스 디바이스 (12) 와 목적지 디바이스 (14) 는 데스크톱 컴퓨터들, 노트북 (즉, 랩톱) 컴퓨터들, 태블릿 컴퓨터들, 셋톱 박스들, 이동 전화기들, 전화기 핸드셋들, "스마트" 패드들, 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 비디오 스트리밍 디바이스, 차량 내 컴퓨터들, 또는 비디오 데이터를 인코딩 및 디코딩할 수 있는 다른 유형들의 컴퓨팅 디바이스들을 포함한 다양한 범위의 디바이스들 중 임의의 것을 포함할 수도 있다.
목적지 디바이스 (14) 는 인코딩된 비디오 데이터를 통신 채널 (16) 을 통해 수신할 수도 있다. 통신 채널 (16) 은 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 인코딩된 비디오 데이터를 이동시킬 수 있는 매체 또는 디바이스를 포함할 수도 있다. 하나의 예에서, 통신 채널 (16) 은 소스 디바이스 (12) 가 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로 직접 실시간으로 송신하는 것을 가능하게 하는 통신 매체를 포함할 수도 있다. 소스 디바이스 (12) 또는 다른 디바이스는 통신 표준, 이를테면 무선 통신 프로토콜에 따라 인코딩된 비디오 데이터를 변조할 수도 있다. 통신 매체는 임의의 무선 또는 유선 통신 매체, 이를테면 무선 주파수 (RF) 스펙트럼 또는 하나 이상의 물리적 송신 라인들을 포함할 수도 있다. 통신 채널 (16) 은 패킷 기반 네트워크, 이를테면 로컬 영역 네트워크, 광역 네트워크, 또는 인터넷과 같은 글로벌 네트워크의 부분을 형성할 수도 있다. 통신 채널 (16) 은 라우터들, 스위치들, 기지국들, 또는 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로의 인코딩된 비디오 데이터의 통신을 용이하게 하는데 유용할 수도 있는 임의의 다른 장비를 포함할 수도 있다.
일부 예들에서, 소스 디바이스 (12) 와 목적지 디바이스 (14) 는 무선 통신을 위해 구비될 수도 있다. 그러나, 본 개시물의 기법들은 무선 애플리케이션들 또는 설정 (setting) 들로 반드시 제한되지는 않는다. 오히려, 그 기법들은, 다양한 멀티미디어 애플리케이션들, 이를테면 OTA (over-the-air) 텔레비전 브로드캐스트들, 케이블 텔레비전 송신들, 위성 텔레비전 송신들, 예컨대 인터넷을 통한 스트리밍 비디오 송신들 중 임의의 것의 지원 하의 비디오 코딩, 데이터 저장 매체 상의 저장을 위한 디지털 비디오의 인코딩, 데이터 저장 매체 상에 저장된 디지털 비디오의 디코딩, 또는 다른 애플리케이션들에 적용될 수도 있다. 일부 예들에서, 소스 디바이스 (12) 와 목적지 디바이스 (14) 는 비디오 스트리밍, 비디오 플레이백, 비디오 브로드캐스팅, 및/또는 화상 통화와 같은 애플리케이션들을 지원하기 위해 단방향 또는 양방향 비디오 송신을 지원하도록 구성될 수도 있다.
더욱이, 일부 예들에서, 소스 디바이스 (12) 는 인코딩된 비디오 데이터를 저장 시스템 (34) 으로 출력할 수도 있다. 마찬가지로, 목적지 디바이스 (14) 는 저장 시스템 (34) 상에 저장된 인코딩된 비디오 데이터에 액세스할 수도 있다. 다양한 예들에서, 저장 시스템 (34) 은 다양한 분산된 또는 국소적으로 액세스된 데이터 저장 매체들을 포함할 수도 있다. 데이터 저장 매체들의 예의 유형들은, 하드 드라이브들, 블루-레이 디스크들, DVD들, CD-ROM들, 고체 상태 메모리 유닛들, 휘발성 또는 비휘발성 메모리, 또는 인코딩된 비디오 데이터를 저장하기에 적합한 다른 디지털 저장 매체들을 포함하지만 그것들로 제한되지 않는다.
일부 예들에서, 저장 시스템 (34) 은 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오를 저장할 수도 있는 파일 서버 또는 다른 중간 저장 디바이스를 포함할 수도 있다. 목적지 디바이스 (14) 는 저장 시스템 (34) 로부터의 저장된 비디오 데이터에 스트리밍 또는 다운로드를 통해 액세스할 수도 있다. 파일 서버는 인코딩된 비디오 데이터를 저장하고 그 인코딩된 비디오 데이터를 목적지 디바이스 (14) 에 송신할 수 있는 임의의 유형의 서버일 수도 있다. 예의 파일 서버들은 웹 서버 (예컨대, 웹사이트용), FTP (File Transfer Protocol) 서버, 네트워크 부속 스토리지 (network attached storage; NAS) 디바이스, 또는 로컬 디스크 드라이브를 포함한다. 목적지 디바이스 (14) 는 데이터 접속, 이를테면 인터넷 접속을 통해, 인코딩된 비디오 데이터에 액세스할 수도 있다. 데이터 접속은 무선 채널 (예컨대, Wi-Fi 접속), 유선 접속 (예컨대, DSL, 케이블 모뎀 등), 또는 파일 서버 상에 저장된 인코딩된 비디오 데이터에 액세스하기에 적합한 양쪽 모두의 조합을 포함할 수도 있다. 저장 시스템 (34) 으로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신, 또는 양쪽 모두의 조합일 수도 있다.
도 1의 예에서, 소스 디바이스 (12) 는 비디오 소스 (18), 비디오 인코더 (20) 및 출력 인터페이스 (22) 를 구비한다. 일부 경우들에서, 출력 인터페이스 (22) 는 변조기/복조기 (모뎀) 및/또는 송신기를 구비할 수도 있다. 비디오 소스 (18) 는 비디오 데이터를 비디오 인코더 (20) 에 제공할 수도 있다. 다양한 예들에서, 비디오 소스 (18) 는 비디오 데이터를 제공하는 다양한 유형들의 디바이스들 및/또는 시스템들을 포함할 수도 있다. 예를 들어, 비디오 소스 (18) 는 비디오 캡처 디바이스, 이를테면 비디오 카메라를 포함할 수도 있다. 다른 예에서, 비디오 소스 (18) 는 이전에 캡처된 비디오를 포함하는 비디오 아카이브를 포함할 수도 있다. 또 다른 예에서, 비디오 소스 (18) 는 비디오 콘텐츠 제공자로부터 비디오를 수신하는 비디오 피드 인터페이스를 포함할 수도 있다. 또 다른 예에서, 비디오 소스 (18) 는 컴퓨터 그래픽스 데이터를 생성하는 컴퓨터 그래픽 시스템을 포함할 수도 있다.
아래에서 상세히 설명되는 바와 같이, 비디오 인코더 (20) 는 비디오 소스 (18) 에 의해 제공된 비디오 데이터를 인코딩할 수도 있다. 일부 예들에서, 소스 디바이스 (12) 는 출력 인터페이스 (22) 를 통해 목적지 디바이스 (14) 로 인코딩된 비디오 데이터를 직접 송신할 수도 있다. 더구나, 일부 예들에서, 저장 시스템 (34) 은 목적지 디바이스 (14) 또는 다른 디바이스들에 의한 나중의 액세스를 위해 인코딩된 비디오 데이터를 저장할 수도 있다.
본 개시물은 비디오 인코더 (20) 를, 다른 디바이스, 이를테면 비디오 디코더 (30) 에 특정한 정보를 "시그널링하는" 것으로서 일반적으로 지칭할 수도 있다. 그러나, 비디오 인코더 (20) 는 특정한 신택스 엘리먼트들과 비디오 데이터의 다양한 인코딩된 부분들을 연관시킴으로써 정보를 시그널링할 수도 있다는 것이 이해되어야 한다. 다시 말하면, 비디오 인코더 (20) 는 특정한 신택스 엘리먼트들을 비디오 데이터의 다양한 인코딩된 부분들의 헤더들에 저장함으로써 데이터를 "시그널링"할 수도 있다. 일부 경우들에서, 이러한 신택스 엘리먼트들은 비디오 디코더 (30) 에 의해 수신되고 디코딩되기 전에 인코딩되고 저장 (예컨대, 저장 시스템 (34) 에 저장) 될 수도 있다. 따라서, 용어 "시그널링"은 일반적으로 압축된 비디오 데이터를 디코딩하는데 사용되는 신택스 또는 다른 데이터의 통신을 말할 수도 있다. 이러한 통신은 실시간 또는 거의 실시간으로 일어날 수도 있다. 대안으로, 이러한 통신은 인코딩 시에 매체에 신택스 엘리먼트들을 저장하고 그 신택스 엘리먼트들을 디코딩 디바이스가 그 다음에 이 매체에 저장된 후의 임의의 시간에 취출할 수도 있는 경우에 일어날 수 있는 기간 (span of time) 에 걸쳐 일어날 수도 있다.
도 1의 예에서, 목적지 디바이스 (14) 는 입력 인터페이스 (28), 비디오 디코더 (30), 및 디스플레이 디바이스 (32) 를 구비한다. 일부 예들에서, 입력 인터페이스 (28) 는 수신기 및/또는 모뎀을 구비할 수도 있다. 목적지 디바이스 (14) 의 입력 인터페이스 (28) 는 통신 채널 (16) 및/또는 저장 시스템 (34) 으로부터 인코딩된 비디오 데이터를 수신한다. 비디오 디코더 (30) 는 입력 인터페이스 (28) 에 의해 수신된 인코딩된 비디오 데이터를 디코딩한다. 목적지 디바이스 (14) 는 인코딩된 비디오 데이터를 디스플레이 디바이스 (32) 상의 디스플레이를 위해 랜더링할 수도 있다.
디스플레이 디바이스 (32) 는 목적지 디바이스 (14) 와 통합되거나 또는 그것 외부에 있을 수도 있다. 일부 예들에서, 목적지 디바이스 (14) 는 통합형 디스플레이 디바이스를 포함할 수도 있고 또한 외부 디스플레이 디바이스와 인터페이싱하도록 구성될 수도 있다. 다양한 예들에서, 디스플레이 디바이스 (32) 는 다양한 유형들의 디바이스들을 포함할 수도 있다. 예를 들어, 디스플레이 디바이스 (32) 는 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 또는 다른 유형의 디스플레이 디바이스를 포함할 수도 있다.
비록 도 1에 도시되지 않았지만, 비디오 인코더 (20) 와 비디오 디코더 (30) 는 각각이 오디오 인코더 및 디코더와 통합될 수도 있고, 적절한 MUX-DEMUX 유닛들, 또는 다른 하드웨어 및 소프트웨어를 포함하여, 공통 데이터 스트림 또는 개별 데이터 스트림들에서의 오디오 및 비디오 양쪽 모두의 인코딩을 핸들링할 수도 있다. 적용가능하면, MUX-DEMUX 유닛들은 ITU H.223 멀티플렉서 프로토콜, 또는 사용자 데이터그램 프로토콜 (UDP) 과 같은 다른 프로토콜들을 준수할 수도 있다.
비디오 인코더 (20) 와 비디오 디코더 (30) 각각은 다양한 적합한 회로, 이를테면 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서들 (DSPs), 주문형 집적회로들 (ASICs), 필드 프로그램가능 게이트 어레이들 (FPGAs), 개별 로직, 소프트웨어, 하드웨어, 펌웨어 또는 그것들의 임의의 조합 중 임의의 것으로서 구현될 수도 있다. 그 기법들이 부분적으로 소프트웨어로 구현되는 경우, 디바이스는 본 개시물의 기법들을 수행하기 위하여, 적합한 비일시적 컴퓨터 판독가능 매체 내에 소프트웨어에 대한 명령을 저장하고 하나 이상의 프로세서들을 사용하여 하드웨어에서 그 명령들을 실행할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 의 각각은 하나 이상의 인코더들 또는 디코더들 내에 구비될 수도 있고, 그것들 중 어느 하나는 결합형 인코더/디코더 (CODEC) 의 부분으로서 개별 디바이스 내에 통합될 수도 있다.
비디오 인코더 (20) 와 비디오 디코더 (30) 는 비디오 압축 표준, 이를테면 현재 개발 중인 고 효율 비디오 코딩 (HEVC) 표준에 따라 동작할 수도 있고 HEVC 테스트 모델 (HM) 을 준수할 수도 있다. 대안으로, 비디오 인코더 (20) 와 비디오 디코더 (30) 는, 다르게는 MPEG-4, 파트 10, 어드밴스드 비디오 코딩 (AVC) 이라고 지칭되는 ITU-T H.264 표준과 같은 다른 독점 또는 산업 표준들, 또는 그런 표준들의 확장들에 따라 동작할 수도 있다. 표준들에 대한 예의 확장들은 H.264/AVC 표준에 대한 스케일러블 비디오 코딩 (SVC) 및 멀티뷰 비디오 코딩 (MVC) 확장들을 포함한다. 본 개시물의 기법들은 임의의 특정 코딩 표준으로 제한되지 않는다. 비디오 압축 표준들의 다른 예들은 MPEG-2와 ITU-T H.263을 포함한다.
위에서 간략히 언급된 바와 같이, 비디오 인코더 (20) 는 비디오 데이터를 인코딩한다. 비디오 데이터는 화상들의 하나 이상의 시퀀스들을 포함할 수도 있다. 화상들의 각각은 스틸 이미지이다. 몇몇 경우들에서, 화상이 "프레임"이라고 지칭될 수도 있다. 비디오 인코더 (20) 가 비디오 데이터를 인코딩하는 경우, 비디오 인코더 (20) 는 비트스트림을 생성할 수도 있다. 그 비트스트림은 코딩된 화상들의 표현 및 연관된 데이터를 형성하는 비트들의 시퀀스를 포함한다. 코딩된 화상이 화상의 코딩된 표현이다.
비트스트림을 생성하기 위해, 비디오 인코더 (20) 는 비디오 데이터의 화상들의 시퀀스들에 대해 인코딩 동작들을 수행할 수도 있다. 비디오 인코더 (20) 가 화상들의 시퀀스에 대한 인코딩 동작들을 수행하는 경우, 비디오 인코더 (20) 는 일련의 코딩된 화상들 및 연관된 데이터를 생성할 수도 있다. 덧붙여서, 비디오 인코더 (20) 는 화상들의 시퀀스에 적용가능한 파라미터들을 포함하는 시퀀스 파라미터 세트 (SPS) 를 생성할 수도 있다. 더욱이, 비디오 인코더 (20) 는 전체로서의 화상들에 적용가능한 파라미터들을 포함하는 화상 파라미터 세트들 (PPSs) 를 생성할 수도 있다.
코딩된 화상을 생성하기 위해, 비디오 인코더 (20) 는 화상을 하나 이상의 트리블록들로 파티셔닝할 수도 있다. 트리블록은 비디오 데이터의 2D 블록이다. 몇몇 경우들에서, 트리블록은 또한 최대 코딩 유닛 (LCU) 이라고 지칭될 수도 있다. HEVC의 트리블록들은 이전의 표준들, 이를테면 H.264/AVC의 매크로블록들과 대체로 유사할 수도 있다. 그러나, 트리블록은 특정 사이즈로 반드시 제한되는 것은 아니고 하나 이상의 코딩 유닛들 (CUs) 을 포함할 수도 있다.
일부 예들에서, 비디오 인코더 (20) 는 화상을 복수의 슬라이스들로 파티셔닝할 수도 있다. 슬라이스들의 각각은 정수 개수 (integer number) 의 CU들을 포함할 수도 있다. 몇몇 경우들에서, 슬라이스는 정수 개수의 트리블록들을 포함한다. 다른 경우들에서, 슬라이스의 경계가 트리블록 내에 있을 수도 있다. 슬라이스의 경계가 트리블록 내에 있으면, 슬라이스는 세립 (fine granular) 슬라이스라고 지칭될 수도 있다. 도 2는 LCU들로 파티셔닝된 화상 (50) 을 예시한다. 화상 (50) 의 수평 중간점 근처의 어두운 선 (52) 은 화상 (50) 의 슬라이스 (54) 및 슬라이스 (56) 사이의 경계를 나타낸다. 도 2의 예에서, 화상 (50) 내의 셀들 (58) 은 트리블록들에 대응할 수도 있다.
화상에 대한 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 화상의 각각의 슬라이스에 대한 인코딩 동작들을 수행할 수도 있다. 슬라이스에 대한 인코딩 동작은 그 슬라이스에 연관된 인코딩된 데이터를 생성할 수도 있다. 슬라이스에 연관된 인코딩된 데이터는 "코딩된 슬라이스"라고 지칭될 수도 있다. 코딩된 슬라이스는 슬라이스 헤더 및 슬라이스 데이터를 포함할 수도 있다. 슬라이스 데이터는 일련의 연속하는 코딩 유닛들을 코딩 순서로 포함할 수도 있다. 슬라이스 헤더는 슬라이스의 제 1 또는 모든 트리블록들에 관한 데이터 엘리먼트들을 포함할 수도 있다.
슬라이스에 대한 코딩된 슬라이스를 생성하기 위해, 비디오 인코더 (20) 는 그 슬라이스의 각각의 트리블록에 대해 인코딩 동작들을 수행할 수도 있다. 비디오 인코더 (20) 는 래스터 스캔 순서에 따라 슬라이스에서의 트리블록들에 대해 인코딩 동작들을 수행할 수도 있다. 도 3은 화상 (50) 의 트리블록들의 일 예의 래스터 스캔 순서를 도시하는 개념도이며, 이 도면에서 각각의 트리블록에서의 숫자는 트리블록의 래스터 스캐닝의 일 예의 순서 (예컨대, 도 3의 예에서 1 내지 56) 를 나타낸다. 비디오 인코더 (20) 가 트리블록에 대해 인코딩 동작을 수행하는 경우, 비디오 인코더 (20) 는 코딩된 트리블록을 생성할 수도 있다. 코딩된 트리블록은 트리블록의 인코딩된 버전을 나타내는 데이터를 포함할 수도 있다.
코딩된 트리블록을 생성하기 위해, 비디오 인코더 (20) 는 트리블록에 대해 쿼드트리 파티셔닝을 재귀적으로 수행하여 그 트리블록을 점차적으로 더 작은 CU들로 분할할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 트리블록을 4 개의 동일 사이즈의 서브 CU들로 파티셔닝하며, 그 서브 CU들 중 하나 이상을 4 개의 동일 사이즈의 서브-서브 CU들로 파티셔닝하는 등등을 수행할 수도 있다. 비트스트림에서의 하나 이상의 신택스 엘리먼트들은 비디오 인코더 (20) 가 트리블록을 파티셔닝할 수도 있는 최대 횟수를 나타낼 수도 있다. 신택스 엘리먼트들은 또한 최소 코딩 유닛 (smallest coding unit; SCU) 을 나타낼 수도 있다. 일부 예들에서, CU는 형상이 정사각형으로 될 수도 있다. 다른 예들에서, CU는 직사각형이거나 또는 다른 형상을 가질 수도 있다. 주어진 현재 비디오 유닛의 부모 비디오 유닛은 현재 비디오 유닛에 대응하는 쿼드트리 노드 바로 위쪽의 쿼드트리 노드에 대응할 수도 있다. 비디오 인코더 (20) 가 쿼드트리 파티셔닝을 사용하여 주어진 비디오 유닛을 4 개의 동일 사이즈의 비디오 유닛들로 파티셔닝하는 경우, 주어진 비디오 유닛은, 본 개시물에서, 4 개의 동일 사이즈의 비디오 유닛들의 부모 비디오 유닛으로 지칭된다.
도 4는 점차적으로 더 작은 CU들로 파티셔닝되는 트리블록 (60) 을 예시하는 개념도이다. 도 4의 예에서, 트리블록 (60) 은 13 개의 비-파티셔닝된 CU들 (62) 로 파티셔닝된다. 다른 예들에서, 비디오 인코더 (20) 는 트리블록들을 다른 방법들로 파티셔닝할 수도 있다.
트리블록에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 트리블록에 대한 계층적 쿼드트리 데이터 구조를 생성할 수도 있다. 예를 들어, 트리블록은 쿼드트리 데이터 구조의 루트 노드에 대응할 수도 있다. 비디오 인코더 (20) 가 트리블록을 4 개의 서브 CU들로 파티셔닝하면, 루트 노드는 쿼드트리 데이터 구조에서 4 개의 자식 노드들을 가진다. 자식 노드들의 각각은 서브 CU들 중 하나에 대응한다. 비디오 인코더 (20) 가 서브 CU들 중 하나를 4 개의 서브-서브 CU들로 파티셔닝하면, 그 서브 CU에 대응하는 노드는 4 개의 자식 노드들을 가질 수도 있으며, 그 자식 노드들의 각각은 서브-서브 CU들 중 하나에 대응한다. 쿼드트리 데이터 구조의 각각의 노드는 대응하는 CU에 신택스 데이터를 제공할 수도 있다. 예를 들어, 쿼드트리에서의 노드는 그 노드에 대응하는 CU가 4 개의 서브 CU들로 파티셔닝 (즉, 분할) 되는지의 여부를 나타내는 분할 플래그를 포함할 수도 있다. CU에 대한 신택스 엘리먼트들은 재귀적으로 정의될 수도 있고, CU가 서브 CU들로 분할되는지의 여부에 의존할 수도 있다. 파티셔닝되지 않은 CU는 쿼드트리 데이터 구조에서의 리프 노드에 대응할 수도 있다. 쿼드트리 데이터 구조에서의 리프 노드는 "코딩 노드"라고 지칭될 수도 있다. 트리블록의 인코딩된 버전을 나타내는 데이터는 그 트리블록에 대한 쿼드트리 데이터 구조에 기초한 데이터를 포함할 수도 있다.
도 5는 트리블록을 파티셔닝하는 일 예의 쿼드트리 데이터 구조 (70) 를 도시하는 개념도이다. 도 5의 예에서의 쿼드트리 데이터 구조 (70) 는 도 4에서의 트리블록 (60) 의 파티셔닝들에 대응하지 않는다. 도 5의 예에서, 쿼드트리 데이터 구조 (70) 는 트리블록에 대응하는 루트 노드 (72) 를 포함한다. 비디오 인코더 (20) 는 트리블록을 4 개의 서브 CU들로 파티셔닝한다. 이들 서브 CU들은 쿼드트리 데이터 구조 (70) 의 자식 레벨에서의 노드들 (74) 에 대응한다. 더욱이, 도 5의 예에서, 비디오 인코더 (20) 는 제 2 서브 CU를 4 개의 서브-서브 CU들로 파티셔닝하고 있다. 이들 서브-서브 CU들은 쿼드트리 데이터 구조 (70) 의 손자 레벨에서의 노드들 (76) 에 대응한다. 도 5에서, 비디오 인코더 (20) 는 제 4 서브-서브 CU들을 4 개의 서브-서브-서브 CU들로 파티셔닝하고 있다. 이들 서브-서브-서브 CU들은 쿼드트리 데이터 구조 (70) 의 증손자 레벨에서의 노드들 (78) 에 대응한다.
비디오 인코더 (20) 가 트리블록에 대해 인코딩 동작을 수행하는 경우, 비디오 인코더 (20) 는 z-스캔 순서에 따라 트리블록의 쿼드트리 내의 각각의 레벨에서 트리블록의 CU들의 시퀀스를 결정할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 z-스캔 순서에 따라 자식 레벨에서의 서브 CU들을 시퀀스화하며, z-스캔 순서에 따라 제 1 서브 CU의 서브-서브 CU들을 시퀀스화하며, z-스캔 순서에 따라 제 2 서브 CU의 서브-서브 CU들을 시퀀스화하며, z-스캔 순서에 따라 서브-서브 CU들의 서브-서브-서브 CU들을 시퀀스화하는 등등을 할 수도 있다. 비디오 인코더 (20) 는 그 다음에 CU들의 결정된 시퀀스에 기초하여 트리블록의 각각의 CU에 대해 인코딩 동작들을 수행할 수도 있다. 도 6은 z-스캔 순서에 따라 트리블록 (60) 의 비-파티셔닝된 CU들의 일 예의 시퀀스화를 도시하는 개념도이다. 특히, 각각의 CU 내의 숫자는 CU가 다른 CU들에 대하여 스캔되는 (예컨대, 도 6의 예에서 0부터 12까지의) 순서를 나타낸다.
비-파티셔닝된 CU에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 CU에 대한 예측 데이터를 생성할 수도 있다. 비디오 인코더 (20) 는 PU에 대한 예측 데이터를 생성하기 위해 인트라 예측 또는 인터 예측을 사용할 수도 있다. 비디오 인코더 (20) 가 인트라 예측을 사용하여 CU에 대한 예측 데이터를 생성하는 경우, 비디오 인코더 (20) 는 CU를 포함하는 화상의 디코딩된 화소 값들로부터 CU에 대한 예측 데이터를 도출할 수도 있다. 예를 들면, 비디오 인코더 (20) 는 현재 비디오 유닛에 이웃하는 비디오 유닛의 하나 이상의 화소 값들에 기초하여 현재 비디오 유닛에 대한 예측 데이터를 생성할 수도 있다. 비디오 인코더 (20) 가 인터 예측을 사용하여 CU에 대한 예측 데이터를 생성하는 경우, 비디오 인코더 (20) 는 CU를 포함하는 화상이 아닌 참조 화상들의 디코딩된 값들로부터 CU에 대한 예측 데이터를 도출한다.
비디오 인코더 (20) 가 CU에 대한 예측 데이터를 생성한 후, 비디오 인코더 (20) 는 CU에 대한 잔차 데이터를 생성할 수도 있다. 예를 들면, 비디오 인코더 (20) 는, CU에 대한 예측 데이터에 기초하여, CU에 대한 잔차 데이터를 생성할 수도 있다. CU에 대한 잔차 데이터는 CU에 대한 예측 데이터에서의 화소 값들 및 CU의 원래의 화소 값들 사이의 차이들을 나타낼 수도 있다.
더욱이, 비-파티셔닝된 CU에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 CU에 대해 재귀적 쿼드트리 파티셔닝을 수행하여 CU를 하나 이상의 변환 유닛들 (TUs) 로 파티셔닝할 수도 있다. 본 개시물은 총칭적으로 CU들 및 TU들에 대해 "비디오 유닛들"로서 지칭할 수도 있다. CU의 각각의 PU는 CU의 잔차 데이터의 상이한 부분과 연관될 수도 있다. 비디오 인코더 (20) 가 트리블록 내의 CU들을 시퀀스화하는 것과 유사한 방식으로, 비디오 인코더 (20) 는 CU의 TU들을 z-스캔 순서에 따라 시퀀스화할 수도 있다. 비디오 인코더 (20) 는 z-스캔 순서에 따라 CU의 각각의 TU에 대한 변환 동작들을 수행할 수도 있다. 비디오 인코더 (20) 가 TU에 대한 변환 동작을 수행하는 경우, 비디오 인코더 (20) 는 적어도 부분적으로는 변환을 TU에 연관된 잔차 데이터에 적용하는 것에 의해 변환 계수 블록 (즉, 변환 계수들의 블록) 을 생성할 수도 있다. 예를 들면, 비디오 인코더 (20) 는 하나 이상의 변환 계수 블록들을 생성하기 위해 잔차 데이터에 하나 이상의 변환들을 적용할 수도 있다. 변환 계수 블록은 계수들의 2D 매트릭스일 수도 있다.
변환 계수 블록을 생성한 후, 비디오 인코더 (20) 는 그 변환 계수 블록에 대해 양자화 및 엔트로피 인코딩 동작들을 수행하는 것에 의해 변환 계수 블록의 인코딩된 버전을 생성할 수도 있다. 비디오 인코더 (20) 는 변환 계수 블록의 인코딩된 버전을 비디오 데이터를 위한 비트스트림으로 출력할 수도 있다. 다르게 말하면, 비디오 인코더 (20) 는 변환 계수 블록들을 나타내는 인코딩된 데이터를 포함하는 비트스트림을 출력할 수도 있다.
비디오 디코더 (30) 에 의해 수행되는 비디오 디코딩 프로세스는 비디오 인코더 (20) 에 의해 수행되는 인코딩 프로세스에 일반적으로 역일 수도 있다. 예를 들면, 비디오 디코더 (30) 가 비트스트림을 수신하는 경우, 비디오 디코더 (30) 는 비트스트림에서의 화상들의 각각의 시퀀스에 대해 디코딩 동작들을 수행할 수도 있다. 화상들의 시퀀스에 대해 디코딩 동작을 수행하는 부분으로서, 비디오 디코더 (30) 는 화상들의 시퀀스에서의 각각의 화상에 대해 디코딩 동작을 수행할 수도 있다. 화상에 대해 디코딩 동작을 수행하는 부분으로서, 비디오 디코더 (30) 는 화상의 각각의 슬라이스에 대해 디코딩 동작을 수행할 수도 있다. 슬라이스에 대해 디코딩 동작을 수행하는 부분으로서, 비디오 디코더 (30) 는 래스터 스캔 순서에 따라 슬라이스에서의 각각의 트리블록에 대해 디코딩 동작들을 수행할 수도 있다. 트리블록에 대해 디코딩 동작을 수행하는 부분으로서, 비디오 디코더 (30) 는 z-스캔 순서에 따라 트리블록의 각각의 CU에 대해 디코딩 동작들을 수행할 수도 있다.
몇몇 경우들에서, 비디오 디코더 (30) 가 하나 이상의 이웃하는 비디오 유닛들에 대한 디코딩 동작들을 완료하기까지 비디오 디코더 (30) 는 트리블록 내의 비디오 유닛 (예컨대, CU 또는 TU) 에 대한 일부 디코딩 동작들을 수행하지 못할 수도 있다. 예를 들면, 비디오 디코더 (30) 가 좌측 아래 이웃 비디오 유닛, 좌측 이웃 비디오 유닛, 좌측 위 이웃 비디오 유닛, 위쪽 이웃 비디오 유닛, 및/또는 우측 위 이웃 비디오 유닛을 디코당하기까지 비디오 디코더 (30) 는 비디오 유닛에 대한 일부 디코딩 동작들을 수행하지 못할 수도 있다. 주어진 비디오 유닛의 좌측 아래 이웃 비디오 유닛은 주어진 비디오 유닛의 좌측 아래에서 발생한다. 주어진 비디오 유닛의 좌측 이웃 비디오 유닛은 주어진 비디오 유닛의 좌측에서 발생한다. 주어진 비디오 유닛의 좌측 위 이웃 비디오 유닛은 주어진 비디오 유닛의 좌측 위에서 발생한다. 주어진 비디오 유닛의 위쪽 이웃 비디오 유닛은 주어진 비디오 유닛 위쪽에서 발생한다. 우측 위 이웃 비디오 유닛은 주어진 비디오 유닛의 우측 위에서 발생한다. 비디오 디코더 (30) 가 트리블록들에 대해 디코딩 동작들을 래스터 스캔 순서에 따라 수행하고, 트리블록의 CU들 및 TU들에 대해 디코딩 동작들을 z-스캔 순서에 따라 수행하기 때문에, 비디오 디코더 (30) 는 비디오 유닛에 대해 디코딩 동작들을 수행하기 위해 비디오 유닛의 우측, 우측 아래, 또는 아래의 이웃들의 가용성들을 결정할 필요가 없을 수도 있다.
하나 이상의 이웃하는 비디오 유닛들이 디코딩되기까지 비디오 디코더 (30) 가 주어진 비디오 유닛에 대해 디코딩 동작을 수행하지 못할 다양한 이유들이 있을 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU의 화소 값들을 인코딩하기 위해 인트라 예측을 수행하였을 수도 있다. 인트라 예측을 수행하는 부분으로서, 비디오 인코더 (20) 는 CU에 대한 예측 데이터를 생성하기 위해 이웃하는 CU로부터의 화소 값들을 사용할 수도 있다. 비디오 디코더 (30) 가 CU에 대해 디코딩 동작을 수행하는 경우, 비디오 디코더 (30) 는 이웃하는 CU가 이미 디코딩되었는지의 여부를 결정할 수도 있다. 다르게 말하면, 비디오 디코더 (30) 는 이웃하는 CU가 이용가능한지의 여부를 결정할 수도 있다. 특정 이웃하는 CU가 이용가능하면, 비디오 디코더 (30) 는 이웃하는 CU로부터의 화소 값들을 사용하여 CU의 예측 데이터를 생성할 수도 있다. 그러나, 이웃하는 CU가 이용가능하지 않으면, 비디오 디코더 (30) 는 이웃하는 CU로부터의 화소 값들에 액세스하지 못한다. 따라서, 비디오 디코더 (30) 는 이웃하는 CU로부터의 화소 값들을 사용하는 대신에 디폴트 화소 값들을 사용할 수도 있다.
몇몇 경우들에서, 비디오 인코더 (20) 는 또한 CU의 이웃하는 CU들이 인코딩되었는지의 여부를 결정하는 것을 필요로 할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU에 대한 모션 벡터들을 나타내는 모션 벡터 후보들을 생성하기 위하여 그 CU의 이웃하는 CU가 인코딩되었는지의 여부를 결정하는 것을 필요로 할 수도 있다. 비디오 인코더 (20) 와 비디오 디코더 (30) 는 주어진 비디오 유닛의 이웃하는 비디오 유닛들이 인코딩되었는지 또는 디코딩되었는지 (즉, 이웃하는 비디오 유닛들이 이용가능한지의 여부) 를 결정하기 위해 다양한 알고리즘들을 사용할 수도 있다. 이들 알고리즘들은, 비디오 유닛들, 이를테면 CU들 및 TU들이 쿼드트리 데이터 구조들의 상이한 레벨들 (또는 깊이들) 에 연관될 수 있기 때문에 복잡해질 수도 있다. 다르게 말하면, 비디오 유닛의 이웃은 비디오 유닛과는 상이한 쿼드트리 레벨과 연관될 수도 있다. 따라서, 주어진 비디오 유닛 바로 위에는 실제로 2 개의 비디오 유닛들이 있을 수도 있다. 일부 이전에 제안된 알고리즘들은 복잡하고, 많은 수들의 메모리 액세스들을 필요로 할 수도 있다. 복잡한 알고리즘들을 프로세싱하는 것과 메모리 액세스들을 수행하는 것이 시간 및 전기 에너지를 소모하기 때문에, 비디오 인코더 (20) 또는 비디오 디코더 (30) 가 이러한 복잡한 알고리즘들을 수행하는 것은 바람직하지 않을 수도 있다.
일부 예들에서, 본 개시물의 기법들은 비디오 유닛의 이웃하는 비디오 유닛들이 이미 인코딩되었는지 또는 디코딩되었는지를 결정하는 복잡도를 감소시킬 수도 있다. 설명의 용이함을 위해, 용어 "비디오 코더"는 비디오 인코더 또는 비디오 디코더 중 어느 하나를 말하는데 사용될 수 있다. 본 개시물의 기법들에 따라, 비디오 코더는 룩업 테이블 (LUT) 을 사용하여 비디오 유닛의 이웃들의 가용성들의 검출을 가속화한다. 다양한 예들에서, 비디오 코더는 비디오 유닛의 이웃들의 가용성들의 검출을 가속화하기 위해 상이한 방법들에서 상이한 LUT들을 사용한다. 예를 들어, 비디오 코더는 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들을 비디오 유닛의 이웃들의 가용성들을 특정하는 LUT로의 인덱스로서 사용할 수도 있다. 달리 말하면, 비디오 코더는 비디오 유닛의 이웃들의 가용성들에 기초하여 비디오 유닛의 서브 유닛들의 이웃들의 가용성들을 결정할 수도 있다.
이런 식으로, 비디오 코더는 비디오 데이터를 코딩하는 방법을 수행할 수도 있다. 이 방법에서, 비디오 코더는, 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서 엔트리를 식별할 수도 있다. 이 방법에서, 현재 비디오 유닛은 비디오 데이터의 화상 내에 있다. 식별된 엔트리는 현재 비디오 유닛에 이웃하는 비디오 유닛의 가용성을 나타낼 수도 있다. 그 방법은 또한 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하는 단계를 포함할 수도 있다. 그 코딩 동작은 비디오 인코딩 동작 또는 비디오 디코딩 동작일 수도 있다. 몇몇 경우들에서, 현재 비디오 유닛에 코딩 동작을 수행하는 단계는, 현재 비디오 유닛에 이웃하는 비디오 유닛과 연관된 데이터에 기초하여 현재 비디오 유닛에 코딩 동작을 수행하는 단계를 포함한다. 비디오 코더는 인트라 예측을 수행하거나, 병합/스킵 또는 AMVP 모드들에서의 모션 정보를 획득하거나, 엔트로피 코딩에서의 콘텍스트 정보를 획득하거나, 또는 비디오 인코딩 또는 비디오 디코딩 동작의 다른 부분들을 수행하기 위해 이 방법을 비디오 인코딩 또는 비디오 디코딩 동작 동안에 수행할 수도 있다.
다른 예들에서, 비디오 코더는 래스터 또는 z-스캔 순서에 따라 트리블록 내의 비디오 유닛의 인덱스를 결정한다. 비디오 코더는 그 다음에 이 인덱스를 사용하여 LUT에서의 엔트리를 식별할 수도 있다. 비디오 코더는 식별된 엔트리를 사용하여 비디오 유닛의 이웃들의 가용성들을 결정할 수도 있다. 도 16 및 도 23은, 아래에서 상세히 설명되는데, 이러한 예들에 따라 이웃의 가용성을 결정하는 예의 동작들을 도시한다.
도 7은 비디오 시퀀스를 인코딩하는 비디오 인코더 (20) 의 일 예의 구성을 도시하는 블록도이다. 도 7은 설명의 목적으로 제공되고 본 개시물에서 폭넓게 예시되고 설명된 바와 같은 기법들의 제한으로서 고려되지 않아야 한다. 설명의 목적으로, 본 개시물은 HEVC 코딩의 맥락에서 비디오 인코더 (20) 를 설명한다. 그러나, 본 개시물의 기법들은 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
도 7의 예에서, 비디오 인코더 (20) 는 복수의 기능성 컴포넌트들을 구비한다. 비디오 인코더 (20) 의 기능성 컴포넌트들은 모드 선택 모듈 (100), 모션 추정 모듈 (102), 모션 보상 모듈 (104), 인트라 예측 모듈 (106), 잔차 생성 모듈 (110), 변환 모듈 (112), 양자화 모듈 (114), 엔트로피 인코딩 모듈 (116), 역 양자화 모듈 (118), 역 변환 모듈 (120), 재구성 모듈 (122), 및 디코딩된 화상 버퍼 (124) 를 포함한다. 다른 예들에서, 비디오 인코더 (20) 는 더 많거나, 더 적거나, 또는 상이한 기능성 컴포넌트들을 포함할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 재구성 모듈 (122) 의 출력을 필터링하여 재구성된 비디오로부터 블록형 (blockiness) 아티팩트들을 제거하는 블록화제거 필터를 구비할 수도 있다. 더욱이, 모션 추정 모듈 (102) 및 모션 보상 모듈 (104) 은 고도로 통합될 수도 있지만, 도 7의 예에서 설명을 목적으로 따로따로 나타내어진다.
비디오 인코더 (20) 는 비디오 데이터를 수신할 수도 있다. 다양한 예들에서, 비디오 인코더 (20) 는 다양한 소스들로부터 비디오 데이터를 수신할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 비디오 소스 (18; 도 1) 또는 다른 소스로부터 비디오 데이터를 수신할 수도 있다. 비디오 데이터는 화상들의 시퀀스를 나타낼 수도 있다. 비디오 데이터를 안코딩하기 위해, 비디오 인코더 (20) 는 화상들의 각각의 시퀀스에 대해 인코딩 동작을 수행할 수도 있다. 화상들의 시퀀스에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 화상들의 시퀀스 내의 각각의 화상에 대해 인코딩 동작들을 수행할 수도 있다. 화상에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 그 화상에서의 각각의 슬라이스에 대해 인코딩 동작들을 수행할 수도 있다. 슬라이스에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 그 슬라이스에서의 각각의 트리블록에 대해 인코딩 동작을 수행할 수도 있다.
트리블록에 대해 인코딩 동작을 수행하는 부분으로서, 비디오 인코더 (20) 는 그 트리블록을 하나 이상의 CU들로 파티셔닝할 수도 있다. 일부 예들에서, CU들의 사이즈는 8x8 화소들로부터 최대 64x64 화소들 또는 그 이상을 갖는 트리블록의 사이즈까지의 범위일 수도 있다. 본 개시물에서, "NxN" 및 "N 바이 N"은, 수직 및 수평 치수들의 측면에서의 비디오 블록의 화소 치수들, 예컨대, 16x16 화소들 또는 16 바이 16 화소들을 상호교환적으로 말하는데 이용될 수도 있다. 일반적으로, 16x16 블록은 수직 방향의 16 개 화소들 (y = 16) 및 수평 방향의 16 개 화소들 (x = 16) 을 가질 것이다. 비슷하게, NxN 블록은 일반적으로 수직 방향의 N 개 화소들 및 수평 방향의 N 개 화소들을 가지며, 여기서 N은 음이 아닌 정수 값을 나타낸다. 유사한 표기법이 변환 계수 블록들의 치수들을 나타내는데 이용될 수도 있다.
비디오 인코더 (20) 는 트리블록의 각각의 비-파티셔닝된 CU에 대해 인코딩 동작들을 수행할 수도 있다. 비디오 인코더 (20) 가 비-파티셔닝된 CU에 대해 인코딩 동작을 수행하는 경우, 비디오 인코더 (20) 는 비-파티셔닝된 CU의 인코딩된 버전을 나타내는 데이터를 생성할 수도 있다.
CU에 대한 인코딩 동작을 수행하는 부분으로서, 모션 추정 모듈 (102) 과 모션 보상 모듈 (104) 은 CU에 대해 인터 예측을 수행한다. 다르게 말하면, 모션 추정 모듈 (102) 과 모션 보상 모듈 (104) 은 CU를 포함하는 화상이 아닌 참조 화상들의 디코딩된 화소 값들에 기초하여 CU에 대한 예측 데이터를 생성할 수도 있다. 인터 예측은 시간적 압축을 제공할 수도 있다.
CU에 대해 인터 예측을 수행하기 위해, 비디오 인코더 (20) 는 CU를 하나 이상의 예측 유닛들 (PUs) 로 파티셔닝할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 다양한 PU 사이즈들을 지원할 수도 있다. 특정 CU의 사이즈가 2Nx2N이라고 가정하면, 비디오 인코더 (20) 와 비디오 디코더 (30) 는 2Nx2N, NxN, 2NxN, 또는 Nx2N의 PU 사이즈들을 지원할 수도 있다. 비디오 인코더 (20) 와 비디오 디코더 (30) 는 또한 2NxnU, 2NxnD, nLx2N, 및 nRx2N의 PU 사이즈들에 대한 비대칭 파티셔닝을 지원할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 CU의 측면들과 직각으로 만나지 않는 경계를 따라 CU를 PU들로 파티셔닝할 수도 있다.
모션 추정 모듈 (102) 은 CU의 각각의 PU에 관해 모션 추정 동작을 수행할 수도 있다. 모션 추정 모듈 (102) 이 PU에 관한 모션 추정 동작을 수행하는 경우, 모션 추정 모듈 (102) 은 PU에 대한 하나 이상의 모션 벡터들을 생성한다. 예를 들면, 슬라이스들은 I 슬라이스들, P 슬라이스들, 또는 B 슬라이스들일 수도 있다. 모션 추정 모듈 (102) 과 모션 보상 모듈 (104) 은 CU가 I 슬라이스, P 슬라이스, 또는 B 슬라이스 중 어느 것에 있는지에 의존하여 CU의 PU에 대한 상이한 동작들을 수행할 수도 있다. I 슬라이스에서, 모든 CU들이 인트라 예측된다. 그러므로, CU가 I 슬라이스에 있다면, 모션 추정 모듈 (102) 과 모션 보상 모듈 (104) 은 CU에 대해 인터 예측을 수행하지 않는다.
CU가 P 슬라이스에 있다면, CU를 포함하는 화상은 "리스트 0"이라고 지칭되는 참조 화상들의 리스트와 연관된다. 리스트 0에서의 참조 화상들의 각각은 디코딩 순서에서 후속 화상들의 인터 예측을 위해 사용될 수도 있는 화소 값들을 포함한다. 모션 추정 모듈 (102) 이 P 슬라이스에서의 PU에 관해 모션 추정 동작을 수행하는 경우, 모션 추정 모듈 (102) 은 PU에 대한 참조 샘플을 리스트 0의 참조 화상들에서 검색할 수도 있다. PU의 참조 샘플은 PU의 화소 값들에 가장 밀접하게 대응하는 화소 값들의 세트일 수도 있다. 모션 추정 모듈 (102) 은 참조 화상에서의 화소 값들의 세트가 PU의 화소 값들에 얼마나 밀접하게 대응하는지를 결정하기 위해 다양한 메트릭들을 사용할 수도 있다. 예를 들어, 모션 추정 모듈 (102) 은 절대 차이 합 (sum of absolute difference; SAD), 제곱 차이 합 (sum of square difference; SSD), 또는 다른 차이 메트릭들에 의해 참조 화상에서의 화소 값들의 세트가 PU의 화소 값들에 얼마나 밀접하게 대응하는지를 결정할 수도 있다.
P 슬라이스에서 CU의 PU의 참조 샘플을 식별한 후, 모션 추정 모듈 (102) 은 참조 샘플을 포함하는 리스트 0의 참조 화상을 나타내는 참조 인덱스와, PU 및 참조 샘플 사이의 공간적 변위를 나타내는 모션 벡터를 생성할 수도 있다. 다양한 예들에서, 모션 추정 모듈 (102) 은 모션 벡터들을 가변하는 정밀도들로 생성할 수도 있다. 예를 들어, 모션 추정 모듈 (102) 은 1/4 화소 정밀도, 1/8 화소 정밀도, 또는 다른 분수 (fractional) 화소 정밀도로 모션 벡터들을 생성할 수도 있다. 모션 추정 모듈 (102) 은 참조 인덱스 및 모션 벡터를 엔트로피 인코딩 모듈 (116) 및 모션 보상 모듈 (104) 로 출력할 수도 있다. 모션 보상 모듈 (104) 은 CU의 PU들의 참조 인덱스들 및 모션 벡터들을 사용하여 PU들의 참조 샘플들을 식별하고 취출할 수도 있다. 모션 보상 모듈 (104) 은 그 다음에 PU들의 참조 샘플들의 화소 값들을 사용하여 CU에 대한 예측 데이터를 생성할 수도 있다.
CU가 B 슬라이스에 있으면, CU를 포함하는 화상은 "리스트 0" 및 "리스트 1"이라고 지칭되는, 참조 화상들의 2 개의 리스트들과 연관될 수도 있다. 리스트 0에서의 참조 화상들의 각각은 디코딩 순서에서 후속 화상들의 인터 예측을 위해 사용될 수도 있는 화소 값들을 포함한다. 리스트 1의 참조 화상들은 디코딩 순서에서 화상 전이지만 프레젠테이션 순서에서 화상 뒤에 발생한다. 일부 예들에서, B 슬라이스를 포함하는 화상은 리스트 0 및 리스트 1의 조합인 리스트 조합에 연관될 수도 있다.
더욱이, CU가 B 슬라이스에 있으면, 모션 추정 모듈 (102) 은 CU의 PU들에 대한 단방향 예측 또는 양방향 예측을 수행할 수도 있다. 모션 추정 모듈 (102) 이 PU에 대한 단방향 예측을 수행하는 경우, 모션 추정 모듈 (102) 은 PU에 대한 참조 샘플을 리스트 1의 참조 화상들에서 검색할 수도 있다. 모션 추정 모듈 (102) 은 그 다음에 참조 샘플을 포함하는 리스트 1에서의 참조 화상을 나타내는 참조 인덱스와 PU 및 참조 샘플 사이의 공간적 변위를 나타내는 모션 벡터를 생성할 수도 있다. 모션 추정 모듈 (102) 은 CU의 PU들에 대한 참조 인덱스들 및 모션 벡터를 엔트로피 인코딩 모듈 (116) 및 모션 보상 모듈 (104) 로 출력할 수도 있다. 모션 보상 모듈 (104) 은 CU의 PU들의 참조 인덱스들 및 모션 벡터들을 사용하여 PU들의 참조 샘플들을 식별하고 취출할 수도 있다. 모션 보상 모듈 (104) 은 그 다음에 PU들의 참조 샘플들의 화소 값들을 사용하여 CU에 대한 예측 데이터를 생성할 수도 있다.
모션 추정 모듈 (102) 이 PU에 대한 양방향 예측을 수행하는 경우, 모션 추정 모듈 (102) 은 PU에 대한 참조 샘플을 리스트 0의 참조 화상들에서 검색할 수도 있고 또한 PU에 대한 다른 참조 샘플을 리스트 1의 참조 화상들에서 검색할 수도 있다. 모션 추정 모듈 (102) 은 그 다음에 참조 샘플들을 나타내는 참조 인덱스들과, 참조 샘플들 및 PU 사이의 공간적 변위들을 나타내는 모션 벡터들을 생성할 수도 있다. 모션 추정 모듈 (102) 은 그 참조 인덱스들 및 모션 벡터들을 엔트로피 인코딩 모듈 (116) 및 모션 보상 모듈 (104) 로 출력할 수도 있다. 모션 보상 모듈 (104) 은 그 참조 인덱스들 및 모션 벡터들을 사용하여 PU들의 참조 샘플을 식별하고 취출할 수도 있다. 모션 보상 모듈 (104) 은 그 다음에 CU의 PU들의 참조 샘플들에서의 화소 값들로부터 CU의 예측 데이터의 화소 값들을 보간할 수도 있다.
일부 예들에서, 모션 추정 모듈 (102) 은, 모션 보상 모듈 (104) 또는 비디오 디코더 (30) 가 CU의 PU들의 모션 벡터들을 예측할 수도 있는 데이터를 생성할 수도 있다. 이러한 예들에서, 모션 보상 모듈 (104) 또는 비디오 디코더 (30) 는 이웃하는 CU들로부터의 데이터 및 모션 데이터를 사용하여 CU의 PU들의 모션 벡터들을 예측할 수도 있다. 그러나, 이웃하는 CU가 이용가능하지 않으면, 모션 추정 모듈 (102) 은 이러한 데이터를 생성하기 위해 이웃하는 CU의 모션 벡터들을 사용하지 못할 수도 있다. 따라서, 모션 추정 모듈 (102) 은 이웃하는 CU들의 가용성들을 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다. 이웃하는 CU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 비디오 인코더 (20) 가 이웃하는 CU를 아직 인코딩하지 않았다면, 이웃하는 CU가 존재하지 않는다면, 이웃하는 CU가 CU와는 상이한 슬라이스에 있다면, 또는 그렇지 않고 비디오 인코더 (20) 가 CU의 PU들의 모션 벡터들을 예측하기 위해 이웃하는 CU에 연관된 데이터를 사용할 수 없다면, 이웃하는 CU는 이용불가능할 수도 있다.
CU에 대해 인코딩 동작을 수행하는 부분으로서, 인트라 예측 모듈 (106) 은 CU에 대해 인트라 예측을 수행할 수도 있다. 다르게 말하면, 인트라 예측 모듈 (106) 은 CU와 동일한 슬라이스에서의 디코딩된 화소 값들에 기초하여 CU에 대한 예측 데이터를 생성할 수도 있다. 인트라 예측은 공간적 압축을 제공할 수도 있다.
CU에 대해 인트라 예측을 수행하기 위해, 인트라 예측 모듈 (106) 은 CU에 대한 예측 데이터의 다수의 세트들을 생성하기 위해 다수의 인트라 예측 모드들을 사용할 수도 있다. 인트라 예측 모듈 (106) 이 CU에 대한 예측 데이터의 세트를 생성하기 위해 인트라 예측 모드를 사용하는 경우, 인트라 예측 모듈 (106) 은 이웃하는 CU들로부터의 화소 값들을 인트라 예측 모드에 연관된 방향 및/또는 경사 (gradient) 로 CU들을 가로질러 확장할 수도 있다. CU들 및 트리블록들에 대한 좌측에서 우측으로, 상단에서 하단으로의 (즉, z-스캔) 인코딩 순서를 가정하면, 이웃하는 CU들은 현재 CU의 위, 위 및 우측, 위 및 좌측, 또는 좌측에 있을 수도 있다. 인트라 예측 모듈 (106) 은 다양한 수의 인트라 예측 모드들, 예컨대, 33 개의 방향성 인트라 예측 모드들을, CU의 사이즈에 의존하여 사용할 수도 있다.
이웃하는 CU가 이용불가능하면, 인트라 예측 모듈 (106) 은 CU에 대한 예측 데이터를 생성하기 위해 이웃하는 CU의 화소 값들을 이용하지 못하게 될 수도 있다. 이웃하는 CU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 비디오 인코더 (20) 가 이웃하는 CU를 아직 인코딩하지 않았다면, 이웃하는 CU가 존재하지 않는다면, 이웃하는 CU가 CU와는 상이한 슬라이스에 있다면, 또는 그렇지 않고 예측 모듈 (106) 이 CU의 예측 데이터를 생성하기 위해 이웃하는 CU의 화소 값들을 사용할 수 없다면, 이웃하는 CU는 이용불가능할 수도 있다. 따라서, 인트라 예측 모듈 (106) 은 이웃하는 CU가 이용가능한지의 여부를 결정하는 것을 필요로 할 수도 있다. 일부 예들에서, 인트라 예측 모듈 (106) 은 이웃하는 CU들의 가용성들을 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다.
일부 예들에서, 이웃하는 CU가 존재하지 않는다고 인트라 예측 모듈 (106) 이 결정하면, 인트라 예측 모듈 (106) 은 이웃하는 CU의 실제 화소 값들 대신에 디폴트 화소 값들을 사용하여 CU의 예측 데이터를 생성할 수도 있다. 더욱이, 일부 예들에서, 이웃하는 CU가 존재하지 않는다고 인트라 예측 모듈 (106) 이 결정하면, 인트라 예측 모듈 (106) 은 이웃하는 CU의 실제 화소 값들 대신에 합성된 화소 값들을 사용하여 CU의 예측 데이터를 생성할 수도 있다. 인트라 예측 모듈 (106) 은 이용가능한 이웃하는 CU들의 화소 값들에 기초하여 합성된 화소 값들을 생성할 수도 있다.
인트라 예측 모듈 (106) 은 CU에 대한 예측 데이터의 세트들 중 하나를 선택할 수도 있다. 다양한 예들에서, 인트라 예측 모듈 (106) 은 CU에 대한 예측 데이터의 세트를 다양한 방법들로 선택할 수도 있다. 예를 들어, 인트라 예측 모듈 (106) 은 예측 데이터의 세트들에 대한 왜곡 레이트들을 계산하고 최저 왜곡 레이트를 가지는 예측 데이터의 세트를 선택하는 것에 의해 CU에 대한 예측 데이터의 세트를 선택할 수도 있다.
모드 선택 모듈 (100) 은 CU에 대한 예측 데이터를 CU에 대한 모션 보상 모듈 (104) 에 의해 생성된 예측 데이터 또는 CU에 대한 인트라 예측 모듈 (106) 에 의해 생성된 예측 데이터 중에서 선택할 수도 있다. 일부 예들에서, 모드 선택 모듈 (100) 은 예측 데이터의 세트들의 에러 (즉, 왜곡) 에 기초하여 CU에 대한 예측 데이터를 선택한다. 일부 예들에서, 모드 선택 모듈 (100) 은 결과적인 코딩된 데이터에서 코딩 비트들의 수 대 왜곡이 균형을 유지하는 레이트-왜곡 메트릭에 기초하여 CU에 대한 예측 데이터를 선택한다.
모드 선택 모듈 (100) 이 CU에 대한 예측 데이터를 선택한 후, 잔차 생성 모듈 (110) 은 CU에 대한 예측된 데이터에 기초하여 CU에 대한 잔차 데이터를 생성하는 잔차 생성 동작을 수행할 수도 있다. CU에 대한 잔차 데이터는 CU에 대한 원래의 화소 값들 및 CU에 대한 예측 데이터 사이의 화소 값들에서의 차이들을 나타낼 수도 있다. 일부 예들에서, 잔차 생성 동작을 수행하는 것은 CU의 화소 값들로부터 CU의 예측 데이터를 감산하는 것을 포함할 수도 있다. CU의 잔차 데이터는 CU에서의 화소들의 상이한 화소 성분들에 대응하는 2D 잔차 블록들을 포함할 수도 있다. 예를 들어, 잔차 데이터는 CU의 예측 데이터에서의 화소들의 휘도 성분들 및 CU의 원래의 화소들에서의 화소들의 휘도 성분들 사이의 차이들에 대응하는 잔차 블록을 포함할 수도 있다. 덧붙여서, CU의 잔차 데이터는 CU의 예측 데이터에서의 화소들의 색차 성분들 및 CU의 원래의 화소들의 색차 성분들 사이의 차이들에 대응하는 잔차 블록들을 포함할 수도 있다.
위에서 설명된 바와 같이, CU는 하나 이상의 TU들을 가질 수도 있다. CU의 각각의 TU는 CU의 잔차 데이터의 상이한 부분에 대응할 수도 있다. CU의 TU들의 사이즈들은 CU의 PU들의 사이즈들에 기초할 수도 있거나 또는 기초하지 않을 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 재귀적 쿼드트리 파티셔닝을 사용하여 CU를 TU들로 세분할 수도 있다. 결과적 데이터 구조는 "잔차 쿼드 트리" (RQT) 라고 지칭될 수도 있다. RQT에서의 각각의 노드는 CU의 TU에 대응할 수도 있다. 본 개시물의 기법들에 따라 이웃의 가용성을 결정하는 경우, 비디오 코더는 RQT를 트리블록의 CU들의 쿼드트리의 확장으로서 사용할 수도 있다.
변환 모듈 (112) 은 TU에 대응하는 잔차 데이터에 변환을 적용하는 것에 의해 CU의 각각의 비-파티셔닝된 TU에 대한 변환 계수 블록들을 생성할 수도 있다. 예를 들면, 변환 모듈 (112) 은 변환 계수 블록을 생성하기 위해 잔차 데이터의 특정 부분에 변환을 적용할 수도 있다. 변환 계수 블록들의 각각은 계수들의 2D 매트릭스일 수도 있다. 다양한 예들에서, 변환 모듈 (112) 은 다양한 변환들을 TU에 대응하는 잔차 데이터에 적용할 수도 있다. 예를 들어, 변환 모듈 (112) 은 이산 코사인 변환 (DCT), 방향성 변환, 또는 개념적으로 유사한 변환을 적용할 수도 있다.
변환 모듈 (112) 이 TU에 대한 변환 계수 블록을 생성한 후, 양자화 모듈 (114) 은 변환 계수 블록에서의 계수들을 양자화할 수도 있다. 양자화는 변환 계수 블록에서의 계수들이 그 계수들을 나타내는데 이용된 데이터의 양을 가능한 한 줄이도록 양자화되어서, 추가의 압축을 제공하는 프로세스를 일반적으로 말한다. 양자화는 계수들의 일부 또는 전부에 연관된 비트 깊이를 감소시킬 수도 있다. 예를 들어, n-비트 값은 양자화 동안에 m-비트 값으로 내림될 (rounded down) 수도 있으며, 여기서 n 은 m보다 크다.
양자화 모듈 (114) 이 변환 계수 블록을 양자화한 후, 엔트로피 인코딩 모듈 (116) 은 변환 계수 블록에 대해 엔트로피 인코딩 동작을 수행할 수도 있다. 다양한 예들에서, 비디오 인코더 (20) 는 변환 계수 블록에 대해 다양한 유형들의 엔트로피 인코딩 동작들을 수행할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 그 변환 계수 블록에 대해 콘텍스트 적응 가변 길이 코딩 (CAVLC) 동작, 콘텍스트 적응 이진 산술 코딩 (CABAC) 동작, 신택스 기반 콘텍스트 적응 이진 산술 코딩 (SBAC) 동작, 확률 간격 파티셔닝 엔트로피 (PIPE) 코딩 동작, 또는 다른 유형의 엔트로피 인코딩 동작을 수행할 수도 있다. 비디오 인코더 (20) 는 또한 비디오 데이터에 연관된 신택스 엘리먼트들에 대해 엔트로피 인코딩 동작들을 수행할 수도 있다.
CABAC를 수행하기 위해, 엔트로피 인코딩 모듈 (116) 은 콘텍스트 모델을 송신될 심볼에 할당할 수도 있다. 그 콘텍스트는, 예를 들어, 심볼의 이웃 값들이 영이 아닌지의 여부에 관련될 수도 있다. CAVLC를 수행하기 위해, 비디오 인코더 (20) 는 송신될 심볼에 대한 가변 길이 코드를 선택할 수도 있다. VLC에서의 코드워드들은 비교적 짧은 코드들이 더 가능한 (probable) 심볼들에 대응하는 반면 상대적으로 긴 코드들이 덜 가능한 심볼들에 대응하도록 구성될 수도 있다. 이런 식으로, VLC의 사용은 송신될 각각의 심볼에 대한 동일 길이 코드워드들을 이용하여 비트 절약을 달성할 수도 있다. 확률 결정은 심볼에 할당된 콘텍스트에 기초할 수도 있다.
일부 예들에서, 엔트로피 인코딩 모듈 (116) 이 변환 계수 블록에 대해 엔트로피 인코딩 동작을 수행하는 경우, 엔트로피 인코딩 모듈 (116) 은 그 변환 계수 블록에 연관된 TU에 이웃하는 TU에 연관된 데이터에 기초하여 그 변환 계수 블록을 인코딩하기 위한 하나 이상의 콘텍스트 모델들을 선택할 수도 있다. 그러나, 이웃하는 TU가 이용불가능하면, 엔트로피 인코딩 모듈 (116) 은 변환 계수 블록을 인코딩하기 위한 콘텍스트 모델을 선택하지 못할 수도 있다. 이웃하는 CU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 엔트로피 인코딩 모듈 (116) 이 이웃하는 TU에 대해 엔트로피 인코딩 동작을 아직 수행하지 않았으면 또는 아니면 엔트로피 인코딩 모듈 (116) 이 이웃하는 TU에 대해 엔트로피 인코딩 동작을 수행하는 것에 의해 생성된 데이터에 액세스할 수 없으면, 이웃하는 TU는 이용불가능할 수도 있다. 따라서, 엔트로피 인코딩 모듈 (116) 은 이웃하는 TU가 이용가능한지의 여부를 결정할 수도 있다. 일부 이러한 예들에서, 엔트로피 인코딩 모듈 (116) 은 TU에 이웃하는 TU들의 가용성들을 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다. 유사한 고려사항들이 CU의 다른 신택스 엘리먼트들에 대해 엔트로피 인코딩 동작들을 수행하는 경우에 적용할 수도 있다.
역 양자화 모듈 (118) 과 역 변환 모듈 (120) 은 역 양자화 및 역 변환들을 변환 계수 블록에 각각 적용하여, 변환 계수 블록으로부터 코딩 유닛에 대한 잔차 데이터를 디코딩할 수도 있다. 재구성 모듈 (122) 은 디코딩된 화상 버퍼 (124) 에서의 저장을 위한 재구성된 비디오 블록을 생성하기 위해 재구성된 잔차 데이터를 모션 보상 모듈 (104) 또는 인트라 예측 모듈 (106) 에 의해 생성된 예측 데이터에 가산할 수도 있다. 다르게 말하면, 재구성 모듈 (122) 은 비디오 유닛에 대한 예측 데이터 및 비디오 유닛에 대한 잔차 데이터에 기초하여 비디오 유닛에 대한 화소 값들을 재구성할 수도 있다. 모션 추정 모듈 (102) 과 모션 보상 모듈 (104) 은 후속 화상들의 CU들에 대해 인터 예측을 수행하기 위해 재구성된 비디오 블록을 포함하는 참조 화상을 사용할 수도 있다. 비디오 디코더 (30) 는 현재 비디오 유닛에 대한 화소 값들을 포함하는 화상을 출력할 수도 있다.
비디오 인코더 (20) 가 변환 계수 블록에 대해 엔트로피 인코딩을 수행한 후, 비디오 인코더 (20) 는 비디오 데이터를 위해 비트스트림에서의 엔트로피 인코딩된 변환 계수 블록을 나타내는 데이터를 포함할 수도 있다. 그 비트스트림은 코딩된 화상들의 표현 및 연관된 데이터를 형성하는 비트들의 시퀀스일 수도 있다. 그 비트스트림은 네트워크 추상화 계층 (NAL) 유닛들의 시퀀스를 포함할 수도 있다. NAL 유닛들의 각각은 NAL 유닛에서의 데이터의 유형의 표시 및 그 데이터를 담은 바이트들을 포함하는 신택스 구조일 수도 있다. 예를 들어, NAL 유닛은, PPS를 나타내는 데이터, 코딩된 슬라이스, 보충적 향상 정보 (supplemental enhancement information; SEI), 액세스 유닛 디리미터 (delimiter), 필러 데이터, 또는 다른 유형의 데이터를 포함할 수도 있다. NAL 유닛의 데이터는 에뮬레이션 방지 비트들이 산재된 원시 바이트 시퀀스 패이로드 (RBSP) 의 형태일 수도 있다. RBSP는 NAL 유닛 내에 캡슐화되는 정수 개수의 바이트들을 포함하는 신택스 구조일 수도 있다.
도 8은 본 개시물의 기법들을 구현하도록 구성되는 비디오 디코더 (30) 의 일 예의 구성을 도시하는 블록도이다. 도 8은 설명의 목적으로 제공되고 본 개시물에서 폭넓게 예시되고 설명된 바와 같은 기법들에 대해 제한하고 있지는 않다. 설명의 목적으로, 본 개시물은 HEVC 코딩의 맥락에서 비디오 디코더 (30) 를 설명한다. 그러나, 본 개시물의 기법들은 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
도 8의 예에서, 비디오 디코더 (30) 는 복수의 기능성 컴포넌트들을 구비한다. 비디오 디코더 (30) 의 기능성 컴포넌트들은 엔트로피 디코딩 모듈 (150), 모션 보상 모듈 (152), 인트라 예측 모듈 (154), 역 양자화 모듈 (156), 역 변환 모듈 (158), 재구성 모듈 (160), 및 디코딩된 화상 버퍼 (162) 를 구비한다. 일부 예들에서, 비디오 디코더 (30) 는 도 7의 비디오 인코더 (20) 에 관해 설명된 인코딩 패스 (pass) 에 일반적으로 역인 디코딩 패스를 수행할 수도 있다. 다른 예들에서, 비디오 디코더 (30) 는 더 많거나, 더 적거나, 또는 상이한 기능성 컴포넌트들을 포함할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 재구성 모듈 (160) 의 출력을 필터링하여 재구성된 비디오로부터 블록형 아티팩트들을 제거하는 블록화제거 필터를 구비할 수도 있다.
비디오 디코더 (30) 는 인코딩된 비디오 데이터를 포함하는 비트스트림을 수신할 수도 있다. 비디오 디코더 (30) 가 비트스트림을 수신하는 경우, 비디오 디코더 (30) 는 비트스트림에 대해 디코딩 동작들을 수행하여 비디오 데이터의 각각의 화상에서 화소들의 값들을 재구성할 수도 있다. 비트스트림에 대해 디코딩 동작을 수행하는 부분으로서, 비디오 디코더 (30) 는 비디오 데이터에서의 각각의 화상의 각각의 트리블록에 대해 디코딩 동작들을 수행할 수도 있다. 비디오 디코더 (30) 는 화상 내의 트리블록들에 대해 디코딩 동작들을 래스터 스캔 순서로 수행할 수도 있다. 트리블록에 대해 디코딩 동작들을 수행하는 부분으로서, 비디오 디코더 (30) 는, 트리블록의 쿼드트리의 각각의 레벨에서, 트리블록의 CU들에 대해 디코딩 동작들을 그 레벨에서 z-스캔 순서로 수행할 수도 있다.
비-파티셔닝된 CU에 대해 디코딩 동작들을 수행하는 부분으로서, 비디오 디코더 (30) 는, 비-파티셔닝된 CU의 잔차 쿼드트리의 각각의 레벨에서, CU의 각각의 TU에 대해 디코딩 동작을 z-스캔 순서로 수행할 수도 있다. CU의 각각의 TU에 대한 디코딩 동작을 수행함으로써, 비디오 디코더 (30) 는 CU의 잔차 데이터를 재구성할 수도 있다.
비-파티셔닝된 TU에 대한 디코딩 동작을 수행하는 부분으로서, 엔트로피 디코딩 모듈 (150) 은 TU에 연관된 변환 계수 블록의 인코딩된 버전에 대해 디코딩 동작을 수행할 수도 있다. 일부 예들에서, 엔트로피 디코딩 모듈 (150) 은 CABAC를 사용하여 변환 계수 블록들을 디코딩할 수도 있다. 이러한 예들에서, 엔트로피 디코딩 모듈 (150) 은 이웃하는 TU에 연관된 변환 계수 블록에 대해 엔트로피 디코딩 동작들을 수행하는 것에 의해 생성된 데이터에 기초하여 콘텍스트 모델을 선택할 수도 있다. 엔트로피 디코딩 모듈 (150) 은 선택된 콘텍스트 모델을 사용하여 변환 계수 블록을 디코딩할 수도 있다.
그러나, 엔트로피 디코딩 모듈 (150) 은 이웃하는 TU가 이용불가능하면 이웃하는 TU에 연관된 변환 계수 블록에 대해 엔트로피 디코딩 동작들을 수행하는 것에 의해 생성된 데이터에 기초하여 콘텍스트 모델을 선택하지 못할 수도 있다. 이웃하는 TU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 엔트로피 디코딩 모듈 (150) 이 이웃하는 TU에 대한 엔트로피 디코딩 동작을 아직 수행하지 않았으면 또는 아니면 엔트로피 디코딩 모듈 (150) 이 이웃하는 TU에 대한 엔트로피 디코딩 동작을 수행하는 것에 의해 생성된 데이터를 사용할 수 없으면, 이웃하는 TU는 이용불가능할 수도 있다. 따라서, 엔트로피 디코딩 모듈 (150) 은 이웃하는 TU가 이용가능한지의 여부를 결정할 수도 있다. 이러한 예들에서, 엔트로피 디코딩 모듈 (150) 은 이웃하는 TU가 이용가능한지의 여부를 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다. 이런 식으로, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는, 주어진 비디오 유닛에 이웃하는 비디오 유닛과 연관된 데이터에 기초하여 콘텍스트 모델을 선택하고, 선택된 콘텍스트 모델에 기초하여, 주어진 비디오 유닛과 연관된 데이터에 엔트로피 코딩 동작을 수행할 수도 있다.
더욱이, 비-파티셔닝된 TU에 대해 디코딩 동작을 수행하는 부분으로서, 역 양자화 모듈 (156) 은 TU에 연관된 변환 계수 블록을 역 양자화, 즉, 디퀀타이즈(de-quantize)할 수도 있다. 역 양자화 모듈 (156) 은 HEVC에 대해 제안된 또는 H.264 디코딩 표준에 의해 정의된 역 양자화 프로세스들에 유사한 방식으로 변환 계수 블록을 역 양자화할 수도 있다. 역 양자화 모듈 (156) 은 변환 계수 블록의 CU에 대한 비디오 인코더 (20) 에 의해 계산된 양자화 파라미터 (QP) 를 사용하여 양자화 정도와, 마찬가지로, 적용할 역 양자화 모듈 (156) 을 위한 역 양자화 정도를 결정할 수도 있다.
역 양자화 모듈 (156) 이 변환 계수 블록을 역 양자화한 후, 역 변환 모듈 (158) 은 변환 계수 블록에 연관된 TU에 대한 잔차 데이터를 생성할 수도 있다. 역 변환 모듈 (158) 은 적어도 부분적으로는 역 변환을 변환 계수 블록에 적용하는 것에 의해 TU에 대한 잔차 데이터를 생성할 수도 있다. 예를 들어, 역 변환 모듈 (158) 은 역 DCT, 역 정수 변환, 역 카루넨-뢰베 변환 (Karhunen-Loeve transform; KLT), 역 회전 변환, 역 방향성 변환, 또는 다른 역 변환을 변환 계수 블록에 적용할 수도 있다. 일부 예들에서, 역 변환 모듈 (158) 은 비디오 인코더 (20) 로부터의 시그널링에 기초하여 변환 계수 블록에 적용하는 역 변환을 결정할 수도 있다. 이러한 예들에서, 역 변환 모듈 (158) 은 변환 계수 블록에 연관된 트리블록에 대한 쿼드트리의 루트 노드에서의 시그널링된 변환에 기초하여 역 변환을 결정할 수도 있다. 다른 예들에서, 역 변환 모듈 (158) 은 하나 이상의 코딩 특성들, 이를테면 블록 사이즈, 코딩 모드 등으로부터 역 변환을 유추할 수도 있다. 일부 예들에서, 역 변환 모듈 (158) 은 캐스케이드식 (cascaded) 역 변환을 적용할 수도 있다.
모션 보상 모듈 (152) 은 모션 보상을 수행하여 CU에 대한 예측 데이터를 생성할 수도 있다. 모션 보상을 수행하기 위해, 모션 보상 모듈 (152) 은 CU의 PU들에 대한 모션 정보를 그 CU에 이웃하는 CU들의 PU들의 모션 정보에 기초하여 예측할 수도 있다. 일부 예들에서, 모션 보상 모듈 (152) 은 PU들의 모션 정보를 병합/스킵 모드 또는 AMVP 모드를 사용하여 예측할 수도 있다. 모션 보상 모듈 (152) 은 PU들에 대한 참조 샘플을 식별하기 위해 CU의 PU들에 대한 모션 정보를 사용할 수도 있다. 모션 보상 모듈 (152) 은 그 다음에 CU에 대한 예측 데이터를 생성하기 위해 PU들에 대한 참조 샘플을 사용할 수도 있다.
그러나, 모션 보상 모듈 (152) 은 이웃하는 CU가 이용불가능하면 이웃하는 CU의 PU의 모션 정보에 기초하여 CU의 PU에 대한 모션 정보를 예측할 수 없을 수도 있다. 이웃하는 CU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 비디오 디코더 (30) 가 이웃하는 CU를 아직 디코딩하지 않았다면, 이웃하는 CU가 존재하지 않는다면, 이웃하는 CU가 CU와는 상이한 슬라이스에 있다면, 또는 그렇지 않고 모션 보상 모듈 (152) 이 CU의 PU들에 대한 모션 벡터들을 예측하기 위해 이웃하는 CU에 연관된 데이터를 사용할 수 없다면, 이웃하는 CU는 이용불가능할 수도 있다. 따라서, 모션 보상 모듈 (152) 은 이웃하는 CU들이 이용가능한지의 여부를 결정할 수도 있다. 모션 보상 모듈 (152) 은 이웃하는 CU들이 이용가능한지의 여부를 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다.
일부 예들에서, 모션 보상 모듈 (152) 은 보간 필터들에 기초하여 보간을 수행함으로써 CU에 대한 예측 데이터를 리파인 (refine) 할 수도 있다. 서브-화소 정밀도를 갖는 모션 보상을 위해 사용될 보간 필터들에 대한 식별자들은 신택스 엘리먼트들에 포함될 수도 있다. 모션 보상 모듈 (152) 은 CU의 예측 데이터의 생성 동안에 비디오 인코더 (20) 에 의해 사용된 동일한 보간 필터들을 사용하여 참조 블록의 부 정수 화소들에 대한 보간된 값들을 계산할 수도 있다. 모션 보상 모듈 (152) 은 비디오 인코더 (20) 에 의해 사용된 보간 필터들을 수신된 신택스 정보에 따라 결정하고 그 보간 필터들을 사용하여 예측 데이터를 생성할 수도 있다.
인트라 예측 모듈 (154) 은 CU에 대한 예측 데이터를 생성하기 위해 인트라 예측을 수행할 수도 있다. 예를 들어, 인트라 예측 모듈 (154) 은 비트스트림에서의 신택스 엘리먼트들에 기초하여 CU에 대한 인트라 예측 모드를 결정할 수도 있다. 인트라 예측 모듈 (154) 은 그 다음에 이웃하는 CU들의 화소 값들에 기초하여 CU에 대한 예측 데이터 (예컨대, 예측된 화소 값들) 를 생성하기 위해 인트라 예측 모드를 사용할 수도 있다.
그러나, 인트라 예측 모듈 (154) 은 이웃하는 CU가 이용불가능하면 이웃하는 CU의 화소 값들을 사용하지 못할 수도 있다. 이웃하는 CU는 다양한 이유들로 이용불가능할 수도 있다. 예를 들어, 비디오 디코더 (30) 가 이웃하는 CU를 아직 디코딩하지 않았다면, 이웃하는 CU가 존재하지 않는다면, 이웃하는 CU가 CU와는 상이한 슬라이스에 있다면, 또는 그렇지 않고 예측 모듈 (154) 이 CU의 예측 데이터를 생성하기 위해 이웃하는 CU의 화소 값들을 사용할 수 없다면, 이웃하는 CU는 이용불가능할 수도 있다. 따라서, 인트라 예측 모듈 (154) 은 이웃하는 CU가 이용가능한지의 여부를 결정할 수도 있다. 인트라 예측 모듈 (154) 은 이웃하는 CU들이 이용가능한지의 여부를 결정하기 위해 본 개시물의 기법들을 사용할 수도 있다. CU의 인트라 예측 모드가 이용불가능한 이웃하는 CU의 화소 값들의 사용을 수반하면, 인트라 예측 모듈 (154) 은 이용불가능한 이웃하는 CU의 화소 값들을 사용하는 대신에 디폴트 또는 합성된 화소 값들을 사용하여 CU의 예측 데이터를 생성할 수도 있다.
모션 보상 모듈 (152) 과 인트라 예측 모듈 (154) 은, HEVC 예에서, 인코딩된 비디오 시퀀스의 화상(들)을 인코딩하는데 사용된 트리블록들의 사이즈들을 결정하기 위한 (예컨대, 쿼드트리에 의해 제공된) 신택스 정보, 인코딩된 비디오 시퀀스의 화상의 각각의 CU가 분할되는 방법 (및 비슷하게, 서브 CU들이 분할되는 방법) 을 서술하는 분할 정보, 각각의 CU가 인코딩되는 방법을 표시하는 모드들 (예컨대, 인트라 예측 또는 인터 예측, 인트라 예측의 경우, 인트라 예측 인코딩 모드), 각각의 인터 예측된 CU에 대한 하나 이상의 참조 프레임들 (및/또는 그 참조 프레임들에 대한 식별자들을 포함하는 참조 화상 리스트들), 및 인코딩된 비디오 시퀀스를 디코딩하기 위한 다른 정보의 일부를 이용할 수도 있다.
재구성 모듈 (160) 은 CU의 잔차 데이터 및 그 CU에 대한 예측 데이터를 사용하여 CU에 대한 화소 값들을 재구성할 수도 있다. 일부 예들에서, 비디오 디코더 (30) 는 블록화제거 필터를 적용하여 슬라이스 또는 화상의 재구성된 화소 값들의 필터로부터 블록형 아티팩트들을 제거할 수도 있다. 디코딩된 화상 버퍼 (162) 는 비디오 데이터의 화상들에 대한 디코딩된 화소 값들을 저장할 수도 있다. 디코딩된 화상 버퍼 (162) 는 후속 모션 보상, 인트라 예측, 및 디스플레이 디바이스, 이를테면 도 1의 디스플레이 디바이스 (32) 상의 프리젠테이션을 위해 참조 화상들을 제공할 수도 있다.
도 9는 현재 비디오 유닛의 이웃들의 가용성들을 결정하기 위한 일 예의 재귀적 동작 (200) 을 도시하는 흐름도이다. 본 개시물의 다른 곳에서 설명되는 바와 같이, 비디오 코더, 이를테면 비디오 인코더 (20) 및 비디오 디코더 (30) 는, 이웃하는 비디오 유닛들이 다양한 이유들에 대해 이용가능한지의 여부를 결정할 수도 있다. 비디오 코더는 이러한 이유들 중 임의의 것에 대해 동작 (200) 을 수행할 수도 있다. 예를 들어, 비디오 코더가 비디오 인코더이면, 비디오 코더는 CU의 PU에 대한 모션 정보를 결정하는 경우에 동작 (200) 을 수행할 수도 있다. 이 예에서, 비디오 코더는 이웃하는 CU들의 가용성들을 결정하고 이용가능한 이웃하는 CU들 중 하나의 이웃하는 CU의 PU의 모션 정보에 기초하여 PU의 모션 정보를 시그널링할 수도 있다. 다른 예에서, 비디오 코더가 비디오 디코더이면, 비디오 코더는 CU에 대한 인트라 예측 동작을 수행하는 경우에 동작 (200) 을 수행할 수도 있다. 이 예에서, 비디오 코더는 이웃하는 CU들의 가용성들을 결정하고, CU의 인트라 예측 모드가 이용불가능한 CU의 화소 값들의 사용을 수반하면 디폴트 또는 합성된 화소 값들을 사용할 수도 있다.
비디오 코더 (이를테면 비디오 인코더 (20) 또는 비디오 디코더 (30)) 가 현재 비디오 유닛의 이웃하는 비디오 유닛들의 가용성들을 결정하는 경우, 비디오 코더는 현재 비디오 유닛이 트리블록인지의 여부를 결정한다 (202). 현재 비디오 유닛이 트리블록이면 (202의 "예"), 비디오 코더는 현재 비디오 유닛의 수평 및 수직 인덱스들과 현재 비디오 유닛을 포함하는 슬라이스에 관한 정보에 기초하여, 이웃하는 비디오 유닛들의 가용성들을 결정할 수도 있다 (204). 예를 들면, 현재 비디오 유닛이 트리블록이라고 결정한 후, 비디오 코더는 화상 내의 현재 비디오 유닛의 포지션에 기초하여 현재 비디오 유닛의 이웃의 가용성을 결정할 수도 있다.
예를 들어, 현재 비디오 유닛이 트리블록이면, 현재 비디오 유닛은 1의 수평 인덱스 및 1의 수직 인덱스를 가질 수도 있다, 즉, 현재 비디오 유닛은 좌표들 (1, 1) 에 있다. 이 예에서, 트리블록은 래스터 스캔 순서에 따라 코딩될 수도 있다. 그러므로, 현재 비디오 유닛의 좌측 위의 트리블록 (즉, 좌측 위 이웃), 현재 비디오 유닛 위쪽의 트리블록 (즉, 위쪽 이웃), 현재 비디오 유닛의 우측 위의 트리블록 (즉, 우측 위 이웃), 현재 비디오 유닛의 좌측의 트리블록 (즉, 좌측 이웃) 이 트리블록과 동일한 슬라이스에 있으면, 좌측 위 이웃, 위쪽 이웃, 우측 위 이웃 및 좌측 이웃이 이용가능하다. 그러나, 현재 비디오 유닛의 좌측 하단의 트리블록 (즉, 좌측 아래 이웃) 은 이용가능하지 않다. 좌측 아래 이웃은 이용가능하지 않은데, 이 예에서, 비디오 코더가 래스터 스캔 순서에 따라 트리블록들을 코딩하고 현재 비디오 유닛은 래스터 스캔 순서에서 좌측 아래 이웃보다 먼저 발생하기 때문이다.
현재 비디오 유닛이 트리블록이 아니면 (202의 "아니오"), 현재 비디오 유닛은 트리블록의 서브 유닛이다. 따라서, 현재 비디오 유닛의 이웃이 이용가능한지의 여부를 결정하기 위해, 비디오 코더는 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들을 결정할 수도 있다 (206). 현재 비디오 유닛의 부모 비디오 유닛은 현재 비디오 유닛에 대응하는 쿼드트리 노드 바로 위쪽의 쿼드트리 노드에 대응할 수도 있다. 도 5는 연속하는 서브 CU 레벨들로 일 예의 쿼드트리 파티셔닝 계층구조를 도시한다.
부모 비디오 유닛의 이웃들의 가용성들을 결정하기 위해, 비디오 코더는 동작 (200) 을 재귀적으로 호출할 수도 있다. 다시 말하면, 비디오 코더는 적어도 부분적으로는 동작들을 재귀적으로 수행하여 현재 비디오 유닛의 조상 비디오 유닛들의 이웃들의 가용성들을 결정하는 것에 의해 부모 비디오 유닛의 이웃들의 가용성들을 결정할 수도 있다. 조상 비디오 유닛들은 쿼드트리 데이터 구조에서 현재 비디오 유닛 위쪽의 비디오 유닛들일 수도 있다. 비디오 코더가 동작 (200) 을 재귀적으로 호출하는 경우, 현재 노드의 부모 비디오 유닛은 "현재" 노드이다. 따라서, 부모 비디오 유닛이 트리블록이면, 비디오 코더는, 위에서 설명된 바와 같이, 부모 비디오 유닛의 수평 및 수직 인덱스들에 기초하여 부모 비디오 유닛의 이웃들의 가용성을 결정할 수도 있다. 한편, 부모 비디오 유닛이 트리블록이 아니면, 비디오 코더는 부모 비디오 유닛의 부모 비디오 유닛 (즉, 조부모 비디오 유닛) 의 이웃들의 가용성들을 결정할 수도 있다.
따라서, 조부모 비디오 유닛이 트리블록이면, 비디오 코더는, 위에서 설명된 바와 같이, 조부모 비디오 유닛의 수평 및 수직 인덱스들을 사용하여 조부모 비디오 유닛의 이웃들의 가용성을 결정할 수도 있다. 조부모 비디오 유닛이 트리블록이 아니면, 비디오 코더는 조부모 비디오 유닛의 부모 비디오 유닛 (즉, 증조부모 비디오 유닛) 의 가용성들을 결정할 수도 있다. 현재 비디오 유닛의 조상 비디오 유닛들을 통해 올라가게 프로세싱하는 이 프로세스는, 트리블록 (즉, 조상 트리블록) 에 도달되기까지 및 비디오 코더가 조상 트리블록의 이웃들의 가용성들을 결정할 수 있기까지 이 방식으로 계속할 수도 있다. 일단 비디오 코더가 현재 비디오 유닛의 조상 트리블록의 가용성들을 결정하면, 비디오 코더는 현재 비디오 유닛의 조상 비디오 유닛들을 통해 아래로 되돌아가게 작업할 수도 있다. 각각의 세대에서의 비디오 유닛에 대해, 비디오 코더는 비디오 유닛의 부모 비디오 유닛의 가용성들을 사용하여 LUT에서의 엔트리를 식별한다. LUT는 부모 비디오 유닛의 이웃들의 가용성들의 다수의 조합들을 엔트리들에 포함할 수도 있다. 식별된 엔트리는 비디오 유닛의 이웃들의 가용성들을 나타낸다.
비디오 코더가 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들을 결정한 후, 비디오 코더는 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들을 사용하여 LUT에서의 엔트리를 식별한다 (208). 식별된 엔트리는, 값들의 각각이 현재 비디오 유닛의 이웃들 중 상이한 이웃의 가용성을 나타내는 일련의 값들을 포함할 수도 있다. 비디오 코더는 그 다음에 식별된 엔트리에 기초하여 현재 비디오 유닛의 이웃들의 가용성들을 식별할 수도 있다 (210). 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들을 사용하여 식별된 엔트리는 현재 비디오 유닛의 이웃들의 가용성들을 나타낸다.
다음은 일 예의 LUT이다.
부모 비디오 유닛의 이웃들의 가용성들 SubU0의 이웃들의 가용성들 SubU1의 이웃들의 가용성들 SubU2의 이웃들의 가용성들 SubU3의 이웃들의 가용성들
00000 00000 00010 11000 01110
00001 00000 00010 11001 01110
00010 00011 00010 11110 01110
00011 00011 00010 11111 01110
00100 00100 00010 11000 01110
00101 00100 00010 11001 01110
00110 00111 00010 11110 01110
00111 00111 00010 11111 01110
01000 11000 01110 11000 01110
01001 11000 01110 11001 01110
01010 11011 01110 11110 01110
01011 11011 01110 11111 01110
01100 11100 01110 11000 01110
01101 11100 01110 11001 01110
01110 11111 01110 11110 01110
01111 11111 01110 11111 01110
10000 00000 10010 11000 01110
10001 00000 10010 11001 01110
10010 00011 10010 11110 01110
10011 00011 10010 11111 01110
10100 00100 10010 11000 01110
10101 00100 10010 11001 01110
10110 00111 10010 11110 01110
10111 00111 10010 11111 01110
11000 11000 11110 11000 01110
11001 11000 11110 11001 01110
11010 11011 11110 11110 01110
11011 11011 11110 11111 01110
11100 11100 11110 11000 01110
11101 11100 11110 11001 01110
11110 11111 11110 11110 01110
11111 11111 11110 11111 01110
표 1의 예의 LUT는 5 개의 열들 및 32 개의 행들을 포함한다. 제 1 열은 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가능한 가용성들을 특정한다. 제 2 열은 현재 비디오 유닛이 부모 비디오 유닛의 좌측 상단 서브 유닛이면 현재 비디오 유닛의 이웃들의 가용성들을 특정한다. 제 3 열은 현재 비디오 유닛이 부모 비디오 유닛의 우측 상단 서브 유닛이면 현재 비디오 유닛의 이웃들의 가용성들을 특정한다. 제 4 열은 현재 비디오 유닛이 부모 비디오 유닛의 좌측 하단 서브 유닛이면 현재 비디오 유닛의 이웃들의 가용성들을 특정한다. 제 5 열은 현재 비디오 유닛이 부모 비디오 유닛의 우측 하단 서브 유닛이면 현재 비디오 유닛의 이웃들의 가용성들을 특정한다. 따라서, LUT는 현재 비디오 유닛의 부모 비디오 유닛의 다른 자식 비디오 유닛들에 대한 엔트리들, 다른 자식 비디오 유닛들의 이웃들의 가용성들을 나타내는 다른 자식 비디오 유닛들에 대한 엔트리들을 포함할 수도 있다.
표 1의 예의 LUT에서, 비디오 유닛들의 이웃들의 가용성들은 5-비트 이진수들로서 표현된다. 이진수들에서의 각각의 비트는 상이한 이웃의 가용성에 대응한다. 예를 들면, 제 1 비트 (즉, 최우측 비트) 는 좌측 아래 이웃에 대응할 수도 있으며, 제 2 비트는 좌측 이웃에 대응할 수도 있으며, 제 3 비트는 좌측 위 이웃에 대응할 수도 있으며, 제 4 비트는 위쪽 이웃에 대응할 수도 있고, 제 5 (즉, 최좌측) 비트는 우측 위 이웃에 대응할 수도 있다. 비트가 0이면, 대응하는 이웃은 이용가능하지 않다. 비트가 1이면, 대응하는 이웃은 이용가능하다.
표 1의 예의 LUT를 사용하여 현재 비디오 유닛의 이웃들의 가용성들을 결정하기 위해, 비디오 코더는 먼저, 현재 비디오 유닛의 부모 비디오 유닛의 이웃들의 가용성들에 대응하는 제 1 열 (즉, 부모의 이웃들) 열에서의 값을 가지는 LUT에서의 행을 식별할 수도 있다. 다음으로, 비디오 코더는 현재 비디오 유닛이 부모 비디오 유닛의 좌측 상단 서브 유닛인지, 우측 상단 서브 유닛인지, 좌측 하단 서브 유닛인지, 또는 우측 하단 서브 유닛인지에 기초하여 LUT에서의 열을 식별한다. 비디오 코더는 그 다음에 LUT의 식별된 행 및 열에서의 값을 사용하여 현재 비디오 유닛의 이웃들의 가용성들을 결정한다.
이런 식으로, 비디오 유닛의 이웃 가용성들이 주어지면, 비디오 코더는 즉시 비디오 유닛의 서브 유닛들을 결정할 수도 있다. 그 결과, 트리블록의 수평 및 수직 인덱스들 및 트리블록의 슬라이스 정보에 의해 도출될 수 있는 트리블록의 이웃 가용성들에 기초하여, 트리블록의 쿼드트리 내의 임의의 깊이에서 임의의 비디오 유닛의 이웃 가용성들이 재귀적으로 결정될 수 있다. 다시 말하면, 쿼드트리 내의 임의의 개개의 비디오 유닛에 대해, 비디오 유닛의 이웃 가용성들은 루트로부터 재귀적으로 획득될 수 있다. 따라서, 비디오 유닛의 이웃 가용성들의 검출은 2 개의 팩터들, 즉, 쿼드트리의 깊이에서의 비디오 유닛의 포지션 및 비디오 유닛의 부모 비디오 유닛의 이웃 가용성들만을 필요로 할 수도 있다. 또한, 모든 5 개의 이웃하는 비디오 유닛들의 가용성들은 하나의 단일 LUT 동작에 의해 공동으로 결정될 수도 있다. 이는 대단히 효율적일 수도 있다.
단계들 (204 또는 210) 에서 현재 비디오 유닛의 이웃들의 가용성들을 식별한 후, 비디오 코더는 현재 비디오 유닛의 이웃들의 가용성들을 동작 (200) 의 호출자 (caller) 에게 반환한다 (212). 예를 들어, 현재 비디오 유닛이 파티셔닝되었으면, 동작 (200) 의 호출자는 동작 (200) 의 다른 인스턴스일 수도 있다. 이 예에서, 비디오 코더는 현재 비디오 유닛의 이웃들의 가용성들 동작 (200) 의 다른 인스턴스에 반환할 수도 있다. 다른 예에서, 현재 비디오 유닛이 비-파티셔닝된 비디오 유닛이면, 동작 (200) 의 호출자는 인트라 예측 프로세스일 수도 있다. 이 예에서, 비디오 코더는 현재 비디오 유닛의 이웃들의 가용성들을 인트라 예측 프로세스에 반환할 수도 있다.
다음의 의사 C 코드는 현재 비디오 유닛 및 현재 비디오 유닛 내의 각각의 서브 유닛에 이웃하는 비디오 유닛들의 가용성들을 출력하는 일 예의 재귀적 함수를 도시한다.
Figure 112014045593599-pct00001
위의 의사 코드에서, 함수 "HEVC_NeighborAvail"은 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내는 파라미터 "nAvail"를 수신한다. 함수 "HEVC_NeighborAvail"는 그 다음에 현재 비디오 유닛이 서브 유닛들로 분할되었는지의 여부를 결정한다. 만약 그렇다면, 함수 "HEVC_NeighborAvail"은 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 사용하여 현재 비디오 유닛의 각각의 서브 유닛에 이웃하는 비디오 유닛들의 가용성들을 LUT에서 찾는다. 함수 "HEVC_NeighborAvail"은 현재 비디오 유닛의 서브 유닛들에 이웃하는 비디오 유닛들의 가용성들을 나타내는 파라미터들을 사용하여 자신을 재귀적으로 호출할 수도 있다. 현재 비디오 유닛이 서브 유닛들로 분할되지 않으면, 함수 "HEVC_NeighborAvail"은 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 출력할 수도 있다. 이런 식으로, 함수 "HEVC_NeighborAvail"은 현재 비디오 유닛 및 현재 비디오 유닛 내의 각각의 서브 유닛에 이웃하는 비디오 유닛들의 가용성들을 출력할 수도 있다.
비록 동작 (200) 이 재귀적 동작으로서 표시되지만, 비디오 코더는 LUT 및 현재 비디오 유닛의 부모의 가용성들을 사용하여 현재 비디오 유닛의 이웃들의 가용성들을 결정하기 위해 비-재귀적 동작을 수행할 수도 있다. 다르게 말하면, 비디오 코더는 적어도 부분적으로는 비-재귀적 동작을 수행하여 현재 비디오 유닛의 조상 비디오 유닛들의 이웃들의 가용성들을 결정하는 것에 의해 부모 비디오 유닛의 이웃들의 가용성들을 결정할 수도 있다. 비-재귀적 동작은 위에서 설명된 재귀적 동작과 유사한 효율을 가질 수도 있다. 다음은, 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여 LUT에서의 엔트리를 식별하며 식별된 엔트리가 현재 비디오 유닛의 이웃의 가용성을 나타내는 비-재귀적 동작을 구현한 예의 코드이다.
Figure 112014045593599-pct00002
Figure 112014045593599-pct00003
Figure 112014045593599-pct00004
Figure 112014045593599-pct00005
Figure 112014045593599-pct00006
위에 제공된 코드에서, LUT "anNeighborAvailabilityLut"가 초기화된다. 함수 "main( )"은 함수 "HEVC_ProcessQuadTree( )"를 호출한다. 위의 코드는 현재 LCU에 대한 가용성이 5 (즉, 00101) 라고 가정한다. 다른 예들에서, 값들은 현재 LCU의 가용성에 대해 사용될 수 있다.
함수 "HEVC_ProcessQuadTree( )"는 현재 LCU 내에 각각의 CU의 가용성들을 인쇄한다. 함수 "HEVC_ProcessQuadTree( )"는 "for" 루프를 포함한다. "for" 루프는 현재 LCU에서 각각의 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 결정한다. "for" 루프는 깊이우선 (depth-first) 검색 패턴에 따라 가용성들을 결정한다.
"for" 루프의 각각의 반복 동안, 비디오 코더는 제 1 "while" 루프를 수행할 수도 있다. 제 1 "while" 루프는 현재 LCU에 대한 쿼드트리의 최대 깊이를 초과하는 하나의 레벨인 현재 비디오 유닛에 대한 분석으로 이동하기 위하여 현재 깊이를 증가시킨다. 제 1 "while" 루프가 쿼드트리 아래쪽으로 분석을 이동시킴에 따라, 제 1 "while" 루프는 LUT를 사용하여 좌측 상단 서브 유닛에 이웃하는 비디오 유닛들의 가용성들을 결정한다. "for" 루프는 그 다음에, 현재 비디오 유닛의 서브 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위해 LUT를 사용하여, 현재 비디오 유닛의 각각의 서브 유닛을 통해 반복한다.
현재 비디오 유닛의 서브 유닛들의 각각에 이웃하는 비디오 유닛들의 가용성들을 결정한 후, "for" 루프에서의 제 2 "while" 루프는 모든 CU들이 분석완료되지 않은 깊이에 도달하기까지 현재 깊이를 감소시킨다. "for" 루프는 그 다음에 현재 레벨에서 다음의 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 결정한다. "for" 루프는 그 다음에 다음의 비디오 유닛의 서브 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위해 다음의 비디오 유닛에 관해 이 동작을 반복할 수도 있다. "for" 루프는 현재 LCU에서 각각의 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들이 결정완료되기까지 이 방식으로 계속할 수도 있다. 위에서 제공된 코드는 특정 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 식별하기 위해서만 수정될 수도 있다.
도 10은 주어진 비디오 유닛 (250) 및 이웃하는 비디오 유닛들 사이의 관계를 예시하는 개념도이다. 도 11은 비디오 유닛 (250) 의 이웃하는 비디오 유닛들에 대한 비디오 유닛 (250) 의 4 개의 서브 유닛들 (252A, 252B, 252C, 및 252D) (총칭하여, "서브 유닛들 (252)") 의 관계를 예시한다.
서브 유닛들 (252) 의 이웃들의 가용성들은 다음과 같이 요약될 수도 있다. 서브 유닛 (252A) 의 이웃 가용성들은 비디오 유닛 (250) 의 이웃 가용성들에 다음과 같이 관련될 수 있다.
Figure 112014045593599-pct00007
BelowLeft(SubU0) = Left(U)
Figure 112014045593599-pct00008
Left(SubU0) = Left(U)
Figure 112014045593599-pct00009
AboveLeft(SubU0) = AboveLeft(U)
Figure 112014045593599-pct00010
Above(SubU0) = Above(U)
Figure 112014045593599-pct00011
AboveRight(SubU0) = Above(U)
위의 표기법에서, "BelowLeft(SubU0)"은 서브 유닛 (252A) 의 좌측 아래 이웃의 가용성을 나타낸다. "Left(U)"는 비디오 유닛 (250) 의 좌측 이웃의 가용성을 나타낸다. "Left(SubU0)"은 서브 유닛 (252A) 의 좌측 이웃의 가용성을 나타낸다. "AboveLeft(SubU0)"은 서브 유닛 (252A) 의 좌측 위 이웃의 가용성을 나타낸다. "AboveLeft(U)"는 비디오 유닛 (250) 의 좌측 위 이웃의 가용성을 나타낸다. "Above(SubU0)"는 서브 유닛 (252A) 의 위쪽 이웃의 가용성을 나타낸다. "Above(U)"는 비디오 유닛 (250) 의 위쪽 이웃의 가용성을 나타낸다. "AboveRight(SubU0)"은 서브 유닛 (252A) 의 우측 위 이웃의 가용성을 나타낸다. 도 12는 서브 유닛 (252A) 의 이웃들을 도시하는 개념도이다.
252B의 이웃 가용성들은 비디오 유닛 (250) 의 이웃 가용성들에 다음과 같이 관련될 수 있다.
Figure 112014045593599-pct00012
BelowLeft(SubU1) = FALSE
Figure 112014045593599-pct00013
Left(SubU1) = TRUE
Figure 112014045593599-pct00014
AboveLeft(SubU1) = Above(U)
Figure 112014045593599-pct00015
Above(SubU1) = Above(U)
Figure 112014045593599-pct00016
AboveRight(SubU1) = AboveRight(U)
"FALSE"는 이웃하는 비디오 유닛이 이용가능하지 않음을 나타낸다. "TRUE"는 이웃하는 비디오 유닛이 이용가능함을 나타낸다. 위의 표기법에서, "BelowLeft(SubU1)"은 서브 유닛 (252B) 의 좌측 아래 이웃의 가용성을 나타낸다. "Left(SubU1)"은 서브 유닛 (252B) 의 좌측 이웃의 가용성을 나타낸다. "AboveLeft(SubU1)"은 서브 유닛 (252B) 의 좌측 위 이웃의 가용성을 나타낸다. "Above(SubU1)"은 서브 유닛 (252B) 의 위쪽 이웃의 가용성을 나타낸다. "Above(U)"는 비디오 유닛 (250) 의 위쪽 이웃의 가용성을 나타낸다. "AboveRight(SubU1)"은 서브 유닛 (252B) 의 우측 위 이웃의 가용성을 나타낸다. "AboveRight(U)"는 비디오 유닛 (250) 의 우측 위 이웃의 가용성을 나타낸다. 도 13은 서브 유닛 (252B) 의 이웃들을 도시하는 개념도이다.
서브 유닛 (252C) 의 이웃 가용성들은 비디오 유닛 (250) 의 이웃 가용성들에 다음과 같이 관련될 수도 있다.
Figure 112014045593599-pct00017
BelowLeft(SubU2) = BelowLeft(U)
Figure 112014045593599-pct00018
Left(SubU2) = Left(U)
Figure 112014045593599-pct00019
AboveLeft(SubU2) = Left(U)
Figure 112014045593599-pct00020
Above(SubU2) = TRUE
Figure 112014045593599-pct00021
AboveRight(SubU2) = TRUE
위의 표기법에서, "BelowLeft(SubU2)"는 서브 유닛 (252C) 의 좌측 아래 이웃의 가용성을 나타낸다. "BelowLeft(U)"는 비디오 유닛 (250) 의 좌측 아래 이웃의 가용성을 나타낸다. "Left(SubU2)"는 서브 유닛 (252C) 의 좌측 이웃의 가용성을 나타낸다. "Left(U)"는 비디오 유닛 (250) 의 좌측 이웃의 가용성을 나타낸다. "AboveLeft(SubU2)"는 서브 유닛 (252C) 의 좌측 위 이웃의 가용성을 나타낸다. "Above(SubU2)"는 서브 유닛 (252C) 의 위쪽 이웃의 가용성을 나타낸다. "AboveRight(SubU2)"는 서브 유닛 (252C) 의 우측 위 이웃의 가용성을 나타낸다. 도 14는 서브 유닛 (252C) 의 이웃들을 도시하는 개념도이다.
서브 유닛 (252D) 의 이웃 가용성들은 비디오 유닛 (250) 의 이웃 가용성들에 다음과 같이 관련될 수 있다.
Figure 112014045593599-pct00022
BelowLeft(SubU3) = FALSE
Figure 112014045593599-pct00023
Left(SubU3) = TRUE
Figure 112014045593599-pct00024
AboveLeft(SubU3) = TRUE
Figure 112014045593599-pct00025
Above(SubU3) = TRUE
Figure 112014045593599-pct00026
AboveRight(SubU3) = FALSE
"BelowLeft(SubU3) 은 서브 유닛 (252D) 의 좌측 아래 이웃의 가용성을 나타낸다. "Left(SubU3)"은 서브 유닛 (252D) 의 좌측 이웃의 가용성을 나타낸다. "AboveLeft(SubU3)"은 서브 유닛 (252D) 의 좌측 위 이웃의 가용성을 나타낸다. "Above(SubU3)"은 서브 유닛 (252D) 의 위쪽 이웃의 가용성을 나타낸다. "AboveRight(SubU3)"은 서브 유닛 (252D) 의 우측 위 이웃의 가용성을 나타낸다. 도 15는 서브 유닛 (252D) 의 이웃들을 도시하는 개념도이다.
도 16은 현재 비디오 유닛의 이웃들의 가용성들을 결정하는 다른 예의 동작 (300) 을 도시하는 흐름도이다. 현재 비디오 유닛은 코딩 유닛 또는 변환 유닛일 수도 있다. 다음의 설명은 비디오 코더가 동작 (300) 을 수행하는 것을 설명한다. 위에서 설명된 바와 같이, 비디오 코더는 비디오 인코더, 이를테면 비디오 인코더 (20), 또는 비디오 디코더, 이를테면 비디오 디코더 (30) 일 수도 있다.
동작 (300) 이 시작된 후, 비디오 코더는 현재 LCU를 하나 이상의 기본 비디오 유닛들로 파티셔닝할 수도 있다 (302). 현재 LCU는 현재 비디오 유닛을 포함하는 LCU이다. 현재 LCU의 기본 비디오 유닛들은 동일한 사이즈로 된다. 기본 비디오 유닛들은 최소 허용가능 코딩 유닛 또는 변환 유닛 사이즈를 가진다. 예를 들어, 현재 LCU가 8x8이고 최소 허용된 코딩 유닛 사이즈가 4x4이면, 비디오 코더는 현재 LCU를 4 개의 4x4 기본 비디오 유닛들로 파티셔닝할 수도 있다.
다음으로, 비디오 코더는 현재 비디오 유닛의 타겟 비디오 유닛을 식별한다 (304). 비디오 코더는 현재 비디오 유닛의 어떤 이웃이 관심있는 이웃인지에 기초하여 타겟 비디오 유닛을 식별할 수도 있다. 비디오 코더는 관심있는 이웃의 가용성을 결정하는 것을 시도하고 있다. 비디오 코더가 현재 비디오 유닛의 위쪽 이웃의 가용성을 결정하고 있으면, 비디오 코더는 현재 비디오 유닛의 제 1 (즉, 좌측 상부) 기본 비디오 유닛을 타겟 비디오 유닛으로서 식별한다. 비디오 코더가 현재 비디오 유닛의 좌측 이웃의 가용성을 결정하고 있으면, 비디오 코더는 현재 비디오 유닛의 제 1 기본 비디오 유닛을 타겟 비디오 유닛으로서 결정한다. 비디오 코더가 현재 비디오 유닛의 좌측 위 이웃의 가용성을 결정하고 있으면, 비디오 코더는 제 1 기본 비디오 유닛을 타겟 비디오 유닛으로서 식별한다. 비디오 코더가 현재 비디오 유닛의 우측 위 이웃의 가용성을 결정하고 있으면, 비디오 코더는 현재 비디오 유닛의 우측 상단 기본 비디오 유닛을 타겟 비디오 유닛으로서 결정한다. 비디오 코더가 현재 비디오 유닛의 좌측 아래 이웃의 가용성을 결정하고 있으면, 비디오 코더는 현재 비디오 유닛의 좌측 하단 기본 비디오 유닛을 타겟 비디오 유닛으로서 결정한다.
도 17은 64 개의 기본 비디오 유닛들로 파티셔닝된 LCU (340) 의 개념도이다. 도 17의 예에서, LCU (340) 는 32x32일 수도 있고 기본 비디오 유닛들은 4x4일 수도 있다. LCU (340) 의 좌측 상단 코너에서의 음영진 기본 비디오 유닛들은 현재 비디오 유닛에서의 기본 비디오 유닛들을 나타낸다. 도 17의 예에서, 현재 비디오 유닛은 16x16 CU 또는 TU일 수도 있다. 관심있는 이웃이 현재 비디오 유닛의 위쪽, 좌측 위, 또는 좌측 이웃이면, 타겟 비디오 유닛은 "1"로 라벨링된 기본 비디오 유닛이다. 관심있는 이웃이 현재 비디오 유닛의 우측 위 이웃이면, 타겟 비디오 유닛은 "2"로 라벨링된 기본 비디오 유닛이다. 관심있는 이웃이 현재 비디오 유닛의 좌측 아래 이웃이면, 타겟 비디오 유닛은 "3"으로 라벨링된 기본 비디오 유닛이다.
이제 도 16의 예에 대해 계속 참조한다. 타겟 비디오 유닛을 식별한 후, 비디오 코더는 타겟 비디오 유닛의 인덱스를 결정할 수도 있다 (306). 일부 예들에서, 비디오 코더는 래스터 스캔 순서에 따라 LCU의 기본 비디오 유닛들의 시퀀스를 결정할 수도 있다. 비디오 코더는 그 다음에 래스터 스캔 순서에 따른 기본 비디오 유닛들의 시퀀스화에 기초하여 비디오 유닛의 인덱스를 결정할 수도 있다. 타겟 비디오 유닛이 타겟 비디오 유닛의 제 1 기본 비디오 유닛이면, 비디오 코더는 현재 LCU 내의 현재 비디오 유닛의 포지션에 기초하여 타겟 비디오 유닛의 래스터 스캔 인덱스를 결정할 수도 있다. 예를 들어, 일부 환경들에서, 비디오 코더는 현재 비디오 유닛의 래스터 스캔 인덱스에 4를 곱하는 것에 의해 타겟 비디오 유닛의 래스터 스캔 인덱스를 결정할 수도 있다. 타겟 비디오 유닛이 현재 비디오 유닛의 우측 상단 기본 비디오 유닛이면, 비디오 코더는 타겟 비디오 유닛의 래스터 스캔 인덱스를 다음과 같이 결정할 수도 있다:
현재 비디오 유닛의 제 1 기본 비디오 유닛의 인덱스 +
(화소들에서의 현재 비디오 유닛의 폭 - 1) / 기본 비디오 유닛들의 폭
타겟 비디오 유닛이 현재 비디오 유닛의 좌측 하단 기본 비디오 유닛이면, 비디오 코더는 타겟 비디오 유닛의 래스터 스캔 인덱스를 다음과 같이 결정할 수도 있다:
현재 비디오 유닛의 제 1 기본 비디오 유닛의 인덱스 +
(화소들에서의 LCU 폭 / 기본 비디오 유닛 폭) *
(화소들에서의 현재 비디오 유닛 높이 - 1) / (기본 비디오 유닛 폭)
관심있는 이웃이 현재 비디오 유닛의 좌측 아래 이웃이면 (308의 "예"), 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, 좌측 아래 이웃들에 대한 LUT에서의 엔트리를 식별할 수도 있다 (310). 도 18은 좌측 아래 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다. 관심있는 이웃이 현재 비디오 유닛의 좌측 아래 이웃이 아니지만 (308의 "아니오") 관심있는 이웃이 현재 비디오 유닛의 좌측 이웃이면 (312의 "예"), 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, 좌측 이웃들에 대한 LUT에서의 엔트리를 식별할 수도 있다 (314). 도 19는 좌측 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다. 관심있는 이웃이 현재 비디오 유닛의 좌측 이웃이 아니지만 (312의 "아니오") 관심있는 이웃이 현재 비디오 유닛의 좌측 위 이웃이면 (316의 "예"), 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, 좌측 위 이웃들에 대한 LUT에서의 엔트리를 식별할 수도 있다 (318). 도 20은 좌측 위 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다.
관심있는 이웃이 현재 비디오 유닛의 좌측 위 이웃이 아니지만 (316의 "아니오") 관심있는 이웃이 현재 비디오 유닛의 위쪽 이웃이면 (320의 "예"), 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, 위쪽 이웃들에 대한 LUT에서의 엔트리를 식별할 수도 있다 (322). 도 21은 위쪽 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다. 관심있는 이웃이 현재 비디오 유닛의 위쪽 이웃이 아니지만 (320의 "아니오") 관심있는 이웃이 현재 비디오 유닛의 우측 위 이웃이면 (324의 "예"), 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, 우측 위 이웃들에 대한 LUT에서의 엔트리를 식별할 수도 있다 (326). 도 22는 우측 위 이웃들에 대한 일 예의 LUT를 도시하는 개념도이다. LUT들 중 하나에서의 엔트리를 식별한 후, 비디오 코더는 식별된 엔트리를 사용하여 관심있는 이웃의 가용성을 결정할 수도 있다 (328).
비디오 코더는 LUT들에서 타겟 비디오 유닛의 포지션에 대응하는 포지션을 갖는 엔트리를 식별하는 것에 의해 도 18 내지 도 22의 LUT들에서 엔트리를 식별할 수도 있다. 예를 들어, 타겟 비디오 유닛이 현재 LCU의 좌표들 (4,3) 에 있으면, 비디오 코더는 LUT들 중 하나의 LUT의 좌표들 (4,3) 에서 엔트리를 식별할 수도 있다.
도 18 내지 도 22에서, LCU 사이즈는 32x32인 것으로 가정되고 기본 비디오 유닛 사이즈는 4x4인 것으로 가정된다. 상이한 사이즈로 된 LCU들 및/또는 기본 비디오 유닛들을 갖는 예들에서, 비디오 코더는 도 18 내지 도 22에 도시된 LUT들과는 상이한 LUT들을 사용할 수도 있다. LCU는 LCU 사이즈 당 한 번 생성되는 것만 필요할 수도 있다. 도 18 내지 도 22에서, 각각의 셀은 대응하는 LUT의 엔트리에 대응한다. 엔트리가 숫자 "1"을 포함하고 비디오 코더가 그 엔트리를 식별하면, 관심있는 이웃은 이용가능하다. 엔트리가 숫자 "0"을 포함하고 비디오 코더가 그 엔트리를 식별하면, 관심있는 이웃은 이용가능지 않다. 엔트리가 글자 "A"를 포함하고 비디오 코더가 그 엔트리를 식별하면, 현재 LCU 위쪽의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스에 있는 경우에 관심있는 이웃은 이용가능하다. 현재 LCU는 현재 비디오 유닛을 포함하는 LCU이다. 엔트리가 글자 "L"을 포함하고 비디오 코더가 그 엔트리를 식별하면, 현재 LCU의 좌측의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스에 있는 경우에 관심있는 이웃은 이용가능하다. 엔트리가 글자 "AL"을 포함하고 비디오 코더가 그 엔트리를 식별하면, 현재 LCU의 좌측 위의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스에 있는 경우에 관심있는 이웃은 이용가능하다. 엔트리가 글자 "AR"을 포함하고 비디오 코더가 그 엔트리를 식별하면, 현재 LCU의 우측 위의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스에 있는 경우에 관심있는 이웃은 이용가능하다.
도 23은 현재 비디오 유닛의 이웃들의 가용성들을 결정하는 다른 예의 동작 (350) 을 도시하는 흐름도이다. 현재 비디오 유닛은 코딩 유닛 또는 변환 유닛일 수도 있다. 다음의 설명은 비디오 코더가 동작 (350) 을 수행하는 것을 설명한다. 위에서 설명된 바와 같이, 비디오 코더는 비디오 인코더, 이를테면 비디오 인코더 (20), 또는 비디오 디코더, 이를테면 비디오 디코더 (30) 일 수도 있다.
본 개시물의 다른 곳에서 설명되는 바와 같이, 비디오 코더, 이를테면 비디오 인코더 (20) 및 비디오 디코더 (30) 는, 이웃하는 비디오 유닛들이 다양한 이유들로 이용가능한지의 여부를 결정할 수도 있다. 비디오 코더는 이러한 이유들 중 임의의 것에 대해 동작 (350) 을 수행할 수도 있다. 예를 들어, 비디오 코더가 비디오 인코더이면, 비디오 코더는 CU의 PU에 대한 모션 정보를 결정하는 경우에 동작 (350) 을 수행할 수도 있다. 이 예에서, 비디오 코더는 이웃하는 CU들의 가용성들을 결정하고 이용가능한 이웃하는 CU들 중 하나의 이웃하는 CU의 PU의 모션 정보에 기초하여 PU의 모션 정보를 시그널링할 수도 있다. 다른 예에서, 비디오 코더가 비디오 디코더이면, 비디오 코더는 CU에 대한 인트라 예측 동작을 수행하는 경우에 동작 (350) 을 수행할 수도 있다. 이 예에서, 비디오 코더는 이웃하는 CU들의 가용성들을 결정하고, CU의 인트라 예측 모드가 이용불가능한 CU의 화소 값들의 사용을 수반하면 디폴트 또는 합성된 화소 값들을 사용할 수도 있다.
비디오 코더가 동작 (300) 을 시작한 후, 비디오 코더는 현재 LCU를 하나 이상의 기본 비디오 유닛들로 파티셔닝할 수도 있다 (352). 비디오 코더는 그 다음에 현재 비디오 유닛의 타겟 비디오 유닛을 식별할 수도 있다 (354). 비디오 코더는 현재 LCU를 파티셔닝하고 도 16에 관해 위에서 설명된 방식으로 타겟 비디오 유닛을 식별할 수도 있다.
타겟 비디오 유닛을 식별한 후, 비디오 코더는 타겟 비디오 유닛의 인덱스를 결정할 수도 있다 (356). 일부 예들에서, 비디오 코더는 타겟 비디오 유닛의 래스터 스캔 인덱스를 도 16에 관하여 위에서 설명된 바와 같이 결정할 수도 있다. 다른 예들에서, 비디오 코더는 타겟 비디오 유닛의 z-스캔 인덱스를 결정할 수도 있다.
타겟 비디오 유닛의 인덱스를 식별한 후, 비디오 코더는, 타겟 비디오 유닛의 인덱스에 기초하여, LUT에서의 엔트리를 식별한다 (358). LUT는, 기본 비디오 유닛들의 래스터 스캔 인덱스들에 대한 열, 기본 비디오 유닛들의 z-스캔 인덱스들에 대한 열, 기본 비디오 유닛의 좌측 아래 이웃들의 가용성에 대한 열, 기본 비디오 유닛의 좌측 이웃들의 가용성들에 대한 열, 기본 비디오 유닛의 좌측 위 이웃들의 가용성들에 대한 열, 기본 비디오 유닛들의 위쪽 이웃들의 가용성들에 대한 열, 및 기본 비디오 유닛의 우측 위 이웃들의 가용성들에 대한 열을 포함할 수도 있다.
표 2는 일 예의 LUT를 도시한다.
래스터 스캔 인덱스 Z 스캔 인덱스 좌측 아래 이웃 좌측 이웃 좌측 위 이웃 위쪽 이웃 우측 위 이웃
0 0 bLeftLCU bLeftLCU bAboveLeftLCU bAboveLCU bAboveLCU
1 1 False True bAboveLCU bAboveLCU bAboveLCU
2 4 True True bAboveLCU bAboveLCU bAboveLCU
3 5 False True bAboveLCU bAboveLCU bAboveLCU
4 16 True True bAboveLCU bAboveLCU bAboveLCU
5 17 False True bAboveLCU bAboveLCU bAboveLCU
6 20 True True bAboveLCU bAboveLCU bAboveLCU
7 21 False True bAboveLCU bAboveLCU bAboveRightLCU
8 2 bLeftLCU bLeftLCU bLeftLCU True True
9 3 False True True True False
10 6 False True True True True
11 7 False True True True False
12 18 True True True True True
13 19 False True True True False
14 22 False True True True True
15 23 False True True True False
16 8 Left _Lcu bLeftLCU bLeftLCU True True
17 9 False True True True True
18 12 True True True True True
19 13 False True True True False
20 24 True True True True True
21 25 False True True True True
22 28 True True True True True
23 29 False True True True False
24 10 bLeftLCU bLeftLCU bLeftLCU True True
25 11 False True True True False
26 14 False True True True True
27 15 False True True True False
28 26 False True True True True
29 27 False True True True False
30 30 False True True True True
31 31 False True True True False
32 32 bLeftLCU bLeftLCU bLeftLCU True True
33 33 False True True True True
34 36 True True True True True
35 37 False True True True True
36 48 True True True True True
37 49 False True True True True
38 52 True True True True True
39 53 False True True True False
40 34 bLeftLCU bLeftLCU bLeftLCU True True
41 35 False True True True False
42 38 False True True True True
43 39 False True True True False
44 50 True True True True True
45 51 False True True True False
46 54 False True True True True
47 55 False True True True False
48 40 bLeftLCU bLeftLCU bLeftLCU True True
49 41 False True True True True
50 44 True True True True True
51 45 False True True True False
52 56 True True True True True
53 57 False True True True True
54 60 True True True True True
55 61 False True True True False
56 42 False bLeftLCU bLeftLCU True True
57 43 False True True True False
58 46 False True True True True
59 47 False True True True False
60 58 False True True True True
61 59 False True True True False
62 62 False True True True True
63 63 False True True True False
비디오 코더는 상이한 사이즈로 된 LCU들 및 기본 비디오 유닛들에 대한 상이한 LUT들을 저장할 수도 있다. 예를 들어, 비디오 코더는 LCU들이 32x32이고 기본 비디오 유닛들이 4x4인 경우에 표 2의 예의 LUT를 사용할 수도 있다. 다른 예들에서, 비디오 코더는 LCU들이 64x64이고 기본 비디오 유닛들이 4x4인 경우에 상이한 LUT를 사용할 수도 있다. 또 다른 예에서, 비디오 코더는 LCU들이 32x32이고 기본 비디오 유닛들이 8x8인 경우에 또 다른 LUT를 사용할 수도 있다.
표 2의 예의 LUT에서, 값 "bAboveLCU"는 현재 LCU와 동일한 슬라이스에서 현재 LCU 위쪽의 LCU가 존재하면 "True"로, 그렇지 않으면 "False"로 평가한다. 값 "bAboveLeftLCU"는 현재 LCU와 동일한 슬라이스에서 현재 LCU의 좌측 위에 LCU가 있으면 "True"로, 그렇지 않으면 "False"로 평가한다. 값 "bAboveRightLCU"는 현재 LCU와 동일한 슬라이스에서 현재 LCU의 우측 위에 LCU가 있으면 "True"로, 그렇지 않으면 "False"로 평가한다. 값 "bLeftLCU"는 현재 LCU와 동일한 슬라이스에서 현재 LCU의 좌측에 LCU가 있으면 "True"로, 그렇지 않으면 "False"로 평가한다. 비디오 코더는 이웃하는 LCU 및 현재 LCU의 수평 및 수직 인덱스들에 기초하여 이웃하는 LCU가 현재 LCU와 동일한 슬라이스에 있는지의 여부를 결정할 수도 있다.
도 23의 예에서, 관심있는 이웃이 이용가능하다고 식별된 엔트리가 나타내면 (360의 "예"), 비디오 코더는 관심있는 이웃이 이용가능하다고 결정할 수도 있다 (362). 관심있는 이웃이 이용가능함을 식별된 엔트리가 나타내지 않으면 (360의 "아니오"), 비디오 코더는 식별된 엔트리가 비디오 코더에게 좌측 LCU를 체크할 것을 지시할지의 여부를 결정할 수도 있다 (364). 예를 들면, 비디오 코더는 식별된 엔트리가 관심있는 이웃에 대한 "bLeftLCU"를 나타내는지의 여부를 결정할 수도 있다. 식별된 엔트리가 비디오 코더에게 좌측 LCU를 체크할 것을 지시하면 (364의 "예"), 비디오 코더는 현재 LCU에 좌측으로 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있는지의 여부를 결정할 수도 있다 (366). 현재 LCU에 좌측으로 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있으면 (366의 "예"), 비디오 코더는 관심있는 이웃이 이용가능하다고 결정한다 (368). 그렇지 않고, 현재 LCU에 좌측으로 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 (366의 "아니오"), 비디오 코더는 관심있는 이웃이 이용가능하지 않다고 결정한다 (370).
식별된 엔트리가 비디오 코더에게 좌측 LCU를 체크할 것을 지시하지 않으면 (364의 "아니오"), 비디오 코더는 식별된 엔트리가 비디오 코더에게 좌측 위 LCU를 체크할 것을 지시할지의 여부를 결정할 수도 있다 (372). 예를 들면, 비디오 코더는 식별된 엔트리가 관심있는 이웃에 대한 "bAboveLeftLCU"를 나타내는지의 여부를 결정할 수도 있다. 식별된 엔트리가 비디오 코더에게 좌측 위 LCU를 체크할 것을 지시하면 (372의 "예"), 비디오 코더는 현재 LCU의 좌측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는지의 여부를 결정할 수도 있다 (374). 현재 LCU의 좌측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있으면 (374의 "예"), 비디오 코더는 관심있는 이웃이 이용가능하다고 결정할 수도 있다 (376). 그렇지 않고, 현재 LCU의 좌측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 (374의 "아니오"), 비디오 코더는 관심있는 이웃이 이용가능하지 않다고 결정할 수도 있다 (370).
식별된 엔트리가 비디오 코더에게 좌측 위 LCU를 체크할 것을 지시하지 않으면 (372의 "아니오"), 비디오 코더는 식별된 엔트리가 비디오 코더에게 우측 위 LCU를 체크할 것을 지시할지의 여부를 결정할 수도 있다 (378). 예를 들면, 비디오 코더는 식별된 엔트리가 관심있는 이웃에 대한 "bAboveRightLCU"를 나타내는지의 여부를 결정할 수도 있다. 식별된 엔트리가 비디오 코더에게 우측 위 LCU를 체크할 것을 지시하면 (378의 "예"), 비디오 코더는 현재 LCU의 우측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는지의 여부를 결정할 수도 있다 (380). 현재 LCU의 우측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있으면 (380의 "예"), 비디오 코더는 관심있는 이웃이 이용가능하다고 결정할 수도 있다 (382). 그렇지 않고, 식별된 엔트리가 비디오 코더에게 우측 위 LCU를 체크할 것을 지시하지 않거나 (378의 "아니오") 또는 현재 LCU의 우측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 (380의 "아니오"), 비디오 코더는 관심있는 이웃이 이용가능하지 않다고 결정할 수도 있다 (370).
몇몇 경우들에서, 도 16 및 도 23에 도시된 예의 동작들은 다음의 로직의 최적화된 구현예들일 수도 있다. 관심있는 이웃이 타겟 비디오 유닛의 위쪽 이웃이면 및 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있으면, 현재 LCU 위쪽의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 현재 LCU 위쪽의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 관심있는 이웃은 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있지 않으면 관심있는 이웃은 이용가능하다.
관심있는 이웃이 타겟 비디오 유닛의 좌측 이웃이고 타겟 비디오 유닛이 현재 LCU의 좌측 열 상에 있으면, 현재 LCU의 좌측의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 현재 LCU의 좌측의 이웃하는 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 관심있는 이웃은 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 좌측 열 상에 있지 않으면 관심있는 이웃은 이용가능하다.
관심있는 이웃이 타겟 비디오 유닛의 좌측 위 이웃이며, 타겟 비디오 유닛은 현재 LCU의 좌측 상단 화소를 포함하고, 현재 LCU의 좌측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있으면, 관심있는 이웃이 이용가능하다. 그렇지 않고, 현재 LCU의 좌측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면, 관심있는 이웃은 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있다고 하 (지만 LCU의 좌측 상단 비디오 유닛이 아니라) 면, 현재 LCU 위쪽의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있으면, 현재 LCU 위쪽의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않은 경우에 관심있는 이웃은 이용가능하지 않다. 관심있는 이웃이 현재 LCU의 좌측 열에 있다고 하(지만 좌측 상단에는 있지 않으)면, 현재 LCU의 좌측의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 관심있는 이웃이 현재 LCU의 좌측 열에 있다고 하 (지만 좌측 상단에는 있지 않으) 면, 현재 LCU의 좌측의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않은 경우에 관심있는 이웃은 이용가능지 않다. 그렇지 않으면, 관심있는 이웃은 이용가능하다.
관심있는 이웃이 타겟 비디오 유닛의 좌측 아래 이웃이고 타겟 비디오 유닛이 현재 LCU의 좌측 하단 화소를 포함하면, 관심있는 이웃은 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 하단 행 상에 있지만 현재 LCU의 좌측 하단 화소를 포함하지 않는 것은 아니면, 관심있는 이웃은 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 좌측 열 상에 있(지만 좌측 하단에 있지 않)으면, 현재 LCU의 좌측의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 타겟 비디오 유닛이 현재 LCU의 좌측 열 상에 있 (지만 좌측 하단에 있지 않) 으면, 현재 LCU의 좌측의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않은 경우에 관심있는 이웃은 이용가능하지 않다. 위에서 설명된 바와 같이, 비디오 코더는 z-스캔 순서에 따라 현재 LCU 내의 비디오 유닛들을 코딩할 수도 있다. 따라서, 비디오 코더는 낮은 z-스캔 인덱스들을 갖는 비디오 유닛들을 코딩한 후에 높은 z-스캔 인덱스들을 갖는 비디오 유닛들을 코딩할 수도 있다. 따라서, 타겟 비디오 유닛이 현재 LCU의 하단 행 또는 좌측 열 상에 있지 않으면, 관심있는 이웃의 z-스캔 인덱스가 타겟 비디오 유닛의 z-스캔 인덱스보다 작은 경우에 관심있는 이웃은 이용가능하다. 관심있는 이웃은 관심있는 이웃의 z-스캔 인덱스가 타겟 비디오 유닛의 z-스캔 인덱스보다 작지 않은 (즉 큰) 경우에 이용가능하지 않다.
관심있는 이웃이 타겟 비디오 유닛의 우측 위 이웃이고 타겟 비디오 유닛이 현재 LCU의 우측 상단 코너에 있으면, 현재 LCU의 우측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 관심있는 이웃은 현재 LCU의 우측 위의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않으면 이용가능하지 않다. 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있다고 하 (지만 현재 LCU의 우측 상단 기본 비디오 유닛이 아니라) 면, 현재 LCU 위쪽의 LCU가 현재 LCU와 동일한 슬라이스 내에 있는 경우에 관심있는 이웃은 이용가능하다. 타겟 비디오 유닛이 현재 LCU의 상단 행 상에 있다고 하 (지만 현재 LCU의 우측 상단 기본 비디오 유닛이 아니라) 면, 현재 LCU 위쪽의 LCU가 현재 LCU와 동일한 슬라이스 내에 있지 않은 경우에 관심있는 이웃은 이용가능지 않다. 관심있는 이웃은 타겟 비디오 유닛이 현재 LCU의 우측 열에 있다고 하 (지만 현재 LCU의 우측 상단 기본 비디오 유닛이 아니라) 면 이용가능하지 않다. 그렇지 않고, 타겟 비디오 유닛이 상단 행 또는 우측 열 상에 있지 않으면, 관심있는 이웃의 z-스캔 인덱스가 타겟 비디오 유닛의 z-스캔 인덱스보다 작은 경우에 관심있는 이웃은 이용가능하다. 관심있는 이웃은 관심있는 이웃의 z-스캔 인덱스가 타겟 비디오 유닛의 z-스캔 인덱스보다 작지 않은 경우에 이용가능하지 않다.
실시형태에 의존하여, 상이한 시퀀스로 수행될 수도 있는 본원에서 설명된 방법들 중 임의의 것의 특정한 액트들 또는 이벤트들이 부가되거나, 병합되거나, 또는 다 함께 제외될 수도 있다 (예컨대, 모든 설명된 액트들 또는 이벤트들이 방법을 실용화에 필요한 것은 아니다) 는 것이 이해되어야 한다. 더구나, 특정한 실시형태들에서, 액트들 또는 이벤트들은 순차적으로라기 보다는, 예컨대, 다중 스레드식 프로세싱, 인터렙트 프로세싱, 또는 다수의 프로세서들을 통하여 동시에 수행될 수도 있다.
당업자들은 본원에서 개시된 방법들, 시스템들, 및 장치들에 관련하여 설명되는 다양한 구체적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 프로세서에 의해 실행되는 컴퓨터 소프트웨어, 또는 양쪽 모두의 조합들로 구현될 수도 있다는 것을 이해할 것이다. 하드웨어 및 소프트웨어의 이러한 상호교환가능성을 명백하게 예증하기 위하여, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들이 대체로 그것들의 기능성의 측면에서 설명되어 있다. 이러한 기능성이 하드웨어 또는 소프트웨어 중 어느 것으로 구현되는지는 전체 시스템에 부과되는 특정 애플리케이션 및 설계 제약들에 달려있다. 당업자들은 설명된 기능을 각각의 특정한 애플리케이션에 대하여 다양한 방식으로 구현할 수도 있지만, 이러한 구현 결정은 본 발명의 범위를 벗어나도록 하는 것으로 해석되지 않아야 한다.
더구나, 본원에서 개시된 실시형태들은 본원에서 설명된 기능들을 수행하도록 설계된 전자 디바이스 또는 회로 이를테면 범용 프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적회로 (ASIC), 필드 프로그램가능 게이트 어레이 (FPGA) 또는 다른 프로그램가능 로직 디바이스, 개별 게이트 또는 트랜지스터 로직, 개별 하드웨어 컴포넌트들, 또는 그것들의 임의의 조합으로 구현되거나 또는 수행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 대안적으로는, 이 프로세서는 임의의 기존 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 프로세서는 또한, 컴퓨팅 디바이스들의 조합, 예컨대, DSP 및 마이크로프로세서의 조합, 복수의 마이크로프로세서들의 조합, DSP 코어와 협력하는 하나 이상의 마이크로프로세서들의 조합, 또는 임의의 다른 이러한 구성으로 구현될 수도 있다.
본원에서 개시된 실시형태들에 관련하여 설명된 방법 또는 알고리즘의 단계들은 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이들 두 가지의 조합으로 직접 실시될 수도 있다. 소프트웨어 모듈은 RAM 메모리, 플래시 메모리, ROM 메모리, EPROM 메모리, EEPROM 메모리, 레지스터들, 하드 디스크, 착탈식 디스크, CD-ROM 또는 당업계에 알려진 임의의 다른 형태의 저장 매체 내에 존재할 수도 있다. 예시적인 저장 매체는 프로세서와 결합되어 프로세서는 저장 매체로부터 정보를 읽을 수 있고 그 저장 매체에 정보를 쓸 수 있다. 대체예에서, 저장 매체는 프로세서에 통합될 수도 있다. 프로세서 및 저장 매체는 ASIC 내에 존재할 수도 있다. ASIC은 사용자 단말 내에 존재할 수도 있다. 대체예에서, 프로세서와 저장 매체는 사용자 단말에 개별 컴포넌트들로서 존재할 수도 있다.

Claims (47)

  1. 비디오 데이터를 코딩하는 방법으로서,
    현재 비디오 유닛의 조부모 (grandparent) 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서의 제 1 엔트리를 식별하는 단계로서, 상기 현재 비디오 유닛은 상기 비디오 데이터의 화상 내에 있으며, 식별된 상기 제 1 엔트리는 상기 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 조부모 비디오 유닛은 상기 부모 비디오 유닛의 부모 비디오 유닛인, 상기 제 1 엔트리를 식별하는 단계;
    상기 룩업 테이블에서의 제 2 엔트리를 식별하기 위하여 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 상기 가용성들을 사용하는 단계로서, 상기 제 2 엔트리는 상기 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 현재 비디오 유닛에 이웃하는 적어도 하나의 상기 비디오 유닛들은 상기 현재 비디오 유닛과는 상이한 쿼드트리 레벨과 연관되는, 상기 비디오 유닛들의 상기 가용성들을 사용하는 단계; 및
    상기 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 상기 현재 비디오 유닛에 코딩 동작을 수행하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  2. 제 1 항에 있어서,
    상기 현재 비디오 유닛에 코딩 동작을 수행하는 단계는, 상기 현재 비디오 유닛에 이웃하는 상기 비디오 유닛과 연관된 데이터에 기초하여 상기 현재 비디오 유닛에 상기 코딩 동작을 수행하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  3. 제 2 항에 있어서,
    상기 현재 비디오 유닛에 코딩 동작을 수행하는 단계는,
    상기 현재 비디오 유닛에 이웃하는 상기 비디오 유닛과 연관된 상기 데이터에 기초하여, 콘텍스트 모델을 선택하는 단계; 및
    상기 선택된 콘텍스트 모델에 기초하여, 상기 현재 비디오 유닛과 연관된 데이터에 엔트로피 코딩 동작을 수행하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  4. 삭제
  5. 제 1 항에 있어서,
    상기 현재 비디오 유닛은 코딩 유닛 또는 변환 유닛인, 비디오 데이터를 코딩하는 방법.
  6. 제 1 항에 있어서,
    상기 현재 비디오 유닛이 트리블록인지의 여부를 결정하는 단계; 및
    상기 현재 비디오 유닛이 트리블록이 아니라는 것에 기초하여, 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하는 단계를 더 포함하는, 비디오 데이터를 코딩하는 방법.
  7. 제 1 항에 있어서,
    상기 조부모 비디오 유닛이 트리블록이라고 결정하는 단계; 및
    상기 조부모 비디오 유닛이 트리블록이라는 것에 기초하여, 상기 화상 내의 상기 조부모 비디오 유닛의 포지션에 기초하여 상기 조부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하는 단계를 더 포함하는, 비디오 데이터를 코딩하는 방법.
  8. 제 6 항에 있어서,
    상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하는 단계는, 상기 현재 비디오 유닛의 조상 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위한 동작들을 재귀적으로 수행하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  9. 제 6 항에 있어서,
    상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하는 단계는, 상기 현재 비디오 유닛의 조상 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위해 비-재귀적 동작을 수행하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  10. 제 1 항에 있어서,
    상기 식별된 제 2 엔트리는 일련의 값들을 포함하며, 상기 값들은 상기 현재 비디오 유닛에 이웃하는 상이한 비디오 유닛들의 가용성들을 나타내는, 비디오 데이터를 코딩하는 방법.
  11. 제 1 항에 있어서,
    상기 룩업 테이블은 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들의 다수의 조합들에 대한 엔트리들을 포함하는, 비디오 데이터를 코딩하는 방법.
  12. 제 11 항에 있어서,
    상기 룩업 테이블은 상기 부모 비디오 유닛의 다른 자식 비디오 유닛들에 대한 엔트리들을 포함하며, 상기 다른 자식 비디오 유닛들에 대한 엔트리들은 상기 다른 자식 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 나타내는, 비디오 데이터를 코딩하는 방법.
  13. 제 1 항에 있어서,
    상기 코딩 동작은 인코딩 동작의 부분인, 비디오 데이터를 코딩하는 방법.
  14. 제 13 항에 있어서,
    상기 현재 비디오 유닛에 상기 코딩 동작을 수행하는 단계는, 상기 현재 비디오 유닛에 대한 예측 데이터를 생성하는 단계를 포함하며, 그리고
    상기 비디오 데이터를 코딩하는 방법은,
    상기 현재 비디오 유닛에 대한 상기 예측 데이터에 기초하여, 상기 현재 비디오 유닛에 대한 잔차 데이터를 생성하는 단계;
    상기 잔차 데이터에 하나 이상의 변환들을 적용하여 하나 이상의 변환 계수 블록들을 생성하는 단계; 및
    상기 변환 계수 블록들을 나타내는 인코딩된 데이터를 포함하는 비트스트림을 출력하는 단계를 더 포함하는, 비디오 데이터를 코딩하는 방법.
  15. 제 1 항에 있어서,
    상기 코딩 동작은 디코딩 동작의 부분인, 비디오 데이터를 코딩하는 방법.
  16. 제 15 항에 있어서,
    상기 현재 비디오 유닛에 상기 코딩 동작을 수행하는 단계는, 상기 현재 비디오 유닛에 대한 예측 데이터를 생성하는 단계를 포함하며, 그리고
    상기 비디오 데이터를 코딩하는 방법은,
    상기 현재 비디오 유닛에 대한 잔차 데이터를 디코딩하는 단계;
    상기 현재 비디오 유닛에 대한 상기 예측 데이터 및 상기 현재 비디오 유닛에 대한 상기 잔차 데이터에 기초하여 상기 현재 비디오 유닛에 대한 화소 값들을 재구성하는 단계; 및
    상기 현재 비디오 유닛에 대한 상기 화소 값들을 포함하는 화상을 출력하는 단계를 더 포함하는, 비디오 데이터를 코딩하는 방법.
  17. 하나 이상의 프로세서들을 포함하는 비디오 코딩 장치로서,
    비디오 데이터를 저장하도록 구성된 하나 이상의 데이터 저장 매체; 및
    상기 하나 이상의 프로세서들은,
    현재 비디오 유닛의 조부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서의 제 1 엔트리를 식별하는 것으로서, 상기 현재 비디오 유닛은 화상 내에 있으며, 식별된 상기 제 1 엔트리는 상기 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 조부모 비디오 유닛은 상기 부모 비디오 유닛의 부모 비디오 유닛인, 상기 제 1 엔트리를 식별하며;
    상기 룩업 테이블에서의 제 2 엔트리를 식별하기 위하여 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 상기 가용성들을 사용하는 것으로서, 상기 제 2 엔트리는 상기 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 현재 비디오 유닛에 이웃하는 적어도 하나의 상기 비디오 유닛들은 상기 현재 비디오 유닛과는 상이한 쿼드트리 레벨과 연관되는, 상기 비디오 유닛들의 상기 가용성들을 사용하며; 그리고
    상기 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 상기 현재 비디오 유닛에 코딩 동작을 수행하도록 구성되는, 비디오 코딩 장치.
  18. 제 17 항에 있어서,
    상기 하나 이상의 프로세서들은 상기 현재 비디오 유닛에 이웃하는 상기 비디오 유닛과 연관된 데이터에 기초하여 상기 현재 비디오 유닛에 상기 코딩 동작을 수행하도록 구성되는, 비디오 코딩 장치.
  19. 제 18 항에 있어서,
    상기 하나 이상의 프로세서들은,
    상기 현재 비디오 유닛에 이웃하는 상기 비디오 유닛과 연관된 상기 데이터에 기초하여, 콘텍스트 모델을 선택하며; 그리고
    상기 선택된 콘텍스트 모델에 기초하여, 상기 현재 비디오 유닛과 연관된 데이터에 엔트로피 코딩 동작을 수행하도록 구성되는, 비디오 코딩 장치.
  20. 삭제
  21. 제 17 항에 있어서,
    상기 현재 비디오 유닛은 코딩 유닛인, 비디오 코딩 장치.
  22. 제 17 항에 있어서,
    상기 하나 이상의 프로세서들은,
    상기 현재 비디오 유닛이 트리블록인지의 여부를 결정하며; 그리고
    상기 현재 비디오 유닛이 트리블록이 아니라는 것에 기초하여, 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하도록 구성되는, 비디오 코딩 장치.
  23. 제 17 항에 있어서,
    상기 하나 이상의 프로세서들은, 상기 조부모 비디오 유닛이 트리블록이라고 결정하며; 그리고
    상기 조부모 비디오 유닛이 트리블록이라는 것에 기초하여, 상기 화상 내의 상기 조부모 비디오 유닛의 포지션에 기초하여 상기 조부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하도록 구성되는, 비디오 코딩 장치.
  24. 제 22 항에 있어서,
    상기 하나 이상의 프로세서들은 상기 현재 비디오 유닛의 조상 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위한 동작들을 재귀적으로 수행하도록 구성되는, 비디오 코딩 장치.
  25. 제 22 항에 있어서,
    상기 하나 이상의 프로세서들은 상기 현재 비디오 유닛의 조상 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 결정하기 위해 비-재귀적 동작을 수행하도록 구성되는, 비디오 코딩 장치.
  26. 제 17 항에 있어서,
    상기 제 1 엔트리는 일련의 값들을 포함하며, 상기 값들은 상기 현재 비디오 유닛에 이웃하는 상이한 비디오 유닛들의 가용성들을 나타내는, 비디오 코딩 장치.
  27. 제 17 항에 있어서,
    상기 룩업 테이블은 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들의 다수의 조합들에 대한 엔트리들을 포함하는, 비디오 코딩 장치.
  28. 제 27 항에 있어서,
    상기 룩업 테이블은 상기 부모 비디오 유닛의 다른 자식 비디오 유닛들에 대한 엔트리들을 포함하며, 상기 다른 자식 비디오 유닛들에 대한 엔트리들은 상기 다른 자식 비디오 유닛들에 이웃하는 비디오 유닛들의 가용성들을 나타내는, 비디오 코딩 장치.
  29. 제 17 항에 있어서,
    상기 코딩 동작은 인코딩 동작의 부분인, 비디오 코딩 장치.
  30. 제 29 항에 있어서,
    상기 하나 이상의 프로세서들은,
    상기 현재 비디오 유닛에 대한 예측 데이터를 생성하며;
    상기 현재 비디오 유닛에 대한 상기 예측 데이터에 기초하여 상기 현재 비디오 유닛에 대한 잔차 데이터를 생성하며;
    하나 이상의 변환 계수 블록들을 생성하기 위해 상기 잔차 데이터에 하나 이상의 변환들을 적용하며; 그리고
    상기 변환 계수 블록들을 나타내는 인코딩된 데이터를 포함하는 비트스트림을 출력하도록 구성되는, 비디오 코딩 장치.
  31. 제 17 항에 있어서,
    상기 코딩 동작은 디코딩 동작의 부분인, 비디오 코딩 장치.
  32. 제 31 항에 있어서,
    상기 하나 이상의 프로세서들은,
    상기 현재 비디오 유닛에 대한 예측 데이터를 생성하며;
    상기 현재 비디오 유닛에 대한 잔차 데이터를 디코딩하며;
    상기 현재 비디오 유닛에 대한 상기 예측 데이터 및 상기 현재 비디오 유닛에 대한 상기 잔차 데이터에 기초하여 상기 현재 비디오 유닛에 대한 화소 값들을 재구성하며; 그리고
    상기 현재 비디오 유닛에 대한 상기 화소 값들을 포함하는 화상을 출력하도록 구성되는, 비디오 코딩 장치.
  33. 비디오 데이터를 코딩하는 비디오 코딩 장치로서,
    현재 비디오 유닛의 조부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서의 제 1 엔트리를 식별하는 수단으로서, 상기 현재 비디오 유닛은 상기 비디오 데이터의 화상 내에 있으며, 식별된 상기 제 1 엔트리는 상기 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 조부모 비디오 유닛은 상기 부모 비디오 유닛의 부모 비디오 유닛인, 상기 제 1 엔트리를 식별하는 수단;
    상기 룩업 테이블에서의 제 2 엔트리를 식별하기 위하여 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 상기 가용성들을 사용하는 수단으로서, 상기 제 2 엔트리는 상기 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 현재 비디오 유닛에 이웃하는 적어도 하나의 상기 비디오 유닛들은 상기 현재 비디오 유닛과는 상이한 쿼드트리 레벨과 연관되는, 상기 비디오 유닛들의 상기 가용성들을 사용하는 수단; 및
    상기 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 상기 현재 비디오 유닛에 코딩 동작을 수행하는 수단을 포함하는, 비디오 코딩 장치.
  34. 제 33 항에 있어서,
    상기 현재 비디오 유닛에 코딩 동작을 수행하기 위해 그 이웃과 연관된 데이터에 기초하여 상기 현재 비디오 유닛에 상기 코딩 동작을 수행하는 수단을 포함하는, 비디오 코딩 장치.
  35. 제 33 항에 있어서,
    상기 조부모 비디오 유닛이 트리블록인지의 여부를 결정하는 수단; 및
    상기 조부모 비디오 유닛이 트리블록일 경우 상기 화상 내의 상기 조부모 비디오 유닛의 포지션에 기초하여 상기 조부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 가용성들을 결정하는 수단을 더 포함하는, 비디오 코딩 장치.
  36. 제 33 항에 있어서,
    상기 식별된 제 2 엔트리는 일련의 값들을 포함하며, 상기 값들은 상기 현재 비디오 유닛에 이웃하는 상이한 비디오 유닛들의 가용성들을 나타내는, 비디오 코딩 장치.
  37. 제 33 항에 있어서,
    상기 코딩 동작은 인코딩 동작의 부분인, 비디오 코딩 장치.
  38. 제 33 항에 있어서,
    상기 코딩 동작은 디코딩 동작의 부분인, 비디오 코딩 장치.
  39. 명령들을 저장한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행되는 경우, 하나 이상의 프로세서들로 하여금,
    현재 비디오 유닛의 조부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들에 기초하여, 룩업 테이블에서의 제 1 엔트리를 식별하도록 하는 것으로서, 상기 현재 비디오 유닛은 화상 내에 있으며, 식별된 상기 제 1 엔트리는 현재 비디오 유닛의 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 조부모 비디오 유닛은 상기 부모 비디오 유닛의 부모 비디오 유닛인, 상기 제 1 엔트리를 식별하도록 하며;
    상기 룩업 테이블에서의 제 2 엔트리를 식별하기 위하여 상기 부모 비디오 유닛에 이웃하는 상기 비디오 유닛들의 상기 가용성들을 사용하도록 하는 것으로서, 상기 제 2 엔트리는 상기 현재 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 나타내며, 상기 현재 비디오 유닛에 이웃하는 적어도 하나의 상기 비디오 유닛들은 상기 현재 비디오 유닛과는 상이한 쿼드트리 레벨과 연관되는, 상기 비디오 유닛들의 상기 가용성들을 사용하도록하며; 및
    상기 현재 비디오 유닛에 이웃하는 비디오 유닛이 이용가능한지의 여부에 기초하여 상기 현재 비디오 유닛에 코딩 동작을 수행하도록 하는, 컴퓨터 판독가능 저장 매체.
  40. 제 39 항에 있어서,
    상기 명령들은, 상기 하나 이상의 프로세서들로 하여금, 상기 현재 비디오 유닛에 이웃하는 상기 비디오 유닛과 연관된 데이터에 기초하여 상기 현재 비디오 유닛에 상기 코딩 동작을 수행하도록 하는, 컴퓨터 판독가능 저장 매체.
  41. 제 39 항에 있어서,
    상기 명령들은, 상기 하나 이상의 프로세서들로 하여금,
    상기 조부모 비디오 유닛이 트리블록인지의 여부를 결정하도록 하며; 그리고
    상기 조부모 비디오 유닛이 트리블록일 경우 상기 화상 내의 상기 조부모 비디오 유닛의 포지션에 기초하여 상기 부모 비디오 유닛에 이웃하는 비디오 유닛들의 가용성들을 결정하도록 하는, 컴퓨터 판독가능 저장 매체.
  42. 제 39 항에 있어서,
    상기 식별된 제 2 엔트리는 일련의 값들을 포함하며, 상기 값들은 상기 현재 비디오 유닛에 이웃하는 상이한 비디오 유닛들의 가용성들을 나타내는, 컴퓨터 판독가능 저장 매체.
  43. 제 39 항에 있어서,
    상기 코딩 동작은 인코딩 동작의 부분인, 컴퓨터 판독가능 저장 매체.
  44. 제 39 항에 있어서,
    상기 코딩 동작은 디코딩 동작의 부분인, 컴퓨터 판독가능 저장 매체.
  45. 제 17 항에 있어서,
    상기 비디오 코딩 장치는,
    집적 회로;
    마이크로 프로세서; 또는
    전화기 핸드셋 중 적어도 하나를 포함하는, 비디오 코딩 장치.
  46. 제 32 항에 있어서,
    상기 화상을 디스플레이 하도록 구성된 디스플레이를 더 포함하는, 비디오 코딩 장치.
  47. 제 30 항에 있어서,
    상기 현재 비디오 유닛을 포함하는 비디오 데이터를 캡처하도록 구성된 카메라를 더 포함하는, 비디오 코딩 장치.
KR1020147013054A 2011-10-18 2012-09-14 비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출 KR101647904B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161548630P 2011-10-18 2011-10-18
US61/548,630 2011-10-18
US13/418,107 US9838692B2 (en) 2011-10-18 2012-03-12 Detecting availabilities of neighboring video units for video coding
US13/418,107 2012-03-12
PCT/US2012/055462 WO2013058910A1 (en) 2011-10-18 2012-09-14 Detecting availabilities of neighboring video units for video coding

Publications (2)

Publication Number Publication Date
KR20140085510A KR20140085510A (ko) 2014-07-07
KR101647904B1 true KR101647904B1 (ko) 2016-08-11

Family

ID=48085988

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147013054A KR101647904B1 (ko) 2011-10-18 2012-09-14 비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출

Country Status (7)

Country Link
US (1) US9838692B2 (ko)
EP (2) EP2769546A1 (ko)
JP (1) JP6022586B2 (ko)
KR (1) KR101647904B1 (ko)
CN (1) CN103891281B (ko)
IN (1) IN2014CN02627A (ko)
WO (1) WO2013058910A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4236315A3 (en) * 2012-06-26 2023-09-06 LG Electronics Inc. Video decoding method, video encoding method and storage medium storing encoded video information
US10075728B2 (en) * 2012-10-01 2018-09-11 Inria Institut National De Recherche En Informatique Et En Automatique Method and device for motion information prediction refinement
US11789769B2 (en) 2013-09-20 2023-10-17 Qualcomm Incorporated System and method for generation of event driven, tuple-space based programs
US10564949B2 (en) * 2013-09-20 2020-02-18 Reservoir Labs, Inc. System and method for generation of event driven, tuple-space based programs
WO2015057947A1 (en) * 2013-10-17 2015-04-23 Huawei Technologies Co., Ltd. Improved reference pixel selection and filtering for intra coding of depth map
KR102319384B1 (ko) * 2014-03-31 2021-10-29 인텔렉추얼디스커버리 주식회사 템플릿 매칭 기반의 화면 내 픽쳐 부호화 및 복호화 방법 및 장치
CN103929642B (zh) * 2014-04-24 2017-04-12 北京航空航天大学 一种hevc变换系数的熵编码上下文模型偏移值快速计算方法
US10715833B2 (en) * 2014-05-28 2020-07-14 Apple Inc. Adaptive syntax grouping and compression in video data using a default value and an exception value
CN104363459A (zh) * 2014-10-29 2015-02-18 复旦大学 一种适用于hevc标准中帧内预测的参考像素的硬件填充方法
JP6485045B2 (ja) * 2015-01-06 2019-03-20 沖電気工業株式会社 インデックス演算装置、プログラム及び方法
CN104869457B (zh) * 2015-05-21 2019-04-26 京东方科技集团股份有限公司 显示器、显示装置、播放器、播放装置及播放显示系统
KR20180109927A (ko) 2016-02-12 2018-10-08 톰슨 라이센싱 예측 트리 및 변환 트리에 의존하는, 픽처 데이터를 포함하는 코딩 단위를 인트라-예측 인코딩/디코딩하기 위한 방법 및 디바이스
WO2018045944A1 (en) * 2016-09-06 2018-03-15 Mediatek Inc. Methods and apparatuses of candidate set determination for binary-tree splitting blocks
US10841575B2 (en) * 2018-04-15 2020-11-17 Arris Enterprises Llc Unequal weight planar motion vector derivation
BR112020024142A2 (pt) 2018-06-29 2021-03-02 Beijing Bytedance Network Technology Co., Ltd. método para processamento de vídeo, aparelho para codificação de dados de vídeo, meio de armazenamento e meio de gravação legíveis por computador não transitório
WO2020003282A1 (en) 2018-06-29 2020-01-02 Beijing Bytedance Network Technology Co., Ltd. Managing motion vector predictors for video coding
EP4322533A3 (en) 2018-06-29 2024-03-06 Beijing Bytedance Network Technology Co., Ltd. Checking order of motion candidates in lut
JP7460617B2 (ja) 2018-06-29 2024-04-02 北京字節跳動網絡技術有限公司 Lut更新条件
CN110662030B (zh) * 2018-06-29 2022-06-14 北京字节跳动网络技术有限公司 一种视频处理方法和装置
TWI719525B (zh) 2018-06-29 2021-02-21 大陸商北京字節跳動網絡技術有限公司 Lut與amvp之間的交互
EP3791586A1 (en) 2018-06-29 2021-03-17 Beijing Bytedance Network Technology Co. Ltd. Concept of using one or multiple look up tables to store motion information of previously coded in order and use them to code following blocks
CN114900694A (zh) 2018-06-29 2022-08-12 抖音视界(北京)有限公司 哪个查找表需要更新或不更新
EP3794825A1 (en) 2018-06-29 2021-03-24 Beijing Bytedance Network Technology Co. Ltd. Update of look up table: fifo, constrained fifo
TWI748202B (zh) 2018-07-02 2021-12-01 大陸商北京字節跳動網絡技術有限公司 Lamvr中取整和修剪的順序
CN110891180B (zh) 2018-09-10 2023-11-17 华为技术有限公司 视频解码方法及视频解码器
CN111064961B (zh) 2018-09-12 2023-06-09 北京字节跳动网络技术有限公司 视频处理方法和装置
WO2020143741A1 (en) 2019-01-10 2020-07-16 Beijing Bytedance Network Technology Co., Ltd. Invoke of lut updating
CN113383554B (zh) 2019-01-13 2022-12-16 北京字节跳动网络技术有限公司 LUT和共享Merge列表之间的交互
CN113302937A (zh) 2019-01-16 2021-08-24 北京字节跳动网络技术有限公司 运动候选推导
CA3131692A1 (en) * 2019-03-09 2020-09-17 Tencent America LLC Determination of block vector for a block in a region of a coding tree block
WO2020192611A1 (en) 2019-03-22 2020-10-01 Beijing Bytedance Network Technology Co., Ltd. Interaction between merge list construction and other tools
CN117321997A (zh) * 2021-04-05 2023-12-29 抖音视界有限公司 防止重复分割

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090003447A1 (en) * 2007-06-30 2009-01-01 Microsoft Corporation Innovations in video decoder implementations
US20100080285A1 (en) * 2008-09-26 2010-04-01 Qualcomm Incorporated Determining availability of video data units

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05274841A (ja) 1992-03-26 1993-10-22 Sony Corp 情報記録装置
US9154808B2 (en) 2005-01-14 2015-10-06 Thomson Licensing Method and apparatus for INTRA prediction for RRU
EP2047687B1 (en) * 2006-08-02 2018-05-16 Thomson Licensing DTV Adaptive geometric partitioning for video encoding
US8233537B2 (en) 2007-03-19 2012-07-31 Texas Instruments Incorporated Efficient implementation of H.264 4 by 4 intra prediction on a VLIW processor
WO2008117963A1 (en) 2007-03-23 2008-10-02 Lg Electronics Inc. A method and an apparatus for decoding/encoding a video signal
US8045489B2 (en) * 2007-03-30 2011-10-25 Cisco Technology, Inc. Method and system for the automatic configuration of conference resources
US8254455B2 (en) 2007-06-30 2012-08-28 Microsoft Corporation Computing collocated macroblock information for direct mode macroblocks
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
CN101605255B (zh) 2008-06-12 2011-05-04 华为技术有限公司 一种视频编解码的方法及装置
KR101456498B1 (ko) 2009-08-14 2014-10-31 삼성전자주식회사 계층적 부호화 단위의 스캔 순서를 고려한 비디오 부호화 방법 및 장치, 비디오 복호화 방법 및 장치
US20120039383A1 (en) * 2010-08-12 2012-02-16 Mediatek Inc. Coding unit synchronous adaptive loop filter flags

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090003447A1 (en) * 2007-06-30 2009-01-01 Microsoft Corporation Innovations in video decoder implementations
US20100080285A1 (en) * 2008-09-26 2010-04-01 Qualcomm Incorporated Determining availability of video data units

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JCT-VC of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11 5th Meeting: Geneva, CH, (JCTVC-E602), (HM3: High Efficiency Video Coding (HEVC) Test Model 3 Encoder Description), 16-23 March, 2011

Also Published As

Publication number Publication date
JP2014532384A (ja) 2014-12-04
WO2013058910A1 (en) 2013-04-25
KR20140085510A (ko) 2014-07-07
US20130094580A1 (en) 2013-04-18
IN2014CN02627A (ko) 2015-06-26
CN103891281A (zh) 2014-06-25
EP2769546A1 (en) 2014-08-27
CN103891281B (zh) 2018-07-27
US9838692B2 (en) 2017-12-05
EP3396956A1 (en) 2018-10-31
JP6022586B2 (ja) 2016-11-09

Similar Documents

Publication Publication Date Title
KR101647904B1 (ko) 비디오 코딩을 위해 이웃하는 비디오 유닛들의 가용성들을 검출
AU2017207452B2 (en) Multi-type-tree framework for video coding
CA2840618C (en) Derivation of the position in scan order of the last significant transform coefficient in video coding
CA2838449C (en) Border pixel padding for intra prediction in video coding
CA2852533C (en) Determining boundary strength values for deblocking filtering for video coding
KR101625724B1 (ko) 비디오 코딩에서의 서브 슬라이스들
AU2012332417B2 (en) Padding of segments in coded slice NAL units
KR102182441B1 (ko) 비디오 코딩에서 hevc 확장들을 위한 다중 계층들의 저복잡도 지원
KR102400410B1 (ko) 팔레트 모드 코딩을 위한 방법
KR20180019596A (ko) 인트라 블록 카피 모드에서의 참조 픽처 리스트 구축
KR20140024962A (ko) 비디오 코딩에서의 양자화
CN113994694A (zh) 视频译码中的简化帧内色度模式译码
EP3883244A1 (en) Inter-frame prediction method and related device

Legal Events

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