KR20220016840A - 비디오 코딩을 위한 움직임 후보 리스트 구성 - Google Patents

비디오 코딩을 위한 움직임 후보 리스트 구성 Download PDF

Info

Publication number
KR20220016840A
KR20220016840A KR1020217038897A KR20217038897A KR20220016840A KR 20220016840 A KR20220016840 A KR 20220016840A KR 1020217038897 A KR1020217038897 A KR 1020217038897A KR 20217038897 A KR20217038897 A KR 20217038897A KR 20220016840 A KR20220016840 A KR 20220016840A
Authority
KR
South Korea
Prior art keywords
block
current
coding
merge
motion
Prior art date
Application number
KR1020217038897A
Other languages
English (en)
Other versions
KR102662603B1 (ko
Inventor
리 장
카이 장
홍빈 리우
양 왕
유에 왕
Original Assignee
베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
바이트댄스 아이엔씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드, 바이트댄스 아이엔씨 filed Critical 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
Publication of KR20220016840A publication Critical patent/KR20220016840A/ko
Application granted granted Critical
Publication of KR102662603B1 publication Critical patent/KR102662603B1/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
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/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

비디오 프로세싱 방법은 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록의 특징에 연관된 조건에 기초하여 움직임 후보 리스트에 연관된 동작을 결정하는 단계를 포함한다. 움직임 후보 리스트는 코딩 기술을 위해 구성되거나 비디오의 이전에 프로세싱된 블록들의 정보에 기초하여 구성된다. 또한, 이 방법은 결정에 기초하여 변환을 수행하는 단계를 포함한다.

Description

비디오 코딩을 위한 움직임 후보 리스트 구성
관련 출원에 대한 상호 참조
파리 조약을 준수하는 적용가능한 특허법 및/또는 규칙에 따라서, 본 출원은 2019 년 6 월 6 일에 출원된 국제 특허 출원 번호 제 PCT/CN2019/090409, 2019년 6월 22일에 출원된 국제 특허 출원 번호 PCT/CN2019/092438, 2019년 9월 10일에 출원된 국제 특허 출원 번호 PCT/CN2019/105180에 대한 우선권 및 혜택을 시기적절하게 주장한다. 미국 법 하에 따른 모든 목적을 위하여, 앞서 언급된 출원들의 모든 개시내용은 본 출원의 개시 내용의 일부로서 본 명세서에서 원용에 의해 통합된다.
본 문서는 비디오 및 이미지 코딩 및 디코딩 기술에 연관된다.
디지털 비디오는 인터넷 및 다른 디지털 통신 네트워크에서 가장 넓은 대역폭을 사용한다. 비디오를 수신하고 디스플레이할 수 있는 접속된 사용자 디바이스의 개수가 증가함에 따라서, 디지털 비디오 사용을 위한 대역폭 수요는 계속하여 증가할 것으로 기대된다.
개시된 기술들은 서브블록 레벨에서 비디오 비트스트림 인트라 블록 복사 분할 기술의 코딩 혹은 디코딩을 수행하기 위해 비디오 혹은 이미지 디코더 혹은 인코더 실시예에 의해 사용될 수 있다.
일 예시적 국면에 있어서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록이 다수의 서브블록들로 분할된다고 결정하는 단계를 포함한다. 다수의 블록들 중 적어도 하나는 현재 블록의 현재 픽처의 하나 이상의 비디오 영역으로부터의 참조 샘플들을 사용하는 변경된 인트라 블록 복사(intra-block copy, IBC) 코딩 기술을 사용하여 코딩된다. 이 방법은, 또한 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에 있어서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 수행하기 위해, 현재 블록이 다수의 서브블록들로 분할된다고 결정하는 단계를 포함한다. 다수의 서브블록들 각각은 패턴에 따라 대응되는 코딩 기술을 이용하여 코딩된 표현으로 코딩된다. 이 방법은 또한 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에 있어서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록의 특징에 연관된 조건에 기초하여 움직임 후보 리스트와 연관된 동작을 결정하는 단계를 포함한다. 움직임 후보 리스트는 코딩 기술을 위해 혹은 비디오의 이전에 프로세싱된 블록들의 정보에 기초하여 구성된다. 이 방법은 또한 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에 있어서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해, 시간적 정보에 기초하여 인터 코딩 기술을 이용하여 코딩된 현재 블록이 다수의 서브블록들로 분할된다고 결정된다. 다수의 서브블록들 중 적어도 하나는 현재 블록을 포함하는 현재 픽처의 하나 이상의 비디오 영역으로부터의 참조 샘플들을 사용하는 변경된 인트라 블록 복사(IBC) 코딩 기술을 이용하여 코딩된다. 이 방법은 또한 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에 있어서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오 영역의 현재 비디오 블록과 현재 비디오 블록이 다수의 서브 블록들로 분할되는 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브블록 인트라 블록 복사(sub-block intra block copy, sbIBC) 코딩 모드를 사용하도록 결정하는 단계를 포함하되, 각각의 서브 블록은 비디오 영역으로부터의 참조 샘플들에 기초하여 코딩되되, 서브블록의 크기는 분할 규칙에 기초하며, 다수의 서브 블록들에 대한 sbIBC 코딩 모드를 이용하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오 영역의 현재 비디오 블록과 현재 비디오 블록이 다수의 서브블록들로 분할되는 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브블록 인트라 블록 복사(sbIBC) 코딩 모드를 이용하도록 결정하는 단계를 포함하고, 각 서브 블록은 비디오 영역으로부터의 참조 샘플들에 기초하여 코딩되며, 다수의 서브블록들에 대한 sbIBC 코딩 모드를 이용하여 변환을 수행하는 단계를 포함하되, 변환은 주어진 서브 블록들에 대해 초기화된 움직임 벡터(initMV)를 결정하는 단계, initMV에 의해 참조 블록을 식별하는 단계, 및 참조 블록에 대한 MV 정보를 이용하여 주어진 서브 블록에 대한 움직임 벡터(MV) 정보를 유도하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 비디오 영역의 현재 비디오 블록과 현재 비디오 블록이 다수의 서브 블록들로 분할되는 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브블록 인트라 블록 복사(sbIBC) 코딩 모드를 이용하도록 결정하는 단계를 포함하되, 각 서브 블록은 비디오 영역의 참조 샘플들에 기초하여 코딩되고, 다수의 서브블록들에 대해 sbIBC 코딩 모드를 이용하여 변환을 수행하는 단계를 포함하고, 변환은 서브블록 IBC 후보를 생성하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 서브블록 인트라 블록 코딩(sub-block intra block coding, sbIBC) 모드를 이용하여 다수의 서브블록들 중 제1 서브 블록을 프로세싱하고 인트라 코딩 모드를 이용하여 다수의 서브블록들 중 제2 서브 블록을 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할되는 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 인트라 코딩 모드를 이용하여 다수의 서브블록들 중 모든 서브 블록들을 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할되는 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 대표적인 픽셀 값에 대한 팔레트가 각 서브 블록의 코딩에 사용되는 팔레트 코딩 모드를 이용하여 다수의 서브블록들 모두를 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 다수의 서브블록들 중 제1 서브 블록을, 대표적인 픽셀 값에 대한 팔레트가 제1 서브블록의 코딩에 사용되는 팔레트 모드를 이용하여 프로세싱하고, 다수의 서브블록들 중 제2 서브 블록을 인트라 블록 복사 코딩 모드를 이용하여 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할되는 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 다수의 서브블록들 중 제1 서브 블록을, 대표적인 픽셀 값에 대한 팔레트가 제1 서브블록의 코딩에 사용되는 팔레트 모드를 이용하여 프로세싱하고, 다수의 서브블록들 중 제2 서브 블록을 인트라 코딩 모드를 이용하여 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할되는 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 다수의 서브 블록들 중 제1 서브 블록을 서브블록 인트라 블록 코딩(sub-block intra block coding, sbIBC)을 이용하여 프로세싱하고, 다수의 서브블록들 중 제2 서브 블록을 인터 코딩 모드를 이용하여 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할되는 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 변환은 다수의 서브블록들 중 제1 서브 블록을 서브블록 인트라 코딩 모드를 이용하여 프로세싱하고, 다수의 서브블록들 중 제2 서브 블록을 인터 코딩 모드를 이용하여 프로세싱하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 상기의 청구항들 중 어느 한 항에 개시된 임의의 방법을 이용하여 현재 비디오 블록을 비트스트림 표현으로 인코딩하기 위한 결정을 내리는 단계, 비트스트림 표현에 상기 결정을 지시하는 정보를 디코더 파라미터 세트 레벨 혹은 시퀀스 파라미터 세트 레벨 혹은 비디오 파라미터 세트 레벨 혹은 픽처 파라미터 세트 레벨 혹은 픽처 헤더 레벨 혹은 슬라이스 헤더 레벨 혹은 타일 그룹 헤더 레벨 혹은 최대 코딩 유닛 레벨 혹은 코딩 유닛 레벨 혹은 최대 코딩 유닛 행 레벨 혹은 LCU 그룹 레벨 혹은 변환 유닛 레벨 혹은 예측 유닛 레벨 혹은 비디오 코딩 유닛 레벨에서 포함하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 인코딩 조건에 기초하여 상기의 청구항들 중 어느 한 항에 개시된 임의의 방법을 이용하여 현재 비디오 블록을 비트스트림 표현으로 인코딩하기 위한 결정을 내리는 단계, 상기의 청구항들 중 어느 한 항에 개시된 임의의 방법을 이용하여 인코딩을 수행하는 단계를 포함하되, 조건은 코딩 유닛, 예측 유닛, 변환 유닛, 현재 비디오 블록 혹은 현재 비디오 블록의 비디오 코딩 유닛의 위치 중 하나 이상에 기초한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오 영역의 블록들과 비디오 영역의 비트스트림 표현 간의 변환을 위해 인트라 블록 복사 모드와 인터 예측 모드를 사용하도록 결정하는 단계, 및 비디오 영역의 블록을 위해 인트라 블록 복사 모드와 인터 예측 모드를 이용하여 변환을 수행하는 단계를 포함한다.
다른 예시적 국면에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 코딩 조건에 기초하여 의존적인 움직임 후보 리스트 구성 프로세스 및/혹은 히스토리 기반 움직임 벡터 예측자 테이블을 업데이트하기 위한 테이블 업데이트 프로세스에 움직임 후보 리스트 구성 프로세스를 수행하는 단계, 및 움직임 후보 리스트 구성 프로세스 및/혹은 테이블 업데이트 프로세스에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적인 국면에서, 상기에서 설명된 방법들은 프로세서를 포함하는 비디오 디코더 장치에 의해 수행될 수 있다.
다른 예시적인 국면에서, 상기에서 설명된 방법들은 프로세서를 포함하는 비디오 인코더 장치에 의해 수행될 수 있다.
또다른 예시적인 국면에서, 이러한 방법들은 프로세서 실행가능한 명령어들의 형태로 구현되거나 컴퓨터 판독 가능한 프로그램 매체에 저장될 수 있다.
이러한 국면들 및 다른 국면들은 본 문서에서 추가로 더 설명된다.
도 1은 머지 후보 리스트 구성의 유도 프로세스를 나타낸다.
도 2는 공간적 머지 후보의 예시적인 위치를 나타낸다.
도 3은 공간적 머지 후보의 중복성 점검을 위해 고려되는 예시적인 후보 쌍들을 나타낸다.
도 4는 Nx2N 및 2NxN 분할의 제2 PU에 대한 예시적인 위치를 나타낸다.
도 5는 시간적 머지 후보에 대한 움직임 벡터 스케일링의 예시적인 도시를 나타낸다.
도 6은 시간적 머지 후보, C0 및 C1에 대한 예시적인 후보 위치를 나타낸다.
도 7은 예시적인 결합 양 예측 머지 후보를 나타낸다.
도 8은 움직임 벡터 예측 후보에 대한 예시적인 유도 프로세스를 나타낸다.
도 9는 공간적 움직임 벡터 후보에 대한 움직임 벡터 스케일링의 예시적인 도시를 나타낸다.
도 10은 4-파라미터 어파인 모델(좌측) 및 6-파라미터 어파인 모델(우측)에 대한 예시적인 단순화된 어파인 움직임 모델을 나타낸다.
도 11은 서브블록 당 예시적인 어파인 움직임 벡터 필드의 예시를 나타낸다.
도 12는 어파인 머지 모드에 대한 예시적인 후보 위치를 나타낸다.
도 13은 예시적인 변경된 머지 리스트 구성 프로세스를 나타낸다.
도 14는 예시적인 삼각 예측 기반 인터 예측을 나타낸다.
도 15는 첫번째 가중치 그룹을 적용한 예시적인 CU를 나타낸다.
도 16은 예시적인 움직임 벡터 스토리지를 나타낸다.
도 17은 예시적인 UMVE(ultimate motion vector expression) 탐색 프로세스를 나타낸다.
도 18은 예시적인 UMVE 탐색 점들을 나타낸다.
도 19는 DMVR에서 리스트0 및 리스트1 간에 미러링된 예시적인 MVD(0, 1)을 나타낸다.
도 20은 일 회 반복에서 점검될 수 있는 MV들을 나타낸다.
도 21은 예시적인 인트라 블록 복사를 나타낸다.
도 22는 예시적인 비디오 프로세싱 장치의 블록도를 나타낸다.
도 23은 예시적인 비디오 프로세싱 방법의 흐름도를 나타낸다.
도 24는 개시된 기술들이 구현될 수 있는 예시적인 비디오 프로세싱 시스템의 블록도이다.
도 25는 본 기술에 따른 비디오 프로세싱 방법의 흐름도 표현이다.
도 26은 본 기술에 따른 다른 비디오 프로세싱 방법의 흐름도 표현이다.
도 27은 본 기술에 따른 다른 비디오 프로세싱 방법의 흐름도 표현이다.
도 28은 본 기술에 따른 다른 비디오 프로세싱 방법의 흐름도 표현이다.
본 명세서는 압축해제되거나 디코딩된 디지털 비디오 또는 이미지의 품질을 개선하기 위하여 이미지 또는 비디오 비트스트림의 디코더에 의해서 사용될 수 있는 다양한 기법을 제공한다. 간략화를 위하여, "비디오"라는 용어는 본 명세서에서 픽쳐들의 시퀀스(전통적으로 비디오라고 불림) 및 개별적인 이미지 양자 모두를 포함하도록 사용된다. 더욱이, 비디오 인코더는 추가적인 인코딩을 위해서 사용되는 디코딩된 프레임을 복원하기 위해서, 인코딩의 프로세스 도중에 이러한 기법들을 구현할 수도 있다.
섹션의 제목은 본 명세서에서 쉽게 이해되도록 하기 위해서 사용된 것이고, 이러한 실시형태 및 기법들이 해당 섹션에만 적용가능하다고 한정하는 것이 아니다. 이와 같이, 하나의 섹션에 있는 실시형태들은 다른 섹션에 있는 실시형태와 결합될 수 있다.
1. 요약
본 문서는 비디오 코딩 기술에 연관된다. 특히, 인트라 블록 복사(현재 픽처 참조로도 불림, (current picture referencing, CPR)) 코딩과도 연관된다. 이러한 기술은 HEVC같은 기존의 표준, 혹은 완성될 표준(다목적 비디오 코딩(Versatile Video Coding)과 같은 비디오 코딩 표준에 적용될 수 있다. 또한, 이러한 기술은 장래의 비디오 코딩 표준 또는 비디오 코덱에도 적용가능할 수 있다.
2. 발명의 배경
비디오 코딩 표준은 주로 잘 알려져 있는 ITU-T 및 ISO/IEC 표준의 개발을 통해서 진화되어 왔다. ITU-T는 H.261 및 H.263을 생성했고, ISO/IEC는 MPEG-1 및 MPEG-4 비쥬얼(Visual)을 생성했으며, 이러한 두 조직들은 H.262/MPEG-2 비디오 및 H.264/MPEG-4 AVC(Advanced Video Coding) 및 H.265/HEVC 표준을 공동으로 생성했다. H.262 이후에, 비디오 코딩 표준은 시간적 예측에 추가하여 변환 코딩이 활용되는 하이브리드 비디오 코딩 구조에 기반하고 있다. HEVC를 넘어서는 장래의 비디오 코딩 기술을 탐색하기 위하여, JVET(Joint Video Exploration Team)이 VCEG 및 MPEG에 의해 공동으로 2015 년에 설립되었다. 그 이후에, 많은 새로운 방법들이 JVET에 의해 채용되고, JEM(Joint Exploration Model)이라고 불리는 레퍼런스 소프트웨어에 추가되어 왔다. 2018년 4 월에, JVET(Joint Video Expert Team)이 VCEG (Q6/16) 및 ISO/IEC JTC1 SC29/WG11 (MPEG) 사이에서 생성되어, HEVC와 비교할 때 50%의 비트율 감소를 목표로 하는 VVC 표준을 위해 노력하고 있다.
2.1 HEVC/H.265에서 인터 예측
인터 코딩된 코딩 유닛들(CU)의 경우, 분할 모드에 따라 하나의 예측 유닛 (PU), 2개의 PU로 코딩될 수 있다. 각 인터 예측된 PU는 하나 혹은 두 개의 참조 픽처 리스트에 대한 움직임 파라미터를 갖는다. 움직임 파라미터는 움직임 벡터 및 참조 픽처 인덱스를 포함한다. 두 개의 참조 픽처 리스트들 중 하나의 사용은 inter_pred_idc를 이용하여 시그널링될 수 도 있다. 움직임 벡터들은 예측자에 대한 델타(delta)로서 명시적으로 코딩될 수 있다.
코딩 유닛(CU)이 스킵 모드로 코딩될 경우, 하나의 PU가 상기 CU와 연관되며, 의미있는 잔여 계수들, 코딩된 움직임 벡터 델타 또는 참조 픽처 인덱스가 존재하지 않는다. 머지 모드가 지정되면, 현재 PU에 대한 움직임 파라미터들이 공간적 및 시간적 후보들을 포함하여 인접 PU들로부터 획득된다. 상기 머지 모드는 스킵 모드에 대해서 뿐만 아니라, 어떤 인터 예측된 PU에도 적용될 수 있다. 머지 모드의 대안은 움직임 파라미터들의 명시적인 전송으로, 이 경우 움직임 벡터, 각 참조 픽처 리스트에 대한 해당 참조 픽처 인덱스, 그리고 참조 픽처 리스트 사용이 각각의 PU별로 명시적으로 시그널링된다. 이러한 모드는 본 개시에서 AMVP(Advanced motion vector prediction)로 지칭된다.
시그널링이 두 참조 픽처 리스트 중 하나를 사용함을 지시할 경우, 상기 PU는 샘플들 중 하나의 블록으로부터 생성된다. 이것을 '단일 예측'(uni-prediction)이라고 한다. 단일 예측은 P 슬라이스들과 B 슬라이스들 모두에서 사용할 수 있다.
시그널링이 두 참조 픽처 리스트 모두를 사용함을 지시할 경우, 상기 PU는 샘플들 중 두 개의 블록으로부터 생성된다. 이를 '양 예측'(bi-prediction)이라고 한다. 양 예측은 B-슬라이스들에서만 사용할 수 있다.
2.1.1 참조 픽처 리스트
HEVC에서, 인터 예측이라는 용어는 현재 디코딩된 픽처 외의 참조 픽처들의 데이터 요소들(예를 들어, 샘플 값들 혹은 움직임 벡터들)로부터 유도된 예측을 나타내는 데 사용된다. H.264/AVC에서와 같이, 픽처는 다중 참조 픽처들로부터 예측될 수 있다. 인터 예측에 사용되는 참조 픽처들은 하나 이상의 참조 픽처 리스트들로 조직된다. 참조 인덱스는 리스트의 어떤 참조 픽처들이 예측 신호를 생성하기 위해 사용되어야 할 지를 식별한다.
단일 참조 픽처 리스트인 리스트 0(list0)은 P 슬라이스에서 사용되며, 두 개의 참조 픽처 리스트들인 리스트 0 및 리스트 1(list1)은 B 슬라이스들에서 사용된다. 리스트 0/1에 포함된 참조 픽처들은 캡처(capturing)/표시(display) 순서의 측면에서 과거 및 미래의 픽처들일 수 있다.
2.1.2 머지 모드
2.1.2.1 머지 모드를 위한 후보 유도
머지 모드를 사용하여 PU가 예측되는 경우, 머지 후보 리스트의 항목을 가리키는 인덱스는 비트 스트림으로부터 파싱되어 움직임 정보를 검색하는 데 사용된다. 이 리스트의 구성은 HEVC 표준에 지정되어 있으며 다음 단계들의 순서에 따라 요약될 수 있다.
단계 1: 초기 후보들 유도
단계 1.1: 공간적 후보들 유도
단계 1.2: 공간적 후보들에 대한 중복성 점검
단계 1.3: 시간적 후보들 유도
단계 2: 추가 후보들 삽입
단계 2.1: 양-예측(bi-predictive) 후보들 생성
단계 2.2: 제로(zero) 움직임 후보들 삽입
도 1은 위에 요약된 단계들의 순서에 기반하여 머지 후보를 구성하는 일 예를 보여준다. 공간적 머지 후보 유도를 위해, 5개의 상이한 위치에 있는 후보들 중에서 최대 4개의 머지 후보들이 선택된다. 시간적 머지 후보 유도를 위해, 두 후보들 중 최대 하나의 머지 후보가 선택된다. 각 PU에 대해 일정한 수의 후보들이 디코더에서 가정되기 때문에, 상기 후보들의 수가 슬라이스 헤더에서 시그널링되는 머지 후보의 최대 수(MaxNumMergeCand)에 미치지 않으면, 추가 후보들이 생성된다. 후보의 수가 일정하기 때문에 최적 머지 후보의 인덱스는 절단된 단항 이진화(TU)를 사용하여 인코딩 된다. 만약 CU의 크기가 8이면, 현재 CU의 모든 PU들은 2N x 2N 예측 유닛의 머지 후보 리스트와 동일한 단일 머지 후보 리스트를 공유한다.
하기에서, 상기에서 언급된 단계들과 연관된 동작들이 상세히 설명된다.
2.1.2.2 공간적 후보 유도
공간적 머지 후보들 유도 시, 최대 4개의 머지 후보들이 도 2에 도시된 위치들에 있는 후보들 가운데에서 선택된다. 유도 순서는 A1, B1, B0, A0 및 B2 순이다. 위치 A1, B1, B0 및 A0의 어느 한 PU가 사용될 수 없는 경우(예를 들어, 다른 슬라이스 또는 타일에 속하기 때문) 또는 인트라 코딩된 경우에만, 위치 B2가 고려된다. 위치 A1의 후보가 추가된 후 나머지 후보들의 추가는 중복성 점검을 거친다. 이를 통해, 동일한 움직임 정보를 가진 후보가 리스트에서 제외되어 코딩 효율이 향상된다. 계산 복잡성을 줄이기 위해, 상기 언급된 중복성 점검에서 가능한 모든 후보 쌍들이 고려되는 것은 아니다. 그 대신, 도 3에서 화살표로 연결된 쌍들만이 고려되고, 중복 검사에 사용되는 해당 후보가 동일한 움직임 정보를 가지고 있지 않은 경우에만 후보가 리스트에 추가된다. 중복되는 움직임 정보의 다른 소스는 2Nx2N과는 상이한 분할들과 관련된 "제2 PU" 이다. 일 예로, 도 4 는 각각 Nx2N 및 2NxN의 경우에 대한 제2 PU를 도시한다. 현재 PU가 Nx2N으로 분할되면, A1 위치에서 후보는 리스트 구성에 고려되지 않는다. 일부 실시예들에서, 이 후보를 추가하는 것은 동일한 움직임 정보를 갖는 2개의 예측 유닛들로 귀결될 수 있으며, 이는 코딩 유닛에서 단지 하나의 PU를 갖는 것에 중복된다. 마찬가지로, 현재 PU가 2NxN으로 분할되는 경우, 위치 B1 은 고려되지 않는다.
2.1.2.3 시간적 후보 유도
이 단계에서, 오직 한 후보만이 리스트에 추가된다. 특히, 시간적 머지 후보의 유도에서, 동일 위치 픽처의 동일 위치 PU에 기초하여 스케일링된 움직임 벡터가 유도된다. POC 거리인 tb 및 td를 이용하여 동일 위치 PU의 움직임 벡터로부터 스케일링되는 시간적 머지 후보에 대한 스케일링된 움직임 벡터는 도 5에 점선으로 도시된 바와 같이 획득된다. tb는 여기서 현재 픽처의 참조 픽처와 현재 픽처 간의 POC 거리로 정의되고, td는 동일위치 픽처의 참조 픽처와 동일 위치 픽처 간의 POC 거리로 정의된다. 시간적 머지 후보의 참조 픽처 인덱스는 제로(zero, 0)와 동일하게 설정된다. 스케일링 프로세스의 실용적인 현실화는 HEVC 사양에서 설명된다. B 슬라이스의 경우, 하나는 참조 픽처 리스트 0에 대한 것이며, 다른 하나는 참조 픽처 리스트 1에 대한 것인 두 개의 움직임 벡터는 양 예측 머지 후보를 생성하기 위해 획득되고 결합된다.
2.1.2.4 동일 위치 픽처 및 동일 위치 PU
TMVP가 활성화되면(예를 들어, slice_temporal_mvp_enabled_flag이 1과 동일하면), 동일위치 픽처를 나타내는 변수 ColPic는 하기와 같이 유도된다:
- 현재 슬라이스가 B 슬라이스이고 시그널링된 collocated_from_l0_flag가 0과 동일하면, ColPic는 RefPicList1[ collocated_ref_idx ]과 동일하게 설정된다.
- 그 외의 경우 (slice_type가 B와 동일하고 collocated_from_l0_flag가 1과 동일하거나 slice_type이 P와 동일하면), ColPic은 RefPicList0[ collocated_ref_idx ]과 동일하게 설정된다.
여기서 collocated_ref_idx 및 collocated_from_l0_flag는 슬라이스 헤더에서 시그널링 될 수 있는 두 개의 신택스 요소들이다.
참조 프레임에 속하는 동일 위치 PU (Y)에서, 시간적 후보의 위치는 도 6에 도시된 바와 같이 후보 C0 및 C1 사이에서 선택된다. 위치 C0 의 PU가 사용 가능하지 않고, 인트라 코딩되거나, 현재 코딩 트리 유닛(CTU, 즉 LCU(largest coding unit), 최대 코딩 유닛) 행의 외부에 존재하면, 위치 C1 이 사용된다. 그 외의 경우, 위치 C0 는 시간적 머지 후보의 유도에서 사용된다.
연관된 신택스 요소들은 하기와 같이 설명된다.
7.3.6.1 일반적인 슬라이스 세그먼트 헤더 신택스
Figure pct00001
2.1.2.5 TMVP 후보에 대한 MV 유도
보다 상세하게는, 하기의 단계들이 TMVP 후보를 유도하기 위해 수행된다.
(1) 참조 픽처 리스트 X = 0으로 설정하고, 리스트 X에서 인덱스가 0(예를 들어, curr_ref)인 참조 픽처를 대상 참조 픽처로 설정한다. 리스트 X에서 curr_ref를 가리키는MV를 획득하기 위해 동일위치 움직임 벡터에 대한 유도 프로세스를 호출한다.
(2) 현재 슬라이스가 B 슬라이스이면, set 참조 픽처 리스트 X = 1으로 설정하고, 리스트 X에서 인덱스가 1(예를 들어, curr_ref)인 참조 픽처를 대상 참조 픽처로 설정한다. 리스트 X에서 curr_ref를 가리키는 MV를 획득하기 위해 동일위치 움직임 벡터에 대한 유도 프로세스를 호출한다.
동일 위치 움직임 벡터에 대한 유도 프로세스는 다음 서브 섹션에서 설명된다.
2.1.2.5.1 동일위치 움직임 벡터에 대한 유도 프로세스
동일 위치 블록의 경우, 인트라 코딩되거나 단일 예측 혹은 양 예측으로 인터 코딩될 수 있다. 인트라 코딩되는 경우에는, TMVP는 사용가능하지 않은 것으로 설정된다.
리스트 A에 대한 단일 예측의 경우, 리스트 A의 움직임 벡터는 대상 참조 픽처 리스트 X로 스케일링된다.
양 예측이고 대상 참조 픽처 리스트가 X인 경우, 리스트 A의 움직임 벡터는 대상 참조 픽처 리스트 X로 스케일링되고, A는 하기 규칙에 따라 결정된다.
- 참조 픽처 중 현재 픽처에 비해 더 큰 POC 값을 갖는 픽처가 존재하지 않는 경우, A는 X와 동일하게 설정된다.
- 그 외의 경우에는 A는 collocated_from_l0_flag와 동일하게 설정된다.
하기와 같은 일부 연관 설명이 포함되어 있다.
8.5.3.2.9 동일위치 움직임 벡터에 대한 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 현재 예측 블록을 특정하는 변수 currPb,
- ColPic에 의해 특정된 동일위치 픽처 내의 동일위치 예측 블록을 특정하는 변수 colPb,
- ColPic에 의해 특정된 동일위치 픽처의 좌측 상단 루마 샘플에 대한 ColPb로 특정되는 동일위치 루마 예측 블록의 좌측 상단 샘플을 특정하는 루마 위치 ( xColPb, yColPb ),
- X가 0 혹은 1인 참조 인덱스 refIdxLX.
이 프로세스의 출력은 다음과 같다.
- 움직임 벡터 예측 mvLXCol,
- 사용 가능성 플래그 availableFlagLXCol.
변수 currPic는 현재 픽처를 특정한다.
배열 predFlagL0Col[ x ][ y ], mvL0Col[ x ][ y ], 및 refIdxL0Col[ x ][ y ]는 각각 ColPic에 의해 특정되는 동일위치 픽처의 PredFlagL0[ x ][ y ], MvL0[ x ][ y ], 및 RefIdxL0[ x ][ y ]와 동일하게 설정되고, 배열 predFlagL1Col[ x ][ y ], mvL1Col[ x ][ y ], 및 refIdxL1Col[ x ][ y ]는 각각 ColPic에 의해 특정되는 동일위치 픽처의 to PredFlagL1[ x ][ y ], MvL1[ x ][ y ], 및 RefIdxL1[ x ][ y ]와 동일하게 설정된다.
변수 mvLXCol 및 availableFlagLXCol는 하기와 같이 유도된다.
- colPb가 인트라 예측 모드로 코딩되면, mvLXCol의 두 구성요소는 0과 동일하게 설정되고, availableFlagLXCol는 0과 동일하게 설정된다.
- 그 외의 경우, 움직임 벡터 mvCol, 참조 인덱스 refIdxCol, 참조 리스트 식별자 listCol는 하기와 같이 유도된다.
- predFlagL0Col[ xColPb ][ yColPb ]이 0과 동일하면, mvCol, refIdxCol, 및 listCol은 각각 mvL1Col[ xColPb ][ yColPb ], refIdxL1Col[ xColPb ][ yColPb ], 및 L1과 동일하게 설정된다.
- 그 외의 경우, predFlagL0Col[ xColPb ][ yColPb ]이 1과 동일하고 predFlagL1Col[ xColPb ][ yColPb ] 이 0과 동일하면, mvCol, refIdxCol, 및 listCol는 각각 mvL0Col[ xColPb ][ yColPb ], refIdxL0Col[ xColPb ][ yColPb ], 및 L0와 동일하게 설정된다.
- 그 외의 경우, (predFlagL0Col[ xColPb ][ yColPb 이 1이고, predFlagL1Col[ xColPb ][ yColPb ]이 1인 경우), 다음과 같이 할당된다.
- NoBackwardPredFlag이 1인 경우, mvCol, refIdxCol, 및 listCol는 각각 mvLXCol[ xColPb ][ yColPb ], refIdxLXCol[ xColPb ][ yColPb ], 및 LX과 동일하게 설정된다.
- 그 외의 경우, mvCol, refIdxCol, 및 listCol은 각각 mvLNCol[ xColPb ][ yColPb ], refIdxLNCol[ xColPb ][ yColPb ], 및 LN와 동일하게 설정되고, N은 collocated_from_l0_flag 값이다.
그리고 mvLXCol 및 availableFlagLXCol는 하기와 같이 유도된다.
- LongTermRefPic( currPic, currPb, refIdxLX, LX )이 LongTermRefPic( ColPic, colPb, refIdxCol, listCol )와 동일하지 않으면, mvLXCol의 두 구성요소는 0과 동일하게 설정되며 availableFlagLXCol는 0과 동일하게 설정된다.
- 그 외의 경우, 변수 availableFlagLXCol는 1과 동일하게 설정되고, refPicListCol[ refIdxCol ]는 ColPic에 의해 특정되는 동일위치 픽처에서 예측 블록 colPb를 포함하는 슬라이스의 참조 픽처 리스트 listCol에서 참조 인덱스가 refIdxCol인 픽처로 설정되며, 다음이 적용된다.
colPocDiff = DiffPicOrderCnt( ColPic, refPicListCol[ refIdxCol ] ) (2-1)
currPocDiff = DiffPicOrderCnt( currPic, RefPicListX[ refIdxLX ] ) (2-2)
- RefPicListX[ refIdxLX ]이 장기(long-term) 참조 픽처이거나 colPocDiff이 currPocDiff와 동일하면, mvLXCol는 다음과 같이 유도된다.
mvLXCol = mvCol (2-3)
- 그 외의 경우, mvLXCol는 움직임 벡터 mvCol의 스케일링된 버전으로 다음과 같이 유도된다.
tx = ( 16384 + ( Abs( td )  >>  1 ) ) / td (2-4)
distScaleFactor = Clip3( -4096, 4095, ( tb * tx + 32 )  >>  6 ) (2-5)
mvLXCol =  Clip3( -32768, 32767, Sign( distScaleFactor * mvCol ) * 
( ( Abs( distScaleFactor * mvCol ) + 127 )  >>  8 ) ) (2-6)
tb 및 td는 다음과 같이 유도된다.
td = Clip3( -128, 127, colPocDiff ) (2-7)
tb = Clip3( -128, 127, currPocDiff ) (2-8)
NoBackwardPredFlag의 정의는 다음과 같다.
변수 NoBackwardPredFlag는 다음과 같이 유도된다.
- DiffPicOrderCnt( aPic, CurrPic )이 현재 슬라이스의 RefPicList0 혹은 RefPicList1의 각 픽처 aPic에 대해 0 이하인 경우, NoBackwardPredFlag는 1과 동일하게 설정된다.
- 그 외의 경우, NoBackwardPredFlag는 0과 동일하게 설정된다.
2.1.2.6 추가적인 후보 삽입
공간적 및 시간적 머지 후보 외에, 머지 후보에는 두가지 추가적인 유형의 머지 후보가 존재하는데, 결합 양 예측 머지 후보(combined bi-predictive merge candidate)와 제로 머지 후보(zero merge candidate)이다. 결합 양 예측 머지 후보는 공간적 및 시간적 머지 후보를 활용하여 생성된다. 결합 양 예측 머지 후보는 B 슬라이스에 대해서만 사용된다. 결합 양 예측 후보는 초기 후보의 제1 참조 픽처 리스트 움직임 파라미터와 다른 후보의 제2 참조 픽처 리스트 움직임 파라미터를 결합함으로써 생성된다. 이러한 두 튜플들이 서로 다른 움직임 가설을 제공하는 경우, 그들은 새로운 양 예측 후보를 형성할 것이다. 일 예로서, 도 7은 mvL0 및 refIdxL0 혹은 mvL1 및 refIdxL1을 갖는, 원본 리스트의 두 후보들(좌측)의 경우를 도시하는데, 최종 리스트(우측)에 추가되는 결합 양 예측 머지 후보를 생성하는 데 사용된다. 이러한 추가적인 머지 후보들을 생성하는 데 고려되는 조합들과 관련된 다양한 규칙들이 존재한다.
제로 움직임 후보들은 머지 후보 리스트의 잔존 엔트리를 채우기 위해 삽입되며, MaxNumMergeCand 용량을 마침내 채우게 된다. 이러한 후보들은 제로 공간 변위를 가지고, 0부터 시작하고 새로운 제로 움직임 후보가 리스트에 추가될 때마다 증가하는 참조 픽처 인덱스를 갖는다. 결과적으로, 중복성 점검은 이러한 후보들에 대해 수행되지 않는다.
2.1.3 AMVP
AMVP는 움직임 파라미터의 명시적 전송에 사용되는 이웃 PU의 움직임 벡터의 시공간적 연관성을 이용한다. 각 참조 픽처 리스트에서, 움직임 벡터 후보 리스트는 먼저 시간적으로 좌측, 상단 인접 PU 위치의 사용 가능성을 확인하고, 중복적인 후보를 제거하고 일정한 길이의 후보 리스트를 만들기 위해 제로 벡터를 추가함으로써 구성된다. 이후, 인코더는 후보 리스트로부터 최적의 예측자를 선택할 수 있고 선택된 후보를 지시하는 대응 인덱스를 전송할 수 있다. 머지 인덱스 시그널링과 마찬가지로, 최적의 움직임 벡터 후보의 인덱스는 절삭형 단항(truncated unary)을 이용하여 인코딩된다. 이 경우 인코딩되는 최대 값은 2이다(도 8 참조). 하기 섹션에서, 움직임 벡터 예측 후보의 유도 프로세스에 대한 세부 사항이 제공된다.
2.1.3.1 AMVP 후보의 유도
도 8은 움직임 벡터 예측 후보에 대한 유도 프로세스를 요약한다.
움직임 벡터 예측에서, 움직임 벡터 후보의 두 유형들이 고려되는데, 공간적 움직임 벡터 후보와 시간적 움직임 벡터 후보이다. 공간적 움직임 벡터 후보 유도의 경우, 두 개의 움직임 벡터 후보가 도 2에 도시된 다섯 개의 서로 다른 위치에 존재하는 각 PU의 움직임 벡터에 기초하여 최종적으로 유도된다.
시간적 움직임 벡터 후보 유도의 경우, 하나의 움직임 벡터 후보가 서로 다른 두 개의 동일 위치 위치(co-located position)에 기초하여 유도된 두 개의 후보들로부터 선택된다. 제1 시공간적 후보 리스트가 만들어진 이후, 리스트에서 중복된 움직임 벡터 후보가 제거된다. 잠재적인 후보(potential candidates)의 수가 2보다 큰 경우, 연관된 참조 픽처 리스트 내의 참조 픽처 인덱스가 1보다 큰 움직임 벡터 후보는 리스트에서 제거된다. 시공간적 움직임 벡터 후보의 수가 2보다 작은 경우, 추가적인 제로 움직임 벡터 후보가 리스트에 추가된다.
2.1.3.2 공간적 움직임 벡터 후보
공간적 움직임 벡터 후보의 유도에서, 다섯 개의 잠재적인 후보 중 최대 두 개의 후보가 고려되며, 이는 도 2에 도시된 바와 동일한 위치에 존재하는 PU들로부터 유도되는데, 이들의 위치는 움직임 머지의 위치와 동일하다. 현재 PU의 좌측에 대한 유도 순서는 A0, A1,및 스케일링 된 A0, 스케일링 된 A1로 정의된다. 현재 PU의 상단에 대한 유도 순서는 B0, B1, B2, 스케일링 된 B0, 스케일링 된 B1, 스케일링 된 B2로 정의된다. 따라서, 각 측면에 대해 움직임 벡터 후보로 사용될 수 있는 네 가지 경우가 있으며, 두 가지 경우에서는 공간적 스케일링을 사용할 필요가 없으나 두 가지 경우에서는 공간적 스케일링이 사용된다. 네 가지 서로 다른 경우를 요약하면 다음과 같다.
-- 공간적 스케일링 없음
(1) 동일한 참조 픽처 리스트 및 동일한 참조 픽처 색인 (동일한 POC)
(2) 상이한 참조 픽처 리스트, 그러나 동일한 참조 픽처 색인 (동일한 POC)
-- 공간적 스케일링 허용
(3) 동일한 참조 픽처 리스트, 그러나 상이한 참조 픽처 색인 (상이한 POC)
(4) 상이한 참조 픽처 리스트 및 상이한 참조 픽처 색인 (상이한 POC)
공간적 스케일링이 없는 경우를 먼저 확인한 다음 공간적 스케일링을 허용하는 경우들을 확인한다. 공간적 스케일링은 참조 픽처 리스트와 상관없이 이웃 PU의 참조 픽처와 현재 PU의 참조 픽처 사이의 POC가 다를 때 고려된다. 좌측 후보들의 모든 PU가 사용될 수 없거나 인트라 코딩 된 경우, 좌측 및 상단 MV 후보들의 병렬 유도를 돕기 위해 상단 움직임 벡터에 대한 스케일링이 허용된다. 그렇지 않은 경우, 공간적 스케일링은 상단 움직임 벡터에 대해 허용되지 않는다.
도 9에 도시된 바와 같이, 공간적 스케일링에서, 이웃 PU의 움직임 벡터는 시간적 스케일링의 경우와 유사한 방식으로 스케일링된다. 주요 차이점은 현재 PU의 참조 픽처 리스트와 인덱스가 입력으로 제공된다는 점이다. 실제 스케일링 프로세스는 시간적 스케일링 프로세스와 동일하다.
2.1.3.3 시간적 움직임 벡터 유도
참조 픽처 인덱스 유도와는 별개로, (도 6에서와 같이) 시간적 머지 후보들의 유도를 위한 모든 프로세스는 공간적 움직임 벡터 후보들의 유도를 위한 것과 같다. 참조 픽처 인덱스는 디코더로 시그널링된다.
2.2 VVC에서 인터 예측 방법
MVD 시그널링을 위한 AMVR(Adaptive Motion Vector difference Resolution), MMVD(Merge with Motion Vector Differences), TPM(Triangular prediction mode), CIIP(Combined intra-inter prediction), ATMVP(즉, SbTMVP)(Advanced TMVP), 어파인 예측 모드, GBI(Generalized Bi-Prediction), DMVR(Decoder-side Motion Vector Refinement), 및 BIO(즉, BDOF)( Bi-directional Optical flow)와 같은 인터 예측 개선을 위한 여러가지 새로운 코딩 도구들이 소개되었다.
VVC에서는 세 가지 서로 다른 머지 리스트 구성 프로세스가 지원된다.
(1) 서브 블록 머지 후보 리스트: ATMVP 및 어파인 머지 후보들을 포함한다. 하나의 머지 리스트 구성 프로세스가 어파인 모드와 ATMVP 모드 둘 다에서 공유된다. 여기서, ATMVP 및 어파인 머지 후보들은 순서대로 추가될 수 있다. 서브블록 머지 리스트 크기는 슬라이스 헤더에서 시그널링 되며, 최대 값은 5이다.
(2) 정규 머지 리스트: 인터 코딩된 블록의 경우, 하나의 머지 리스트 구성 프로세스가 공유된다. 여기서, 공간적/시간적 머지 후보, HMVP, 페어와이즈 머지 후보 및 제로 머지 후보들이 순서대로 삽입된다. 정규 머지 리스트 크기는 슬라이스 헤더에서 시그널링되고, 최대 값은 6이다. MMVD, TPM, CIIP는 정규 머지 리스트에 의존한다.
(3) IBC 머지 리스트: 정규 머지 리스트와 유사한 방식으로 처리된다.
마찬가지로, VVC에서는 세 가지 AMVP 리스트들이 지원된다.
(1) 어파인 AMVP 후보 리스트
(2) 정규 AMVP 후보 리스트
(3) IBC AMVP 후보 리스트: IBC 머지 리스트와 동일한 구성 프로세스.
2.2.1 VVC의 코딩 블록 구조
VVC에서는, 쿼드트리(Quad-tree)(QT)/이진트리(Binary Tree)(BT)/삼진트리(Ternary-Tree)(TT) 구조가 픽처를 정사각형 혹은 직사각형 블록들로 분할할 때 채택된다.
QT/BT/TT 외에, 별도의 트리(듀얼 코딩 트리로 알려짐)는 VVC에서 I 프레임에 대해 채택되었다. 별도의 트리를 이용하여, 코딩 블록 구조는 루마 및 크로마 구성요소들에 대해 개별적으로 시그널링된다.
또한 (PU가 TU와 같지만 CU보다 작은 인트라 서브분할 예측 및 PU가 CU와 동일한 인터 코딩 블록들에 대한 서브 블록 변환과 같은) 몇 가지 특정 코딩 방법으로 코딩된 블록들을 제외하면 CU는 PU 및 TU와 동일하게 설정된다.
2.2.2 어파인 예측 모드
HEVC에서, 오직 병진 움직임 모델만이 움직임 보상 예측(Motion Compensation Prediction, MCP)에 대해 적용된다. 하지만, 실제로는, 줌 인/아웃, 회전, 원근적 움직임 및/또는 기타 불규칙 움직임들과 같은 여러 종류의 움직임이 존재한다. VVC에서는, 단순화된 어파인 변환 움직임 보상 예측은 4-파라미터 어파인 모델 및 6-파라미터 어파인 모델로 적용된다. 도 10에 나타난 바와 같이, 블록의 어파인 움직임 필드는 4-파라미터 어파인 모델에서는 두 개의 제어점 움직임 벡터(control point motion vector, CPMV)와 6-파라미터 어파인 모델에서는 세 개의 제어점 움직임 벡터들에 의해 설명된다.
블록의 어파인 움직임 필드는 각각 수식 (1)에서 4-파라미터 어파인 모델 (변수들 a, b, e, f 를 사용하는 4-파라미터 어파인 모델) 및 수식 (2)에서 6-파라미터 어파인 모델(변수들 a, b, c, d, e, f 를 사용하는 6-파라미터 어파인 모델)과 함께 다음 방정식으로 설명된다. 제어 점 움직임 벡터들에 의해 설명된다.
Figure pct00002
여기서, (mv h 0 , mv h 0 ) 는 좌측 상단 모서리 제어점(control point: CP)의 움직임 벡터이고, (mv h 1 , mv h 1 ) 는 우측 상단 모서리 제어점(CP)의 움직임 벡터이며 (mv h 2 , mv h 2 ) 는 좌측 하단 모서리 제어점(CP)의 움직임 벡터이다. 이러한 세 가지 움직임 벡터들 모두는 제어점 움직임 벡터(control point motion vector, CPMV)로 지칭되고, (x, y)는 현재 블록 내에서 좌측 상단의 샘플에 상대적인 대표 지점(representative point)의 좌표를 나타낸다. (mvh(x,y), mvv(x,y))는 (x, y)에 위치한 샘플에 대해 유도된 움직임 벡터이다. CP 움직임 벡터들은 시그널링되거나, (어파인 AMVP 모드에서처럼) 혹은 즉석에서 유도될 수 있다(어파인 머지 모드에서처럼). wh 는 현재 블록의 너비와 높이이다. 실제로, 분할은 라운딩 동작과 함께 오른쪽 시프트(right-shift)로 구현된다. VTM에서 대표 지점은 서브 블록의 중앙 지점으로 정의되는데, 예를 들어, 현재 블록 내의 좌측 상단의 샘플에 상대적인 서브 블록의 좌측 상단 모서리의 좌표가 (xs, ys)이면, 대표 지점의 좌표는 (xs+2, ys+2)로 정의된다. 각 서브 블록(예를 들어, VTM에서 4x4)에 대해, 대표 지점은 전체 서브 블록에 대한 움직임 벡터를 유도하는 데 활용된다.
움직임 보상 예측을 더 단순화하기 위해, 서브블록 기반 어파인 변환 예측이 적용된다. 각 MxN(M 및 N은 현재 VVC에서 모두 4로 설정된다) 서브 블록의 움직임 벡터를 유도하기 위해, 도 11에 도시된 바와 같이 각 서브 블록의 중앙 샘플의 움직임 벡터는 수식 (1) 및 (2)에 따라 계산되고, 1/16 분수 정확도로 라운딩된다. 이후 1/16 픽셀에 대한 움직임 보상 보간 필터가 유도된 움직임 벡터를 갖는 각 서브 블록의 예측을 생성하기 위해 적용된다. 1/16 픽셀에 대한 보간 필터는 어파인 모드에 의해 도입된다.
MCP 이후, 각 서브 블록의 고정확도 움직임 벡터는 라운딩되고 일반 움직임 벡터와 동일한 정확도로 저장된다.
2.2.3 전체 블록에 대한 머지
2.2.3.1 병진 정규 머지 모드의 머지 리스트 구성
2.2.3.1.1 히스토리 기반 움직임 벡터 예측(History-based Motion Vector Prediction, HMVP)
머지 리스트 설계와 다르게, VVC에서는, 히스토리 기반 움직임 벡터 예측(HMVP) 방법이 적용된다.
HMVP에서는, 이전에 코딩된 움직임 정보가 저장된다. 이전에 코딩된 블록의 움직임 정보는 HMVP 후보로 정의된다. 다중 HMVP 후보는 테이블에 저장되고, HMVP 테이블로 불리게 되며, 이 테이블은 인코딩/디코딩 프로세스의 실시간 동안 유지된다. HMVP 테이블은 새로운 타일/LCU 행/슬라이스의 코딩/인코딩이 시작될 때 비워진다. 인터 코딩된 블록, 비 서브 블록, 및 비 TPM 모드가 존재할 때마다, 연관된 움직임 정보는 새로운 HMVP 후보로서 테이블의 마지막 엔트리로 추가된다. 전체적인 코딩 흐름이 도 12에 도시되었다.
2.2.3.1.2 정규 머지 리스트 구성 프로세스
정규 머지 리스트의 구성(병진 움직임을 위한)은 하기 단계들의 순서에 따라 요약될 수 있다.
단계 1: 공간적 후보의 유도
단계 2: HMVP 후보의 삽입
단계 3: 페어와이즈 평균 후보의 삽입
단계 4: 기본 움직임 후보
HMVP 후보는 AMVP 및 머지 후보 리스트 구성 프로세스 모두에서 사용될 수 있다. 도 13은 변경된 머지 후보 리스트 구성 과정을 도시한다. 머지 후보 리스트가 TMVP 후보 삽입 후에도 가득 차지 않은 경우, HMVP 테이블에 저장된 HMVP 후보가 머지 후보 리스트를 채우기 위해 활용될 수 있다. 일반적으로 하나의 블록이 움직임 정보의 측면에서 최근접 이웃 블록과 높은 상관관계를 갖는다는 것을 고려하여, 테이블의 HMVP 후보가 인덱스의 내림차순으로 삽입된다. 테이블이 마지막 엔트리가 먼저 리스트에 추가되고, 첫 번째 엔트리가 마지막으로 추가된다. 마찬가지로, 중복성 제거는 HMVP 후보에 적용된다. 사용 가능한 머지 후보의 총 수가 시그널링이 허용된 최대 머지 후보 수에 도달하면, 머지 후보 리스트 구성 프로세스는 종료된다.
모든 공간적/시간적/HMVP 후보는 비 IBC 모드로 코딩되어야 한다는 것에 주의하여야 한다. 그 외의 경우에는, 정규 머지 후보 리스트에 추가되는 것은 허용되지 않는다.
HMVP 테이블은 최대 5 개의 정규 움직임 후보를 포함하며 각각은 고유하다.
2.2.3.1.2.1 프루닝 프로세스
중복성 검사에 사용되는 대응 후보가 동일한 움직임 정보를 갖지 않는 경우에만 후보가 리스트에 추가된다. 이러한 비교 프로세스를 프루닝 프로세스라 한다.
공간적 후보들 가운데 프루닝 프로세스는 현재 블록의 TPM 사용에 의존한다.
현재 블록이 TPM 모드 없이 코딩되는 경우(예를 들어, 정규 머지, MMVD, CIIP), 공간적 머지 후보에 대한 HMVP 프루닝 프로세스(예를 들어, 다섯가지 프루닝)가 활용된다.
2.2.4 삼각 예측 모드 (Triangular Prediction Mode, TPM)
VVC에서 삼각 예측 모드는 인터 예측에 대해 지원된다. 삼각 예측은 CU가 8x8 이상이거나 MMVD 혹은 CIIP 모드가 아닌 머지 모드로 코딩되는 경우에만 적용된다. 이러한 조건을 만족하는 CU의 경우, CU 레벨 플래그는 삼각 예측 모드가 적용되는지 여부를 지시하기 위해 시그널링된다.
이 모드가 사용되는 경우, CU는 도 14에 도시된 바와 같은 대각선 분할 혹은 반 대각선 분할 중 하나인 경우 두 개의 삼각 형태의 분할로 균등하게 분할된다. CU의 각 삼각 분할은 고유의 움직임을 이용하여 인터 예측된다. 각 분할에는 단일 예측만이 허용된다. 즉, 각 분할은 하나의 움직임 벡터와 하나의 참조 인덱스를 갖는다. 단일 예측 움직임 제약은 기존의 양 예측과 동일하게 각 CU에 대해 두 개의 움직임 보상된 예측만 필요하다는 것을 보장하기 위해 적용된다.
CU 레벨 플래그가 현재 CU가 삼각 분할 모드를 이용하여 코딩됨을 지시하는 경우, 삼각 분할(대각선 혹은 반 대각선)의 방향을 지시하는 플래그, 두 개의 머지 인덱스(각 분할 당 하나)가 더 시그널링된다. 삼각 분할 각각의 예측 이후, 가중치를 갖는 블렌딩 프로세싱을 이용하여 대각선 혹은 반 대각선 엣지를 따르는 샘플 값들이 조정된다. 이것이 전체 CU에 대한 예측 신호이며, 변환 및 양자화 프로세스는 다른 예측 모드들처럼 전체 CU에 대해 적용될 것이다. 결과적으로, 삼각 분할 모드를 이용하여 예측된 CU의 움직임 필드는 4x4 유닛으로 저장된다.
추가적인 움직임 벡터 프루닝 없이 정규 머지 후보 리스트는 삼각 분할 머지 예측에 재사용된다. 정규 머지 후보 리스트에서 각 머지 후보에 대해 L0 혹은 L1 움직임 벡터 중 하나만 삼각 예측에 사용된다. 또한, L0 대 L1 움직임 벡터를 선택하는 순서는 머지 인덱스 패리티(parity)를 기반으로 한다. 이 방식을 사용하면, 정규 머지 리스트가 직접 사용될 수 있다.
2.2.4.1 TPM에 대한 머지 리스트 구성 프로세스
일부 실시예들에서, 정규 머지 리스트 구성 프로세스는 다음과 같은 변경사항을 포함할 수 있다.
(1) 프루닝 프로세스 수행 방법은 현재 블록의 TPM 사용에 달려있다.
- 현재 블록이 TPM으로 코딩되지 않은 경우, 공간적 머지 후보에 적용되는 HEVC 5 프루닝이 호출된다.
- 그 외의 경우 (현재 블록이 TPM으로 코딩된 경우), 새로운 공간적 머지 후보를 추가할 때 풀 프루닝이 적용된다. 즉, B1이A1과 비교되고, B0이 A1 및 B1과 비교된다. A0은 A1, B1, 및 B0과 비교된다. B2는 A1, B1, A0, 및 B0과 비교된다.
(2) B2의 움직임 정보 확인 여부에 대한 조건은 현재 블록의 TPM 사용에 따라 달려있다.
- 현재 블록이 TPM으로 코딩되지 않은 경우, B2를 확인하기 전에 공간적 머지 후보가 네 개 미만인 경우에만 B2에 액세스되어 확인된다.
- 그 외의 경우(현재 블록이 TPM으로 코딩된 경우), B2는 B2를 추가하기 전에 얼마나 많은 사용 가능한 공간적 머지 후보가 존재하는 지에 무관하게 항상 접근되어 확인된다.
2.2.4.2 적응적 가중 프로세스
각 삼각 예측 유닛의 예측 이후, 적응적 가중 프로세스가 전체 CU에 대해 최종 예측을 유도하기 위해 두 개의 삼각 예측 유닛 간의 대각선 엣지에 적용된다. 두 개의 가중치 그룹은 하기와 같이 정의된다.
첫 번째 가중치 인자 그룹: {7/8, 6/8, 4/8, 2/8, 1/8} 및{7/8, 4/8, 1/8}은 휘도 및 색차 샘플들에 각각 사용된다.
두 번째 가중치 인자 그룹: {7/8, 6/8, 5/8, 4/8, 3/8, 2/8, 1/8} 및 {6/8, 4/8, 2/8}은 휘도 및 색차 샘플들에 각각 사용된다.
가중치 인자 그룹은 두 개의 삼각 예측 유닛의 움직임 벡터의 비교에 기초하여 선택된다. 두 번째 가중치 인자 그룹은 하기의 조건 중 어느 하나가 참일 때 사용된다.
- 두 개의 삼각 예측 유닛의 참조 픽처가 서로 다른 경우
- 두 개의 움직임 벡터의 수평 값의 차이의 절대 값이 16 픽셀보다 큰 경우
- 두 개의 움직임 벡터의 수직 값의 차이의 절대 값이 16 픽셀보다 큰 경우
그 외의 경우, 첫 번째 가중치 인자 그룹이 사용된다. 도 15에 일 예시가 도시되어 있다.
2.2.4.3 움직임 벡터 저장
삼각 예측 유닛의 움직임 벡터(도 16의 Mv1 및 Mv2)은 4x4 그리드로 저장된다. 각 4Х4 그리드에서, 단일 예측 혹은 양 예측 움직임 벡터가 CU에서 4x4 그리드의 위치에 기초하여 저장된다. 도 16에 도시된 바와 같이, Mv1 혹은 Mv2인 단일 예측 움직임 벡터는 비 가중 구역(즉, 대각선 엣지에 위치하지 않음)에 위치한 4x4 그리드에 대해 저장된다. 한편, 양 예측 움직임 벡터는 가중 구역에 위치한 4x4 그리드에 대해 저장된다. 하기 규칙에 따라 양 예측 움직임 벡터는 Mv1 및 Mv2로부터 유도된다.
(1) Mv1 및 Mv2이 서로 다른 방향에 대한 움직임 벡터(L0 혹은 L1)를 갖는 경우, Mv1 및 Mv2는 양 예측 움직임 벡터를 형성하기 위해 단순히 결합된다.
(2) Mv1 및 Mv2 모두가 동일한 L0 (혹은 L1) 방향인 경우,
- Mv2의 참조 픽처가 L1(혹은 L0) 참조 픽처 리스트의 픽처와 동일한 경우, Mv2는 픽처로 스케일링된다. Mv1 및 스케일링된 Mv2는 양 예측 움직임 벡터를 형성하기 위해 결합된다.
- Mv1의 참조 픽처가 L1(혹은 L0) 참조 픽처 리스트의 픽처와 동일한 경우, Mv1는 픽처로 스케일링된다. 스케일링된 Mv1 및 Mv2는 양 예측 움직임 벡터를 형성하기 위해 결합된다.
- 그 외의 경우, 오직 Mv1만이 가중된 구역에 대해 저장된다.
2.2.4.4 머지 모드의 신택스 테이블, 시멘틱스 및 디코딩 프로세스
추가된 변경 사항은 밑줄이 표시된 굵은 이탤릭체로 강조 표시된다. 삭제는 [[ ]]로 표시된다.
7.3.5.1 일반적인 슬라이스 헤더 신택스
Figure pct00003
Figure pct00004
Figure pct00005
7.3.7.5 코딩 유닛 신택스
Figure pct00006
Figure pct00007
Figure pct00008
7.3.7.7 머지 데이터 신택스
Figure pct00009
Figure pct00010
Figure pct00011
7.4.6.1 일반적인 슬라이스 헤더 시멘틱스
six_minus_max_num_merge_cand는 6에서 감한 슬라이스에서 지원되는 머지 움직임 벡터 예측(MVP) 후보의 최대 수를 특정한다. 머지 MVP 후보의 최대 수인 MaxNumMergeCand는 하기와 같이 유도된다.
MaxNumMergeCand = 6 - six_minus_max_num_merge_cand (7-57)
MaxNumMergeCand 값은 1에서 6 범위 내여야 한다.
five_minus_max_num_subblock_merge_cand는 5에서 감한 슬라이스에서 지원되는 서브블록 기반 머지 움직임 벡터 예측(MVP) 후보의 최대 수를 특정한다. five_minus_max_num_subblock_merge_cand이 존재하지 않는 경우, 5 - sps_sbtmvp_enabled_flag와 동일하다고 추론된다. 서브블록 기반 머지 MVP 후보의 최대 수인 MaxNumSubblockMergeCand는 하기와 같이 유도된다.
MaxNumSubblockMergeCand = 5 - five_minus_max_num_subblock_merge_cand (7-58)
MaxNumSubblockMergeCand 값은 0에서 5 범위 내여야 한다.
7.4.8.5 코딩 유닛 시멘틱스
0과 동일한 pred_mode_flag 현재 코딩 유닛이 인터 예측 모드로 코딩됨을 특정한다. 1과 동일한 pred_mode_flag은 현재 코딩 유닛이 인트라 예측 모드로 코딩됨을 특정한다.
pred_mode_flag이 존재하지 않는 경우 다음과 같이 추론된다.
- cbWidth가 4와 동일하고 cbHeight가 4와 동일한 경우, pred_mode_flag는 1로 추론된다.
- 그 외의 경우, I 슬라이스를 디코딩할 때 pred_mode_flag는 1로, P 혹은 B 슬라이스를 디코딩 하는 경우 0으로 각각 추론된다.
x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에서, 변수 CuPredMode[ x ][ y ]은 다음과 같이 유도된다.
- pred_mode_flag이 0과 동일하면, CuPredMode[ x ][ y ]는 MODE_INTER와 동일하게 설정된다.
- 그 외의 경우 (pred_mode_flag가 1과 동일), CuPredMode[ x ][ y ]는 MODE_INTRA와 동일하게 설정된다.
1과 동일한 pred_mode_ibc_flag 는 현재 코딩 유닛이 IBC 예측 모드에서 코딩됨을 특정한다. 0과 동일한 pred_mode_ibc_flag는 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않음을 특정한다.
- pred_mode_ibc_flag이 존재하지 않는 경우, 다음과 같이 추론된다.
- cu_skip_flag[ x0 ][ y0 ]이 1과 동일하고, cbWidth는 4이며, cbHeight가 4이면, pred_mode_ibc_flag는 1로 추론된다.
- 그 외의 경우, cbWidth 및 cbHeight 모두가 128이면, pred_mode_ibc_flag는 0으로 추론된다.
- 그 외의 경우, pred_mode_ibc_flag는 I 슬라이스를 디코딩 할 때 sps_ibc_enabled_flag와, P 혹은 B 슬라이스를 디코딩 할 때 0으로 각각 추론된다.
pred_mode_ibc_flag이 1과 동일한 경우, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에서 변수 CuPredMode[ x ][ y ]는 MODE_IBC와 동일하게 설정된다.
general_merge_flag[ x0 ][ y0 ]는 현재 코딩 유닛에 대한 인터 예측 파라미터가 이웃 인터 예측된 분할로부터 추론되는지 여부를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 (x0, y0)를 특정한다.
general_merge_flag[ x0 ][ y0 ]이 존재하는 경우, 다음과 같이 추론된다.
- cu_skip_flag[ x0 ][ y0 ]이 1과 동일한 경우, general_merge_flag[ x0 ][ y0 ]는 1과 동일하게 추론된다.
- 그 외의 경우, general_merge_flag[ x0 ][ y0 ]는 0과 동일하게 추론된다.
mvp_l0_flag[ x0 ][ y0 ]는 리스트 0의 움직임 벡터 예측자 인덱스를 특정하되, x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 (x0, y0)를 특정한다.
mvp_l0_flag[ x0 ][ y0 ]가 존재하지 않는 경우, 0과 동일하게 추론된다.
mvp_l1_flag[ x0 ][ y0 ]는 mvp_l0_flag와 동일한 시멘틱스를 가지며 l0 및 리스트 0은 각각 l1 및 리스트 1로 대체된다.
inter_pred_idc[ x0 ][ y0 ]는 테이블 7-10에 따라 현재 코딩 유닛에 대해 리스트 0(list0), 리스트1(list1) 혹은 양 예측이 사용되는지 여부를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
테이블 7-10 -인터 예측 모드와 이름 연관
Figure pct00012
inter_pred_idc[ x0 ][ y0 ]이 존재하지 않는 경우, PRED_L0와 동일하다고 추론된다.
7.4.8.7 머지 데이터 시멘틱스
1과 동일한 regular_merge_flag[ x0 ][ y0 ]는 정규 머지 모드가 현재 코딩 유닛의 인터 예측 파라미터를 생성하는 데 사용되도록 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 ) 를 특정한다.
regular_merge_flag[ x0 ][ y0 ]이 존재하지 않는 경우, 다음과 같이 추론된다.
- 아래의 모든 조건이 참인 경우, regular_merge_flag[ x0 ][ y0 ]는 1로 추론된다.
- sps_mmvd_enabled_flag이 0이다.
- general_merge_flag[ x0 ][ y0 ]은 1이다.
- cbWidth*cbHeight은 32이다.
- 그 외의 경우, regular_merge_flag[ x0 ][ y0 ]는 0과 동일하게 추론된다.
1과 동일한 mmvd_merge_flag[ x0 ][ y0 ]는 움직임 벡터 차이를 갖는 머지 모드가 현재 코딩 유닛의 인터 예측 파라미터를 생성하는 데 사용됨을 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
mmvd_merge_flag[ x0 ][ y0 ]이 존재하지 않는 경우, 하기와 같이 추론된다.
- 하기의 모든 조건들이 참이면, mmvd_merge_flag[ x0 ][ y0 ]은 1로 추론된다.
- sps_mmvd_enabled_flag이 1이다.
- general_merge_flag[ x0 ][ y0 ]이 1이다.
- cbWidth*cbHeight은 32이다.
- regular_merge_flag[ x0 ][ y0 ]은 0이다.
- 그 외의 경우, mmvd_merge_flag[ x0 ][ y0 ]는 0으로 추론된다.
- mmvd_cand_flag[ x0 ][ y0 ] 는 머지 후보 리스트의 첫 번째(0) 혹은 두 번째(1) 후보가 mmvd_distance_idx[ x0 ][ y0 ] 및 mmvd_direction_idx[ x0 ][ y0 ]으로부터 유도되는 움직임 벡터 차이와 사용되는지 여부를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
mmvd_cand_flag[ x0 ][ y0 ]이 존재하지 않으면, 0으로 추론된다.
mmvd_distance_idx[ x0 ][ y0 ]는 테이블 7-12에 명시된 대로 MmvdDistance[ x0 ][ y0 ]를 유도하는 데 사용되는 인덱스를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
테이블 7-12 - mmvd_distance_idx[ x0 ][ y0 ]에 기초한 MmvdDistance[ x0 ][ y0 ]의 사양
Figure pct00013
mmvd_direction_idx[ x0 ][ y0 ]는 테이블 7-13에 명시된 대로 MmvdSign[ x0 ][ y0 ]를 유도하는 데 사용되는 인덱스를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
테이블 7-13 -mmvd_direction_idx[ x0 ][ y0 ]에 기초한 MmvdSign[ x0 ][ y0 ]의 사양
Figure pct00014
머지 더하기 MVD 오프셋 MmvdOffset[ x0 ][ y0 ] 의 두 구성요소들은 하기와 같이 유도된다.
MmvdOffset[ x0 ][ y0 ][ 0 ] = ( MmvdDistance[ x0 ][ y0 ] << 2 ) * MmvdSign[ x0 ][ y0 ][0] (7-124)
MmvdOffset[ x0 ][ y0 ][ 1 ] = ( MmvdDistance[ x0 ][ y0 ] << 2 ) * MmvdSign[ x0 ][ y0 ][1] (7-125)
merge_subblock_flag[ x0 ][ y0 ]는 현재 코딩 유닛에 대한 서브 블록 기반 인터 예측 파라미터가 이웃 블록들로부터 유도되는지 여부를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다. merge_subblock_flag[ x0 ][ y0 ]가 존재하지 않는 경우, 0으로 추론된다.
merge_subblock_idx[ x0 ][ y0 ]는 배열 인덱스 x0, y0가 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정하는 서브블록 기반 머지 후보 리스트의 머지 후보 인덱스를 특정한다.
merge_subblock_idx[ x0 ][ y0 ]가 존재하지 않는 경우, 0으로 추론된다.
ciip_flag[ x0 ][ y0 ]는 결합 인터 픽처 머지 및 인트라 픽처 예측이 현재 코딩 유닛에 대해 적용되는지 여부를 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
ciip_flag[ x0 ][ y0 ]가 존재하지 않는 경우, 0으로 추론된다.
ciip_flag[ x0 ][ y0 ]가 1인 경우, x = xCb..xCb + cbWidth - 1 및 y = yCb..yCb + cbHeight - 1이면, 변수 IntraPredModeY[ x ][ y ]는 INTRA_PLANAR와 동일하게 설정된다.
B 슬라이스를 디코딩 할 때 삼각 형태 기반 움직임 보상이 현재 코딩 유닛의 예측 샘플들을 생성하는 데 사용되는 지 여부를 특정하는 변수 MergeTriangleFlag[ x0 ][ y0 ]는 하기와 같이 유도된다.
하기의 모든 조건들이 참이면, MergeTriangleFlag[ x0 ][ y0 ]은 1과 동일하다.
- sps_triangle_enabled_flag는 1이다.
- slice_type은 B이다.
- general_merge_flag[ x0 ][ y0 ]이 1이다.
- MaxNumTriangleMergeCand은 2 이상이다.
- cbWidth * cbHeight는 64 이상이다.
- regular_merge_flag[ x0 ][ y0 ]은 0이다.
- mmvd_merge_flag[ x0 ][ y0 ]은 0이다.
- merge_subblock_flag[ x0 ][ y0 ]은 0이다.
- ciip_flag[ x0 ][ y0 ]은 0이다.
- 그 외의 경우, MergeTriangleFlag[ x0 ][ y0 ]는 0이다.
merge_triangle_split_dir[ x0 ][ y0 ]는 머지 삼각 모드의 분할 방향을 특정한다. 배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
merge_triangle_split_dir[ x0 ][ y0 ]이 존재하지 않는 경우, 0으로 추론된다.
배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정하고, merge_triangle_idx0[ x0 ][ y0 ]는 삼각 형태 기반 움직임 보상 후보 리스트의 첫 번째(제1) 머지 후보 인덱스를 특정한다.
merge_triangle_idx0[ x0 ][ y0 ]이 존재하지 않는 경우, 0으로 추론된다.
배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정하고, merge_triangle_idx1[ x0 ][ y0 ]는 삼각 형태 기반 움직임 보상 후보 리스트의 두 번째(제2) 머지 후보 인덱스를 특정한다.
merge_triangle_idx1[ x0 ][ y0 ]가 존재하지 않는 경우, 0으로 추론된다.
merge_idx[ x0 ][ y0 ]는 머지 후보 리스트의 머지 후보 인덱스를 특정하고,
배열 인덱스 x0, y0는 픽처의 좌측 상단 루마 샘플에 대해 고려되는 코딩 블록의 좌측 상단 루마 샘플의 위치 ( x0, y0 )를 특정한다.
merge_idx[ x0 ][ y0 ]가 존재하지 않는 경우, 하기와 같이 추론된다.
- mmvd_merge_flag[ x0 ][ y0 ]가 1이면, merge_idx[ x0 ][ y0 ]는 mmvd_cand_flag[ x0 ][ y0 ]와 동일하다고 추론된다.
- 그 외의 경우 (mmvd_merge_flag[ x0 ][ y0 ]이 0인 경우), merge_idx[ x0 ][ y0 ]는 0으로 추론된다.
2.2.4.4.1 디코딩 프로세스
일부 실시예들에서, 디코딩 프로세스는 하기와 같이 유도된다.
8.5.2.2 머지 모드의 루마 움직임 벡터의 유도 프로세스
이 프로세스는 general_merge_flag[ xCb ][ yCb ]이 1일때만 호출되며, 여기서 ( xCb, yCb )는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 참조 인덱스 refIdxL0 및 refIdxL1,
- 예측 리스트 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양 예측 가중 인덱스 bcwIdx.
- 머지 후보 리스트 mergeCandList.
양 예측 가중 인덱스 bcwIdx는 0과 동일하게 설정된다.
움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], 참조 인덱스 refIdxL0 및 refIdxL1과 예측 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ]는 하기 순서의 단계에 의해 유도된다.
1. 절 8.5.2.4에 명시된 이웃 코딩 유닛들로부터 공간적 머지 후보의 유도 프로세스는 루마 코딩 블록 위치 ( xCb, yCb ), 루마 코딩 블록 너비 cbWidth, 루마 코딩 블록 높이 cbHeight를 입력으로 하여 호출되며, 출력은 사용가능성 플래그 availableFlagA0, availableFlagA1, availableFlagB0, availableFlagB1 및 availableFlagB2, X가 0 혹은 1인 참조 인덱스 refIdxLXA0, refIdxLXA1, refIdxLXB0, refIdxLXB1 및 refIdxLXB2, 예측 리스트 활용 플래그 predFlagLXA0, predFlagLXA1, predFlagLXB0, predFlagLXB1 및 predFlagLXB2, 및 움직임 벡터 mvLXA0, mvLXA1, mvLXB0, mvLXB1 mvLXB2 와 양 예측 가중 인덱스 bcwIdxA0, bcwIdxA1, bcwIdxB0, bcwIdxB1, bcwIdxB2 이다.
2. X가 0 혹은 1인 참조 인덱스 refIdxLXCol0와 시간적 머지 후보 Col에 대한 양 예측 가중 인덱스 bcwIdxCol는 0으로 설정된다.
3. 절 8.5.2.11에 명시된 시간적 루마 움직임 벡터 예측을 위한 유도 프로세스는 루마 위치 ( xCb, yCb ), 루마 코딩 블록 너비 cbWidth, 루마 코딩 블록 높이 cbHeight 및 변수 refIdxL0Col를 입력으로 하여 호출되고, 출력은 사용 가능성 플래그 availableFlagL0Col 및 시간적 움직임 벡터 mvL0Col이다. 변수 availableFlagCol, predFlagL0Col 및 predFlagL1Col은 다음과 같이 유도된다.
availableFlagCol = availableFlagL0Col (8-263)
predFlagL0Col = availableFlagL0Col (8-264)
predFlagL1Col = 0 (8-265)
4. slice_type이 B이면, 절  8.5.2.11에 명시된 시간적 루마 움직임 벡터 예측을 위한 유도 프로세스는 루마 위치 ( xCb, yCb ), 루마 코딩 블록 너비 cbWidth, 루마 코딩 블록 높이 cbHeight 및 변수 refIdxL1Col를 입력으로 하여 호출되고, 사용가능성 플래그 availableFlagL1Col 및 시간적 움직임 벡터 ctor mvL1Col를 출력으로 한다. 변수 availableFlagCol 및 predFlagL1Col는 다음과 같이 유도된다.
availableFlagCol = availableFlagL0Col  | |  availableFlagL1Col (8-266)
predFlagL1Col = availableFlagL1Col (8-267)
5. 머지 후보 리스트인 mergeCandList는 다음과 같이 구성된다.
i = 0
if( availableFlagA1 )
mergeCandList[ i++ ] = A1
if( availableFlagB1 )
mergeCandList[ i++ ] = B1
if( availableFlagB0 )
mergeCandList[ i++ ] = B0 (8-268)
if( availableFlagA0 )
mergeCandList[ i++ ] = A0
if( availableFlagB2 )
mergeCandList[ i++ ] = B2
if( availableFlagCol )
mergeCandList[ i++ ] = Col
6. 변수 numCurrMergeCand 및 numOrigMergeCand은 mergeCandList의 머지 후보의 수와 동일하게 설정된다.
7. numCurrMergeCand이 (MaxNumMergeCand - 1) 미만이고 NumHmvpCand이 0보다 크면, 다음이 적용된다.
- 8.5.2.6에 명시된 히스토리 기반 머지 후보의 유도 프로세스는 mergeCandList 및 numCurrMergeCand를 입력으로 하여 호출되고, 변경된 mergeCandList 및 numCurrMergeCand를 출력으로 한다.
- numOrigMergeCand는 numCurrMergeCand와 동일하게 설정된다.
8. numCurrMergeCand이 MaxNumMergeCand 미만이고 1보다 크면, 다음이 적용된다.
- 절 8.5.2.4에 명시된 페어와이즈 평균 머지 후보를 위한 유도 프로세스는 mergeCandList, 참조 인덱스 refIdxL0N 및 refIdxL1N, 예측 리스트 활용 플래그 predFlagL0N 및 predFlagL1N, mergeCandList의 모든 후보 N의 움직임 벡터 mvL0N 및 mvL1N, 그리고 numCurrMergeCand를 입력으로 하고, 출력은 mergeCandList, numCurrMergeCand, 참조 인덱스 refIdxL0avgCand 및 refIdxL1avgCand, 예측 리스트 활용 플래그 predFlagL0avgCand 및 predFlagL1avgCand, 그리고 mergeCandList에 추가되는 후보 avgCand의 움직임 벡터 mvL0avgCand 및 mvL1avgCand에 할당된다. mergeCandList에 추가되는 후보 avgCand의 양 예측 가중 인덱스 bcwIdx는 0과 동일하게 설정된다.
- numOrigMergeCand 는 numCurrMergeCand과 동일하게 설정된다.
9. 절 8.5.2.5에서 명시된 제로 움직임 벡터 머지 후보를 위한 유도 프로세스는 mergeCandList, 참조 인덱스 refIdxL0N 및 refIdxL1N, 예측 리스트 활용 플래그 predFlagL0N 및 predFlagL1N, mergeCandList에서 모든 후보 N의 움직임 벡터 mvL0N 및 mvL1N, 그리고 numCurrMergeCand를 입력으로 하여 호출된다. 그리고, 출력은 mergeCandList, numCurrMergeCand, 참조 인덱스 refIdxL0zeroCandm 및 refIdxL1zeroCandm, 예측 리스트 활용 플래그 predFlagL0zeroCandm 및 predFlagL1zeroCandm 그리고 mergeCandList에 추가된 모든 새로운 후보 zeroCandm 의 움직임 벡터 mvL0zeroCandm 및 mvL1zeroCandm에 할당된다. mergeCandList 에 추가되는 모든 새로운 후보 zeroCandm 의 양 예측 가중 인덱스 bcwIdx는 0과 동일하게 설정된다. 추가되는 후보의 수인 numZeroMergeCand는 ( numCurrMergeCand - numOrigMergeCand )와 동일하게 설정된다. numZeroMergeCand이 0보다 크면, m은 0에서 numZeroMergeCand - 1 범위 내이다.
10. 다음 할당에서 X는 0 혹은 1이고, 머지 후보 리스트 mergeCandList의 위치 merge_idx[ xCb ][ yCb ]에서 N이 후보로 만들어 진다. ( N = mergeCandList[ merge_idx[ xCb ][ yCb ] ] ):
refIdxLX = refIdxLXN (8-269)
predFlagLX[ 0 ][ 0 ] = predFlagLXN (8-270)
mvLX[ 0 ][ 0 ][ 0 ] = mvLXN[ 0 ] (8-271)
mvLX[ 0 ][ 0 ][ 1 ] = mvLXN[ 1 ] (8-272)
bcwIdx = bcwIdxN (8-273)
11. mmvd_merge_flag[ xCb ][ yCb ]이 1이면, 다음이 적용된다.
- 8.5.2.7에서 명시된 머지 움직임 벡터 차이를 위한 유도 프로세스는 루마 위치 ( xCb, yCb ), 참조 인덱스 refIdxL0, refIdxL1, 예측 리스트 활용 플래그 predFlagL0[ 0 ][ 0 ], predFlagL1[ 0 ][ 0 ]를 입력으로, 움직임 벡터 차이 mMvdL0 및 mMvdL1을 출력으로 하여 호출된다.
- 움직임 벡터 차이 mMvdLX는 0 혹은 1인 X에 대하여 머지 움직임 벡터 mvLX에 다음과 같이 추가된다.
mvLX[ 0 ][ 0 ][ 0 ] += mMvdLX[ 0 ] (8-274)
mvLX[ 0 ][ 0 ][ 1 ] += mMvdLX[ 1 ] (8-275)
mvLX[ 0 ][ 0 ][ 0 ] = Clip3( -217, 217 - 1, mvLX[ 0 ][ 0 ][ 0 ] ) (8-276)
mvLX[ 0 ][ 0 ] [ 1 ] = Clip3( -217, 217 - 1, mvLX[ 0 ][ 0 ][ 1 ] ) (8-277)
2.2.5 MMVD
일부 실시예에서, UMVE(ultimate motion vector expression, MMVD로도 알려짐)이 존재한다. UMVE는 스킵 혹은 머지 모드의 움직임 벡터 표현 방법으로 사용된다.
UMVE는 VVC에서의 정규 머지 후보 리스트 내에 포함된 것과 같은 머지 후보를 재사용한다. 머지 후보들 중에서 베이스 후보가 선택될 수 있고, 제안된 움직임 벡터 표현 방법에 의해서 추가적으로 확대된다.
UMVE는 새로운 움직임 벡터 차이(MVD) 표현 방법을 제공하는데, 여기에서는 시작점, 움직임 크기 및 움직임 방향이 MVD를 나타내기 위하여 사용된다.
일부 실시예에서, 머지 후보 리스트는 있는 그대로 사용된다. 그러나 기본 머지 유형(MRG_TYPE_DEFAULT_N)인 후보만이 UMVE의 확장을 위해 고려된다.
베이스 후보 인덱스는 시작점을 규정한다. 베이스 후보 인덱스는 리스트 내의 후보들 중 최선의 후보를 다음과 같이 표시한다.
테이블 4. 베이스 후보 IDX
Figure pct00015
베이스 후보의 개수가 1이면, 베이스 후보 IDX는 시그널링되지 않는다.
거리 인덱스는 움직임 크기 정보이다. 거리 인덱스는 시작 포인트 정보로부터의 미리 규정된 거리를 표시한다. 미리 규정된 거리는 다음과 같다:
테이블 5. 거리 IDX
Figure pct00016
방향 인덱스는 시작점에 대한 MVD의 방향을 나타낸다. 방향 인덱스는 아래 표시된 바와 같은 네 개의 방향을 표시할 수 있다.
테이블 6. 방향 IDX
Figure pct00017
UMVE 플래그는 스킵 플래그 또는 머지 플래그를 전송한 직후에 시그널링된다. 스킵 또는 머지 플래그가 참이면, UMVE 플래그는 파싱된다. UMVE 플래그가 1과 같으면, UMVE 신택스가 파싱된다. 하지만, 1이 아니면, AFFINE(어파인) 플래그가 파싱된다. AFFINE 플래그가 1과 같으면, 즉 AFFINE 모드이지만 1 이 아니면, 스킵/머지 인덱스가 VTM의 스킵/머지 모드에 대해서 파싱된다.
UMVE 후보에 기인한 추가적인 라인 버퍼가 필요하지 않다. 그 이유는 소프트웨어의 스킵/머지 후보가 베이스 후보로서 직접적으로 사용되기 때문이다. 입력 UMVE 인덱스를 사용하면, MV에 대한 보충(supplement)이 움직임 보상 직후에 판정된다. 이것을 위해서 긴 라인 버퍼를 유지할 필요가 없다.
현재 공통 테스트 조건에서, 머지 후보 리스트 내의 제1 또는 제2 머지 후보 중 어느 하나가 베이스 후보로서 선택될 수 있다.
UMVE는 MMVD (Merge with MV Difference)라고도 알려져 있다.
2.2.6 결합 인트라-인터 예측(Combined intra-inter prediction, CIIP)
일부 실시예에서, 다중 가설 예측(multi-hypothesis prediction)이 제안되고, 여기에서는 결합 인트라 및 인터 예측이 여러 가설을 생성하기 위한 하나의 방식이다.
다중 가설 예측이 인트라 모드를 개선하기 위하여 적용되는 경우, 다중 가설 예측은 하나의 인트라 예측 및 하나의 머지 인덱싱된 예측을 결합한다. 머지 CU에서는, 하나의 플래그가 참인 경우 인트라 후보 리스트로부터 하나의 인트라 모드를 선택하기 위해서, 해당 플래그가 머지 모드에 대해서 시그널링된다. 루마 성분에 대하여, 인트라 후보 리스트는 오직 하나의 인트라 예측 모드, 즉 플래너(planar) 모드로부터 유도된다. 인트라 및 인터 예측으로부터의 예측 블록에 적용된 가중치는 두 개의 이웃하는 블록(A1 및 B1)의 코딩된 모드(인트라 또는 비-인트라)에 의해 결정된다.
2.2.7 서브블록 기반 기술에 대한 머지
모든 서브블록 관련 움직임 후보들이 비-서브 블록 머지 후보에 대한 정규 머지 리스트에 추가되어 별개의 머지 리스트 내에 포함되는 것이 제안된다.
서브블록 관련 움직임 후보는 '서브블록 머지 후보 리스트(sub-block merge candidate list)'이라고 불리는 별개의 머지 리스트에 포함된다.
일 예로서, 서브 블록 머지 후보 리스트는 ATMVP 후보 및 어파인 머지 후보를 포함한다.
서브블록 머지 후보 리스트는 다음 순서로 후보로 채워진다:
1. ATMVP 후보 (사용 가능하거나 사용 불가능할 수 있음);
2. 어파인 머지 리스트 (상속된 어파인 후보; 및 구성된 어파인후보를 포함함)
3.제로 MV 4-파라미터 어파인 모델로서의 패딩
2.2.7.1 ATMVP (즉, Sub-block Temporal Motion Vector Predictor, SbTMVP)
ATMVP의 기본적인 아이디어는 하나의 블록에 대하여 다수의 세트의 시간적 움직임 벡터 예측자를 유도하는 것이다. 각각의 서브블록에는 한 세트의 움직임 정보가 할당된다. ATMVP 머지 후보가 생성되면, 움직임 보상이 전체 블록 레벨 대신에 8x8 레벨에서 이루어진다.
현재 설계에서, ATMVP는 CU 내 서브 CU의 움직임 벡터를 하기 두 서브 섹션들에서 각각 설명되는 두 단계로 예측한다.
2.2.7.1.1 초기화된 움직임 벡터의 유도
초기화된 움직임 벡터는 tempMv로 지칭된다. 블록 A1이 사용 가능 하나 인트라 코딩 되지 않은 경우(예를 들어, 인터 모드 혹은 IBC 모드로 코딩됨) 초기화된 움직임 벡터를 유도하기 위해 다음이 적용된다.
- 하기의 모든 조건들이 참이면, tempMv는 mvL1A1 로 표시된 리스트 1의 블록 A1의 움직임 벡터와 동일하게 설정된다
- 리스트 1의 참조 픽처 인덱스가 사용 가능 하고(-1과 동일하지 않음), 동일위치 픽처와 동일한 POC 값을 갖는다. (예를 들어, DiffPicOrderCnt(ColPic, RefPicList[ 1 ][refIdxL1A1])는 0과 동일)
- 모든 참조 픽처는 현재 픽처와 비교하여 더 큰 POC를 갖지 않는다. (예를 들어, 현재 슬라이스의 모든 참조 픽처 리스트의 모든 픽처 aPic에 대해 DiffPicOrderCnt(aPic, currPic)이 0 이하이다)
- 현재 슬라이스는 B 슬라이스와 동일하다.
- collocated_from_l0_flag 는 0이다.
- 그 외의 경우 하기의 모든 조건들이 참이면, tempMv는 mvL0A1 로 표시되는 리스트 0으로부터의 블록 A1의 움직임 벡터와 동일하게 설정된다.
- 리스트 0의 참조 픽처 인덱스가 사용 가능하다. (-1이 아니다),
- 동일 위치 픽처와 동일한 POC 값을 갖는다 (e.g., DiffPicOrderCnt(ColPic, RefPicList[ 0 ][refIdxL0A1])이 0이다).
- 그 외의 경우, 제로 움직임 벡터가 초기화된 MV로 사용된다.
대응 블록(현재 블록의 중심 위치에 라운딩된 MV를 더한 상태에서 필요에 따라 특정 범위에 있도록 클리핑됨) 는 초기화된 움직임 벡터와 함께 슬라이스 헤더에서 시그널링된 동일위치 픽처에서 식별된다.
블록이 인터 코딩되면, 두 번째 단계로 이동한다. 그 외의 경우, ATMVP 후보는 사용 가능하지 않은 것으로 설정된다.
2.2.7.1.2 서브-CU움직임 유도
두 번째 단계는 현재 CU를 서브 CU로 분할하고, 동일 위치 픽처에서 각 서브 CU에 대응되는 블록으로부터 각 서브 CU의 움직임 정보를 획득하는 것이다.
서브 CU에 대한 대응 블록이 인터 모드로 코딩되면, 움직임 정보는 기존의 TMVP 프로세스와 다르지 않은 동일위치 MV에 대한 유도 프로세스를 호출함으로써 현재 서브 CU의 최종 움직임 정보를 유도하는 데 활용된다. 일반적으로, 대응 블록이 단일 예측 혹은 양 예측을 위한 대상 리스트 X로부터 예측되면, 움직임 벡터가 활용된다. 반면, 단일 혹은 양 예측을 위한 리스트 Y(Y=1-X)로부터 예측되고 NoBackwardPredFlag 이 1이면, 리스트 Y에 대한 MV가 활용된다. 그 외의 경우에는, 움직임 후보를 찾을 수 없을 수 있다.
초기화된 MV 및 현재 서브 CU의 위치에 의해 식별된 동일위치 픽처의 블록이 인트라 또는 IBC 코딩된 경우, 또는 위에서 설명된 바와 같이 움직임 후보를 찾을 수 없는 경우, 다음이 추가로 적용된다.
동일 위치 픽처 Rcol 의 움직임 필드를 확보하는 데 사용되는 움직임 벡터는 MVcol로 표현된다. MV 스케일링으로 인한 영향을 최소화하기 위해, MVcol 를 유도하는 데 사용되는 공간적 후보 리스트의 MV는 다음과 같은 방식으로 선택된다. 후보 MV의 참조 픽처가 동일 위치 픽처인 경우, 이 MV는 선택되고 별다른 스케일링 없이MVcol 로 사용된다. 그 외의 경우, 동일 위치 픽처에 가장 가까운 참조 픽처를 갖는 MV는 스케일링을 통해 MVcol 를 유도하기 위해 선택된다.
동일 위치 움직임 벡터 유도 프로세스에 대한 예시적인 디코딩 프로세스는 다음과 같이 설명된다.
8.5.2.12 동일위치 움직임 벡터를 위한 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 현재 코딩 블록을 특정하는 변수 currCb,
- ColPic에 의해 특정되는 동일 위치 픽처 내의 동일 위치 코딩 블록을 특정하는 변수 colCb,
- ColPic에 의해 특정되는 동일 위치 픽처의 좌측 상단 루마 샘플에 대해 colCb로 특정되는 동일 위치 루마 코딩 블록의 좌측 상단 샘플을 특정하는 루마 위치 ( xColCb, yColCb ),
- X는 0 혹은 1인 참조 인덱스 refIdxLX,
- 서브블록 시간적 머지 후보를 지시하는 플래그 sbFlag.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 움직임 벡터 예측mvLXCol,
- 사용 가능성 플래그 availableFlagLXCol.
변수 currPic는 현재 픽처를 특정한다.
배열 predFlagL0Col[ x ][ y ], mvL0Col[ x ][ y ] 및 refIdxL0Col[ x ][ y ]는 각각 ColPic에 의해 특정되는 동일위치 픽처의 PredFlagL0[ x ][ y ], MvDmvrL0[ x ][ y ] 및 RefIdxL0[ x ][ y ]와 동일하게 특정되고, 배열 predFlagL1Col[ x ][ y ], mvL1Col[ x ][ y ] 및 refIdxL1Col[ x ][ y ]는 각각 ColPic에 의해 특정되는 동일위치 픽처의 PredFlagL1[ x ][ y ], MvDmvrL1[ x ][ y ] 및 RefIdxL1[ x ][ y ]와 동일하게 특정된다.
변수 mvLXCol 및 availableFlagLXCol는 하기와 같이 유도된다.
- colCb이 인트라 혹은 IBC 예측 모드로 코딩되면, mvLXCol의 두 구성요소 모두는 0으로 설정되고, availableFlagLXCol는 0과 동일하게 설정된다.
- 그 외의 경우, 움직임 벡터 mvCol, 참조 인덱스 refIdxCol 및 참조 리스트 식별자 listCol는 하기와 같이 유도된다.
- sbFlag이 0이면, availableFlagLXCol는 1로 설정되고, 다음이 적용된다.
- predFlagL0Col[ xColCb ][ yColCb ]이 0이면, mvCol, refIdxCol 및 listCol은 각각 mvL1Col[ xColCb ][ yColCb ], refIdxL1Col[ xColCb ][ yColCb ] 및 L1와 동일하게 설정된다.
- 그 외에, predFlagL0Col[ xColCb ][ yColCb ]는 1이고, predFlagL1Col[ xColCb ][ yColCb ]는 0인 경우, mvCol, refIdxCol 및 listCol는 각각 mvL0Col[ xColCb ][ yColCb ], refIdxL0Col[ xColCb ][ yColCb ] 및 L0와 동일하게 설정된다.
- 그 외의 경우 (predFlagL0Col[ xColCb ][ yColCb ]이 1이고 predFlagL1Col[ xColCb ][ yColCb ]이 1인 경우), 다음 할당이 이루어진다.
- NoBackwardPredFlag이 1인 경우, mvCol, refIdxCol 및 listCol는 각각 mvLXCol[ xColCb ][ yColCb ], refIdxLXCol[ xColCb ][ yColCb ] 및 LX와 동일하게 설정된다.
- 그 외의 경우, mvCol, refIdxCol 및 listCol는 각각 mvLNCol[ xColCb ][ yColCb ], refIdxLNCol[ xColCb ][ yColCb ] 및 LN와 동일하게 설정되되, N은 collocated_from_l0_flag의 값이다.
- 그 외의 경우 (sbFlag이 1인 경우), 다음이 적용된다.
- PredFlagLXCol[ xColCb ][ yColCb ]이 1이면, mvCol, refIdxCol, 및 listCol은 각각 mvLXCol[ xColCb ][ yColCb ], refIdxLXCol[ xColCb ][ yColCb ], 및 LX과 동일하게 설정되고, availableFlagLXCol는 1로 설정된다.
- 그 외의 경우 (PredFlagLXCol[ xColCb ][ yColCb ]이 0인 경우), 다음이 적용된다.
- 현재 슬라이스의 모든 참조 픽처 리스트에서 모든 픽처 aPic에 대해 DiffPicOrderCnt( aPic, currPic )이 0 이하이고 PredFlagLYCol[ xColCb ][ yColCb ]이 1과 동일하면, mvCol, refIdxCol, 및 listCol은 각각 mvLYCol[ xColCb ][ yColCb ], refIdxLYCol[ xColCb ][ yColCb ] 및 LY와 동일하게 설정되고, 여기서 Y는 !X와 동일하고, 여기서 X는 이 프로세스가 호출되는 X의 값이며, availableFlagLXCol는 1로 설정된다.
- mvLXCol의 모든 구성요소는 0으로 설정되고 availableFlagLXCol도 0으로 설정된다.
- availableFlagLXCol이 참(TRUE)인 경우, mvLXCol 및 availableFlagLXCol는 다음과 같이 유도된다.
- LongTermRefPic( currPic, currCb, refIdxLX, LX )이 LongTermRefPic( ColPic, colCb, refIdxCol, listCol )와 동일하지 않은 경우, mvLXCol의 모든 구성요소는 0과 동일하게 설정되고 availableFlagLXCol도 0과 동일하게 설정된다.
- 그 외의 경우, 변수 availableFlagLXCol는 1과 동일하게 설정되고, refPicList[ listCol ][ refIdxCol ]은 ColPic에 의해 특정된 동일 위치 픽처에서 코딩 블록 colCb를 포함하는 슬라이스의 참조 픽처 리스트 listCol에서 참조 인덱스 refIdxCol를 갖는 픽처로 설정된다. 그리고 다음이 적용된다.
colPocDiff = DiffPicOrderCnt( ColPic, refPicList[ listCol ][ refIdxCol ] ) (8-402)
currPocDiff = DiffPicOrderCnt( currPic, RefPicList[ X ][ refIdxLX ] ) (8-403)
- 절 8.5.2.15에 명시된 동일 위치 움직임 벡터에 대한 시간적 움직임 버퍼 압축 프로세스는 mvCol을 입력으로, 변경된 mvCol을 출력으로 하여 호출된다.
- RefPicList[ X ][ refIdxLX ]이 장기 참조 픽처이거나 colPocDiff이 currPocDiff와 동일하면, mvLXCol은 다음과 같이 유도된다.
mvLXCol = mvCol (8-404)
- 그 외의 경우, mvLXCol는 움직임 벡터 mvCol의 스케일링된 버전으로서 다음과 같이 유도된다.
tx = ( 16384 + ( Abs( td )  >>  1 ) ) / td (8-405)
distScaleFactor = Clip3( -4096, 4095, ( tb * tx + 32 )  >>  6 ) (8-406)
mvLXCol =  Clip3( -131072, 131071, (distScaleFactor * mvCol +
128 - ( distScaleFactor * mvCol  >= 0 ) )  >>  8 ) ) (8-407)
여기서 td 및 슈는 하기와 같이 유도된다.
td = Clip3( -128, 127, colPocDiff ) (8-408)
tb = Clip3( -128, 127, currPocDiff ) (8-409)
2.2.8 움직임 정보의 개선
2.2.8.1 디코더 측 움직임 벡터 개선(Decoder-side Motion Vector Refinement, DMVR)
양 예측 동작에서, 한 블록 영역의 예측을 위해, 리스트0(list0)의 움직임 벡터(MV) 및 리스트1(list1)의 MV를 사용하여 형성되는 두 예측 블록은 각각 단일 예측 신호를 형성하기 위해 결합된다. 디코더 측 움직임 벡터 개선(decoder-side motion vector refinement, DMVR) 방법에서, 양 예측의 두 움직임 벡터들이 더 개선된다.
VVC의 DMVR에서, 리스트 0 및 리스트 1 간의 MVD 미러링은 도 19에 나타난 바와 같이 가정되고 양 방향 매칭은 예를 들어, 여러 MVD 후보 가운데 최적의 MVD를 찾아 MV를 개선하기 위해 수행된다. 두 개의 참조 픽처 리스트에 대한 MV를 MVL0(L0X, L0Y), 및 MVL1(L1X, L1Y)로 표현한다. 비용 함수(예를 들어, SAD)를 최소화할 수 있는 (MvdX, MvdY)로 표현된 리스트 0에 대한 MVD는 최적의 MVD로서 정의된다. SAD 함수의 경우, 리스트 0 참조 픽처에서 움직임 벡터 (L0X+MvdX, L0Y+MvdY)로 유도된 리스트 0의 참조 블록과 리스트 1 참조 픽처에서 움직임 벡터 (L1X-MvdX, L1Y-MvdY)로 유도된 리스트 1의 참조 블록 간의 SAD로 정의된다.
움직임 벡터 개선 프로세스는 두 번 반복될 수 있다. 각 반복에서 최대 6개의 MVD(정수화소 정밀도로)가 도 20에 도시된 바와 같이 두 단계로 검사될 수 있다. 첫 번째 단계로서, MVD (0, 0), (-1, 0), (1, 0), (0, -1), (0, 1)가 검사된다. 두 번째 단계로서, MVD (-1, -1), (-1, 1), (1, -1) 혹은 (1, 1) 중 하나가 선택될 수 있고 더 검사될 수 있다. 함수 Sad(x, y)가 MVD (x, y)의 SAD 값을 리턴한다고 가정한다. 두 번째 단계에서 검사되는 (MvdX, MvdY)로 표현되는 MVD는 하기와 같이 결정된다.
MvdX = -1;
MvdY = -1;
If (Sad(1, 0) < Sad(-1, 0))
MvdX = 1;
If (Sad(0, 1) < Sad(0, -1))
MvdY = 1;
첫 번째 반복에서 시작점은 시그널링된 MV이고, 두 번째 반복에서 시작점은 시그널링된 MV와 첫 번째 반복에서 선택된 최상의 MVD이다. DMVR은 하나의 참조 픽처가 선행 픽처이고 다른 참조 픽처가 후행 픽처이고, 두 참조 픽처가 현재 픽처로부터 동일한 POC(picture order count) 거리에 있는 경우에만 적용된다.
DMVR의 프로세스를 더욱 단순화하기 위해, 일부 실시예에서 채택된 DMVR 설계는 다음과 같은 주요 특징을 갖는다.
- 리스트0 및 리스트 1 간의 (0,0) 위치 SAD이 임계값보다 작은 경우 조기 종료.
- 리스트0 및 리스트 1 간의 SAD가 일부 위치에서 0인 경우 조기 종료.
- DMVR을 위한 블록 크기: W*H>=64 && H>=8, 여기서 W 및 H은 블록의 너비 및 높이이다.
- CU 크기>16*16의 DMVR을 위해 CU를 다수의 16x16 서브블록으로 분할한다. CU의 너비 혹은 높이가 16보다 큰 경우, 수직 혹은 수평 방향으로만 분할한다.
- 참조 블록 크기 (W+7)*(H+7) (루마의 경우).
- 25 개의 점들의 SAD 기반 정수 픽셀 탐색(예를 들어, (+-) 2 개선 탐색 범위, 단일 단계)
- 양선형 보간 기반 DMVR.
- "파라메트릭 오류 표면 방정식" 기반 서브 픽셀 개선. 이 과정은 마지막 MV 개선 반복에서 최소 SAD 비용이 0이 아니고 최상의 MVD가 (0, 0)인 경우에만 수행된다.
- 참조 블록 패딩에 의한 루마/크로마 MC (필요한 경우).
- MC 및 TMVP에 대해서만 사용되는 개선된 MV
2.2.8.1.1 DMVR 사용
하기의 조건들이 모두 참이면, DMVR이 활성화될 수 있다.
- SPS 내의 DMVR 활성화 플래그 (예를 들어, sps_dmvr_enabled_flag)는 1이다.
- TPM 플래그, 인터-어파인 플래그 및 서브블록 머지 플래그(ATMVP 혹은 어파인 머지), MMVD 플래그는 모두 0과 동일하다.
- 머지 플래그는 1이다.
- 현재 블록은 양 예측되고, 리스트 1의 현재 픽처 및 참조 픽처간의 POC 거리가 리스트 0의 참조 픽처와 현재 픽처 간의 POC 거리와 동일하다.
- 현재 CU 높이는 8 이상이다.
- 루마 샘플의 수(CU 너비*높이)는 64 이상이다.
2.2.8.1.2 "파라메트릭 오류 표면 방정식" 기반 서브 픽셀 개선
이 방법은 다음과 같이 요약된다.
1. 매개변수 오차 표면 맞춤(parametric error surface fit)은 중심 위치가 주어진 반복에서 최상의 비용 위치인 경우에만 계산된다.
2. 중심 위치 비용과 중심으로부터 (-1,0), (0,-1), (1,0) 및 (0,1) 위치에서의 비용은 하기 형태의 2-D 파라볼릭 오류 표면 방정을 맞추는 데 사용된다.
Figure pct00018
여기서 (
Figure pct00019
는 가장 비용이 적게 드는 위치에 해당하고, C는 최소 비용 값에 대응된다. 5개의 미지수를 갖는 5개의 방정식을 풀면, (
Figure pct00020
는 다음과 같이 계산된다.
Figure pct00021
(
Figure pct00022
는 나눗셈이 수행되는 정밀도(예를 들어, 계산되는 몫의 비트 수)를 조정하여 필요한 서브 픽셀 정밀도로 계산될 수 있다. 1/16 픽셀 정확도의 경우 몫의 절대값에서 4비트만 계산하면 되며, 이는 CU당 필요한 두 분할의 고속 시프트된 감산 기반 구현에 적합하다.
3. 계산된 (
Figure pct00023
는 서브 픽셀 정확 개선 델타 MV를 획득하기 위해 정수 거리 개선 MV에 추가된다.
2.3 인트라 블록 복사(Intra block copy)
인트라 블록 복사(IBC), 일명 현재 픽처 참조는 HEVC 스크린 콘텐츠 코딩 확장(HEVC-SCC) 및 현재 VVC 테스트 모델(VTM-4.0)에서 채택되었다. IBC는 움직임 보상의 개념을 인터 프레임 코딩에서 인트라 프레임 코딩으로 확장한다. 도 21에 도시된 바와 같이, 현재 블록은 IBC가 적용될 때 동일한 픽처 내의 참조 블록에 의해 예측된다. 참조 블록의 샘플은 현재 블록이 코딩되거나 디코딩되기 전에 이미 복원되어 있어야 한다. IBC는 대부분의 카메라 캡처된 시퀀스에 대해 그다지 효율적이지 않지만 화면 콘텐츠에 대해 상당한 코딩 이득을 보여준다. 그 이유는 화면 콘텐츠 픽처에서 아이콘, 텍스트 문자 등 반복되는 패턴이 많기 때문이다. IBC는 이러한 반복 패턴 사이의 중복성을 효과적으로 제거할 수 있다. HEVC-SCC에서 인터 코딩된 코딩 유닛(CU)은 현재 픽처를 그것의 참조 픽처로 선택하는 경우에 IBC를 적용할 수 있다. 이 경우 MV는 블록 벡터(BV)로 이름이 바뀌고 BV는 항상 정수 픽셀 정밀도를 갖는다. 메인 프로파일 HEVC와 호환되도록 현재 픽처는 DPB(Decoded Picture Buffer)에서 "장기" 참조 픽처로 표시된다. 유사하게, 다시점/3D 비디오 코딩 표준에서 시점간 참조 픽처는 "장기" 참조 픽처로도 표시된다는 점에 유의해야 한다.
참조 블록을 찾기 위한 BV에 이어, 참조 블록을 복사함으로써 예측이 생성될 수 있다. 잔차는 원래 신호에서 참조 픽셀을 감산하여 획득될 수 있다. 그런 다음 다른 코딩 모드에서와 같이 변환 및 양자화가 적용될 수 있다.
그러나, 참조 블록이 픽처 외부에 있거나, 현재 블록과 중첩되거나, 복원된 구역 외부, 또는 일부 제약에 의해 제한된 유효 구역 외부에 있는 경우, 일부 또는 모든 픽셀 값이 정의되지 않는다. 기본적으로 이러한 문제를 처리하는 두 가지 솔루션이 있다. 하나는 예를 들어, 비트스트림 규격으로서 그러한 상황을 허용하지 않는 것이다. 다른 하나는 정의되지 않은 픽셀 값에 패딩을 적용하는 것이다. 다음 서브 세션에서는 솔루션에 대해 자세히 설명한다.
2.3.1 VVC 테스트 모델(VTM4.0)에서 IBC
현재 VVC 테스트 모델에서, 예를 들어 VTM-4.0 설계에서 전체 참조 블록은 현재 코딩 트리 유닛(CTU)와 함께 있어야 하며 현재 블록과 중첩되지 않아야 한다. 따라서 참조 또는 예측 블록을 패딩할 필요가 없다. IBC 플래그는 현재 CU의 예측 모드로 코딩된다. 따라서 각 CU에 대해 MODE_INTRA, MODE_INTER 및 MODE_IBC의 세 가지 예측 모드가 있다.
2.3.1.1 IBC 머지 모드
IBC 머지 모드에서, IBC 머지 후보 리스트의 엔트리를 가리키는 인덱스는 비트스트림에서 파싱된다. IBC 머지 리스트의 구성은 다음 단계 순서에 따라 요약될 수 있다.
단계 1: 공간적 후보의 유도
단계 2: HMVP 후보의 삽입
단계 3: 페어와이즈 평균 후보의 삽입
공간적 머지 후보들 유도 시, 최대 4개의 머지 후보들이 도 2에 도시된 위치들에 있는 후보들 가운데에서 선택된다. 유도 순서는 A1, B1, B0, A0 및 B2 순이다. 위치 A1, B1, B0, A0의 어느 한 PU가 사용될 수 없는 경우(예를 들어, 다른 슬라이스 또는 타일에 속하기 때문) 또는 IBC 모드로 코딩되지 않은 경우에만, 위치 B2가 고려된다. 위치 A1의 후보가 추가된 후 나머지 후보들의 삽입은 중복성 검사를 거친다. 이를 통해, 동일한 움직임 정보를 가진 후보가 리스트에서 제외되어 코딩 효율이 향상된다.
공간적 후보의 삽입 후, IBC 머지 리스트 크기가 최대 IBC 머지 리스트 크기보다 여전히 작은 경우, HMVP 테이블로부터의 IBC 후보가 삽입될 수 있다. HMVP 후보를 삽입할 때 중복성 검사가 수행된다.
결론적으로, 페어와이즈 평균 후보는 IBC 머지 리스트에 삽입된다.
머지 후보에 의해 식별된 참조 블록이 픽처의 외부에 있거나, 현재 블록과 중첩되거나, 복원 구역의 외부에 있거나, 일부 제약에 의해 제한되는 유효 구역의 외부에 있는 경우, 머지 후보는 유효하지 않은 머지 후보로 지칭된다.
유효하지 않은 머지 후보는 IBC 머지 리스트에 삽입될 수 있음을 주의해야 한다.
2.3.1.2 IBC AMVP 모드
IBC AMVP 모드에서, IBC AMPV 리스트의 엔트리를 가리키는 AMVP 인덱스는 비트스트림으로부터 파싱된다. IBC AMVP 리스트의 구성은 하기 단계들의 순서에 따라 요약될 수 있다.
단계 1: 공간적 후보의 유도
- 사용 가능한 후보가 발견될 때까지 A0, A1 를 확인한다.
- 사용 가능한 후보가 발견될 때까지 B0, B1, B2 를 확인한다.
단계 2: HMVP 후보의 삽입
단계 3: 제로 후보의 삽입
공간적 후보의 삽입 후, IBC AMVP 리스트 크기가 여전히 최대 IBC AMVP 리스트 크기보다 작은 경우, HMVP 테이블로부터의 IBC 후보가 삽입될 수 있다.
마지막으로, 제로 후보가 IBC AMVP 리스트에 삽입된다.
2.3.1.3 크로마 IBC 모드
현재 VVC에서, 크로마 IBC 모드에서의 움직임 보상이 서브 블록 레벨에서 수행된다. 크로마 블록은 여러 서브 블록으로 분할될 것이다. 각각의 서브 블록은 대응하는 루마 블록이 블록 벡터를 가지는지 결정하고, 이것이 존재한다면 유효성을 결정한다. 현재 VTM에는 인코더 제약이 존재하는데, 여기에서 현재 크로마 CU 내의 모든 서브 블록이 유효한 루마 블록 벡터를 가진다면 크로마 IBC 모드가 테스트될 것이다. 예를 들어, YUV 420 비디오 상에서, 크로마 블록은 NxM이고, 그러면 동일 위치 (collocated) 루마 영역은 2Nx2M이다. 크로마 블록의 서브 블록 크기는 2x2이다. 크로마 mv 유도를 수행한 후 블록 복사 프로세스를 수행하기 위한 여러 단계들이 존재한다.
(1) 크로마 블록이 우선 (N >> 1)*(M >> 1) 개의 서브 블록으로 분할될 것이다.
(2) (x, y)의 좌표를 가지는 상단 좌측 샘플이 있는 각각의 서브 블록은 (2x, 2y)의 좌표를 가지는 동일한 상단-좌측 샘플을 커버하는 대응하는 루마 블록을 획득한다.
(3) 인코더는 획득된 루마 블록의 블록 벡터(bv)를 점검한다. 다음 조건 중 하나가 만족되면, bv는 유효하지 않은 것으로 여겨진다.
a. 대응하는 루마 블록의 bv가 존재하지 않는다.
b. bv에 의해 식별된 예측 블록이 아직 복원되지 않는다.
c. bv에 의해 식별된 예측 블록이 현재 블록과 부분적으로 또는 완전히 중첩된다.
(4) 서브 블록의 크로마 움직임 벡터가 대응하는 루마 서브 블록의 움직임 벡터로 설정된다.
IBC 모드는 모든 서브 블록이 유효한 bv를 발견할 경우에 인코더에서 허용된다.
2.3.2 IBC의 최근 진행 상황
2.3.2.1 단일 BV 리스트
일부 실시예에서, IBC의 머지 모드 및 AMVP 모드에 대한 BV 예측자는 다음 요소로 구성된 공통 예측자 리스트를 공유한다.
(1) 2 개의 공간적 이웃 위치 (도 2에서와 같이 A1, B1)
(2) 5 개의 HMVP 엔트리
(3) 기본적인 제로 벡터들
리스트의 후보 수는 슬라이스 헤더에서 유도된 변수에 의해 제어된다. 머지 모드의 경우 이 리스트의 처음 6개 엔트리를 사용할 수 있다. AMVP 모드의 경우 이 리스트의 처음 2개 엔트리를 사용할 수 있다. 그리고 리스트는 공유 머지 리스트 영역 요구 사항을 준수한다(SMR 내에서 동일 리스트 공유).
위에서 언급한 BV 예측자 후보 리스트에 추가하여, HMVP 후보와 기존 머지 후보(A1, B1) 간의 프루닝 동작이 단순화될 수 있다. 단순화에서 첫 번째 HMVP 후보와 공간 머지 후보만이 비교되기 때문에 최대 2 회의 프루닝 동작이 있을 수 있다.
2.3.2.2 IBC의 크기 제한
일부 실시예에서, 128x128 IBC 모드를 비활성화하기 위한 신택스 제약은 CU 크기 < 128x128에 의존하는 IBC 플래그의 존재를 만드는 이전 VTM 및 VVC 버전의 현재 비트스트림 제약 위에서 명시적으로 사용될 수 있다.
2.3.2.3 IBC의 공유 머지 리스트
디코더 복잡성을 줄이고 머지 인코딩을 지원하기 위해, 일부 실시예에서, 작은 스킵/머지 코딩된 CU의 병렬 처리를 가능하게 하기 위해 CU 분할 트리에서 하나의 조상 노드의 모든 리프 코딩 유닛(CU)에 대한 동일한 머지 후보 리스트가 공유될 수 있다. 조상 노드는 머지 공유 노드로 지칭된다. 머지 공유 노드가 리프 CU인 것처럼 가장하여 머지 공유 노드에서 공유 머지 후보 리스트가 생성된다.
보다 상세하게는, 다음이 적용될 수 있다.
- 블록이 32보다 크지 않은 루마 샘플을 갖고 2개의 4x4 자식 블록으로 분할되는 경우, 매우 작은 블록(예를 들어, 인접한 2개의 4x4 블록) 간에 머지 리스트의 공유가 사용된다.
- 블록이 32보다 큰 루마 샘플을 가지지만 분할 후 적어도 하나의 자식 블록이 임계값(32)보다 작으면 해당 분할의 모든 자식 블록은 동일한 머지 리스트(예를 들어, 16x4 또는 4x16 분할 삼진 혹은 8x8 쿼드 분할)를 공유한다.
이러한 제한은 IBC 머지 모드에만 적용된다.
3. 실시예에 의해 해결되는 문제점
하나의 블록은 IBC 모드로 코딩될 수 있다. 그러나 블록 내의 다른 서브 영역은 다른 콘텐츠를 가질 수 있다. 현재 프레임 내에서 이전에 코딩된 블록과의 상관관계를 추가로 탐색하는 방법이 연구되어야 한다.
4. 실시예
이 문서에서 IBC(인트라 블록 복사)는 현재 IBC 기술에 국한되지 않고 현재 슬라이스/타일/브릭/픽처/기타 비디오 유닛( 예를 들어, CTU 행)는 기존의 인트라 예측 방법을 제외한다.
상술한 문제를 해결하기 위해, 서브블록 기반 IBC(sbIBC) 코딩 방법이 제안된다. sbIBC에서, 현재 IBC 코딩된 비디오 블록(예를 들어, CU/PU/CB/PB)은 복수의 서브 블록으로 분할된다. 각각의 서브 블록은 비디오 블록의 크기보다 작은 크기를 가질 수 있다. 복수의 서브 블록들로부터 각각의 서브 블록에 대해, 비디오 코더는 현재 픽처/슬라이스/타일/브릭/타일 그룹에서 각각의 서브블록에 대한 참조 블록을 식별할 수도 있다. 비디오 코더는 각각의 서브 블록에 대한 움직임 파라미터를 결정하기 위해 각각의 서브 블록에 대해 식별된 참조 블록의 움직임 파라미터를 사용할 수도 있다.
또한, IBC는 단일 예측 코딩된 블록에만 적용되는 것으로 제한되지 않는다. 양 예측은 두 개의 참조 픽처가 현재 픽처 모두에 지원될 수도 있다. 또는, 현재 픽처로부터의 하나와 다른 픽처로부터의 다른 하나를 사용한 양 예측도 지원될 수 있다. 또 다른 예에서, 다중 가설도 적용될 수 있다.
아래 리스트는 일반적인 개념을 설명하기 위한 예로서 고려되어야 한다. 이러한 기술을 좁은 의미로 해석해서는 안 된다. 또한 이러한 기술은 어떤 방식으로든 결합할 수 있다. 이웃 블록 A0, A1, B0, B1 및 B2가 도 2에 도시되어 있다.
1. sbIBC에서, MxN 크기의 블록은 하나 이상의 서브블록으로 분할될 수 있다.
a. 일 예에서, 서브블록 크기는 LХK로 고정되며, 예를 들어, L=K=4이다.
b. 일 예에서, 서브블록 크기는 최소 코딩 유닛/예측 유닛/변환 유닛/ 움직임 정보 저장을 위한 유닛으로 고정된다.
c. 일 예에서, 한 블록은 다수의 서로 다른 크기 혹은 같은 크기의 서브블록으로 분할될 수 있다.
d. 일 예에서, 서브블록 크기의 표시가 시그널링될 수 있다.
e. 일 예에서, 서브 블록 크기의 표시는 예를 들어 블록 차원에 따라 블록마다 변경될 수 있다.
f. 일 예에서, 서브 블록 크기는 (N1ХminW)Х (N2ХminH)의 형태여야 하며, 여기서 minWХminH는 최소 코딩 유닛/예측 유닛/변환 유닛/움직임 정보 저장을 위한 유닛을 나타내고, N1 및 N2는 양의 정수이다.
g. 일 예에서, 서브블록 차원은 색상 포맷 및/또는 색상 성분에 의존할 수 있다.
i. 예를 들어, 서로 다른 색상 성분에 대해 서브블록 크기는 다를 수 있다.
1) 또는, 상이한 색상 성분에 대한 서브 블록 크기는 동일할 수 있다.
ii. 일 예로서, 루마 성분의 2LХ2K 서브 블록은 색상 포맷이 4:2:0인 경우 크로마 성분의 LХK 서브 블록에 해당할 수 있다.
1) 또는, 색상 포맷이 4:2:0인 경우, 루마 성분의 4개의 2LХ2K 서브 블록이 크로마 성분의 2LХ2K 서브 블록에 해당할 수 있다.
iii. 예를 들어, 루마 성분의 2LХ2K 서브 블록은 색상 포맷이 4:2:2인 경우 크로마 성분의 2LХK 서브 블록에 해당할 수 있다.
1) 또는, 색상 포맷이 4:2:2인 경우, 루마 성분의 두 개의 2LХ2K 서브 블록은 크로마 성분의 2LХ2K 서브 블록에 해당할 수 있다.
iv. 예를 들어, 루마 성분의 2LХ2K 서브 블록은 색상 포맷이 4:4:4인 경우 크로마 성분의 2LХ2K 서브 블록에 해당할 수 있다.
h. 일 예에서, 제1 색상 성분의 서브블록의 MV는 제2 색상 성분의 대응하는 한 서브블록 복수의 서브블록으로부터 유도될 수 있다.
i. 예를 들어, 제1 색상 성분의 서브 블록의 MV는 제2 색상 성분의 대응하는 복수의 서브 블록의 평균 MV로서 도출될 수 있다.
ii. 또는, 단일 트리를 사용하는 경우에도 상기 방법을 적용할 수 있다.
iii. 또는, 더 나아가, 4x4 크로마 블록과 같은 특정 블록 크기에 대해 위의 방법이 적용될 수 있다.
i. 일 예에서, 서브블록 크기는 IBC 머지/AMVP 모드와 같은 코딩된 모드에 의존할 수 있다.
j. 일 예에서, 서브블록은 삼각형/웨지렛(wedgelet)형과 같은 직사각형이 아닐 수 있다.
2. 초기화된 움직임 벡터(initMV로 표현됨)에 의한 대응 참조 블록의 식별 및 참조 블록에 따른 서브 CU의 하나 이상의 움직임 벡터 유도를 포함한 두 단계는, 적어도 한 참조 픽처가 현재 픽처와 동일한 서브 CU의 움직임 정보를 획득하는 데 활용된다.
a. 일 예로서, 참조 블록은 현재 픽처 내일 수 있다.
b. 일 예로서, 참조 블록은 참조 픽처 내일 수 있다.
i. 일 예로서, 동일 위치 참조 픽처 내일 수 있다.
ii. 일 예로서, 동일 위치 블록의 움직임 정보 혹은 동일 위치 블록의 이웃 블록을 이용하여 식별된 참조 픽처 내일 수 있다.
initMV (vx, vy)의 설정 시 단계 1.a
c. 일 예에서 init는MV는 현재 블록 또는 현재 서브 블록의 하나 이상의 이웃 블록(인접 또는 비인접)에서 유도될 수 있다.
i. 이웃 블록은 동일 픽처 내의 하나 일 수 있다.
1) 또는, 참조 픽처 내의 하나일 수 있다.
a. 예를 들어, 동일 위치 참조 픽처 내일 수 있다.
b. 예를 들어, 동일위치 블록의 움직임 정보 혹은 동일위치 블록의 이웃 블록을 사용하여 식별될 수 있다.
ii. 일 예에서, 이웃 블록 Z로부터 유도될 수 있다.
1) 예를 들어, initMV는 이웃 블록 Z에 저장된 MV와 동일하게 설정될 수 있다. 예를 들어, 이웃 블록 Z는 블록 A1일 수 있다.
iii. 일 예에서, 순서에 따라 확인된 다수의 블록들로부터 유도될 수 있다.
1) 일 예에서, 확인된 블록들 중 참조 픽처로서 현재 픽처와 연관된 제1 식별된 움직임 벡터는 initMV로 설정될 수 있다.
d. 일 예에서, initMV는 움직임 후보 리스트로부터 유도될 수 있다.
i. 일 예에서, IBC 후보 리스트에서 k 번째(예를 들어, 첫 번째) 후보로부터 유도될 수 있다.
1) 일 예에서, IBC 후보 리스트는 머지/AMVP 후보 리스트이다.
2) 일 예에서, 다른 공간적 이웃 블록을 사용하는 것과 같이 기존 IBC 머지 후보 리스트 구성 프로세스와 다른 IBC 후보 리스트가 활용될 수 있다.
ii. 일 예에서, IBC HMVP 테이블의 k 번째(예를 들어, 첫 번째) 후보로부터 유도될 수 있다.
e. 일 예에서, 현재 블록의 위치를 기반으로 파생될 수 있다.
f. 일 예에서, 현재 블록의 차원에 기초하여 유도될 수 있다.
g. 일 예에서, 기본 값으로 설정될 수 있다.
h. 일 예에서, initMV의 표시는 타일/슬라이스/픽처/브릭/CTU 행/CTU/CTB/CU/PU/TU 등과 같은 비디오 유닛 레벨로 시그널링 될 수 있다.
i. 초기 MV는 현재 블록 내의 두 개의 서로 다른 서브 블록에 대해 서로 다를 수 있다.
j. 초기 MV를 유도하는 방법은 블록에서 블록으로, 타일에서 타일로, 슬라이스에서 슬라이스 등으로 변경될 수 있다.
initMV를 사용하여 서브 CU의 대응 참조 블록 식별에 대한 단계 1.b
k. 일 예에서, initMV는 먼저 1-픽셀 정수 정밀도로 변환될 수 있고 변환된 MV는 서브-블록의 대응하는 블록을 식별하기 위해 사용될 수 있다. (vx', vy')는 변환된 MV를 나타낸다.
i. 일 예에서, (vx, vy)가 F-픽셀 인터 정밀도에 있다면, (vx', vy')로 표시되는 변환된 MV는 (vx *F, vy *F)로 설정될 수 있다(예를 들어, F = 2 또는 4).
ii. 또는, (vx', vy') 는 직접적으로 (vx, vy)와 동일하게 설정된다.
l. 한 서브 블록의 좌측 상단 위치가 (x,y)이고, 서브 블록 크기가 KxL이라고 가정한다. 서브 블록의 대응 블록은 좌표 (x + offsetX + vx', y + offsetY + vy')를 커버하는 CU/CB/PU/PB로 설정되고, offset 및 offsetY는 현재 서브블록에 대해 선택되는 좌표를 지시하는 데 활용된다.
i. 일 예에서, offset 및/혹은 offsetY는 0으로 설정된다.
ii. 일 예에서, offsetX 는 (L/2) 혹은 (L/2 +1) 혹은 (L/2 - 1)로 설정될 수 있으며, L은 서브 블록의 너비일 수 있다.
iii. 일 예에서, offsetY는 (K/2) 혹은 (K/2 +1) 혹은 (K/2 - 1)로 설정될 수 있으며, K는 서브 블록의 높이일 수 있다.
iv. 또는, 수평 및/혹은 수직 오프셋은, 예를 들어, 픽처/슬라이스/타일/브릭 경계/IBC 참조 구역 등의 내에서와 같은 범위로 더 클리핑될 수 있다.
식별된 대응 참조 블록의 움직임 정보를 사용하여 서브 블록의 움직임 벡터(subMV (subMVx, subMVy)로 표현됨) 유도에 대한 단계 2
m. 서브블록의 subMV는 대응 블록의 움직임 정보로부터 유도된다.
i. 일 예에서, 대응 블록이 현재 픽처를 가리키는 움직임 벡터를 갖는 경우, subMV는 MV와 동일하게 설정된다.
ii. 일 예에서, 대응 블록이 현재 픽처를 가리키는 움직임 벡터를 갖는 경우, subMV는 MV에 initMV를 더한 값과 동일하게 설정된다.
n. 유도된 subMV는 주어진 범위로 클리핑되거나 IBC 참조 구역을 확실히 가리키도록 클리핑될 수 있다.
o. 비트스트림 적합성에서, 유도된 subMV는 서브 블록을 위한 IBC의 유효 MV여야 한다.
3. 서브블록 움직임 벡터를 갖는 하나 이상의 IBC 후보가 생성될 수 있으며, 이는 서브블록 IBC 후보로 표시될 수 있다.
4. ATMVP, 어파인 머지 후보를 포함하는 서브 블록 머지 후보에 서브 블록 IBC 후보가 삽입될 수 있다.
a. 일 예에서, 다른 모든 서브블록 머지 후보에 앞서 추가될 수 있다.
b. 일 예에서, ATMVP 후보 이후에 추가될 수 있다.
c. 일 예에서, 상속된 어파인 후보 또는 구성된 어파인 후보 이후에 추가될 수 있다.
d. 일 예에서, IBC 머지/AMVP 후보 리스트에 추가될 수 있다.
i. 또는, 추가 여부는 현재 블록의 모드 정보에 따라 달라질 수 있다. 예를 들어, IBC AMVP 모드이면, 추가되지 않을 수 있다.
e. 추가할 후보 리스트는 분할 구조(예를 들어, 듀얼 트리 또는 단일 트리)에 따라 달라질 수 있다.
f. 또는, 다수의 서브 블록 IBC 후보가 서브 블록 머지 후보에 삽입될 수 있다.
5. IBC 서브블록 움직임(예를 들어, AMVP/머지) 후보 리스트는 적어도 하나의 서브블록 IBC 후보로 구성될 수 있다.
a. 또는, 하나 또는 다수의 서브블록 IBC 후보는 예를 들어 상이한 초기화된 MV를 사용하여 IBC 서브블록 머지 후보에 삽입될 수 있다.
b. 또는, 또한, IBC 서브블록 움직임 후보 리스트를 구성할지 또는 기존 IBC AMVP/머지 후보 리스트를 구성할지 여부는 지시자에 의해 시그널링되거나 실시간(on-the-fly)으로 유도될 수 있다.
c. 또는, 또한, 현재 블록이 IBC 머지 모드로 코딩된 경우 IBC 서브블록 머지 후보 리스트에 대한 인덱스가 시그널링될 수 있다.
d. 또는, 또한, 현재 블록이 IBC AMVP 모드로 코딩되면 IBC 서브블록 AMVP 후보 리스트에 대한 인덱스가 시그널링될 수 있다.
i. 또는, 또한, IBC AMVP 모드에 대한 시그널링/유도된 MVD는 하나 또는 다수의 서브블록에 적용될 수 있다.
6. 서브 블록의 참조 블록 및 서브 블록은 동일한 색상 성분에 속할 수 있다.
동일한 블록의 다른 서브 블록에 적용된 다른 도구의 혼합 사용으로 sbIBC 확장
7. 하나의 블록은 IBC로 코딩된 적어도 하나 및 인트라 모드로 코딩된 적어도 하나를 갖는 다수의 서브 블록으로 분할될 수 있다.
a. 일 예에서, 서브 블록에 대해 움직임 벡터가 유도되지 않을 수 있다. 대신에, 하나 또는 다수의 인트라 예측 모드가 서브블록에 대해 유도될 수 있다.
b. 또는, 팔레트 모드 및/혹은 팔레트 테이블이 유도될 수 있다.
c. 일 예에서, 전체 블록에 대해 하나의 인트라 예측 모드가 유도될 수 있다.
8. 하나의 블록은 모든 서브 블록이 인트라 모드로 코딩된 다수의 서브 블록으로 분할될 수 있다.
9. 하나의 블록은 모든 서브 블록이 팔레트 모드로 코딩된 다수의 서브 블록으로 분할될 수 있다.
10. 하나의 블록은 IBC 모드로 코딩된 적어도 하나의 서브블록 및 팔레트 모드로 코딩된 적어도 하나를 갖는 다수의 서브블록으로 분할될 수 있다.
11. 하나의 블록은 인트라 모드로 코딩된 적어도 하나의 서브블록 및 팔레트 모드로 코딩된 적어도 하나를 갖는 다수의 서브블록으로 분할될 수 있다.
12. 하나의 블록은 IBC 모드로 코딩된 적어도 하나의 서브블록과 인터 모드로 코딩된 적어도 하나를 갖는 다중 서브블록으로 분할될 수 있다.
13. 하나의 블록은 인트라 모드로 코딩된 적어도 하나의 서브블록 및 인터 모드로 코딩된 적어도 하나를 갖는 다수의 서브블록으로 분할될 수 있다.
다른 도구와의 상호 작용
14. 위의 방법 중 하나 이상을 적용하면 IBC HMVP 테이블이 업데이트되지 않을 수 있다.
a. 또는, IBC 코딩된 서브영역에 대한 움직임 벡터 중 하나 혹은 다수는 IBC HMVP 테이블을 업데이트하는 데 사용될 수 있다.
15. 위의 방법 중 하나 이상을 적용하면 비-IBC HMVP 테이블이 업데이트되지 않을 수 있다.
b. 또는, 인터 코딩된 서브영역에 대한 하나 혹은 다수의 움직임 벡터는 비-IBC HMVP 테이블을 업데이트하기 위해 사용될 수 있다.
16. 인루프 필터링 프로세스(예를 들어, 디블록킹 절차)는 위 방법의 사용에 따라 달라질 수 있다.
a. 일 예에서, 서브블록 경계는 위의 방법 중 하나 또는 다수가 적용될 때 필터링될 수 있다.
a. 또는 위의 방법 중 하나 또는 다수를 적용할 때 서브 블록 경계가 필터링될 수 있다.
b. 일 예에서, 상기 방법으로 코딩된 블록은 종래의 IBC 코딩된 블록과 유사한 방식으로 처리될 수 있다.
17. 특정 코딩 방법(예를 들어, 서브 블록 변환, 어파인 움직임 예측, 다중 참조 라인 인트라 예측, 매트릭스 기반 인트라 예측, 대칭 MVD 코딩, MVD 디코더 측 모션 유도/개선 머지, 양방향 광학 흐름(bi-directional optical flow), 축소된 2차 변환(reduced secondary transform), 다중 변환 세트 등)은 위의 방법 중 하나 이상의 방법으로 코딩된 블록에 대해 비활성화될 수 있다.
18. 위의 방법 및/혹은 서브 블록 크기의 사용 표시는 시퀀스/픽처/슬라이스/타일 그룹/타일/브릭/CTU/CTB/CU/PU/TU/기타 비디오 유닛 레벨로 시그널링되거나 실시간으로 유도될 수 있다.
a. 일 예에서, 위의 방법 중 하나 혹은 다수는 특수 IBC 모드로 처리될 수 있다.
i. 또는, 또한, 하나의 블록이 IBC 모드로 코딩되면, 종래의 전체 블록 기반 IBC 방법 또는 sbIBC를 사용하는 추가 표시가 시그널링되거나 유도될 수 있다.
ii. 일 예에서, 후속 IBC 코딩된 블록은 현재 sbIBC 코딩된 블록의 움직임 정보를 MV 예측자로서 활용할 수도 있다.
1. 또는, 후속 IBC 코딩된 블록은 현재 sbIBC 코딩된 블록의 움직임 정보를 MV 예측자로 활용하는 것이 허용되지 않을 수 있다.
b. 일 예에서, sbIBC는 움직임 후보 리스트에 대한 후보 인덱스에 의해 표시될 수 있다.
i. 일 예에서, 특정 후보 인덱스는 sbIBC 코딩된 블록에 할당된다.
c. 일 예에서, IBC 후보는 2개의 카테고리로 분류될 수 있다: 하나는 전체 블록 코딩을 위한 것이고 다른 하나는 서브블록 코딩을 위한 것이다. 하나의 블록이 sbIBC 모드로 코딩되는지 여부는 IBC 후보의 범주에 따라 달라질 수 있다.
도구의 사용
19. 위의 방법을 적용할지 여부 및/혹은 어떻게 적용할지는 다음 정보에 따라 달라질 수 있다.
a. DPS/SPS/VPS/PPS/APS/픽처 헤더/슬라이스 헤더/타일 그룹 헤더/LCU(최대 코딩 유닛)/CU(코딩 유닛)/LCU 행/LCU의 그룹/TU/PU 블록/비디오 코딩 유닛에서 시그널링되는 메시지
b. CU/PU/TU/블록/비디오 코딩 유닛의 위치
c. 현재 블록 및/혹은 이웃 블록의 블록 차원
d. 현재 블록 및/혹은 이웃 블록의 블록 형태
e. 현재 블록 및/혹은 이웃 블록의 인트라 모드
f. 이웃 블록의 움직임/블록 벡터
g. 색상 포맷(예를 들어, 4:2:0, 4:4:4)의 표시
h. 코딩 트리 구조
i. 슬라이스/타일 그룹 유형 및/혹은 픽처 유형
j. 색상 성분 (예를 들어, 크로마 성분 혹은 루마 성분에만 적용될 수 있음)
k. 시간적 레이어 ID
l. 표준의 프로파일/레벨/티어
머지 리스트 구성 프로세스 및 IBC 사용 관련 아이디어
20. IBC 모드는 인터 코딩된 픽처/슬라이스/타일 그룹/타일의 블록에 대해 인터 예측 모드와 함께 사용될 수 있다.
a. 일 예에서, IBC AMVP 모드에 대해, 신택스 요소는 현재 픽처 및 현재 픽처와 동일하지 않은 참조 픽처(시간적 참조 픽처로 표시됨) 모두로부터 현재 블록이 예측되는지 여부를 나타내기 위해 시그널링될 수 있다.
i. 또는, 또한, 현재 블록이 시간적 참조 픽처로부터도 예측되는 경우, 신택스 요소는 어떤 시간적 참조 픽처가 사용되는지 및 관련 MVP 인덱스, MVD, MV 정밀도 등을 나타내도록 시그널링될 수 있다.
ii. 일 예에서, IBC AMVP 모드에 대해, 하나의 참조 픽처 리스트는 현재 픽처만을 포함할 수 있고, 다른 참조 픽처 리스트는 시간적 참조 픽처만을 포함할 수 있다.
b. 일 예에서, IBC 머지 모드의 경우, 움직임 벡터 및 참조 픽처는 이웃 블록으로부터 유도될 수 있다.
i. 예를 들어, 주변 블록이 현재 픽처에서만 예측된다면, 이웃 블록에서 유도된 움직임 정보는 현재 픽처만을 참조할 수 있다.
ii. 예를 들어, 현재 픽처와 시간적 참조 픽처 모두로부터 이웃 블록이 예측된다면, 유도된 움직임 정보는 현재 픽처와 시간적 참조 픽처 모두를 참조할 수 있다.
1) 또는, 유도된 움직임 정보는 현재 픽처만을 참조할 수 있다.
iii. 예를 들어, 이웃 블록이 시간적 참조 픽처에서만 예측되는 경우, IBC 머지 후보를 구성할 때 "유효하지 않음" 또는 "사용 불가"로 간주될 수 있다.
c. 일 예에서, 고정 가중 인자는 양 예측을 위해 현재 픽처로부터의 참조 블록 및 시간적 참조 픽처로부터의 참조 블록에 할당될 수 있다.
i. 또는, 또한, 가중 인자가 시그널링될 수 있다.
21. 움직임 후보 리스트 구성 프로세스(예를 들어, 정규 머지 리스트, IBC 머지/AMVP 리스트, 서브 블록 머지 리스트, IBC 서브 블록 후보 리스트) 및/또는 HMVP 테이블 업데이트 여부/어떻게 업데이트할지는 블록차원 및/혹은 머지 공유 조건에 따라 달라질 수 있다. 블록의 너비와 높이는 각각 W와 H로 표시된다. 조건 C는 블록 차원 및/혹은 코딩된 정보에 따라 달라질 수 있다.
a. 움직임 후보 리스트 구성 프로세스(예를 들어, 정규 머지 리스트, IBC 머지/AMVP 리스트, 서브 블록 머지 리스트, IBC 서브 블록 후보 리스트) 및/혹은 HMVP 테이블 업데이트 여부/어떻게 업데이트 할지는 조건 C에 따라 달라질 수 있다.
b. 일 예에서, 조건 C는 현재 블록 및/또는 그의 이웃(인접 또는 비인접) 블록의 코딩된 정보에 의존할 수 있다.
c. 일 예에서, 조건 C는 머지 공유 조건에 의존할 수 있다.
d. 일 예에서, 조건 C는 현재 블록의 블록 차원, 및/혹은 이웃(인접 또는 비인접) 블록의 블록 차원 및/혹은 현재 및/혹은 이웃 블록의 코딩된 모드에 의존할 수 있다.
e. 일 예에서, 조건 C가 충족되면 공간적 머지 후보의 유도가 생략된다.
f. 일 예에서, 조건 C가 충족되면 공간적 이웃(인접 또는 비인접) 블록으로부터 후보의 유도는 생략된다.
g. 일 예에서, 조건 C가 충족되면 특정 공간적 이웃(인접 또는 비인접) 블록(예를 들어, 블록 B2)으로부터 후보의 유도가 생략된다.
h. 일 예에서, 조건 C가 충족되면 HMVP 후보의 유도가 생략된다.
i. 일 예에서, 조건 C가 충족되면 페어와이즈 머지 후보의 유도가 생략된다.
j. 일 예에서, 조건 C가 충족되면 프루닝 동작의 수가 줄어들거나 0으로 설정된다.
i. 또는, 또한, 공간적 머지 후보들 사이의 프루닝(pruning) 동작은 감소되거나 제거될 수 있다.
ii. 또는, 또한, HMVP 후보들과 다른 머지 후보들 사이의 프루닝(pruning) 동작이 감소되거나 제거될 수 있다.
k. 일 예에서, 조건 C가 만족되면 HMVP 후보의 업데이트가 생략된다.
i. 일 예에서, HMVP 후보는 프루닝되지 않고 움직임 리스트에 직접 추가될 수 있다.
l. 일 예에서, 조건 C가 충족되면 기본 움직임 후보(예를 들어, IBC 머지/AVMP 리스트의 제로 움직임 후보)가 추가되지 않는다.
m. 일 예에서, 조건 C가 충족되면 상이한 검사 순서(예를 들어, 마지막에서 첫번째가 아니라 첫번째에서 마지막으로) 및/혹은 검사/추가될 상이한 수의 HMVP 후보.
n. 일 예에서, 조건 C는 W*H가 임계값(예를 들어, 1024)보다 크거나 작지 않을 때 충족될 수 있다.
o. 일 예에서, 조건 C는 W 및/또는 H가 임계값(예를 들어, 32)보다 크거나 작지 않을 때 충족될 수 있다.
p. 일 예에서, 조건 C는 W가 임계값(예를 들어, 32)보다 크거나 작지 않을 때 충족될 수 있다.
q. 일 예에서, 조건 C는 H가 임계값(예를 들어, 32)보다 크거나 작지 않을 때 충족될 수 있다.
r. 일 예에서, 조건 C는 W*H가 임계값(예를 들어, 1024)보다 크거나 작지 않고 현재 블록이 IBC AMVP 및/또는 머지 모드로 코딩될 때 충족될 수 있다.
s. 일 예에서, 조건 C는 W*H가 임계값(예를 들어, 16 혹은 32 혹은 64)보다 작거나 크지 않고 현재 블록이 IBC AMVP 및/또는 머지 모드로 코딩될 때 충족될 수 있다.
i. 또는, 또한, 조건 C가 충족되는 경우, IBC 움직임 리스트 구성 프로세스는 공간적 이웃 블록(예를 들어, A1, B1)로부터의 후보 및 기본 후보를 포함할 수 있다. 즉, HMVP 후보의 삽입은 스킵된다.
ii. 또는, 또한, 조건 C가 충족될 때, IBC 움직임 리스트 구성 프로세스는 IBC HMVP 테이블로부터의 HMVP 후보로부터의 후보 및 기본 후보를 포함할 수 있다. 즉, 공간적 이웃 블록에서 후보의 삽입은 스킵된다.
iii. 또는, 또한, IBC HMVP 테이블의 업데이트는 조건 C가 충족된 블록을 디코딩한 후 스킵된다.
iv. 또는 다음 경우 중 하나/일부/모두가 참일 때 조건 C가 충족될 수 있다.
1) W*H가 T1(예를 들어, 16) 이하이고 현재 블록이 IBC AMVP 및/혹은 머지 모드로 코딩된 경우
2) W가 T2와 같고 H가 T3과 같고(예를 들어, T2=4, T3=8), 상단 블록이 사용 가능하고 크기는 AxB와 같고, 현재 블록과 상단 블록 모두 특정 모드로 코딩되는 경우
a. 또는, W가 T2와 같고 H가 T3과 같고(예를 들어, T2=4, T3=8), 동일한 CTU와 AxB와 동일한 크기에서 현재 블록 및 상단 블록은 사용 가능하고, 현재 블록과 상단 블록 모두 동일한 모드로 코딩되는 경우
b. 또는, W가 T2와 같고 H가 T3과 같고(예를 들어, T2=4, T3=8), 상단 블록은 사용 가능하고 크기는 AxB와 같으며, 현재 블록과 상단 블록은 모두 동일한 방법으로 코딩되는 경우
c. 또는, W가 T2와 같고 H가 T3과 같고(예를 들어, T2=4, T3=8), 상단 블록을 사용할 수 없는 경우
d. 또는, W가 T2와 같고 H가 T3과 같고(예를 들어, T2=4, T3=8), 상단 블록을 사용할 수 없거나 상단 블록이 현재 CTU 외부에 있는 경우
3) W가 T4와 같고 H가 T5와 같고(예를 들어, T4=8, T5=4), 좌측 블록이 사용 가능하며 그 크기가 AxB와 동일하며, 현재 블록 및 좌측 블록이 특정 모드로 코딩되는 경우
a. 또는 W가 T4와 같고 H가 T5와 같고(예를 들어, T4=8, T5=4), 좌측 블록이 사용 가능하지 않은 경우
4) W*H는 T1보다 크지 않고(예를 들어, 32), 현재 블록이 IBC AMVP 및/혹은 머지 모드로 코딩되며, 상단 및 좌측 이웃 블록이 사용 가능하고, 크기가 AxB와 동일하며, 특정 모드로 코딩되는 경우
a. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하고 크기는 AxB 와 동일하고 IBC 코딩되며 상단 이웃 블록은 동일한 CTU 내에서 AxB와 동일한 크기로 사용 가능하며 동일한 모드로 코딩되는 경우
b. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하지 않고 상단 이웃 블록은 동일한 CTU 내에서 AxB와 동일한 크기로 사용 가능하며 동일한 모드로 코딩되는 경우
c. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하지 않고, 상단 이웃 블록도 사용가능 하지 않은 경우
d. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하고, 크기가 AxB와 동일하며, 동일한 모드로 코딩되고, 상단 이웃 블록은 사용가능 하지 않은 경우
e. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하지 않고, 상단 이웃 블록은 사용가능 하지 않거나 현재 CTU 외부에 존재하는 경우
f. W*H가 T1(예를 들어, 32)보다 크지 않고 현재 블록이 특정 모드로 코딩되며, 좌측 이웃 블록이 사용 가능하고, 크기가 AxB와 동일하며, 동일한 모드로 코딩되고, 상단 이웃 블록은 사용가능 하지 않거나 현재 CTU 외부에 존재하는 경우
5) 상기 예시들에서, '특정 모드'는 IBC 모드이다.
6) 상기 예시들에서, '특정 모드'는 인터 모드이다.
7) 상기 예시들에서, 'AxB'는 4x4일 수 있다.
8) 상기 예시들에서, '이웃 블록의 크기가 AxB와 동일'은 '이웃 블록의 크기가 AxB보다 크지도 않고 작지도 않음'으로 대치될 수 있다.
9) 상기 예시들에서, 상단 및 좌측 이웃 블록은 공간적 머지 후보 유도를 위해 액세스되는 두 블록이다.
a. 일 예에서 현재 블록에서 좌측 상단 샘플의 좌표가 (x, y)이고 좌측 블록이 (x-1, y+H-1)을 커버하는 블록이라고 가정한다.
b. 일 예에서 현재 블록에서 좌측 상단 샘플의 좌표가 (x, y)이고 좌측 블록이 (x+W-1, y-1)을 커버하는 블록이라고 가정한다.
t. 상기에서 언급된 임계값은 기 정의되거나 시그널링될 수 있다.
i. 또는, 또한, 임계값은 코딩된 모드와 같은 블록의 코딩 정보에 의존할 수 있다.
u. 일 예에서, 현재 블록이 공유 노드 하에 있고 현재 블록이 IBC AMVP 및/혹은 머지 모드로 코딩될 때 조건 C가 충족된다.
i. 또는, 또한, 조건 C가 만족되는 경우, IBC 움직임 리스트 구성 프로세스는 공간적 이웃 블록들(예를 들어, A1, B1)로부터의 후보들 및 기본 후보들을 포함할 수 있다. 즉, HMVP 후보의 삽입은 생략된다.
ii. 또는, 또한, 조건 C가 만족될 때, IBC 움직임 리스트 구성 프로세스는 IBC HMVP 테이블의 HMVP 후보들로부터의 후보들 및 기본 후보들을 포함할 수 있다. 즉, 공간적 이웃 블록에서 후보의 삽입은 생략된다.
iii. 또는, 또한, IBC HMVP 테이블의 업데이트는 조건 C가 충족된 블록을 디코딩한 후 생략된다.
v. 일 예에서, 조건 C는 예를 들어 블록의 코딩 정보에 따라 적응적으로 변경될 수 있다.
i. 일 예에서, 조건 C는 코딩된 모드(IBC 또는 비-IBC 모드), 블록 차원에 기초하여 정의될 수 있다.
w. 상기의 방법을 적용할지 여부는 IBC 코딩된 블록인지 여부와 같은 블록의 코딩 정보에 따라 달라질 수 있다.
i. 일 예에서, 블록이 IBC 코딩된 경우, 상기 방법이 적용될 수 있다.
IBC 움직임 리스트
22. IBC HMVP 테이블의 움직임 후보는 1/16-픽셀 정밀도 대신 정수 픽셀 정밀도로 저장되는 것이 제안된다.
a. 일 예에서, 모든 움직임 후보는 1-픽셀 정밀도로 저장된다.
b. 일 예에서, 공간적 이웃(인접 또는 비인접) 블록 및/혹은 IBC HMVP 테이블로부터의 움직임 정보를 사용할 때, MV의 라운딩 프로세스는 생략된다.
23. IBC 움직임 리스트는 하나 이상의 IBC HMVP 테이블의 움직임 후보만을 포함할 수도 있다.
a. 또는, 더욱이, IBC 움직임 리스트에서 후보의 시그널링은 HMVP 테이블에서 이용가능한 HMVP 후보의 수에 의존할 수 있다.
b. 또는, 더욱이, IBC 움직임 리스트에서 후보의 시그널링은 HMVP 테이블에서 HMVP 후보의 최대 수에 의존할 수 있다.
c. 또는 HMVP 테이블의 HMVP 후보가 프루닝 없이 리스트에 순서대로 추가된다.
i. 일 예에서, 순서는 테이블에 대한 엔트리 인덱스의 오름차순 순서를 기반으로 한다.
ii. 일 예에서, 순서는 테이블에 대한 엔트리 인덱스의 내림차순 순서를 기반으로 한다.
iii. 일 예에서, 테이블의 처음 N개의 엔트리는 생략될 수 있다.
iv. 일 예에서, 테이블의 마지막 N개의 엔트리는 생략될 수 있다.
v. 일 예에서 유효하지 않은 BV가 있는 엔트리는 생략될 수 있다.
d. 또는, 더욱이, 수평 벡터에 오프셋을 추가하고/하거나 수직 벡터에 오프셋을 추가함으로써, 하나 또는 다수의 HMVP 테이블의 HMVP 후보로부터 유도된 움직임 후보가 더 수정될 수 있다.
i. 유효하지 않은 BV(들)가 있는 HMVP 후보는 유효한 BV(들)를 제공하도록 수정될 수 있다.
e. 또는, 또한, 기본 움직임 후보는 하나 또는 다수의 HMVP 후보 이후 또는 이전에 추가될 수 있다.
f. HMVP 후보를 IBC 움직임 리스트에 추가하는 방법/추가할지 여부는 블록의 차원에 따라 달라질 수 있다.
i. 예를 들어, IBC 움직임 리스트는 블록 차원(너비와 높이를 나타내는 W 및 H)가 조건 C를 충족할 때 하나 또는 다수의 HMVP 테이블의 움직임 후보만을 포함할 수도 있다.
1) 일 예에서, 조건 C는 W<=T1 및 H<=T2이고, 예를 들어, T1=T2=4이다.
2) 일 예에서, 조건 C는 W<=T1 혹은 H<=T2이고, 예를 들어, T1=T2=4이다.
3) 일 예에서, 조건 C는 W*H<=T이고, 예를 들어, T=16이다.
5. 실시예
추가된 변경 사항은 밑줄이 그어진 굵은 이탤릭체로 강조 표시된다. 삭제는 [[ ]]로 표시된다.
5.1 실시예 #1
현재 블록이 공유 노드 아래에 있을 때 HMVP 테이블의 업데이트가 이루어지지 않는다. 그리고 공유 노드 아래의 블록에 대해 단일 IBC HMVP 테이블만이 사용된다.
7.4.8.5 코딩 유닛 시멘틱스
[[ 다음 조건이 모두 참일 때 공유 머지 후보 리스트 영역에 대한 히스토리 기반 움직임 벡터 예측자 리스트는 NumHmvpSmrIbcCand를 NumHmvpIbcCand와 동일하게 설정하고 HmvpSmrIbcCandList[ i ]를 i = 0.. NumHmvpIbcCand - 1에 대해 HmvpIbcCandList[ i ]와 동일하게 설정하는 식으로 업데이트 된다.
IsInSmr[ x0 ][ y0 ]는 참(TRUE)과 동일하다.
SmrX[ x0 ][ y0 ] 는 x0와 동일하다.
SmrY[ x0 ][ y0 ] 는 y0와 동일하다.]]
8.6.2 IBC 블록에 대한 움직임 벡터 성분의 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL.
루마 움직임 벡터 mvL는 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 움직임 벡터 예측을 위한 유도 프로세스는 루마 위치( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력과 함께 호출되고 출력은 루마 움직임 벡터 mvL이다.
- general_merge_flag[ xCb ][ yCb ]이 0과 동일하면, 다음이 적용된다.
1. 변수 mvd는 다음과 같이 유도된다.
mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)
mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)
2. 절 8.5.2.14에 명시된 움직임 벡터에 대한 라운딩 프로세스는 mvL과 동일하게 설정된 mvX, MvShift + 2와 동일하게 설정된 rightShift , MvShift + 2와 동일하게 설정된 leftShift를 입력으로 하고, 라운딩된 mvL을 출력으로 하여 호출된다.
3. 루마 움직임 벡터 mvL은 다음과 같이 변경된다.
u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)
mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-886)
u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)
mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-888)
주의 1- 상기에 명시된 mvL[ 0 ] 및 mvL[ 1 ]의 결과 값은 항상 -217 에서 217 - 1내의 범위에 있다.
IsInSmr[ xCb ][ yCb ]이 거짓(false)이면, 절 8.6.2.6에 명시된 히스토리 기반 움직임 벡터 예측자 리스트에 대한 업데이트 프로세스는 루마 움직임 벡터 mvL와 함께 호출된다.
참조 블록 내의 좌측 상단 위치( xRefTL, yRefTL )와 참조 블록 내의 우측 하단 위치( xRefBR, yRefBR )는 다음과 같이 유도된다.
( xRefTL, yRefTL ) = ( xCb + ( mvL[ 0 ] >> 4 ), yCb + ( mvL[ 1 ] >> 4 ) ) (8-889)
( xRefBR, yRefBR ) = ( xRefTL + cbWidth - 1, yRefTL + cbHeight - 1 ) (8-890)
루마 움직임 벡터 mvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
- ...
8.6.2.4 IBC 히스토리 기반 움직임 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 움직임 벡터 후보 리스트 mvCandList,
- 리스트에서 사용 가능한 움직임 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 움직임 벡터 후보 리스트 mvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지 여부를 특정하는 변수 isInSmr]]
- 리스트에서 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 및 isPrunedB1 는 모두 거짓(FALSE)로 설정된다.
배열 smrHmvpIbcCandList 및 변수 smrNumHmvpIbcCand는 다음과 같이 유도된다.
[[smr]]HmvpIbcCandList = [[isInSmr  ?  HmvpSmrIbcCandList  : ]] HmvpIbcCandList (8-906)
[[smr]]NumHmvpIbcCand = [[isInSmr  ?  NumHmvpSmrIbcCand  :]]  NumHmvpIbcCand (8-907)
인덱스 hMvpIdx = 1..[[smr]]NumHmvpIbcCand에 대해 smrHmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, 하기 순서의 단계들은 numCurrCand이 MaxNumMergeCand와 동일해질 때까지 반복된다.
1. 변수 sameMotion는 다음과 같이 유도된다.
- N이 A1 혹은 B1이고, 임의의 움직임 벡터 후보 N에 대해 다음의 모든 조건들이 참이면, sameMotion 및 isPrunedN은 모두 참(TRUE)과 동일하게 설정된다.
- hMvpIdx는 1 이하로 설정된다.
- 후보 [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx]는 움직임 벡터 후보 N과 동일하다.
- isPrunedN는 거짓(FALSE)로 설정된다.
- 그 외의 경우, sameMotion은 거짓(FALSE)로 설정된다.
2. sameMotion이 거짓(FALSE)인 경우, 후보 [[smr]]HmvpIbcCandList[[[smr]]NumHmvpIbcCand - hMvpIdx]는 다음과 같이 움직임 벡터 후보 리스트에 추가된다.
mvCandList[ numCurrCand++ ] = [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx ] (8-908)
5.2 실시예 #2
블록 크기가 너비*높이<K와 같은 특정 조건을 충족할 때 IBC 움직임 리스트 구성 프로세스에서 공간 머지/AMVP 후보의 검사를 제거한다. 다음 설명에서 임계값 K는 16과 같이 미리 정의될 수 있다.
7.4.8.2 코딩 트리 유닛 시멘틱스
CTU는 코딩 트리 구조의 루트 노드이다.
[[( x, y ) 에서의 샘플이 공유 머지 후보 리스트 영역 내인지 여부를 특정하는 배열 IsInSmr[ x ][ y ]은 x = 0..CtbSizeY - 1 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsInSmr[ x ][ y ] = FALSE (7-96)]]
7.4.8.4 코딩 트리 시멘틱스
[[하기의 모든 조건들이 참이면, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 IsInSmr[ x ][ y ]는 참(TRUE)으로 설정된다.
IsInSmr[ x0 ][ y0 ]는 거짓(FALSE)과 동일하다.
cbWidth * cbHeight / 4은 32보다 작다.
treeType 은 DUAL_TREE_CHROMA와 동일하지 않다.
IsInSmr[ x0 ][ y0 ]이 참(TRUE)이면, 배열 SmrX[ x ][ y ], SmrY[ x ][ y ], SmrW[ x ][ y ] 및 SmrH[ x ][ y ]은 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 하기와 같이 유도된다.
SmrX[ x ][ y ] = x0 (7-98)
SmrY[ x ][ y ] = y0 (7-99)
SmrW[ x ][ y ] = cbWidth (7-100)
SmrH[ x ][ y ] = cbHeight (7-101)
하기의 모든 조건들이 참이면, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 IsInSmr[ x ][ y ]는 참(TRUE)이다.
IsInSmr[ x0 ][ y0 ] 은 거짓(FALSE)이다.
하기 조건들 중 하나가 참이다.
mtt_split_cu_binary_flag 은 1이고  cbWidth * cbHeight / 2 는 32보다 작다.
mtt_split_cu_binary_flag은 0이고 cbWidth * cbHeight / 4는 32보다 작다.
treeType은 DUAL_TREE_CHROMA와 동일하지 않다.
IsInSmr[ x0 ][ y0 ]이 참(TRUE)이면, 배열 SmrX[ x ][ y ], SmrY[ x ][ y ], SmrW[ x ][ y ] 및 SmrH[ x ][ y ]은 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 다음과 같이 유도된다.
SmrX[ x ][ y ] = x0 (7-102)
SmrY[ x ][ y ] = y0 (7-103)
SmrW[ x ][ y ] = cbWidth (7-104)
SmrH[ x ][ y ] = cbHeight (7-105)]]
7.4.8.5 코딩 유닛 시멘틱스
[[하기의 조건들이 모두 참이면, 공유 머지 후보 리스트 영역에 대한 히스토리 기반 움직임 벡터 예측자 리스트는 NumHmvpSmrIbcCand를 NumHmvpIbcCand와 동일하게 설정하고, HmvpSmrIbcCandList[ i ]를 i = 0..NumHmvpIbcCand - 1에 대해 HmvpIbcCandList[ i ]와 동일하게 설정함으로써 업데이트 된다.
IsInSmr[ x0 ][ y0 ]는 참(TRUE)과 동일하다.
SmrX[ x0 ][ y0 ] 는 x0과 동일하다.
SmrY[ x0 ][ y0 ] 는 y0과 동일하다.]]
x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 다음과 같은 할당이 만들어진다.
CbPosX[ x ][ y ] = x0 (7-106)
CbPosY[ x ][ y ] = y0 (7-107)
CbWidth[ x ][ y ] = cbWidth (7-108)
CbHeight[ x ][ y ] = cbHeight (7-109)
8.6.2 IBC 블록에 대한 움직임 벡터 성분의 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb )
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL.
루마 움직임 벡터 mvL는 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 움직임 벡터 예측을 위한 유도 프로세스는 루마 위치( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력과 함께 호출되고 출력은 루마 움직임 벡터 mvL이다.
- general_merge_flag[ xCb ][ yCb ]이 0이면, 다음이 적용된다.
4. 변수 mvd는 다음과 같이 유도된다.
mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)
mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)
5. 절 8.5.2.14에 명시된 움직임 벡터에 대한 라운딩 프로세스는 mvL과 동일하게 설정된 mvX, MvShift + 2와 동일하게 설정된 rightShift , MvShift + 2와 동일하게 설정된 leftShift를 입력으로 하고, 라운딩된 mvL을 출력으로 하여 호출된다.
6. 루마 움직임 벡터 mvL는 다음과 같이 변경된다.
u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)
mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-886)
u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)
mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-888)
주의 1 - 상기에서 명시된 mvL[ 0 ] 및 mvL[ 1 ]의 결과 값은 항상 -217 에서  217 - 1 범위 내이다.
smrWidth  * smrHeight이 K보다 크면, 절 8.6.2.6에 명시된 히스토리 기반 움직임 벡터 예측자 리스트에 대한 업데이트 프로세스는 루마 움직임 벡터 mvL과 함께 호출된다.
참조 블록 내의 좌측 상단 위치 ( xRefTL, yRefTL ) 및 참조 블록 내의 우측 하단 위치 ( xRefBR, yRefBR ) 는 다음과 같이 유도된다.
( xRefTL, yRefTL ) = ( xCb + ( mvL[ 0 ] >> 4 ), yCb + ( mvL[ 1 ] >> 4 ) ) (8-889)
( xRefBR, yRefBR ) = ( xRefTL + cbWidth - 1, yRefTL + cbHeight - 1 ) (8-890)
루마 움직임 벡터 mvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
- ...
8.6.2.2 IBC 루마 움직임 벡터 예측의 유도 프로세스
이 프로세스는 CuPredMode[ xCb ][ yCb ]이 MODE_IBC와 동일한 경우에만 호출된다. 여기서 ( xCb, yCb ) 는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL.
변수 xSmr, ySmr, smrWidth, smrHeight, 및 smrNumHmvpIbcCand은 하기와 같이 유도된다.
xSmr = [[IsInSmr[ xCb ][ yCb ]  ?  SmrX[ xCb ][ yCb ]  :]]  xCb (8-895)
ySmr = [[IsInSmr[ xCb ][ yCb ]  ?  SmrY[ xCb ][ yCb ]  :]] yCb (8-896)
smrWidth = [[IsInSmr[ xCb ][ yCb ]  ?  SmrW[ xCb ][ yCb ]  :]]  cbWidth (8-897)
smrHeight = [[IsInSmr[ xCb ][ yCb ]  ?  SmrH[ xCb ][ yCb ]  :]]  cbHeight (8-898)
smrNumHmvpIbcCand = [[IsInSmr[ xCb ][ yCb ]  ?  NumHmvpSmrIbcCand  :]]  NumHmvpIbcCand (8-899)
루마 움직임 벡터 mvL는 하기 순서의 단계로 유도된다.
1. smrWidth  * smrHeight이 K보다 크면, 절 8.6.2.3에 명시된 이웃 코딩 유닛으로부터 공간적 움직임 벡터 후보의 유도 프로세스는 ( xSmr, ySmr )와 동일하게 설정된 루마 코딩 블록 위치 ( xCb, yCb ), smrWidth 및 smrHeight와 동일하게 설정된 루마 코딩 블록 너비 cbWidth, 및 루마 코딩 블록 높이 cbHeight를 입력으로 하고, 사용 가능성 플래그 availableFlagA1, availableFlagB1 및 움직임 벡터 mvA1 및 mvB1를 출력으로 하여 호출된다.
2. smrWidth  * smrHeight이 K보다 크면, 움직임 벡터 후보 리스트 mvCandList는 다음과 같이 구성된다.
i = 0
if( availableFlagA1 )
mvCandList [ i++ ] = mvA1 (8-900)
if( availableFlagB1 )
mvCandList [ i++ ] = mvB1
3. smrWidth  * smrHeight이 K보다 크면, 변수 numCurrCand는 mvCandList에서 머지 후보의 수와 동일하게 설정된다.
4. numCurrCand이 MaxNumMergeCand보다 작고 smrNumHmvpIbcCand이 0보다 크면, 절 8.6.2.4에 명시된 IBC 히스토리 기반 움직임 벡터 후보의 유도 프로세스는 mvCandList, IsInSmr[ xCb ][ yCb ]와 동일하게 설정된 isInSmr, 및numCurrCand를 입력으로, 변경된 mvCandList 및 numCurrCand을 출력으로 하여 호출된다.
5. numCurrCand이 MaxNumMergeCand보다 작은 경우, numCurrCand이 MaxNumMergeCand와 동일해질 때 까지 다음이 적용된다.
1. mvCandList[ numCurrCand ][ 0 ]은 0으로 설정된다.
2. mvCandList[ numCurrCand ][ 1 ]은ㅇ 0으로 설정된다.
3. numCurrCand은 1만큼 증가한다.
6. 변수 mvIdx는 다음과 같이 유도된다.
mvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (8-901)
7. 다음과 같은 할당이 만들어진다.
mvL[ 0 ] = mergeCandList[ mvIdx ][ 0 ] (8-902)
mvL[ 1 ] = mergeCandList[ mvIdx ][ 1 ] (8-903)
8.6.2.4 IBC 히스토리 기반 움직임 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 움직임 벡터 후보 리스트 mvCandList,
- 리스트의 사용 가능한 움직임 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 움직임 벡터 후보 리스트 mvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지를 특정하는 변수 isInSmr,]]
- 리스트의 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 and isPrunedB1 는 모두 거짓(FALSE)으로 설정된다.
배열 smrHmvpIbcCandList 과 변수 smrNumHmvpIbcCand는 다음과 같이 유도된다.
[[smr]]HmvpIbcCandList = [[isInSmr  ?  HmvpSmrIbcCandList  :]] HmvpIbcCandList (8-906)
smrNumHmvpIbcCand = [[isInSmr  ?  NumHmvpSmrIbcCand  :]]  NumHmvpIbcCand (8-907)
인덱스 hMvpIdx = 1.. smrNumHmvpIbcCand 에 대한 [[smr]]HmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, numCurrCand이 MaxNumMergeCand와 동일해질 때까지 다음 순서의 단계가 반복된다.
1. 변수 sameMotion가 다음과 같이 유도된다.
- smrWidth  * smrHeight이 K보다 크고 A1 혹은 B1인 N에 대해 다음의 모든 조건이 임의의 움직임 벡터 후보 N에 대해 참이면, sameMotion 및 isPrunedN은 모두 참(TRUE)로 설정된다.
- hMvpIdx는 1이하 이다.
- 후보 [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx]는 움직임 벡터 후보 N과 동일하다.
- isPrunedN은 거짓(FALSE)으로 설정된다.
- 그 외의 경우, sameMotion은 거짓(FALSE)으로 설정된다.
2. sameMotion이 거짓(FALSE)이면, 후보[[smr]]HmvpIbcCandList[smrNumHmvpIbcCand - hMvpIdx]는 움직임 벡터 후보 리스트에 다음과 같이 추가된다.
mvCandList[ numCurrCand++ ] = [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx ] (8-908)
5.3 실시예 #3
블록 크기가 현재 블록이 공유 노드 아래에 있고 HMVP 테이블의 업데이트가 없는 것과 같은 특정 조건을 충족하는 경우 IBC 움직임 리스트 구성 프로세스에서 공간적 머지/AMVP 후보 검사를 제거한다.
8.6.2.2 IBC 루마 움직임 벡터 예측의 유도 프로세스
이 프로세스는 오직 CuPredMode[ xCb ][ yCb ]이 MODE_IBC와 동일한 경우에만 호출된다. 여기서, ( xCb, yCb )는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL.
변수 xSmr, ySmr, smrWidth, smrHeight, 및 smrNumHmvpIbcCand은 다음과 같이 유도된다.
xSmr = [[IsInSmr[ xCb ][ yCb ]  ?  SmrX[ xCb ][ yCb ]  :]]  xCb (8-895)
ySmr = [[IsInSmr[ xCb ][ yCb ]  ?  SmrY[ xCb ][ yCb ]  :]]  yCb (8-896)
smrWidth = [[IsInSmr[ xCb ][ yCb ]  ?  SmrW[ xCb ][ yCb ]  :]]  cbWidth (8-897)
smrHeight = [[IsInSmr[ xCb ][ yCb ]  ?  SmrH[ xCb ][ yCb ]  :]]  cbHeight (8-898)
smrNumHmvpIbcCand = [[IsInSmr[ xCb ][ yCb ]  ?  NumHmvpSmrIbcCand  :]]  NumHmvpIbcCand (8-899)
루마 움직임 벡터 mvL는 다음과 같은 순서의 단계로 유도된다.
1. IsInSmr[ xCb ][ yCb ]이 거짓(false)이면, 절  8.6.2.3에 명시된 이웃 코딩 유닛의 공간적 움직임 벡터 후보의 유도 프로세스는 ( xSmr, ySmr )와 동일하게 설정된 루마 코딩 블록 위치( xCb, yCb ), smrWidth 및 smrHeight와 동일하게 설정된 루마 코딩 블록 너비 cbWidth, 루마 코딩 블록 높이 cbHeight을 입력으로, 사용 가능성 플래그 availableFlagA1, availableFlagB1 및 움직임 벡터 mvA1, mvB1를 출력으로 하여 호출된다.
2. IsInSmr[ xCb ][ yCb ]이 거짓(false)이면, 움직임 벡터 후보 리스트인 mvCandList는 다음과 같이 구성된다.
i = 0
if( availableFlagA1 )
mvCandList [ i++ ] = mvA1 (8-900)
if( availableFlagB1 )
mvCandList [ i++ ] = mvB1
3. IsInSmr[ xCb ][ yCb ]이 거짓(false)이면, 변수 numCurrCand는 mvCandList의 머지 후보의 수와 동일하게 설정된다.
4. numCurrCand가 MaxNumMergeCand보다 작고 smrNumHmvpIbcCand이 0보다 크면, 절 8.6.2.4에 명시된 IBC 히스토리 기반 움직임 벡터 후보의 유도 프로세스는 mvCandList, IsInSmr[ xCb ][ yCb ]와 동일하게 설정된 isInSmr, 및 numCurrCand를 입력으로, 변경된 mvCandList 및 numCurrCand를 출력으로 하여 호출된다.
5. numCurrCand가 MaxNumMergeCand보다 작고, numCurrCand이 MaxNumMergeCand와 동일해질 때까지 다음이 적용된다.
1. mvCandList[ numCurrCand ][ 0 ]은 0으로 설정된다.
2. mvCandList[ numCurrCand ][ 1 ]은 0으로 설정된다.
3. numCurrCand은 1만큼 증가한다.
6. 변수 mvIdx은 다음과 같이 유도된다.
mvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (8-901)
7. 다음과 같은 할당이 만들어진다.
mvL[ 0 ] = mergeCandList[ mvIdx ][ 0 ] (8-902)
mvL[ 1 ] = mergeCandList[ mvIdx ][ 1 ] (8-903)
8.6.2.4 IBC 히스토리 기반 움직임 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 움직임 벡터 후보 리스트 mvCandList,
- 리스트의 사용 가능한 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 움직임 벡터 후보 리스트 mvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지 여부를 특정하는 변수 isInSmr,]]
- 리스트의 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 및 isPrunedB1 는 모두 거짓(FALSE)으로 설정된다.
배열 smrHmvpIbcCandList 및 변수 smrNumHmvpIbcCand 는 다음과 같이 유도된다.
[[smr]]HmvpIbcCandList = [[isInSmr  ?  HmvpSmrIbcCandList  :]] HmvpIbcCandList (8-906)
[[smr]]NumHmvpIbcCand = [[isInSmr  ?  NumHmvpSmrIbcCand  :]]  NumHmvpIbcCand(8-907)
인덱스 hMvpIdx = 1.. [[smr]]NumHmvpIbcCand인 [[smr]]HmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, numCurrCand이 MaxNumMergeCand와 동일해질 때 까지 다음 순서의 단계가 반복된다.
3. 변수 sameMotion는 다음과 같이 유도된다.
- isInSmr는 거짓(false) 이고 N이 A1 혹은 B1일 때, 임의의 움직임 벡터 N에 대해 하기의 모든 조건들이 참이면, sameMotion 및 isPrunedN 모두는 참(TRUE)으로 설정된다.
- hMvpIdx은 1이하이다.
- 후보 [[smr]]HmvpIbcCandList[[smr]]NumHmvpIbcCand - hMvpIdx]는 움직임 벡터 후보 N과 동일하다.
- isPrunedN이 거짓(FALSE)이다.
- 그 외의 경우, sameMotion은 거짓(FALSE)과 동일하게 설정된다.
4. sameMotion이 거짓(FALSE)인 경우, 후보 [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx]는 다음과 같이 움직임 벡터 후보 리스트에 추가된다.
mvCandList[ numCurrCand++ ] = [[smr]]HmvpIbcCandList[ [[smr]]NumHmvpIbcCand - hMvpIdx ] (8-908)
8.6.2 IBC 블록의 움직임 벡터 성분에 대한 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 움직임 벡터 mvL.
루마 움직임 벡터 mvL는 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 움직임 벡터 예측 유도 프로세스는 루마 위치( xCb, yCb ), 변수 cbWidth 및 cbHeight을 입력으로, 루마 움직임 벡터 mvL를 출력으로 하여 호출된다.
- general_merge_flag[ xCb ][ yCb ]이 0이면, 다음이 적용된다.
7. 변수 mvd는 다음과 같이 유도된다.
mvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-883)
mvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-884)
8. 절 8.5.2.14에 명시된 움직임 벡터를 위한 라운딩 프로세스는 is invoked with mvL과 동일하게 설정된 mvX, MvShift + 2와 동일하게 설정된 rightShift, MvShift + 2와 동일하게 설정된 leftShift를 입력으로, 라운딩된 mvL를 출력으로 하여 호출된다.
9. 루마 움직임 벡터 mvL는 다음과 같이 유도된다.
u[ 0 ] = ( mvL[ 0 ] + mvd[ 0 ] + 218 ) % 218 (8-885)
mvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-886)
u[ 1 ] = ( mvL[ 1 ] + mvd[ 1 ] + 218 ) % 218 (8-887)
mvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-888)
주의  1 - 상기에 명시된 mvL[ 0 ] 및 mvL[ 1 ]의 결과 값은 항상 -217 에서  217 - 1 범위 내이다.
IsInSmr[ xCb ][ yCb ]이 거짓(false)이면, 절 8.6.2.6에 명시된 히스토리 기반 움직임 벡터 예측자 리스트의 업데이트 프로세스는 루마 움직임 벡터 mvL과 함께 호출된다.
참조 블록 내의 좌측 상단 위치 ( xRefTL, yRefTL ) 및 참조 블록 내의 우측 하단 위치 ( xRefBR, yRefBR ) 는 다음과 같이 유도된다.
( xRefTL, yRefTL ) = ( xCb + ( mvL[ 0 ] >> 4 ), yCb + ( mvL[ 1 ] >> 4 ) ) (8-889)
( xRefBR, yRefBR ) = ( xRefTL + cbWidth - 1, yRefTL + cbHeight - 1 ) (8-890)
루마 움직임 벡터 mvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
...
5.4 실시예 #4
블록 크기가 Width*Height<=K 또는 Width=N, Height=4와 같은 특정 조건을 충족하고 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되거나 Width=4, Height=N이고 상단 이웃 블록이 4x4이고 IBC 모드로 코딩되며 HMVP 테이블의 업데이트가 없는 경우, IBC 움직임 리스트 구성 프로세스에서 공간적 머지/AMVP 후보의 검사는 제거된다. 다음 설명에서, 임계값 K는 미리 정의될 수 있고, 예를 들어, 16일 수 있으며, N은 예를 들어, 8로서 미리 정의될 수 있다.
7.4.9.2 코딩 트리 유닛 시멘틱스
CTU는 코딩 트리 구조의 루트 노드이다.
(x, y)에서의 샘플이 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스의 사용을 위해 사용가능한지 여부를 특정하는 배열 IsAvailable[ cIdx ][ x ][ y ]은 cIdx = 0..2, x = 0..CtbSizeY - 1, 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsAvailable[ cIdx ][ x ][ y ] = FALSE (7-123)
[[x = 0..CtbSizeY - 1 및 y = 0..CtbSizeY - 1에 대해, (x,y) 에서의 샘플이 공유 머지 후보 리스트 영역 내에 위치하는지 여부를 특정하는 배열 IsInSmr[ x ][ y ]은 다음과 같이 초기화된다.
IsInSmr[ x ][ y ] = FALSE (7-124)]]
7.4.9.4 코딩 트리 시멘틱스
[[하기의 모든 조건이 참인 경우, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 IsInSmr[ x ][ y ]는 참(TRUE)와 동일하게 설정된다.
- IsInSmr[ x0 ][ y0 ]는 거짓(FALSE)으로 설정된다.
- cbWidth * cbHeight / 4 는 32보다 작다.
- treeType은 DUAL_TREE_CHROMA와 동일하지 않다.
IsInSmr[ x0 ][ y0 ]이 참(TRUE)인 경우, 배열 SmrX[ x ][ y ], SmrY[ x ][ y ], SmrW[ x ][ y ] 및 SmrH[ x ][ y ]은 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 다음과 같이 유도된다.
SmrX[ x ][ y ] = x0 (7-126)
SmrY[ x ][ y ] = y0 (7-127)
SmrW[ x ][ y ] = cbWidth (7-128)
SmrH[ x ][ y ] = cbHeight (7-129)]]
8.6.2 IBC 블록의 블록 벡터 성분에 대한 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 11/16 분수 샘플 정확도에서 루마 블록 벡터 bvL.
루마 블록 벡터 bvL은 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 블록 벡터 예측 유도 프로세스는 루마 위치( xCb, yCb ), 변수 cbWidth 및 cbHeight을 입력으로, 루마 블록 벡터 bvL를 출력으로 하여 호출된다.
- general_merge_flag[ xCb ][ yCb ]이 0이면, 다음이 적용된다.
1. 변수 bvd는 다음과 같이 유도된다.
bvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-900)
bvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-901)
2. 절 8.5.2.14에 명시된 움직임 벡터를 위한 라운딩 프로세스는 bvL과 동일하게 설정된 mvX, AmvrShift 와 동일하게 설정된 rightShift, 및 AmvrShift 와 동일하게 설정된 leftShift를 입력으로, 라운딩된 bvL을 출력으로 하여 호출된다.
3. 루마 블록 벡터 bvL는 다음과 같이 변경된다.
u[ 0 ] = ( bvL[ 0 ] + bvd[ 0 ] + 218 ) % 218 (8-902)
bvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-903)
u[ 1 ] = ( bvL[ 1 ] + bvd[ 1 ] + 218 ) % 218 (8-904)
bvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-905)
주의 1 - 상기에 명시된 bvL[ 0 ] 및 bvL[ 1 ]의 결과 값은 항상 -217 에서  217 - 1 범위 내이다.
변수 IslgrBlk는 (cbWidth Х cbHeight > K ? 참(true):거짓(false))으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 N이고 CbHeight이 4이고 좌측 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 4이고 CbHeight이 N이고 상단 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
(혹은, 대안적으로,:
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true): 거짓( false))으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 N이고 CbHeight이 4이고 좌측 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 4이고 CbHeight이 N이고 상단 이웃 블록이 사용 가능하며 4x4 이고 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다. )
IsLgrBlk이 참이면 [[IsInSmr[ xCb ][ yCb ]이 거짓이면]], 절 8.6.2.6에 명시된 히스토리 기반 블록 벡터 예측자 리스트에 대한 업데이트 프로세스는 루마 블록 벡터 bvL과 함께 호출된다.
루마 블록 벡터 bvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
- CtbSizeY 이 ( ( yCb + ( bvL[ 1 ] >> 4 ) ) & ( CtbSizeY - 1 ) ) + cbHeight 이상이다.
- x = xCb..xCb + cbWidth - 1 및 y = yCb..yCb + cbHeight - 1에 대해, IbcVirBuf[ 0 ][ ( x + (bvL[ 0 ] >> 4 ) ) & ( IbcVirBufWidth - 1 ) ][ ( y + (bvL[1] >> 4 ) ) & ( CtbSizeY - 1) ] 는 -1로 설정되어서는 안된다.
8.6.2.2 IBC 루마 블록 벡터 예측에 대한 유도 프로세스
이 프로세스는 오직 CuPredMode[ 0 ][ xCb ][ yCb ]이 MODE_IBC인 경우에만 호출되며, 여기서 ( xCb, yCb ) 는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 블록 벡터 bvL.
[[변수 xSmr, ySmr, smrWidth, 및 smrHeight은 다음과 같이 유도된다.
xSmr = IsInSmr[ xCb ][ yCb ]  ?  SmrX[ xCb ][ yCb ]  :  xCb (8-906)
ySmr = IsInSmr[ xCb ][ yCb ]  ?  SmrY[ xCb ][ yCb ]  :  yCb (8-907)
smrWidth = IsInSmr[ xCb ][ yCb ]  ?  SmrW[ xCb ][ yCb ]  :  cbWidth (8-908)
smrHeight = IsInSmr[ xCb ][ yCb ]  ?  SmrH[ xCb ][ yCb ]  :  cbHeight (8-909)]]
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true):거짓( false))으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 N이고 CbHeight이 4이고 좌측 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 4이고 CbHeight이 N이고 상단 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
(혹은, 대안적으로,
변수 IslgrBlk 는 (cbWidth Х cbHeight > K ? 참(true):거짓( false))으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 N이고 CbHeight이 4이고 좌측 이웃 블록이 4x4 이며 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다.
IsLgrBlk이 참일 때, CbWidth가 4이고 CbHeight이 N이고 상단 이웃 블록이 사용 가능하며 4x4 이고 IBC 모드로 코딩되면, IsLgrBlk은 거짓으로 설정된다. )
루마 블록 벡터 bvL는 다음 순서의 단계에 의해 유도된다.
1. IslgrBlk이 참이면, 절 8.6.2.3에 명시된 이웃 코딩 유닛의 공간적 블록 벡터 후보 유도 프로세스는 (  xCb, yCb [[xSmr, ySmr]] )와 동일하게 설정된 루마 코딩 블록 위치 ( xCb, yCb ), [[smr]] Cb Width 및 [[smr]] Cb Height와 동일하게 설정된 루마 코딩 블록 너비 cbWidth, 및 루마 코딩 블록 높이를 입력으로, 사용가능성 플래그 availableFlagA1, availableFlagB1 및 블록 벡터 bvA1, bvB1. 를 출력으로 하여 호출된다.
2. IslgrBlk이 참이면, 블록 벡터 후보 리스트인 bvCandList는 다음과 같이 구성된다.
i=0
if(availableFlagA1)
bvCandList [ i++ ] = bvA1 (8-910)
if(availableFlagB1)
bvCandList [ i++ ] = bvB1
3. IslgrBlk이 참이면, 변수 numCurrCand는 bvCandList에서 머지 후보의 수와 동일하게 설정된다.
4. numCurrCand이 MaxNumIbcMergeCand 보다 작고 NumHmvpIbcCand이 0보다 크면, 절 8.6.2.4에 명시된 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스는 bvCandList, 및 IsLgrBlk, numCurrCand를 입력으로, 변경된 bvCandList 및 numCurrCand를 출력으로 하여 호출된다.
5. numCurrCand이 MaxNumIbcMergeCand보다 작으면, numCurrCand이 MaxNumIbcMergeCand와 동일할 때 까지 다음이 적용된다.
1. bvCandList[ numCurrCand ][ 0 ]은 0으로 설정된다.
2. bvCandList[ numCurrCand ][ 1 ] 은 0으로 설정된다.
3. numCurrCand은 1만큼 증가한다.
6. 변수 bvIdx 는 다음과 같이 유도된다.
bvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (8-911)
7. 다음과 같은 할당이 만들어진다.
bvL[ 0 ] = bvCandList[ mvIdx ][ 0 ] (8-912)
bvL[ 1 ] = bvCandList[ mvIdx ][ 1 ] (8-913)
8.6.2.3 IBC 공간적 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 이웃 코딩 유닛의 사용 가능성 플래그 availableFlagA1 및 availableFlagB1,
- 이웃 코딩 유닛의 1/16 분수 샘플 정확도에서 블록 벡터 bvA1, bvB1.
availableFlagA1 및 mvA1 유도를 위해 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbA1, yNbA1 )는 ( xCb - 1,  yCb + cbHeight - 1 )와 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스는 ( xCb, yCb )와 동일하게 설정된 현재 루마 위치, 이웃 루마 위치 ( xNbA1, yNbA1 ), 참(TRUE)으로 설정된 checkPredModeY, 및 0으로 설정된 cIdx을 입력으로 하여 호출되고, 출력은 블록 사용가능성 플래그 availableA1에 할당된다.
- 변수 availableFlagA1 및 bvA1 는 다음과 같이 유도된다.
- availableA1 이 거짓(FALSE)이면, availableFlagA1 은 0과 동일하게 설정되고, bvA1 의 두 성분 모드는 0과 동일하게 설정된다.
- 그 외의 경우, availableFlagA1 는 1과 동일하게 설정되고, 다음의 할당이 만들어진다.
bvA1 = MvL0[ xNbA1 ][ yNbA1 ] (8-914)
availableFlagB1 및 bvB1 의 유도를 위해 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbB1, yNbB1 )는 ( xCb + cbWidth - 1, yCb - 1 )와 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스는 ( xCb, yCb )와 동일하게 설정된 현재 루마 위치 ( xCurr, yCurr ), 이웃 루마 위치 ( xNbB1, yNbB1 ), 참(TRUE)으로 설정된 checkPredModeY, 및 0으로 설정된 cIdx를 입력으로 하여 호출되되 출력은 블록 사용가능성 플래그 availableB1에 할당된다.
- 변수 availableFlagB1 및 bvB1 는 다음과 같이 유도된다.
- 다음 조건 중 하나 이상이 참인 경우, availableFlagB1 은 0으로 설정되며 bvB1 의 두 성분 모두는 0으로 설정된다.
- availableB1 은 거짓(FALSE)이다.
- availableA1 은 참(TRUE)이며, 루마 위치 ( xNbA1, yNbA1 ) 및 ( xNbB1, yNbB1 )는 동일한 블록 벡터를 갖는다.
- 그 외의 경우, availableFlagB1 은 1과 동일하게 설정되고, 다음의 할당이 만들어진다.
bvB1 = MvL0[ xNbB1 ][ yNbB1 ] (8-915)
8.6.2.4 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 블록 벡터 후보 리스트 bvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지 여부를 특정하는 변수 isInSmr,]]
- 작지 않은 블록을 지시하는 변수 IslgrBlk,
- 리스트의 사용 가능한 블록 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 블록 벡터 후보 리스트 bvCandList,
- 리스트의 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 및 isPrunedB1 는 둘 다 거짓(FALSE)으로 설정된다.
인덱스 hMvpIdx = 1.. [[smr]]NumHmvpIbcCand 에 대해 [[smr]]HmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, numCurrCand이 MaxNumIbcMergeCand와 동일해질 때까지 다음 순서의 단계가 반복된다.
1. 변수 sameMotion는 다음과 같이 유도된다.
- IsLgrBlk이 참이고 A1 혹은 B1인 N에 대해 하기 모든 조건이 임의의 블록 벡터 N에 대해 참이면, sameMotion 및 isPrunedN 모두는 참(TRUE)으로 설정된다.
- hMvpIdx 는 1이하이다.
- 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 블록 벡터 후보 N과 동일하다. is
- isPrunedN 은 거짓(FALSE)으로 설정된다.
- 그 외의 경우, sameMotion는 거짓(FALSE)로 설정된다.
2. sameMotion이 거짓(FALSE)이면, 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 다음과 같이 블록 벡터 후보 리스트에 추가된다.
bvCandList[ numCurrCand++ ] = HmvpIbcCandList[ NumHmvpIbcCand - hMvpIdx ] (8-916)
5.5 실시예 #5
블록 크기가 너비=N, 높이=4 및 좌측 이웃 블록이 4x4이고 IBC모드로 코딩되거나 너비=4, 높이=N 및 상단 이웃 블록이 4x4이고 IBC 모드로 코딩되는 것과 같은 특정 조건을 충족할 때 IBC 움직임 리스트 구성 프로세스에서 공간적 머지/AMVP 후보의 검사를 제거하고 HMVP 테이블의 업데이트를 제거한다. 다음 설명에서, N은 예를 들어, 4 혹은 8로 기 정의될 수 있다.
7.4.9.2 코딩 트리 유닛 시멘틱스
CTU는 코딩 트리 구조의 루트 노드이다.
(x, y) 에서의 샘플이 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스에서 사용가능한지 여부를 특정하는 배열 IsAvailable[ cIdx ][ x ][ y ]는 cIdx = 0..2, x = 0..CtbSizeY - 1, 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsAvailable[ cIdx ][ x ][ y ] = FALSE (7-123)
[[(x, y)에서의 샘플이 머지 후보 리스트 영역 내에 위치하는지 여부를 특정하는 배열 IsInSmr[ x ][ y ]은 x = 0..CtbSizeY - 1 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsInSmr[ x ][ y ] = FALSE (7-124)]]
7.4.9.4 코딩 트리 시멘틱스
[[하기의 모든 조건들이 참이면, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 IsInSmr[ x ][ y ]는 참(TRUE)으로 설정된다.
- IsInSmr[ x0 ][ y0 ]는 거짓(FALSE)으로 설정된다.
- cbWidth * cbHeight / 4는 32보다 작다.
- treeType는 DUAL_TREE_CHROMA와 동일하지 않다.
IsInSmr[ x0 ][ y0 ]이 참(TRUE)이면, 배열 SmrX[ x ][ y ], SmrY[ x ][ y ], SmrW[ x ][ y ] 및 SmrH[ x ][ y ]은 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 다음과 같이 유도된다.
SmrX[ x ][ y ] = x0 (7-126)
SmrY[ x ][ y ] = y0 (7-127)
SmrW[ x ][ y ] = cbWidth (7-128)
SmrH[ x ][ y ] = cbHeight (7-129)]]
8.6.2 IBC 블록의 블록 벡터 성분에 대한 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 블록 벡터 bvL.
루마 블록 벡터 bvL은 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 블록 벡터 예측에 대한 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight를 입력으로 하고, 출력을 루마 블록 벡터 bvL로 하여 호출된다.
- general_merge_flag[ xCb ][ yCb ]이 0과 동일하면, 다음이 적용된다.
1. 변수 bvd는 다음과 같이 유도된다.
bvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-900)
bvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-901)
2. 절 8.5.2.14에 명시된 움직임 벡터를 위한 라운딩 프로세스는 bvL과 동일하게 설정된 mvX, AmvrShift와 동일하게 설정된 rightShift, AmvrShift와 동일하게 설정된 leftShift를 입력으로 하고 라운딩된 bvL을 출력으로 하여 호출된다.
3. 루마 블록 벡터 bvL는 다음과 같이 변경된다.
u[ 0 ] = ( bvL[ 0 ] + bvd[ 0 ] + 218 ) % 218 (8-902)
bvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-903)
u[ 1 ] = ( bvL[ 1 ] + bvd[ 1 ] + 218 ) % 218 (8-904)
bvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-905)
주의 1 - 상기에 명시된 bvL[ 0 ] 및 bvL[ 1 ]의 결과값은 항상 -217에서  217 - 1 범위 내이다.
다음 조건들 중 하나는 참이면, 변수 IslgrBlk이 참(true)으로 설정된다.
CbWidth이 N이고, CbHeight이 4이며, 좌측 이웃 블록이 4x4 이고 IBC 모드로 코딩되는 경우
CbWidth이 4이고, CbHeight이 N이며, 상단 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우 그 외의 경우, IsLgrBlk는 거짓(false)으로 설정된다.
(혹은, 대안적으로
변수 IslgrBlk는 ( CbWidth * CbHeight > 16 ? 참(true): 거짓(false))으로 설정되고, 다음이 확인된다.
IsLgrBlk이 참(true)인 경우, CbWidth가 N이고, CbHeight가 4이며, 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되면, IsLgrBlk는 거짓(false)로 설정된다.
IsLgrBlk이 참인 경우, CbWidth가 4이고, CbHeight가 N이며, 상단 이웃 블록이 4x4이고 IBC 모드로 코딩되면, IsLgrBlk는 거짓(false)로 설정된다. )
IsLgrBlk이 참이면 [[IsInSmr[ xCb ][ yCb ]이 거짓(false)임]], 절 8.6.2.6에 명시된 히스토리 기반 블록 벡터 예측자 리스트에 대한 업데이트 프로세스는 루마 블록 벡터 bvL과 함께 호출된다.
루마 블록 벡터 bvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
CtbSizeY 이 ( ( yCb + ( bvL[ 1 ] >> 4 ) ) & ( CtbSizeY - 1 ) ) + cbHeight 이상이다.
x = xCb..xCb + cbWidth - 1 및 y = yCb..yCb + cbHeight - 1에 대해, IbcVirBuf[ 0 ][ ( x + (bvL[ 0 ] >> 4 ) ) & ( IbcVirBufWidth - 1 ) ][ ( y + (bvL[1] >> 4 ) ) & ( CtbSizeY - 1) ] 은 -1과 동일해서는 안된다.
8.6.2.2 IBC 루마 블록 벡터 예측의 유도 프로세스
이 프로세스는 오직 CuPredMode[ 0 ][ xCb ][ yCb ]이 MODE_IBC와 동일한 경우에만 호출된다. 여기서, ( xCb, yCb )는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 블록 벡터 bvL
[[변수 xSmr, ySmr, smrWidth, 및 smrHeight는 다음과 같이 유도된다.
xSmr = IsInSmr[ xCb ][ yCb ]  ?  SmrX[ xCb ][ yCb ]  :  xCb (8-906)
ySmr = IsInSmr[ xCb ][ yCb ]  ?  SmrY[ xCb ][ yCb ]  :  yCb (8-907)
smrWidth = IsInSmr[ xCb ][ yCb ]  ?  SmrW[ xCb ][ yCb ]  :  cbWidth (8-908)
smrHeight = IsInSmr[ xCb ][ yCb ]  ?  SmrH[ xCb ][ yCb ]  :  cbHeight (8-909)]]
다음 조건 중 하나가 참이면 변수 IslgrBlk는 참(true)으로 설정된다.
- CbWidth이 N이고 CbHeight가 4이고 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩된 경우
- CbWidth이 4이고 CbHeight가 4이고 상단 이웃 블록이 4x4이고 IBC 모드로 코딩된 경우
그 외의 경우, IsLgrBlk는 거짓(false)으로 설정된다.
(또는, 대안적으로
변수 IslgrBlk는 ( CbWidth * CbHeight > 16 ? 참(true): 거짓(false)으로 되고, 다음이 더 확인된다.
IsLgrBlk이 참이면, CbWidth이 N이고 CbHeight이 4이며 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩될 때, IsLgrBlk는 거짓(false)으로 설정된다.
IsLgrBlk이 참(true)이면, CbWidth이 4이고 CbHeight이 N이며 상단 이웃 블록이 4x4이고 IBC 모드로 코딩될 때, IsLgrBlk는 거짓(false)으로 설정된다. )
루마 블록 벡터 bvL는 다음 순서와 같은 단계들에 의해 유도된다.
1. IslgrBlk이 참이면, 절 8.6.2.3에 명시된 이웃 코딩 유닛의 공간적 블록 벡터 후보의 유도 프로세스는 (  xCb, yCb [[xSmr, ySmr]] )와 동일하게 설정된 루마 코딩 블록 위치 ( xCb, yCb ), [[smr]] Cb Width 및 [[smr]] Cb Height와 동일하게 설정된 루마 코딩 블록 너비 cbWidth, 및 루마 코딩 블록 높이 cbHeight를 입력으로, 사용가능성 플래그 flags availableFlagA1, availableFlagB1 및 블록 벡터 bvA1, bvB1를 출력으로 하여 호출된다.
2. IslgrBlk이 참이면, 블록 벡터 후보 리스트 bvCandList는 다음과 같이 구성된다.
i=0
if(availableFlagA1)
bvCandList [ i++ ] = bvA1 (8-910)
if(availableFlagB1)
bvCandList [ i++ ] = bvB1
3. IslgrBlk이 참이면, 변수 numCurrCand는 bvCandList에서 머지 후보의 수와 동일하게 설정된다.
4. numCurrCand이 MaxNumIbcMergeCand보다 작고 NumHmvpIbcCand이 0보다 크면, 절 8.6.2.4에 명시된 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스는 bvCandList, 및 IsLgrBlk, 및 numCurrCand를 입력으로, 변경된 bvCandList 및 numCurrCand를 출력으로 하여 호출된다.
5. numCurrCand이 MaxNumIbcMergeCand보다 작으면, numCurrCand이 MaxNumIbcMergeCand와 동일해질 때까지 다음이 적용된다.
1. bvCandList[ numCurrCand ][ 0 ]은 0으로 설정된다.
2. bvCandList[ numCurrCand ][ 1 ]은 0으로 설정된다.
3. numCurrCand은 1만큼 증가한다.
6. 변수 bvIdx는 다음과 같이 유도된다.
bvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (8-911)
7. 다음 할당이 만들어진다.
bvL[ 0 ] = bvCandList[ mvIdx ][ 0 ] (8-912)
bvL[ 1 ] = bvCandList[ mvIdx ][ 1 ] (8-913)
8.6.2.3 IBC 공간적 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 이웃 코딩 유닛의 사용가능성 플래그 availableFlagA1 및 availableFlagB1
- 이웃 코딩 유닛의 1/16 분수 샘플 정확도에서 블록 벡터 bvA1, 및 bvB1,
availableFlagA1 및 mvA1 유도의 경우 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbA1, yNbA1 )는 ( xCb - 1,  yCb + cbHeight - 1 )과 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스는 ( xCb, yCb )와 동일하게 설정된 현재 루마 위치 ( xCurr, yCurr ), 이웃 루마 위치 ( xNbA1, yNbA1 ), 참(TRUE)로 설정된 checkPredModeY, 및 0으로 설정된 cIdx를 입력으로 하여 호출되고, 출력은 블록 사용 가능성 플래그 availableA1 에 할당된다.
- 변수 availableFlagA1 및 bvA1 은 다음과 같이 유도된다.
- availableA1 이 거짓(FALSE)으로 설정되면, availableFlagA1 는 0으로 설정되고 bvA1 의 성분 모두는 0으로 설정된다.
- 그 외의 경우, availableFlagA1 는 1로 설정되고 다음 할당이 만들어진다.
bvA1 = MvL0[ xNbA1 ][ yNbA1 ] (8-914)
availableFlagB1 및 bvB1 유도의 경우 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbB1, yNbB1 )는 ( xCb + cbWidth - 1, yCb - 1 )과 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성의 유도 프로세스는 ( xCb, yCb )와 동일하게 설정된 현재 루마 위치 ( xCurr, yCurr ), 이웃 루마 위치 ( xNbB1, yNbB1 ), 참(TRUE)으로 설정된 checkPredModeY, 및 0으로 설정된 cIdx을 입력으로 하여 호출되고, 출력은 블록 사용 가능성 플래그 availableB1에 할당된다.
- 변수 availableFlagB1 및 bvB1 는 하기와 같이 유도된다.
- 다음의 조건 중 하나 이상이 참이면, availableFlagB1 는 0으로 설정되고 bvB1 의 성분 모두는 0으로 설정된다.
- availableB1 는 거짓(FALSE)으로 설정된다.
- availableA1 은 참(TRUE)이고, 루마 위치 ( xNbA1, yNbA1 ) 및 ( xNbB1, yNbB1 ) 는 동일한 블록 벡터를 갖는다.
- 그 외의 경우, availableFlagB1 는 1과 동일하게 설정되고, 다음과 같은 할당이 만들어진다.
bvB1 = MvL0[ xNbB1 ][ yNbB1 ] (8-915)
8.6.2.4 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 블록 벡터 후보 리스트 bvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지를 특정하는 변수 isInSmr,]]
- 작지 않은 블록 IslgrBlk 을 지시하는 변수 IslgrBlk,
- 리스트에서 사용 가능한 블록 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 블록 벡터 후보 리스트 bvCandList,
- 리스트에서 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 및 isPrunedB1 는 모두 거짓(FALSE)으로 설정된다.
인덱스 hMvpIdx = 1.. [[smr]]NumHmvpIbcCand에 대해 [[smr]]HmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, numCurrCand이 MaxNumIbcMergeCand와 동일해질 때까지 다음 순서의 단계가 반복된다.
1. 변수 sameMotion는 다음과 같이 유도된다.
- IsLgrBlk이 참이고 A1 혹은 B1 인 N에서 임의의 블록 벡터 후보 N에 대해 다음의 조건들 모두가 참인 경우, sameMotion 및 isPrunedN 은 모두 참(TRUE)으로 설정된다.
- hMvpIdx는 1 이하이다.
- 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 블록 벡터 후보 N과 동일하다.
- isPrunedN는 거짓(FALSE)이다.
- 그 외의 경우, sameMotion은 거짓(FALSE)으로 설정된다.
2. sameMotion이 거짓(FALSE)인 경우, 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 다음과 같이 블록 벡터 후보 리스트에 추가된다.
bvCandList[ numCurrCand++ ] = HmvpIbcCandList[ NumHmvpIbcCand - hMvpIdx ] (8-916)
5.6 실시예 #6
블록 크기가 너비* 높이 <=4 이고 좌측 혹은 상단 이웃 블록이 4x4이고 IBC모드로 코딩되는 것과 같은 특정 조건을 충족할 때 IBC 움직임 리스트 구성 프로세스에서 공간적 머지/AMVP 후보의 검사를 제거하고 HMVP 테이블의 업데이트를 제거한다. 다음 설명에서, K는 예를 들어, 16 혹은 32로 기 정의될 수 있다.
7.4.9.2 코딩 트리 유닛 시멘틱스
CTU는 코딩 트리 구조의 루트 노드이다.
(x, y)에서의 샘플이 절 6.4.4에 명시된 이웃 블록 사용 가능성에 대한 유도 프로세스에 사용 가능한지 여부를 특정하는 배열 IsAvailable[ cIdx ][ x ][ y ]은 cIdx = 0..2, x = 0..CtbSizeY - 1, 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsAvailable[ cIdx ][ x ][ y ] = FALSE (7-123)
[[(x, y)에서의 샘플이 공유 머지 후보 리스트 영역 내인지 여부를 특정하는 배열 IsInSmr[ x ][ y ]은 x = 0..CtbSizeY - 1 및 y = 0..CtbSizeY - 1에 대해 다음과 같이 초기화된다.
IsInSmr[ x ][ y ] = FALSE (7-124)]]
7.4.9.4 코딩 트리 시멘틱스
[[하기의 모든 조건들이 참일 때, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 IsInSmr[ x ][ y ] 은 참(TRUE)으로 설정된다.
- IsInSmr[ x0 ][ y0 ]는 거짓(FALSE)으로 설정된다.
- cbWidth * cbHeight / 4는 32보다 작다.
- treeType는 DUAL_TREE_CHROMA와 동일하지 않다.
IsInSmr[ x0 ][ y0 ]이 참(TRUE)이면, x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1에 대해 배열 SmrX[ x ][ y ], SmrY[ x ][ y ], SmrW[ x ][ y ] 및 SmrH[ x ][ y ]은 다음과 같이 유도된다.
SmrX[ x ][ y ] = x0 (7-126)
SmrY[ x ][ y ] = y0 (7-127)
SmrW[ x ][ y ] = cbWidth (7-128)
SmrH[ x ][ y ] = cbHeight (7-129)]]
8.6.2 IBC 블록의 블록 벡터 성분의 유도 프로세스
8.6.2.1 일반론
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 블록 벡터 bvL.
루마 블록 벡터 bvL은 다음과 같이 유도된다.
- 절 8.6.2.2에 명시된 IBC 루마 블록 벡터 예측의 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight을 입력으로, 루마 블록 벡터 bvL를 출력으로 하여 호출된다.
- general_merge_flag[ xCb ][ yCb ]이 0이면, 다음이 적용된다.
1. 변수 bvd는 다음과 같이 유도된다.
bvd[ 0 ] = MvdL0[ xCb ][ yCb ][ 0 ] (8-900)
bvd[ 1 ] = MvdL0[ xCb ][ yCb ][ 1 ] (8-901)
2. 절 8.5.2.14에 명시된 움직임 벡터를 위한 랑룬딩 프로세스는 bvL과 동일하게 설정된 mvX, AmvrShift 와 동일하게 설정된 rightShift, 및 AmvrShift와 동일하게 설정된 leftShift를 입력으로, 라운딩된 bvL을 출력으로 하여 호출된다.
3. 루마 블록 벡터 bvL는 다음과 같이 변경된다.
u[ 0 ] = ( bvL[ 0 ] + bvd[ 0 ] + 218 ) % 218 (8-902)
bvL[ 0 ] = ( u[ 0 ] >= 217 ) ? ( u[ 0 ] - 218 ) : u[ 0 ] (8-903)
u[ 1 ] = ( bvL[ 1 ] + bvd[ 1 ] + 218 ) % 218 (8-904)
bvL[ 1 ] = ( u[ 1 ] >= 217 ) ? ( u[ 1 ] - 218 ) : u[ 1 ] (8-905)
주의 1 - 상기에서 명시된 bvL[ 0 ] 및 bvL[ 1 ]의 결과 값은 항상 -217 에서 217 - 1 범위 내이다.
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true): 거짓(false))으로 설정된다.
IsLgrBlk이 참이면, 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
IsLgrBlk이 참이면, 상단 이웃 블록이 4x4이고, IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
(또는, 대안적으로,
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true): 거짓(false))으로 설정된다.
IsLgrBlk이 참이면, 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
IsLgrBlk이 참이면, 상단 이웃 블록이 현재 블록과 동일한 CTU 내이고 4x4 이며 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다. )
IsLgrBlk이 참인 경우 [[IsInSmr[ xCb ][ yCb ]은 거짓(false)]], 절 8.6.2.6에서 명시된 히스토리 기반 블록 벡터 예측자 리스트에 대한 업데이트 프로세스는 루마 블록 벡터 bvL과 함께 호출된다.
루마 블록 벡터 bvL이 다음 제약 조건을 따라야 하는 것이 비트스트림 규격(적합성)의 요구 사항이다.
- CtbSizeY은 ( ( yCb + ( bvL[ 1 ] >> 4 ) ) & ( CtbSizeY - 1 ) ) + cbHeight 이상이다.
- x = xCb..xCb + cbWidth - 1 및 y = yCb..yCb + cbHeight - 1에 대해 IbcVirBuf[ 0 ][ ( x + (bvL[ 0 ] >> 4 ) ) & ( IbcVirBufWidth - 1 ) ][ ( y + (bvL[1] >> 4 ) ) & ( CtbSizeY - 1) ] 은 -1이여서는 안된다.
8.6.2.2 IBC 루마 블록 벡터 예측의 유도 프로세스
이 프로세스는 오직 CuPredMode[ 0 ][ xCb ][ yCb ]이 MODE_IBC와 동일할 때에만 호출되며, ( xCb, yCb )는 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플을 특정한다.
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 1/16 분수 샘플 정확도에서 루마 블록 벡터 bvL.
[[변수 xSmr, ySmr, smrWidth, 및 smrHeight은 다음과 같이 유도된다.
xSmr = IsInSmr[ xCb ][ yCb ]  ?  SmrX[ xCb ][ yCb ]  :  xCb (8-906)
ySmr = IsInSmr[ xCb ][ yCb ]  ?  SmrY[ xCb ][ yCb ]  :  yCb (8-907)
smrWidth = IsInSmr[ xCb ][ yCb ]  ?  SmrW[ xCb ][ yCb ]  :  cbWidth (8-908)
smrHeight = IsInSmr[ xCb ][ yCb ]  ?  SmrH[ xCb ][ yCb ]  :  cbHeight (8-909)]]
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true): 거짓(false)) 으로 설정된다.
IsLgrBlk이 참이면, 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
IsLgrBlk이 참이면, 상단 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
(또는, 대안적으로,
변수 IslgrBlk는 (cbWidth Х cbHeight  > K ? 참(true): 거짓(false))으로 설정된다.
IsLgrBlk가 참이면, 좌측 이웃 블록이 4x4이고 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다.
IsLgrBlk이 참이면, 상단 이웃 블록이 현재 블록과 동일한 CTU 내이고 4x4이며 IBC 모드로 코딩되는 경우, IsLgrBlk는 거짓(false)으로 설정된다. )
루마 블록 벡터 bvL는 다음 순서의 단계에 의해 유도된다.
1. IslgrBlk 이 참이면, 절 8.6.2.3에 명시된 이웃 코딩 유닛의 공간적 블록 벡터 후보에 대한 유도 프로세스는 (  xCb, yCb [[ xSmr, ySmr]] )와 동일하게 설정된 루마 코딩 블록 위치 ( xCb, yCb ), [[smr]] Cb Width 및 [[smr]] Cb Height와 동일하게 설정된 루마 코딩 블록 너비 cbWidth, 및 루마 코딩 블록 높이 cbHeight를 입력으로, 사용 가능성 플래그 availableFlagA1, availableFlagB1 및 블록 벡터 bvA1, bvB1를 출력으로 하여 호출된다.
2. IslgrBlk이 참이면, 블록 벡터 후보 리스트 bvCandList는 다음과 같이 구성된다.
i=0
if(availableFlagA1)
bvCandList [ i++ ] = bvA1 (8-910)
if(availableFlagB1)
bvCandList [ i++ ] = bvB1
3. IslgrBlk이 참(true)이면, 변수 numCurrCand는 bvCandList의 머지 후보의 수와 동일하게 설정된다.
4. numCurrCand이 MaxNumIbcMergeCand 보다 작고 NumHmvpIbcCand이 0보다 크면, 절 8.6.2.4에 명시된 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스는 bvCandList, 및 IsLgrBlk, 그리고 numCurrCand를 입력으로, 변경된 bvCandList 및 numCurrCand를 출력으로 하여 호출된다.
5. numCurrCand이 MaxNumIbcMergeCand보다 작으면, numCurrCand이 MaxNumIbcMergeCand와 동일해질 때까지 다음이 적용된다.
1. bvCandList[ numCurrCand ][ 0 ]은 0으로 설정된다.
2. bvCandList[ numCurrCand ][ 1 ]은 0으로 설정된다.
3. numCurrCand은 1만큼 증가한다.
6. 변수 bvIdx는 다음과 같이 유도된다.
bvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ] : mvp_l0_flag[ xCb ][ yCb ] (8-911)
7. 다음과 같은 할당이 만들어진다.
bvL[ 0 ] = bvCandList[ mvIdx ][ 0 ] (8-912)
bvL[ 1 ] = bvCandList[ mvIdx ][ 1 ] (8-913)
8.6.2.3 IBC 공간적 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 현재 픽처의 좌측 상단 루마 샘플에 대한 현재 루마 코딩 블록의 좌측 상단 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플에서 현재 코딩 블록의 너비를 특정하는 변수 cbWidth,
- 루마 샘플에서 현재 코딩 블록의 높이를 특정하는 변수 cbHeight.
이 프로세스의 출력은 다음과 같다.
- 이웃 코딩 유닛의 사용 가능성 플래그 availableFlagA1 및 availableFlagB1,
- 이웃 코딩 유닛의 1/16 분수 샘플 정확도에서 블록 벡터 bvA1, 및 bvB1,
availableFlagA1 및 mvA1 의 유도를 위해, 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbA1, yNbA1 )는 ( xCb - 1,  yCb + cbHeight - 1 )와 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성의 유도 프로세스는 ( xCb, yCb )와 동일하게 설정된 현재 루마 위치 ( xCurr, yCurr ), 이웃 루마 위치 ( xNbA1, yNbA1 ), 참(TRUE)으로 설정된 checkPredModeY, 0으로 설정된 cIdx를 입력으로 하여 호출되고, 출력은 블록 사용 가능성 플래그 availableA1에 할당된다.
- 변수 availableFlagA1 및 bvA1 은 다음과 같이 유도된다.
- availableA1이 거짓(FALSE)이면, availableFlagA1 은 0으로 설정되며 bvA1 의 성분 모두는 0으로 설정된다.
- 그 외의 경우, availableFlagA1 는 1과 동일하게 설정되고, 다음 할당이 만들어진다.
bvA1 = MvL0[ xNbA1 ][ yNbA1 ] (8-914)
availableFlagB1 및 bvB1 의 유도의 경우 다음이 적용된다.
- 이웃 루마 코딩 블록 내의 루마 위치 ( xNbB1, yNbB1 )는 ( xCb + cbWidth - 1, yCb - 1 )와 동일하게 설정된다.
- 절 6.4.4에 명시된 이웃 블록 사용 가능성의 유도 프로세스는 ( xCb, yCb )과 동일하게 설정된 현재 루마 위치 ( xCurr, yCurr ), 이웃 루마 위치 ( xNbB1, yNbB1 ), 참(TRUE)으로 설정된 checkPredModeY, 및 0으로 설정된 cIdx을 입력으로 하여 호출되고, 출력은 블록 사용 가능성 플래그 availableB1 에 할당된다.
- 변수 availableFlagB1 및 bvB1 은 다음과 같이 유도된다.
- 다음 조건중 하나 이상이 참이면, availableFlagB1 은 0으로 설정되고 bvB1 의 성분 모두는 0으로 설정된다.
- availableB1 이 거짓(FALSE)이다.
- availableA1 이 참(TRUE)이고, 루마 위치 ( xNbA1, yNbA1 ) 및 ( xNbB1, yNbB1 ) 가 동일한 블록 벡터를 갖는다.
- 그 외의 경우, availableFlagB1 은 1로 설정되고 다음의 할당이 만들어진다.
bvB1 = MvL0[ xNbB1 ][ yNbB1 ] (8-915)
8.6.2.4 IBC 히스토리 기반 블록 벡터 후보의 유도 프로세스
이 프로세스의 입력은 다음과 같다.
- 블록 벡터 후보 리스트 bvCandList,
- [[현재 코딩 유닛이 공유 머지 후보 영역 내인지를 특정하는 변수 isInSmr,]]
- 작지 않은 블록을 지시하는 변수 IslgrBlk,
- 리스트에서 사용 가능한 블록 벡터 후보의 수 numCurrCand.
이 프로세스의 출력은 다음과 같다.
- 변경된 블록 벡터 후보 리스트 bvCandList,
- 리스트에서 움직임 벡터 후보의 변경된 수 numCurrCand.
변수 isPrunedA1 및 isPrunedB1 는 둘 다 거짓(FALSE)으로 설정된다.
인덱스 hMvpIdx = 1.. [[smr]]NumHmvpIbcCand에 대해 [[smr]]HmvpIbcCandList[ hMvpIdx ]의 각 후보의 경우, numCurrCand이 MaxNumIbcMergeCand와 동일할 때까지 다음 순서의 단계들이 반복된다.
1. 변수 sameMotion는 다음과 같이 유도된다.
- IsLgrBlk이 참이고 A1 혹은 B1인 N에서 임의의 블록 벡터 후보 N에 대해 다음의 조건들이 모두 참이면, sameMotion 및 isPrunedN 은 모두 참(TRUE)으로 설정된다.
- hMvpIdx는 1이하이다.
- 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 블록 벡터 후보 N과 동일하다.
- isPrunedN는 거짓(FALSE)이다.
- 그 외의 경우, sameMotion는 거짓(FALSE)와 동일하게 설정된다.
2. sameMotion이 거짓(FALSE)이면, 후보 HmvpIbcCandList[NumHmvpIbcCand - hMvpIdx]는 다음과 같이 블록 벡터 후보 리스트에 추가된다.
bvCandList[ numCurrCand++ ] = HmvpIbcCandList[ NumHmvpIbcCand - hMvpIdx ] (8-916)
도 22는 비디오 프로세싱 장치(2200)의 블록도이다. 장치(2200)는 본 명세서에서 설명되는 방법들 중 하나 이상을 구현하기 위하여 사용될 수 있다. 장치(2200)는 스마트 폰, 태블릿, 컴퓨터, 사물 인터넷(Internet of Things; IoT) 수신기 등 내에 구현될 수 있다. 장치(2200)는 하나 이상의 프로세서(2202), 하나 이상의 메모리(2204) 및 비디오 처리 하드웨어(2206)를 포함할 수 있다. 프로세서(들)(2202)는 본 명세서에서 설명되는 하나 이상의 방법을 구현하도록 구성될 수 있다. 메모리(메모리들)(2204)는 본 명세서에서 설명되는 방법 및 기법들을 구현하기 위한 데이터 및 코드를 저장하기 위해서 사용될 수 있다. 비디오 프로세싱 하드웨어(2206)는 하드웨어 회로부 내에서, 본 명세서에서 설명되는 일부 기법을 구현하기 위하여 사용될 수 있다. 비디오 프로세싱 하드웨어(2206)는 프로세서(들)(2202) 내에 부분적으로 또는 전체적으로, 전용 하드웨어, 또는 그래픽 프로세서 유닛(GPU) 또는 전문화된 신호 프로세싱 블록으로서 포함될 수 있다.
도 23은 비디오 프로세싱 방법(2300)의 예에 대한 흐름도이다. 방법(2300)은 동작(2302)에서, 서브 블록 인트라 블록 복사(sbIBC) 코딩 모드를 사용하기로 결정하는 단계를 포함한다. 방법(2300)은 또한 동작(2304)에서 sbIBC 코딩 모드를 사용하여 변환을 수행하는 단계를 포함한다.
일부 실시예는 다음 절 기반 설명을 사용하여 설명될 수 있다.
다음 절은 이전 섹션의 항목 1에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 비디오 영역의 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브블록 인트라 블록 복사(sbIBC) 코딩 모드를 사용하도록 결정하는 단계를 포함한다. 여기서 현재 비디오 블록이 다수의 서브블록으로 분할되고 각 서브블록이 비디오 영역으로부터의 참조 샘플에 기초하여 코딩되며, 서브블록의 크기는 분할 규칙에 기초한다. 그리고 다수의 서브-블록에 대해 sbIBC 코딩 모드를 사용하여 변환을 수행하는 단계가 포함된다.
2. 1절의 방법에서, 현재 비디오 블록은 MxN 블록이고, 여기서 M 및 N은 정수이고, 분할 규칙은 각각의 서브-블록이 동일한 크기를 가짐을 지정한다.
3. 1절의 방법에서, 비트스트림 표현은 분할 규칙 또는 서브블록의 크기를 나타내는 신택스 요소를 포함한다.
4. 1-3 절 중 어느 하나의 방법에서, 분할 규칙은 현재 비디오 블록의 색상 성분에 따라 서브블록의 크기를 지정한다.
5. 1-4 절 중 어느 하나의 방법에서, 제1 색상 성분의 서브블록은 현재 비디오 블록에 대응하는 제2 색상 성분의 서브블록으로부터 그들의 움직임 벡터 정보를 유도할 수 있다.
다음 절은 이전 섹션의 항목 2 및 6에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 비디오 영역의 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브블록 인트라 블록 복사(sbIBC) 코딩 모드를 사용하도록 결정하는 단계를 포함한다. 여기서, 현재 비디오 블록은 다수의 서브블록으로 분할되고 각 서브블록은 비디오 영역으로부터의 참조 샘플에 기초하여 코딩된다. 그리고 다수의 서브블록에 대한 sbIBC 코딩 모드를 사용하여 변환을 수행하는 단계를 포함하고, 변환은 주어진 서브블록에 대한 초기화된 모션 벡터(initMV)를 결정하는 단계, initMV로부터 참조 블록을 식별하는 단계; 및 참조 블록에 대한 MV 정보를 이용하여 주어진 서브 블록에 대한 MV(motion vector) 정보를 유도하는 단계를 포함한다.
2. 1절의 방법에서, initMV를 결정하는 단계는 주어진 서브블록의 하나 이상의 이웃 블록으로부터 initMV를 결정하는 단계를 포함한다.
3. 2절의 방법에서, 하나 이상의 이웃 블록은 순서대로 검사된다.
4. 1절의 방법에서, initMV를 결정하는 단계는 움직임 후보 리스트로부터 initMV를 유도하는 단계를 포함한다.
5. 1-4 절 중 어느 하나의 방법에서, 참조 블록을 식별하는 단계는 initMV를 1픽셀 정밀도로 변환하는 단계 및 변환된 initMV에 기초하여 참조 블록을 식별하는 단계를 포함한다.
6. 1-4 절 중 어느 하나의 방법에서, 참조 블록을 식별하는 단계는 initMV를 주어진 블록 내의 오프셋 위치에 적용하는 단계를 포함하고, 오프셋 위치는 주어진 서브 블록의 미리 결정된 위치로부터 (offsetX, offsetY)만큼 오프셋되는 것으로 표시된다.
7. 1-6 절 중 어느 하나의 방법에서, 주어진 서브블록에 대한 MV를 유도하는 단계는 참조 블록에 대한 MV 정보를 클리핑하는 단계를 포함한다.
8. 1-7 절 중 어느 하나의 방법에서, 참조 블록은 현재 비디오 블록의 것과 상이한 색상 성분 내에 있다.
다음 절은 이전 섹션의 항목 3, 4 및 5에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 비디오 영역의 현재 비디오 블록과 현재 비디오가 포함된 현재 비디오 블록의 비트스트림 표현 간의 변환에서 서브 블록 인트라 블록 복사(sbIBC) 코딩 모드를 사용하도록 결정하는 단계, 여기서 현재 비디오 블록은 다중 서브 블록으로 분할되고 각 서브 블록은 비디오 영역의 참조 샘플에 기초하여 코딩되고, 다중 서브블록에 대한 sbIBC 코딩 모드를 사용하여 변환을 수행하는 단계를 포함하며, 변환은 서브블록 IBC 후보를 생성하는 단계를 포함한다.
2. 1절의 방법에서, 서브블록 IBC 후보는 대안적인 움직임 벡터 예측자 후보를 포함하는 후보 리스트에 추가된다.
3. 1절의 방법에서, 서브블록 IBC 후보는 어파인 머지 후보를 포함하는 리스트에 추가된다.
다음 절은 이전 섹션의 항목 7, 8, 9, 10, 11, 12 및 13에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하며, 여기서 변환은 서브블록 인트라 블록 코딩(sbIBC) 모드를 사용하여 다수의 서브 블록의 제1 서브 블록을 프로세싱하고 인트라 코딩 모드를 사용하여 다수의 서브 블록의 제2 서브 블록을 프로세싱하는 단계를 포함한다.
2. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하며, 여기서 변환은 인트라 코딩 모드를 사용하여 다수의 서브블록들 중 모든 서브 블록들을 프로세싱하는 단계를 포함한다.
3. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하되, 여기서 변환은 대표 픽셀 값의 팔레트가 각 서브 블록을 코딩하는 데 사용되는 팔레트 코딩 모드를 사용하여 다수의 서브 블록들 모두를 프로세싱하는 단계를 포함한다.
4. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 간의 변환을 수행하는 단계를 포함하며, 여기서 변환은 대표 픽셀 값들의 팔레트가 제1 서브 블록을 코딩하는 데 사용되는 팔레트 모드를 이용하여 다수의 서브 블록들 중 제1 서브 블록을 프로세싱하고, 인트라 블록 복사 코딩 모드를 이용하여 다수의 서브블록들 중 제2 서브 블록을 프로세싱하는 단계를 포함한다.
5. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 사이의 변환을 수행하는 단계를 포함하되, 여기서 변환은 대표 픽셀 값들의 팔레트가 제1 서브 블록을 코딩하는 데 사용되는 팔레트 모드를 이용하여 다수의 서브 블록들 중 제1 서브 블록을 프로세싱하고, 인트라 코딩 모드를 이용하여 다수의 서브블록들 중 제2 서브 블록을 프로세싱하는 단계를 포함한다.
6. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 사이의 변환을 수행하는 단계를 포함하되, 여기서 변환은 서브블록 인트라 블록 코딩(sub-block intra block coding, sbIBC) 모드를 이용하여 다수의 서브 블록들 중 제1 서브 블록을 프로세싱하고, 인터 코딩 모드를 이용하여 다수의 서브블록들 중 제2 서브 블록을 프로세싱하는 단계를 포함한다.
7. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 비트스트림 표현과 다수의 서브 블록들로 분할된 현재 비디오 블록 사이의 변환을 수행하는 단계를 포함하되, 여기서 변환은 서브블록 인트라 코딩 모드를 이용하여 다수의 서브 블록들 중 제1 서브 블록을 프로세싱하고, 인터 코딩 모드를 이용하여 다수의 서브블록들 중 제2 서브 블록을 프로세싱하는 단계를 포함한다.
다음 절은 이전 섹션의 항목 14에서 논의된 기술의 예시적인 실시예를 보여준다.
8. 1-7 절중 어느 하나의 방법에서, 방법은 현재 비디오 블록의 변환 후에 IBC 히스토리 기반 움직임 벡터 예측자 테이블을 업데이트하는 것을 억제하는 단계를 더 포함한다.
다음 절은 이전 섹션의 항목 15에서 논의된 기술의 예시적인 실시예를 보여준다.
9. 1-7 절 중 어느 하나 이상의 방법에서, 현재 비디오 블록의 변환 후에 비-IBC 히스토리 기반 움직임 벡터 예측자 테이블을 업데이트하는 것을 억제하는 단계를 더 포함한다.
다음 절은 이전 섹션의 항목 16에서 논의된 기술의 예시적인 실시예를 보여준다.
10. 1-7 절 중 어느 하나의 방법에서, 변환은 프로세싱에 기반한 인루프(in-loop) 필터의 선택적 사용을 포함한다.
다음 절은 이전 섹션의 항목 1에서 논의된 기술의 예시적인 실시예를 보여준다.
17. 1-7 절 중 어느 하나의 방법에서, 변환을 수행하는 단계는 방법의 사용으로 인해 현재 비디오 블록에 대한 특정 코딩 모드를 비활성화함으로써 변환을 수행하는 단계를 포함하고, 여기서 특정 코딩 모드는 서브 블록 변환, 어파인 움직임 예측, 다중 참조 라인 인트라 예측, 매트릭스 기반 인트라 예측, 대칭 움직임 벡터 차이(MVD) 코딩, MVD 디코더 측 모션 유도/개선과 머지, 양방향 광학 흐름, 축소된 2차 변환 혹은 다중 변환 세트 중 하나 이상을 포함한다.
다음 절은 이전 섹션의 항목 18에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 상기 절 중 어느 하나의 방법에서, 비트스트림 표현의 지시자는 현재 비디오 블록에 방법이 어떻게 적용되는지에 대한 정보를 포함한다.
다음 절은 이전 섹션의 항목 19에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 인코딩 방법으로서, 현재 비디오 블록을 비트스트림 표현으로 인코딩하기 위해 상기 절들 중 어느 하나에 인용된 방법을 사용하기로 결정하는 단계 및 디코더 파라미터 세트 레벨 또는 시퀀스 파라미터 세트 레벨 또는 비디오 파라미터 세트 레벨 또는 픽처 파라미터 세트 레벨 또는 픽처 헤더 레벨 또는 슬라이스 헤더 레벨 또는 타일 그룹 헤더 레벨 또는 최대 코딩 유닛 레벨 또는 코딩 유닛 레벨 또는 최대 코딩 유닛 행 레벨 또는 LCU 레벨의 그룹 또는 변환 유닛 레벨 또는 예측 유닛 레벨 또는 비디오 코딩 유닛 레벨에서 비트스트림 표현의 결정을 나타내는 정보를 포함하는 단계를 포함한다.
2. 비디오 인코딩 방법으로서, 인코딩 조건에 기초하여 현재 비디오 블록을 비트스트림 표현으로 인코딩하기 위해 상기 절들 중 어느 하나에 인용된 방법을 사용하기로 결정하는 단계 및 상기 절들 중 어느 하나에 인용된 방법을 사용하여 인코딩을 수행하는 단계를 포함하고, 여기서 조건은 코딩 유닛, 예측 유닛, 변환 유닛, 현재 비디오 블록 혹은 현재 비디오 블록의 비디오 코딩 유닛의 위치,
현재 비디오 블록 및/혹은 그의 이웃 블록의 블록 차원,
현재 비디오 블록 및/혹은 그의 이웃 블록의 블록 형태,
현재 비디오 블록 및/혹은 그의 이웃 블록의 인트라 모드,
현재 비디오 블록의 이웃 블록의 움직임/블록 벡터;
현재 비디오 블록의 색상 포맷;
코딩 트리 구조;
현재 비디오 블록의 슬라이스 혹은 타일 그룹 유형 혹은 픽처 유형;
현재 비디오 블록의 색상 성분;
현재 비디오 블록의 시간적 레이어 ID;
비트스트림 표현에 사용되는 프로파일 혹은 레벨 혹은 표준 중 하나 이상에 기초한다.
다음 절은 이전 섹션의 항목 20에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 비디오 영역의 블록과 비디오 영역의 비트스트림 표현 간의 변환을 위해 인트라 블록 복사 모드 및 인터 예측 모드를 사용하도록 결정하는 단계 및 비디오 영역의 블록에 대해 인트라 블록 복사 모드 및 인터 예측 모드를 사용하여 변환을 수행하는 단계를 포함한다.
2. 1절의 방법에서, 비디오 영역은 비디오 픽처 또는 비디오 슬라이스 또는 비디오 타일 그룹 또는 비디오 타일을 포함한다.
3. 1-2 절 중 어느 하나의 방법에서, 인터 예측 모드는 대안적인 움직임 벡터 예측자(AMVP) 코딩 모드를 사용한다.
4. 1-3절 중 어느 하나의 방법에서, 변환을 수행하는 단계는 이웃 블록들로부터 인트라 블록 복사 모드에 대한 머지 후보들을 유도하는 단계를 포함한다.
다음 절은 이전 섹션의 항목 21에서 논의된 기술의 예시적인 실시예를 보여준다.
1. 비디오 프로세싱 방법으로서, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안, 코딩 조건에 따라, 의존적인 움직임 후보 리스트 구성 프로세스 및/혹은 히스토리 기반 움직임 벡터 예측자 테이블을 업데이트하기 위한 테이블 업데이트 프로세스를 수행하는 단계 및 움직임 후보 리스트 구성 프로세스 및/혹은 테이블 업데이트 프로세스를 기반으로 변환을 수행하는 단계를 포함한다.
2. 1절의 방법에서, 코딩 조건이 충족되거나 충족되지 않을 때 상이한 프로세스가 적용될 수 있다.
3. 1절의 방법에서, 코딩 조건이 충족될 때, 히스토리 기반 움직임 벡터 예측자 테이블의 업데이트는 적용되지 않는다.
4. 1절의 방법에서, 코딩 조건이 충족될 때, 공간적 이웃(인접 또는 비인접) 블록으로부터 후보의 유도는 생략된다.
5. 1절의 방법에서, 코딩 조건이 만족될 때, HMVP 후보의 유도는 생략된다.
6. 1절의 방법에서, 코딩 조건은 블록 너비 곱하기 높이가 16 혹은 32 혹은 64 보다 크지 않음을 포함한다.
7. 1절의 방법에서, 코딩 조건은 블록이 IBC 모드로 코딩되는 것을 포함한다.
8. 1 절의 방법에서, 코딩 조건은 이전 섹션의 항목 21.b.s.iv에 설명된 바와 같다.
상기 절 중 어느 하나의 방법에서, 변환은 현재 비디오 블록으로부터 비트스트림 표현을 생성하는 것을 포함한다.
상기 절 중 어느 하나의 방법에서, 변환은 비트스트림 표현으로부터 현재 비디오 블록의 샘플들을 생성하는 것을 포함한다.
비디오 프로세싱 장치는 상기 절 중 임의의 하나 이상에서 인용된 방법을 구현하도록 구성된 프로세서를 포함한다.
코드가 저장되어 있는 컴퓨터 판독 가능 매체는 실행 시 코드는 프로세서로 하여금 상기 절 중 임의의 하나 이상에 인용된 방법을 구현하게 한다.
도 24는 본 명세서에 개시된 다양한 기법들이 구현될 수 있는 하나의 예시적인 비디오 프로세싱 시스템(2400)을 도시하는 블록도이다. 다양한 구현형태들은 시스템(2400)의 구성요소들 중 일부 또는 전부를 포함할 수 있다. 시스템(2200)은 비디오 콘텐츠를 수신하기 위한 입력부(2402)를 포함할 수 있다. 비디오 콘텐츠는 원시 또는 미압축 포맷으로, 예를 들어 8 또는 10 비트의 다성분 픽셀 값으로 수신될 수 있고, 또는 압축되거나 인코딩된 포맷일 수도 있다. 입력부(2402)는 네트워크 인터페이스, 주변 버스 인터페이스, 또는 저장 인터페이스를 나타낼 수 있다. 네트워크 인터페이스의 예는 이더넷, 수동형 광 네트워크(passive optical network; PON) 등과 같은 유선 인터페이스 및 Wi-Fi 또는 셀룰러 인터페이스와 같은 무선 인터페이스를 포함한다.
시스템(2400)은 본 명세서에서 설명되는 다양한 코딩 또는 인코딩 방법을 구현할 수 있는 코딩 컴포넌트(2404)를 포함할 수 있다. 코딩 컴포넌트(2404)는 ,비디오의 코딩된 표현을 생성하기 위해 입력부(2402)로부터 코딩 컴포넌트(2404)의 출력부 사이에서 비디오의 평균 비트율을 감소시킬 수 있다. 그러므로, 코딩 기법은 가끔 비디오 압축 또는 비디오 트랜스코딩 기법이라고 불린다. 코딩 컴포넌트(2404)의 출력은 저장되거나, 컴포넌트(2406)로 표현되는 바와 같이 연결된 통신부를 통해서 송신될 수 있다. 입력부(2402)에서 수신된 비디오의 저장되거나 통신된 비트스트림(또는 코딩된) 표현은, 디스플레이 인터페이스(2410)로 전송되는 픽셀 값 또는 표시가능한 비디오를 생성하기 위해서 컴포넌트(2408)에 의해 사용될 수 있다. 비트스트림 표현으로부터 사용자가 시청할 수 있는 비디오를 생성하는 프로세스는 가끔 비디오 압축해제라고 불린다. 더욱이, 어떤 비디오 처리 동작들이 "코딩" 동작 또는 도구라고 불리는 반면에, 코딩 도구 또는 동작은 인코더 및 대응하는 디코딩 도구에서 사용되고, 또는 코딩의 결과를 반전시키는 동작이 디코더에 의해 수행될 것이라는 것이 이해될 것이다.
주변 버스 인터페이스 또는 디스플레이 인터페이스의 예는 범용적 시리얼 버스(universal serial bus; USB) 또는 고분해능 멀티미디어 인터페이스(high definition multimedia interface; HDMI) 또는 디스플레이포트(Displayport) 등을 포함할 수 있다. 저장 인터페이스의 예는 SATA(serial advanced technology attachment), PCI, IDE 인터페이스 등을 포함한다. 본 명세서에서 설명되는 기법은, 모바일 폰, 랩탑, 스마트 폰 또는 디지털 데이터 프로세싱 및/혹은 비디오 디스플레이를 수행할 수 있는 다른 디바이스와 같은 다양한 전자 디바이스에서 구현될 수 있다.
도 25는 본 기술에 따른 비디오 프로세싱 방법(2500)의 흐름도 표현이다. 방법(2500)은 동작(2510)에서 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위해 현재 블록이 다수의 서브 블록들로 분할되도록 결정하는 단계를 포함한다. 다수의 블록들 중 적어도 하나는 현재 블록의 현재 픽처로부터의 하나 이상의 비디오 영역의 참조 샘플들을 사용하는 변경된 IBC(intra-block copy) 코딩 기술을 사용하여 코딩된다. 방법(2500)은 동작(2520)에서, 결정에 기초하여 변환을 수행하는 단계를 포함한다.
일부 실시예에서, 비디오 영역은 현재 픽처, 슬라이스, 타일, 브릭, 또는 타일 그룹을 포함한다. 일부 실시예에서, 현재 블록이 MХN의 차원을 갖는 경우에 현재 블록은 다수의 서브 블록들로 분할되고, 여기서 M 및 N은 정수이다. 일부 실시예에서, 다수의 서브 블록들은 LХK의 동일한 크기를 가지며, L 및 K는 정수이다. 일부 실시예에서, L=K이다. 일부 실시예에서, L = 4 또는 K = 4이다.
일부 실시예에서, 다수의 서브 블록들은 상이한 크기를 갖는다. 일부 실시예에서, 다수의 서브 블록들은 직사각형이 아닌 형상을 갖는다. 일부 실시예에서, 다수의 서브 블록들은 삼각형 또는 웨지렛(wedgelet) 형상을 갖는다.
일부 실시예에서, 다수의 서브 블록들 중 적어도 하나의 크기는 최소 코딩 유닛, 최소 예측 유닛, 최소 변환 유닛, 또는 움직임 정보 저장을 위한 최소 유닛의 크기에 기초하여 결정된다. 일부 실시예에서, 적어도 하나의 서브블록의 크기는 (N1xminW)x (N2xminH)로 표현되며, 여기서 minWxminH는 최소 코딩 유닛, 예측 유닛, 변환 유닛, 또는 움직임 정보 저장을 위한 유닛의 크기로서, N1 및 N2는 양의 정수이다. 일부 실시예에서, 다수의 서브 블록들 중 적어도 하나의 크기는 현재 블록이 비트스트림 표현으로 코딩되는 코딩 모드에 기초한다. 일부 실시예에서, 코딩 모드는 적어도 인트라 블록 복사(IBC) 머지 모드, 또는 서브블록 시간적 움직임 벡터 예측 모드를 포함한다. 일부 실시예에서, 다수의 서브블록들 중 적어도 하나의 크기는 비트스트림 표현에서 시그널링된다.
일부 실시예에서, 방법은 비디오의 후속 블록이 변환을 위해 다수의 서브 블록들로 분할되도록 결정하는 단계를 포함하며, 여기서 현재 블록의 제1 서브블록은 후속블록의 제2 서브블록과 상이한 크기를 갖는다. 일부 실시예에서, 제1 서브 블록의 크기는 현재 블록의 차원 및 후속 블록의 차원에 따라 제2 서브 블록의 크기와 상이하다. 일부 실시예에서, 다수의 서브 블록들 중 적어도 하나의 크기는 비디오의 색상 포맷 또는 색상 성분에 기초한다. 일부 실시예에서, 제1 서브 블록은 비디오의 제1 색상 성분과 연관되고 제2 서브 블록은 비디오의 제2 색상 성분과 연관되며, 제1 서브 블록 및 제2 서브 블록은 상이한 차원을 갖는다. 일부 실시예에서, 비디오의 색상 포맷이 4:2:0인 경우, 루마 성분과 연관된 제1 서브 블록은 2LХ2K의 차원을 갖고 크로마 성분과 연관된 제2 서브 블록은 LХK 차원을 갖는다. 일부 실시예에서, 비디오의 색상 포맷이 4:2:2인 경우, 루마 성분과 연관된 제1 서브 블록은 2LХ2K의 차원을 갖고 크로마 성분과 연관된 제2 서브 블록은 2LХK 차원을 갖는다. 일부 실시예에서, 제1 서브 블록은 비디오의 제1 색상 성분과 연관되고 제2 서브 블록은 비디오의 제2 색상 성분과 연관되며, 제1 서브 블록 및 제2 서브 블록은 동일한 차원을 갖는다. 일부 실시예에서, 루마 성분과 연관된 제1 서브 블록은 2LХ2K의 차원을 갖고, 크로마 성분과 연관된 제2 서브 블록은 비디오의 색상 포맷이 4:2:0 혹은 4:4:4인 경우에 2LХ2K의 차원을 갖는다.
일부 실시예에서, 비디오의 제1 색상 성분과 연관된 제1 서브 블록의 움직임 벡터는 비디오의 제2 색상 성분과 연관된 하나 이상의 서브 블록에 기초하여 결정된다. 일부 실시예에서, 제1 서브 블록의 움직임 벡터는 제2 색상 성분과 연관된 하나 이상의 서브 블록의 움직임 벡터의 평균이다. 일부 실시예에서, 현재 블록은 단일 트리 분할 구조에 기초하여 다수의 서브블록으로 분할된다. 일부 실시예에서, 현재 블록은 비디오의 크로마 성분과 연관된다. 일부 실시예에서, 현재 블록은 4x4의 크기를 갖는다.
일부 실시예에서, 다수의 서브 블록들 중 적어도 하나의 서브 블록의 움직임 정보는 초기 움직임 벡터에 기초하여 참조 블록을 식별하고 참조 블록에 기초하여 서브 블록의 움직임 정보를 결정하는 것에 기초하여 결정된다. 일부 실시예에서, 참조 블록은 현재 픽처 내에 위치된다. 일부 실시예에서, 참조 블록은 하나 이상의 참조 픽처의 참조 픽처 내에 위치된다. 일부 실시예에서, 하나 이상의 참조 픽처 중 적어도 하나는 현재 픽처이다. 일부 실시예에서, 참조 블록은 시간적 정보에 따라 하나 이상의 참조 픽처 중 하나와 동일 위치에 있는 동일 위치 참조 픽처 내에 위치된다. 일부 실시예에서, 참조 픽처는 동일 위치 블록 또는 동일 위치 블록의 이웃 블록의 움직임 정보에 기초하여 결정된다. 동일 위치 블록은 시간적 정보에 따라 현재 블록과 동일 위치에 놓이게 된다. 일부 실시예에서, 참조 블록의 초기 움직임 벡터는 현재 블록의 하나 이상의 이웃 블록 또는 서브 블록의 하나 이상의 이웃 블록에 기초하여 결정된다. 일부 실시예에서, 하나 이상의 이웃 블록은 현재 블록 또는 서브 블록의 인접 블록 및/또는 인접하지 않은 블록을 포함한다. 일부 실시예에서, 하나 이상의 이웃 블록 및 참조 블록 중 적어도 하나는 동일한 픽처 내에 위치된다. 일부 실시예에서, 하나 이상의 이웃 블록 중 적어도 하나는 하나 이상의 참조 픽처의 참조 픽처 내에 위치된다. 일부 실시예에서, 하나 이상의 이웃 블록 중 적어도 하나는 시간적 정보에 따라 하나 이상의 참조 픽처 중 하나와 동일 위치에 놓이는 참조 픽처 내에 위치된다. 일부 실시예에서, 참조 픽처는 동일 위치 블록 또는 동일 위치 블록의 이웃 블록의 움직임 정보에 기초하여 결정되며, 동일 위치 블록은 시간적 정보에 따라 현재 블록과 동일 위치에 놓이게 된다.
일부 실시예에서, 초기 움직임 벡터는 하나 이상의 이웃 블록 중 하나에 저장된 움직임 벡터와 동일하다. 일부 실시예에서, 초기 움직임 벡터는 변환을 위해 하나 이상의 이웃 블록이 검사되는 순서에 기초하여 결정된다. 일부 실시예에서, 초기 움직임 벡터는 현재 픽처와 연관된 제1 식별된 움직임임 벡터이다. 일부 실시예에서, 참조 블록의 초기 움직임 벡터는 움직임 후보 리스트에 기초하여 결정된다. 일부 실시예에서, 움직임 후보 리스트는 인트라 블록 복사 (IBC) 후보 리스트, 머지 후보 리스트, 서브 블록 시간적 움직임 벡터 예측 후보 리스트, 또는 지난 움직임 예측 결과를 기반으로 결정되는 히스토리 기반 움직임 후보 리스트를 포함한다. 일부 실시예에서, 초기 움직임 벡터는 리스트에서 선택된 후보에 기초하여 결정된다. 일부 실시예에서, 선택된 후보는 리스트의 첫 번째 후보이다. 일부 실시예들에서, 후보 리스트는 종래의 구성 프로세스에서 공간적 이웃 블록들과 상이한 공간적 이웃 블록들을 사용하는 프로세스에 기초하여 구성된다.
일부 실시예에서, 참조 블록의 초기 움직임 벡터는 현재 픽처에서 현재 블록의 위치에 기초하여 결정된다. 일부 실시예에서, 참조 블록의 초기 움직임 벡터는 현재 블록의 차원에 기초하여 결정된다. 일부 실시예에서, 초기 움직임 벡터는 기본 값으로 설정된다. 일부 실시예에서, 초기 움직임 벡터는 비디오 유닛 레벨의 비트스트림 표현에 표시된다. 일부 실시예에서, 비디오 유닛은 타일, 슬라이스, 픽처, 브릭, 코딩 트리 유닛(CTU)의 행, CTU, 코딩 트리 블록(CTB), 코딩 유닛(CU), 예측 유닛(PU) 또는 변환 유닛(TU)을 포함한다. 일부 실시예에서, 서브 블록에 대한 초기 움직임 벡터는 현재 블록의 제2 서브 블록에 대한 다른 초기 움직임 블록과 상이하다. 일부 실시예에서, 현재 블록의 다수의 서브 블록들의 초기 움직임 벡터는 비디오 유닛에 따라 다르게 결정된다. 일부 실시예에서, 비디오 유닛은 블록, 타일, 또는 슬라이스를 포함한다.
일부 실시예에서, 참조 블록을 식별하기 전에, 초기 움직임 벡터는 F-픽셀 정수 정밀도로 변환되고, F는 1 이상의 양의 정수이다. 일부 실시예에서, F는 1, 2, 또는 4이다. 일부 실시예에서, 초기 움직임 벡터는 (vx, vy)로 표현되고, 변환된 움직임 벡터(vx', vy')는 (vxХF, vyХF)로 표현된다. 일부 실시예에서, 서브 블록의 좌측 상단 위치는 (x,y)로 표현되고 서브 블록은 LХK의 크기를 가지며, L은 현재 서브 블록의 폭이고 K는 서브 블록의 높이이다. 참조 블록은 (x + offsetX + vx', y + offsetY + vy')를 커버하는 구역으로 식별되며 offsetX 및 offset은 음수가 아닌 값이다. 일부 실시예에서, offsetX는 0 및/또는 offsetY는 0이다. 일부 실시예에서, offsetX는 L/2, L/2+1, 또는 L/2-1과 동일하다. 일부 실시예에서, offsetY는 K/2, K/2+1, 또는 K/2-1과 동일하다. 일부 실시예에서, offsetX 및/또는 offsetY는 픽처, 슬라이스, 타일, 브릭, 또는 인트라 블록 복사 참조 구역을 포함하는 범위 내에서 클리핑된다.
일부 실시예에서, 서브 블록의 움직임 벡터는 참조 블록의 움직임 정보에 더 기초하여 결정된다. 일부 실시예에서, 서브 블록의 움직임 벡터는 참조 블록의 움직임 벡터가 현재 픽처를 향하는 경우 참조 블록의 움직임 벡터와 동일하다. 일부 실시예에서, 서브 블록의 움직임 벡터는 참조 블록의 움직임 벡터가 현재 픽처를 향하는 경우 참조 블록의 움직임 벡터에 초기 움직임 벡터를 더하는 것에 기초하여 결정된다. 일부 실시예에서, 서브 블록의 움직임 벡터는 서브 블록의 움직임 벡터가 인트라 블록 복사 참조 구역으로 향하도록 하는 범위 내에서 클리핑된다. 일부 실시예에서, 서브 블록의 움직임 벡터는 서브 블록의 인트라 블록 복사 후보의 유효한 움직임 벡터이다.
일부 실시예에서, 서브 블록에 대한 하나 이상의 인트라 블록 복사 후보가 서브 블록의 움직임 정보를 결정하기 위해 결정된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 서브 블록에 대한 머지 후보, 서브 블록에 대한 서브 블록 시간적 움직임 벡터 예측 후보, 또는 서브 블록에 대한 어파인 머지 후보 중 하나를 포함하는 움직임 후보 리스트에 추가된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 리스트의 서브 블록에 대한 임의의 머지 후보 앞에 위치된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 리스트의 서브 블록에 대한 임의의 서브 블록 시간적 움직임 벡터 예측 후보 뒤에 위치된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 리스트의 서브 블록에 대한 임의로 상속되거나 구성된 어파인 후보 뒤에 위치된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보가 움직임 후보 리스트에 추가되는지 여부는 현재 블록의 코딩 모드에 기초한다. 일부 실시예에서, 현재 블록이 인트라 블록 복사(IBC) 서브블록 시간적 움직임 벡터 예측 모드를 사용하여 코딩되는 경우 하나 이상의 인트라 블록 복사 후보가 움직임 후보 리스트에서 제외된다.
일부 실시예에서, 하나 이상의 인트라 블록 복사 후보가 움직임 후보 리스트에 추가되는지 여부는 현재 블록의 분할 구조에 기초한다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 리스트 내의 서브 블록의 머지 후보로서 추가된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보는 상이한 초기 움직임 벡터에 기초하여 움직임 후보 리스트에 추가된다. 일부 실시예에서, 하나 이상의 인트라 블록 복사 후보가 움직임 후보 리스트에 추가되는지 여부는 비트스트림 표현에 표시된다. 일부 실시예에서, 움직임 후보 리스트를 나타내는 인덱스가 비트스트림 표현에서 시그널링되는지 여부는 현재 블록의 코딩 모드에 기초한다. 일부 실시예들에서, 인트라 블록 복사 머지 후보를 포함하는 움직임 후보들의 리스트를 나타내는 인덱스는 현재 블록이 인트라 블록 복사 머지 모드를 사용하여 코딩되는 경우 비트스트림 표현에서 시그널링된다. 일부 실시예에서, 인트라 블록 복사 서브블록 시간적 움직임 벡터 예측 후보를 포함하는 움직임 후보 리스트를 나타내는 인덱스는 현재 블록이 인트라 블록 복사 서브블록 시간적 움직임 벡터 예측 모드를 사용하여 코딩되는 경우 비트스트림 표현에서 시그널링된다. 일부 실시예에서, 인트라 블록 복사 서브 블록 시간적 움직임 벡터 예측 모드에 대한 움직임 벡터 차이는 다수의 서브블록들에 적용된다.
일부 실시예에서, 참조 블록 및 서브 블록은 비디오의 동일한 색상 성분과 연관된다. 일부 실시예에서, 현재 블록이 다수의 서브블록들로 분할되는지 여부는 현재 블록과 연관된 코딩 특징에 기초한다. 일부 실시예에서, 코딩 특징은 디코더 파라미터 세트, 시퀀스 파라미터 세트, 비디오 파라미터 세트, 픽처 파라미터 세트, APS, 픽처 헤더, 슬라이스 헤더, 타일 그룹 헤더, 최대 코딩 유닛(LCU), 코딩 유닛(CU), LCU의 행, LCU의 그룹, 변환 유닛, 예측 유닛, 예측 유닛 블록, 또는 비디오 코딩 유닛에서 비트스트림 표현의 신택스 플래그를 포함한다. 일부 실시예에서, 코딩 특징은 코딩 유닛, 예측 유닛, 변환 유닛, 블록, 또는 비디오 코딩 유닛의 위치를 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록의 차원 또는 현재 블록의 이웃 블록의 차원을 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록 또는 현재 블록의 이웃 블록의 형태를 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록 또는 현재 블록의 이웃 블록의 인트라 코딩 모드를 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록의 이웃 블록의 움직임 벡터를 포함한다. 일부 실시예에서, 코딩 특징은 비디오의 색상 포맷의 표시를 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록의 코딩 트리 구조를 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록과 연관된 슬라이스 유형, 타일 그룹 유형, 또는 픽처 유형을 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록과 연관된 색상 성분을 포함한다. 일부 실시예에서, 코딩 특징은 현재 블록과 연관된 시간적 레이어 식별자를 포함한다. 일부 실시예에서, 코딩 특징은 비트스트림 표현에 대한 표준의 프로파일, 레벨 또는 티어를 포함한다.
도 26은 본 기술에 따른 비디오 프로세싱을 위한 방법(2600)의 흐름도 표현이다. 방법(2600)은 동작(2610)에서 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록이 다수의 서브 블록들로 분할되도록 결정하는 단계를 포함한다. 다수의 서브 블록들 각각은 패턴에 따라 대응하는 코딩 기술을 사용하여 코딩된 표현으로 코딩된다. 방법은 또한 동작 2620에서 결정에 기초하여 변환을 수행하는 단계를 포함한다.
일부 실시예에서, 패턴은 다수의 서브 블록들의 제1 서브 블록이 비디오 영역으로부터의 참조 샘플들이 사용되는 변경된 IBC(intra-block copy) 코딩 기술을 사용하여 코딩된다고 특정한다. 일부 실시예에서, 패턴은 다수의 서브 블록들의 제2 서브 블록이 동일한 서브 블록의 샘플들이 사용되는 인트라 예측 코딩 기술을 사용하여 코딩된다고 특정한다. 일부 실시예에서, 패턴은 대표 픽셀 값들의 팔레트가 사용되는 팔레트 코딩 기술을 사용하여 다수의 서브 블록들의 제2 서브 블록이 코딩된다고 특정한다. 일부 실시예에서, 패턴은 다수의 서브 블록들 중 제2 서브 블록이 시간적 정보가 사용되는 인터 코딩 기술을 사용하여 코딩된다고 특정한다.
일부 실시예에서, 패턴은 다수의 서브 블록들 중 제1 서브 블록이 동일한 서브 블록의 샘플들이 사용되는 인트라 예측 코딩 기술을 사용하여 코딩된다고 특정한다. 일부 실시예에서, 패턴은 대표 픽셀 값들의 팔레트가 사용되는 팔레트 코딩 기술을 사용하여 다수의 서브 블록들 중 제2 서브 블록이 코딩된다고 특정한다. 일부 실시예에서, 패턴은 다수의 서브 블록들 중 제2 서브 블록이 시간적 정보가 사용되는 인터 코딩 기술을 사용하여 코딩된다고 특정한다.
일부 실시예에서, 패턴은 다수의 서브 블록들 모두가 단일 코딩 기술을 사용하여 코딩됨을 지정한다. 일부 실시예에서, 단일 코딩 기술은 동일한 서브 블록의 샘플들이 다수의 서브 블록들을 코딩하는 데 사용되는 인트라 예측 코딩 기술을 포함한다. 일부 실시예에서, 단일 코딩 기술은 대표 픽셀 값들의 팔레트가 다수의 서브 블록들을 코딩하기 위해 사용되는 팔레트 코딩 기술을 포함한다.
일부 실시예에서, 하나 이상의 코딩 기술의 패턴이 현재 블록, 지난 변환의 움직임 정보에 기초하여 결정된 움직임 후보의 히스토리 기반 테이블에 적용되는 경우, 서브블록 시간적 움직임 벡터 예측 모드에 대한 움직임 후보의 히스토리 기반 테이블은 변환에도 동일하게 유지된다. 일부 실시예에서, 히스토리 기반 테이블은 IBC 코딩 기술 또는 비IBC 코딩 기술을 위한 것이다.
일부 실시예에서, 패턴이 다수의 서브블록들 중 적어도 하나의 서브 블록이 IBC 코딩 기술을 이용하여 코딩된다고 특정하는 경우, 적어도 하나의 서브 블록을 위한 하나 이상의 움직임 벡터는 IBC 서브블록 시간적 움직임 벡터 예측 모드에 대한 움직임 후보들의 히스토리 기반 테이블과 지난 변환에서의 움직임 정보에 기초하여 결정된 움직임 후보들의 히스토리 기반 테이블을 업데이트 하는 데 사용된다. 일부 실시예에서, 패턴이 다수의 서브블록들 중 적어도 하나의 서브블록이 인터 코딩 기술을 이용하여 코딩된다고 특정하는 경우, 적어도 하나의 서브블록을 위한 하나 이상의 움직임 벡터는 비-IBC 서브 블록 시간적 움직임 벡터 예측 모드에 대한 움직임 후보들의 히스토리 기반 테이블, 지난 변환에서의 움직임 정보에 기초하여 결정된 움직임 후보들의 히스토리 기반 테이블을 업데이트 하는 데 사용된다.
일부 실시예에서, 다수의 서브블록의 경계가 필터링되는 필터링 프로세스의 사용은 패턴에 따른 적어도 하나의 코딩 기술의 사용에 기초한다. 일부 실시예에서, 적어도 하나의 코딩 기술이 적용되는 경우에 다중 서브블록의 경계를 필터링하는 필터링 프로세스가 적용된다. 일부 실시예에서, 적어도 하나의 코딩 기술이 적용되는 경우 다수의 서브블록의 경계를 필터링하는 필터링 프로세스가 생략된다.
일부 실시예에서, 패턴에 따른 변환을 위해 현재 블록에 대해 제2 코딩 기술이 비활성화된다. 일부 실시예에서, 제2 코딩 기술은 서브블록 변환 코딩 기술, 어파인 움직임 예측 코딩 기술, 다중 참조 라인 인트라 예측 코딩 기술, 매트릭스 기반 인트라 예측 코딩 기술, 대칭 MVD(Symmetric Motion Vector Difference) 코딩 기술, MVD 디코더 측 움직임 유도 또는 개선 코딩 기술과 머지, 양방향 광학 흐름 코딩 기술, 현재 블록의 차원을 기반으로 차원이 축소된 2차 변환 코딩 기술 또는 다중 변환 세트 코딩 기술 중 적어도 하나를 포함한다.
일부 실시예에서, 패턴에 따른 적어도 하나의 코딩 기술의 사용은 비트스트림 표현에서 시그널링된다. 일부 실시예에서, 사용은 시퀀스 레벨, 픽처 레벨, 슬라이스 레벨, 타일 그룹 레벨, 타일 레벨, 브릭 레벨, 코딩 트리 유닛(CTU) 레벨, 코딩 트리 블록(CTB) 레벨, 코딩 유닛(CU) 레벨, 예측 유닛(PU) 레벨, 변환 유닛(TU), 또는 다른 비디오 유닛 레벨에서 시그널링된다. 일부 실시예에서, 적어도 하나의 코딩 기술은 변경된 IBC 코딩 기법을 포함하고, 변경된 IBC 코딩 기법은 움직임 후보 리스트에서 후보를 나타내는 인덱스 값에 기초하여 비트스트림 표현에서 표시된다. 일부 실시예에서, 기 정의된 값은 변경된 IBC 코딩 기술을 사용하여 코딩된 현재 블록에 할당된다.
일부 실시예에서, 패턴에 따른 적어도 하나의 코딩 기술의 사용은 변환 동안 결정된다. 일부 실시예에서, 현재 블록의 참조 샘플이 사용되는 현재 블록을 코딩하기 위한 IBC(intra-block copy) 코딩 기술의 사용은 비트스트림에서 시그널링된다. 일부 실시예에서, 현재 블록의 참조 샘플이 사용되는 현재 블록을 코딩하기 위한 IBC(intra-block copy) 코딩 기술의 사용이 변환 동안 결정된다.
일부 실시예에서, 현재 블록의 다수의 서브블록의 움직임 정보는 비디오의 후속 블록과 비트스트림 표현 간의 변환을 위한 움직임 벡터 예측자로서 사용된다. 일부 실시예에서, 현재 블록의 다수의 서브블록의 움직임 정보는 비디오의 후속 블록과 비트스트림 표현 간의 변환에 사용되는 것이 허용되지 않는다. 일부 실시예에서, 현재 블록이 적어도 하나의 코딩 기술을 사용하여 코딩된 다수의 서브블록으로 분할된다는 결정은 움직임 후보가 비디오의 블록 또는 비디오 내의 서브블록에 적용 가능한지 여부에 기초한다.
도 27은 본 기술에 따른 비디오 프로세싱 방법(2700)의 흐름도 표현이다. 방법(2700)은, 동작(2710)에서, 비디오의 현재 록과 비디오의 비트스트림 표현 간의 변환을 위해, 현재 블록의 특징과 관련된 조건에 기초하여 움직임 후보 리스트와 연관된 동작을 결정하는 단계를 포함한다. 움직임 후보 리스트는 코딩 기술을 위해 또는 이전에 프로세싱된 비디오 블록의 정보를 기반으로 구성된다. 방법(2700)은 또한 동작(2720)에서 결정에 기초하여 변환을 수행하는 단계를 포함한다.
일부 실시예에서, 코딩 기술은 머지 코딩 기술, 인트라 블록 복사(IBC) 서브블록 시간적 움직임 벡터 예측 코딩 기술, 서브블록 머지 코딩 기술, IBC 코딩 기술, 또는 현재 블록의 적어도 하나의 서브블록을 코딩하기 위해 현재 블록의 비디오 영역으로부터의 참조 샘플을 사용하는 변경된 IBC 코딩 기술을 포함한다.
일부 실시예에서, 현재 블록은 WХH의 차원을 가지며, W 및 H는 양의 정수이다. 조건은 현재 블록의 차원과 관련된다. 일부 실시예에서, 조건은 현재 블록의 코딩된 정보 혹은 현재 블록의 이웃 블록의 코딩된 정보와 관련된다. 일부 실시예들에서, 조건은 현재 블록과 다른 블록 사이에서 움직임 후보 리스트를 공유하기 위한 머지 공유 조건과 관련된다.
일부 실시예에서, 동작은 머지 코딩 기술을 사용하여 움직임 후보 리스트에 대한 공간적 머지 후보를 유도하는 것을 포함한다. 일부 실시예에서, 동작은 현재 블록의 공간적 이웃 블록에 기초하여 움직임 후보 리스트에 대한 움직임 후보를 유도하는 것을 포함한다. 일부 실시예에서, 공간적 이웃 블록은 현재 블록의 인접 블록 또는 비인접 블록을 포함한다.
일부 실시예에서, 동작은 비디오의 이전에 프로세싱된 블록들로부터의 정보에 기초하여 구성된 움직임 후보 리스트에 대한 움직임 후보를 유도하는 것을 포함한다. 일부 실시예에서, 동작은 움직임 후보 리스트에 대한 페어와이즈 머지 후보를 유도하는 것을 포함한다. 일부 실시예에서, 동작은 움직임 후보 리스트에서 중복적인 엔트리를 제거하는 하나 이상의 프루닝 동작을 포함한다. 일부 실시예에서, 하나 이상의 프루닝 동작은 움직임 후보 리스트의 공간적 머지 후보를 위한 것이다.
일부 실시예에서, 동작은 변환 후에 비디오의 이전에 프로세싱된 블록으로부터의 정보에 기초하여 구성된 움직임 후보 리스트를 업데이트하는 것을 포함한다. 일부 실시예에서, 업데이트는 움직임 후보 리스트에서 중복성을 제거하는 프루닝(pruning) 동작 없이 유도된 후보를 움직임 후보 리스트에 추가하는 것을 포함한다. 일부 실시예에서, 동작은 움직임 후보 리스트에 기본 움직임 후보를 추가하는 것을 포함한다. 일부 실시예에서, 기본 움직임 후보는 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술을 사용하는 제로 움직임 후보를 포함한다. 일부 실시예에서, 조건이 충족되는 경우 동작이 생략된다.
일부 실시예에서, 동작은 미리 정의된 순서로 움직임 후보 리스트에서 움직임 후보를 검사하는 것을 포함한다. 일부 실시예에서, 동작은 움직임 후보 리스트에서 미리 정의된 수의 움직임 후보를 검사하는 것을 포함한다. 일부 실시예에서, WХH가 임계값 이상인 경우 조건이 충족된다. 일부 실시예에서, WxH가 임계값 이상이고 현재 블록이 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 또는 머지 코딩 기술을 사용하여 코딩되는 경우 조건이 충족된다. 일부 실시예에서, 임계값은 1024이다.
일부 실시예에서, W 및/또는 H가 임계값 이상인 경우 조건이 충족된다. 일부 실시예에서, 임계값은 32이다. 일부 실시예에서, WxH가 임계값 이하이고 현재 블록이 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 또는 머지 코딩 기술을 이용하여 코딩되는 경우 조건이 충족된다. 일부 실시예에서, 임계값은 16이다. 일부 실시예에서 임계값은 32 또는 64이다. 일부 실시예에서, 조건이 충족되는 경우, 공간적 이웃 블록에 기초하여 결정된 후보를 움직임 후보 리스트에 삽입하는 것을 포함하는 동작은 생략된다.
일부 실시예에서, 조건은 W가 T2와 동일하고, H가 T3과 동일하고, 현재 블록 상단에 위치한 이웃 블록이 사용 가능하고 현재 블록과 동일한 기술을 이용하여 코딩되는 경우 충족된다. 여기서, T2, T3은 양의 정수이다. 일부 실시예에서, 이웃 블록과 현재 블록이 동일한 코딩 트리 유닛 내에 있는 경우 조건이 충족된다.
일부 실시예에서, W가 T2와 동일하고, H가 T3과 동일하고, 현재 블록의 상단에 위치한 이웃 블록을 사용할 수 없거나 현재 블록이 있는 현재 코딩 트리 유닛 외부에 있는 경우 조건이 충족된다. 여기서 T2 및 T3은 양의 정수이다. 일부 실시예에서, T2는 4이고 T3은 8이다. 일부 실시예에서, W가 T4와 동일하고, H가 T5와 동일하고, 현재 블록의 좌측에 있는 이웃 블록이 사용 가능하고 현재 블록과 동일한 코딩 기술을 사용하여 코딩되는 경우에 조건이 충족된다. 여기서 T4 및 T5는 양의 정수이다. 일부 실시예에서, W가 T4와 동일하고, H가 T5와 동일하고, 현재 블록의 좌측에 있는 이웃 블록이 사용 불가능하고, T4 및 T5가 양의 정수인 경우 조건이 충족된다. 일부 실시양태에서, T4는 8이고 T5는 4이다.
일부 실시예에서, WxH가 임계값보다 작거나 같은 경우에 조건이 충족되고, 현재 블록이 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 또는 머지 코딩 기술을 사용하여 코딩된다. 현재 블록의 상단에 있는 첫 번째 이웃 블록과 현재 블록의 좌측에 있는 두 번째 이웃 블록 모두는 동일한 코딩 기술을 사용하여 코딩된다. 일부 실시예에서, 제1 및 제2 이웃 블록이 사용 가능하고 IBC 코딩 기술을 사용하여 코딩되며, 여기서 제2 이웃 블록은 현재 블록과 동일한 코딩 트리 유닛 내에 있다. 일부 실시예에서, 제1 이웃 블록은 사용 불가능하고, 제2 이웃 블록은 현재 블록과 동일한 코딩 트리 유닛 내이고 사용 가능하다. 일부 실시예에서, 제1 및 제2 이웃 블록은 사용 불가능하다. 일부 실시예들에서, 제1 이웃 블록은 사용가능하고, 제2 이웃 블록은 사용가능하지 않다. 일부 실시예에서, 제1 이웃 블록은 사용 불가능하고, 제2 이웃 블록은 현재 블록이 위치하는 코딩 트리 유닛 외부에 있다. 일부 실시예에서, 제1 이웃 블록은 사용가능하고, 제2 이웃 블록은 현재 블록이 위치하는 코딩 트리 유닛 외부에 존재한다. 일부 실시예에서, 임계값은 32이다. 일부 실시예에서, 제1 및 제2 이웃 블록은 공간적 머지 후보를 유도하기 위해 사용된다. 일부 실시예에서, 현재 블록의 좌측 상단 샘플은 (x, y)에 위치되고, 여기서 제2 이웃 블록은 (x-1, y+H-1)에 위치하는 샘플을 커버한다. 일부 실시예에서, 현재 블록의 좌측 상단 샘플은 (x, y)에 위치하고, 제2 이웃 블록은 (x+W-1, y-1)에 위치하는 샘플을 커버한다.
일부 실시예에서, 동일한 코딩 기술은 IBC 코딩 기술을 포함한다. 일부 실시예에서, 동일한 코딩 기술은 인터 코딩 기술을 포함한다. 일부 실시예에서, 현재 블록의 이웃 블록은 AХB와 동일한 차원을 갖는다. 일부 실시예에서, 현재 블록의 이웃 블록은 AХB보다 큰 차원을 갖는다. 일부 실시예에서, 현재 블록의 이웃 블록은 AХB보다 작은 차원을 갖는다. 일부 실시예에서, AХB는 4Х4와 동일하다. 일부 실시예에서, 임계값은 미리 정의된다. 일부 실시예에서, 임계값은 비트스트림 표현에서 시그널링된다. 일부 실시예에서, 임계값은 현재 블록의 코딩 특성에 기초하고, 코딩 특성은 현재 블록이 코딩되는 코딩 모드를 포함한다.
일부 실시예에서, 현재 블록이 움직임 후보 리스트를 공유하는 부모 노드를 갖고 현재 블록이 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 또는 머지 코딩 기술을 사용하여 코딩되는 경우 조건이 충족된다. 일부 실시예에서, 조건은 현재 블록의 코딩 특성에 따라 적응적으로 변경된다.
도 28은 본 기술에 따른 비디오 프로세싱 방법(2800)의 흐름도 표현이다. 방법(2800)은, 동작(2810)에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위해, 시간적 정보에 기초한 인터 코딩 기술을 사용하여 코딩된 현재 블록이 다수의 서브블록들로 분할된다고 결정하는 단계를 포함한다 . 다수의 블록 중 적어도 하나는 현재 블록을 포함하는 현재 픽처로부터의 하나 이상의 비디오 영역으로부터의 참조 샘플을 사용하는 변경된 IBC(intra-block copy) 코딩 기술을 사용하여 코딩된다. 방법(2800)은 동작(2820)에서 결정에 기초하여 변환을 수행하는 단계를 포함한다.
일부 실시예에서, 비디오 영역은 현재 픽처, 슬라이스, 타일, 브릭, 또는 타일 그룹을 포함한다. 일부 실시예에서, 인터 코딩 기술은 서브블록 시간적 움직임 벡터 코딩 기술을 포함하고, 현재 블록이 현재 픽처 및 현재 픽처와 상이한 참조 픽처 둘 모두에 기초하여 코딩되는지 여부를 나타내는 하나 이상의 신택스 요소가 비트스트림 표현에 포함된다. 일부 실시예에서, 하나 이상의 신택스 요소는 현재 블록이 현재 픽처 및 참조 픽처 모두에 기초하여 코딩되는 경우 현재 블록을 코딩하는 데 사용되는 참조 픽처를 표시한다. 일부 실시예에서, 하나 이상의 신택스 요소는 참조 픽처와 연관된 움직임 정보를 더 표시하고, 움직임 정보는 움직임 벡터 예측 인덱스, 움직임 벡터 차이, 또는 움직임 벡터 정밀도를 적어도 포함한다. 일부 실시예에서, 제1 참조 픽처 리스트는 현재 픽처만을 포함하고 제2 참조 픽처 리스트는 참조 픽처만을 포함한다. 일부 실시예에서, 인터 코딩 기술은 시간적 머지 코딩 기술을 포함하고, 움직임 정보는 현재 블록의 이웃 블록에 기초하여 결정되며, 움직임 정보는 적어도 움직임 벡터 또는 참조 픽처를 포함한다. 일부 실시예에서, 움직임 정보는 현재 픽처에만 기초하여 주변 블록이 결정되는 경우에 현재 픽처에만 적용 가능하다. 일부 실시예에서, 움직임 정보는 현재 픽처 및 참조 픽처 모두에 기초하여 주변 블록이 결정되는 경우 현재 픽처 및 참조 픽처 모두에 적용 가능하다. 일부 실시예에서, 움직임 정보는 현재 픽처와 참조 픽처 모두에 기초하여 주변 블록이 결정되는 경우에만 현재 픽처에 적용 가능하다. 일부 실시예에서, 이웃 블록이 참조 픽처에만 기초하여 결정되는 경우, 머지 후보를 결정하기 위해 이웃 블록이 폐기된다.
일부 실시예에서, 현재 픽처로부터의 참조 블록 및 참조 픽처로부터의 참조 블록에 고정된 가중 인자가 할당된다. 일부 실시예에서, 고정 가중 인자는 비트스트림 표현에서 시그널링된다.
일부 실시예에서, 변환을 수행하는 것은 비디오의 블록에 기초하여 비트스트림 표현을 생성하는 것을 포함한다. 일부 실시예에서, 변환을 수행하는 것은 비트스트림 표현으로부터 비디오의 블록을 생성하는 것을 포함한다.
비디오 인코딩 또는 비디오 디코딩을 위한 기술이 개시된다는 것이 이해될 것이다. 이러한 기술은 더 큰 코딩 효율성 및 성능을 달성하기 위해 인트라 블록 복사 및 서브블록 기반 비디오 프로세싱을 함께 사용하기 위해 비디오 인코더 또는 디코더에 의해 채택될 수 있다.
개시된 기술의 일부 실시예는 비디오 프로세싱 도구 또는 모드를 가능하게 하는 판단 또는 결정을 내리는 것을 포함한다. 일 예에서, 비디오 프로세싱 도구 또는 모드가 활성화되면 인코더는 비디오 블록의 프로세싱에서 도구 또는 모드를 사용하거나 구현하지만 도구 또는 모드의 사용에 따라 결과 비트스트림을 반드시 수정할 필요는 없다. 즉, 비디오 블록에서 비디오의 비트스트림 표현으로의 변환은 결정 또는 판단에 따라 활성화될 때 비디오 프로세싱 도구 또는 모드를 사용한다. 다른 예에서, 비디오 프로세싱 도구 또는 모드가 활성화될 때, 디코더는 비디오 프로세싱 도구 또는 모드에 기초하여 비트스트림이 수정되었다는 지식으로 비트스트림을 프로세싱할 것이다. 즉, 비디오의 비트스트림 표현에서 비디오 블록으로의 변환은 판단 또는 결정에 기초하여 활성화된 비디오 프로세싱 도구 또는 모드를 사용하여 수행될 것이다.
개시된 기술의 일부 실시예는 비디오 프로세싱 도구 또는 모드를 비활성화하기 위한 결정 또는 결정을 내리는 것을 포함한다. 일 예에서, 비디오 프로세싱 도구 또는 모드가 비활성화되면 인코더는 비디오 블록을 비디오의 비트스트림 표현으로 변환하는 데 도구 또는 모드를 사용하지 않는다. 다른 예에서, 비디오 프로세싱 도구 또는 모드가 비활성화될 때, 디코더는 판단 또는 결정에 기초하여 활성화된 비디오 프로세싱 도구 또는 모드를 사용하여 비트스트림이 수정되지 않았다는 지식으로 비트스트림을 프로세싱할 것이다.
본 명세서에서 설명되는, 개시된 솔루션, 예, 실시형태, 모듈 및 기능적 동작 및 그 이외의 솔루션, 예, 실시형태, 모듈 및 기능적 동작은, 디지털 전자 회로로, 또는 본 명세서에서 개시되는 구조체 및 그들의 구조적 균등물을 포함하는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나의 이상의 조합으로 구현될 수 있다. 개시된 실시형태 및 그 외의 실시형태들은, 하나 이상의 컴퓨터 프로그램 제품으로서, 예를 들어 데이터 처리 장치에 의해 실행되거나 그 동작을 제어하기 위한, 컴퓨터-판독가능 매체 상에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터-판독가능 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기재, 메모리 디바이스, 머신-판독가능 전파된 신호에 영향을 주는 물질의 조합, 또는 이들 중 하나 이상의 조합일 수 있다. 용어 "데이터 프로세싱 장치"는, 예를 들어 프로그래밍 가능한 프로세서, 컴퓨터, 또는 다수의 프로세서 또는 컴퓨터를 포함하는, 데이터를 처리하기 위한 모든 장치, 디바이스, 및 머신을 망라한다. 이러한 장치는 하드웨어에 추가하여, 관심 대상인 컴퓨터 프로그램을 위한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다. 전파된 신호는 인위적으로 생성된 신호, 예를 들어, 적절한 수신기 장치로 송신되기 위한 정보를 인코딩하기 위하여 생성되는, 머신에 의해 생성된 전기적, 광학적, 또는 전자기적 신호이다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드라고도 알려져 있음)은 컴파일되거나 해석된 언어를 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 이것은 독립형 프로그램과 같은 또는 컴퓨팅 환경에서 사용되기에 적합한 모듈, 성분, 서브루틴, 또는 다른 유닛과 같은 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템 내의 파일에 대응하는 것은 아니다. 프로그램은 다른 프로그램 또는 데이터를 보유하는 파일(예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트) 내에, 문제가 되는 프로그램 전용의 단일 파일 내에, 또는 여러 개의 조율된 파일들)예를 들어, 하나 이상의 모듈, 서브-프로그램, 또는 코드의 일부를 저장하는 파일) 내에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 하나의 사이트에 위치되거나 여러 사이트들에 걸쳐서 분산되고 통신 네트워크에 의하여 상호접속되는 여러 컴퓨터들 상에서 실행되도록 구현될 수 있다.
본 명세서에서 설명된 프로세스 및 로직 흐름은 입력 데이터에서 동작하고 출력을 생성함으로써 기능을 수행하기 위한 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능한 프로세서에 의해서 수행될 수 있다. 또한 프로세스 및 로직 흐름은 특수 목적 로직 회로부, 예를 들어 FPGA(field programmable gate array), 또는 ASIC(application-specific integrated circuit)에 의하여 수행될 수 있으며, 장치는 또한 이러한 것으로서 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서는, 일 예로서, 일반 및 특수 목적 마이크로 프로세서(들), 및 임의 종류의 디지털 컴퓨터의 하나 이상의 프로세서(들)을 포함한다. 일반적으로, 프로세서는 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 이들 모두로부터 명령 및 데이터를 수신할 것이다. 컴퓨터의 본질적인 요소는 명령을 수행하기 위한 프로세서 및 명령 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어 자기적, 자기-광학적 디스크, 또는 광학적 디스크를 더욱 포함하거나, 이것으로부터 데이터를 수신하거나 이것으로 데이터를 전송하거나, 또는 이들 모두를 하기 위하여 이것에 동작가능하도록 커플링될 것이다. 그러나, 컴퓨터는 이러한 디바이스를 가져야 하는 것은 아니다. 컴퓨터 프로그램 명령 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체는, 예를 들자면 반도체 메모리 디바이스, 예를 들어 EPROM, EEPROM, 및 플래시 메모리 디바이스; 자기적 디스크, 예를 들어 내부 하드 디스크 또는 착탈식 디스크; 자기-광학적 디스크; 및 CD-ROM 및 DVD 디스크를 포함하는 비-휘발성 메모리, 미디어 및 메모리 디바이스의 모든 형태를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로부에 의하여 보충되거나 그 내부에 통합될 수 있다.
본 특허 명세서가 많은 특징을 포함하고 있지만, 이들은 임의의 기술 요지 또는 청구될 내용의 범위를 한정하는 것으로 해석되어서는 안 되고, 오히려 특정 기법의 특정 실시형태들에 특유할 수 있는 특징들의 설명으로서 해석되어야 한다. 본 특허 명세서에서 별개의 실시형태들의 콘텍스트에서 설명되는 일부 특징들은, 단일 실시형태 내에 조합되어 구현될 수도 있다. 반대로, 단일 실시형태의 콘텍스트에서 설명되는 다양한 특징들은 또한 따로따로 다수의 실시형태들에서 또는 임의의 적합한 서브컴비네이션에서 구현될 수 있다. 더구나, 비록 특징들이 특정한 조합들로 작용하는 것으로 위에서 설명될 수도 있고 그와 같이 처음에 청구된 경우에도, 청구된 조합들로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 서브컴비네이션 또는 서브컴비네이션의 변형예를 위한 것일 수도 있다.
이와 유사하게, 동작들이 도면들에서 특정한 순서로 묘사되는 반면에, 원하는 결과들을 획득하기 위하여 이러한 동작들이 도시된 특정한 순서로 또는 순차적인 순서로 수행되어야 하거나, 또는 도시된 모든 동작들이 수행되어야 한다고 요구하는 것으로 이해되어서는 안 된다. 더욱이, 본 특허 명세서에서 설명되는 실시형태들 내의 다양한 시스템 성분들을 분리하는 것은, 모든 실시형태에서 이러한 분리를 요구하는 것으로 이해되어서는 안 된다.
몇 가지의 구현형태와 예들만이 설명되고, 다른 구현형태, 개선형태, 및 변형예들이 본 특허 명세서에서 설명되고 예시된 것에 기반하여 이루어질 수 있다.

