KR102669354B1 - 모션 벡터 예측 - Google Patents

모션 벡터 예측 Download PDF

Info

Publication number
KR102669354B1
KR102669354B1 KR1020197036549A KR20197036549A KR102669354B1 KR 102669354 B1 KR102669354 B1 KR 102669354B1 KR 1020197036549 A KR1020197036549 A KR 1020197036549A KR 20197036549 A KR20197036549 A KR 20197036549A KR 102669354 B1 KR102669354 B1 KR 102669354B1
Authority
KR
South Korea
Prior art keywords
motion vector
block
mvp
candidates
video
Prior art date
Application number
KR1020197036549A
Other languages
English (en)
Other versions
KR20200017406A (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
Priority claimed from US16/003,269 external-priority patent/US10602180B2/en
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20200017406A publication Critical patent/KR20200017406A/ko
Application granted granted Critical
Publication of KR102669354B1 publication Critical patent/KR102669354B1/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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • H04N19/54Motion estimation other than block-based using feature points or meshes
    • 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

Abstract

비디오 코더는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다. 상기 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 더욱이, 비디오 코더는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정한다. 비디오 코더는 현재의 블록의 모션 벡터를 결정할 수도 있다. 비디오 코더는 또한 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다.

Description

모션 벡터 예측
본 출원은 2017년 6월 13일에 출원된 미국 가특허 출원 번호 제 62/519,007호의 이익을 주장하며, 이의 전체 내용이 참조로 포함된다.
기술 분야
본 개시물은 비디오 코딩을 수행하도록 구성된 디바이스들에 관한 것이다.
디지털 비디오 능력들은, 디지털 텔레비전들, 디지털 직접 브로드캐스트 시스템들, 무선 브로드캐스트 시스템들, 개인 휴대정보 단말기들 (PDAs), 랩탑 또는 데스크탑 컴퓨터들, 태블릿 컴퓨터들, e-북 리더들, 디지털 카메라들, 디지털 리코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 디바이스들, 비디오 게임 콘솔들, 셀룰러 또는 위성 무선 전화기들, 소위 "스마트폰들", 원격 화상회의 디바이스들, 비디오 스트리밍 디바이스들 등을 포함한, 광범위한 디바이스들에 통합될 수 있다. 디지털 비디오 디바이스들은 MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, 파트 10, AVC (Advanced Video Coding), 또는 ITU-T H.265, HEVC (High Efficiency Video Coding) 에 의해 정의된 표준들, 및 이런 표준들의 확장판들에 설명된 것들과 같은, 비디오 압축 기법들을 구현한다. 비디오 디바이스들은 이런 비디오 압축 기법들을 구현함으로써, 디지털 비디오 정보를 좀더 효율적으로 송신, 수신, 인코딩, 디코딩, 및/또는 저장할 수도 있다.
비디오 압축 기법들은 비디오 시퀀스들에 내재하는 리던던시를 감소시키거나 또는 제거하기 위해 공간 (인트라-픽처) 예측 및/또는 시간 (인터-픽처) 예측을 수행할 수도 있다. 블록-기반 비디오 코딩에 있어, 비디오 슬라이스 (예컨대, 비디오 프레임 또는 비디오 프레임의 부분) 은 코딩 트리 블록들 및 코딩 블록들과 같은 비디오 블록들로 파티셔닝될 수도 있다. 공간 또는 시간 예측은 코딩될 블록에 대한 예측 블록을 초래한다. 잔차 데이터는 코딩될 원래 블록과 예측 블록 사이의 픽셀 차이들을 나타낸다. 추가적인 압축을 위해, 잔차 데이터는 픽셀 도메인으로부터 변환 도메인으로 변환되어, 잔차 변환 계수들을 초래할 수도 있으며, 이 잔차 변환 계수는 그후 양자화될 수도 있다.
일반적으로, 본 개시물은 모션 벡터 예측에 관련된 기법들을 기술한다. 본 개시물의 기법들은 기존 비디오 코덱들 중 임의의 코텍, 예컨대 HEVC (High Efficiency Video Coding) 또는 임의의 미래 비디오 코딩 표준들에 적용될 수도 있다.
일 예에서, 본 개시물은 비디오 데이터를 디코딩하는 방법을 기술하며, 본 방법은 비디오 디코더에 의해, 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 단계로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하는 단계; 비디오 디코더에 의해, 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하는 단계; 비디오 디코더에 의해, 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정하는 단계; 비디오 디코더에 의해, 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하는 단계; 비디오 디코더에 의해, 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원하는 단계를 포함한다.
다른 예에서, 본 개시물은 비디오 데이터를 인코딩하는 방법을 기술하며, 본 방법은 비디오 인코더에 의해, 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 단계로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하는 단계; 비디오 인코더에 의해, 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하는 단계; 비디오 인코더에 의해, 현재의 블록의 모션 벡터를 결정하는 단계로서, 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일하거나 또는 현재의 블록에 대한 MVP 의 모션 벡터 플러스 비트스트림으로 시그널링되는 모션 벡터 차이 (MVD) 와 동일한, 상기 현재의 블록의 모션 벡터를 결정하는 단계; 비디오 인코더에 의해, 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하는 단계; 및 비디오 인코더에 의해, 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키는 단계를 포함한다.
다른 예에서, 본 개시물은 비디오 데이터를 디코딩하는 장치를 기술하며, 본 장치는 비디오 데이터를 저장하도록 구성된 하나 이상의 저장 매체들; 및 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 것으로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하고; 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하고; 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정하고; 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하고; 그리고 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원하도록 구성된 하나 이상의 프로세서들을 포함한다.
다른 예에서, 본 개시물은 비디오 데이터를 인코딩하는 장치를 기술하며, 본 방법은 비디오 인코더에 의해, 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 단계로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하는 단계; 비디오 인코더에 의해, 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하는 단계; 비디오 인코더에 의해, 현재의 블록의 모션 벡터를 결정하는 단계로서, 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일하거나 또는 현재의 블록에 대한 MVP 의 모션 벡터 플러스 비트스트림으로 시그널링되는 모션 벡터 차이 (MVD) 와 동일한, 상기 현재의 블록의 모션 벡터를 결정하는 단계; 비디오 인코더에 의해, 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하는 단계; 및 비디오 인코더에 의해, 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키는 단계를 포함한다.
다른 예에서, 본 개시물은 비디오 데이터를 디코딩하는 장치를 기술하며, 본 장치는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 수단으로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하는 수단; 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하는 수단; 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정하는 수단; 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하는 수단; 및 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원하는 수단을 포함한다.
다른 예에서, 본 개시물은 비디오 데이터를 인코딩하는 장치를 기술하며, 본 장치는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하는 수단으로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하는 수단; 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하는 수단; 현재의 블록의 모션 벡터를 결정하는 수단으로서, 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일하거나 또는 현재의 블록에 대한 MVP 의 모션 벡터 플러스 비트스트림으로 시그널링되는 모션 벡터 차이 (MVD) 와 동일한, 상기 모션 벡터를 결정하는 수단; 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하는 수단; 및 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키는 수단을 포함한다.
다른 예에서, 본 개시물은 명령들을 저장하는 컴퓨터-판독가능 저장 매체를 기술하며, 상기 명령들은, 실행될 때, 하나 이상의 프로세서들로 하여금, 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하게 하는 것으로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하게 하고; 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하게 하고; 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정하게 하고; 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하게 하고; 그리고 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원하게 한다.
다른 예에서, 본 개시물은 명령들을 저장하는 컴퓨터-판독가능 저장 매체를 기술하며, 상기 명령들은, 실행될 때, 하나 이상의 프로세서들로 하여금, 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정하게 하는 것으로서, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접하는, 상기 비-인접 블록의 모션 벡터를 결정하게 하고; 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정하게 하고; 현재의 블록의 모션 벡터를 결정하게 하는 것으로서, 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일하거나 또는 현재의 블록에 대한 MVP 의 모션 벡터 플러스 비트스트림으로 시그널링되는 모션 벡터 차이 (MVD) 와 동일한, 상기 현재의 블록의 모션 벡터를 결정하게 하고; 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정하게 하고; 그리고 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키게 한다.
본 개시물의 하나 이상의 양태들의 세부 사항들이 첨부도면 및 아래의 상세한 설명에서 개시된다. 본 개시물에서 설명하는 본 기법들의 다른 특징들, 목적들, 및 이점들은 설명, 도면들, 및 청구범위로부터 명백히 알 수 있을 것이다.
도 1 은 본 개시물에서 설명하는 하나 이상의 기법들을 이용할 수도 있는 예시적인 비디오 인코딩 및 디코딩 시스템을 예시하는 블록도이다.
도 2 는 병합/스킵 모드들에 대한 공간 및 시간 이웃하는 모션 벡터 후보들의 일 예이다.
도 3 은 쌍방 매칭 (bilateral matching) 의 일 예이다.
도 4 는 템플릿 매칭의 일 예이다.
도 5 는 프레임-레이트 업 변환에서의 일방 모션 추정 (unilateral motion estimation) 의 일 예이다.
도 6 은 쌍방 템플릿 매칭에 기초한 디코더-측 모션 벡터 정제의 일 예이다.
도 7 은 코딩 유닛에 대한 진보된 시간 모션 벡터 예측 모션 예측의 일 예이다.
도 8 은 4개의 서브-블록들 및 그의 이웃하는 블록들을 가진 하나의 코딩 유닛의 일 예이다.
도 9 는 현재의 아핀 블록에 대한 예시적인 단순화된 아핀 모션 모델의 블록도이다.
도 10 은 현재의 아핀 블록에 대한 단순화된 아핀 모션 모델의 일 예이다.
도 11 은 모션 보상 예측 모션 벡터 필드의 일 예이다.
도 12 는 저장된 모션 벡터 필드의 일 예이다.
도 13 은 AF_INTER 의 경우 모션 벡터 예측의 일 예이다.
도 14a 는 AF_MERGE 의 경우 후보 블록들에 대한 선택 순서를 예시하는 블록도이다.
도 14b 는 좌하단 후보 블록이 아핀 모드에서 코딩되는 경우 AF_MERGE 에 대한 후보들을 예시하는 블록도이다.
도 15 는 본 개시물의 기법에 따른, 예시적인 비-인접 블록들을 예시하는 블록도이다.
도 16 은 본 개시물의 기법에 따른, 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 17 은 부모 블록에 기초한 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 18a 는 본 개시물의 기법에 따른, 비-인접 블록의 위치 변형의 일 예를 예시하는 블록도이다.
도 18b 는 본 개시물의 기법에 따른, 비-인접 블록의 위치 변형의 일 예를 예시하는 블록도이다.
도 19a 는 본 개시물의 기법에 따른, 비-인접 블록을 수정하기 위한 임계치의 일 예를 예시하는 블록도이다.
도 19b 는 본 개시물의 기법에 따른, 비-인접 블록을 수정하기 위한 임계치의 일 예를 예시하는 블록도이다.
도 20 은 본 개시물의 기법에 따른, 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 21 은 본 개시물의 기법에 따른, 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 22 는 본 개시물의 기법에 따른, 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 23 은 본 개시물의 기법에 따른, 부모 블록에 기초한 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다.
도 24 는 본 개시물에서 설명하는 하나 이상의 기법들을 구현할 수도 있는 예시적인 비디오 인코더를 예시하는 블록도이다.
도 25 는 본 개시물에서 설명하는 하나 이상의 기법들을 구현할 수도 있는 예시적인 비디오 디코더를 예시하는 블록도이다.
도 26 은 본 개시물의 하나 이상의 기법들에 따른, 비디오 데이터를 인코딩하는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다.
도 27 은 본 개시물의 하나 이상의 기법들에 따른, 비디오 데이터를 디코딩하는 비디오 디코더의 예시적인 동작을 예시하는 플로우차트이다.
도 28 은 본 개시물의 기법에 따른, 프레임 레이트 상향-변환 (FRUC) 모션 벡터 후보들을 이용하여 NA-SMVP 를 결정하는 예시적인 동작을 예시하는 플로우차트이다.
도 29 는 본 개시물의 하나 이상의 기법들에 따른, 현재의 블록에 대한 MVP 후보들의 리스트에 합성 후보들을 포함시키는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다.
도 30 은 본 개시물의 하나 이상의 기법들에 따른, 현재의 블록에 대한 MVP 후보들의 리스트에 합성 후보들을 포함시키는 비디오 디코더의 예시적인 동작을 예시하는 플로우차트이다.
도 31 은 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다.
도 32 는 본 개시물의 기법에 따른, 비디오 데이터를 디코딩하는 비디오 디코더의 예시적인 동작을 예시하는 플로우차트이다.
도 33 은 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다.
도 34 는 본 개시물의 기법에 따른, 비디오 데이터를 디코딩하는 비디오 디코더의 예시적인 동작을 예시하는 플로우차트이다.
도 35 는 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다.
도 36 은 본 개시물의 기법에 따른, 비디오 데이터를 디코딩하는 비디오 디코더의 예시적인 동작을 예시하는 플로우차트이다.
비디오 압축이 향상됨에 따라, 모션 벡터들을 나타내는데 사용되는 인코딩된 데이터의 비율이 증가하였다. 따라서, 더 높은 비디오 압축을 달성하기 위해, 모션 벡터들이 인코딩되는 방법을 향상시키는 것이 바람직할 수도 있다. 더 높은 비디오 압축을 달성하는 것이 기존 기반구조를 통해서 더 높은-품질 비디오 데이터를 전송하거나, 네트워크 혼잡을 감소시키는 등과 같은 다수의 이유들로 바람직하다. 모션 벡터 예측은 블록에 대한 모션 벡터를 인코딩하는데 사용되는 데이터의 양을 감소시키는 하나의 일반적인 방법이다. 대부분의 모션 벡터 예측 시스템들에서, 비디오 인코더는 블록에 대한 모션 벡터 예측자들의 리스트를 결정하고, 모션 벡터 예측자를 선택하고, 그후 선택된 모션 벡터의 리스트에서의 위치를 시그널링한다. 비디오 디코더는 모션 벡터 예측자들의 동일한 리스트를 결정하고, 선택된 모션 벡터 예측자를 비트스트림으로 시그널링된 데이터에 기초하여 결정한다. 비디오 디코더는 그후 모션 벡터 예측자를 이용하여 블록의 하나 이상의 모션 벡터들을 결정할 수도 있다.
본 개시물은 복원된 모션 벡터 정보를 보다 완전하게 이용함으로써, 모션 벡터 예측을 향상시켜 비디오 압축 효율을 잠재적으로 향상시키는 기법들을 기술한다. 예를 들어, 본 개시물은 현재의 픽처의 현재의 블록에 공간적으로 인접하지 않는 현재의 픽처의 하나 이상의 블록들로부터의 모션 벡터 예측자들을 이용하는 기법들을 기술한다. 이 예에서, 비디오 코더 (예컨대, 비디오 인코더 또는 비디오 디코더) 는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다. 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 더욱이, 이 예에서, 비디오 코더는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정할 수도 있다. 비디오 코더는 그후 (예컨대, 현재의 블록에 대한 MVP 에 기초하여) 현재의 블록의 모션 벡터를 결정할 수도 있다. 추가적으로, 비디오 코더는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다.
더욱이, 본 개시물은 합성 모션 벡터 후보들을 발생시키는 기법들을 기술한다. 본 개시물은 또한 추가적인 시간 모션 벡터 예측자 후보들을 발생시키는 기법들을 기술한다. 게다가, 본 개시물은 현재의 픽처의 현재의 블록에 공간적으로 인접하지 않는 현재의 픽처의 하나 이상의 블록들로부터의 인트라 예측 모드들을 이용하여 현재의 블록에 대한 가장 가능성있는 인트라 예측 모드들의 세트에서 하나 이상의 가장 가능성있는 인트라 예측 모드들을 결정하는 기법들을 기술한다. 본 개시물의 기법들, 또는 서브-이들의 조합들은 함께 또는 별개로 사용될 수도 있다.
도 1 은 본 개시물의 기법들을 이용할 수도 있는 예시적인 비디오 인코딩 및 디코딩 시스템 (10) 을 예시하는 블록도이다. 도 1 에 나타낸 바와 같이, 시스템 (10) 은 목적지 디바이스 (14) 에 의해 추후에 디코딩될 인코딩된 비디오 데이터를 제공하는 소스 디바이스 (12) 를 포함한다. 소스 디바이스 (12) 는 비디오 데이터를 인코딩하는 장치일 수도 있으며, 목적지 디바이스 (14) 는 비디오 데이터를 디코딩하는 장치일 수도 있다. 특히, 소스 디바이스 (12) 는 인코딩된 비디오 데이터를 목적지 디바이스 (14) 에 컴퓨터-판독가능 매체 (16) 를 통해서 제공한다. 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 데스크탑 컴퓨터들, 노트북 (즉, 랩탑) 컴퓨터들, 태블릿 컴퓨터들, 셋-탑 박스들, 소위 "스마트" 폰들과 같은 전화기 핸드셋들, 태블릿 컴퓨터들, 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 비디오 스트리밍 디바이스들, 또는 기타 등등을 포함한, 광범위한 디바이스들 및 장치들 중 임의의 것을 포함할 수도 있다. 일부의 경우, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 무선 통신용으로 탑재된다. 따라서, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 무선 통신 디바이스들일 수도 있다. 본 개시물에서 설명하는 기법들은 무선 및/또는 유선 애플리케이션들에 적용될 수도 있다. 소스 디바이스 (12) 는 예시적인 비디오 인코딩 디바이스 (즉, 비디오 데이터를 인코딩하는 디바이스) 이다. 목적지 디바이스 (14) 는 예시적인 비디오 디코딩 디바이스 (즉, 비디오 데이터를 디코딩하는 디바이스) 이다.
도 1 의 예시된 시스템 (10) 은 단지 일 예이다. 비디오 데이터를 프로세싱하는 기법들은 임의의 디지털 비디오 인코딩 및/또는 디코딩 디바이스에 의해 수행될 수도 있다. 일부 예들에서, 본 기법들은 "코덱" 으로서 일반적으로 지칭되는, 비디오 인코더/디코더에 의해 수행될 수도 있다. 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 소스 디바이스 (12) 가 목적지 디바이스 (14) 로의 송신을 위해 코딩된 비디오 데이터를 발생시키는 그러한 코딩 디바이스들의 예들이다. 일부 예들에서, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 소스 디바이스 (12) 및 목적지 디바이스 (14) 각각이 비디오 인코딩 및 디코딩 컴포넌트들을 포함하도록, 실질적으로 대칭적 방식으로 동작한다. 그러므로, 시스템 (10) 은 예컨대, 비디오 스트리밍, 비디오 플레이백, 비디오 브로드캐스팅, 또는 비디오 전화 통신을 위해, 소스 디바이스 (12) 와 목적지 디바이스 (14) 사이에 단방향 또는 양방향 비디오 송신을 지원할 수도 있다.
도 1 의 예에서, 소스 디바이스 (12) 는 비디오 소스 (18), 비디오 데이터를 저장하도록 구성된 저장 매체들 (19), 비디오 인코더 (20), 및 출력 인터페이스 (22) 를 포함한다. 목적지 디바이스 (14) 는 입력 인터페이스 (26), 인코딩된 비디오 데이터를 저장하도록 구성된 저장 매체들 (28), 비디오 디코더 (30), 및 디스플레이 디바이스 (32) 를 포함한다. 다른 예들에서, 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 다른 컴포넌트들 또는 배열들을 포함한다. 예를 들어, 소스 디바이스 (12) 는 비디오 데이터를 외부 카메라와 같은 외부 비디오 소스로부터 수신할 수도 있다. 이와 유사하게, 목적지 디바이스 (14) 는 통합된 디스플레이 디바이스를 포함하는 대신, 외부 디스플레이 디바이스와 인터페이스할 수도 있다.
비디오 소스 (18) 는 비디오 데이터의 소스이다. 비디오 데이터는 일련의 픽처들을 포함할 수도 있다. 비디오 소스 (18) 는 비디오 카메라와 같은 비디오 캡쳐 디바이스, 이전에 캡쳐된 비디오를 포함하는 비디오 아카이브, 및/또는 비디오 콘텐츠 제공자로부터 비디오 데이터를 수신하는 비디오 공급 인터페이스를 포함할 수도 있다. 일부 예들에서, 비디오 소스 (18) 는 컴퓨터 그래픽스-기반의 데이터, 또는 라이브 비디오, 아카이브된 비디오, 및 컴퓨터 발생된 비디오의 조합을 발생시킨다. 저장 매체들 (19) 은 비디오 데이터를 저장하도록 구성될 수도 있다. 각 경우, 캡쳐되거나, 사전-캡쳐되거나, 또는 컴퓨터-발생된 비디오는 비디오 인코더 (20) 에 의해 인코딩될 수도 있다.
출력 인터페이스 (22) 는 그 인코딩된 비디오 정보를 컴퓨터-판독가능 매체 (16) 로 출력할 수도 있다. 출력 인터페이스 (22) 는 다양한 유형들의 컴포넌트들 또는 디바이스들을 포함할 수도 있다. 예를 들어, 출력 인터페이스 (22) 는 무선 송신기, 모뎀, 유선 네트워킹 컴포넌트 (예컨대, 이더넷 카드), 또는 다른 물리적인 컴포넌트를 포함할 수도 있다. 출력 인터페이스 (22) 가 무선 송신기를 포함하는 예들에서, 출력 인터페이스 (22) 는 4G, 4G-LTE, LTE 어드밴스트, 5G 등과 같은 셀룰러 통신 표준에 따라서 변조된, 인코딩된 비디오 데이터와 같은, 데이터를 송신하도록 구성될 수도 있다. 출력 인터페이스 (22) 가 무선 송신기를 포함하는 일부 예들에서, 출력 인터페이스 (22) 는 IEEE 802.11 사양, IEEE 802.15 사양 (예컨대, ZigBee ™), 블루투스 ™ 표준 등과 같은, 다른 무선 표준들에 따라서 변조된, 인코딩된 비디오 데이터와 같은, 데이터를 송신하도록 구성될 수도 있다. 일부 예들에서, 출력 인터페이스 (22) 의 회로부는 비디오 인코더 (20) 의 회로부 및/또는 소스 디바이스 (12) 의 다른 컴포넌트들로 통합된다. 예를 들어, 비디오 인코더 (20) 및 출력 인터페이스 (22) 는 시스템 온 칩 (SoC) 의 부분들일 수도 있다. SoC 는 또한 범용 마이크로프로세서, 그래픽 프로세싱 유닛, 등과 같은, 다른 컴포넌트들을 포함할 수도 있다.
목적지 디바이스 (14) 는 디코딩될 인코딩된 비디오 데이터를 컴퓨터-판독가능 매체 (16) 를 통해서 수신할 수도 있다. 컴퓨터-판독가능 매체 (16) 는 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 이동시킬 수 있는 임의 종류의 매체 또는 디바이스를 포함할 수도 있다. 일부 예들에서, 컴퓨터-판독가능 매체 (16) 는 소스 디바이스 (12) 로 하여금 인코딩된 비디오 데이터를 직접 목적지 디바이스 (14) 로 실시간으로 송신할 수 있게 하는 통신 매체를 포함한다. 통신 매체는 무선 주파수 (RF) 스펙트럼 또는 하나 이상의 물리적인 송신 라인들과 같은, 임의의 무선 또는 유선 통신 매체를 포함할 수도 있다. 통신 매체는 근거리 네트워크, 광역 네트워크, 또는 글로벌 네트워크, 예컨대 인터넷과 같은 패킷-기반 네트워크의 일부를 형성할 수도 있다. 통신 매체는 라우터들, 스위치들, 기지국들, 또는 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 통신을 용이하게 하는데 유용할 수도 있는 임의의 다른 장비를 포함할 수도 있다. 목적지 디바이스 (14) 는 인코딩된 비디오 데이터 및 디코딩된 비디오 데이터를 저장하도록 구성된 하나 이상의 데이터 저장 매체들을 포함할 수도 있다.
일부 예들에서, 출력 인터페이스 (22) 는 인코딩된 비디오 데이터와 같은 데이터를 저장 디바이스와 같은 중간 디바이스로 출력할 수도 있다. 이와 유사하게, 목적지 디바이스 (14) 의 입력 인터페이스 (26) 는 인코딩된 데이터를 중간 디바이스로부터 수신할 수도 있다. 중간 디바이스는 하드 드라이브, 블루-레이 디스크들, DVD들, CD-ROM들, 플래시 메모리, 휘발성 또는 비-휘발성 메모리, 또는 인코딩된 비디오 데이터를 저장하기 위한 임의의 다른 적합한 디지털 저장 매체들과 같은 다양한 분산된 또는 로컬 액세스되는 데이터 저장 매체들 중 임의의 데이터 저장 매체를 포함할 수도 있다. 일부 예들에서, 중간 디바이스는 파일 서버에 대응한다. 예시적인 파일 서버들은 웹 서버들, FTP 서버들, NAS (network attached storage) 디바이스들, 또는 로컬 디스크 드라이브들을 포함한다.
목적지 디바이스 (14) 는 인터넷 접속을 포함한, 임의의 표준 데이터 접속을 통해서, 인코딩된 비디오 데이터에 액세스할 수도 있다. 이것은 파일 서버 상에 저장되는 인코딩된 비디오 데이터에 액세스하는데 적합한, 무선 채널 (예컨대, Wi-Fi 접속), 유선 접속 (예컨대, DSL, 케이블 모뎀 등), 또는 양쪽의 조합을 포함할 수도 있다. 저장 디바이스로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신, 또는 이들의 조합일 수도 있다.
컴퓨터-판독가능 매체 (16) 는 무선 브로드캐스트 또는 유선 네트워크 송신과 같은 일시성 매체, 또는 하드 디스크, 플래시 드라이브, 컴팩트 디스크, 디지털 비디오 디스크, 블루-레이 디스크, 또는 다른 컴퓨터-판독가능 매체들과 같은 저장 매체들 (즉, 비일시성 저장 매체들) 을 포함할 수도 있다. 일부 예들에서, 네트워크 서버 (미도시) 는 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 수신하고 그 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로, 예컨대, 네트워크 송신을 통해서 제공할 수도 있다. 이와 유사하게, 디스크 스탬핑 설비와 같은 매체 생산 설비의 컴퓨팅 디바이스는 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 수신하고 그 인코딩된 비디오 데이터를 포함하는 디스크를 제조할 수도 있다. 따라서, 컴퓨터-판독가능 매체 (16) 는 다양한 예들에서, 다양한 형태들의 하나 이상의 컴퓨터-판독가능 매체들을 포함하는 것으로 이해될 수도 있다.
목적지 디바이스 (14) 의 입력 인터페이스 (26) 는 컴퓨터-판독가능 매체 (16) 로부터 데이터를 수신한다. 입력 인터페이스 (26) 는 다양한 유형들의 컴포넌트들 또는 디바이스들을 포함할 수도 있다. 예를 들어, 입력 인터페이스 (26) 는 무선 수신기, 모뎀, 유선 네트워킹 컴포넌트 (예컨대, 이더넷 카드), 또는 다른 물리적인 컴포넌트를 포함할 수도 있다. 입력 인터페이스 (26) 가 무선 수신기를 포함하는 예들에서, 입력 인터페이스 (26) 는 4G, 4G-LTE, LTE 어드밴스트, 5G 등과 같은, 셀룰러 통신 표준에 따라서 변조된, 비트스트림과 같은 데이터를 수신하도록 구성될 수도 있다. 입력 인터페이스 (26) 가 무선 수신기를 포함하는 일부 예들에서, 입력 인터페이스 (26) 는 IEEE 802.11 사양, IEEE 802.15 사양 (예컨대, ZigBee ™), 블루투스 ™ 표준 등과 같은, 다른 무선 표준들에 따라서 변조된, 비트스트림과 같은, 데이터를 수신하도록 구성될 수도 있다. 일부 예들에서, 입력 인터페이스 (26) 의 회로부는 비디오 디코더 (30) 의 회로부 및/또는 목적지 디바이스 (14) 의 다른 컴포넌트들로 통합될 수도 있다. 예를 들어, 비디오 디코더 (30) 및 입력 인터페이스 (26) 는 SoC 의 부분들일 수도 있다. SoC 는 또한 범용 마이크로프로세서, 그래픽 프로세싱 유닛, 등과 같은, 다른 컴포넌트들을 포함할 수도 있다.
저장 매체들 (28) 은 입력 인터페이스 (26) 에 의해 수신되는 인코딩된 비디오 데이터 (예컨대, 비트스트림) 와 같은, 인코딩된 비디오 데이터를 저장하도록 구성될 수도 있다. 디스플레이 디바이스 (32) 는 디코딩된 비디오 데이터를 사용자에게 디스플레이한다. 디스플레이 디바이스 (32) 는 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 또는 또 다른 유형의 디스플레이 디바이스와 같은 다양한 디스플레이 디바이스들 중 임의의 디스플레이 디바이스를 포함할 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (30) 각각은 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서들 (DSPs), 주문형 집적회로들 (ASICs), 필드 프로그래밍가능 게이트 어레이들 (FPGAs), 이산 로직, 소프트웨어, 하드웨어, 펌웨어 또는 임의의 이들의 조합들과 같은, 다양한 적합한 회로부 중 임의의 회로부로 구현될 수도 있다. 이 기법들이 소프트웨어로 부분적으로 구현되는 경우, 디바이스는 본 개시물의 기법들을 수행하기 위해서, 소프트웨어용 명령들을 적합한 비일시성 컴퓨터-판독가능 매체에 저장할 수도 있으며 하드웨어에서 하나 이상의 프로세서들을 이용하여 그 명령들을 실행할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 각각은 하나 이상의 인코더들 또는 디코더들에 포함될 수도 있으며, 이들 중 어느 쪽이든 개별 디바이스에서 결합된 인코더/디코더 (CODEC) 의 일부분으로서 통합될 수도 있다. 일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 비디오 코딩 표준 또는 사양에 따라서 비디오 데이터를 인코딩 및 디코딩한다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 또는 ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual 및 그의 스케일러블 비디오 코딩 (SVC) 및 멀티-뷰 비디오 코딩 (MVC) 확장판들을 포함하는 (ISO/IEC MPEG-4 AVC 로서 또한 알려진) ITU-T H.264, 또는 다른 비디오 코딩 표준 또는 사양에 따라서, 비디오 데이터를 인코딩 및 디코딩할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 ITU-T H.265 로서 알려져 있는, HEVC (High Efficiency Video Coding), 또는 그의 범위 및 스크린 콘텐츠 코딩 확장판들, 그의 3D 비디오 코딩 확장판 (3D-HEVC), 그의 멀티뷰 확장판 (MV-HEVC), 또는 그의 스케일러블 확장판 (SHVC) 에 따라서, 비디오 데이터를 인코딩 및 디코딩한다. HEVC, SHVC, 및 3D-HEVC 는 비디오 코딩에 관한 합동 작업팀 (JCT-VC) 뿐만 아니라, ITU-T 비디오 코딩 전문가 그룹 (VCEG) 과 ISO/IEC 동화상 전문가 그룹 (MPEG) 의 3D 비디오 코딩 확장판 개발을 위한 합동 연구팀 (JCT-3V) 에 의해 개발되었다.
ITU-T VCEG (Q6/16) 및 ISO/IEC MPEG (JTC 1/SC 29/WG 11) 는 현재 (스크린 콘텐츠 코딩 및 높은-동적-범위 코딩에 대한 그의 현재의 확장판들 및 최근 확장판들을 포함하는) 현재의 HEVC 표준의 압축 능력을 현저하게 넘어서는 압축 능력을 가진 미래 비디오 코딩 기술의 표준화에 대한 잠재적인 필요성을 연구하고 있다. 이 그룹들은 이 분야에서의 이들의 전문가들에 의해 제안된 압축 기술 설계들을 평가하기 위해 공동 비디오 탐사 팀 (JVET) 으로 알려져 있는 공동 협력 노력으로 이러한 탐사 활동에 함께 협력하고 있다. JVET 는 2015년 10월 19일 내지 21일 동안 처음 만났다. ITU-T SG 16 WP 3 과 ISO/IEC JTC 1/SC 29/WG 11 의 공동 비디오 탐사 팀 (JVET), 2017년 1월 12-20일, 스위스, 제네바, 5차 회의, 문헌 JVET E-1001, Chen 등., "Algorithm Description of Joint Exploration Test Model 5" 이 공동 탐사 테스트 모델 6 (JEM5) 의 알고리즘 설명이다. ITU-T SG 16 WP 3 과 ISO/IEC JTC 1/SC 29/WG 11 의 공동 비디오 탐사 팀 (JVET), 2017년 3월 31일 - 4월 7일, 호주, 호바트, 6차 회의, 문헌 JVET F-1001, Chen 등., "Algorithm Description of Joint Exploration Test Model 6" 이 공동 탐사 테스트 모델 6 (JEM6) 의 알고리즘 설명이다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 공동 탐사 모델 또는 현재 개발중인 새로운 VVC (Versatile Video Coding) 에 따라서 동작할 수도 있다.
본 개시물은 일반적으로 신택스 엘리먼트들과 같은, 특정의 정보를 "시그널링하는 것"에 관한 것이다. 용어 "시그널링" 은 일반적으로, 인코딩된 비디오 데이터를 디코딩하는데 사용되는, 신택스 엘리먼트들 및/또는 다른 데이터의 통신을 지칭할 수도 있다. 이런 통신은 실시간 또는 거의-실시간으로 일어날 수도 있다. 대안적으로, 이런 통신은 어떤 기간에 걸쳐서 일어날 수도 있으며, 예컨대 인코딩 시에 신택스 엘리먼트들을 컴퓨터-판독가능 저장 매체에 비트스트림으로 저장할 때에 발생할 수도 있으며, 이 신택스 엘리먼트들은 그후 이 매체에 저장되어진 후 언제라도 디코딩 디바이스에 의해 취출될 수도 있다.
HEVC 및 다른 비디오 코딩 사양들에서, 비디오 데이터는 일련의 픽처들을 포함한다. 픽처들은 또한 "프레임들" 로서 지칭될 수도 있다. 픽처는 하나 이상의 샘플 어레이들을 포함할 수도 있다. 픽처의 각각의 개별 샘플 어레이는 개별 칼라 성분에 대한 샘플들의 어레이를 포함할 수도 있다. 픽처는 SL, SCb, 및 SCr 로 표기되는, 3개의 샘플 어레이들을 포함할 수도 있다. SL 은 루마 샘플들의 2차원 어레이 (즉, 블록) 이다. SCb 는 Cb 색차 샘플들의 2차원 어레이이다. SCr 은 Cr 색차 샘플들의 2차원 어레이이다. 다른 경우, 픽처는 단색일 수도 있으며 단지 루마 샘플들의 어레이 만을 포함할 수도 있다.
비디오 데이터를 인코딩하는 것의 부분으로서, 비디오 인코더 (20) 는 비디오 데이터의 픽처들을 인코딩할 수도 있다. 다시 말해서, 비디오 인코더 (20) 는 비디오 데이터의 픽처들의 인코딩된 표현들을 발생시킬 수도 있다. 픽처의 인코딩된 표현은 "코딩된 픽처" 또는 "인코딩된 픽처" 로서 본원에서 지칭될 수도 있다.
픽처의 인코딩된 표현을 발생하기 위해, 비디오 인코더 (20) 는 픽처의 블록들을 인코딩할 수도 있다. 비디오 인코더 (20) 는 비트스트림에서, 비디오 블록의 인코딩된 표현을 포함할 수도 있다. 일부 예들에서, 픽처의 블록을 인코딩하기 위해, 비디오 인코더 (20) 는 인트라 예측 또는 인터 예측을 수행하여 하나 이상의 예측 블록들을 발생시킨다. 추가적으로, 비디오 인코더 (20) 는 블록에 대한 잔차 데이터를 발생시킬 수도 있다. 잔차 블록은 잔차 샘플들을 포함한다. 각각의 잔차 샘플은 발생된 예측 블록들 중 하나의 샘플과 블록의 대응하는 샘플 사이의 차이를 표시할 수도 있다. 이러한 방법으로, 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다. 비디오 인코더 (20) 는 잔차 샘플들의 블록들에 변환을 적용하여 변환 계수들을 발생시킬 수도 있다. 더욱이, 비디오 인코더 (20) 는 그 변환 계수들을 양자화할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 변환 계수를 나타내는 하나 이상의 신택스 엘리먼트들을 발생시킬 수도 있다. 비디오 인코더 (20) 는 변환 계수를 나타내는 신택스 엘리먼트들 중 하나 이상을 엔트로피 인코딩할 수도 있다.
좀더 구체적으로, 픽처의 인코딩된 표현을 발생시키기 위해 HEVC 또는 다른 비디오 코딩 사양들에 따라서 비디오 데이터를 인코딩할 때, 비디오 인코더 (20) 는 픽처의 각각의 샘플 어레이를 코딩 트리 블록들 (CTBs) 로 파티셔닝하여 CTB들을 인코딩할 수도 있다. CTB 는 픽처의 샘플 어레이에서의 샘플들의 NxN 블록일 수도 있다. HEVC 메인 프로파일에서, CTB 의 사이즈는 16x16 내지 64x64 의 범위일 수 있지만, 기술적으로 8x8 CTB 사이즈들이 지원될 수 있다.
픽처의 코딩 트리 유닛 (CTU) 은 하나 이상의 CTB들을 포함할 수도 있으며, 하나 이상의 CTB들의 샘플들을 인코딩하는데 사용되는 신택스 구조들을 포함할 수도 있다. 예를 들어, 각각의 CTU 는 루마 샘플들의 CTB, 크로마 샘플들의 2개의 대응하는 CTB들, 및 CTB들의 샘플들을 인코딩하는데 사용되는 신택스 구조들을 포함할 수도 있다. 단색 픽처들 또는 3개의 별개의 칼라 평면들을 가지는 픽처들에서, CTU 는 단일 CTB 및 CTB 의 샘플들을 인코딩하는데 사용되는 신택스 구조들을 포함할 수도 있다. CTU 는 또한 "트리 블록" 또는 "최대 코딩 유닛" (LCU) 으로서 지칭될 수도 있다. 본 개시물에서, "신택스 구조" 는 규정된 순서로 비트스트림으로 함께 제공되는 제로 이상의 신택스 엘리먼트들로서 정의될 수도 있다. 일부 코덱들에서, 인코딩된 픽처는 픽처의 모든 CTU들을 포함하는 인코딩된 표현이다.
픽처의 CTU 를 인코딩하기 위해, 비디오 인코더 (20) 는 CTU 의 CTB들을 하나 이상의 코딩 블록들로 파티셔닝할 수도 있다. 코딩 블록은 샘플들의 NxN 블록이다. 일부 코덱들에서, 픽처의 CTU 를 인코딩하기 위해, 비디오 인코더 (20) 는 CTU 의 코딩 트리 블록들에 대해 쿼드-트리 파티셔닝을 회귀적으로 수행하여, CTB들을 코딩 블록들, 따라서 이름 "코딩 트리 유닛들" 로 파티셔닝할 수도 있다. 코딩 유닛 (CU) 은 하나 이상의 코딩 블록들의 샘플들을 인코딩하는데 사용되는 하나 이상의 코딩 블록들 및 신택스 구조들을 포함할 수도 있다. 예를 들어, CU 는 루마 샘플들의 코딩 블록 및 루마 샘플 어레이, Cb 샘플 어레이, 및 Cr 샘플 어레이를 가지는 픽처의 크로마 샘플들의 2개의 대응하는 코딩 블록들, 및 코딩 블록들의 샘플들을 인코딩하는데 사용되는 신택스 구조들을 포함할 수도 있다. 단색 픽처들 또는 3개의 별개의 칼라 평면들을 가지는 픽처들에서, CU 는 단일 코딩 블록 및 코딩 블록의 샘플들을 코딩하는데 사용되는 신택스 구조들을 포함할 수도 있다. HEVC 에서, 슬라이스에서의 최대 코딩 유닛은 코딩 트리 블록 (CTB) 또는 코딩 트리 유닛 (CTU) 로 불린다. CTB 는 쿼드-트리를 포함하며, 그 쿼드-트리의 노드들은 CU들이다. CTB 의 사이즈는 (기술적으로 8x8 CTB 사이즈들이 지원될 수도 있지만) HEVC 메인 프로파일에서 16x16 로부터 64x64 까지의 범위일 수 있다. 코딩 유닛 (CU) 은 동일한 사이즈의 CTB 일 수 있으며 8x8 만큼 작을 수 있다. 각각의 코딩 유닛은 하나의 모드로 코딩된다.
게다가, 비디오 인코더 (20) 는 비디오 데이터의 픽처의 CU들을 인코딩할 수도 있다. 일부 코덱들에서, CU 를 인코딩하는 것의 일부분으로서, 비디오 인코더 (20) 는 CU 의 코딩 블록을 하나 이상의 예측 블록들로 파티셔닝할 수도 있다. 예측 블록은 동일한 예측이 적용되는 샘플들의 직사각형 (즉, 정사각형 또는 비-정사각형) 블록이다. CU 의 예측 유닛 (PU) 은 CU 의 하나 이상의 예측 블록들 및 하나 이상의 예측 블록들을 예측하는데 사용되는 신택스 구조들을 포함할 수도 있다. 예를 들어, PU 는 루마 샘플들의 예측 블록, 크로마 샘플들의 2개의 대응하는 예측 블록들, 및 예측 블록들을 예측하는데 사용되는 신택스 구조들을 포함할 수도 있다. 단색 픽처들 또는 3개의 별개의 칼라 평면들을 가지는 픽처들에서, PU 는 단일 예측 블록 및 예측 블록을 예측하는데 사용되는 신택스 구조들을 포함할 수도 있다.
비디오 인코더 (20) 는 CU 의 PU 의 예측 블록들 (예컨대, 루마, Cb, 및 Cr 예측 블록) 에 대해 예측 블록들 (예컨대, 루마, Cb, 및 Cr 예측 블록) 을 발생시킬 수도 있다. 비디오 인코더 (20) 는 인트라 예측 또는 인터 예측을 이용하여 예측 블록을 발생할 수도 있다. 비디오 인코더 (20) 가 예측 블록들을 발생시키기 위해 인트라-예측을 이용하면, 비디오 인코더 (20) 는 CU 를 포함하는 픽처의 디코딩된 샘플들에 기초하여 예측 블록을 발생시킬 수도 있다. 비디오 인코더 (20) 가 현재 픽처의 PU 의 예측 블록을 발생시키기 위해 인터-예측을 이용하면, 비디오 인코더 (20) 는 참조 픽처 (즉, 현재 픽처가 아닌 픽처) 의 디코딩된 샘플들에 기초하여 PU 의 예측 블록을 발생시킬 수도 있다. HEVC 에서, 비디오 인코더 (20) 는 인터 예측된 PU들에 대한 "coding_unit" 신택스 구조 내 "prediction_unit" 신택스 구조를 발생시키지만, 인트라 예측된 PU들에 대한 "coding_unit" 신택스 구조 내 "prediction_unit" 신택스 구조를 발생시키지 않는다. 대신, HEVC 에서, 인트라 예측된 PU들에 관련된 신택스 엘리먼트들이 "coding_unit" 신택스 구조에 직접 포함된다. CU 가 인터 코딩될 때, CU 는 2 또는 4 개의 PU들로 추가로 파티셔닝되거나 또는 추가적인 파티셔닝이 적용되지 않는 경우 단지 하나의 PU 가 될 수도 있다. 2개의 PU들이 하나의 CU 에 존재할 때, 이들은 절반 사이즈 직사각형들 또는 CU 의 ¼ 또는 ¾ 사이즈를 갖는 2개의 직사각형 사이즈일 수 있다. CU 가 인터 코딩될 때, 모션 정보의 하나의 세트가 각각의 PU 에 대해 존재한다. 또, 각각의 PU 는 모션 정보의 세트를 유도하기 위해 고유한 인터 - 예측 모드로 코딩된다. 본 개시물에서, 용어 "블록" 은 CU, PU 또는 비디오 코딩 목적에 사용되는 임의의 다른 코딩 유닛들을 지칭할 수도 있다.
비디오 인코더 (20) 또는 비디오 디코더 (30) 와 같은, 비디오 코더는 복수의 가용 인트라 예측 모드들로부터 선택된 인트라 예측 모드를 이용하여 인트라 예측을 수행할 수도 있다. 인트라 예측 모드들은 인트라 예측 방향들로서 또한 지칭될 수도 있는 방향 인트라 예측 모드들을 포함할 수도 있다. 상이한 방향 인트라 예측 모드들은 상이한 각도들에 대응한다. 일부 예들에서, 방향 인트라 예측 모드를 이용하여 예측 블록의 현재의 샘플의 값을 결정하기 위해, 비디오 코더는 방향 인트라 예측 모드에 대응하는 각도에서 현재의 샘플을 통과하는 라인이 경계 샘플들의 세트와 교차하는 지점을 결정할 수도 있다. 경계 샘플들은 예측 블록의 바로 좌측에 있는 칼럼의 샘플들 및 예측 블록의 바로 위에 있는 로우의 샘플들을 포함할 수도 있다. 그 지점이 경계 샘플들 중 2개 사이이면, 비디오 코더는 내삽하거나 또는 아니면 그 지점에 대응하는 값을 결정할 수도 있다. 그 지점이 경계 샘플들 중 단일 경계 샘플에 대응하면, 비디오 코더는 그 지점의 값이 경계 샘플과 동일하다고 결정할 수도 있다. 비디오 코더는 예측 블록의 현재의 샘플의 값을 그 지점의 결정된 값과 동일하게 설정할 수도 있다.
HEVC 및 어떤 다른 코덱들에서, 비디오 인코더 (20) 는 오직 하나의 예측 모드 (즉, 인트라 예측 또는 인터 예측) 를 이용하여 CU 를 인코딩한다. 따라서, HEVC 및 특정의 다른 코덱들에서, 비디오 인코더 (20) 는 CU 의 각각의 PU 의 예측 블록들을 인트라 예측을 이용하여 발생시킬 수도 있거나 또는 비디오 인코더 (20) 는 CU 의 각각의 PU 의 예측 블록들을 인터 예측을 이용하여 발생시킬 수도 있다. 비디오 인코더 (20) 가 CU 를 인코딩하기 위해 인터 예측을 이용할 때, 비디오 인코더 (20) 는 CU 를 2 또는 4 개의 PU들로 파티셔닝할 수도 있거나, 또는 하나의 PU 는 전체 CU 에 대응한다. 2개의 PU들이 하나의 CU 에 존재할 때, 2개의 PU들은 CU 의 절반 사이즈 직사각형들 또는 1/4 또는 3/4 사이즈의 2개의 직사각형 사이즈들일 수 있다. HEVC 에서, 인터 예측 모드로 코딩되는 CU 에 대해 8개의 파티션 모드들, 즉, PART_2Nx2N, PART_2NxN, PART_Nx2N, PART_NxN, PART_2NxnU, PART_2NxnD, PART_nLx2N 및 PART_nRx2N 이 존재한다. CU 가 인트라 예측될 때, 2Nx2N 및 NxN 은 유일한 허용가능한 PU 형태들이고, 각각의 PU 내에서 단일 인트라 예측 모드가 코딩된다 (반면 크로마 예측 모드는 CU 레벨에서 시그널링된다).
비디오 인코더 (20) 는 CU 에 대한 하나 이상의 잔차 블록들을 발생시킬 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 에 대한 루마 잔차 블록을 발생시킬 수도 있다. CU 의 루마 잔차 블록에서의 각각의 샘플은 CU 의 예측 루마 블록들 중 하나에서의 루마 샘플과 CU 의 원래 루마 코딩 블록에서의 대응하는 샘플 사이의 차이를 나타낸다. 게다가, 비디오 인코더 (20) 는 CU 에 대한 Cb 잔차 블록을 발생시킬 수도 있다. CU 의 Cb 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cb 블록들 중 하나에서의 Cb 샘플과 CU 의 원래 Cb 코딩 블록에서의 대응하는 샘플 사이의 차이를 나타낼 수도 있다. 비디오 인코더 (20) 는 또한 CU 에 대한 Cr 잔차 블록을 발생시킬 수도 있다. CU 의 Cr 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cr 블록들 중 하나에서의 Cr 샘플과 CU 의 원래 Cr 코딩 블록에서의 대응하는 샘플 사이의 차이를 나타낼 수도 있다.
더욱이, 비디오 인코더 (20) 는 CU 의 잔차 블록들을 하나 이상의 변환 블록들로 분해할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 쿼드-트리 파티셔닝을 이용하여, CU 의 잔차 블록들을 하나 이상의 변환 블록들로 분해할 수도 있다. 변환 블록은 동일한 변환이 적용되는 샘플들의 직사각형 (예컨대, 정사각형 또는 비-정사각형) 블록이다. CU 의 변환 유닛 (TU) 은 하나 이상의 변환 블록들을 포함할 수도 있다. 예를 들어, TU 는 루마 샘플들의 변환 블록, 크로마 샘플들의 2개의 대응하는 변환 블록들, 및 변환 블록 샘플들을 변환하는데 사용되는 신택스 구조들을 포함할 수도 있다. 따라서, CU 의 각각의 TU 는 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록을 가질 수도 있다. TU 의 루마 변환 블록은 CU 의 루마 잔차 블록의 서브-블록일 수도 있다. Cb 변환 블록은 CU 의 Cb 잔차 블록의 서브-블록일 수도 있다. Cr 변환 블록은 CU 의 Cr 잔차 블록의 서브-블록일 수도 있다. 단색 픽처들 또는 3개의 별개의 칼라 평면들을 가지는 픽처들에서, TU 는 단일 변환 블록 및 변환 블록의 샘플들을 변환하는데 사용되는 신택스 구조들을 포함할 수도 있다.
비디오 인코더 (20) 는 하나 이상의 변환들을 TU 의 변환 블록에 적용하여, TU 에 대한 계수 블록을 발생시킬 수도 있다. 계수 블록은 변환 계수들의 2차원 어레이일 수도 있다. 변환 계수는 스칼라 양일 수도 있다. 일부 예들에서, 하나 이상의 변환들은 변환 블록을 픽셀 도메인으로부터 주파수 도메인으로 변환한다. 따라서, 이러한 예들에서, 변환 계수는 주파수 도메인에 있는 것으로 간주되는 스칼라 양일 수도 있다. 변환 계수 레벨은 변환 계수 값의 계산에 대한 스케일링 이전에 디코딩 프로세스에서의 특정의 2-차원 주파수 인덱스와 연관된 값을 나타내는 정수 양이다.
일부 예들에서, 비디오 인코더 (20) 는 변환 블록에의 변환들의 적용을 스킵한다. 이러한 예들에서, 비디오 인코더 (20) 는 잔차 샘플 값들을 변환 계수들과 동일한 방법으로 처리할 수도 있다. 따라서, 비디오 인코더 (20) 가 변환들의 적용을 스킵하는 예들에서, 변환 계수들 및 계수 블록들의 다음 설명이 잔차 샘플들의 변환 블록들에 적용가능할 수도 있다.
JEM 에 따르면, 비디오 코더 (예컨대, 비디오 인코더 (200)) 는 픽처를 복수의 코딩 트리 유닛들 (CTUs) 로 파티셔닝한다. 비디오 인코더 (200) 는 쿼드트리-2진 트리 (QTBT) 구조와 같은, 트리 구조에 따라서 CTU 를 파티셔닝할 수도 있다. JEM 의 QTBT 구조는 HEVC 의 CU들, PU들, 및 TU들 사이의 분리와 같은, 다수의 파티션 유형들의 컨셉들을 제거한다. 따라서, JEM 의 컨텍스트에서, 용어 "PU" 또는 "TU" 는 CU 에 적용될 수도 있다. JEM 의 QTBT 구조는 2개의 레벨들: 쿼드트리 파티셔닝에 따라서 파티셔닝된 제 1 레벨, 및 2진 트리 파티셔닝에 따라서 파티셔닝된 제 2 레벨을 포함한다. QTBT 구조의 루트 노드는 CTU 에 대응한다. 2진 트리들의 리프 노드들은 코딩 유닛들 (CUs) 에 대응한다.
일부 예들에서, 비디오 인코더 (200) 및 비디오 디코더 (300) 는 휘도 및 색차 성분들의 각각을 나타내기 위해 단일 QTBT 구조를 이용할 수도 있으며, 반면 다른 예들에서, 비디오 인코더 (200) 및 비디오 디코더 (300) 는 휘도 성분에 대한 하나의 QTBT 구조 및 양자의 색차 성분들에 대한 다른 QTBT 구조 (또는, 개별 색차 성분들에 대해 2개의 QTBT 구조들) 과 같은, 2개 이상의 QTBT 구조들을 이용할 수도 있다.
계수 블록을 발생시킨 후, 비디오 인코더 (20) 는 계수 블록을 양자화하여 계수 블록을 나타내는데 사용되는 데이터의 양을 가능한 한 감소시킴으로써, 잠재적으로 추가적인 압축을 제공할 수도 있다. 양자화는 일반적으로 값들의 범위가 단일 값으로 압축되는 프로세스를 지칭한다. 예를 들어, 양자화는 그 값을 상수로 나눈 후, 가장 가까운 정수로 라운딩함으로써 이루어진다. 계수 블록을 양자화하기 위해, 비디오 인코더 (20) 는 계수 블록의 변환 계수들을 양자화할 수도 있다. 양자화는 그 변환 계수들의 일부 또는 모두와 연관되는 비트 심도를 감소시킬 수도 있다. 예를 들어, n-비트 변환 계수는 양자화 동안 m-비트 변환 계수로 절사될 수도 있으며, 여기서, n 은 m 보다 더 크다. 일부 예들에서, 비디오 인코더 (20) 는 양자화를 스킵한다.
비디오 인코더 (20) 는 일부 또는 모든 잠재적으로 양자화된 변환 계수들을 표시하는 신택스 엘리먼트들을 발생시킬 수도 있다. 비디오 인코더 (20) 는 양자화된 변환 계수를 표시하는 신택스 엘리먼트들 중 하나 이상을 엔트로피 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 양자화된 변환 계수들을 나타내는 신택스 엘리먼트들에 대해 컨텍스트-적응 2진 산술 코딩 (CABAC) 를 수행할 수도 있다. 따라서, 인코딩된 블록 (예컨대, 인코딩된 CU) 은 양자화된 변환 계수들을 표시하는 엔트로피 인코딩된 신택스 엘리먼트들을 포함할 수도 있다.
비디오 인코더 (20) 는 인코딩된 비디오 데이터를 포함하는 비트스트림을 출력할 수도 있다. 즉, 비디오 인코더 (20) 는 비디오 데이터의 인코딩된 표현을 포함하는 비트스트림을 출력할 수도 있다. 비디오 데이터의 인코딩된 표현은 비디오 데이터의 픽처들의 인코딩된 표현을 포함할 수도 있다. 예를 들어, 비트스트림은 비디오 데이터 및 연관된 데이터의 인코딩된 픽처들의 표현을 형성하는 비트들의 시퀀스를 포함할 수도 있다. 일부 예들에서, 인코딩된 픽처의 표현은 픽처의 블록들의 인코딩된 표현들을 포함할 수도 있다.
비디오 디코더 (30) 는 비디오 인코더 (20) 에 의해 발생되는 비트스트림을 수신할 수도 있다. 위에서 언급한 바와 같이, 비트스트림은 비디오 데이터의 인코딩된 표현을 포함할 수도 있다. 비디오 디코더 (30) 는 비트스트림을 디코딩하여, 비디오 데이터의 픽처들을 복원할 수도 있다. 비트스트림을 디코딩하는 것의 일부분으로서, 비디오 디코더 (30) 는 비트스트림으로부터 신택스 엘리먼트들을 획득할 수도 있다. 비디오 디코더 (30) 는 비트스트림으로부터 획득된 신택스 엘리먼트들에 적어도 부분적으로 기초하여 비디오 데이터의 픽처들을 복원할 수도 있다. 비디오 데이터의 픽처들을 복원하는 프로세스는 일반적으로 픽처들을 인코딩하기 위해 비디오 인코더 (20) 에 의해 수행되는 프로세스와 반대일 수도 있다.
예를 들어, 비디오 데이터의 픽처를 디코딩하는 것의 부분으로서, 비디오 디코더 (30) 는 인터 예측 또는 인트라 예측을 이용하여, 예측 블록들을 발생시킬 수도 있다. 추가적으로, 비디오 디코더 (30) 는 비트스트림으로부터 획득된 신택스 엘리먼트들에 기초하여, 변환 계수들을 결정할 수도 있다. 일부 예들에서, 비디오 디코더 (30) 는 결정된 변환 계수들을 역양자화한다. 역양자화는 양자화된 값을 복원된 값에 맵핑한다. 예를 들어, 비디오 디코더 (30) 는 양자화 단계 사이즈로 곱해진 값을 결정함으로써 역양자화할 수도 있다. 더욱이, 비디오 디코더 (30) 는 결정된 변환 계수들에 대해 역변환을 적용하여 잔차 샘플들의 값들을 결정할 수도 있다. 비디오 디코더 (30) 는 잔차 샘플들 및 발생된 예측 블록들의 대응하는 샘플들에 기초하여 픽처의 블록을 복원할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 잔차 샘플들을 발생된 예측 블록들의 대응하는 샘플들에 추가하여, 블록의 복원된 샘플들을 결정할 수도 있다.
좀더 구체적으로, HEVC 및 다른 비디오 코딩 사양들에서, 비디오 디코더 (30) 는 인터 예측 또는 인트라 예측을 이용하여 현재의 CU 의 각각의 PU 에 대한 하나 이상의 예측 블록들을 발생시킬 수도 있다. 게다가, 비디오 디코더 (30) 는 현재의 CU 의 TU들의 계수 블록들을 역양자화할 수도 있다. 비디오 디코더 (30) 는 계수 블록들에 관해 역변환들을 수행하여, 현재의 CU 의 TU들의 변환 블록들을 복원할 수도 있다. 비디오 디코더 (30) 는 현재의 CU 의 PU들의 예측 블록들의 샘플들 및 현재의 CU 의 TU들의 변환 블록들의 잔차 샘플들에 기초하여, 현재의 CU 의 코딩 블록을 복원할 수도 있다. 일부 예들에서, 비디오 디코더 (30) 는 현재의 CU 의 PU들에 대한 예측 블록들의 샘플들을 현재의 CU 의 TU들의 변환 블록들의 대응하는 디코딩된 샘플들에 가산함으로써, 현재의 CU 의 코딩 블록들을 복원할 수도 있다. 픽처의 각각의 CU 에 대해 코딩 블록들을 복원함으로써, 비디오 디코더 (30) 는 픽처를 복원할 수도 있다.
픽처의 슬라이스는 픽처의 정수 개수의 블록들을 포함할 수도 있다. 예를 들어, HEVC 및 다른 비디오 코딩 사양들에서, 픽처의 슬라이스는 픽처의 정수 개수의 CTU들을 포함할 수도 있다. 슬라이스의 CTU들은 래스터 스캔 순서와 같은 스캔 순서로 연속적으로 순서화될 수도 있다. HEVC 및 잠재적으로 다른 코덱들에서, 슬라이스는 하나의 독립적인 슬라이스 세그먼트 및 동일한 액세스 유닛 내 다음 독립적인 슬라이스 세그먼트 (있다면) 에 선행하는 모든 후속 의존적인 슬라이스 세그먼트들 (있다면) 에 포함되는 정수 개수의 CTU들로서 정의된다. 더욱이, HEVC 및 잠재적으로 다른 코덱들에서, 슬라이스 세그먼트는 타일 스캔으로 연속적으로 순서화되고 단일 NAL 유닛에 포함되는 정수 개수의 CTU들로서 정의된다. 타일 스캔은 CTB들이 타일에서 CTB 래스터 스캔으로 연속적으로 순서화되는 픽처를 파티셔닝하는 CTB들의 특정의 순차적 순서화이며, 반면 픽처 내 타일들은 픽처의 타일들의 래스터 스캔으로 연속적으로 순서화된다. 타일은 픽처에서 특정의 타일 칼럼 및 특정의 타일 로우 내 CTB들의 직사각형의 영역이다.
위에서 언급한 바와 같이, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는, 인터 예측을 적용하여, 현재의 픽처의 비디오 블록에 예측 블록을 발생시킬 수도 있다. 예를 들어, HEVC 및 다른 비디오 코딩 사양들의 컨텍스트에서, 비디오 코더는 인터 예측을 적용하여 현재의 블록의 CU 의 PU 의 예측 블록에 대한 예측 블록을 발생시킬 수도 있다. 비디오 코더가 인터 예측을 적용하여 예측 블록을 발생시키는 경우, 비디오 코더는 하나 이상의 참조 픽처들의 디코딩된 샘플들에 기초하여 예측 블록을 발생시킬 수도 있다. 참조 픽처들은 현재의 픽처와는 다른 픽처들이다. 비디오 코더는 하나 이상의 참조 픽처 리스트들을 결정할 수도 있다. 참조 픽처 리스트들의 각각은 0 이상의 참조 픽처들을 포함할 수도 있다. HEVC 및 다른 비디오 코딩 사양들의 컨텍스트에서, 참조 픽처 리스트들 중 하나가 참조 픽처 리스트 0 (즉, RefPicList0 또는 list0) 로서 지칭될 수도 있으며, 다른 참조 픽처 리스트가 참조 픽처 리스트 1 (즉, RefPicList1 또는 list1) 로서 지칭될 수도 있다.
비디오 인코더 (20) 는 단방향 인터 예측 또는 양방향 인터 예측을 적용하여, 예측 블록을 발생시킬 수도 있다. 비디오 코더가 단방향 인터 예측을 적용하여 비디오 블록에 대한 예측 블록을 발생시키는 경우, 비디오 코더는 단일 참조 픽처의 샘플들에 기초하여 비디오 블록에 대한 단일 참조 블록을 결정한다. 더욱이, 비디오 코더가 단방향 인터 예측을 적용하는 경우, 비디오 코더는 예측 블록을 참조 블록과 동일하게 설정할 수도 있다. 비디오 코더가 양방향 인터 예측을 적용하여 비디오 블록에 대한 예측 블록을 발생시킬 때, 비디오 코더는 비디오 블록에 대한 2개의 참조 블록들을 결정한다. 일부 예들에서, 2개의 참조 블록들은 상이한 참조 픽처 리스트들 내 참조 픽처들에 있다. 추가적으로, 비디오 코더가 양방향 인터-예측을 적용할 때, 비디오 코더는 2개의 참조 블록들에 기초하여 예측 블록을 결정할 수도 있다. 예를 들어, 비디오 코더는 예측 블록의 각각의 샘플이 2개의 참조 블록들의 대응하는 샘플들의 가중 평균이 되도록, 예측 블록을 결정할 수도 있다. 참조 픽처 리스트들 중 어느 참조 픽처 리스트가 참조 블록들을 결정하는데 사용되는 참조 픽처들을 포함하는지를 표시하기 위해 참조 리스트 표시자들이 사용될 수도 있다.
위에서 언급한 바와 같이, 비디오 코더는 참조 픽처의 샘플들에 기초하여 참조 블록을 결정할 수도 있다. 일부 예들에서, 비디오 코더는 참조 블록의 각각의 샘플이 참조 픽처의 샘플과 동일하도록 참조 블록을 결정할 수도 있다. 일부 예들에서, 참조 블록을 결정하는 것의 부분으로서, 비디오 코더는 참조 픽처의 샘플들로부터 참조 블록의 샘플들을 내삽할 수도 있다. 예를 들어, 비디오 코더는 예측 블록의 샘플이 참조 픽처의 2개 이상의 샘플들의 가중 평균이 되도록, 결정할 수도 있다.
일부 예들에서, 비디오 인코더 (20) 가 단방향 인터 예측을 수행할 때, 비디오 인코더 (20) 는 참조 픽처 리스트들 중 하나에서 하나 이상의 참조 픽처들 내 참조 블록을 탐색한다. 참조 블록은 예측 블록과 유사한 샘플들의 블록일 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 평균 제곱 오차를 이용하여 참조 블록과 예측 블록 사이의 유사성을 결정한다. 더욱이, 비디오 인코더 (20) 는 예측 블록에 대한 모션 정보를 결정할 수도 있다. 예측 블록에 대한 모션 정보 (즉, 모션 파라미터들) 는 모션 벡터 및 참조 인덱스를 포함할 수도 있다. 모션 벡터는 현재의 픽처 (즉, 특정의 비디오 블록을 포함하는 픽처) 내 특정의 비디오 블록의 위치와 참조 픽처 내 참조 블록의 위치 사이의 공간 변위를 표시할 수도 있다. 참조 인덱스는 참조 픽처 리스트를 포함하는 참조 프레임의 참조 픽처 리스트 내 위치를 나타낸다. 특정의 비디오 블록에 대한 예측 블록은 참조 블록과 동일할 수도 있다.
비디오 인코더 (20) 가 특정의 비디오 블록에 대해 양방향 인터 예측을 수행할 때, 비디오 인코더 (20) 는 제 1 참조 픽처 리스트 ("리스트 0") 에서 참조 픽처들 내 제 1 참조 블록에 대해 탐색할 수도 있으며, 제 2 참조 픽처 리스트 ("리스트 1") 에서 참조 픽처들 내 제 2 참조 블록에 대해 탐색할 수도 있다. 비디오 인코더 (20) 는 제 1 및 제 2 참조 블록들에 적어도 부분적으로 기초하여, 특정의 비디오 블록에 대한 예측 블록을 발생시킬 수도 있다. 게다가, 비디오 인코더 (20) 는 특정의 비디오 블록과 제 1 참조 블록 사이의 공간 변위를 나타내는 제 1 모션 벡터를 발생시킬 수도 있다. 비디오 인코더 (20) 는 또한 제 1 참조 블록을 포함하는 참조 픽처의 제 1 참조 픽처 리스트 내 로케이션을 식별하는 제 1 참조 인덱스를 발생시킬 수도 있다. 더욱이, 비디오 인코더 (20) 는 특정의 비디오 블록과 제 2 참조 블록 사이의 공간 변위를 나타내는 제 2 모션 벡터를 발생시킬 수도 있다. 비디오 인코더 (20) 는 또한 제 2 참조 블록을 포함하는 참조 픽처의 제 2 참조 픽처 리스트 내 로케이션을 식별하는 제 2 참조 인덱스를 발생시킬 수도 있다.
비디오 인코더 (20) 가 특정의 비디오 블록에 대한 단방향 인터 예측을 수행할 때, 비디오 디코더 (30) 는 특정의 비디오 블록의 모션 정보를 이용하여, 특정의 비디오 블록의 참조 블록을 식별할 수도 있다. 비디오 디코더 (30) 는 그후 그 참조 블록에 기초하여 특정의 비디오 블록의 예측 블록을 발생시킬 수도 있다. 비디오 인코더 (20) 가 특정의 비디오 블록에 대한 예측 블록을 결정하기 위해 단방향 인터 예측을 수행할 때, 비디오 디코더 (30) 는 특정의 비디오 블록의 모션 정보를 이용하여, 2개의 참조 블록들을 결정할 수도 있다. 비디오 디코더 (30) 는 특정의 비디오 블록의 2개의 참조 샘플들에 기초하여 특정의 비디오 블록의 예측 블록을 발생시킬 수도 있다. 이러한 방법으로, 단방향 인터 예측 또는 양방향 인터 예측에 대해 비디오 인코더 (20) 및 비디오 디코더 (30) 는 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다.
비디오 인코더 (20) 는 비디오 유닛의 모션 정보를 다양한 방법들로 시그널링할 수도 있다. 이러한 모션 정보는 모션 벡터들, 참조 인덱스들, 참조 픽처 리스트 표시자들, 및/또는 모션에 관련된 다른 데이터를 포함할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 모션 예측을 이용하여, 모션 정보를 시그널링하는데 사용되는 데이터의 양을 감소시킬 수도 있다. 모션 예측은 하나 이상의 다른 비디오 유닛들의 모션 정보에 기초한 비디오 유닛 (예컨대, PU) 의 모션 정보의 결정을 포함할 수도 있다. 다양한 유형들의 모션 예측이 존재한다. 예를 들어, 병합 모드 및 진보된 모션 벡터 예측 (AMVP) 모드는 2개의 모션 예측의 유형들이다. 즉, HEVC 표준에서, 예측 유닛 (PU) 에 대해 각각 병합 (스킵은 병합의 특수한 경우로서 간주된다) 및 진보된 모션 벡터 예측 (AMVP) 모드들라는 2개의 인터 예측 모드들이 있다. AMVP 또는 병합 모드에서, 모션 벡터 (MV) 후보 리스트가 다수의 모션 벡터 예측자들에 대해 유지된다. 2013, IEEE Journal, vol. 7, 번호 6, pp. 957-968, 신호 프로세싱에서 선택된 주제들인, J.-L. Lin, Y.-W. Chen, Y.-W. Huang, 및 S.-M. Lei, "Motion vector coding in the HEVC standard" 을 참조한다.
병합 모드에서, 비디오 인코더 (20) 는 후보 리스트를 발생시킨다. 후보 리스트는 하나 이상의 소스 비디오 유닛들의 모션 정보를 표시하는 후보들의 세트를 포함한다. 소스 비디오 유닛들은 현재의 비디오 유닛에 공간적으로 또는 시간적으로 이웃할 수도 있다. 더욱이, 병합 모드에서, 비디오 인코더 (20) 는 후보 리스트로부터 후보를 선택할 수도 있으며 선택된 후보에 의해 표시되는 모션 정보를 현재의 비디오 유닛의 모션 정보로서 이용할 수도 있다. 비디오 인코더 (20) 는 선택된 후보의 후보 리스트에서의 위치를 시그널링할 수도 있다. 비디오 디코더 (30) 는 비트스트림으로부터 획득된 정보에 기초하여, 후보 리스트로의 인덱스를 결정할 수도 있다. 게다가, 비디오 디코더 (30) 는 동일한 후보 리스트를 발생시킬 수도 있으며, 인덱스에 기초하여, 선택된 후보를 결정할 수도 있다. 비디오 디코더 (30) 는 그후 그 선택된 후보의 모션 정보를 이용하여, 현재의 비디오 유닛에 대한 예측 블록을 발생시킬 수도 있다.
스킵 모드는 병합 모드와 유사하다. 스킵 모드에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 후보 리스트를, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 병합 모드에서 후보 리스트를 이용하는 동일한 방법으로 발생시켜 이용한다. 그러나, 비디오 인코더 (20) 가 스킵 모드를 이용하여 현재의 비디오 유닛의 모션 정보를 시그널링할 때, 비디오 인코더 (20) 는 현재의 비디오 유닛에 대한 임의의 잔차 데이터를 시그널링하지 않는다. 따라서, 비디오 디코더 (30) 는 후보 리스트에서의 선택된 후보의 모션 정보에 의해 표시되는 하나 이상의 참조 블록들에 기초하여, 잔차 데이터의 사용 없이, 비디오 유닛에 대한 예측 블록을 결정할 수도 있다.
스킵 모드 및 병합 모드에 있어서, 병합 후보 리스트 내 어느 후보가 사용되는지를 표시하기 위해 병합 인덱스가 시그널링된다. 어떤 인터 예측 표시자, 참조 인덱스, 또는 모션 벡터 차이도 송신되지 않는다. 병합 후보들의 2개 이상의 유형들이 공간 모션 벡터 예측자들 (SMVPs) 및 시간 모션 벡터 예측자들 (TMVPs) 을 포함하는 병합 모드에서 고려된다. SMVP 유도를 위해, 최대 4개의 병합 후보들이 도 2 에 도시된 바와 같은 위치들에 로케이트된 후보들 중에서 선택된다. 유도의 순서는 A1 -> B1 -> B0 -> A0 -> (B2) 이다. HEVC 에서, 위치 B2 는 오직 위치 A1, B1, B0, A0 의 임의의 PU 가 이용불가능하거나 또는 인트라 코딩될 때 또는 위치들 A1, B1, B0, A0 로부터의, 프루닝 후의, 후보들의 총 개수가 4개 미만일 때, 고려된다.
TMVP 의 유도에서, 스케일링된 모션 벡터는 시그널링된 참조 픽처 리스트 내 현재의 픽처의 참조 픽처들 중 하나에 속하는 병치된 PU 에 기초하여 유도된다. 병치된 PU 의 유도에 사용되는 참조 픽처 리스트는 현재의 픽처의 슬라이스의 슬라이스 헤더에서 명시적으로 시그널링될 수도 있다. 시간 병합 후보에 대한 스케일링된 모션 벡터는 POC 거리들 tb 및 td 를 이용하여 병치된 PU 의 스케일링된 모션 벡터로 획득될 수도 있으며, 여기서 tb는 현재의 픽처의 참조 픽처와 현재의 픽처 사이의 POC 차이인 것으로 정의되며, td는 병치된 픽처의 참조 픽처와 병치된 픽처 사이의 POC 차이인 것으로 정의된다. 시간 병합 후보의 참조 픽처 인덱스는 제로와 동일하게 설정된다. 스케일링 프로세스의 실제 실현은 HEVC 초안 사양에 설명되어 있으며, 이는 https://www.itu.int/rec/T-REC-H.265 으로부터 입수가능하다. B-슬라이스의 경우, 2개의 모션 벡터들, 즉, 참조 픽처 리스트 0 에 대해 하나, 그리고 참조 픽처 리스트 1 에 대해 다른 하나가, 획득 및 결합되어 양방향-예측 병합 후보를 만든다.
병치된 PU 의 위치가 도 2 에 도시된 바와 같이, 2개의 후보 위치들 C 와 H 사이에 선택된다. 위치 H 에서의 PU 가 이용불가능하거나, 또는 인트라 코딩되거나, 또는 현재의 CTU 로우 (즉, 현재의 PU 를 포함하는 CTU 로우) 의 외부에 있으면, 위치 C 는 사용된다. 그렇지 않으면, 위치 H 가 시간 병합 후보의 유도에 사용된다.
SMVP들 및 TMVP들에 추가하여, 합성 병합 후보들의 2개의 유형들: (1) 결합된 양방향-예측 MVP 및 (2) 제로 MVP 가 있을 수도 있다. 결합된 양방향-예측 MVP들은 SMVP 및 TMVP 를 이용하여 발생된다. HEVC 에서, 결합된 양방향-예측 병합 후보들은 B-슬라이스들에만 사용된다. 예를 들어, mvL0 및 refIdxL0 또는 mvL1 및 refIdxL1 를 가지는 원래 병합 후보 리스트 내 2개의 후보들이 결합된 양방향-예측 병합 후보를 생성하기 위해 사용된다. 제로 MVP 는 0 의 크기들을 가진 하나 이상의 모션 벡터들을 갖는다.
후보 선택의 프로세스에서, 프로세싱 순서에서 이전 후보와 동일한 모션 파라미터들을 가지는 중복된 후보들이 후보 리스트로부터 제거될 수도 있다. 이 프로세스는 프루닝 프로세스로서 정의된다. 또한, 병렬 병합 프로세싱을 돕기 위해, 동일한 병합 추정 영역 (MER) 내부의 후보들이 고려되지 않는다. 가상 2Nx2N 파티션을 에뮬레이션하지 않도록, 중복 (Redundant) 파티션 형상들은 회피된다.
병합 후보 리스트에서 병합 후보를 발생시키는 각각의 단계 사이에, 유도 프로세스는 병합 후보들의 개수가 MaxNumMergeCand 에 도달하는 경우에 중지될 수도 있다. HEVC 및 잠재적으로 다른 코덱들에서, MaxNumMergeCand 는 5 와 동일하게 설정된다. 후보들의 개수는 일정하므로, 최상의 병합 후보의 인덱스는 트렁케이트된 단항 2진화 (unary binarization) 를 이용하여 인코딩될 수도 있다.
AMVP 모드는 비디오 인코더 (20) 가 후보 리스트를 발생시킬 수도 있으며 후보 리스트로부터 후보를 선택할 수도 있다는 점에서, 병합 모드와 유사하다. 그러나, 현재의 블록에 대한 예측 블록 (즉, 비디오 유닛) 을 결정하는데 사용되는 각각의 개별 참조 블록에 대해, 비디오 인코더 (20) 는 현재의 블록에 대한 개별 모션 벡터 차이 (MVD), 현재의 블록에 대한 개별 참조 인덱스, 및 후보 리스트에서의 선택된 후보를 표시하는 개별 후보 인덱스를 시그널링할 수도 있다. 블록에 대한 MVD 는 블록의 모션 벡터와 선택된 후보의 모션 벡터 사이의 차이를 나타낼 수도 있다. 현재의 블록에 대한 참조 인덱스는 참조 블록이 결정되는 참조 픽처를 표시한다.
더욱이, AMVP 모드가 사용될 때, 현재의 블록에 대한 예측 블록을 결정할 때에 사용되는 각각의 개별 참조 블록에 대해, 비디오 디코더 (30) 는 현재의 블록에 대한 MVD, 현재의 블록에 대한 참조 인덱스, 및 후보 인덱스 및 모션 벡터 예측 (MVP) 플래그를 결정할 수도 있다. 비디오 디코더 (30) 는 동일한 후보 리스트를 발생시킬 수도 있으며, 후보 인덱스에 기초하여, 선택된 후보를 후보 리스트에서 결정할 수도 있다. 앞서와 같이, 이 리스트는 시간 참조 픽처에서 병치된 블록의 이웃하는 블록의 모션 파라미터들에 기초하여 유도되는 시간 모션 벡터 예측자 뿐만 아니라, 동일한 참조 인덱스와 연관되는 이웃하는 블록들의 모션 벡터들을 포함할 수도 있다. 비디오 디코더 (30) 는 MVD 를 선택된 AMVP 후보에 의해 표시되는 모션 벡터에 가산함으로써, 현재의 PU 의 모션 벡터를 복원할 수도 있다. 즉, 비디오 디코더 (30) 는 그 선택된 AMVP 후보에 의해 표시되는 모션 벡터 및 MVD 에 기초하여, 현재의 PU 의 모션 벡터를 결정할 수도 있다. 비디오 디코더 (30) 는 그후 현재의 PU 의 복구된 모션 벡터 또는 모션 벡터들을 이용하여, 현재의 PU 에 대한 예측 블록들을 발생시킬 수도 있다.
비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 가 현재의 PU 에 대한 AMVP 후보 리스트를 발생할 때, 비디오 코더는 현재의 PU 에 공간적으로 이웃하는 로케이션들을 커버하는 PU들 (즉, 공간적으로-이웃하는 PU들) 의 모션 정보에 기초하여 하나 이상의 AMVP 후보들을 유도하고, 그리고 현재의 PU 에 시간적으로 이웃하는 PU들의 모션 정보에 기초하여 하나 이상의 AMVP 후보들을 유도할 수도 있다. 본 개시물에서, PU (또는, 다른 유형의 비디오 유닛 또는 블록) 은 PU 의 예측 블록 (또는, 비디오 유닛의 다른 유형의 샘플 블록) 이 그 로케이션을 포함하면, 로케이션을 "커버한다" 고 말할 수도 있다. 후보 리스트는 시간 참조 픽처에서 병치된 블록의 이웃하는 블록의 모션 파라미터들 (즉, 모션 정보) 에 기초하여 유도되는 시간 모션 벡터 예측자 뿐만 아니라, 동일한 참조 인덱스와 연관되는 이웃하는 블록들의 모션 벡터들을 포함할 수도 있다. 현재의 PU (즉, 현재의 PU 와는 상이한 시간 인스턴스에 있는 PU) 와 시간적으로 이웃하는 PU 의 모션 정보에 기초하는 병합 후보 리스트 또는 AMVP 후보 리스트에서의 후보는 TMVP 로서 지칭될 수도 있다. TMVP 는 HEVC 의 코딩 효율을 향상시키는데 이용될 수도 있으며, 다른 코딩 툴들과는 달리, TMVP 는 디코딩된 픽처 버퍼에서의, 더 구체적으로는 참조 픽처 리스트들에서의, 프레임의 모션 벡터에 액세스할 필요가 있을 수도 있다.
AMVP 모드에 대해, 인터 예측 표시자가 리스트 0 예측, 리스트 1 예측, 또는 양방향-예측을 나타내기 위해 송신된다. 다음으로, 다수의 참조 픽처들이 있을 때 하나 또는 2개의 참조 인덱스들이 송신된다. 후보 리스트로부터 하나의 모션 후보를 선택하기 위해 각각의 예측 방향에 대해 인덱스가 송신된다. 도 2 에 나타낸 바와 같이, 인터 모드에 대한 후보 리스트는 다음 2개의 공간 모션 후보들 및 하나의 시간 모션 후보를 포함한다:
1. 좌측 후보 (A0, A1 로부터 이용가능한 첫번째)
2. 상단 후보 (B0, B1, B2 로부터 이용가능한 첫번째)
3. 시간 후보 (H 및 C 로부터 이용가능한 첫번째)
HEVC 에서, 비디오 코더는 좌하부로부터 좌측까지의 좌측 공간 모션 후보 (즉, A0 및 A1) 를 탐색하며, 비디오 코더는 첫번째 이용가능한 것을 좌측 후보로서 선택한다. 비디오 코더는 우상부로부터 상기 좌측까지의 상단 공간 모션 후보 (즉 B0, B1 및 B2) 를 탐색하며, 비디오 코더는 첫번째 이용가능한 것을 상단 후보로서 선택한다. 비디오 코더는 시간 병치된 픽처라 하는 참조 픽처에 로케이트된 블록 (H 또는 C) 으로부터 시간 모션 후보를 선택할 수도 있다. 시간 병치된 픽처는, 슬라이스 헤더에서 참조 픽처 리스트 및 하나의 참조 인덱스를 규정하고 참조 리스트 내 어느 참조 픽처가 병치된 참조 픽처로서 사용되는지를 표시하기 위해 슬라이스 헤더에서 하나의 플래그를 전송함으로써 표시된다. HEVC 에서, 인덱스가 송신된 후, 하나 또는 2개의 대응하는 모션 벡터 차이들 (MVD들) 이 송신된다.
더욱이, HEVC 및 잠재적으로 다른 코덱들에서, 후보 리스트 구성 및 인덱스의 파싱을 분리하기 위해, 고정된 후보 리스트 사이즈가 사용된다. 고정된 리스트 사이즈에 의해 유발되는 코딩 성능 손실을 보상하기 위해, 추가적인 후보들이 후보 리스트 내 비어 있는 위치들에 할당된다. 이 프로세스에서, 인덱스는 최대 길이의 트렁케이트된 단항 코드들로 코딩되며, 최대 길이는 스킵 모드 및 병합 모드의 경우 슬라이스 헤더에서 송신되며, 인터 모드의 경우 2 로 고정된다. 위에서 설명한 바와 같이, 스킵 모드 및 병합 모드에 대해, 4개의 공간 모션 후보들 및 하나의 시간 모션 후보의 유도 및 프루닝 이후, 가용 후보들의 개수가 고정된 후보 리스트 사이즈보다 작으면, 추가적인 합성 후보들이 병합 후보 리스트 내 비어 있는 위치들을 채우기 위해 유도되어 추가된다. AMVP 모드에 대해, 제로 벡터 모션 후보가 2개의 공간 모션 후보들 및 하나의 시간 모션 후보의 유도 및 프루닝 이후 AMVP 후보 리스트 내 비어 있는 위치들을 채우기 위해 추가된다.
JEM 참조 소프트웨어에서, 디코더 측에서 현재의 블록에 대한 모션 벡터 (MV) 를 유도 및/또는 정제하거나 또는 아핀 모션 모델을 이용하는 여러 인터 코딩 툴들이 있다. 이들 새로운 인터-예측 접근법들이 아래에 자세히 설명되어 있다.
패턴 매칭된 모션 벡터 유도 (PMMVD) 모드는 프레임 레이트 상향-변환 (FRUC) 기법들에 기초한 특수 병합 모드이다. PMMVD 모드에 의해, 블록의 모션 정보가 시그널링되지 않지만, 대신에 디코더 측에서 유도된다. FRUC 플래그는 그의 병합 플래그가 참일 때 블록 (예컨대, CU) 에 대해 시그널링된다. FRUC 플래그가 거짓일 때, 병합 인덱스가 시그널링되고, 규칙적인 병합 모드가 사용된다. FRUC 플래그가 참일 때, 어떤 방법 (쌍방 매칭 또는 템플릿 매칭) 이 블록에 대한 모션 정보를 유도하는데 사용되는지를 표시하기 위해 추가적인 FRUC 모드 플래그가 시그널링된다.
인코더 측에서, CU 에 대한 FRUC 병합 모드를 이용할지 여부에 관한 결정은 정상 병합 후보들에 대해 행해지는 것과 같이 레이트/왜곡 (RD) 비용 선택에 기초할 수도 있다. 즉, 2개의 매칭 모드들 (쌍방 매칭 및 템플릿 매칭) 둘다가 RD 비용 선택을 이용함으로써 CU 에 대해 체크될 수도 있다. 최소의 비용을 초래하는 모드가 다른 CU 모드들과 추가로 비교된다. FRUC 매칭 모드가 가장 효율적인 모드인 경우, FRUC 플래그가 CU 에 대해 참으로 설정되며, 관련된 매칭 모드가 사용된다.
FRUC 병합 모드에서의 모션 유도 프로세스는 2개의 단계들을 포함한다. CU-레벨 모션 탐색이 먼저 수행되고, 이어서 서브-CU 레벨 모션 정제가 수행될 수도 있다. CU 레벨에서, 초기 모션 벡터 (즉, 시작 MV) 가 쌍방 매칭 또는 템플릿 매칭에 기초하여 전체 CU 에 대해 유도된다. 첫째, MV 후보들의 리스트가 발생되며 (FRUC MV 후보들), 최소 매칭 비용을 초래하는 후보가 추가적인 CU 레벨 정제에 대한 시작 지점으로서 선택된다. 그 후, 시작 지점 주변에서의 쌍방 매칭 또는 템플릿 매칭에 기초한 로컬 탐색이 수행되며, 최소 매칭 비용을 초래하는 MV 가 전체 CU 에 대한 MV 로서 취해진다. 그후, 모션 정보가 유도된 CU 모션 벡터들을 시작 지점들로 하여, 서브-CU 레벨에서 추가로 정제된다.
예를 들어, 다음 유도 프로세스가 W X H CU 모션 정보 유도를 위해 수행될 수도 있으며, 여기서, W 는 폭이고 H 는 높이이다. 제 1 스테이지에서, 전체 W X H CU 에 대한 MV 가 유도된다. 제 2 스테이지에서, CU 는 M x M 서브-CU들로 추가로 분할된다. M 의 값은 하기 수식 (1) 에서와 같이 계산되며, D 는 JEM 에서 디폴트로 3 으로 설정된 미리 정의된 분할 심도이다. 그후, 각각의 서브-CU 에 대한 MV 가 유도된다.
(1)
도 3 에 나타낸 바와 같이, 2개의 상이한 참조 픽처들에서의 현재의 CU 의 모션 궤적을 따라서 2개의 블록들 사이의 최상의 매칭을 찾음으로써, 쌍방 매칭이 현재의 CU 의 모션 정보를 유도하는데 사용된다. 연속적인 모션 궤적의 가정 하에서, 2개의 참조 블록들을 가리키는 모션 벡터들 MV0 및 MV1 은 현재의 픽처와 2개의 참조 픽처들 사이의 시간 거리들, 즉, TD0 및 TD1 에 비례한다. 특별한 경우로서, 현재의 픽처가 시간적으로 2개의 참조 픽처들 사이이고 현재의 픽처로부터 2개의 참조 픽처들까지의 시간 거리가 동일할 때, 쌍방 매칭은 거울 기반 양방향 MV 가 된다.
도 4 에 나타낸 바와 같이, 현재의 픽처 내 템플릿 (현재의 CU 의 상부 및/또는 좌측 이웃하는 블록들) 과 참조 픽처 내 블록 (템플릿과 동일한 사이즈) 사이의 최상의 매칭을 찾음으로써, 현재의 CU 의 모션 정보를 유도하는데 템플릿 매칭이 사용된다. 전술한 FRUC 병합 모드를 제외하고, 템플릿 매칭이 또한 AMVP 모드에 적용된다. JEM 에서, HEVC 에서와 유사하게, AMVP 는 2개의 후보들을 갖는다. 템플릿 매칭 방법에 의해, 새로운 후보가 유도된다. 템플릿 매칭에 의해 새로 유도된 후보가 제 1 기존 AMVP 후보와 상이하면, 새로 유도된 후보가 AMVP 후보 리스트의 맨 처음에 삽입된 후 리스트 사이즈가 2 (제 2 기존 AMVP 후보를 제거하는 것을 의미함) 로 설정된다. AMVP 모드에 적용될 때, 단지 CU-레벨 탐색만이 적용된다.
CU-레벨 FRUC MV 후보 세트에서, CU-레벨에서의 MV 후보 세트는 다음을 포함하거나 이들로 구성된다:
(i) 현재의 CU 가 AMVP 모드에 있는 경우 원래 AMVP 후보들
(ii) 모든 병합 후보들,
(iii) 본 개시물에서 다른 어딘가에서 소개되는, 내삽된 MV 필드에서의 여러 MV들
(iv) 상단 및 좌측 이웃하는 모션 벡터들
쌍방 매칭을 이용할 때, 병합 후보의 각각의 유효한 MV 가 쌍방 매칭의 가정으로 MV 쌍을 발생시키기 위해 입력으로서 사용된다. 예를 들어, 병합 후보의 하나의 유효한 MV 는 참조 리스트 A 에서의 (MVa, refa) 이다. 그후, 그의 쌍을 이룬 쌍방 MV 의 참조 픽처 refb 가 다른 참조 리스트 B 에서 발견되므로, refa 및 refb 가 시간적으로 현재의 픽처의 상이한 측면들에 있다. 이러한 refb 가 참조 리스트 B 에서 이용불가능하면, refb 는 refa 와는 상이한 참조로서 결정되며, 현재의 픽처까지의 그의 시간 거리는 리스트 B 에서 최소의 거리이다. refb 가 결정된 후, MVb 는 현재의 픽처와 refa, refb 사이의 시간 거리에 기초하여 MVa 를 스케일링함으로써 유도된다.
내삽된 MV 필드로부터의 4개의 MV들이 또한 CU 레벨 후보 리스트에 추가될 수도 있다. 좀더 구체적으로, 현재의 CU 의 위치 (0, 0), (W/2, 0), (0, H/2) 및 (W/2, H/2) 에서의 내삽된 MV들이 추가될 수도 있다. FRUC 가 AMVP 모드에서 적용될 때, 원래 AMVP 후보들이 또한 CU-레벨 MV 후보 세트에 추가될 수도 있다. CU 레벨에서, AMVP CU들에 대한 최대 15 개의 MV들 및 병합 CU들에 대한 최대 13 개의 MV들이 후보 리스트에 추가된다. 본 개시물에서, AMVP CU 는 모션 정보가 AMVP 모드를 이용하여 예측되는 CU 이다. 더욱이, 본 개시물에서, 병합 CU 는 모션 정보가 병합 모드를 이용하여 예측되는 CU 이다.
일부 예들에서, 서브-CU 레벨에서의 MV 후보 세트는 다음으로 구성되거나 또는 다음을 포함한다:
(i) CU-레벨 탐색으로부터 결정된 MV,
(ii) 상단, 좌측, 좌상단 및 우상단 이웃하는 MV들,
(iii) 참조 픽처들로부터의 병치된 MV들의 스케일링된 버전들,
(iv) 최대 4 개의 진보된 시간 모션 벡터 예측 (ATMVP) 후보들,
(v) 최대 4 개의 공간-시간 모션 벡터 예측 (STMVP) 후보들.
참조 픽처들로부터의 스케일링된 MV들은 다음과 같이 유도될 수도 있다. 리스트들 양자에서의 모든 참조 픽처들이 횡단된다. 참조 픽처의 서브-CU 의 병치된 위치에서의 MV들이 시작 CU-레벨 MV 의 참조로 스케일링된다. 즉, HEVC 에서의 TMVP들과 유사하게, 병치된 위치에서의 MV들이 POC 거리에 따라서 스케일링될 수도 있다. ATMVP 및 STMVP 후보들은 최대 4개의 ATMV 및 STMVP 후보들로 제한된다. 서브-CU 레벨에서, 최대 17 개의 MV들이 후보 리스트에 추가된다.
위에서 언급한 바와 같이, CU-레벨 FRUC MV 후보 세트에서, CU 레벨에서의 MV 후보 세트는 내삽된 MV 필드에 하나 이상의 MV들을 포함할 수도 있다. 프레임을 코딩하기 전에, 내삽된 모션 필드 (즉, 내삽된 MV 필드) 가 일방 모션 추정에 기초하여 전체 픽처에 대해 발생된다. 그후 모션 필드가 추후 CU 레벨 또는 서브-CU 레벨 MV 후보들로서 사용될 수도 있다. 첫째, 참조 리스트들 양자에서의 각각의 참조 픽처의 모션 필드가 4×4 블록 레벨에서 횡단될 수도 있다. 도 5 는 프레임-레이트 업 변환에서의 일방 모션 추정의 일 예이다. 도 5 에서의 픽처 (500) 는 현재의 픽처에 대한 참조 픽처이다. 현재의 픽처는 픽처 (502) 의 출력 시간에 대응하는 출력 시간을 갖는다. 픽처 (504) 는 픽처 (500) 에 대한 참조 픽처이다. 비디오 코더는 픽처 (504) 내 로케이션들을 가리키는 픽처 (500) 내 블록들의 모션 벡터들을 이용하여 현재의 픽처의 샘플들을 내삽한다. 픽처 (502) 는 결과적인 내삽된 샘플들을 포함한다. 일부 예들에서, 도 5 의 픽처 (500) 에서의 각각의 4×4 블록에 대해, 4×4 블록 및 현재의 픽처에서의 4×4 블록을 통과하는 4×4 블록에 연관된 모션에 임의의 내삽된 모션이 할당되지 않으면, 참조 블록의 모션은 시간 거리 TD0 및 TD1 에 따라서 (HEVC 에서의 TMVP 의 MV 스케일링의 방법과 동일한 방법으로) 현재의 픽처로 스케일링되며, 그 스케일링된 모션은 현재의 프레임 내 블록에 할당된다. 어떤 스케일링된 MV 도 현재의 프레임에서의 4×4 블록에 할당되지 않으면, 현재의 프레임에서의 블록의 모션은 내삽된 모션 필드에서 이용불가능한 것으로서 마크된다. 다른 예들에서, 다른 블록 사이즈들이 사용될 수도 있다.
모션 벡터가 분수 샘플 위치를 가리킬 때, 모션 보상된 내삽이 요구될 수도 있다. 모션 보상된 내삽은 픽처의 실제 샘플들로부터 픽처의 실제 샘플들 사이의 로케이션들에 대한 샘플 값들을 내삽할 수도 있다. 모션 보상된 내삽의 복잡성을 낮게 유지하기 위해, 규칙적인 8-탭 HEVC 내삽 대신, 양방향(bi)-선형 내삽이 쌍방 매칭 및 템플릿 매칭 양자에 사용될 수도 있다. 매칭 비용의 계산은 상이한 단계들에서 상이하다. 예를 들어, CU 레벨에서 후보 세트로부터 최상의 후보를 선택할 때, 매칭 비용은 쌍방 매칭 또는 템플릿 매칭의 절대 합 차이 (SAD) 이다. 시작 MV 가 결정된 후, 매칭 비용 C 는 하기 수식 (2) 를 이용하여 계산될 수도 있다:
(2)
수식 (2) 에서, w 는 경험적으로 4 로 설정되는 가중치 인자이고, MV 및 MVS 는 현재의 MV 및 시작 MV 를 각각 표시하며 (MVx 및 MVS X 는 각각 현재의 MV 및 시작 MV 의 수평 성분들이며; MVy 및 MVS Y 는 각각 현재의 MV 및 시작 MV 의 수직 성분들이다), |·| 는 절대값을 표시한다.
일부 예들에서, FRUC 모드에서, MV 는 단지 루마 샘플들만을 이용함으로써 유도된다. 이러한 예들에서, 유도된 모션이 모션 보상 인터 예측을 위해 루마 및 크로마 양자에 사용될 수도 있다. MV 가 유도된 후, 최종 모션 보상이 루마에 대해 8-탭 내삽 필터 및 크로마에 대해 4-탭들 내삽 필터를 이용하여 수행된다.
MV 정제는 쌍방 매칭 비용 또는 템플릿 매칭 비용의 기준을 갖는 패턴-기반 MV 탐색을 포함할 수도 있다. JEM 에서, 2개의 탐색 패턴들: (1) 비제한 중심-바이어스된 다이아몬드 탐색 (UCBDS), 및 (2) CU 레벨 및 서브-CU 레벨 각각에서의 MV 정제를 위한 적응적 교차 탐색이 지원된다. CU 레벨 및 서브-CU 레벨 MV 정제 양자에 대해, MV 가 1/4 루마 샘플 MV 정확도에서 직접 탐색될 수도 있으며, 그후 1/8 루마 샘플 MV 정제가 뒤따를 수도 있다. CU 및 서브-CU 단계 양자에 대한 MV 정제의 탐색 범위는 8 루마 샘플들과 동일하게 설정될 수도 있다.
비디오 코더는 다음과 같이 템플릿 매칭 FRUC 병합 모드에서 예측 방향을 선택할 수도 있다. 쌍방 매칭 병합 모드에서, CU 의 모션 정보가 2개의 상이한 참조 픽처들에서의 현재의 CU 의 모션 궤적을 따른 2개의 블록들 사이의 최상의 매칭에 기초하여 유도되기 때문에, 양방향-예측이 항상 적용된다. JEM 에서, 템플릿 매칭 병합 모드의 경우 이러한 제한이 없다. 템플릿 매칭 병합 모드에서, 비디오 코더는 list0 으로부터의 단방향-예측, list1 로부터의 단방향-예측 또는 CU 에 대한 양방향-예측 중에서 선택할 수도 있다. 선택은 다음과 같은 템플릿 매칭 비용에 기초할 수도 있다:
시퀀스 1
If costBi <= factor × min (cost0, cost1),
양방향-예측이 이용됨;
Else If cost0 <= cost1,
list0 으로부터의 단방향-예측이 사용됨;
Else,
list1 로부터의 단방향-예측이 사용됨;
상기 시퀀스 1 의 의사 코드에서, cost0 은 list0 템플릿 매칭의 SAD 이고, cost1 은 list1 템플릿 매칭의 SAD 이고, costBi 는 양방향-예측 템플릿 매칭의 SAD 이다. 인자 (factor) 의 값은 5/4 와 동일하며, 이는 선택 프로세스가 양방향-예측으로 바이어스된다는 것을 의미한다. JEM 에서, 인터 예측 방향 선택이 단지 CU-레벨 템플릿 매칭 프로세스에만 적용된다.
양방향-예측 템플릿 매칭 동작에서, 하나의 블록 영역의 예측을 위해, list0 의 MV 및 list1 의 MV 를 각각 이용하여 형성된, 2개의 예측 블록들은 결합되어 단일 예측 신호를 형성한다. 디코더-측 모션 벡터 정제 (DMVR) 방법에서, 양방향-예측의 2개의 모션 벡터들은 쌍방 템플릿 매칭 프로세스에 의해 추가로 정제된다. 정제된 MV 를 추가적인 모션 정보의 송신 없이 획득하기 위해, 쌍방 템플릿과 참조 픽처들에서의 복원 샘플들 사이에 왜곡-기반 탐색을 수행하기 위해 비디오 디코더 (30) 에서 쌍방 템플릿 매칭이 적용될 수도 있다.
DMVR 에서, 쌍방 템플릿이 도 6 에 나타낸 바와 같이, list0 의 초기 MV0 및 list1 의 MV1 각각으로부터, 2개의 예측 블록들의 가중된 조합 (즉, 평균) 으로서 발생된다. 템플릿 매칭 동작은 발생된 쌍방 템플릿과 참조 픽처 내 (초기 예측 블록 주변의) 샘플 영역 사이의 비용 측정치들을 계산하는 것을 포함하거나 또는 이들로 구성될 수도 있다. 2개의 참조 픽처들의 각각에 대해, 최소 템플릿 비용을 산출하는 MV 는 원래 MV 를 대체하기 위해 그 리스트의 업데이트된 MV 로서 간주될 수도 있다. 템플릿 비용은 현재의 템플릿과 참조 샘플들 사이의 절대 차이들의 합 (SAD) 또는 제곱 차이들의 합 (SSD) 으로서 계산될 수도 있다. JEM 에서, 9개의 MV 후보들이 각각의 리스트에 대해 탐색된다. 9개의 MV 후보들은 원래의 MV, 및 하나의 루마 샘플이 수평 또는 수직 방향, 또는 양자에서 원래의 MV 에 대해 오프셋된 8 개의 둘러싸는 MV들을 포함한다. 마지막으로, 2개의 새로운 MV들, 즉, 도 6 에 나타낸 바와 같은, MV0′ 및 MV1′ 이 최종 양방향-예측 결과들을 발생시키는데 사용된다. SAD 는 비용 측정치로서 이용될 수도 있다. 도 6 은 쌍방 템플릿 매칭에 기초한 제안된 DMVR 이다.
따라서, 도 6 의 예에서, 현재의 픽처 (602) 에서의 현재의 블록 (600) 은 제 1 모션 벡터 (604) (MV0) 및 제 2 모션 벡터 (606) (MV1) 를 갖는다. 모션 벡터 (604) 는 list0 참조 픽처 (610) 내 참조 블록 (608) 을 가리킨다. 모션 벡터 (606) 는 list1 참조 픽처 (614) 내 참조 블록 (612) 을 가리킨다. 참조 블록 (608) 및 참조 블록 (612) 은 또한 예측 블록들로서 본원에서 지칭될 수도 있다. 참조 블록 (608) 및 참조 블록 (612) 을 식별한 후, 비디오 코더는 예측 블록 (616) 을 참조 블록 (608) 및 참조 블록 (612) 의 가중 평균으로서 발생시킬 수도 있다. 예측 블록 (616) 은 또한 쌍방 템플릿으로서 본원에서 지칭될 수도 있다. 따라서, 도 6 의 예에서, 비디오 코더는 MV0 및 MV1 에 의해 참조되는 예측 블록들로부터 쌍방 템플릿을 발생시킬 수도 있다. 추가적으로, 비디오 코더는 참조 픽처 (610) 에서 예측 블록 (616) 에 최상으로 매칭하는 블록을 탐색할 수도 있다. 도 6 의 예에서, 비디오 코더는 예측 블록 (616) 에 대한 최상의 매칭으로서 참조 픽처 (610) 의 블록 (618) 을 식별하였다. 비디오 코더는 또한 참조 픽처 (614) 에서 예측 블록 (616) 에 최상으로 매칭하는 블록을 탐색할 수도 있다. 도 6 의 예에서, 비디오 코더는 예측 블록 (616) 에 대한 최상의 매칭으로서 블록 (620) 을 식별하였다. 모션 벡터 (622) (MV0') 는 현재의 블록 (600) 과 블록 (618) 사이의 공간 변위를 표시한다. 모션 벡터 (624) (MV1') 는 현재의 블록 (600) 과 블록 (620) 사이의 공간 변위를 표시한다.
DMVR 은 추가적인 신택스 엘리먼트들의 송신 없이, 과거의 참조 픽처로부터의 하나의 MV 및 미래의 참조 픽처로부터의 다른 다른 MV 와 함께, 양방향-예측의 병합 모드에 적용될 수도 있다. JEM5 에서, 로컬 조명 보상 (LIC), 아핀 모션, FRUC, 또는 서브-CU 병합 후보가 CU 에 대해 이용가능할 때, DMVR 은 적용되지 않는다.
QTBT 가 포함된 JEM 에서, 각각의 CU 는 각각의 예측 방향에 대해 최대 하나의 모션의 세트를 가질 수 있다. 큰 CU 를 서브-CU들로 분할하고 큰 CU 의 모든 서브-CU들에 대한 모션 정보를 유도함으로써, 2개의 서브-CU 레벨 모션 벡터 예측 방법들이 제공된다. 진보된 시간 모션 벡터 예측 (ATMVP) 방법은 각각의 CU 가 병치된 참조 픽처에서의 현재의 CU 보다 더 작은 다수의 블록들로부터 다수의 모션 정보의 세트들을 페칭가능하게 한다. 공간-시간 모션 벡터 예측 (STMVP) 방법에서, 서브-CU들의 모션 벡터들이 시간 모션 벡터 예측자 및 공간 이웃하는 모션 벡터를 이용함으로써 회귀적으로 유도된다. 서브-CU 모션 예측을 위해 더 정확한 모션 필드를 유지하기 위해, 참조 프레임들에 대한 모션 압축은 JEM 에서 현재 이용불가능하다.
진보된 시간 모션 벡터 예측 (ATMVP) 방법에서, 모션 벡터들 시간 모션 벡터 예측 (TMVP) 은 각각의 CU 가 현재의 CU 보다 더 작은 다수의 블록들로부터 (모션 벡터들 및 참조 인덱스들을 포함하는) 다수의 모션 정보의 세트들을 페칭가능하게 함으로써, 향상된다. 도 7 에 나타낸 바와 같이, 서브-CU들은 정사각형 NxN 블록들이다 (N 은 디폴트로 4로 설정된다).
ATMVP 는 CU 내 서브-CU들의 모션 벡터들을 2개의 단계들로 예측한다. 제 1 단계는 소위 시간 벡터로 참조 픽처 내 대응하는 블록을 식별하는 것이다. 참조 픽처는 모션 소스 픽처로 지칭된다. 제 2 단계는 도 7 에 나타낸 바와 같이, 현재의 CU 를 서브-CU들로 분할하고, 각각의 서브-CU 에 대응하는 블록으로부터의 각각의 서브-CU 의 모션 벡터들 뿐만 아니라 참조 인덱스들을 획득하는 것이다.
도 7 은 현재의 픽처 (702) 내 현재의 CU (700) 에 대한 ATMVP 모션 예측을 나타낸다. 제 1 단계에서, 참조 픽처 (704) 및 대응하는 블록 (706) 은 현재의 CU (700) 의 공간 이웃하는 블록들의 모션 정보에 의해 결정된다. 참조 픽처 (704) 는 또한 비디오 코더가 모션 소스 픽처 (704) 를 현재의 픽처 (702) 에서의 현재의 CU (700) 에 대한 모션 정보의 소스로서 이용하기 때문에, 모션 소스 픽처 (704) 로서 지칭될 수도 있다. 이웃하는 블록들의 반복적인 스캐닝 프로세스를 피하기 위해, 현재의 CU (700) 의 병합 후보 리스트에서의 제 1 병합 후보의 모션 정보가 참조 픽처 (704) 및 대응하는 블록 (706) 을 결정하는데 사용된다. 제 1 가용 모션 벡터 뿐만 아니라 그의 연관된 참조 인덱스는 시간 벡터 (708) 및 모션 소스 픽처 (704) 에 대한 인덱스로 설정된다. 이렇게, ATMVP 에서, 대응하는 블록 (706) 은 TMVP 와 비교하여 더 정확하게 식별될 수도 있으며, 대응하는 블록 (병치된 블록으로 종종 지칭됨) 은 현재의 CU (700) 에 대해 우하측 또는 중심 위치에 항상 있다.
제 2 단계에서, 시간 벡터 (708) 를 현재의 CU (700) 의 (x, y) 좌표들에 추가함으로써, 모션 소스 픽처 (704) 에서 시간 벡터 (708) 에 의해 현재의 CU (700) 의 서브-CU 의 대응하는 블록이 식별된다. 현재의 CU (700) 의 각각의 서브-CU 에 대해, 그의 대응하는 블록 (중심 픽셀을 커버하는 가장 작은 모션 그리드) 의 모션 정보가 서브-CU 에 대한 모션 정보를 유도하는데 사용된다. 대응하는 NxN 블록의 모션 정보가 식별된 후, 대응하는 NxN 블록의 모션 정보가 현재의 서브-CU 의 모션 벡터들 및 참조 인덱스들로, TMVP 와 동일한 방법으로, 변환되며, 여기서 모션 스케일링 및 다른 프로시저들이 적용된다. 예를 들어, 비디오 디코더 (30) 는 낮은-지연 조건이 충족되는지 여부를 체크하고, 가능한 한, 모션 벡터 MVx (참조 픽처 리스트 X 에 대응하는 모션 벡터) 를 이용하여 각각의 서브-CU 에 대한 모션 벡터 MVy 를 예측할 수도 있다 (여기서, X 는 0 또는 1 과 동일하고 Y 는 1-X 과 동일하다). 이것은 시간 모션 벡터 예측에 대한 방법과 동일한 방법으로 이루어진다.
공간-시간 모션 벡터 예측에서, 서브-CU들의 모션 벡터들이 래스터 스캔 순서에 따라 회귀적으로 유도된다. 도 8 은 이 컨셉을 예시한다. 예를 들어, 도 8 에 나타낸 바와 같이, 4개의 4x4 개의 서브-CU들 A, B, C, 및 D 를 포함하는, 8x8 CU (도 8 에 더 두꺼운 윤곽선을 가진 정사각형으로서 도시됨) 를 고려한다. 현재의 프레임에서의 이웃하는 NxN 블록들은 도 8 에 a, b, c, 및 d 로서 라벨링된다.
서브-CU A 에 대한 모션 유도는 그의 2개의 공간 이웃들을 식별함으로써 시작된다. 제 1 이웃은 서브-CU A 상부의 NxN 블록 (블록 c) 이다. 블록 c가 이용불가능하거나 또는 인트라 코딩되면, 서브-CU A 의 상부에 있는 다른 NxN 블록들이 (블록 c 에서 시작하여, 좌측으로부터 우측으로) 체크된다. 제 2 이웃은 서브-CU A 의 좌측에 있는 블록 (블록 b) 이다. 블록 b 가 이용불가능하거나 또는 인트라 코딩되면, 서브-CU A 의 좌측에 있는 다른 블록들이 (블록 b 에서 시작하여 상단으로부터 하단으로) 체크된다. 각각의 리스트에 대한 이웃하는 블록들로부터 획득된 모션 정보가 주어진 리스트에 대한 제 1 참조 프레임으로 스케일링된다. 다음으로, 서브-블록 A 의 시간 모션 벡터 예측자 (TMVP) 는 HEVC 에 규정되고 상기 본 개시물에서 설명된 바와 같은 TMVP 유도의 동일한 프로시저를 따름으로써 유도된다. 그에 따라, 로케이션 D 에서의 병치된 블록의 모션 정보가 페칭되어 스케일링된다. 마지막으로, 모션 정보를 취출 및 스케일링한 후, 모든 가용 모션 벡터들 (최대 3) 이 각각의 참조 리스트에 대해 별개로 평균된다. 평균된 모션 벡터가 현재의 서브-CU 의 모션 벡터로서 할당된다.
서브-CU 모션 예측 모드 시그널링에서, 서브-CU 모드들은 추가적인 병합 후보들로서 이용가능하며, 모드들을 시그널링하는데 추가적인 신택스 엘리먼트가 요구되지 않는다. ATMVP 모드 및 STMVP 모드를 나타내기 위해 2개의 추가적인 병합 후보들이 각각의 CU 의 병합 후보들 리스트에 추가된다. ATMVP 및 STMVP 가 이용가능하다고 시퀀스 파라미터 세트가 표시하면, 최대 7개의 병합 후보들이 사용된다. 추가적인 병합 후보들의 인코딩 로직에서는 HEVC 테스트 모델 (HM) 에서의 병합 후보들과 동일하며, 이는 P 또는 B 슬라이스에서의 각각의 CU 에 대해, 2개의 더 많은 RD 체크들이 2개의 추가적인 병합 후보들에 대해 요구된다는 것을 의미한다. 병합 인덱스 코딩을 향상시키기 위해, JEM 에서, 병합 인덱스의 모든 빈들이 CABAC 에 의해 컨텍스트 코딩된다. HEVC 에서, 단지 제 1 빈은 컨텍스트 코딩되고 나머지 빈들은 컨텍스트 바이패스 코딩된다.
빈에 대해 정규 CABAC 코딩을 수행하는 것보다 빈에 대해 바이패스 CABAC 코딩하는 것이 계산적으로 더 저렴할 수도 있다. 또, 바이패스 CABAC 코딩을 수행하는 것은 더 높은 정도의 병렬화 및 처리량을 가능하게 할 수도 있다. 바이패스 CABAC 코딩을 이용하여 인코딩된 빈들은 "바이패스 빈들" 로서 지칭될 수도 있다. 바이패스 빈들을 함께 그룹화하는 것은 비디오 인코더 (20) 및 비디오 디코더 (30) 의 처리량을 증가시킬 수도 있다. 바이패스 CABAC 코딩 엔진은 여러 빈들을 단일 사이클로 코딩가능할 수도 있으며, 반면 정규 CABAC 코딩 엔진은 단지 단일 빈을 한 사이클로 코딩가능할 수도 있다. 바이패스 CABAC 코딩 엔진은 바이패스 CABAC 코딩 엔진이 컨텍스트들을 선택하지 않기 때문에 더 간단할 수도 있으며, 심볼들 (0 및 1) 양자에 대해 ½ 의 확률을 가정할 수도 있다. 그 결과, 바이패스 CABAC 코딩에서, 간격들은 절반으로 직접 분할된다. 그러나, 압축 효율이 감소될 수도 있다.
HEVC 에서, 단지 변환 모션 모델만이 모션 보상 예측 (MCP) 을 위해 적용된다. 현실 세계에서, 많은 종류의 모션, 예컨대 줌인/줌아웃, 회전, 원근 모션들 및 다른 불규칙적인 모션들이 있다. JEM 에서, 코딩 효율을 향상시키기 위해 아핀 변환 모션 보상 예측이 적용된다. 블록이 아핀 모션 모델을 따르는 경우, 블록 내 위치 (x, y) 의 MV 는 아핀 모션 모델에 의해 결정될 수 있다:
(3)
수식 (3) 에서, a, b, c, d, e 및 f 는 아핀 파라미터들이다. 더욱이, 수식 (3) 에서, vx 는 위치 (x, y) 의 MV 의 수평 성분이고 vy 는 위치 (x, y) 의 MV 의 수직 성분이다.
도 9 는 현재의 아핀 블록 (900) 에 대한 단순화된 아핀 모션 모델의 블록도이다. 도 9 에 나타낸 바와 같이, 6-파라미터들 아핀 모션 모델은 좌상단 제어 지점 (902) (x0, y0) 의 모션 벡터 v0, 우상단 제어 지점 (904) (x1, y1) 의 모션 벡터 v1 및 좌하단 제어 지점 (906) (x2, y2) 의 모션 벡터 v2 로 표현될 수 있다. 좌상단 제어 지점 (902) 이 좌표계의 원점이라고 가정하면, 이는 (x0, y0) = (0, 0) 임을 의미하며, 현재의 아핀 블록 (900) 에서의 위치 (x, y) 의 MV 는 하기 수식 (4) 에 의해 기술된다:
(4)
수식 (4) 에서, (v0x, v0y) 는 좌상단 모서리 제어 지점 (902) 의 모션 벡터이며, (v1x, v1y) 는 우상단 모서리 제어 지점 (904) 의 모션 벡터이고, (v2x, v2y) 는 좌하단 모서리 제어 지점 (906) 의 모션 벡터이고, w=(x1-x0) 는 좌상단과 우상단 제어 지점들 (902, 904) 사이의 수평 거리이고, h=(y2-y0) 는 좌상단과 좌하단 제어 지점들 (902, 906) 사이의 수직 거리이다. 수식 (4) 에서, vx 는 위치 (x, y) 의 MV 의 수평 성분이고, vy 는 위치 (x, y) 의 MV 의 수직 성분이다.
그러나, JEM 에서, 아핀 모션 모델은 수식 (3) 에서 a=e 및 b=-d 를 가정함으로써 4-파라미터 아핀 모션 모델로 단순화되어, 하기 수식 (5) 에 나타낸 바와 같이, vx 및 vy 의 표현이 된다:
(5)
그후 4-파라미터들 아핀 모션 모델은 원점으로서 가정되는 좌상단 제어 지점 (902) (x0, y0) 의 모션 벡터 v0 및 모션 우상단 제어 지점 (904) (x1, y1) 의 벡터 v1 에 의해 표현된다. 수식 (5) 에서, vx 는 위치 (x, y) 의 MV 의 수평 성분이고, vy 는 위치 (x, y) 의 MV 의 수직 성분이다. 도 10 은 현재의 아핀 블록 (1000) 에 대한 단순화된 아핀 모션 모델의 일 예이다. 도 10 에 나타낸 바와 같이, 블록의 아핀 모션 필드는 2개의 제어 지점 모션 벡터들 v0 및 v1 에 의해 기술된다. 블록의 모션 벡터 필드 (MVF) 는 수식 (6) 으로 기술된다:
(6)
수식 (6) 에서, (v0x, v0y) 는 좌상단 모서리 제어 지점 (1002) 의 모션 벡터이고, (v1x, v1y) 는 우상단 모서리 제어 지점 (1004) 의 모션 벡터이고 w=(x1-x0) 는 좌상단 및 우상단 제어 지점들 (1002, 1004) 사이의 수평 거리이다. vx 는 위치 (x, y) 의 MV 의 수평 성분이고, vy 는 위치 (x, y) 의 MV 의 수직 성분이다.
모션 보상 예측을 추가로 단순화하기 위해, 블록-기반 아핀 변환 예측이 적용될 수도 있다. 각각의 서브-블록의 모션 벡터를 유도하기 위해, 각각의 서브-블록의 중심 샘플의 모션 벡터는, 도 11 에 나타낸 바와 같이, 수식 (6) 에 따라서 계산되고, 1/16 분수 정확도로 라운딩된다. 비디오 코더는 그후 모션 보상 내삽 필터들을 적용하여, 유도된 모션 벡터를 갖는 각각의 서브-블록의 예측을 발생시킬 수도 있다. 아핀 블록 내 각각의 서브-블록에 대한 내삽된 모션 벡터들은 다음 컨텍스트에서 MCP 모션 벡터 필드 (MVF) 로서 명명된다. 서브-블록 사이즈는 제어 지점들 사이의 MV 차이에 따라서 변할 수 있다. 도 11 은 예시적인 MCP MV 필드이며, 각각의 서브-블록 (예컨대, 4x4 블록) 의 MV 는 제어 지점들의 MV들에 의해 내삽되며; MV 는 그후 각각의 서브-블록에 대한 모션 보상 예측 (MCP) 을 수행하기 위해 사용된다. 각각의 서브-블록의 모션 벡터가 대응하는 참조 블록을 식별하기 위해 사용될 수도 있으며, 이들의 조합이 예측 블록을 형성한다. 따라서, 이러한 방법으로, 비디오 코더는 블록의 모션 벡터 (예컨대, 블록의 제어 지점의 모션 벡터) 에 기초하여 예측 블록을 발생시킬 수도 있다.
모션 보상 예측 후, 각각의 서브-블록의 높은 정확도 모션 벡터는 라운딩되어 법선 모션 벡터와 동일한 정확도로 저장된다. JEM 및 HEVC 에서, 각각의 인터 예측 CU 또는 PU 에 대한 모션 벡터들이 다른 인터 블록들의 MV 예측을 위해 저장된다. 모션 벡터들에 대한 저장 유닛은 4x4 블록이다. 다시 말해서, JEM 에서, 아핀 블록의 내삽된 MV들이 각각의 4x4 블록에 대해 발생되어 저장된다. 그러나, 제어 지점들의 MV들이 다음 블록들에 대해 사용될 수도 있으므로, 모서리 4x4 블록들에 대한 저장된 MV들은 도 12 에 나타낸 바와 같이, MCP 에 사용되는 연관된 MV들 대신, 제어 지점들의 MV들이다. JEM6 에서, 좌하단 및 우하측 제어 지점들의 MV들이 또한 좌상단 및 우상단 제어 지점들의 MV들에 의해 발생된다는 점에 유의한다.
따라서, 도 12 에서, CU (1200) 는 16개의 서브-블록들을 포함한다. CU (1200) 의 모서리들에 있지 않은 12개의 서브-블록들의 각각의 개별 서브-블록에 대해, 비디오 코더는 개별 서브-블록의 중심 지점에 대한 모션 벡터(들) 를 저장한다. CU (1200) 의 모서리에서의 각각의 개별 서브-블록에 대해, 비디오 코더는 개별 서브-블록의 외부 모서리에 대한 모션 벡터(들) 를 저장한다.
JEM 에서는, 2개의 아핀 모션 모드들: 아핀 인터 (AF_INTER) 모드 및 아핀 병합 (AF_MERGE) 모드가 있다. 8 보다 큰 폭 및 높이 양자를 갖는 CU들에 대해, AF_INTER 모드가 적용될 수 있다. AF_INTER 모드가 사용되는지 여부를 표시하기 위해 CU 레벨에서의 아핀 플래그가 비트스트림으로 시그널링된다. 이 모드에서, 모션 벡터 세트 {(MVP0,MVP1)|MVP0={vA,vB,vc},MVP1={vD, vE}} 를 가진 후보 리스트는 이웃 블록들을 이용하여 구성된다. 도 13 에 나타낸 바와 같이, MVP0 는 블록 A, B 또는 C 의 모션 벡터들로부터 선택된다. 도 13 은 AF_INTER 에 대한 MVP 의 일 예를 예시한다. 이웃 블록으로부터의 모션 벡터는 참조 리스트 및 이웃 블록에 대한 참조의 픽처 순서 카운트 (POC), 현재의 CU 의 참조의 POC 및 현재의 CU 의 POC 사이의 관계에 따라서 스케일링된다. 이웃 블록 D 및 E 로부터 MVP1 을 선택하는 접근법은 유사하다. JEM 에서, 후보 리스트 내 후보들의 개수가 2 보다 작으면, 리스트는 AMVP 후보들 {AMVP0, AMVP0} 및 {AMVP1, AMVP1} 의 각각을 중복함으로써 구성된 모션 벡터 쌍에 의해 패딩된다.
더욱이, JEM 에서, 후보 리스트 내 후보들의 개수가 2 보다 클 때, 후보들이 이웃하는 모션 벡터들의 일관성 (쌍 후보에서 2개의 모션 벡터들의 유사성) 에 따라서 먼저 분류되고 단지 처음 2개의 후보들만이 도 13 의 우측 부분에 나타낸 바와 같이 유지된다. 비디오 코더는 어느 모션 벡터 세트 후보가 현재의 CU 의 제어 지점 모션 벡터 예측 (CPMVP) 으로서 선택되는지를 결정하기 위해 레이트-왜곡 (RD) 비용 체크를 이용할 수도 있다. 후보 리스트에서 CPMVP 의 위치를 표시하는 인덱스가 비트 스트림으로 시그널링된다. 현재의 아핀 CU 의 CPMVP 가 결정된 후, 아핀 모션 추정이 적용되며 제어 지점 모션 벡터 (CPMV) 가 발견된다. CPMV 와 CPMVP 사이의 차이가 그후 비트스트림으로 시그널링된다.
CU 가 아핀 병합 (AF_MERGE) 모드에서 적용될 때, CU 는 방문 순서: A1 -> B1 -> B0 -> A0 -> B2 에 기초하여, 유효한 이웃 복원된 블록들로부터 아핀 모드로 코딩된 제 1 블록을 얻는다. 후보 블록에 대한 선택 순서는 도 14a 에 나타낸 바와 같이, 좌측, 상부, 우상부, 좌하단으로부터 좌상부이다. 이웃 좌하단 블록 A 가 도 14b 에 나타낸 바와 같이 아핀 모드에서 코딩되면, 블록 A 를 포함하는 CU 의 좌상단 모서리, 우상부 모서리 및 좌하단 모서리의 모션 벡터들 v2, v3 및 v4 가 유도된다. 현재의 CU 상의 좌상단 모서리의 모션 벡터 v0 는 (x2, y2) = (0, 0) 을 의미하는, (x2, y2) 가 원점이라고 가정함으로써, 하기 수식 (7) 을 이용하여 v2, v3 및 v4 에 따라서 외삽된다. 둘째로, 현재의 CU 의 우상부의 모션 벡터 v1 이 유사한 방법으로 계산된다. 수식 (7) 은 다음과 같다.
(7)
수식 (7) 에서, (v2x, v2y) 는 좌상단 모서리 제어 지점 (x2, y2) 의 모션 벡터이고, (v3x, v3y) 는 우상단 모서리 제어 지점 (x3, y3) 의 모션 벡터이고, (v4x, v4y) 는 이웃 아핀 블록에서의 좌하단 모서리 제어 지점 (x4, y4) 의 모션 벡터이고, w=(x3-x2) 는 좌상단과 우상단 제어 지점들 사이의 수평 거리이고, h=(y4-y2) 는 좌상단과 좌하단 제어 지점들 사이의 수직 거리이고, vx 는 로케이션 (x, y) 에 대한 모션 벡터의 수평 성분이고, vy 는 로케이션 (x, y) 에 대한 모션 벡터의 수직 성분이다.
현재의 CU 의 CPMV v0 및 v1 이 유도된 후, 아핀 모션 모델 수식 (6) 에 따라서, 현재의 CU 의 MVF 가 발생된다. 현재의 CU 가 AF_MERGE 모드로 코딩되는지 여부를 식별하기 위해, 아핀 모드에서 코딩되는 적어도 하나의 이웃 블록이 존재할 때 아핀 플래그가 비트스트림으로 시그널링된다.
HEVC 에서, (PU 의 모션 벡터와 예측된 모션 벡터 사이의) 모션 벡터 차이들 (MVD들) 이 1/4 루마 샘플의 유닛으로 시그널링된다. JEM 에서, 진보된 모션 벡터 해상도 (AMVR) 가 도입된다. JEM5 에서, MVD 는 1/4 루마 샘플들, 정수 루마 샘플들 또는 4개의 루마 샘플들의 유닛들로 코딩될 수 있다. JEM5 에서, MVD 해상도는 CU 레벨에서 제어되며 MVD 해상도 플래그들은 적어도 하나의 비-제로 MVD 성분들을 가지는 각각의 CU 에 대해 조건부로 시그널링된다.
적어도 하나의 비-제로 MVD 성분들을 가지는 CU 에 대해, 1/4 루마 샘플 MV 정밀도가 CU 에서 사용되는지 여부를 표시하기 위해 제 1 플래그가 시그널링된다. 1/4 루마 샘플 MV 정밀도가 사용되지 않는다는 것을 (1 과 동일한) 제 1 플래그가 표시할 때, 정수 루마 샘플 MV 정밀도 또는 4개의 루마 샘플 MV 정밀도가 사용되는지 여부를 표시하기 위해 다른 플래그가 시그널링된다.
CU 의 제 1 MVD 해상도 플래그가 제로이거나, 또는 CU 에 대해 코딩되지 않을 때 (CU 에서의 모든 MVD들이 제로임을 의미할 때), 1/4 루마 샘플 MV 해상도가 CU 에 대해 사용된다. CU 가 정수-루마 샘플 MV 정밀도 또는 4개의-루마-샘플 MV 정밀도를 이용할 때, CU 에 대한 AMVP 후보 리스트에서의 MVP들은 대응하는 정밀도로 라운딩된다.
인코더 측에서, 비디오 인코더 (20) 는 CU 레벨 RD 체크들을 이용하여, 어느 MVD 해상도가 CU 에 대해 사용되는지를 결정할 수도 있다. 즉, CU 레벨 RD 체크가 각각의 MVD 해상도에 대해, 3번 수행될 수도 있다. 인코더 속력을 가속시키기 위해, 다음 인코딩 방식들이 JEM 에서 적용된다:
정상 1/4 루마 샘플 MVD 해상도에 의한 CU 의 RD 체크 동안, 현재의 CU 의 모션 정보 (정수 루마 샘플 정확도) 가 저장된다. 시간-소모적인 모션 추정 프로세스가 3번 중복되지 않도록, 저장된 모션 정보 (라운딩 이후) 가 정수 루마 샘플 및 4 루마 샘플 MVD 해상도에 의한 동일한 CU 에 대한 RD 체크 동안 추가적인 작은 범위 모션 벡터 정제를 위한 시작 지점으로서 사용된다.
4 루마 샘플 MVD 해상도에 의한 CU 의 RD 체크가 조건부로 호출된다. CU 에 대해, 정수 루마 샘플 MVD 해상도에 대한 RD 비용이 1/4 루마 샘플 MVD 해상도의 RD 비용보다 휠씬 더 클 때 (예컨대, 정수 루마 샘플 MVD 해상도에 대한 RD 비용 대 1/4 루마 샘플 MVD 해상도에 대한 RD 비용의 비가 임계치보다 클 때), CU 에 대한 4 루마 샘플 MVD 해상도의 RD 체크가 스킵된다.
복원된 모션 벡터 정보는 HEVC/H.265, AVC/H.264, 및 JEM 과 같은 기존 비디오 코덱에서 모션 벡터 예측의 기존 방식들에서 완전히 이용되지 않는다.
본 개시물은 모션 벡터 예측 (MVP) 을 수행하는 컴퓨팅 디바이스들을 향상시킬 수도 있는 기법들을 기술한다. 이 기법들은 아래에서 설명되는 여러 상이한 양태들에서 자세히 설명된다. 다음 기법들이 개별적으로 적용될 수도 있다. 대안적으로, 임의의 기법들의 조합이 적용될 수도 있다.
본 개시물의 하나 이상의 기법들에 따르면, 비디오 코더들은, 비-인접 블록들의 모션 벡터들이, 특히, 비-인접 블록들의 모션 정보와 유사할 정도로 공간 모션 벡터들 사이의 상관이 현재의 블록의 모션 정보에 대해 충분히 강할 때, 예측 효율을 추가로 향상시킬 수 있기 때문에, 현재의 블록에 바로 인접하지 않는 블록들의 모션 벡터들을 이용할 수도 있다. 따라서, 비-인접 블록들로부터의 모션 정보는 현재의 블록에 대한 우수한 MVP 후보들일 수도 있다. 본 개시물에서, 하나 이상의 비-인접한 공간 모션 벡터 예측자들 (NA-SMVPs) 이 현재의 블록의 모션 정보에 대한 모션 벡터 예측자를 유도하기 위해 사용되거나; 또는 NA-SMVP들이 인터-예측을 수행하기 위해 현재의 블록에 의해 직접 재사용될 수도 있는 것으로 제안된다. 본 개시물은 MV 예측을 위해 NA-SMVP들을 다른 MV 예측자들 (예컨대, 규칙적인 SMVP, TMVP, 합성 MVP들) 과 함께 적응적으로 통합하는 기법들을 기술한다.
따라서, 본 개시물의 기법에 따르면, 비디오 인코더 (20) 는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다. 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 더욱이, 비디오 인코더 (20) 는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 비디오 인코더 (20) 는 또한 현재의 블록의 모션 벡터를 결정할 수도 있다. 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일할 수도 있거나 또는 현재의 블록에 대한 MVP 의 모션 벡터 플러스 비트스트림으로 시그널링되는 모션 벡터 차이 (MVD) 와 동일할 수도 있다. 추가적으로, 비디오 인코더 (20) 는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다. 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다.
이와 유사하게, 비디오 디코더 (30) 는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다. 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 더욱이, 비디오 디코더 (30) 는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 추가적으로, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정할 수도 있다. 비디오 디코더 (30) 는 또한 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다. 비디오 디코더 (30) 는 그후 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다.
일부 예들에서, 비-인접한 공간 모션 벡터 예측자들 (NA-SMVP) 이 현재의 블록이 로케이트되는 동일한 픽처, 슬라이스 또는 사전-정의된 영역 내에 로케이트되는 공간적으로 비-인접한 블록들의 모션 정보로부터 유도된다. 비-인접 블록들의 모션 정보가 현재의 블록에 대한 모션 벡터 예측자들로서 재사용될 수도 있기 때문에, 단지 복원된 모션 정보를 갖는 비-인접 블록들만이 비-인접한 MVP 유도에 고려된다. 본 개시물은 NA-블록들과 현재의 블록 사이의 거리를 범위 내로 구속하기 위해 NA-블록들에 추가로 제약을 추가하는 것을 제안한다. 거리는 L1 또는 L2 의미에서 픽셀 거리로 측정될 수 있거나; 또는 거리는 L1 또는 L2 의미에서 블록 거리로 측정될 수 있다. 고정된 직교 좌표계를 갖는 n-차원 실제 벡터 공간에서 2개의 좌표 지점들 사이의 L1 거리는 좌표 축들 상에의 지점들 사이의 선분의 투영들의 길이들의 총합이다. L1 픽셀 거리의 경우, 투영의 길이는 하나의 픽셀의 높이 또는 폭이다. L1 블록 거리의 경우, 투영의 길이는 블록의 폭 또는 높이이다. L2 거리는 2개의 지점들 사이의 유클리드 거리이다. 거리는 블록 중심들 또는 각각의 블록 내 임의의 지정된 지점 사이에 측정될 수 있다. 일부 예들에서, 현재의 블록에 인접하지 않고 현재의 블록에 바로 인접한 블록들에 인접하지 않는 블록들로 NA-블록들을 구속하는 다른 제약이 NA-블록들에 추가된다.
도 15 는 본 개시물의 기법에 따른, 예시적인 비-인접 블록들을 예시하는 블록도이다. 도 15 에 나타낸 바와 같이, 비-인접 블록들 (1500) 은 현재의 블록 (1502) 에 바로 인접하지 않는 복원된 블록들이다. 비-인접 블록들의 사이즈는 모션 정보를 저장하는데 사용되는 가장 작은 유닛 블록 (예컨대, 4x4 블록) 또는 인터-예측을 위한 기본 유닛 (예컨대, HEVC 에서의 PU) 또는 JEM 에서의 아핀 모드, FRUC 모드에서 사용되는 바와 같은 서브-블록 또는 임의의 다른 규정된 블록 사이즈로서 정의될 수 있다. 도 15 는 또한 인접한, 비-복원된 블록들 (1504) 및 비-인접한, 비-복원된 블록들 (1506) 을 나타낸다.
도 16 은 본 개시물의 기법에 따른, 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다. 도 17 은 본 개시물의 기법에 따른, 부모 블록에 기초하여 비-인접 블록들의 선택의 일 예를 예시하는 블록도이다. 잠재적으로 모든 비-인접 블록들이 MVP 유도에 사용될 수 있지만, MVP 유도를 위해 단지 제한된 개수의 비-인접 블록들 (NA-블록들) 만을 선택하는 것이 (구현 복잡성의 관점에서) 더욱 바람직할 수도 있다. 모션 벡터 예측자 (MVP) 유도를 위해 N (여기서, N 은 비-음의 정수임) 개의 비-인접 블록들을 선택하는 여러 방법들이 아래에서 자세히 설명된다. 예를 들어, MVP 유도를 위해 N 개의 비-인접 블록들을 선택하는 일 예에서, 비-인접 블록들의 고정된 패턴들이 NA-SMVP 유도를 위해 선택된다. 고정된 패턴들은 현재의 블록의 위치에 대해 위치된다. 도 16 에 나타낸 바와 같은 예에서, 현재의 블록 (1600) 에 대해 HEVC 에서 사용되는 바와 같은 규칙적인 SMVP들을 유도하는데 사용되는 인접한 블록들 (예컨대, A0, A1, B0, B1 및 B2) 이외에, 현재의 블록 (1600) 을 둘러싸는 11 개의 NA-블록들 (NA1,1, NA1,2, NA1,3, NA1,4, NA1,5, NA1,6, NA1,7, NA1,8, NA1,9, NA1,10, NA1,11) 의 고정된 패턴이 NA-SMVP들을 유도하기 위해 사용된다. 수평 거리 s1 및 수직 거리 t1 은 이 패턴의 2개의 디스크립터들이다.
도 17 의 예에서, HEVC 에서 사용되는 바와 같은 규칙적인 SMVP들을 유도하는데 사용되는 인접한 블록들 이외에, 비디오 코더는 MVP 유도를 위한 NA-블록들로서 현재의 블록 (1702) 을 포함하는 부모 블록 (1700) 의 인접한 블록을 이용한다. 도 17 에서, 부모 블록 (1700) 의 인접한 블록들 (NA1,1, NA1,2, NA1,3, NA1,4, NA1,5, NA1,6, NA1,7, NA1,8, NA1,9) 은 현재의 블록 (1702) 을 포함하여, 부모 블록 (1700) 내 블록들에 대한 비-인접 블록들로서 선택된다. 부모 블록 (1700) 의 사이즈는 미리 결정되거나 또는 비트스트림들로 시그널링되거나, 또는 현재의 블록 (1702) 의 사이즈에 의존하거나 또는 현재의 블록 (1702) 의 코딩된 모드 (예컨대, 스킵/병합/AMVP) 에 의존할 수도 있다. 본 개시물의 NA-SMVP들은 비-인접한 공간 블록들의 개시된 패턴들로부터 유도될 수 있지만 이에 한정되지 않는다.
NA-블록들을 둘러싸는 멀티-레벨의 예들은 다음과 같이 주어진다. 각각의 레벨에 대해, NA-블록들의 개수는 상이할 수도 있다는 점에 유의한다.
패턴 A1: NA-블록들을 둘러싸는 멀티-레벨. 각각의 레벨 (레벨 i) 은 거리 파라미터들 (si 및 ti) 에 의해 기술된다. 도 20, 도 21 및 도 22 는 NA-블록들을 둘러싸는 2-레벨의 예들을 나타내지만 레벨들의 개수는 임의의 비-음의 정수일 수도 있다. 도 20, 도 21, 및 도 22 의 예들에서, 블랙 정사각형들은 제 1 레벨에서의 NA-블록들에 대응하며, 그레이 정사각형들은 제 2 레벨에서의 NA-블록들에 대응한다. t1 은 현재의 블록 (2000, 2100, 또는 2200) 으로부터 제 1 레벨까지의 수직 거리를 나타낸다. t2 는 현재의 블록 (2000, 2100, 또는 2200) 으로부터 제 2 레벨까지의 수직 거리를 나타낸다. s1 은 현재의 블록 (2000, 2100, 또는 2200) 으로부터 제 1 레벨까지의 수평 거리를 나타낸다. s2 는 현재의 블록 (2000, 2100, 또는 2200) 으로부터 제 2 레벨까지의 수평 거리를 나타낸다.
패턴 A2: 부모 블록에 기초한 NA-블록들을 둘러싸는 멀티-레벨. 각각의 레벨 (레벨 i) 은 거리 파라미터들 (si 및 ti) 에 의해 기술된다. 부모 블록의 사이즈는 미리 결정되거나 또는 비트스트림들로 시그널링될 수 있다. 도 23 은 NA-블록들을 둘러싸는 2-레벨의 예들을 나타내지만 레벨들의 개수는 임의의 비-음의 정수일 수도 있다.
더욱이, 일부 예들에서, 현재의 블록과 비-인접 블록 사이의 거리는 L1-놈 (즉, L1 거리) 또는 L2-놈 (즉, 유클리드 거리) 에 의해 정의된다.
일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 역방향 코딩 순서에 따라서 N 개의 비-인접 블록들을 선택한다. 예를 들어, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 비디오 코더가 블록들을 코딩하는 순서와 반대인 순서를 따라서 블록들을 스캐닝함으로써 비-인접 블록들을 선택할 수도 있다.
일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 사전-정의된 순서에 따라서 모든 복원된 MV들을 이 리스트에 삽입함으로써 글로벌 MV 후보 리스트를 구성한다. 글로벌 MV 후보 리스트는 인접한 블록들로부터 유도된 MV들 뿐만 아니라 비-인접 블록들로부터 유도된 MV들을 포함할 수도 있다. 그후, 현재의 블록의 MV 예측자는 이 글로벌 MV 후보들을 이용하여 유도될 수도 있다. 따라서, 이러한 예들에서, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 현재의 픽처에 있고 현재의 블록 이전에 인코딩되는 각각의 블록에 대한 모션 벡터를 규정하는 MVP 후보들을 포함하는 글로벌 모션 벡터 후보 리스트를 결정할 수도 있다. 추가적으로, 비디오 코더는 글로벌 모션 벡터 후보 리스트 내 MVP 후보로부터 비-인접 블록의 모션 벡터를 결정할 수도 있다.
일부 예들에서, 비-인접한 MV 후보들을 직접 페칭하는 것이 라인 버퍼의 사이즈를 증가시킬 수도 있기 때문에, 비디오 코더는 복원된 MV들을 저장하는 대안적인 방법을 적용한다. 예를 들어, 비디오 코더는 복원된 MV들을 이력 버퍼에 선입선출 방식으로 저장할 수도 있다. 비-인접한 MV 후보들을 모방하기 위해, 단지 이력 버퍼 내 이들 구 MV들만이 비-인접한 MV 후보들로서 취해진다. 이력 버퍼 내 구 MV들은 이력 버퍼의 끝에 근접한 것들로서 정의될 수도 있다. 예를 들어, 이력 버퍼의 사이즈가 N 이면, 임계치 T (예컨대, T=N/4) 는 이력 버퍼에서 출구에 가장 가까운 MV들이 구 MV들로서 정의되도록, 시그널링되거나 또는 설정될 수도 있다.
일부 예들에서, 비-인접한 모션 정보 (즉, 비-인접 블록들의 모션 정보) 를 저장하는데 사용되는 버퍼의 버퍼 사이즈를 감소시키기 위해, 제약들이 비-인접한 공간 모션 벡터 예측자들을 유도하기 위해 추가된다. 비-인접 블록과 현재의 블록 (또는, 현재의 CTU) 사이의 거리가 임계치보다 크면, 비-인접 블록의 위치는 수정될 수 있다. 다시 말해서, 제 1 로케이션 (예컨대, NA-블록들의 고정된 패턴에 의해 규정되는 로케이션) 에서의 NA-블록에 기초하여 MV 후보를 결정하기 보다는, 비디오 코더는 제 1 위치로부터 현재의 블록까지의 거리가 임계치보다 클 때 제 1 위치에 기초하여 제 2 위치를 결정할 수도 있다. 일부 예들에서, 제 1 로케이션 (예컨대, NA-블록들의 고정된 패턴에 의해 규정되는 로케이션) 에서의 NA-블록에 기초하여 MV 후보를 결정하기 보다는, 비디오 코더는 제 1 위치로부터 현재의 블록까지의 거리가 임계치보다 클 때 제 1 위치가 유효하지 않다고 결정할 수도 있다. 임계치는 수평 거리 및 수직 거리에 대해 상이할 수 있다. 따라서, 일부 예들에서, 비-인접 블록의 모션 벡터를 결정하기 전에, 그리고 비-인접 블록과 현재의 블록 사이의 거리가 임계치 거리보다 큰 것에 기초하여, 비디오 코더는 비-인접 블록의 위치를 수정할 수도 있다. 일부 예들에서, 비-인접 블록의 모션 벡터를 결정하기 전에, 그리고 비-인접 블록과 현재의 코딩 트리 블록 사이의 거리가 임계치 거리보다 큰 것에 기초하여, 비디오 코더는 비-인접 블록의 위치를 수정할 수도 있다. 이러한 예들에서, 현재의 코딩 트리 블록은 현재의 블록을 포함한다.
위치 변형의 일 예는 제 1 위치를 조악한 (coarse) 그리드로 라운딩하는 것, 즉, 저장된 비-인접한 모션들을 감소시키는 것일 수도 있다. 따라서, 이 예에서, 비디오 코더는 비-인접 블록의 위치를, 현재의 픽처 내 블록들의 제 2 그리드보다 더 조악한 현재의 픽처 내 블록들의 제 1 그리드 상의 위치로 라운딩함으로써, 적어도 부분적으로 비-인접 블록의 위치를 수정할 수도 있다.
위치 변형의 다른 예는 그 위치까지의 거리가 임계치보다 더 크면 제 1 위치를 임계치로 클리핑하는 것일 수 있다. 위치를 임계치로 클리핑하는 것은 그 위치가 임계치를 지나면 임계치에 있도록 그 위치를 수정하는 것을 의미한다. 따라서, 이 예에서, 비디오 코더는 비-인접 블록의 위치를 거리 임계치로 클리핑함으로써 적어도 부분적으로 비-인접 블록의 위치를 수정할 수도 있다. 상이한 임계치들에 의한 다수의 위치 변형 방법들이 결합될 수 있다.
도 18a 및 도 18b 는 본 개시물의 기법에 따른, 비-인접 블록의 위치 변형의 일 예를 예시하는 블록도들이다. 도 19a 및 도 19b 는 본 개시물의 기법에 따른, 비-인접 블록을 수정하기 위한 임계치들의 예들을 예시하는 블록도들이다. 위치들을 수정하는 몇가지 예들이 아래에 제공된다. 이들 예들에서, 비-인접 블록의 위치가 (xNA, yNA) 이고, 비-인접 블록의 수정된 위치가 (xNA', yNA') 이고, 현재의 CTU (1800, 1900) 의 좌상단 그리드의 위치가 (xCTU, yCTU) 이고, 현재의 CU 의 위치가 (xCU, yCU) 이라고 가정한다. 제약들의 예들은 다음과 같을 수 있다:
1. (yCTU - yNA) > ( 또는 >=) yThrd 이면, yNA' = yThrd 이다. (xCTU - xNA) > (또는 >=) xThrd 이면, xNA' = xThrd 이다. yThrd 는 xThrd 보다 작을 수 있다. 도 18a 는 yThrd 에 의한 예를 나타내며, 여기서 Thrd는 임계치에 대한 약어이다. 따라서, 도 18a 에서, CTU (1800) 는 현재의 CU (curr) (1802) 를 포함한다. 비-인접 블록의 위치 NA (1804) 의 수직 좌표와 CTU (1800) 의 수직 좌표 사이의 차이가 임계치 (yThrd) 보다 크면, 비디오 코더는 위치 NA (1804) 의 수직 좌표를 임계치로 클리핑하여, 위치 NA' (1806) 를 초래한다.
2. (yCTU - yNA) > (or >=) yThrd 및 (또는) (xCTU - xNA) > (또는 >=) xThrd 이면, abs(xNA', yNA') = ( (xNA >>CompressedLog2SizeX) << CompressedLog2SizeX, (yNA>>CompressedLog2SizeY) << CompressedLog2SizeY ) 이다. CompressedLog2SizeX 및 CompressedLog2SizeY 는 위치 라운딩을 제어하기 위한 값들이다. 예를 들어, (xNA, yNA) 가 (36, 18) 이고 (CompressedLog2SizeX, CompressedLog2SizeY) 가 (4,4) 이면, 라운딩된 위치, (xNA', yNA') 는 ((36>>4)<<4, (18>>4)<<4) = (32,16) 일 것이다. 다시 말해서, 비-인접 블록의 위치가 현재의 블록으로부터 멀어지면, 비디오 코더는 그 위치를 더 조악한 그리드로 라운딩할 수도 있다. 따라서, 모션 버퍼는 단지 더 조악한 그리드 상에서의 비-인접 블록 모션들만을 저장할 수 있다. 도 18b 는 일 예를 나타낸다. 따라서, 도 18b 의 예에서, CTU (1850) 는 현재의 CU (curr) (1852) 를 포함한다. 위치 NA (1854) 의 수직 (y) 좌표와 CTU (1850) 의 위치의 수직 좌표 사이의 차이가 수직 임계치 (yThrd) 보다 크고 및/또는 위치 NA (1854) 의 수평 (x) 좌표 사이의 차이가 수평 임계치 (xThrd) 보다 크면, 비디오 코더는 수정된 위치 NA' (1856) 의 수평 좌표를 (xNA >> CompressedLog2SizeX) << CompressedLog2SizeX 로, 그리고, 수정된 위치 NA' (1856) 의 수직 좌표를 (yNA >> CompressedLog2SizeY) << CompressedLog2SizeY 로 결정할 수도 있다. 일부 예들에서, xThrd 는 음의 무한대이다. 따라서, 이러한 예들에서 (xCTU - xNA) 는 xThrd 보다 항상 크다.
3. 일부 예들에서, 비-인접 블록을 수정하는 임계치는 다음과 같다: (yCTU - yNA) > yThrd 이면, 비-인접 블록이 수정된다. 도 19a 는 일 예를 나타내며, 음영처리된 블록들은 수정되어야 하는 비-인접 블록 위치들이다. 특히, 도 19a 의 예에서, CTU (1900) 는 현재의 CU (curr) (1902) 를 포함한다. 비-인접 블록의 수직 좌표가 CTU (1900) 의 수직 좌표와 임계치 (yThrd) 초과 만큼 상이하면, 비디오 코더는 비-인접 블록의 위치를 수정할 수도 있다.
4. 비-인접 블록을 수정하는 임계치는 하나 보다 많은 규칙의 조합일 수 있다. 일 예는 다음과 같을 수 있다: (1) ( yCTU - yNA ) > yThrd 이면, 비-인접 블록은 수정되어야 한다. (2) ( yCTU - yNA ) > 0 및 ( xCTU - xNA ) > 0 이면, 비-인접 블록은 수정되어야 한다. 도 19b 는 2개의 규칙들의 조합의 예를 나타내며, 음영처리된 블록들은 수정되어야 하는 비-인접 블록 위치들이다. 특히, 도 19b 의 예에서, CTU (1950) 는 현재의 CU (curr) (1952) 를 포함한다. 비-인접 블록의 수직 좌표가 CTU (1950) 의 수직 좌표와 수직 임계치 (yThrd) 초과 만큼 상이하면, 비디오 코더는 비-인접 블록의 수직 좌표를 수정할 수도 있다. 추가적으로, 비-인접 블록의 수평 좌표와 CTU (1950) 의 수평 좌표 사이의 차이가 0 보다 크고 비-인접 블록의 수직 좌표와 CTU (1950) 의 수직 좌표 사이의 차이가 0 보다 크면, 비디오 코더는 비-인접 블록의 수평 좌표를 수정할 수도 있다.
일 예에서, 단지 현재의 블록과 동일한 CTU 로우에 로케이트된 비-인접 블록들이 선택될 수 있다. 다른 예에서, 단지 현재의 블록과 동일한 CTU 에 로케이트된 비-인접 블록들이 선택될 수 있다.
N 개의 비-인접 블록들이 결정된다고 비디오 코더가 결정한 후, 비디오 코더는 N 개의 비-인접 블록들 (NA-블록들) 로부터 M (여기서, M ≤ N) 개의 비-인접한 공간 모션 벡터 예측자들 (NA-SMVP) 을 유도할 수도 있다. 비디오 코덱에 사용되는 인터-예측 메커니즘에 따라서 비-인접 SMVP들을 이용하는 상이한 방법들이 있다. 예를 들어, 경쟁적 모션 후보 메커니즘 (예컨대, HEVC 또는 JEM 에서의 병합/스킵 모드) 이 사용될 때, 하나 이상의 비-인접한 공간 MVP들 (NA-SMVPs) 이 유도되어, 사전-정의된 순서에 따라서 후보 리스트에 삽입된다. 도 16 에 나타낸 바와 같은 예에서, 11 개의 비-인접한 MVP들이 종래의 공간 MVP들, 시간 MVP들 이후에, 그리고 합성 결합된 후보들, 합성 제로 후보들 이전에, 병합 후보 리스트에 삽입된다.
일부 예들에서, 풀 모션 프루닝 프로세스가 NA-SMVP들 및 다른 병합 후보들에 적용될 수 있거나; 또는 부분 모션 프루닝이 NA-SMVP들 및 다른 병합 후보들에 적용될 수 있다. 풀 모션 프루닝 프로세스는 동일한 후보를 특정의 범위에 삽입하는 것을 피하기 위해, 하나의 후보를 현재의 후보 리스트 내 모든 이전에 유도된 후보들에 대해 비교한다. 복잡성을 감소시키기 위해, 부분 모션 프루닝 프로세스는 각각의 잠재적인 후보를 모든 다른 기존 후보들과 비교하는 대신, 단지 제한된 수의 후보들과 비교한다. 비-인접 블록들의 더 많은 삽입 순서들이 아래 시퀀스 2 내지 시퀀스 5 에서 주어진다. 본 개시물의 NA-SMVP들이 개시된 삽입 순서를 포함하지만 이에 한정되지 않는 후보 리스트에 삽입될 수 있다.
시퀀스 2
병합 모드에 대한 삽입 순서:
1. 규칙적인 SMVP들 (예컨대, A1, B1, B0, A0, B2) -> TMVP (예컨대, H 또는 C) -> NA-SMVP들 -> 합성 후보들
2. 규칙적인 SMVP들 (예컨대, A1, B1, B0, A0, B2) -> 서브-블록 MV 후보들 (예컨대, ATMVP, STMVP) -> TMVP (예컨대, H 또는 C) -> NA-SMVP들 -> 합성 후보들
3. 규칙적인 SMVP들 (예컨대, A1, B1, B0, A0, B2) -> NA-SMVP들 -> TMVP (예컨대, H 또는 C) -> 합성 후보들
시퀀스 3
(List0 또는 List1 MV 예측을 위한) AMVP 모드에 대한 삽입 순서:
1. 좌측 SMVP들 (예컨대, A0, A1) -> 스케일링된 좌측 SMVP들 (예컨대, A0, A1) -> 상부 SMVP들 (예컨대, B0, B1, B2) -> 스케일링된 상부 SMVP들 (예컨대, B0, B1, B2) -> NA-SMVP들 -> 스케일링된 NA-SMVP들 -> TMVP -> 합성 후보들
시퀀스 4
아핀 병합 모드에 대한 삽입 순서:
1. 규칙적인 SMVP들 (예컨대, A1, B1, B0, A0, B2) -> NA-SMVP들
시퀀스 5
아핀 AMVP 모드에 대한 삽입 순서:
1. 외삽된 아핀 MVP -> 좌측 SMVP들 (예컨대, A0, A1) -> 스케일링된 좌측 SMVP들 (예컨대, A0, A1) -> 상부 SMVP들 (예컨대, B0, B1, B2) -> 스케일링된 상부 SMVP들 (예컨대, B0, B1, B2) -> NA-SMVP들 -> 스케일링된 NA-SMVP들 -> TMVP -> 합성 후보들
경쟁적 공간-시간 모션 후보 방식은 모션 예측자가 가용 모션 예측자들의 세트로부터 선택되는 시스템을 포함할 수도 있다. HEVC 또는 JEM 또는 다른 비디오 코덱들에서의 AMVP 모드와 같은, 경쟁적 공간-시간 모션 후보 방식이 사용될 때, 비-인접한 MVP 후보들이 유도되어, 사전-정의된 순서에 따라서 후보 리스트에 삽입된다. 일 예에서, 비디오 코더는 도 16 의 11 개의 비-인접한 MVP 를 AMVP 후보 리스트에 종래의 공간 MVP들, 시간 MVP들 이후 및 임의의 합성 제로 후보들 이전에, 삽입한다. NA-SMVP 유도는 HEVC 와 동일한 유도 규칙들 또는 인접한 블록들로부터 유도된 SMVP 에 적용된 임의의 다른 규칙들을 따를 수 있다.
NA-SMVP 후보들의 순서는 특정의 사전-정의된 규칙에 의해 결정될 수 있거나 또는 적응적 방법으로 결정될 수도 있다. 예를 들어, 비디오 코더는 N 개의 NA-블록들이 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 선택되는 동일한 순서로 N 개의 비-인접 블록들로부터 M 개의 후보들을 배열할 수도 있다. 대안적으로, 일 예에서, 비디오 코더는 이들 후보들의 빈도들 (즉, 모든 MV 후보들 중 후보들의 발생들의 개수) 및/또는 NA-블록과 현재의 블록 사이의 거리들에 따라서 M 후보들을 재정렬한다. 따라서, 이 예에서, 비디오 코더는 NA-SMVP 후보 리스트 (즉, NA-SMVP 후보들 및 가능한 한 다른 후보들을 포함하는 후보 리스트) 에서 더 빈번한 후보들 및/또는 현재의 블록에 더 가까운 NA-블록들로부터의 후보들을 앞에 배치할 수도 있다. 게다가, 비디오 코더는 모든 NA-SMVP 후보들을 단지 NA-SMVP 후보들 사이에 재정렬되도록 허용되는, 상기 시퀀스 2 내지 시퀀스 5 에서 설명된 바와 같은 후보 리스트 내 고정된 위치에 삽입할 수도 있다. 다른 예에서, 비디오 코더는 특정의 기준들, 예컨대 모션 정보의 빈도 (즉, 모든 MV 후보들 중 모션 벡터의 발생들의 개수) 또는 현재의 픽처 및/또는 이전에-코딩된 픽처들로부터의 임의의 가용 모션 통계치들에 따라서, (NA-SMVP 및 다른 후보들을 포함하는) 리스트 내 모든 후보들을 재정렬할 수도 있다. 후보 리스트에서의 NA-SMVP들의 순서는 병합 및/또는 AMVP 모드와 같은 특정의 코딩 모드들에 대해 상이할 수 있으며, 개시된 후보 순서들에 반드시 한정되지 않는다. 예를 들어, 비디오 코더는 제 1 순서에 따라서 NA-SMVP 후보들을 병합 후보 리스트에 삽입할 수도 있으며 제 1 순서와는 상이한 제 2 순서에 따라서 NA-SMVP 후보들을 AMVP 후보 리스트에 삽입할 수도 있다.
일부 예들에서, 프루닝 프로세스는 블록 사이즈에 적응적이다. 일 예에서, 임계값이 프루닝되어야 하는 것을 정의하기 위해 사용될 수 있다. 예를 들어, 블록 사이즈가 크면 (즉, 미리 정의된 블록 사이즈보다 크면), 비디오 코더는 이에 따라서 임계값을 증가시킬 수도 있다. 모션 벡터들 (이전에 리스트에 추가된) MV0 및 MV1 을 갖는 2개의 후보들을 고려하면, 일 예에서, MV0 과 MV1 사이의 거리의 L1 또는 L2 놈이 임계값보다 작으면, 비디오 코더는 MV1 의 후보를 프루닝한다. 비디오 인코더 (20) 는 SPS, PPS, 슬라이스 헤더, 또는 다른 신택스 구조를 통해서 시그널링된 임계값을 시그널링할 수도 있다.
다른 예에서, 임계값은 현재의 블록 사이즈에 기초하여 적응적이다. 예를 들어, 이 예에서, 제 1 임계값은 미리 정의된 블록 사이즈 미만인 사이즈들을 갖는 블록들에 적용되며, 제 2, 상이한 임계값은 미리 정의된 블록 사이즈보다 큰 사이즈들을 갖는 블록들에 적용된다. 이 예에서, 미리 정의된 블록 사이즈 미만인 사이즈를 갖는 블록에 대한 후보 리스트를 발생시킬 때, 비디오 코더는, 리스트 내 후보의 모션 벡터와 다른 후보의 모션 벡터 사이의 거리의 L1 또는 L2 놈이 제 1 임계값 미만이면, 리스트로부터 후보를 프루닝할 수도 있다. 이 예에서, 미리 정의된 블록 사이즈보다 큰 사이즈를 갖는 블록에 대한 후보 리스트를 발생시킬 때, 비디오 코더는, 리스트 내 후보의 모션 벡터와 다른 후보의 모션 벡터 사이의 거리의 L1 또는 L2 놈이 제 2 임계값 미만이면, 리스트로부터 후보를 프루닝할 수도 있다.
다른 예시적인 프루닝 프로세스에서, 임계값은 후보의 공간 위치와 현재의 블록의 공간 위치 사이의 거리에 기초하여 적응적이다. 비디오 코더는 후보가 현재의 블록으로부터 더 멀리 로케이트되면, 더 큰 임계값을 이용할 수도 있다. 예를 들어, 현재의 블록에 대한 후보 리스트를 발생시킬 때, 비디오 코더는 특정의 비-인접 블록에 기초하여 제 1 NA-SMVP 를 결정할 수도 있다. 이 예에서, 비디오 코더는, 리스트 내 제 1 NA-SMVP 후보의 모션 벡터와 제 2 후보의 모션 벡터 사이의 L1 또는 L2 놈이 특정의 임계치 미만이면, 리스트로부터 제 1 NA-SMVP 후보를 프루닝할 수도 있다. 이 예에서, 특정의 임계치는 특정의 비-인접 블록과 현재의 블록 사이의 거리에 의존할 수도 있다.
일부 예들에서, 모션 벡터들의 분류는 K-평균 또는 서포트 벡터 머신을 포함하지만 이에 한정되지 않는 방법들을 이용하여 이루어질 수 있으며, 단지 Nc 클래스들의 각각으로부터의 제 1 Mc 후보들만이 후보 리스트에 유지되어야 하며, 여기서, Mc 및 클래스들 Nc 의 개수는 사전-정의되거나 또는 하이-레벨 신택스로 시그널링될 수 있다.
JEM 에서의 아핀 병합 모드와 같은, 단지 단일 MVP 만이 사용되는 방식들에서, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 또한 하나 이상의 비-인접한 SMVP들 (NA-SMVP) 을 다른 MVP들과 함께 후보 세트에 포함할 수도 있다. 그후 최종 MVP 가 사전-정의된 순서에 따라서 제 1 가용 MVP 로서 선택된다. 일 예에서, CU 가 아핀 병합 (AF_MERGE) 모드에 적용될 때, 방문 순서: A1 -> B1 -> B0 -> A0 -> B2 -> NA-블록들에 기초하여 유효한 이웃 복원된 블록들로부터 아핀 모드로 코딩된 제 1 블록을 얻는다. 따라서, 이 예에서, 블록들 A1, B1, B0, A0, 또는 B2 중 어느 것도 아핀 모드로 코딩되지 않으면, 비디오 코더는 CU 에 대한 MVP 가 아핀 모드에서 코딩되는 비-인접 블록들의 제 1 블록이라고 결정할 수도 있다.
위에서 간단히 설명한 바와 같이, FRUC 병합 모드에서의 모션 유도 프로세스는 2개의 단계들을 포함한다. 특히, CU-레벨 모션 탐색이 먼저 수행되고, 뒤이어서 서브-CU 레벨 모션 정제가 수행된다. CU 레벨에서, 비디오 코더는 쌍방 매칭 또는 템플릿 매칭에 기초하여 전체 CU 에 대해 초기 모션 벡터를 유도한다. 전체 CU 에 대해 초기 모션 벡터를 유도하기 위해, 비디오 코더는 MV 후보들의 리스트 (FRUC CU 레벨 MV 후보들 세트) 를 먼저 발생시킬 수도 있으며 비디오 코더는 최소 매칭 비용을 초래하는 후보를 추가적인 CU 레벨 정제를 위한 시작 지점으로서 선택한다. 그후, 비디오 코더는 시작 지점 주위의 쌍방 매칭 또는 템플릿 매칭에 기초하여 로컬 탐색을 수행한다. 비디오 코더는 그후 최소 매칭 비용을 초래하는 MV 를 전체 CU 에 대한 MV 로서 취한다. 이어서, 비디오 코더는 유도된 CU 모션 벡터들을 포함하는 FRUC 서브-CU 레벨 MV 후보들 세트로 서브-CU 레벨에서 모션 정보를 추가로 정제할 수도 있다.
본 개시물은 하나 이상의 NA-SMVP들을 FRUC CU 레벨 MV 후보들 세트, FRUC 서브-CU 레벨 MV 후보들 세트 또는 양자에 추가하는 것을 제안한다. 따라서, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 CU-레벨 FRUC 모션 벡터 후보들의 세트를 결정할 수도 있다. 본 개시물의 기법에 따르면, CU-레벨 FRUC 모션 벡터 후보들의 세트는 하나 이상의 NA-SMVP들을 포함할 수도 있다. 추가적으로, 비디오 코더는 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택할 수도 있다. 비디오 코더는 그후, 선택된 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정할 수도 있다. 비디오 코더는 또한 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 서브-CU 레벨에서 CU-레벨 모션 벡터를 정제할 수도 있다. 이 예에서, CU-레벨 FRUC 모션 벡터 후보들의 세트 및 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 비-인접 블록의 모션 벡터를 규정하는 NA-SMVP 를 포함할 수도 있다. NA-SMVP 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 결정될 수도 있다.
비-인접한 MVP들에 관련된 하이-레벨 신택스는 미리 결정되거나 또는 비트스트림들로 명시적으로 시그널링될 수 있다. 하이-레벨 신택스는 다음 제어 파라미터들을 포함하지만 이에 한정되지 않는다:
1. 인접한 블록들의 개수 N. 일부 예들에서, 개수는 코딩 정보 예컨대 블록 사이즈에 따라서 적응적이다. 일부 예들에서, 개수 N 은 코딩된 모드 (예컨대, 스킵/병합/AMVP) 또는 병합/AMVP/스킵 모드에 대한 후보들의 최대 허용된 개수에 의존한다.
2. 거리 s/t (존재하는 경우 신호 다중 파라미터들 s/t), 여기서 s 는 수평 변위이고, t 는 도 20 내지 도 23 에 나타낸 바와 같이 NA 블록들에 대한 수직 변위이다.
3. NA-블록들 결정에 대한 부모 블록의 사이즈.
4. 비-인접한 MVP들의 인에이블/디스에이블.
5. 도 20 내지 도 22 를 참조하여 위에서 설명된 바와 같은 NA-블록들을 로케이트하기 위한 레벨들의 개수.
HEVC 에서, 병합 후보 리스트 사이즈는 1 내지 5 의 범위이고, 반면 AMVP 후보 리스트 사이즈는 2 로 고정된다. JEM 에서, 병합 후보 리스트 사이즈는 1 내지 7 의 범위이고 반면 AMVP 후보 리스트 사이즈는 2 로 고정된다. NA-SMVP들이 MVP 또는 병합 후보들 리스트에 포함될 때, 최대 후보 리스트 사이즈가 이에 따라서 증가될 수도 있다. 예를 들어, 병합 후보 리스트 사이즈는, 하나 이상의 NA-SMVP들이 병합 후보 리스트 사이즈에 삽입될 때 N (여기서, N 은 양의 정수이고 N >7 임) 까지 증가될 수도 있다. 이 예에서, AMVP 후보 리스트 사이즈는, 하나 이상의 NA-SMVP들이 병합 후보 리스트 사이즈에 삽입될 때, M (M 은 양의 정수이고 M >2 임) 까지 증가될 수도 있다.
본 개시물은 또한 HEVC 에서 제공되는 후보들에 추가하여, 합성 MV 후보들을 이용하는 것을 제안한다. 추가적인 합성 MV 후보들의 이용은 또한 비-인접한 MVP들의 사용과 관련하여 본 개시물의 다른 어딘가에서 제공된 예들을 따를 수 있다. 즉, 합성 MV 후보들은 비-인접 블록들의 모션 파라미터들에 기초하여 발생될 수 있으며, 비-인접 블록들은 위에서 제공된 예들 중 임의의 예에 따라서 결정된다.
일부 예들에서, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 사전-정의된 순서, 예컨대 A1, B1, B0, A0, B2 (도 2 참조) 에 따라서 가용 양방향-예측 MV 후보들을 2개의 별개의 단방향-예측 후보들로 분할함으로써, 합성 단방향-예측 후보들을 발생시킨다. 비디오 코더는 그후, 생성된 합성 단방향-예측 후보들을 후보 리스트에 삽입할 수도 있다.
더욱이, 일부 예들에서, 정수 MVD (즉, 하나의 루마 샘플의 정밀도로 규정된 MVD) 또는 4개의 루마 샘플들 MVD (즉, 4개의 루마 샘플들의 정밀도로 규정된 MVD) 가 이용가능할 때, 비디오 코더는 가용 MV 후보들을 정수 MV 또는 4개의 루마 샘플들 MV 후보들로 라운딩하거나 또는 트렁케이트함으로써, 합성 정수 MV 후보들 (즉, 하나의 루마 샘플의 정밀도를 갖는 모션 벡터들을 가지는 MV 후보들) 또는 4개의 루마 샘플들 MV 후보들 (즉, 4개의 루마 샘플들의 정밀도를 갖는 모션 벡터들을 가지는 MV 후보들) 을 발생시킬 수도 있다. 비디오 코더는 그후, 발생된 합성 정수 MV 후보들 또는 4 루마 샘플들 MV 후보들을 후보 리스트에 삽입할 수도 있다.
본 개시물은 또한 다수의 TMVP 후보들을 병합 후보 리스트 또는 AMVP 후보 리스트에 포함시키는 방법들을 제안한다. 일 예에서, 하나의 병치된 픽처가 시그널링되는 HEVC 설계에 뒤이어서, 비디오 코더는 더 많은 시간 이웃하는 블록들을 이용하여, 더 많은 TMVP 후보들을 유도한다. 예를 들어, 단지 (도 2 에 도시된) H 및 C 블록들을 순서대로 체크하여 그들 중 하나를 선택하는 것에 추가하여, 비디오 코더는 더 많은 블록들 (예컨대, 현재의 블록의 공간 이웃하는 블록들의 병치된 블록들) 을 체크할 수도 있다. 일 예에서, 비디오 코더에 의해 체크되는 공간 이웃하는 블록들은 도 16 에 나타낸 바와 같이 A0, A1, B0, B1 및 B2 와 같은 단지 인접한 블록들만을 포함할 수도 있다. 따라서, 이 예에서, 비디오 코더는 (H 및 C 블록들을 포함하거나 또는 이들에 추가하여) 인접한 블록들의 최대 5개의 병치된 블록들을 고려한다. 다른 예에서, 비디오 코더는 또한 NA-블록들 (예컨대, 도 16 에서의 11 개의 NA-블록들 (NA1,1, NA1,2, NA1,3, NA1,4, NA1,5, NA1,6, NA1,7, NA1,8, NA1,9, NA1,10, NA1,11)) 의 병치된 블록들을 고려할 수도 있다.
일부 예들에서, 비디오 코더는 현재의 블록의 대향 측에 로케이트된 병치된 블록들을 고려한다. 예를 들어, 도 16 에서의 ((-4, -4) 위치에 로케이트된) NA-블록 NA1,6 에 대해, 비디오 코더는 대응하는 NA-col-블록 (즉, 비-인접 블록과 병치되고 참조 픽처인 블록) 을 (W + 3, H + 3) 에 로케이트된 블록으로서 선택할 수도 있으며, 여기서, W 및 H 는 모션 정보의 블록 사이즈의 기본 유닛들 (예컨대, 4x4) 에서의 현재의 블록의 폭 및 높이이다. 이는 현재의 블록의 저부 및 우측 위치들에 있는 NA-col-블록들의 세트를 생성한다. 일부 예들에서, 비디오 코더는 이 MV 후보들 (즉, NA-col-블록들로부터 정의된 MV 후보들) 의 세트를 인터리빙 방식으로 NA-SMVP 에 추가한다. 대안적으로, 일부 예들에서, 비디오 코더는 MV 후보들의 이 세트를 본 개시물의 다른 어딘가에서 설명된 기존 AMVP 또는 병합 유도 프로세스들에서와 같은 TMVP 후보들의 세트로서 삽입할 수도 있다.
일부 예들에서, 비디오 코더는 하나 보다 많은 병치된 픽처를 선택할 수도 있다. 다시 말해서, 비디오 코더는 TMVP 후보들을 유도하는 하나 보다 많은 참조 픽처를 선택할 수도 있다. 이러한 예들에서, 선택된 픽처들은 참조 픽처 리스트들에 포함되는 모든 참조 픽처들로서 정의될 수도 있거나 또는 선택된 픽처들은 시그널링될 수도 있다. 일 예에서, 각각의 선택된 참조 픽처에 대해, 비디오 코더는 HEVC 에서 사용되는 순서와 동일한 순서로 (즉, 우하측, 그후 중심) 선택된 참조 픽처 내 H 및 C 블록들을 체크할 수도 있다. 대안적으로, 일 예에서, 각각의 선택된 픽처에 대해, 비디오 코더는 더 많은 블록들 (예컨대, 현재의 블록의 공간적으로 인접한 및/또는 NA-블록들의 병치된 블록들) 을 체크한다.
더욱이, 비디오 코더가 다수의 TMVP 후보들을 유도할 때, 비디오 코더는 프루닝 프로세스를 적용하여, 그들 중에서 동일한 것들을 제거할 수도 있다. 대안적으로, 일부 예들에서, 비디오 코더는 제한된 프루닝 프로세스를 적용할 수도 있으며, 이는 TMVP 후보들 중 하나가 다른 것 대신, 단지 후보들의 특정의 개수와 비교될 수도 있다는 것을 의미한다. 일 예에서, 더욱이, 비디오 코더는 하나의 TMVP 후보와 다른 후보들 (예컨대, 공간 병합 후보들) 사이에 프루닝 프로세스를 추가로 적용할 수도 있다. 추가적인 TMVP들을 이용하는 제안된 기법들이 병합 및/또는 AMVP 모드와 같은 특정의 코딩 모드들에 적용될 수도 있다.
2012년 12월, IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, 번호 12, pp. 1649- 1668, G. J. Sullivan, J.-R. Ohm, W.-J. Han, 및 T. Wiegand, "Overview of the High Efficiency Video Coding (HEVC) Standard" 에 설명된 바와 같이, H.264/MPEG-4 AVC 와 비교하여 인트라 예측 방향들의 증가된 개수로 인해, HEVC 는 루마 인트라 예측 모드를 예측적으로 코딩할 때, H.264/MPEG-4 AVC 에서 고려되는 하나의 가장 가능성있는 모드가 아닌, 3개의 가장 가능성있는 모드들 (MPMs) 을 고려한다. MPM 은 공간적으로 인접한 블록들의 인트라 모드들로부터 유도된다. 현재의 루마 예측 모드가 3개의 MPM들 중 하나인 경우, 단지 MPM 인덱스만이 디코더로 송신된다. 그렇지 않으면, 3개의 MPM들을 제외한 현재의 루마 예측 모드의 인덱스가 5-비트 고정된 길이 코드를 이용함으로써 디코더로 송신된다. JEM 은 또한 동일한 인트라 모드 예측 방식들을 따른다. 그러나, JEM 은 3개보다 많은 MPM들을 포함할 수도 있다.
본 개시물은 더 나은 예측 효율을 달성하기 위해 비-인접 블록들의 인트라 모드들을 이용하여 하나 이상의 MPM들을 유도하는 기법들을 제안한다. 이전 섹션들에서의 설명되는 기법들이 MPM 유도들에 적용될 수 있다. 비-인접 블록들로부터 MPM들을 유도하는 예들이 아래에서 도 35 및 도 36 과 관련하여 제공된다.
도 24 는 본 개시물의 기법들을 구현할 수도 있는 예시적인 비디오 인코더 (20) 를 예시하는 블록도이다. 도 24 는 설명의 목적들을 위해 제공되며 본 개시물에서 넓게 예시되고 설명된 바와 같은 기법들의 한정으로 간주되지 않아야 한다. 본 개시물의 기법들은 다양한 코딩 표준들 또는 방법들에도 적용가능할 수도 있다.
프로세싱 회로부는 비디오 인코더 (20) 를 포함하며, 비디오 인코더 (20) 는 본 개시물에서 설명되는 예시적인 기법들 중 하나 이상을 수행하도록 구성된다. 예를 들어, 비디오 인코더 (20) 는 집적 회로를 포함하며, 도 24 에 예시된 다양한 유닛들은 회로 버스와 상호접속되는 하드웨어 회로 블록들로서 형성될 수도 있다. 이들 하드웨어 회로 블록들은 별개의 회로 블록들일 수도 있거나, 또는 유닛들의 2개 이상이 공통 하드웨어 회로 블록에 결합될 수도 있다. 하드웨어 회로 블록들은 동작 블록들, 예컨대 산술 로직 유닛들 (ALUs), 초등 함수 유닛들 (EFUs) 뿐만 아니라, AND, OR, NAND, NOR, XOR, XNOR 과 같은 로직 블록들, 및 다른 유사한 로직 블록들을 형성하는 전기적 컴포넌트들의 조합으로서 형성될 수도 있다.
일부 예들에서, 도 24 에 예시된 유닛들 중 하나 이상은 프로세싱 회로부 상에서 실행하는 소프트웨어 유닛들일 수도 있다. 이러한 예들에서, 이들 소프트웨어 유닛들에 대한 오브젝트 코드는 메모리에 저장된다. 운영 시스템은 비디오 인코더 (20) 로 하여금, 오브젝트 코드를 취출하고 오브젝트 코드를 실행하게 할 수도 있으며, 이는 비디오 인코더 (20) 로 하여금, 예시적인 기법들을 구현하는 동작들을 수행하게 할 수도 있다. 일부 예들에서, 소프트웨어 유닛들은 비디오 인코더 (20) 가 시동 시에 실행하는 펌웨어일 수도 있다. 따라서, 비디오 인코더 (20) 는 예시적인 기법들을 수행하는 하드웨어를 갖는 구조적 컴포넌트이거나, 또는 예시적인 기법들을 수행하도록 하드웨어를 특수화하기 위해 하드웨어 상에서 실행하는 소프트웨어/펌웨어를 갖는다.
도 24 의 예에서, 비디오 인코더 (20) 는 예측 프로세싱 유닛 (100), 비디오 데이터 메모리 (101), 잔차 발생 유닛 (102), 변환 프로세싱 유닛 (104), 양자화 유닛 (106), 역양자화 유닛 (108), 역변환 프로세싱 유닛 (110), 복원 유닛 (112), 필터 유닛 (114), 디코딩된 픽처 버퍼 (116), 및 엔트로피 인코딩 유닛 (118) 을 포함한다. 예측 프로세싱 유닛 (100) 은 인터-예측 프로세싱 유닛 (120) 및 인트라-예측 프로세싱 유닛 (126) 을 포함한다. 인터-예측 프로세싱 유닛 (120) 은 모션 추정 유닛 (122) 및 모션 보상 유닛 (미도시) 을 포함할 수도 있다.
비디오 데이터 메모리 (101) 는 비디오 인코더 (20) 의 컴포넌트들에 의해 인코딩될 비디오 데이터를 저장하도록 구성될 수도 있다. 비디오 데이터 메모리 (101) 에 저장된 비디오 데이터는 예를 들어, 비디오 소스 (18) 로부터 획득될 수도 있다. 디코딩된 픽처 버퍼 (116) 는 예컨대, 인트라- 또는 인터-코딩 모드들에서 비디오 인코더 (20) 에 의해 비디오 데이터를 인코딩할 때에 사용하기 위해 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (101) 및 디코딩된 픽처 버퍼 (116) 는 동기 DRAM (SDRAM) 을 포함한 동적 랜덤 액세스 메모리 (DRAM), 자기저항 RAM (MRAM), 저항 RAM (RRAM), 또는 다른 유형들의 메모리 디바이스들과 같은, 다양한 메모리 디바이스들 중 임의의 메모리 디바이스에 의해 형성될 수도 있다. 비디오 데이터 메모리 (101) 및 디코딩된 픽처 버퍼 (116) 는 동일한 메모리 디바이스 또는 별개의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (101) 는 비디오 인코더 (20) 의 다른 컴포넌트들과의 온칩, 또는 그들 컴포넌트들에 대한 오프-칩일 수도 있다. 비디오 데이터 메모리 (101) 는 도 1 의 저장 매체들 (19) 과 동일하거나 또는 그 일부일 수도 있다.
비디오 인코더 (20) 는 비디오 데이터를 수신한다. 비디오 인코더 (20) 는 비디오 데이터의 픽처의 슬라이스에서의 각각의 CTU 를 인코딩할 수도 있다. CTU들의 각각은 픽처의 동일-사이즈의 루마 코딩 트리 블록들 (CTBs) 및 대응하는 CTB들과 연관될 수도 있다. CTU 를 인코딩하는 것의 부분으로서, 예측 프로세싱 유닛 (100) 은 파티셔닝을 수행하여, CTU 의 CTB들을 점차적으로-더 작은 블록들로 분할할 수도 있다. 더 작은 블록들은 CU들의 코딩 블록들일 수도 있다. 예를 들어, 예측 프로세싱 유닛 (100) 은 트리 구조에 따라서 CTU 와 연관된 CTB 를 파티셔닝할 수도 있다.
비디오 인코더 (20) 는 CU들의 인코딩된 표현들 (즉, 코딩된 CU들) 을 발생시키기 위해 CTU 의 CU들을 인코딩할 수도 있다. CU 를 인코딩하는 것의 부분으로서, 예측 프로세싱 유닛 (100) 은 CU 의 하나 이상의 PU들 중에서 CU 와 연관되는 코딩 블록들을 파티셔닝할 수도 있다. 따라서, 각각의 PU 는 루마 예측 블록 및 대응하는 크로마 예측 블록들과 연관될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 다양한 사이즈들을 가지는 PU들을 지원할 수도 있다. 위에서 나타낸 바와 같이, CU 의 사이즈는 CU 의 루마 코딩 블록의 사이즈를 지칭할 수도 있으며, PU 의 사이즈는 루마 PU 의 예측 블록의 사이즈를 지칭할 수도 있다. 특정의 CU 의 사이즈가 2Nx2N 이라고 가정하면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 인트라 예측에 대해서는 2Nx2N 또는 NxN 의 PU 사이즈들을, 그리고 인터 예측에 대해서는 2Nx2N, 2NxN, Nx2N, NxN, 또는 등등의 대칭 PU 사이즈들을 지원할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 또한 인터 예측에 대해서 2NxnU, 2NxnD, nLx2N, 및 nRx2N 의 PU 사이즈들에 대한 비대칭적인 파티셔닝을 지원할 수도 있다.
인터-예측 프로세싱 유닛 (120) 은 PU 에 대한 예측 데이터를 발생시킬 수도 있다. PU 에 대한 예측 데이터를 발생시키는 것의 부분으로서, 인터-예측 프로세싱 유닛 (120) 은 PU 에 대해 인터 예측을 수행한다. PU 에 대한 예측 데이터는 PU 의 예측 블록들 및 PU 에 대한 모션 정보를 포함할 수도 있다. 인터-예측 프로세싱 유닛 (120) 은 PU 가 I 슬라이스, P 슬라이스, 또는 B 슬라이스 내에 있는지에 따라서, CU 의 PU 에 대해 상이한 동작들을 수행할 수도 있다. I 슬라이스에서, 모든 PU들은 인트라 예측된다. 그러므로, PU 가 I 슬라이스에 있으면, 인터-예측 프로세싱 유닛 (120) 은 PU 에 대해 인터 예측을 수행하지 않는다. 따라서, I-모드에서 인코딩되는 블록들에 대해, 예측된 블록은 동일한 프레임 내에서 이전에-인코딩된 이웃하는 블록들로부터 공간 예측을 이용하여 형성된다. PU 가 P 슬라이스 내에 있을 때, 인터-예측 프로세싱 유닛 (120) 은 PU 의 예측 블록을 발생시키기 위해 단방향 인터 예측을 이용할 수도 있다. PU 가 B 슬라이스 내에 있을 때, 인터-예측 프로세싱 유닛 (120) 은 PU 의 예측 블록을 발생시키기 위해 단방향 또는 양방향 인터 예측을 이용할 수도 있다.
인터-예측 프로세싱 유닛 (120) 은 본 개시물의 특정의 기법들을 수행할 수도 있다. 예를 들어, 인터-예측 프로세싱 유닛 (120) 은 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있으며, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 추가적으로, 인터-예측 프로세싱 유닛 (120) 은 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 추가적으로, 인터-예측 프로세싱 유닛 (120) 은 현재의 블록의 모션 벡터를 결정할 수도 있으며, 모션 벡터는 현재의 블록에 대한 MVP 의 모션 벡터와 동일하거나, 또는 현재의 블록에 대한 MVP 의 모션 벡터, 플러스 비트스트림으로 시그널링된 MVD 와 동일하다.
인트라-예측 프로세싱 유닛 (126) 은 PU 에 대해 인트라 예측을 수행함으로써, PU 에 대한 예측 데이터를 발생시킬 수도 있다. PU 에 대한 예측 데이터는 PU 의 예측 블록들 및 여러 신택스 엘리먼트들을 포함할 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 I 슬라이스들, P 슬라이스들, 및 B 슬라이스들에서의 PU들에 대해 인트라 예측을 수행할 수도 있다.
PU 상에 인트라 예측을 수행하기 위해, 인트라-예측 프로세싱 유닛 (126) 은 다수의 인트라 예측 모드들을 이용하여, PU 에 대한 다수의 예측 데이터의 세트들을 발생시킬 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 이웃하는 PU들의 샘플 블록들로부터의 샘플들을 이용하여, PU 에 대한 예측 블록을 발생시킬 수도 있다. 이웃하는 PU들은 PU들, CU들, 및 CTU들에 대해 좌-우, 상-하 인코딩 순서를 가정하면, PU 의 상측에, 우상부에, 좌상단에, 또는 좌측에 있을 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 다수의 인트라 예측 모드들, 예컨대, 33개의 방향 인트라 예측 모드들을 이용할 수도 있다. 일부 예들에서, 인트라 예측 모드들의 수는 PU 와 연관되는 영역의 사이즈에 의존할 수도 있다.
예측 프로세싱 유닛 (100) 은 PU들에 대해 인터-예측 프로세싱 유닛 (120) 에 의해 발생된 예측 데이터, 또는 PU들에 대해 인트라-예측 프로세싱 유닛 (126) 에 의해 발생된 예측 데이터 중에서, CU 의 PU들에 대한 예측 데이터를 선택할 수도 있다. 일부 예들에서, 예측 프로세싱 유닛 (100) 은 예측 데이터의 세트들의 레이트/왜곡 메트릭들에 기초하여, CU 의 PU들에 대한 예측 데이터를 선택한다. 선택된 예측 데이터의 예측 블록들은 본원에서 선택된 예측 블록들로서 지칭될 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 MPM들에 관련된 본 개시물의 기법들을 수행할 수도 있다.
잔차 발생 유닛 (102) 은 CU 에 대한 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 및 CU 의 PU들에 대한 선택된 예측 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 에 기초하여, CU 에 대한 잔차 블록들 (예컨대, 루마, Cb 및 Cr 잔차 블록들) 을 발생시킬 수도 있다. 예를 들어, 잔차 발생 유닛 (102) 은 잔차 블록들에서의 각각의 샘플이 CU 의 코딩 블록에서의 샘플과 CU 의 PU 의 대응하는 선택된 예측 블록에서의 대응하는 샘플 사이의 차이와 동일한 값을 갖도록, CU 의 잔차 블록들을 발생시킬 수도 있다.
변환 프로세싱 유닛 (104) 은 CU 의 잔차 블록들을 CU 의 TU들의 변환 블록들로 파티셔닝할 수도 있다. 예를 들어, 변환 프로세싱 유닛 (104) 은 쿼드-트리 파티셔닝을 수행하여, CU 의 잔차 블록들을 CU 의 TU들의 변환 블록들로 파티셔닝할 수도 있다. 따라서, TU 는 루마 변환 블록 및 2개의 크로마 변환 블록들과 연관될 수도 있다. CU 의 TU들의 루마 및 크로마 변환 블록들의 사이즈들 및 위치들은 CU 의 PU들의 예측 블록들의 사이즈들 및 위치들에 기초하거나 또는 기초하지 않을 수도 있다. "잔차 쿼드-트리" (RQT) 로서 알려진 쿼드-트리 구조는 그 영역들 각각과 연관되는 노드들을 포함할 수도 있다. CU 의 TU들은 RQT 의 리프 노드들에 대응할 수도 있다.
변환 프로세싱 유닛 (104) 은 하나 이상의 변환들을 TU 의 변환 블록들에 적용함으로써, CU 의 각각의 TU 에 대한 변환 계수 블록들을 발생시킬 수도 있다. 변환 프로세싱 유닛 (104) 은 다양한 변환들을 TU 와 연관되는 변환 블록에 적용할 수도 있다. 예를 들어, 변환 프로세싱 유닛 (104) 은 변환 블록에 이산 코사인 변환 (DCT), 방향성 변환, 또는 개념적으로 유사한 변환을 적용할 수도 있다. 일부 예들에서, 변환 프로세싱 유닛 (104) 은 변환 블록에 변환들을 적용하지 않는다. 이러한 예들에서, 변환 블록은 변환 계수 블록으로서 취급될 수도 있다.
양자화 유닛 (106) 은 계수 블록에서의 변환 계수들을 양자화할 수도 있다. 양자화 유닛 (106) 은 CU 와 연관되는 양자화 파라미터 (QP) 값에 기초하여, CU 의 TU 와 연관되는 계수 블록을 양자화할 수도 있다. 비디오 인코더 (20) 는 CU 와 연관되는 QP 값을 조정함으로써 CU 와 연관되는 계수 블록들에 적용되는 양자화의 정도를 조정할 수도 있다. 양자화는 정보의 손실을 도입할 수도 있다. 따라서, 양자화된 변환 계수들은 원래 정밀도보다 낮은 정밀도를 가질 수도 있다.
역양자화 유닛 (108) 및 역변환 프로세싱 유닛 (110) 은 역양자화 및 역변환들을 계수 블록에 각각 적용하여, 계수 블록으로부터 잔차 블록을 복원할 수도 있다. 복원 유닛 (112) 은 그 복원된 잔차 블록을 예측 프로세싱 유닛 (100) 에 의해 발생되는 하나 이상의 예측 블록들로부터의 대응하는 샘플들에 가산하여, TU 와 연관되는 복원된 변환 블록을 생성할 수도 있다. 이러한 방법으로 CU 의 각각의 TU 에 대한 변환 블록들을 복원함으로써, 비디오 인코더 (20) 는 CU 의 코딩 블록들을 복원할 수도 있다.
필터 유닛 (114) 은 CU 와 연관되는 코딩 블록들에서 블록킹 아티팩트들을 감소시키기 위해, 하나 이상의 디블록킹 동작들을 수행할 수도 있다. 디코딩된 픽처 버퍼 (116) 는 필터 유닛 (114) 이 복원된 코딩 블록들에 대해 하나 이상의 디블록킹 동작들을 수행한 후 그 복원된 코딩 블록들을 저장할 수도 있다. 인터-예측 프로세싱 유닛 (120) 은 그 복원된 코딩 블록들을 포함하는 참조 픽처를 이용하여, 다른 픽처들의 PU들에 대해 인터 예측을 수행할 수도 있다. 게다가, 인트라-예측 프로세싱 유닛 (126) 은 디코딩된 픽처 버퍼 (116) 에서의 복원된 코딩 블록들을 이용하여, CU 와 동일한 픽처에서의 다른 PU들에 대해 인트라 예측을 수행할 수도 있다.
엔트로피 인코딩 유닛 (118) 은 비디오 인코더 (20) 의 다른 기능적 컴포넌트들로부터 데이터를 수신할 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 양자화 유닛 (106) 으로부터 계수 블록들을 수신할 수도 있으며 예측 프로세싱 유닛 (100) 으로부터 신택스 엘리먼트들을 수신할 수도 있다. 엔트로피 인코딩 유닛 (118) 은 데이터에 대해 하나 이상의 엔트로피 인코딩 동작들을 수행하여, 엔트로피-인코딩된 데이터를 발생시킬 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 CABAC 동작, 컨텍스트-적응 가변 길이 코딩 (CAVLC) 동작, V2V (변수-대-변수) 길이 코딩 동작, 신택스-기반 컨텍스트-적응 2진 산술 코딩 (SBAC) 동작, 확률 간격 파티셔닝 엔트로피 (PIPE) 코딩 동작, 지수-Golomb 인코딩 동작, 또는 또다른 유형의 엔트로피 인코딩 동작을 데이터에 대해 수행할 수도 있다. 비디오 인코더 (20) 는 엔트로피 인코딩 유닛 (118) 에 의해 발생된 엔트로피-인코딩된 데이터를 포함하는 비트스트림을 출력할 수도 있다. 예를 들어, 비트스트림은 CU 에 대한 변환 계수들을 나타내는 데이터를 포함할 수도 있다.
도 25 는 본 개시물의 기법들을 구현하도록 구성된 예시적인 비디오 디코더 (30) 를 예시하는 블록도이다. 도 25 는 설명의 목적들을 위해 제공되며 본 개시물에 넓게 예시되고 설명된 것과 같은 기법들에 한정하는 것이 아니다. 설명의 목적을 위해, 본 개시물은 HEVC 코딩의 컨텍스트에서의 비디오 디코더 (30) 를 설명한다. 그러나, 본 개시물의 기법들은 다른 코딩 표준들 또는 방법들에도 적용가능할 수도 있다.
프로세싱 회로부는 비디오 디코더 (30) 를 포함하며, 비디오 디코더 (30) 는 본 개시물에서 설명되는 예시적인 기법들 중 하나 이상을 수행하도록 구성된다. 예를 들어, 비디오 디코더 (30) 는 집적 회로를 포함하며, 도 25 에 예시된 다양한 유닛들은 회로 버스와 상호접속된 하드웨어 회로 블록들로서 형성될 수도 있다. 이들 하드웨어 회로 블록들은 별개의 회로 블록들일 수도 있거나, 또는 유닛들의 2개 이상이 공통 하드웨어 회로 블록에 결합될 수도 있다. 하드웨어 회로 블록들은 동작 블록들, 예컨대 산술 로직 유닛들 (ALUs), 초등 함수 유닛들 (EFUs) 뿐만 아니라, AND, OR, NAND, NOR, XOR, XNOR 과 같은 로직 블록들, 및 다른 유사한 로직 블록들을 형성하는 전자 컴포넌트들의 조합으로서 형성될 수도 있다.
일부 예들에서, 도 25 에 예시된 유닛들 중 하나 이상은 프로세싱 회로부 상에서 실행하는 소프트웨어 유닛들일 수도 있다. 이러한 예들에서, 이들 소프트웨어 유닛들에 대한 오브젝트 코드는 메모리에 저장된다. 운영 시스템은 비디오 디코더 (30) 로 하여금, 오브젝트 코드를 취출하여 오브젝트 코드를 실행하게 할 수도 있으며, 이는 비디오 디코더 (30) 로 하여금 예시적인 기법들을 구현하는 동작들을 수행하게 할 수도 있다. 일부 예들에서, 소프트웨어 유닛들은 비디오 디코더 (30) 가 시동 시에 실행하는 펌웨어일 수도 있다. 따라서, 비디오 디코더 (30) 는 예시적인 기법들을 수행하는 하드웨어를 갖는 구조적 컴포넌트이거나, 또는 예시적인 기법들을 수행하도록 하드웨어를 특수화하기 위해 하드웨어 상에서 실행하는 소프트웨어/펌웨어를 갖는다.
도 25 의 예에서, 비디오 디코더 (30) 는 엔트로피 디코딩 유닛 (150), 비디오 데이터 메모리 (151), 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 복원 유닛 (158), 필터 유닛 (160), 및 디코딩된 픽처 버퍼 (162) 를 포함한다. 예측 프로세싱 유닛 (152) 은 모션 보상 유닛 (164) 및 인트라-예측 프로세싱 유닛 (166) 을 포함한다. 다른 예들에서, 비디오 디코더 (30) 는 더 많거나, 더 적거나, 또는 상이한 기능적 컴포넌트들을 포함할 수도 있다.
비디오 데이터 메모리 (151) 는 비디오 디코더 (30) 의 컴포넌트들에 의해 디코딩될, 인코딩된 비디오 비트스트림과 같은, 인코딩된 비디오 데이터를 저장할 수도 있다. 비디오 데이터 메모리 (151) 에 저장된 비디오 데이터는 예를 들어, 컴퓨터-판독가능 매체 (16) 로부터, 예컨대, 카메라와 같은 로컬 비디오 소스로부터, 비디오 데이터의 유선 또는 무선 네트워크 통신을 통해서, 또는 물리적인 데이터 저장 매체들에 액세스함으로써 획득될 수도 있다. 비디오 데이터 메모리 (151) 는 인코딩된 비디오 비트스트림으로부터 인코딩된 비디오 데이터를 저장하는 코딩된 픽처 버퍼 (CPB) 를 형성할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 예컨대, 인트라- 또는 인터-코딩 모드들에서 비디오 디코더 (30) 에 의해 비디오 데이터를 디코딩할 때에 사용하기 위해, 또는 출력을 위해, 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (151) 및 디코딩된 픽처 버퍼 (162) 는 동기 DRAM (SDRAM) 을 포함한 동적 랜덤 액세스 메모리 (DRAM), 자기저항 RAM (MRAM), 저항 RAM (RRAM), 또는 다른 유형들의 메모리 디바이스들과 같은, 다양한 메모리 디바이스들 중 임의의 메모리 디바이스에 의해 형성될 수도 있다. 비디오 데이터 메모리 (151) 및 디코딩된 픽처 버퍼 (162) 는 동일한 메모리 디바이스 또는 별개의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (151) 는 비디오 디코더 (30) 의 다른 컴포넌트들과의 온칩, 또는 그들 컴포넌트들에 대한 오프-칩일 수도 있다. 비디오 데이터 메모리 (151) 는 도 1 의 저장 매체들 (28) 과 동일하거나 또는 그 일부일 수도 있다.
비디오 데이터 메모리 (151) 는 비트스트림의 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 을 수신하여 저장한다. 엔트로피 디코딩 유닛 (150) 은 비디오 데이터 메모리 (151) 로부터 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 를 수신할 수도 있으며, NAL 유닛들을 파싱하여, 신택스 엘리먼트들을 획득할 수도 있다. 엔트로피 디코딩 유닛 (150) 은 NAL 유닛들에서의 엔트로피-인코딩된 신택스 엘리먼트들을 엔트로피 디코딩할 수도 있다. 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 복원 유닛 (158), 및 필터 유닛 (160) 은 비트스트림으로부터 추출된 신택스 엘리먼트들에 기초하여, 디코딩된 비디오 데이터를 발생시킬 수도 있다. 엔트로피 디코딩 유닛 (150) 은 엔트로피 인코딩 유닛 (118) 의 프로세스와는 일반적으로 반대인 프로세스를 수행할 수도 있다.
비트스트림으로부터 신택스 엘리먼트들을 획득하는 것에 더해서, 비디오 디코더 (30) 는 비파티셔닝된 CU 에 대해 복원 동작을 수행할 수도 있다. CU 에 대해 복원 동작을 수행하기 위해, 비디오 디코더 (30) 는 CU 의 각각의 TU 에 대해 복원 동작을 수행할 수도 있다. CU 의 각각의 TU 에 대해 복원 동작을 수행함으로써, 비디오 디코더 (30) 는 CU 의 잔차 블록들을 복원할 수도 있다.
CU 의 TU 에 대해 복원 동작을 수행하는 것의 부분으로서, 역양자화 유닛 (154) 은 TU 와 연관되는 계수 블록들을 역양자화할 수도 있다, 즉, 양자화 해제할 수도 있다. 역양자화 유닛 (154) 이 계수 블록을 역양자화한 후, 역변환 프로세싱 유닛 (156) 은 TU 와 연관되는 잔차 블록을 발생하기 위해, 하나 이상의 역변환들을 계수 블록에 적용할 수도 있다. 예를 들어, 역변환 프로세싱 유닛 (156) 은 역 DCT, 역 정수 변환, 역 Karhunen-Loeve 변환 (KLT), 역 회전 변환, 역 방향 변환, 또는 또 다른 역변환을 계수 블록에 적용할 수도 있다.
PU 가 인트라 예측을 이용하여 인코딩되면, 인트라-예측 프로세싱 유닛 (166) 은 인트라 예측을 수행하여, PU 의 예측 블록들을 발생시킬 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 인트라 예측 모드를 이용하여, 샘플들 공간적으로-이웃하는 블록들에 기초하여 PU 의 예측 블록들을 발생시킬 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 비트스트림으로부터 획득된 하나 이상의 신택스 엘리먼트들에 기초하여, PU 에 대한 인트라 예측 모드를 결정할 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 MPM들에 관련된 본 개시물의 기법들을 수행할 수도 있다.
PU 가 인터 예측을 이용하여 인코딩되면, 엔트로피 디코딩 유닛 (150) 및/또는 모션 보상 유닛 (164) 은 PU 에 대한 모션 정보를 결정할 수도 있다. 모션 보상 유닛 (164) 은 PU 의 모션 정보에 기초하여, 하나 이상의 참조 블록들을 결정할 수도 있다. 모션 보상 유닛 (164) 은 하나 이상의 참조 블록들에 기초하여, PU 에 대한 예측 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 을 발생시킬 수도 있다.
본 개시물의 기법에 따르면, 모션 보상 유닛 (164) 은 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있으며, 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 추가적으로, 모션 보상 유닛 (164) 은 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 MVP 를 결정할 수도 있다. 모션 보상 유닛 (164) 은 또한 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정할 수도 있다.
복원 유닛 (158) 은 적용가능한 경우, CU 의 TU들에 대한 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 및 CU 의 PU들의 예측 블록들 (예컨대, 루마, Cb 및 Cr 블록들), 즉, 인트라-예측 데이터 또는 인터-예측 데이터를 이용하여, CU 에 대한 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 을 복원할 수도 있다. 예를 들어, 복원 유닛 (158) 은 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 의 샘플들을 예측 블록들 (예컨대, 루마, Cb 및 Cr 예측 블록들) 의 대응하는 샘플들에 추가하여, CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 을 복원할 수도 있다.
필터 유닛 (160) 은 CU 의 코딩 블록들과 연관되는 블록킹 아티팩트들을 감소시키기 위해 디블록킹 동작을 수행할 수도 있다. 비디오 디코더 (30) 는 CU 의 코딩 블록들을 디코딩된 픽처 버퍼 (162) 에 저장할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 후속 모션 보상, 인트라 예측, 및 도 1 의 디스플레이 디바이스 (32) 와 같은 디스플레이 디바이스 상에의 프리젠테이션을 위해, 참조 픽처들을 제공할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 디코딩된 픽처 버퍼 (162) 에서의 블록들에 기초하여, 다른 CU들의 PU들에 대해 인트라 예측 또는 인터 예측 동작들을 수행할 수도 있다.
본 개시물의 어떤 양태들은 예시의 목적을 위해 HEVC 표준의 확장판들에 대해서 설명되었다. 그러나, 본 개시물에서 설명하는 기법들은 아직 개발되지 않은 다른 표준 또는 독점 비디오 코딩 프로세스들을 포함한, 다른 비디오 코딩 프로세스들에 유용할 수도 있다.
비디오 코더는, 본 개시물에서 설명하는 바와 같이, 비디오 인코더 또는 비디오 디코더를 지칭할 수도 있다. 이와 유사하게, 비디오 코딩 유닛은 비디오 인코더 또는 비디오 디코더를 지칭할 수도 있다. 이와 유사하게, 비디오 코딩은 적용가능한 경우, 비디오 인코딩 또는 비디오 디코딩을 지칭할 수도 있다. 본 개시물에서, 어구 "기초하는" 은 단독으로 기초하여, 적어도 부분적으로 기초하여, 또는 일부 방법으로 기초하여를 표시할 수도 있다. 본 개시물은 하나 이상의 샘플 블록들 및 하나 이상의 샘플들의 블록들의 샘플들을 코딩하는데 사용되는 신택스 구조들을 지칭하기 위해, 용어 "비디오 유닛" 또는 "비디오 블록" 또는 "블록" 을 이용할 수도 있다. 비디오 유닛들의 예시적인 유형들은 CTU들, CU들, PU들, 변환 유닛들 (TUs), 매크로블록들, 매크로블록 파티션들 등을 포함할 수도 있다. 일부 컨텍스트들에서, PU들의 설명은 매크로블록들 또는 매크로블록 파티션들의 설명과 상호교환될 수도 있다. 비디오 블록들의 예시적인 유형들은 비디오 데이터의 코딩 트리 블록들, 코딩 블록들, 및 다른 유형들의 블록들을 포함할 수도 있다.
도 26 은 본 개시물의 하나 이상의 기법들에 따른, 비디오 데이터를 인코딩하는 비디오 인코더의 예시적인 동작을 예시하는 플로우차트이다. 도 26 의 예에서, 비디오 인코더 (20) 는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다 (2600). 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다.
더욱이, 비디오 인코더 (20) 는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (2602). 일부 예들에서, 현재의 블록에 대한 MVP 는 아핀 모드에 있다. 다시 말해서, 모션 벡터들은 MVP 에서의 제어 지점들에 대해 규정된다. 일부 예들에서, 비-인접 블록은 현재의 블록의 위치에 대해 비-인접 블록들의 고정된 패턴을 정의하는 템플릿에서의 블록이다.
일 예에서, 현재의 블록에 대한 MVP 를 결정하는 것의 부분으로서, 비디오 인코더 (20) 는 비-인접 블록의 모션 벡터에 부분적으로 기초하여, MVP 후보들의 리스트를 발생시킬 수도 있다. 이 예에서, MVP 후보들의 리스트는 비-인접 블록의 모션 벡터를 규정하는 MVP 후보를 포함한다. 더욱이, 이 예에서, 비디오 인코더 (20) 는 MVP 후보들의 리스트 내 MVP 후보들 중에서, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 RD 비용 분석을 이용하여 현재의 블록에 대한 MVP 를 결정할 수도 있다.
일부 예들에서, 비디오 인코더 (20) 는 MVP 후보들의 리스트에서 복수의 NA-SMVP 후보들을 순서화한다. 이러한 예들에서, 복수의 NA-SMVP 후보들의 각각의 개별 NA-SMVP 후보에 대해, 개별 NA-SMVP 후보는 복수의 비-인접 블록들의 개별 비-인접 블록에 대응하며, 개별 NA-SMVP 는 개별 비-인접 블록의 모션 벡터를 규정한다. 복수의 비-인접 블록들은 제 1 비-인접 블록을 포함한다. 더욱이, 이 예에서, 비디오 인코더 (20) 는 현재의 블록으로부터의 대응하는 비-인접 블록들의 거리에 따라서 리스트 내 복수의 NA-SMVP 후보들을 순서화할 수도 있다. 거리는 L1 또는 L2 의미일 수도 있다.
일부 예들에서, 비디오 인코더 (20) 는 제 1 복수의 NA-SMVP 후보들을 결정한다. 제 1 복수의 NA-SMVP 후보들의 각각의 개별 NA-SMVP 후보에 대해, 개별 NA-SMVP 후보는 복수의 비-인접 블록들의 개별 비-인접 블록에 대응한다. 개별 NA-SMVP 는 개별 비-인접 블록의 모션 벡터를 규정한다. 제 1 복수의 비-인접 블록들은 제 1 비-인접 블록을 포함한다. 이 예에서, 비디오 인코더 (20) 는 제 2 복수의 NA-SMVP 후보들을 리스트에 포함시킬 수도 있으며, 제 2 복수의 NA-SMVP 후보들은 제 1 복수의 NA-SMVP 후보들에서의 비-중복 NA-SMVP 후보들을 포함한다. 이러한 방법으로, 비디오 인코더 (20) 는 리스트로부터 중복 NA-SMVP 후보들을 제거하는 프루닝 프로세스를 수행할 수도 있다. 제 2 복수의 NA-SMVP 후보들은 제 2 복수의 NA-SMVP 후보들 내 NA-SMVP 후보들에 의해 규정되는 모션 벡터들이 제 1 복수의 NA-SMVP 후보들 중 NA-SMVP 후보들에 의해 규정되는 빈도에 따라서 리스트에서 순서화될 수도 있다.
일부 예들에서, MVP 후보들의 리스트는 글로벌 모션 벡터 후보 리스트이다. 글로벌 모션 벡터 후보 리스트는 현재의 픽처에 있고 현재의 블록 이전에 인코딩되는 각각의 블록에 대한 모션 벡터를 규정하는 MVP 후보들을 포함한다. 이러한 예들에서, 비디오 코더는 글로벌 모션 벡터 후보 리스트에서의 MVP 후보로부터 비-인접 블록의 모션 벡터를 결정할 수도 있다.
더욱이, 일부 예들에서, 비디오 인코더 (20) 는 복수의 비-인접한 MVP 후보들을 FIFO 버퍼에 저장한다. 복수의 비-인접한 MVP 후보들은 비-인접 블록의 모션 벡터를 규정하는 비-인접한 MVP 후보를 포함한다. 이러한 예들에서, 비디오 인코더 (20) 는 FIFO 버퍼를 업데이트하여, 먼저-추가된 비-인접한 MVP 후보를 FIFO 버퍼로부터 제거하고 MVP 후보를 FIFO 버퍼에 추가한다.
일부 예들에서, 비디오 인코더 (20) 는 프루닝 프로세스를 리스트에 적용한다. 프루닝 프로세스는 현재의 블록의 블록 사이즈에 적응적이다. 예를 들어, 풀 모션 프루닝 프로세스 또는 부분 모션 프루닝 프로세스는 본 개시물의 다른 어딘가에서 설명된 바와 같이 적용될 수도 있다.
비디오 인코더 (20) 는 또한 현재의 블록의 모션 벡터를 결정할 수도 있다 (2604). 병합 모드가 사용되는 경와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP 의 모션 벡터와 동일하다. AMVP 가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP, 플러스 비트스트림으로 시그널링되는 MVD 의 모션 벡터와 동일하다.
추가적으로, 비디오 인코더 (20) 는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (2606). 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다 (2608). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, 예측 블록을 결정하고 잔차 샘플 값들을 발생시킬 수도 있다.
도 27 은 본 개시물의 하나 이상의 기법들에 따른, 비디오 데이터를 디코딩하는 비디오 디코더 (30) 의 예시적인 동작을 예시하는 플로우차트이다. 도 27 의 예에서, 비디오 디코더 (30) 는 비디오 데이터의 현재의 픽처의 비-인접 블록의 모션 벡터를 결정할 수도 있다 (2700). 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 일부 예들에서, 비-인접 블록은 현재의 블록의 위치에 대한 블록들의 고정된 패턴을 정의하는 템플릿에서의 블록이다.
일부 예들에서, MVP 후보들의 리스트는 글로벌 모션 벡터 후보 리스트이다. 글로벌 모션 벡터 후보 리스트는 현재의 픽처에 있고 현재의 블록 이전에 인코딩되는 각각의 블록에 대한 모션 벡터를 규정하는 MVP 후보들을 포함한다. 이러한 예들에서, 비디오 코더는 글로벌 모션 벡터 후보 리스트에서의 MVP 후보로부터 비-인접 블록의 모션 벡터를 결정할 수도 있다.
더욱이, 일부 예들에서, 비디오 디코더 (30) 는 복수의 비-인접한 MVP 후보들을 FIFO 버퍼에 저장한다. 복수의 비-인접한 MVP 후보들은 비-인접 블록의 모션 벡터를 규정하는 비-인접한 MVP 후보를 포함한다. 이러한 예들에서, 비디오 인코더 (20) 는 FIFO 버퍼를 업데이트하여, 먼저-추가된 비-인접한 MVP 후보를 FIFO 버퍼로부터 제거하고 MVP 후보를 FIFO 버퍼에 추가한다.
더욱이, 비디오 디코더 (30) 는 비-인접 블록의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (2702). 일부 예들에서, 현재의 블록에 대한 MVP 는 모션 보상된 예측의 아핀 모드, 비-아핀 모드, 또는 다른 모드에 있을 수도 있다. 일 예에서, 현재의 블록에 대한 MVP 를 결정하는 것의 부분으로서, 비디오 디코더 (30) 는 비-인접 블록의 모션 벡터에 부분적으로 기초하여, MVP 후보들의 리스트를 발생시킬 수도 있다. 이 예에서, MVP 후보들의 리스트는 비-인접 블록의 모션 벡터를 규정하는 MVP 후보를 포함한다. 더욱이, 이 예에서, 비디오 디코더 (30) 는 MVP 후보들의 리스트 내 MVP 후보들 중에서, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 레이트-왜곡 분석을 이용하여, MVP 후보들의 리스트에서 최상의 MVP 를 식별할 수도 있다.
일부 예들에서, 비-인접 블록은 제 1 비-인접 블록이며, 비디오 디코더 (30) 는 리스트에서 복수의 NA-SMVP 후보들을 순서화한다. 다시 말해서, 비디오 디코더 (30) 는 복수의 NA-SMVP 후보들을 리스트에 특정의 순서에 따라서 삽입한다. 이러한 예들에서, 복수의 NA-SMVP 후보들의 각각의 개별 NA-SMVP 후보에 대해, 개별 NA-SMVP 후보는 복수의 비-인접 블록들의 개별 비-인접 블록에 대응한다. 개별 NA-SMVP 는 개별 비-인접 블록의 모션 벡터를 규정한다. 일부 예들에서, 비디오 디코더 (30) 는 현재의 블록으로부터의 대응하는 비-인접 블록들의 거리에 따라서 (예컨대, L1 또는 L2 로) 리스트에서 복수의 NA-SMVP 후보들을 순서화한다. 일부 예들에서, 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 복수의 NA-SMVP 후보들을 순서화한다.
일부 예들에서, 비-인접 블록은 제 1 비-인접 블록이며, 비디오 디코더 (30) 는 제 1 복수의 NA-SMVP 후보들을 추가로 결정한다. 예를 들어, 이러한 예들에서, 제 1 복수의 NA-SMVP 후보들의 각각의 개별 NA-SMVP 후보에 대해, 개별 NA-SMVP 후보는 복수의 비-인접 블록들의 개별 비-인접 블록에 대응한다. 개별 NA-SMVP 는 개별 비-인접 블록의 모션 벡터를 규정한다. 제 1 복수의 비-인접 블록들은 제 1 비-인접 블록을 포함한다. 더욱이, 이러한 예들에서, 비디오 디코더 (30) 는 리스트에서 제 2 복수의 NA-SMVP 후보들을 순서화할 수도 있다. 다시 말해서, 비디오 디코더 (30) 는 제 2 복수의 NA-SMVP 후보들을 리스트에 특정의 순서에 따라서 포함시킬 수도 있다. 제 2 복수의 NA-SMVP 후보들은 제 1 복수의 NA-SMVP 후보들에서의 비-중복 NA-SMVP 후보들을 포함한다. 일부 예들에서, 제 2 복수의 NA-SMVP 후보들은 제 2 복수의 NA-SMVP 후보들에서의 NA-SMVP 후보에 의해 규정되는 모션 벡터들이 제 1 복수의 NA-SMVP 후보들에서의 NA-SMVP 후보들에 의해 규정되는 빈도에 따라서 리스트에서 순서화된다.
일부 예들에서, 비디오 디코더 (30) 는 프루닝 프로세스를 리스트에 적용할 수도 있다. 이러한 일부 예들에서, 프루닝 프로세스는 현재의 블록의 블록 사이즈에 적응적이다. 일부 예들에서, 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 설명된 바와 같이, 풀 모션 프루닝 프로세스를 NA-SMVP들 및 다른 병합 후보들에 적용한다. 일부 예들에서, 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 설명된 바와 같이, 단지 부분 모션 프루닝 프로세스만을 NA-SMVP들 및 다른 병합 후보들에 적용한다.
추가적으로, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정할 수도 있다 (2704). 일부 예들에서, MVP 후보들의 리스트가 병합 후보 리스트이면, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 가 MVP 후보들의 리스트 내 MVP 후보의 모션 벡터를 규정하도록 현재의 블록에 대한 MVP 를 결정할 수도 있다. 일부 예들에서, MVP 후보들의 리스트가 AMVP 후보 리스트이면, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 의 모션 벡터가 MVP 후보들의 리스트 내 MVP 후보의 모션 벡터 플러스 MVD 와 동일하도록 현재의 블록에 대한 MVP 를 결정할 수도 있다.
비디오 디코더 (30) 는 또한 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (2706). 예를 들어, 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 자세하게 설명된 바와 같이, 모션 벡터에 의해 표시되는 로케이션에서의 참조 픽처의 샘플들에 기초하여 예측 블록을 결정할 수도 있다. 비디오 디코더 (30) 는 그후 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다 (2708). 예를 들어, 비디오 디코더 (30) 는 예측 블록에서의 샘플들 값들을 잔차 샘플 값들에 가산함으로써 현재의 픽처의 샘플 값들을 복원할 수도 있다.
도 28 은 본 개시물의 기법에 따른, FRUC 모션 벡터 후보들을 이용하여 NA-SMVP 를 결정하는 예시적인 동작을 예시하는 플로우차트이다. 도 28 의 예에서, 비디오 코더 (예컨대, 비디오 인코더 (20) 또는 비디오 디코더 (30)) 는 CU-레벨 프레임-레이트 업 변환 (FRUC) 모션 벡터 후보들의 세트를 결정할 수도 있다 (2800). 추가적으로, 비디오 코더는 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택할 수도 있다 (2802). 비디오 코더는 선택된 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정할 수도 있다 (2804). 더욱이, 비디오 코더는 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 서브-CU 레벨에서 CU-레벨 모션 벡터를 정제할 수도 있다 (2806). 본 개시물의 기법에 따르면, CU-레벨 FRUC 모션 벡터 후보들의 세트 및 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 도 26 및 도 27 의 비-인접 블록의 모션 벡터를 규정하는 NA-SMVP 를 포함한다. FRUC 프로세스는 그렇지 않으면, 본 개시물의 다른 어딘가에서 제공된 예들과 일치할 수도 있다.
도 29 는 본 개시물의 하나 이상의 기법들에 따른, 현재의 블록에 대한 MVP 후보들의 리스트에 합성 후보들을 포함시키는 비디오 인코더 (20) 의 예시적인 동작을 예시하는 플로우차트이다. 도 29 의 예에서, 비디오 인코더 (20) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정할 수도 있다 (2900). MVP 후보들의 리스트는 양방향-예측 MVP 후보 및 합성 단방향-예측 MVP 후보를 포함한다. 더욱이, 도 29 의 예에서 그리고 본 개시물의 기법에 따르면, 비디오 인코더 (20) 는 MVP 후보들의 리스트를 결정하는 것의 부분으로서, 양방향-예측 MVP 후보에 의해 규정된 모션 벡터에 기초하여, 합성 단방향-예측 MVP 후보를 발생시킨다 (2902). 일 예에서, 비디오 인코더 (20) 는 사전-정의된 순서에 따라서 가용 양방향-예측 MV 후보들을 2개의 별개의 단방향-예측 후보들로 분할함으로써 합성 단방향-예측 후보들을 발생시킨다. 이 예에서, 비디오 인코더 (20) 는 그후, 생성된 합성 단방향-예측 후보들을 후보 리스트에 삽입될 수도 있다. 일부 예들에서, 정수 MVD 또는 4개의 루마 샘플들 MVD 가 이용가능할 때, 비디오 인코더 (20) 는 가용 MV 후보들을 정수 MV 또는 4개의 루마 샘플들 MV 후보들로 라운딩하거나 또는 트렁케이트함으로써 합성 정수 또는 4개의 루마 샘플들 MV 후보들을 발생시킬 수도 있다. 이러한 예들에서, 비디오 인코더 (20) 는 합성 정수 MV 후보들 또는 4 루마 샘플들 MV 후보들을 후보 리스트에 삽입한다.
더욱이, 도 29 의 예에서, 비디오 인코더 (20) 는 MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (2904). 추가적으로, 비디오 인코더 (20) 는 현재의 블록의 모션 벡터를 결정할 수도 있다 (2906). 병합 모드가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP 의 모션 벡터와 동일하다. AMVP 가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP, 플러스 비트스트림으로 시그널링되는 MVD 의 모션 벡터와 동일하다.
비디오 인코더 (20) 는 또한 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (2908). 더욱이, 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다 (2910). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, 예측 블록을 결정하고 잔차 샘플 값들을 발생시킬 수도 있다.
도 30 은 본 개시물의 하나 이상의 기법들에 따른, 현재의 블록에 대한 MVP 후보들의 리스트에 합성 후보들을 포함시키는 비디오 디코더 (30) 의 예시적인 동작을 예시하는 플로우차트이다. 도 30 의 예에서, 비디오 디코더 (30) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정할 수도 있다 (3000). MVP 후보들의 리스트는 양방향-예측 MVP 후보 및 합성 단방향-예측 MVP 후보를 포함한다. 더욱이, 도 30 의 예에서 그리고 본 개시물의 기법에 따르면, 비디오 디코더 (30) 는 MVP 후보들의 리스트를 결정하는 것의 부분으로서, 양방향-예측 MVP 후보에 의해 규정된 모션 벡터에 기초하여, 합성 단방향-예측 MVP 후보를 발생시킨다 (3002). 일 예에서, 비디오 디코더 (30) 는 사전-정의된 순서에 따라서 가용 양방향-예측 MV 후보들을 2개의 별개의 단방향-예측 후보들로 분할함으로써 합성 단방향-예측 후보들을 발생시킨다. 이 예에서, 비디오 디코더 (30) 는 그후, 생성된 합성 단방향-예측 후보들을 후보 리스트에 삽입될 수도 있다. 일부 예들에서, 정수 MVD 또는 4개의 루마 샘플들 MVD 가 이용가능할 때, 비디오 디코더 (30) 는 가용 MV 후보들을 정수 MV 또는 4개의 루마 샘플들 MV 후보들로 라운딩하거나 또는 트렁케이트함으로써, 합성 정수 또는 4개의 루마 샘플들 MV 후보들을 발생시킨다. 이러한 예들에서, 비디오 디코더 (30) 는 합성 정수 MV 후보들 또는 4 루마 샘플들 MV 후보들을 후보 리스트에 삽입한다.
도 30 의 예에서, 비디오 디코더 (30) 는 그후, MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (3004). 추가적으로, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정한다 (3006). 비디오 디코더 (30) 는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (3008). 더욱이, 비디오 디코더 (30) 는 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다 (3010). 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, MVP 후보을 선택하고, 모션 벡터를 결정하고, 예측 블록을 결정하고, 그리고 현재의 픽처의 수치 값들을 복원할 수도 있다.
도 31 은 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더 (20) 의 예시적인 동작을 예시하는 플로우차트이다. 도 31 의 예에서, 비디오 인코더 (20) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정한다 (3100). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 MVP 후보들의 리스트를 결정할 수도 있다. 추가적으로, 본 개시물의 기법에 따르면, 비디오 인코더 (20) 는 리스트 내 MVP 후보를 정수 해상도 또는 4 루마 샘플 해상도로 라운딩하거나 또는 트렁케이트함으로써, 합성 MVP 후보를 결정한다 (3102). 비디오 인코더 (20) 는 그후, 합성 MVP 후보를 MVP 후보의 리스트에 삽입할 수도 있다 (3104).
비디오 인코더 (20) 는 그후, MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 모션 벡터 예측자 (MVP) 를 결정할 수도 있다 (3106). 예를 들어, 비디오 인코더 (20) 는 레이트-왜곡 테스트를 이용하여, 현재의 블록에 대한 MVP 를 선택할 수도 있다. 더욱이, 비디오 인코더 (20) 는 현재의 블록의 모션 벡터를 결정할 수도 있다 (3108). 병합 모드가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP 의 모션 벡터와 동일하다. AMVP 가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP, 플러스 비트스트림으로 시그널링되는 MVD 의 모션 벡터와 동일하다.
비디오 인코더 (20) 는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (3110). 다음으로, 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다 (3112). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, 예측 블록을 결정하고 잔차 샘플 값들을 발생시킬 수도 있다.
도 32 는 본 개시물의 기법에 따른, 비디오 데이터를 디코딩하는 비디오 디코더 (30) 의 예시적인 동작을 예시하는 플로우차트이다. 도 32 의 예에서, 비디오 디코더 (30) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정한다 (3200). 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 MVP 후보들의 리스트를 결정할 수도 있다. 추가적으로, 본 개시물의 기법에 따르면, 비디오 디코더 (30) 는 리스트 내 MVP 후보를 정수 해상도 또는 4 루마 샘플 해상도로 라운딩하거나 또는 트렁케이트함으로써, 합성 MVP 후보를 결정할 수도 있다 (3202). 비디오 디코더 (30) 는 그후, 합성 MVP 후보를 MVP 후보들의 리스트에 삽입할 수도 있다 (3204).
그후, 비디오 디코더 (30) 는 MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (3206). 추가적으로, 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정할 수도 있다 (3208). 비디오 디코더 (30) 는 또한 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (3210). 더욱이, 비디오 디코더 (30) 는 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다 (3212). 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, MVP 후보을 선택하고, 모션 벡터를 결정하고, 예측 블록을 결정하고, 그리고 현재의 픽처의 수치 값들을 복원할 수도 있다.
도 33 은 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더 (20) 의 예시적인 동작을 예시하는 플로우차트이다. 도 33 의 예에서, 비디오 인코더 (20) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정할 수도 있다 (3300). 일반적으로, 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 MVP 후보들의 리스트를 결정할 수도 있다. 그러나, 본 개시물의 기법에 따르면, MVP 후보들의 리스트는 복수의 TMVP 후보들을 포함한다. MVP 후보들의 리스트에서의 각각의 개별 MVP 후보는 개별 모션 벡터를 규정한다. 복수의 TMVP 후보들의 개별 TMVP 후보들은 하나 이상의 참조 픽처들 (예컨대, 단일 참조 픽처, 복수의 참조 픽처들, 등) 에서의 하나 이상의 블록들의 모션 벡터들을 규정한다.
일부 예들에서, 복수의 TMVP 후보들은 현재의 픽처 내 로케이션들 (예컨대, 현재의 블록에 인접한 로케이션들, 현재의 블록에 인접하지 않은 로케이션들) 과 병치된 참조 블록들의 모션 벡터들을 규정하는 2개 이상의 TMVP 후보를 포함한다. 이러한 예들에서, 참조 블록들은 하나 이상의 참조 픽처들의 블록들이다.
일부 예들에서, 비디오 인코더 (20) 는 프루닝 프로세스를 MVP 후보들의 리스트에 적용한다. 예를 들어, 비디오 인코더 (20) 는 프루닝 프로세스를 MVP 후보들의 리스트에 적용하여, MVP 후보들의 리스트에서 모든 또는 일부 동일한 MVP 후보들을 제거할 수도 있다.
더욱이, 도 33 의 예에서, 비디오 인코더 (20) 는 MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (3302). 예를 들어, 비디오 인코더 (20) 는 레이트-왜곡 테스트를 이용하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다. 비디오 인코더 (20) 는 또한 현재의 블록의 모션 벡터를 결정할 수도 있다 (3304). 병합 모드가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP 의 모션 벡터와 동일하다. AMVP 가 사용되는 경우와 같은 일부 예들에서, 현재의 블록의 모션 벡터는 MVP, 플러스 비트스트림으로 시그널링되는 MVD 의 모션 벡터와 동일하다.
더욱이, 비디오 인코더 (20) 는 현재의 블록의 모션 벡터을 이용하여 예측 블록을 결정할 수도 있다 (3306). 추가적으로, 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다 (3308). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, 예측 블록을 결정하고 잔차 샘플 값들을 발생시킬 수도 있다.
도 34 는 본 개시물의 하나 이상의 예들에 따른, 비디오 데이터를 디코딩하는 비디오 디코더 (30) 의 예시적인 동작을 예시하는 플로우차트이다. 도 34 의 예에서, 비디오 디코더 (30) 는 비디오 데이터의 현재의 픽처의 현재의 블록에 대한 MVP 후보들의 리스트를 결정할 수도 있다 (3400). 일반적으로, 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 MVP 후보들의 리스트를 결정할 수도 있다. 그러나, 본 개시물의 기법에 따르면, MVP 후보들의 리스트는 복수의 TMVP 후보들을 포함한다. MVP 후보들의 리스트에서의 각각의 개별 MVP 후보는 개별 모션 벡터를 규정한다. 복수의 TMVP 후보들의 개별 TMVP 후보들은 하나 이상의 참조 픽처들 (예컨대, 단일 참조 픽처, 복수의 참조 픽처들, 등) 에서의 하나 이상의 블록들의 모션 벡터를 규정한다.
일 예에서, 복수의 TMVP 후보들은 현재의 픽처 내 로케이션들과 병치된 참조 블록들의 모션 벡터들을 규정하는 2개 이상의 TMVP 후보들을 포함한다. 이 예에서, 참조 블록들은 하나 이상의 참조 픽처들 (예컨대, 단일 참조 픽처, 복수의 참조 픽처들, 등) 의 블록들이다. 이 예의 일부 경우들에서, 로케이션들은 현재의 블록에 인접한다. 이 예의 일부 경우들에서, 로케이션들은 현재의 블록에 인접하지 않는다.
일부 예들에서, 비디오 디코더 (30) 는 프루닝 프로세스를 MVP 후보들의 리스트에 적용할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 프루닝 프로세스를 MVP 후보들의 리스트에 적용하여, MVP 후보들의 리스트에서 모든 또는 일부 동일한 MVP 후보들을 제거할 수도 있다.
더욱이, 도 34 의 예에서, 비디오 디코더 (30) 는 MVP 후보들의 리스트에서의 선택된 MVP 후보의 모션 벡터에 기초하여, 현재의 블록에 대한 MVP 를 결정할 수도 있다 (3402). 비디오 디코더 (30) 는 현재의 블록에 대한 MVP 에 기초하여, 현재의 블록의 모션 벡터를 결정할 수도 있다 (3404). 추가적으로, 비디오 디코더 (30) 는 현재의 블록의 모션 벡터에 기초하여 예측 블록을 결정할 수도 있다 (3406). 비디오 디코더 (30) 는 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다 (3408). 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, MVP 후보을 선택하고, 모션 벡터를 결정하고, 예측 블록을 결정하고, 그리고 현재의 픽처의 수치 값들을 복원할 수도 있다.
도 35 는 본 개시물의 기법에 따른, 비디오 데이터를 인코딩하는 비디오 인코더 (20) 의 예시적인 동작을 예시하는 플로우차트이다. 도 35 의 예에서, 비디오 인코더 (20) 는 복수의 가장 가능성있는 모드들 (MPMs) 을 결정할 수도 있다 (3500). 복수의 MPM들의 각각의 개별 MPM 은 개개의 블록의 개별 인트라 예측 모드를 규정한다. 도 35 의 예에서, 복수의 MPM들은 비디오 데이터의 현재의 픽처의 비-인접 블록의 인트라 예측 모드를 규정하는 특정의 MPM 을 포함한다. 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 일부 예들에서, 비-인접 블록은 현재의 블록의 위치에 대한 비-인접 블록들의 고정된 패턴을 정의하는 템플릿에서의 블록이다. 다른 예들에서, 비-인접 블록들은 현재의 블록의 특정의 거리 내에 있는 블록들이다. 비-인접 블록은 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 결정될 수도 있다.
일부 예들에서, 복수의 MPM들을 결정하는 것의 부분으로서, 비디오 인코더 (20) 는 MPM들의 순서화된 리스트를 결정할 수도 있다. 이러한 예들에서, 비-인접 블록들에 기초한 MPM들은 인트라 예측 모드들이 복수의 비-인접 블록들에서의 비-인접 블록들에 의해 규정되는 빈도에 따라서 리스트에서 순서화된다. 다른 예들에서, 비-인접 블록들에 기초한 MPM들은 이러한 빈도에 따라서 리스트에서 순서화되지 않는다.
일부 예들에서, 복수의 MPM들을 결정하기 위해, 비디오 인코더 (20) 는 현재의 픽처에 있고 현재의 블록 이전에 인코딩되는 각각의 블록에 대한 모션 정보를 규정하는 MPM들을 포함하는 글로벌 MPM 리스트를 결정할 수도 있다. 이러한 예들에서, 비디오 인코더 (20) 는 글로벌 모션 벡터 후보 리스트에서의 MPM들로부터 MPM 을 결정할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 복수의 비-인접한 MPM들을 FIFO 버퍼에 저장할 수도 있다. 이러한 예들에서, 복수의 비-인접한 MPM들은 비-인접 블록의 인트라 예측 모드를 규정하는 비-인접한 MPM 을 포함한다. 더욱이, 이러한 예들에서, 비디오 인코더 (20) 는 FIFO 버퍼를 업데이트하여, 먼저-추가된 비-인접한 MPM 을 FIFO 버퍼로부터 제거할 수도 있으며, MPM 을 FIFO 버퍼에 추가할 수도 있다. 복수의 MPM들은 FIFO 버퍼 내 MPM들을 포함할 수도 있다.
더욱이, 도 35 의 예에서, 비디오 인코더 (20) 는 복수의 MPM들의 MPM 에 의해 규정된 인트라 예측 모드에 기초하여, 예측 블록을 발생시킬 수도 있다 (3502). 추가적으로, 비디오 인코더 (20) 는 예측 블록에 기초하여, 잔차 샘플 값들을 발생시킬 수도 있다 (3504). 비디오 인코더 (20) 는 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서, 예측 블록을 결정하고 잔차 샘플 값들을 발생시킬 수도 있다.
도 36 은 본 개시물의 기법에 따른, 비디오 데이터를 디코딩하는 비디오 디코더 (30) 의 예시적인 동작을 예시하는 플로우차트이다. 도 36 의 예에서, 비디오 디코더 (30) 는 복수의 MPM들 (3600) 을 포함할 수도 있다. 복수의 MPM들의 각각의 개별 MPM 은 개개의 블록의 개별 인트라 예측 모드를 규정한다. 본 개시물의 기법에 따르면, 복수의 MPM들은 비디오 데이터의 현재의 픽처의 비-인접 블록의 인트라 예측 모드를 규정하는 특정의 MPM 을 포함한다. 비-인접 블록은 현재의 픽처의 현재의 블록에 비-인접한다. 일부 예들에서, 비-인접 블록은 현재의 블록의 위치에 대한 비-인접 블록들의 고정된 패턴을 정의하는 템플릿에서의 블록이다. 다른 예들에서, 비-인접 블록은 현재의 블록로부터의 고정된 거리이다. 비-인접 블록은 본 개시물의 다른 어딘가에서 제공되는 예들 중 임의의 예에 따라서 결정될 수도 있다.
일부 예들에서, 복수의 MPM들을 결정하는 것의 부분으로서, 비디오 디코더 (30) 는 MPM들의 순서화된 리스트를 결정할 수도 있다. 이러한 예들에서, 비-인접 블록들에 기초한 MPM들은 인트라 예측 모드들이 복수의 비-인접 블록들에서의 비-인접 블록들에 의해 규정되는 빈도에 따라서 리스트에서 순서화된다. 다른 예들에서, 비-인접 블록들에 기초한 MPM들은 이러한 빈도에 따라서 리스트에서 순서화되지 않는다.
일부 예들에서, 복수의 MPM들은 현재의 픽처에 있고 현재의 블록 이전에 인코딩되는 각각의 블록에 대한 모션 정보를 규정하는 MPM들을 포함하는 글로벌 MPM 리스트이다. 이러한 예들에서, 비디오 디코더 (30) 는 글로벌 모션 벡터 후보 리스트에서의 MPM들로부터 MPM 을 결정할 수도 있다. 일부 예들에서, 비디오 디코더 (30) 는 복수의 비-인접한 MPM들을 선입선출 (FIFO) 버퍼에 저장할 수도 있다. 이러한 예들에서, 복수의 비-인접한 MPM들은 비-인접 블록의 인트라 예측 모드를 규정하는 비-인접한 MPM 을 포함한다. 더욱이, 이러한 예들에서, 비디오 디코더 (30) 는 FIFO 버퍼를 업데이트하여, 먼저-추가된 비-인접한 MPM 을 FIFO 버퍼로부터 제거할 수도 있으며, MPM 을 FIFO 버퍼에 추가할 수도 있다. 복수의 MPM들은 FIFO 버퍼 내 MPM들을 포함할 수도 있다.
더욱이, 도 36 의 예에서, 비디오 디코더 (30) 는 복수의 MPM들의 MPM 에 의해 규정된 인트라 예측 모드에 기초하여, 예측 블록을 발생시킬 수도 있다 (3602). 추가적으로, 비디오 디코더 (30) 는 예측 블록에 기초하여, 현재의 픽처의 샘플 값들을 복원할 수도 있다 (3604). 비디오 디코더 (30) 는 본 개시물의 다른 어딘가에서 제공되는 기법들 중 임의의 기법에 따라서, 예측 블록을 발생시키고 샘플 값들을 복원할 수도 있다.
본 개시물의 기법들은 오버-디-에어 텔레비전 브로드캐스트들, 케이블 텔레비전 송신들, 위성 텔레비전 송신들, 인터넷 스트리밍 비디오 송신들, 예컨대 HTTP 를 통한 동적 적응 스트리밍 (DASH), 데이터 저장 매체 상에 인코딩된 디지털 비디오, 데이터 저장 매체 상에 저장된 디지털 비디오의 디코딩, 또는 다른 애플리케이션들과 같은, 다양한 멀티미디어 애플리케이션들 중 임의의 애플리케이션의 지원 하에 비디오 코딩에 적용될 수도 있다.
본 개시물에서, "제 1", "제 2", "제 3", 등과 같은, 서수의 용어들은 반드시 순서 내 위치들의 표시자들일 필요는 없으며, 단순히 동일한 사물의 상이한 인스턴스들을 구별하기 위해 사용될 수도 있다.
그 예에 따라서, 본원에서 설명되는 기법들 중 임의의 기법의 어떤 행위들 또는 이벤트들이 상이한 시퀀스로 수행될 수 있으며, 추가되거나, 병합되거나, 또는 모두 제외시킬 수도 있는 (예컨대, 모든 설명되는 행위들 또는 이벤트들이 기법들의 실시에 필수적인 것은 아닌) 것으로 인식되어야 한다. 더욱이, 어떤 예들에서, 행위들 또는 이벤트들은 순차적으로 보다는, 동시에, 예컨대, 멀티-쓰레드된 프로세싱, 인터럽트 프로세싱, 또는 다수의 프로세서들을 통해서 수행될 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 그 기능들은 하나 이상의 명령들 또는 코드로서, 컴퓨터-판독가능 매체 상에 저장되거나 또는 컴퓨터-판독가능 매체를 통해서 송신될 수도 있으며, 하드웨어-기반의 프로세싱 유닛에 의해 실행될 수도 있다. 컴퓨터-판독가능 매체는 예를 들어, 통신 프로토콜에 따라서 일 장소로부터 다른 장소로의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들, 또는 데이터 저장 매체들과 같은 유형의 매체에 대응하는 컴퓨터-판독가능 저장 매체들을 포함할 수도 있다. 이런 방법으로, 컴퓨터-판독가능 매체들은 일반적으로 (1) 비일시성 유형의 컴퓨터-판독가능 저장 매체, 또는 (2) 신호 또는 캐리어 파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체는 본 개시물에서 설명하는 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세싱 회로들에 의해 액세스될 수 있는 임의의 가용 매체들일 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 매체를 포함할 수도 있다.
일 예로서, 이에 한정하지 않고, 이런 컴퓨터-판독가능 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광디스크 스토리지, 자기디스크 스토리지, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 캐시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속이 컴퓨터-판독가능 매체로 적절히 지칭된다. 예를 들어, 동축 케이블, 광섬유 케이블, 연선, 디지털 가입자 회선 (DSL), 또는 무선 기술들, 예컨대 적외선, 라디오, 및 마이크로파를 이용하여 명령들이 웹사이트, 서버, 또는 다른 원격 소스로부터 송신되는 경우, 동축 케이블, 광섬유 케이블, 연선, DSL, 또는 무선 기술들 예컨대 적외선, 라디오, 및 마이크로파가 그 매체의 정의에 포함된다. 그러나, 컴퓨터-판독가능 저장 매체 및 데이터 저장 매체는 접속부들, 반송파들, 신호들, 또는 다른 일시성 매체를 포함하지 않고, 그 대신, 비-일시성 유형의 저장 매체로 송신되는 것으로 해석되어야 한다. 디스크 (disk) 및 디스크 (disc) 는, 본원에서 사용할 때, 컴팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루-레이 디스크를 포함하며, 디스크들 (disks) 은 데이터를 자기적으로 보통 재생하지만, 디스크들 (discs) 은 레이저로 데이터를 광학적으로 재생한다. 앞에서 언급한 것들의 결합들이 또한 컴퓨터-판독가능 매체들의 범위 내에 포함되어야 한다.
본 개시물에서 설명되는 기능성은 고정 기능 및/또는 프로그래밍가능 프로세싱 회로부에 의해 수행될 수도 있다. 예를 들어, 명령들은 고정 기능 및/또는 프로그래밍가능 프로세싱 회로부에 의해 실행될 수도 있다. 이러한 프로세싱 회로부는 하나 이상의 디지털 신호 프로세서들 (DSPs), 범용 마이크로프로세서들, 주문형 집적회로들 (ASICs), 필드 프로그래밍가능 로직 어레이들 (FPGAs), 또는 다른 등가의 집적 또는 이산 로직 회로와 같은, 하나 이상의 프로세서들을 포함할 수도 있다. 따라서, 용어 "프로세서" 는, 본원에서 사용될 때 전술한 구조 중 임의의 구조 또는 본원에서 설명하는 기법들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 게다가, 일부 양태들에서, 본원에서 설명하는 기능은 전용 하드웨어 및/또는 인코딩 및 디코딩을 위해 구성되는 소프트웨어 모듈들 내에 제공되거나, 또는 결합된 코덱에 포함될 수도 있다. 또한, 이 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들로 전적으로 구현될 수 있다. 프로세싱 회로들은 다른 컴포넌트들에 다양한 방법들로 커플링될 수도 있다. 예를 들어, 프로세싱 회로는 내부 디바이스 상호접속, 유선 또는 무선 네트워크 접속, 또는 다른 통신 매체를 통해서 다른 컴포넌트들에 커플링될 수도 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (예컨대, 칩 세트) 를 포함한, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 개시한 기법들을 수행하도록 구성되는 디바이스들의 기능적 양태들을 강조하기 위해서 다양한 컴포넌트들, 모듈들, 또는 유닛들이 본 개시물에서 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 필요로 하지는 않는다. 대신, 위에서 설명한 바와 같이, 다양한 유닛들이 코덱 하드웨어 유닛에 결합되거나 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명한 바와 같은 하나 이상의 프로세서들을 포함한, 상호작용하는 하드웨어 유닛들의 컬렉션으로 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 예들은 다음 청구항들의 범위 이내이다.

Claims (66)

  1. 디코딩하는 방법으로서,
    비디오 디코더에 의해, 선입선출 (FIFO) 모션 벡터 예측자 (MVP) 후보 리스트 버퍼를 발생시키는 단계로서, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 단계는,
    상기 비디오 디코더에 의해, 현재의 픽처의 현재의 블록 전에 디코딩되는 상기 현재의 픽처의 블록의 모션 정보를 결정하는 단계로서, 상기 블록의 상기 모션 정보는 모션 벡터 및 참조 인덱스를 포함하는, 상기 모션 정보를 결정하는 단계; 및
    상기 비디오 디코더에 의해, 상기 FIFO MVP 후보 리스트 버퍼로부터 먼저-추가된 MVP 후보를 제거하고, 상기 블록의 상기 모션 정보를 MVP 후보로서 상기 FIFO MVP 후보 리스트 버퍼에 추가하기 위해, 상기 FIFO MVP 후보 리스트 버퍼를 업데이트하는 단계를 포함하는, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 단계;
    상기 비디오 디코더에 의해, 상기 FIFO MVP 후보 리스트 버퍼 내 MVP 후보들 중에서 상기 현재의 블록에 대한 MVP 를 결정하는 단계로서, 상기 FIFO MVP 후보 리스트 버퍼 내 상기 MVP 후보들은 상기 현재의 블록에 비-인접한 상기 현재의 픽처의 적어도 하나의 비-인접 블록의 모션 정보를 포함하는, 상기 현재의 블록에 대한 상기 MVP 를 결정하는 단계;
    상기 비디오 디코더에 의해, 상기 현재의 블록에 대한 상기 MVP 에 기초하여, 상기 현재의 블록의 모션 벡터를 결정하는 단계;
    상기 비디오 디코더에 의해, 상기 현재의 블록의 상기 모션 벡터에 기초하여 예측 블록을 결정하는 단계; 및
    상기 비디오 디코더에 의해, 상기 예측 블록에 기초하여, 상기 현재의 픽처의 상기 현재의 블록의 샘플 값들을 복원하는 단계를 포함하는, 디코딩하는 방법.
  2. 제 1 항에 있어서,
    상기 현재의 블록에 대한 상기 MVP 는 아핀 모드에 있는, 디코딩하는 방법.
  3. 제 1 항에 있어서,
    상기 현재의 블록의 상기 모션 벡터를 결정하는 단계는,
    상기 비디오 디코더에 의해, 상기 현재의 블록의 상기 모션 벡터가 상기 현재의 블록에 대한 상기 MVP 의 모션 벡터를 규정하도록, 또는 상기 현재의 블록의 상기 모션 벡터가 상기 현재의 블록에 대한 상기 MVP 의 모션 정보의 모션 벡터 플러스 모션 벡터 차이 (MVD) 와 동일하도록 상기 현재의 블록의 상기 모션 벡터를 결정하는 단계를 포함하는, 디코딩하는 방법.
  4. 제 1 항에 있어서,
    상기 비디오 디코더에 의해, 코딩 유닛 (CU)-레벨 프레임-레이트 업 변환 (FRUC) 모션 벡터 후보들의 세트를 결정하는 단계;
    상기 비디오 디코더에 의해, 상기 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택하는 단계;
    상기 비디오 디코더에 의해, 선택된 상기 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정하는 단계; 및
    상기 비디오 디코더에 의해, 상기 CU-레벨 모션 벡터를 서브-CU 레벨에서 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 정제하는 단계를 더 포함하며,
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트 및 상기 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 상기 비-인접 블록의 상기 모션 벡터를 규정하는 비-인접한 공간 모션 벡터 예측자 (NA-SMVP) 를 포함하는, 디코딩하는 방법.
  5. 인코딩하는 방법으로서,
    비디오 인코더에 의해, 선입선출 (FIFO) 모션 벡터 예측자 (MVP) 후보 리스트 버퍼를 발생시키는 단계로서, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 단계는,
    상기 비디오 인코더에 의해, 현재의 픽처의 현재의 블록 전에 인코딩되는 상기 현재의 픽처의 블록의 모션 정보를 결정하는 단계로서, 상기 블록의 상기 모션 정보는 모션 벡터 및 참조 인덱스를 포함하는, 상기 모션 정보를 결정하는 단계; 및
    상기 비디오 인코더에 의해, 상기 FIFO MVP 후보 리스트 버퍼로부터 먼저-추가된 MVP 후보를 제거하고, 상기 블록의 상기 모션 정보를 MVP 후보로서 상기 FIFO MVP 후보 리스트 버퍼에 추가하기 위해 상기 FIFO MVP 후보 리스트 버퍼를 업데이트하는 단계를 포함하는, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 단계;
    상기 비디오 인코더에 의해, 상기 FIFO MVP 후보 리스트 버퍼 내 MVP 후보들 중에서 상기 현재의 블록에 대한 MVP 를 결정하는 단계로서, 상기 FIFO MVP 후보 리스트 버퍼 내 상기 MVP 후보들은 상기 현재의 블록에 비-인접한 상기 현재의 픽처의 적어도 하나의 비-인접 블록을 포함하는, 상기 MVP 를 결정하는 단계;
    상기 비디오 인코더에 의해, 상기 현재의 블록에 대한 상기 MVP 에 기초하여, 상기 현재의 블록에 대한 모션 벡터를 결정하는 단계;
    상기 비디오 인코더에 의해, 상기 현재의 블록의 상기 모션 벡터에 기초하여 예측 블록을 결정하는 단계; 및
    상기 비디오 인코더에 의해, 상기 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키는 단계를 포함하는, 인코딩하는 방법.
  6. 제 5 항에 있어서,
    상기 현재의 블록에 대한 상기 MVP 는 아핀 모드에 있는, 인코딩하는 방법.
  7. 제 5 항에 있어서,
    상기 비디오 인코더에 의해, 코딩 유닛 (CU)-레벨 프레임-레이트 업 변환 (FRUC) 모션 벡터 후보들의 세트를 결정하는 단계;
    상기 비디오 인코더에 의해, 상기 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택하는 단계;
    상기 비디오 인코더에 의해, 선택된 상기 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정하는 단계; 및
    상기 비디오 인코더에 의해, 상기 CU-레벨 모션 벡터를 서브-CU 레벨에서 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 정제하는 단계를 더 포함하며,
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트 및 상기 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 상기 비-인접 블록의 상기 모션 벡터를 규정하는 비-인접한 공간 모션 벡터 예측자 (NA-SMVP) 를 포함하는, 인코딩하는 방법.
  8. 디코딩하는 장치로서,
    하나 이상의 저장 매체들; 및
    회로에서 실행되는 하나 이상의 프로세서들을 포함하며,
    상기 하나 이상의 프로세서들은,
    선입선출 (FIFO) 모션 벡터 예측자 (MVP) 후보 리스트 버퍼를 발생시키는 것으로서, 상기 하나 이상의 저장 매체들은 상기 FIFO MVP 후보 리스트 버퍼를 저장하고, 상기 하나 이상의 프로세서들은, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 것의 부분으로서,
    현재의 픽처의 현재의 블록 전에 디코딩되는 상기 현재의 픽처의 블록의 모션 정보를 결정하는 것으로서, 상기 블록의 상기 모션 정보는 모션 벡터 및 참조 인덱스를 포함하는, 상기 모션 정보를 결정하고; 그리고
    상기 FIFO MVP 후보 리스트 버퍼로부터 먼저-추가된 MVP 후보를 제거하고, 상기 블록의 상기 모션 정보를 MVP 후보로서 상기 FIFO MVP 후보 리스트 버퍼에 추가하기 위해 상기 FIFO MVP 후보 리스트 버퍼를 업데이트 하도록 구성되는, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키고,
    상기 FIFO MVP 후보 리스트 버퍼 내 MVP 후보들 중에서 상기 현재의 블록에 대한 MVP 를 결정하는 것으로서, 상기 FIFO MVP 후보 리스트 버퍼 내 상기 MVP 후보들은 상기 현재의 블록에 비-인접한 상기 현재의 픽처의 적어도 하나의 비-인접 블록의 모션 정보를 포함하는, 상기 MVP 를 결정하고,
    상기 현재의 블록에 대한 상기 MVP 에 기초하여, 상기 현재의 블록의 모션 벡터를 결정하고;
    상기 현재의 블록의 상기 모션 벡터에 기초하여 예측 블록을 결정하고; 그리고
    상기 예측 블록에 기초하여, 상기 현재의 픽처의 상기 현재의 블록의 샘플 값들을 복원하도록 구성되는, 디코딩하는 장치.
  9. 제 8 항에 있어서,
    상기 현재의 블록에 대한 상기 MVP 는 아핀 모드에 있는, 디코딩하는 장치.
  10. 제 8 항에 있어서,
    상기 하나 이상의 프로세서들은, 상기 현재의 블록의 상기 모션 벡터를 결정하는 것의 부분으로서,
    상기 하나 이상의 프로세서들이:
    상기 현재의 블록의 상기 모션 벡터가 상기 현재의 블록에 대한 상기 MVP 의 모션 벡터를 규정하도록, 또는 상기 상기 현재의 블록의 상기 모션 벡터가 상기 현재의 블록에 대한 상기 MVP 의 모션 정보의 모션 벡터 플러스 모션 벡터 차이 (MVD) 와 동일하도록 상기 현재의 블록의 상기 모션 벡터를 결정하도록, 구성되는, 디코딩하는 장치.
  11. 제 8 항에 있어서,
    상기 하나 이상의 프로세서들은,
    코딩 유닛 (CU)-레벨 프레임-레이트 업 변환 (FRUC) 모션 벡터 후보들의 세트를 결정하고;
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택하고;
    선택된 상기 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정하고; 그리고
    상기 CU-레벨 모션 벡터를 서브-CU 레벨에서 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 정제하도록 추가로 구성되며,
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트 및 상기 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 상기 비-인접 블록의 상기 모션 벡터를 규정하는 비-인접한 공간 모션 벡터 예측자 (NA-SMVP) 를 포함하는, 디코딩하는 장치.
  12. 인코딩하는 장치로서,
    하나 이상의 저장 매체들; 및
    회로에서 실행되는 하나 이상의 프로세서들을 포함하며,
    상기 하나 이상의 프로세서들은,
    선입선출 (FIFO) 모션 벡터 예측자 (MVP) 후보 리스트 버퍼를 발생시키는 것으로서, 상기 하나 이상의 저장 매체들은 상기 FIFO MVP 후보 리스트 버퍼를 저장하고, 상기 하나 이상의 프로세서들은, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키는 것의 부분으로서,
    현재의 픽처의 현재의 블록 전에 인코딩되는 상기 현재의 픽처의 블록의 모션 정보를 결정하는 것으로서, 상기 블록의 상기 모션 정보는 모션 벡터 및 참조 인덱스를 포함하는, 상기 모션 정보를 결정하고; 그리고
    상기 FIFO MVP 후보 리스트 버퍼로부터 먼저-추가된 MVP 후보를 제거하고, 상기 블록의 상기 모션 정보를 MVP 후보로서 상기 FIFO MVP 후보 리스트 버퍼에 추가하기 위해 상기 FIFO MVP 후보 리스트 버퍼를 업데이트하도록 구성되는, 상기 FIFO MVP 후보 리스트 버퍼를 발생시키고,
    상기 FIFO MVP 후보 리스트 버퍼 내 MVP 후보들 중에서 상기 현재의 블록에 대한 MVP 를 결정하는 것으로서, 상기 FIFO MVP 후보 리스트 버퍼 내 상기 MVP 후보들은 상기 현재의 블록에 비-인접한 상기 현재의 픽처의 적어도 하나의 비-인접 블록을 포함하는, 상기 MVP 를 결정하고,
    상기 현재의 블록에 대한 상기 MVP 에 기초하여, 상기 현재의 블록에 대한 모션 벡터를 결정하고;
    상기 현재의 블록의 상기 모션 벡터에 기초하여 예측 블록을 결정하고; 그리고
    상기 예측 블록에 기초하여, 잔차 샘플 값들을 발생시키도록 구성되는, 인코딩하는 장치.
  13. 제 12 항에 있어서,
    상기 현재의 블록에 대한 상기 MVP 는 아핀 모드에 있는, 인코딩하는 장치.
  14. 제 12 항에 있어서,
    상기 하나 이상의 프로세서들은,
    코딩 유닛 (CU)-레벨 프레임-레이트 업 변환 (FRUC) 모션 벡터 후보들의 세트를 결정하고;
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트로부터 CU-레벨 FRUC 모션 벡터 후보를 선택하고;
    선택된 상기 CU-레벨 FRUC 모션 벡터 후보로부터 시작하여 로컬 탐색을 수행함으로써 적어도 부분적으로 CU-레벨 모션 벡터를 결정하고; 그리고
    상기 CU-레벨 모션 벡터를 서브-CU 레벨에서 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트로 정제하도록 추가로 구성되며,
    상기 CU-레벨 FRUC 모션 벡터 후보들의 세트 및 상기 FRUC 서브-CU 레벨 모션 벡터 후보들의 세트 중 적어도 하나는 상기 비-인접 블록의 상기 모션 벡터를 규정하는 비-인접한 공간 모션 벡터 예측자 (NA-SMVP) 를 포함하는, 인코딩하는 장치.
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
  46. 삭제
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
  62. 삭제
  63. 삭제
  64. 삭제
  65. 삭제
  66. 삭제
KR1020197036549A 2017-06-13 2018-06-11 모션 벡터 예측 KR102669354B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762519007P 2017-06-13 2017-06-13
US62/519,007 2017-06-13
US16/003,269 2018-06-08
US16/003,269 US10602180B2 (en) 2017-06-13 2018-06-08 Motion vector prediction
PCT/US2018/036883 WO2018231700A1 (en) 2017-06-13 2018-06-11 Motion vector prediction

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020247016119A Division KR20240074911A (ko) 2017-06-13 2018-06-11 모션 벡터 예측

Publications (2)

Publication Number Publication Date
KR20200017406A KR20200017406A (ko) 2020-02-18
KR102669354B1 true KR102669354B1 (ko) 2024-05-24

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130343459A1 (en) * 2012-06-22 2013-12-26 Nokia Corporation Method and apparatus for video coding

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130343459A1 (en) * 2012-06-22 2013-12-26 Nokia Corporation Method and apparatus for video coding

Similar Documents

Publication Publication Date Title
US11689740B2 (en) Motion vector prediction
US10863193B2 (en) Buffer restriction during motion vector prediction for video coding
AU2017340631B2 (en) Motion vector prediction for affine motion models in video coding
KR20210025537A (ko) 하나 또는 다수의 룩업 테이블들을 사용하여 이전에 코딩된 모션 정보를 순서대로 저장하고 이를 사용하여 후속 블록들을 코딩하는 개념
WO2019140189A1 (en) Affine motion compensation with low bandwidth
WO2019147826A1 (en) Advanced motion vector prediction speedups for video coding
JP2019526988A (ja) 候補リストの構築のためのジオメトリベースの優先度
WO2018126163A1 (en) Motion vector generation for affine motion model for video coding
US11595683B2 (en) Priority-based non-adjacent merge design
CN110677650B (zh) 降低非相邻Merge设计的复杂度
KR102669354B1 (ko) 모션 벡터 예측
KR20240074911A (ko) 모션 벡터 예측
US20220038707A1 (en) Method and apparatus for processing video signals on basis of inter prediction