Claims (74)

  1. 비디오 프로세싱 방법에 있어서,
    비디오의 현재 블록과 상기 비디오의 비트스트림 표현 간의 변환을 위해, 상기 현재 블록의 특징에 연관된 조건에 기초하여 움직임 후보 리스트에 연관된 동작을 결정하는 단계, 상기 움직임 후보 리스트는 코딩 기술을 위해 구성되거나 상기 비디오의 이전에 프로세싱된 블록들의 정보에 기초하여 구성되고;
    상기 결정에 기초하여 상기 변환을 수행하는 단계를 포함하는, 비디오 프로세싱 방법.
  2. 제1 항에 있어서,
    상기 코딩 기술은 머지 코딩 기술, 인트라 블록 복사(intra block copy, IBC) 서브 블록 시간적 움직임 벡터 예측 코딩 기술, 서브블록 머지 코딩 기술, IBC 코딩 기술, 혹은 상기 현재 블록의 적어도 하나의 서브 블록의 코딩을 위한 상기 현재 블록의 비디오 영역으로부터의 참조 샘플들을 사용하는 변경된 IBC 코딩 기술을 포함하는, 비디오 프로세싱 방법.
  3. 제1 항 혹은 제2 항에 있어서,
    상기 현재 블록은 WxH 차원을 갖되, W 및 H는 양의 정수이고, 상기 조건은 상기 현재 블록의 상기 차원에 연관되는, 비디오 프로세싱 방법.
  4. 제1 항 혹은 제2 항에 있어서,
    상기 조건은 상기 현재 블록의 코딩된 정보 혹은 상기 현재 블록의 이웃 블록의 코딩된 정보에 연관되는, 비디오 프로세싱 방법.
  5. 제1 항 혹은 제2 항에 있어서,
    상기 조건은 상기 현재 블록과 다른 블록 간의 상기 움직임 후보 리스트 공유를 위한 머지 공유 조건에 연관되는, 비디오 프로세싱 방법.
  6. 제1 항 내지 제5 항 중 하나 이상의 항에 있어서,
    상기 동작은 머지 코딩 기술을 이용하여 상기 움직임 후보 리스트에 대한 공간적 머지 후보를 유도하는 단계를 포함하는, 비디오 프로세싱 방법.
  7. 제1 항 내지 제6 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 현재 블록의 공간적 이웃 블록에 기초하여 상기 움직임 후보 리스트에 대한 움직임 후보를 유도하는 단계를 포함하는, 비디오 프로세싱 방법.
  8. 제7 항에 있어서,
    상기 공간적 이웃 블록은 상기 현재 블록의 인접 블록 혹은 비인접 블록을 포함하는, 비디오 프로세싱 방법.
  9. 제1 항 내지 제8 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 비디오의 이전에 프로세싱된 블록들의 정보에 기초하여 구성된 상기 움직임 후보 리스트에 대한 움직임 후보를 유도하는 단계를 포함하는, 비디오 프로세싱 방법.
  10. 제1 항 내지 제9 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 움직임 후보 리스트에 대한 페어와이즈(pairwise) 머지 후보를 유도하는 단계를 포함하는, 비디오 프로세싱 방법.
  11. 제1 항 내지 제10 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 움직임 후보 리스트의 중복적인 엔트리들을 제거하는 하나 이상의 프루닝 동작을 포함하는, 비디오 프로세싱 방법.
  12. 제11 항에 있어서,
    상기 하나 이상의 프루닝 동작은 상기 움직임 후보 리스트의 공간적 머지 후보에 대한 것인, 비디오 프로세싱 방법.
  13. 제1 항 내지 제12 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 변환 이후 상기 비디오의 이전에 프로세싱된 블록들의 정보에 기초하여 구성된 상기 움직임 후보 리스트를 업데이트 하는 단계를 포함하는, 비디오 프로세싱 방법.
  14. 제13 항에 있어서,
    상기 업데이트 하는 단계는, 상기 움직임 후보 리스트에서 중복성을 제거하는 프루닝 동작 없이 상기 움직임 후보 리스트에 유도된 후보를 추가하는 단계를 포함하는, 비디오 프로세싱 방법.
  15. 제1 항 내지 제14 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 움직임 후보 리스트의 기본(default) 움직임 후보를 추가하는 단계를 포함하는, 비디오 프로세싱 방법.
  16. 제15 항에 있어서,
    상기 기본 움직임 후보는 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술을 이용하는 제로 움직임 후보를 포함하는, 비디오 프로세싱 방법.
  17. 제6 항 내지 제16 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 조건이 만족되는 경우 생략되는, 비디오 프로세싱 방법.
  18. 제1 항 내지 제5 항 중 하나 이상의 항에 있어서,
    상기 동작은 기 정의된 순서로 상기 움직임 후보 리스트에서 움직임 후보를 점검하는 단계를 포함하는, 비디오 프로세싱 방법.
  19. 제1 항 내지 제5 항 중 하나 이상의 항에 있어서,
    상기 동작은 상기 움직임 후보 리스트의 기 정의된 수의 움직임 후보를 점검하는 단계를 포함하는, 비디오 프로세싱 방법.
  20. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 WxH가 임계값 이상인 경우 만족되는, 비디오 프로세싱 방법.
  21. 제20 항에 있어서,
    상기 조건은 WxH가 상기 임계값 이상이고, 상기 현재 블록은 상기 IBC 서브 블록 시간적 움직임 벡터 예측 코딩 기술 혹은 상기 머지 코딩 기술을 이용하여 코딩되는 경우 만족되는, 비디오 프로세싱 방법.
  22. 제20 항 혹은 제21 항에 있어서,
    상기 임계값은 1024인, 비디오 프로세싱 방법.
  23. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 W 및/혹은 H가 임계값 이상인 경우 만족되는, 비디오 프로세싱 방법.
  24. 제23 항에 있어서,
    상기 임계값은 32인, 비디오 프로세싱 방법.
  25. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 WxH가 임계값 이하이고 상기 현재 블록이 상기 IBC 서브 블록 시간적 움직임 벡터 예측 코딩 기술 혹은 상기 머지 코딩 기술을 이용하여 코딩되는 경우 만족되는, 비디오 프로세싱 방법.
  26. 제25 항에 있어서,
    상기 임계값은 16인, 비디오 프로세싱 방법.
  27. 제25 항에 있어서,
    상기 임계값은 32 혹은 64인, 비디오 프로세싱 방법.
  28. 제25 항 내지 제27 항 중 하나 이상의 항에 있어서,
    상기 조건이 만족되는 경우,
    상기 움직임 후보 리스트에 공간적 이웃 블록에 기초하여 결정된 후보를 삽입하는 단계를 포함하는 상기 동작은 생략되는, 비디오 프로세싱 방법.
  29. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 W가 T2와 동일하고, H가 T3과 동일하며, 상기 현재 블록의 상단의 이웃 블록이 사용 가능하고, 상기 현재 블록과 동일한 코딩 기술을 이용하여 코딩되며, T2 및 T3이 양의 정수인 경우 만족되는, 비디오 프로세싱 방법.
  30. 제29 항에 있어서,
    상기 조건은 상기 이웃 블록과 상기 현재 블록이 동일한 코딩 트리 유닛 내인 경우 만족되는, 비디오 프로세싱 방법.
  31. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 W가 T2와 동일하고, H가 T3과 동일하며, 상기 현재 블록의 상단의 이웃 블록이 사용가능하지 않으며 상기 현재 블록이 위치한 현재 코딩 트리 유닛의 외부에 있고, T2 및 T3이 양의 정수인 경우 만족되는, 비디오 프로세싱 방법.
  32. 제29 항 내지 제31 항 중 하나 이상의 항에 있어서,
    T2는 4이고, T3은 8인, 비디오 프로세싱 방법.
  33. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 W가 T4와 동일하고, H가 T5와 동일하고, 상기 현재 블록의 좌측의 이웃 블록이 사용 가능하고, 상기 현재 블록과 동일한 코딩 기술을 이용하여 코딩되며, T4 및 T5가 양의 정수인 경우 만족되는, 비디오 프로세싱 방법.
  34. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 W가 T4와 동일하고, H가 T5와 동일하고, 상기 현재 블록의 좌측의 이웃 블록이 사용 가능하지 않으며, T4 및 T5가 양의 정수인 경우 만족되는, 비디오 프로세싱 방법.
  35. 제33 항 혹은 제34 항에 있어서,
    T4는 8이고, T5는 4인, 비디오 프로세싱 방법.
  36. 제1 항 내지 제19 항 중 하나 이상의 항에 있어서,
    상기 조건은 WxH가 임계값 이하이고, 상기 현재 블록이 상기 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 혹은 상기 머지 코딩 기술을 이용하여 코딩되고, 상기 현재 블록의 상단의 제1 이웃 블록 및 상기 현재 블록의 좌측의 제2 이웃 블록은 동일한 코딩 기술을 이용하여 코딩되는 경우 만족되는, 비디오 프로세싱 방법.
  37. 제36 항에 있어서,
    상기 제1 및 제2 이웃 블록들은 사용 가능하고 상기 IBC 코딩 기술을 이용하여 코딩되며, 상기 제2 이웃 블록은 상기 현재 블록과 동일한 코딩 트리 유닛 내에 있는, 비디오 프로세싱 방법.
  38. 제36 항에 있어서,
    상기 제1 이웃 블록은 사용 가능하지 않고, 상기 제2 이웃 블록은 사용 가능하며 상기 현재 블록과 동일한 코딩 트리 유닛 내인, 비디오 프로세싱 방법.
  39. 제36 항에 있어서, 상기 제1 및 제2 이웃 블록들은 사용 가능하지 않은, 비디오 프로세싱 방법.
  40. 제36 항에 있어서,
    상기 제1 이웃 블록은 사용 가능하고, 상기 제2 이웃 블록은 사용 가능하지 않은, 비디오 프로세싱 방법.
  41. 제36 항에 있어서,
    상기 제1 이웃 블록은 사용 가능하지 않고, 상기 제2 이웃 블록은 상기 현재 블록이 위치한 코딩 트리 유닛 외부에 위치하는, 비디오 프로세싱 방법.
  42. 제36 항에 있어서,
    상기 제1 이웃 블록은 사용 가능하고, 상기 제2 이웃 블록은 상기 현재 블록이 위치한 코딩 트리 유닛 외부에 위치하는, 비디오 프로세싱 방법.
  43. 제34 항 내지 제42 항 중 하나 이상의 항에 있어서,
    상기 임계값은 32인, 비디오 프로세싱 방법.
  44. 제34 항 내지 제43 항 중 하나 이상의 항에 있어서,
    상기 제1 및 제2 이웃 블록들은 공간적 머지 후보를 유도하는 데 사용되는, 비디오 프로세싱 방법.
  45. 제44 항에 있어서,
    상기 현재 블록의 좌측 상단 샘플은 (x, y)에 위치하고, 상기 제2 이웃 블록은 (x-1, y+H-1)에 위치하는 샘플을 커버하는, 비디오 프로세싱 방법.
  46. 제44 항에 있어서,
    상기 현재 블록의 좌측 상단 샘플은 (x, y)에 위치하고, 상기 제2 이웃 블록은 (x+W-1, y-1)에 위치하는 샘플을 커버하는, 비디오 프로세싱 방법.
  47. 제29 항 내지 제46 항 중 하나 이상의 항에 있어서,
    상기 동일한 코딩 기술은 IBC 코딩 기술을 포함하는, 비디오 프로세싱 방법.
  48. 제29 항 내지 제46 항 중 하나 이상의 항에 있어서,
    상기 동일한 코딩 기술은 인터 코딩 기술을 포함하는, 비디오 프로세싱 방법.
  49. 제29 항 내지 제47 항 중 하나 이상의 항에 있어서,
    상기 현재 블록의 상기 이웃 블록은 AxB와 동일한 차원을 갖는, 비디오 프로세싱 방법.
  50. 제29 항 내지 제47 항 중 하나 이상의 항에 있어서,
    상기 현재 블록의 상기 이웃 블록은 AxB보다 큰 차원을 갖는, 비디오 프로세싱 방법.
  51. 제29 항 내지 제47 항 중 하나 이상의 항에 있어서,
    상기 현재 블록의 상기 이웃 블록은 AxB보다 작은 차원을 갖는, 비디오 프로세싱 방법.
  52. 제49 항 내지 제51 항 중 하나 이상의 항에 있어서, AxB는 4x4와 동일한, 비디오 프로세싱 방법.
  53. 제20 항 내지 제52 항 중 하나 이상의 항에 있어서, 상기 임계값은 기 정의되는, 비디오 프로세싱 방법.
  54. 제20 항 내지 제52 항 중 하나 이상의 항에 있어서,
    상기 임계값은 상기 비트스트림 표현에서 시그널링되는, 비디오 프로세싱 방법.
  55. 제20 항 내지 제52 항 중 하나 이상의 항에 있어서,
    상기 임계값은 상기 현재 블록의 코딩 특징을 기초로 하고, 상기 코딩 특징은 상기 현재 블록이 코딩된 코딩 모드를 포함하는, 비디오 프로세싱 방법.
  56. 제1 항 내지 제55 항 중 하나 이상의 항에 있어서,
    상기 조건은 상기 현재 블록이 상기 움직임 후보 리스트를 공유하는 부모 노드를 갖고, 상기 현재 블록이 상기 IBC 서브블록 시간적 움직임 벡터 예측 코딩 기술 혹은 상기 머지 코딩 기술을 이용하여 코딩되는 경우 만족되는, 비디오 프로세싱 방법.
  57. 제1 항 내지 제56 항 중 하나 이상의 항에 있어서,
    상기 조건은 상기 현재 블록의 코딩 특징에 따라 적응적으로 변화하는, 비디오 프로세싱 방법.
  58. 비디오 프로세싱 방법에 있어서,
    비디오의 현재 블록과 상기 비디오의 비트스트림 표현 간의 변환을 위해, 상기 시간적 정보에 기초한 인터 코딩 기술을 사용하여 코딩된 상기 현재 블록이 다수의 서브 블록들로 분할된다고 결정하는 단계, 상기 다수의 블록들 중 적어도 하나는 상기 현재 블록을 포함하는 현재 픽처의 하나 이상의 비디오 영역의 참조 샘플들을 이용하는 변경된 IBC(intra-block copy) 코딩 기술을 이용하여 코딩되고;
    상기 결정에 기초하여 상기 변환을 수행하는 단계;를 포함하는,
    비디오 프로세싱 방법.
  59. 제58 항에 있어서,
    비디오 영역은 상기 현재 픽처, 슬라이스, 타일, 브릭, 혹은 타일 그룹을 포함하는, 비디오 프로세싱 방법.
  60. 제58 항 혹은 제59 항에 있어서,
    상기 인터 코딩 기술은 서브 블록 시간적 움직임 벡터 코딩 기술을 포함하되, 상기 현재 블록이 상기 현재 픽처 및 상기 현재 픽처와 상이한 참조 픽처 모두에 기반하여 코딩되는지 여부를 지시하는 하나 이상의 신택스 요소는 상기 비트스트림 표현에 포함되는, 비디오 프로세싱 방법.
  61. 제60 항에 있어서,
    상기 하나 이상의 신택스 요소는 상기 현재 블록이 상기 현재 픽처 및 상기 참조 픽처 모두에 기초하여 코딩되는 경우 상기 현재 블록의 코딩을 위해 사용되는 상기 참조 픽처를 지시하는, 비디오 프로세싱 방법.
  62. 제61 항에 있어서,
    상기 하나 이상의 신택스 요소는 상기 참조 픽처와 연관된 움직임 정보를 더 지시하되, 상기 움직임 정보는 적어도 움직임 벡터 예측 인덱스, 움직임 벡터 차이, 혹은 움직임 벡터 정밀도를 포함하는, 비디오 프로세싱 방법.
  63. 제59 항 내지 제62 항 중 하나 이상의 항에 있어서,
    제1 참조 픽처 리스트는 오직 상기 현재 픽처만을 포함하며 제2 참조 픽처 리스트는 오직 상기 참조 픽처만을 포함하는, 비디오 프로세싱 방법.
  64. 제58 항 혹은 제59 항에 있어서,
    상기 인터 코딩 기술은 시간적 머지 코딩 기술을 포함하고, 움직임 정보는 상기 현재 블록의 이웃 블록에 기초하여 결정되며, 상기 움직임 정보는 적어도 움직임 벡터 혹은 참조 픽처를 포함하는, 비디오 프로세싱 방법.
  65. 제64 항에 있어서,
    상기 움직임 정보는 상기 이웃 블록이 오직 상기 현재 픽처에 기초하여 결정되는 경우에만 상기 현재 픽처에 적용 가능한, 비디오 프로세싱 방법.
  66. 제64 항에 있어서,
    상기 움직임 정보는 상기 이웃 블록이 상기 현재 블록과 상기 참조 픽처 모두에 기초하여 결정되는 경우 상기 현재 픽처 및 상기 참조 픽처 모두에 적용가능한, 비디오 프로세싱 방법.
  67. 제64 항에 있어서,
    상기 움직임 정보는 상기 이웃 블록이 상기 현재 블록 및 상기 참조 픽처 모두에 기초하여 결정되는 경우에만 상기 현재 픽처에 적용 가능한, 비디오 프로세싱 방법.
  68. 제64 항에 있어서,
    상기 이웃 블록이 오직 상기 참조 픽처에만 기초하여 결정되는 경우 상기 이웃 블록은 머지 후보 결정을 위해 폐기되는, 비디오 프로세싱 방법.
  69. 제58 항 내지 제68 항 중 하나 이상의 항에 있어서,
    고정된 가중치가 상기 현재 픽처의 참조 블록들과 상기 참조 픽처의 참조 블록들에 할당되는, 비디오 프로세싱 방법.
  70. 제69 항에 있어서,
    상기 고정된 가중치는 상기 비트스트림 표현에서 시그널링되는, 비디오 프로세싱 방법.
  71. 제1 항 내지 제70 항 중 하나 이상의 항에 있어서,
    상기 변환을 수행하는 단계는 상기 비디오의 상기 블록으로부터 상기 비트스트림 표현을 생성하는 단계를 포함하는, 비디오 프로세싱 방법.
  72. 제1 항 내지 제70 항 중 하나 이상의 항에 있어서,
    상기 변환을 수행하는 단계는 상기 비트스트림 표현으로부터 상기 비디오의 상기 블록을 생성하는 단계를 포함하는, 비디오 프로세싱 방법.
  73. 제1 항 내지 제72 항 중 하나 이상의 항에 개시된 방법을 구현하도록 구성된 프로세서를 포함하는 비디오 프로세싱 장치.
  74. 코드가 저장된 컴퓨터 판독가능한 매체에 있어서, 상기 코드는 프로세서가 제1 항 내지 제72 항 중 하나 이상의 항에 개시된 방법을 구현하게 하는, 컴퓨터 판독가능한 매체.
KR1020217038897A 2019-06-06 2020-06-08 비디오 코딩을 위한 움직임 후보 리스트 구성 KR102662603B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
CN2019090409 2019-06-06
CNPCT/CN2019/090409 2019-06-06
CNPCT/CN2019/092438 2019-06-22
CN2019092438 2019-06-22
CNPCT/CN2019/105180 2019-09-10
CN2019105180 2019-09-10
PCT/CN2020/094865 WO2020244660A1 (en) 2019-06-06 2020-06-08 Motion candidate list construction for video coding

Publications (2)

Publication Number Publication Date
KR20220016840A true KR20220016840A (ko) 2022-02-10
KR102662603B1 KR102662603B1 (ko) 2024-04-30

Family

ID=

Also Published As

Publication number Publication date
US20220103828A1 (en) 2022-03-31
WO2020244660A1 (en) 2020-12-10
US11653002B2 (en) 2023-05-16
JP7460661B2 (ja) 2024-04-02
JP2022535903A (ja) 2022-08-10
CN117354507A (zh) 2024-01-05
JP2024023522A (ja) 2024-02-21
CN113994699A (zh) 2022-01-28
US20230059008A1 (en) 2023-02-23
EP3967040A4 (en) 2022-11-30
CN113994699B (zh) 2024-01-12
EP3967040A1 (en) 2022-03-16

Similar Documents

Publication Publication Date Title
US11159808B2 (en) Using inter prediction with geometric partitioning for video processing
CN114097228B (zh) 具有几何分割模式编解码的运动候选列表
WO2020259426A1 (en) Motion candidate list construction for intra block copy mode
WO2020244659A1 (en) Interactions between sub-block based intra block copy and different coding tools
JP2022519883A (ja) デコーダ側精緻化ツールのサイズ選択アプリケーション
JP7460661B2 (ja) 映像符号化のための動き候補リストの構成
WO2020244503A1 (en) Intra block copy with triangular partitions
WO2021008514A1 (en) Indication of adaptive loop filtering in adaptation parameter set
CN113966616B (zh) 使用临近块信息的运动候选列表构建
WO2020143742A1 (en) Simplified context modeling for context adaptive binary arithmetic coding
CN113994682A (zh) 具有默认参数的基于历史的运动矢量预测
KR102662603B1 (ko) 비디오 코딩을 위한 움직임 후보 리스트 구성
KR102662449B1 (ko) 디코더 측 정제 툴들의 크기 선택 적용

Legal Events

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