KR20210131347A - 크기에 따른 인터 코딩 - Google Patents

크기에 따른 인터 코딩 Download PDF

Info

Publication number
KR20210131347A
KR20210131347A KR1020217027315A KR20217027315A KR20210131347A KR 20210131347 A KR20210131347 A KR 20210131347A KR 1020217027315 A KR1020217027315 A KR 1020217027315A KR 20217027315 A KR20217027315 A KR 20217027315A KR 20210131347 A KR20210131347 A KR 20210131347A
Authority
KR
South Korea
Prior art keywords
block
prediction
mode
current block
coding
Prior art date
Application number
KR1020217027315A
Other languages
English (en)
Inventor
카이 장
리 장
홍빈 리우
지장 수
유에 왕
Original Assignee
베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
바이트댄스 아이엔씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드, 바이트댄스 아이엔씨 filed Critical 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
Priority claimed from PCT/CN2020/078108 external-priority patent/WO2020177756A1/en
Publication of KR20210131347A publication Critical patent/KR20210131347A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods 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 bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/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/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/577Motion compensation with bidirectional frame interpolation, i.e. using B-pictures
    • 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 년 3 월 6 일에 출원된 국제 특허 출원 번호 제 PCT/CN2019/077179, 2019 년 3 월 20 일에 출원된 국제 특허 출원 번호 제 PCT/CN2019/078939, 및 2019 년 3 월 24 일에 출원된 국제 특허 출원 번호 제 PCT/CN2019/079397 에 대한 우선권을 적시에 주장한다. 미국 특허법에 따른 모든 목적을 위하여, 앞서 언급된 출원들의 모든 개시내용은 본 출원의 개시 내용의 일부로서 본 명세서에서 원용에 의해 통합된다.
본 특허 문헌은 이미지 및 비디오 코딩 및 디코딩에 관한 것이다.
디지털 비디오는 인터넷 및 다른 디지털 통신 네트워크에서 가장 넓은 대역폭을 사용한다. 비디오를 수신하고 디스플레이할 수 있는 접속된 사용자 디바이스의 개수가 증가함에 따라서, 디지털 비디오 사용을 위한 대역폭 수요는 계속하여 증가할 것으로 기대된다.
본 명세서는 인코딩 및 디코딩 동작 도중에 비디오 인코더 및 디코더에 의해 사용될 수 있는 다양한 비디오 처리 기법을 개시한다.
하나의 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 어파인 코딩 툴을 사용한 비디오의 현재 블록 및 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 서브-블록의 제 1 움직임 벡터 및 현재 블록에 대한 대표 움직임 벡터인 제 2 움직임 벡터가 크기 제약을 준수한다고 결정하는 단계를 포함한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 여섯 개의 파라미터를 포함하는 어파인 모델(affine model)을 결정하는 단계를 포함한다. 어파인 모델은 현재 블록의 이웃하는 블록의 어파인 코딩 정보로부터 승계된다(inherited). 또한, 이러한 방법은 이러한 어파인 모델에 기반하여 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 블록 및 비디오의 비트스트림 표현 사이의 변환을 위하여, 양방향 예측 코딩 기법(bi-prediction coding technique)이 상기 블록에 적용가능한지 여부를, 폭 W 및 높이 H를 가지는 블록의 크기에 기반하여 결정하는 단계를 포함하고, W 및 H는 양의 정수이다. 또한, 이러한 방법은 결정 결과에 따라서 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 트리 분할 프로세스가 상기 블록에 적용가능한지 여부를, 상기 코딩 트리 분할 프로세스에 따라서 상기 블록의 자식 코딩 유닛인 서브-블록의 크기에 기반하여 결정하는 단계를 포함한다. 상기 서브-블록은 폭 W 및 높이 H를 가지고, W 및 H는 양의 정수이다. 또한, 이러한 방법은 결정 결과에 따라서 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 유닛 레벨 가중치가 있는 양방향 예측(bi-prediction with coding unit level weight; BCW) 코딩 모드의 인덱스가 현재 블록의 위치에 대한 규칙에 기반하여 유도되는지 여부를 결정하는 단계를 포함한다. BCW 코딩 모드에서는, 다수의 가중치를 포함하는 가중치 세트가 현재 블록의 양방향 예측 값을 생성하기 위하여 사용된다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 인터 및 인트라 통합 예측(combined inter and intra prediction; CIIP) 코딩 기법을 사용하여 코딩된 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 인트라-예측 모드를 이웃하는 블록의 인트라-예측 모드와 독립적으로 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 인터 및 인트라 통합 예측(CIIP) 코딩 기법을 사용하여 코딩된 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 인트라-예측 모드를 제 1 이웃하는 블록의 제 1 인트라-예측 모드 및 제 2 이웃하는 블록의 제 2 인트라-예측 모드에 따라서 결정하는 단계를 포함한다. 제 1 이웃하는 블록은 인트라-예측 코딩 기법을 사용하여 코딩되고, 제 2 이웃하는 블록은 CIIP 코딩 기법을 사용하여 코딩된다. 제 1 인트라-예측 모드에는 제 2 인트라-예측 모드와 상이한 우선순위가 주어진다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 인터 및 인트라 통합 예측(CIIP) 프로세스가 현재 블록의 색성분에 적용가능한지 여부를 현재 블록의 크기에 기반하여 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 인터 및 인트라 통합 예측(CIIP) 코딩 기법이 현재 블록에 적용되어야 하는지 여부를 현재 블록의 특성에 기반하여 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 툴이 현재 블록에 대하여 디스에이블되어야 하는지 여부를 현재 블록이 인터 및 인트라 통합 예측(CIIP) 코딩 기법으로 코딩되는지 여부에 기반하여 결정하는 단계를 포함한다. 이러한 코딩 툴은: 양방향성 광학적 흐름(Bi-Directional Optical Flow; BDOF), 중첩된 블록 움직임 보상(Overlapped Block Motion Compensation; OBMC), 또는 디코더-측 움직임 벡터 정제 프로세스(decoder-side motion vector refinement process; DMVR) 중 적어도 하나를 포함한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 공간적 움직임 예측을 위한 움직임 벡터를 위해 사용되는 제 1 정밀도 P1 및 시간적 움직임 예측을 위한 움직임 벡터를 위해 사용되는 제 2 정밀도 P2를 결정하는 단계를 포함한다. P1 및/또는 P2는 분수이고, P1 및 P2 중 어느 것도 상기 비트스트림 표현 내에서 시그널링되지 않는다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 움직임 벡터 (MVx, MVy)를 정밀도 (Px, Py)로 결정하는 단계를 포함한다. Px는 MVx와 연관되고, Py는 MVy와 연관된다. MVx 및 MVy는 N 개의 비트를 각각 가지는 정수로서 저장되고, MinX ≤ MVx ≤ MaxX이며, MinY ≤ MVy ≤ MaxY이고, MinX, MaxX, MinY, 및 MaxY는 실수 숫자이다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 공유된 병합 목록이 현재 블록에 적용가능한지 여부를 현재 블록의 코딩 모드에 따라서 결정하는 단계를 포함한다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, W x H 크기를 가지는 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 이러한 변환 도중의 움직임 보상을 위한 차원 (W + N - 1) x (H + N - 1)의 제 2 블록을 결정하는 단계를 포함한다. 제 2 블록은 차원 (W + N - 1- PW) x (H + N - 1 - PH)의 레퍼런스 블록에 기반하여 결정된다. N은 필터 크기를 나타내고, W, H, N, PW 및 PH는 음이 아닌 정수이다. PW 및 PH 양자 모두는 0 과 같지 않다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, W x H 크기를 가지는 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 이러한 변환 도중의 움직임 보상을 위한 차원 (W + N - 1) x (H + N - 1)의 제 2 블록을 결정하는 단계를 포함한다. W와 H는 음이 아닌 정수이고, N은 음이 아닌 정수이며 필터 크기에 기반한다. 변환이 일어나는 도중에, 정제된 움직임 벡터가 원본 움직임 벡터에 대한 움직임 벡터 정제 동작에 따른 멀티-포인트 검색에 기반하여 결정되고, 레퍼런스 블록의 픽셀 길이의 경계(pixels long boundaries)가 하나 이상의 비-경계 픽셀을 반복시킴으로써 결정된다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 인터-인트라 통합 예측(CIIP) 코딩 기법을 사용하여 코딩된 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 상기 블록 내의 소정 위치에서의 예측 값을 해당 위치에서의 인터 예측 값과 인트라 예측 값의 가중합에 기반하여 결정하는 단계를 포함한다. 가중합은, 인터 예측 값 및 인트라 예측 값에 기반하여 획득된 최초의 합에 오프셋을 가산하는 것에 기반하여 얻어지고, 이러한 오프셋은 상기 가중합을 결정하기 위하여 수행되는 우측 천이 연산 이전에 가산된다. 또한, 이러한 방법은 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록의 크기와 연관된 조건이 만족되었는지 여부에 부분적으로 기초하여 현재 블록의 코딩 정보가 비트스트림 표현에서 표현되는 방식을 결정하는 단계를 포함한다. 이 방법은 이 결정에 기반하여 변환을 수행하는 단계도 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 비디오 블록과 비디오의 비트스트림 표현 간의 변환을 위해 변경된 움직임 벡터 세트를 결정하는 단계를 포함한다. 그리고 변경된 움직임 벡터 세트에 기반하여 변환을 수행하는 단계를 포함한다. 조건을 만족하는 현재 블록으로 인해 변경된 움직임 벡터 세트는 현재 블록과 연관된 움직임 벡터 세트의 변경된 버전이다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 블록 차원의 조건이 만족되는 경우 양 방향 움직임 벡터로부터 단 방향 움직임 벡터를 결정하는 단계를 포함한다. 단 방향 움직임 벡터는 이후 변환을 위해 머지 후보로서 사용된다. 또한, 이 방법은 이 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록의 차원에 기반하여 현재 블록의 움직임 후보가 단 방향 예측 후보로 제한된다고 결정하는 단계, 이 결정에 기초하여 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 비디오 처리 방법이 개시된다. 이러한 방법은, 어파인 코딩되는 현재 비디오 블록의 대표 움직임 벡터와 현재 비디오 블록의 서브-블록의 움직임 벡터 사이의 크기 제한 사항을 결정하는 단계 및 상기 크기 제한 사항을 사용하여, 현재 비디오 블록 또는 서브블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 어파인 코딩된 현재 비디오 블록에 대하여 현재 비디오 블록의 하나 이상의 서브-블록을 결정하는 단계 - 각각의 서브-블록은 MxN 픽셀의 크기를 가지고, M과 N은 2 또는 4의 배수임 -, 상기 서브-블록의 움직임 벡터를 크기 제한 사항에 부합하게 하는(conforming) 단계, 및 트리거에 기반하여 조건부로, 상기 크기 제한 사항을 사용하여, 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계, 및 결정 결과에 기반하여, 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을, 현재 비디오 블록에 대한 양방향 예측 인코딩 모드를 제외함으로써 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계, 및 결정 결과에 기반하여, 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고, 인터 예측 모드는 상기 크기 조건에 따라서 상기 비트스트림 표현 내에서 시그널링된다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계, 및 결정 결과에 기반하여, 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고, 상기 변환 도중에 병합 후보 목록을 생성하는 것은 상기 크기 조건에 의존한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록의 자식 코딩 유닛이 크기 조건을 만족시킨다고 결정하는 단계, 및 결정 결과에 기반하여, 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고, 상기 자식 코딩 유닛을 생성하기 위하여 사용되는 코딩 트리 분할 프로세스는 상기 크기 조건에 의존한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록에 대한 일반화된 양방향 예측(GBi) 프로세스에 대한 가중치 인덱스를 상기 현재 비디오 블록의 위치에 기반하여 결정하는 단계 및 상기 GBi 프로세스를 구현하도록, 상기 현재 비디오 블록과 그것의 비트스트림 표현 사이의 변환을 상기 가중치 인덱스를 사용하여 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록이 인트라-인터 예측(IIP) 코딩된 블록으로서 코딩된다고 결정하는 단계 및 상기 현재 비디오 블록과 그것의 비트스트림 표현 사이의 변환을, 상기 현재 비디오 블록의 인트라-예측 모드 또는 최고 가능성 모드(most probable mode; MPM)를 결정하기 위한 단순화 규칙(simplification rule)을 사용하여 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록이 단순화 기준을 만족시킨다고 결정하는 단계, 및 상기 현재 비디오 블록과 비트스트림 표현 사이의 변환을, 상기 변환을 위한 인터-인트라 예측 모드의 사용을 디스에이블함으로써 또는 상기 변환을 위해 사용되는 추가적인 코딩 툴을 디스에이블함으로써 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 움직임 벡터 기반 인코딩 프로세스를 사용하여 수행하는 단계를 포함하고, 여기에서 (a) 변환 프로세스 도중에 정밀도 P1이 공간적 움직임 예측 결과를 저장하기 위하여 사용되고, 정밀도 P2가 시간적 움직임 예측 결과를 저장하기 위하여 사용되며, P1 및 P2는 분수이고, 또는 (b) 정밀도 Px가 x-움직임 벡터를 저장하기 위하여 사용되고, 정밀도 Py가 y-움직임 벡터를 저장하기 위하여 사용되며, Px 및 Py는 분수이다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록의 W2xH2 크기의 큰 서브-블록 내의 W1xH1 크기의 작은 서브-블록을, (W2 + N - 1 - PW) * (H2 + N - 1 - PH) 블록을 페치함으로써 보간하는 단계, 페치된 블록을 픽셀 패딩하는 단계, 픽셀 패딩된 블록에 경계 픽셀 반복(boundary pixel repeating)을 수행하고 상기 작은 서브-블록의 픽셀 값을 획득하는 단계 - W1, W2, H1, H2, 및 PW 및 PH는 정수임 -, 및 상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 상기 작은 서브-블록의 보간된 픽셀 값을 사용하여 수행하는 단계를 포함한다.
다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, WxH 차원의 현재 비디오 블록 및 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환 도중에, 움직임 보상 동작 중에 (W + N - 1 - PW) * (W + N - 1 - PH) 레퍼런스 픽셀을 페치하고 레퍼런스 픽셀을 페치된 레퍼런스 픽셀 밖에 패딩함으로써 상기 움직임 보상 동작을 수행하는 단계, 및 상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 상기 움직임 보상 동작의 결과를 사용하여 수행하는 단계를 포함하고, W, H, N, PW 및 PH는 정수이다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록의 크기에 기반하여, 상기 현재 비디오 블록의 양방향 예측 또는 단방향 예측이 허용되지 않는다고 결정하는 단계, 및 결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 양방향 예측 또는 단방향 예측 모드를 디스에이블함으로써 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 다른 비디오 처리 방법이 개시된다. 이러한 방법은, 현재 비디오 블록의 크기에 기반하여, 상기 현재 비디오 블록의 양방향 예측 또는 단방향 예측이 허용되지 않는다고 결정하는 단계, 및 결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 양방향 예측 또는 단방향 예측 모드를 디스에이블함으로써 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서는, 비디오 인코더 장치가 개시된다. 비디오 인코더는 위에서 설명된 방법을 구현하도록 구성되는 프로세서를 포함한다.
또 다른 예시적인 양태에서는, 비디오 인코더 장치가 개시된다. 비디오 인코더는 위에서 설명된 방법을 구현하도록 구성되는 프로세서를 포함한다.
또 다른 예시적인 양태에서는, 코드가 저장된 컴퓨터-판독가능 매체가 개시된다. 이러한 코드는 본 명세서에서 설명되는 방법 중 하나를 프로세서-실행가능 코드로서 구현한다.
이러한 특징과 다른 특징들이 본 명세서 전체에서 설명된다.
도 1은 서브-블록에 기반한 예측의 일 예를 보여준다.
도 2a 는 4-파라미터 어파인 모델(affine model)을 도시한다.
도 2b 는 6-파라미터 어파인 모델을 도시한다.
도 3 은 서브-블록마다의 어파인 움직임 벡터 필드의 일 예를 도시한다.
도 4a 는 AF_MERGE를 위한 후보의 일 예를 도시한다.
도 4b 는 AF_MERGE를 위한 후보의 다른 예를 도시한다.
도 5 는 어파인 병합 모드를 위한 후보 위치를 도시한다.
도 6 은 어파인 모드의 코딩 유닛(CU)에 대한 제약된 서브-블록 움직임 벡터의 일 예를 도시한다.
도 7a 는 하나의 CU를 두 개의 삼각 예측 유닛으로 분할하는 135 도 파티션의 일 예를 도시한다.
도 7b 는 하나의 CU를 두 개의 삼각 예측 유닛으로 분할하는 45 도 분할 패턴의 일 예를 도시한다.
도 8 은 이웃하는 블록의 위치의 예들을 보여준다.
도 9 는 보간 이전의 레퍼런스 블록의 반복 경계 픽셀(repeat boundary pixel)의 일 예를 도시한다.
도 10 은 코딩 트리 유닛(CTU) 및 CTU (영역) 라인의 일 예를 도시한다. 음영처리된 CTU (영역들)는 하나의 CUT (영역) 라인 내에 있고, 음영처리되지 않은 CTU (영역들)는 다른 CUT (영역) 라인 내에 있다.
도 11은 본 명세서에서 설명되는 비디오 디코더 또는 비디오 인코더 장치를 구현하기 위한 하드웨어 플랫폼의 일 예의 블록도이다.
도 12는 예시적인 비디오 처리 방법에 대한 흐름도이다.
도 13 은 DMVR 내의 목록 0 및 목록 1 사이에서 미러링되는 움직임 차이 벡터(motion vector difference) MVD(0,1)의 일 예를 도시한다.
도 14 는 일 회의 반복에서 점검될 수 있는 예시적인 MV들을 보여준다.
도 15 는 계산을 위해 패딩된 요구되는 레퍼런스 샘플 및 경계를 보여준다.
도 16 은 개시된 기법이 구현될 수 있는 하나의 예시적인 비디오 처리 시스템의 블록도이다.
도 17 은 본 발명에 따르는 비디오 처리를 위한 방법의 흐름도 표현이다.
도 18 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 19 는 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 20 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 21은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 22는 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 23 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 24 는 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 25 는 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 26 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 27 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 28 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 29 는 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 30 은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 31은 본 발명에 따르는 비디오 처리를 위한 다른 방법의 흐름도 표현이다.
도 32는 본 발명에 따르는 비디오 처리를 위한 또 다른 방법의 흐름도 표현이다.
도 33은 본 발명에 따르는 비디오 처리를 위한 또 다른 방법의 흐름도 표현이다.
도 34는 본 발명에 따르는 비디오 처리를 위한 또 다른 방법의 흐름도 표현이다.
도 35는 본 발명에 따르는 비디오 처리를 위한 또 다른 방법의 흐름도 표현이다.
도 36은 본 발명에 따르는 비디오 처리를 위한 또 다른 방법의 흐름도 표현이다.
섹션의 제목은 본 명세서에서 쉽게 이해되도록 하기 위해서 사용된 것이고, 각각의 섹션에서 개시되는 기법 및 실시형태들이 오직 해당 섹션에만 적용가능하다고 한정하는 것이 아니다.
1. 요약
본 특허 문서는 비디오/이미지 코딩 기술에 관한 것이다. 특히, 이러한 기술은 비디오/이미지 코딩 분야의 여러 코딩 툴의 대역폭 및 라인 버퍼를 감소시키는 것에 관한 것이다. 이러한 기술은 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/VVC에서의 인터 예측
보간 필터
HEVC에서는, 루마 서브-샘플이 8-탭 보간 필터에 의해 생성되고 크로마 서브-샘플이 4-탭 보간 필터에 의해 생성된다.
필터들은 두 차원에서 분리될 수 있다. 샘플들은 수평으로 필터링된 후 수직으로 필터링된다.
2.2 서브-블록에 기반한 예측 기술
HEVC Annex I (3D-HEVC)에 의해서 서브-블록에 기반한 예측이 우선 비디오 코딩 표준에 도입된다. 서브-블록에 기반한 예측을 통해서, 코딩 유닛(Coding Unit; CU) 또는 예측 유닛(Prediction Unit; PU)과 같은 블록이 중첩되지 않는 여러 서브-블록들로 분할된다. 상이한 서브-블록들에는, 레퍼런스 인덱스 또는 움직임 벡터(Motion Vector; MV)와 같은 상이한 움직임 정보가 할당될 수 있고, 움직임 보상(Motion Compensation; MC)이 각각의 서브-블록에 대해서 개별적으로 수행된다. 도 1은 서브-블록에 기반한 예측의 개념을 시연한다.
HEVC를 넘어서는 장래의 비디오 코딩 기술을 탐색하기 위하여, JVET(Joint Video Exploration Team)이 VCEG 및 MPEG에 의해 공동으로 2015 년에 설립되었다. 그 이후에, 많은 새로운 방법들이 JVET에 의해 채용되고, JEM(Joint Exploration Model)이라고 불리는 레퍼런스 소프트웨어에 추가되어 왔다.
JEM에서는, 어파인 예측(affine prediction), 대안적 시간적 움직임 벡터 예측(Alternative temporal motion vector prediction; ATMVP), 공간적-시간적 움직임 벡터 예측(spatial-temporal motion vector prediction; STMVP), 양방향성 광학적 흐름(Bi-directional Optical flow; BIO) 및 프레임-레이트 상향 변환(Frame-Rate Up Conversion; FRUC)과 같은 서브-블록에 기반한 예측이 여러 코딩 툴에 채택된다. 어파인 예측은 VVC에도 채택되어 왔다.
2.3 어파인 예측(Affine Prediction)
HEVC에서는, 움직임 보상 예측(motion compensation prediction; MCP)을 위해서 병진 움직임 모델만이 적용된다. 하지만 실세계에는 많은 종류의 움직임, 예를 들어 줌인/아웃, 회전, 시점 움직임 및 다른 비정규적 움직임이 존재한다. VVC에서는, 단순화된 어파인 변환 움직임 보상 예측이 적용된다. 도 2a 및 도 2b 에 도시된 바와 같이, 블록의 어파인 움직임 필드는 두 개(4-파라미터 어파인 모델에서) 또는 세 개(6-파라미터 어파인 모델에서)의 제어 포인트 움직임 벡터에 의해 기술된다.
어떤 블록의 움직임 벡터 필드(motion vector field; MVF)는 다음 수학식들에 의해서 기술되는데, 4-파라미터 어파인 모델(4-파라미터가 a, b, e f로 규정됨)은 수학식 1에서 규정되고, 6-파라미터 어파인 모델(4-파라미터는 변수 a, b, c, d, e f로 규정됨)은 수학식 2에서 각각 규정된다:
Figure pct00001
Figure pct00002
여기에서, (mv h 0 , mv h 0 )는 상단-좌측 코너 제어 포인트의 움직임 벡터이고, (mv h 1 , mv h 1 )은 상단-우측 코너 제어 포인트의 움직임 벡터이며, (mv h 2 , mv h 2 )는 하단-좌측 코너 제어 포인트의 움직임 벡터이고, 세 개의 움직임 벡터 모두는 제어 포인트 움직임 벡터(control point motion vector; CPMV)라고 불리며, (x, y)는 현재 블록 내의 상단-좌측 샘플에 상대적인 대표 포인트의 좌표를 나타낸다. CP 움직임 벡터는 시그널링될 수 있고(어파인 AMVP 모드에서와 같이), 또는 즉시 유도될 수도 있다(어파인 병합 모드(affine merge mode)에서와 같이). wh는 현재 블록의 폭 및 높이이다. 실제로는, 제산(division)은 반올림 연산이 있는 우측-천이에 의해 구현된다. VTM에서는, 대표 포인트가 서브-블록의 중심 위치로서 규정되고, 예를 들어 현재 블록 내의 상단-좌측 샘플에 상대적인 서브-블록의 좌측-상단 코너의 좌표가 (xs, ys)이면, 대표 포인트의 좌표는 (xs+2, ys+2)가 되도록 규정된다.
제산이 없는 디자인에서는, 수학식 1 및 수학식 2가 다음과 같이 구현된다
Figure pct00003
(1)에 표시된 4-파라미터 어파인 모델의 경우 다음이 되고:
Figure pct00004
(2)에 표시된 6-파라미터 어파인의 경우 다음이 된다:
Figure pct00005
마지막으로, 다음이 성립하고,
Figure pct00006
Figure pct00007
여기에서 S는 계산 정밀도를 나타낸다. 예를 들어, VVC에서는 S=7이다. VVC에서는, (xs, ys)에 상단-좌측 샘플이 있는 서브-블록에 대한 MC에서 사용되는 MV는 x=xs+2 및 y=ys+2 의 관계를 가지고 수학식 6)에 의해 계산된다.
각각의 4×4 서브-블록의 움직임 벡터를 유도하기 위하여, 도 3 에 도시된 바와 같은 각각의 서브-블록의 중심 샘플의 움직임 벡터는 수학식 1 또는 수학식 2에 의해 계산되고, 1/16의 분수 정확도로 반올림된다. 그러면, 움직임 보상 보간 필터가 적용되어 유도된 움직임 벡터가 있는 각각의 서브-블록의 예측을 생성한다.
어파인 모델은 공간적으로 이웃하는 어파인-코딩된 블록, 예컨대 도 4a 에 도시된 바와 같은 좌측, 상부, 상부 우측, 좌측 하단 및 상부 좌측의 이웃하는 블록들로부터 승계될 수 있다. 예를 들어, 만일 도 4a 의 좌측 하단 이웃 블록 A가 어파인 모드에서 도 4b 에서 A0 로 표시된 바와 같이 코딩되면, 블록 A를 포함하는 이웃하는 CU/PU의 상단 좌측 코너, 상부 우측 코너 및 좌측 하단 코너의 제어 포인트(CP) 움직임 벡터들(mv 0 N, mv 1 Nmv 2 N)이 페치된다. 그리고, 현재 CU/PU의 상단 좌측 코너/상단 우측/하단 좌측 움직임 벡터(mv 0 C, mv 1 Cmv 2 C)(6-파라미터 어파인 모델에 대해서만 사용됨)가 mv 0 N, mv 1 Nmv 2 N에 기반하여 계산된다. VTM-2.0 에서는, 현재 블록이 어파인 코딩된다면, 서브-블록(예를 들어, VTM에서의 4×4 블록) LT가 mv0를 저장하고, RT가 mv1을 저장한다는 것에 주의해야 한다. 현재 블록이 6-파라미터 어파인 모델로 코딩된다면, LB가 mv2를 저장한다; 그렇지 않으면(4-파라미터 어파인 모델의 경우), LB가 mv2'을 저장한다. 다른 서브-블록들은 MC를 위해 사용된 MV를 저장한다.
CU가, 예를 들어 AF_MERGE 모드에서 어파인 병합 모드로 코딩된다면, 이것은 어파인 모드로 코딩된 제 1 블록을 유효한 이웃 복원 블록들로부터 취한다. 그리고, 후보 블록에 대한 선택 순서는 도 4a 에 도시된 바와 같이 좌측, 상부, 상부 우측, 좌측 하단으로부터 상부 좌측까지의 순서이다.
현재 블록의 유도된 CP MV들(mv 0 C, mv 1 Cmv 2 C)은 어파인 병합 모드에서 CP MV들로서 사용될 수 있다. 또는, 이들은 VVC에서의 어파인 인터 모드에 대해서는 MVP로서 사용될 수 있다. 병합 모드의 경우, 현재 블록이 어파인 모드로 코딩된다면, 현재 블록의 CP MV들을 유도한 후에, 현재 블록은 다수의 서브-블록들로 더욱 분할될 수 있고, 각각의 블록이 자신의 움직임 정보를 현재 블록의 유도된 CP MV들에 기반하여 유도할 것이라는 것에 주의해야 한다.
2.4 JVET에서의 예시적인 실시형태
오직 하나의 어파인 공간적 이웃 블록만이 어떤 블록에 대한 어파인 움직임을 유도하도록 사용될 수 있는 VTM과 다름. 일부 실시형태들에서는, 어파인 후보들의 별개의 목록이 AF_MERGE 모드를 위하여 구성된다.
1) 승계된 어파인 후보들을 후보 목록에 삽입함
승계된 어파인 후보란, 이러한 후보가 어파인 모드로 코딩된 유효한 이웃의 복원된 블록으로부터 유도된다는 것을 의미한다. 도 5 에 도시된 바와 같이, 이러한 후보 블록에 대한 스캔 순서는 A1, B1, B0, A0 및 B2의 순서이다. 어떤 블록(예를 들어, A1)이 선택되는 경우, 다음의 2-단계 프로시저가 적용된다:
1.a 우선, 해당 블록을 커버하는 CU의 세 개의 코너 움직임 벡터를 사용하여 현재 블록의 두 개/세 개의 제어 포인트를 유도한다.
1.b 현재 블록의 제어 포인트에 기반하여, 현재 블록 내의 각각의 서브-블록에 대한 서브-블록 움직임을 유도한다.
2) 구성된 어파인 후보를 삽입함
어파인 병합 후보 목록 내의 후보들의 개수가 MaxNumAffineCand보다 적으면, 구성된 어파인 후보들이 후보 목록 내에 삽입된다.
구성된 어파인 후보 란, 이러한 후보가 각각의 제어 포인트의 이웃 움직임 정보를 조합함으로써 구성된다는 것을 의미한다.
제어 포인트들에 대한 움직임 정보는 처음에, 도 5 에 도시되는 규정된 공간적 이웃 및 시간적 이웃으로부터 유도된다. CPk(k=1, 2, 3, 4)는 k-번째 제어 포인트를 나타낸다. A0, A1, A2, B0, B1, B2 및 B3는 CPk (k=1, 2, 3)를 예측하기 위한 공간적 위치이고; T는 CP4를 예측하기 위한 시간적 위치이다.
CP1, CP2, CP3 및 CP4의 좌표는 각각 (0, 0), (W, 0), (H, 0) 및 (W, H)인데, 여기에서 W 및 H는 현재 블록의 폭 및 높이이다.
각각의 제어 포인트의 움직임 정보는 다음의 우선순위 순서에 따라서 획득된다:
2.a CP1의 경우, 점검 우선순위는 B2->B3->A2이다. B2는 이용가능한 경우에 사용된다. 그렇지 않으면, B2가 이용불가능하다면, B3가 사용된다. B2 및 B3 양자 모두가 이용불가능하면, A2가 사용된다. 세 개의 후보 모두가 이용불가능하면, CP1의 움직임 정보는 획득할 수 없다.
2.b CP2의 경우, 점검 우선순위는 B1->B0이다;
2.c CP3의 경우, 점검 우선순위는 A1->A0이다;
2.d CP4의 경우, T가 사용된다.
둘째로, 제어 포인트들의 조합이 움직임 모델을 구성하기 위하여 사용된다.
세 개의 제어 포인트들의 움직임 벡터는 6-파라미터 어파인 모델에서의 변환 파라미터를 계산하기 위하여 필요하다. 세 개의 제어 포인트는 다음 네 개의 조합 중 하나로부터 선택될 수 있다: ({CP1, CP2, CP4}, {CP1, CP2, CP3}, {CP2, CP3, CP4}, {CP1, CP3, CP4}). 예를 들어, Affine (CP1, CP2, CP3)로서 표시되는 6-파라미터 어파인 움직임 모델을 구성하기 위해서 CP1, CP2 및 CP3 제어 포인트들을 사용한다.
두 개의 제어 포인트들의 움직임 벡터가 4-파라미터 어파인 모델에서의 변환 파라미터를 계산하기 위하여 필요하다. 두 개의 제어 포인트는 다음 여섯 개의 조합 중 하나로부터 선택될 수 있다: ({CP1, CP4}, {CP2, CP3}, {CP1, CP2}, {CP2, CP4}, {CP1, CP3}, {CP3, CP4}). 예를 들어, Affine (CP1, CP2)로서 표시되는 4-파라미터 어파인 움직임 모델을 구성하기 위해서 CP1 및 CP2 제어 포인트들을 사용한다.
구성된 어파인 후보들의 조합이 다음 순서로 후보 목록 내에 삽입된다: {CP1, CP2, CP3}, {CP1, CP2, CP4}, {CP1, CP3, CP4}, {CP2, CP3, CP4}, {CP1, CP2}, {CP1, CP3}, {CP2, CP3}, {CP1, CP4}, {CP2, CP4}, {CP3, CP4}
3) 제로 움직임 벡터를 삽입함
어파인 병합 후보 목록 내의 후보들의 개수가 MaxNumAffineCand보다 적으면, 목록이 가득 찰 때까지 제로 움직임 벡터들이 후보 목록에 삽입된다.
2.5 어파인 병합 후보 목록
2.5.1 어파인 병합 모드
VTM-2.0.1의 어파인 병합 모드에서는, 이용가능한 첫 번째 어파인 이웃만이 어파인 병합 모드의 움직임 정보를 유도하기 위하여 사용될 수 있다. 일부 실시형태들에서는, 어파인 병합 모드에 대한 후보 목록은, 유효한 어파인 이웃들을 검색하고 각각의 제어 포인트의 이웃 움직임 정보를 조합함으로써 구성된다.
어파인 병합 후보 목록은 다음 단계로서 구성된다:
1) 승계된 어파인 후보를 삽입함
승계된 어파인 후보란, 해당 후보가 자신의 유효한 이웃 어파인 코딩된 블록의 어파인 움직임 모델로부터 유도된다는 것을 의미한다. 도 5 에 도시된 바와 같이, 공통된 베이스에서 후보 위치에 대한 스캔 순서는 다음이다: A1, B1, B0, A0 및 B2.
어떤 후보가 유도된 이후에, 동일한 후보가 목록 내에 삽입된 바 있는지 여부를 점검하기 위해서 전체 프루닝(pruning) 프로세스가 수행된다. 동일한 후보가 존재한다면, 유도된 후보는 버려진다.
2) 구성된 어파인 후보를 삽입함
어파인 병합 후보 목록 내의 후보들의 개수가 MaxNumAffineCand(이러한 기여도(contribution)에서는 5로 설정됨)보다 적으면, 구성된 어파인 후보들이 후보 목록 내에 삽입된다. 구성된 어파인 후보 란, 이러한 후보가 각각의 제어 포인트의 이웃 움직임 정보를 조합함으로써 구성된다는 것을 의미한다.
제어 포인트들에 대한 움직임 정보는 처음에, 규정된 공간적 이웃 및 시간적 이웃으로부터 유도된다. CPk(k=1, 2, 3, 4)는 k-번째 제어 포인트를 나타낸다. A0, A1, A2, B0, B1, B2 및 B3는 CPk(k=1, 2, 3)를 예측하기 위한 공간적 위치들이다; T는 CP4를 예측하기 위한 시간적 위치이다.
CP1, CP2, CP3 및 CP4의 좌표는 각각 (0, 0), (W, 0), (H, 0) 및 (W, H)인데, 여기에서 W 및 H는 현재 블록의 폭 및 높이이다.
각각의 제어 포인트의 움직임 정보는 다음의 우선순위 순서에 따라서 획득된다:
CP1의 경우, 점검 우선순위는 B2->B3->A2이다. B2는 이용가능한 경우에 사용된다. 그렇지 않으면, B2가 이용불가능하다면, B3가 사용된다. B2 및 B3 양자 모두가 이용불가능하면, A2가 사용된다. 세 개의 후보 모두가 이용불가능하면, CP1의 움직임 정보는 획득할 수 없다.
CP2의 경우, 점검 우선순위는 B1->B0이다.
CP3의 경우, 점검 우선순위는 A1->A0이다.
CP4의 경우, T가 사용된다.
둘째로, 제어 포인트들의 조합이 어파인 병합 후보를 구성하기 위하여 사용된다.
세 개의 제어 포인트의 움직임 정보가 6-파라미터 어파인 후보를 구성하기 위하여 필요하다. 세 개의 제어 포인트는 다음 네 개의 조합 중 하나로부터 선택될 수 있다: ({CP1, CP2, CP4}, {CP1, CP2, CP3}, {CP2, CP3, CP4}, {CP1, CP3, CP4}). 조합들({CP1, CP2, CP3}, {CP2, CP3, CP4}, {CP1, CP3, CP4})은 상단-좌측, 상단-우측 및 하단-좌측 제어 포인트에 의해 표현되는 6-파라미터 움직임 모델로 변환될 것이다.
두 개의 제어 포인트의 움직임 정보가 4-파라미터 어파인 후보를 구성하기 위하여 필요하다. 두 개의 제어 포인트는 다음 여섯 개의 조합 중 하나로부터 선택될 수 있다: ({CP1, CP4}, {CP2, CP3}, {CP1, CP2}, {CP2, CP4}, {CP1, CP3}, {CP3, CP4}). 조합들({CP1, CP4}, {CP2, CP3}, {CP2, CP4}, {CP1, CP3}, {CP3, CP4})이 상단-좌측 및 상단-우측 제어 포인트들에 의해 표현되는 4-파라미터 움직임 모델로 변환될 것이다.
구성된 어파인 후보들의 조합이 다음 순서로 후보 목록 내에 삽입된다:
{CP1, CP2, CP3}, {CP1, CP2, CP4}, {CP1, CP3, CP4}, {CP2, CP3, CP4}, {CP1, CP2}, {CP1, CP3}, {CP2, CP3}, {CP1, CP4}, {CP2, CP4}, {CP3, CP4}
조합의 레퍼런스 목록 X의 경우(X는 0 또는 1임), 제어 포인트들 중에서 가장 높은 사용 비율을 가지는 레퍼런스 인덱스가 목록 X의 레퍼런스 인덱스로서 선택되고, 상이한 레퍼런스 픽쳐를 가리키는 움직임 벡터들이 스케일링될 것이다.
어떤 후보가 유도된 이후에, 동일한 후보가 목록 내에 삽입된 바 있는지 여부를 점검하기 위해서 전체 프루닝(pruning) 프로세스가 수행된다. 동일한 후보가 존재한다면, 유도된 후보는 버려진다.
3) 제로 움직임 벡터를 사용한 패딩
어파인 병합 후보 목록 내의 후보들의 개수가 5보다 적으면, 제로 레퍼런스 인덱스를 가지는 제로 움직임 벡터들이 목록이 가득 찰 때까지 후보 목록에 삽입된다.
2.5.2 예시적인 어파인 병합 모드
일부 실시형태들에서는, 어파인 병합 모드는 다음과 같이 단순화될 수 있다:
1) 승계된 어파인 후보에 대한 프루닝 프로세스는, VTM-2.0.1에서 유도된 어파인 후보들을 비교하는 대신에, 이웃하는 위치들을 커버하는 코딩 유닛들을 비교함으로써 단순화된다. 최대 2 개의 승계된 어파인 후보가 어파인 병합 목록 내에 삽입된다. 구성된 어파인 후보들에 대한 프루닝 프로세스는 완전히 제거된다.
2) 구성된 어파인 후보 내의 MV 스케일링 동작이 제거된다. 제어 포인트의 레퍼런스 인덱스들이 다르다면, 구성된 움직임 모델은 버려진다.
3) 구성된 어파인 후보들의 개수가 10 개에서 6 개로 감소된다.
4) 일부 실시형태들에서는, ATMVP와 같은 서브-블록 예측이 있는 다른 병합 후보도 역시 어파인 병합 후보 목록 내에 추가된다. 그러한 경우에, 어파인 병합 후보 목록은, 서브-블록 병합 후보 목록과 같은 일부 다른 명칭으로 재명명된다.
2.6 어파인 병합 모드에 대한 예시적인 제어 포인트 MV 오프셋
새로운 어파인 병합 후보는 제 1 어파인 병합 후보의 CPMV 오프셋에 기반하여 생성된다. 제 1 어파인 병합 후보가 4-파라미터 어파인 모델을 병합하면, 각각의 새로운 어파인 병합 후보에 대한 2 개의 CPMV가, 제 1 어파인 병합 후보의 2 개의 CPMV들을 오프셋함으로써 유도된다; 그렇지 않으면(6-파라미터 어파인 모델이 이네이블되면), 각각의 새로운 어파인 병합 후보에 대한 3 개의 CPMV들이 제 1 어파인 병합 후보의 3 개의 CPMV들을 오프셋함으로써 유도된다. 단방향 예측에서, CPMV 오프셋들이 제 1 후보의 CPMV들에 적용된다. 동일한 방향에 목록 0 및 목록 1이 있는 양방향 예측에서, CPMV 오프셋들은 다음과 같이 제 1 후보에 적용된다:
Figure pct00008
Figure pct00009
반대 방향에 목록 0 및 목록 1이 있는 양방향 예측에서, CPMV 오프셋들은 다음과 같이 첫 번째 후보에 적용된다:
Figure pct00010
Figure pct00011
다양한 오프셋 크기를 가지는 다양한 오프셋 방향들이 새로운 어파인 병합 후보를 생성하기 위하여 사용될 수 있다. 다음 두 개의 구현형태들이 테스트되었다:
(1) 2 개의 상이한 오프셋 크기를 가지는 8 개의 상이한 오프셋 방향의 16 개의 새로운 어파인 병합 후보가 다음의 오프셋 세트에서 표시되는 것과 같이 생성된다:
오프셋 세트 = { (4, 0), (0, 4), (-4, 0), (0, -4), (-4, -4), (4, -4), (4, 4), (-4, 4), (8, 0), (0, 8), (-8, 0), (0, -8), (-8, -8), (8, -8), (8, 8), (-8, 8) }.
이러한 디자인에서는 어파인 병합 목록이 20 까지 증가된다. 잠재적인 어파인 병합 후보들의 개수는 총 31 개이다.
(2) 1 개의 오프셋 크기를 가지는 4 개의 상이한 오프셋 방향의 4 개의 새로운 어파인 병합 후보가 다음의 오프셋 세트에서 표시되는 것과 같이 생성된다:
오프셋 세트 = { (4, 0), (0, 4), (-4, 0), (0, -4) }.
어파인 병합 목록은 VTM 2.0.1의 경우에서와 같이 5로 유지된다. 네 개의 시간적으로 구성된 어파인 병합 후보들이 제거되어, 잠재적인 어파인 병합 후보의 개수가 변하지 않도록, 예를 들어 총 15 개로 유지한다. CPMV1, CPMV2, CPMV3 및 CPMV4의 좌표가 (0, 0), (W, 0), (H, 0) 및 (W, H)라고 가정한다. CPMV4가 도 6 에 도시된 바와 같이 시간적 MV로부터 유도된다는 것에 주의한다. 제거된 후보들은 다음 네 개의 시간적으로 관련되어 구성된 어파인 병합 후보들이다: {CP2, CP3, CP4}, {CP1, CP4}, {CP2, CP4}, {CP3, CP4}.
2.7 어파인 움직임 보상의 대역폭 문제
현재 블록이 움직임 보상을 수행하기 위하여 루마 성분에 대하여 4×4 서브-블록들로 그리고 두 개의 크로마 성분들에 대하여 2×2 서브-블록들로 분할되기 때문에, 총 대역폭 요구 사항은 서브-블록 인터-예측이 아닌 경우보다 훨씬 높다. 대역폭 문제를 해결하기 위하여, 여러 접근법들이 제안된다.
2.7.1 예 1
4x4 블록이 단방향성 어파인 코딩된 CU에 대한 서브-블록 크기로서 사용되는 반면에, 8x4/4x8 블록이 양방향성 어파인 코딩된 CU에 대한 서브-블록 크기로서 사용된다.
2.7.2 예 2
어파인 모드의 경우, 어파인 CU의 서브-블록 움직임 벡터는 미리 규정된 움직임 벡터 필드 내에 속하도록 제약된다. 첫 번째(상단 좌측) 서브-블록의 움직임 벡터가 (v0x,v0y)이고, 두 번째 서브-블록의 움직임 벡터가 (vix, viy)라고 가정하는데, vix 및 viy의 값은 다음의 제약들을 나타낸다:
Figure pct00012
Figure pct00013
임의의 서브-블록의 움직임 벡터가 미리 규정된 움직임 벡터 필드를 초과하면, 움직임 벡터는 클리핑된다. 제약된 서브-블록 움직임 벡터의 개념의 예시가 6 에 제공된다.
메모리가 서브-블록 대신에 CU마다 취출되고, 어파인 CU의 최악의 경우의 메모리 대역폭이 8×8 양방향 예측 블록의 보통의 인터 MC(normal inter MC)의 메모리 대역폭을 초과하지 않도록 선택된다고 가정한다. H 및 V의 값들이 CU 크기 및 단방향 예측 또는 양방향 예측에 맞춰 적응된다는 것에 주의한다.
2.7.3 예 3
어파인 예측에서의 메모리 대역폭 요구 사항을 줄이기 위하여, 해당 블록 내의 각각의 8x8 블록은 기본 유닛으로 간주된다. 8x8 블록 내의 네 개의 4x4 서브-블록 모두의 MV들은, 네 개의 4x4 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 1 픽셀을 넘지 않도록 제약된다. 따라서, 대역폭은 (8+7+1)*(8+7+1)/(8*8)=4 샘플/픽셀이 된다.
일부 경우에, 현재 블록 내의 모든 서브-블록의 MV들이 어파인 모델로써 계산된 이후에, 제어 포인트를 보유한 서브-블록들의 MV는 우선 대응하는 제어 포인트 MV로 대체된다. 이것은, 상단-좌측, 상단-우측 및 하단-좌측 서브-블록들의 MV가 각각 상단-좌측, 상단-우측 및 하단-좌측 제어 포인트 MV로 대체된다는 것을 의미한다. 그러면, 현재 블록 내의 각각의 8x8 블록에 대하여, 네 개의 4x4 서브-블록 모두의 MV들은, 네 개의 MV들의 정수 부분들 사이의 최대 차이가 1 픽셀을 넘지 않도록 보장하기 위해서 클리핑된다. 여기에서, 제어 포인트를 포함하는 서브-블록들(상단-좌측, 상단-우측 및 하단-좌측 서브-블록들)이 대응하는 제어 포인트 MV를 사용하여 MV 클리핑 프로세스에 관여한다는 것에 주의해야 한다. 클리핑 프로세스 도중에, 상단-우측 제어 포인트의 MV는 변하지 않은 상태로 유지된다.
각각의 8x8 블록에 적용되는 클리핑 프로세스는 다음과 같다:
1. MV 성분에 대한 최소 값 및 최대 값들인 MVminx, MVminy, MVmaxx, MVmaxy가 우선 각각의 8x8 블록에 대하여 다음과 같이 결정된다:
a) 네 개의 4x4 서브-블록 MV들 중 최소 MV 성분을 취함
MVminx = min(MVx0, MVx1, MVx2, MVx3)
MVminy = min(MVy0, MVy1, MVy2, MVy3)
b) MVminx 및 MVminy의 정수 부분을 최소 MV 성분으로서 사용함
MVminx = MVminx >> MV_precision << MV_precision
MVminy = MVminy >> MV_precision << MV_precision
c) 최대 MV 성분은 다음과 같이 계산된다:
MVmaxx = MVminx + (2 << MV_precision) - 1
MVmaxy = MVminy + (2 << MV_precision) - 1
d) 상단-우측 제어 포인트가 현재의 8x8 블록이면
if (MV1x > MVmaxx)
MVminx = (MV1x >> MV_precision << MV_precision) - (1 << MV_precision)
MVmaxx = MVminx + (2 << MV_precision) - 1
if (MV1y > MVmaxy)
MVminy = (MV1y >> MV_precision << MV_precision) - (1 << MV_precision)
MVmaxy = MVminy + (2 << MV_precision) - 1
2. 이러한 8x8 블록 내의 각각의 4x4 블록의 MV 성분들은 다음과 같이 클리핑된다:
MVxi = max(MVminx, min(MVmaxx, MVxi))
MVyi = max(MVminy, min(MVmaxy, MVyi))
여기에서, (MVxi, MVyi)는 하나의 8x8 블록 내의 i번째 서브-블록의 MV이고, i는 0, 1, 2, 3 이다; (MV1x, MV1y)는 상단-우측 제어 포인트의 MV이다; MV_precision은 1/16 의 움직임 벡터 분수 정확도에 대응하는 4와 같다. MVminx 및 MVmaxx (MVminy 및 MVmaxy)의 정수 부분들 사이의 차이가 1 픽셀이기 때문에, 네 개의 4x4 서브-블록 MV들의 정수 부분들 사이의 최대 차이는 1 개의 픽셀을 넘지 않는다.
또한, 유사한 방법이 일부 실시형태들에서 평면 모드(planar mode)를 처리하기 위해서 사용될 수 있다.
2.7.4 예 4
일부 실시형태들에서는, 최악 상황의 대역폭 감소에 대한 어파인 모드에 대한 제한 사항. 어파인 블록의 최악 상황의 대역폭이 INTER_4x8/INTER_8x4 블록 또는 심지어 INTER_9x9 블록보다 열악하지 않도록 보장하기 위하여, 어파인 제어 포인트들 사이의 움직임 벡터 차이가 어파인 블록의 서브블록 크기가 4x4 또는 8x8인지 여부를 판정하기 위하여 사용된다.
최악 상황의 대역폭 감소에 대한 일반적인 어파인 제한 사항
어파인 모드에 대한 메모리 대역폭 감소는 어파인 제어 포인트들 사이의 움직임 벡터 차이(제어 포인트 차이라고도 불림)를 제한함으로써 제어된다. 일반적으로, 제어 포인트 차이가 아래의 제한 사항을 만족시키면, 어파인 움직임은 4x4 서브블록을 사용하고 있다(즉 4x4 어파인 모드). 그렇지 않으면, 이것은 8x8 서브블록을 사용하고 있다(8x8 어파인 모드). 6-파라미터 및 4-파라미터 모델에 대한 제한 사항은 다음과 같이 주어진다.
상이한 블록 크기(wxh)에 대한 제약을 유도하기 위하여, 제어 포인트들의 움직임 벡터 차이가 다음과 같이 정규화된다:
Figure pct00014
4-파라미터 어파인 모델에서는,
Figure pct00015
Figure pct00016
이 다음과 같이 설정된다:
Figure pct00017
그러므로,
Figure pct00018
Figure pct00019
(norm)이 다음과 같이 주어진다:
Figure pct00020
최악 상황의 대역폭을 보장하기 위한 제한 사항은 INTER_4x8 또는 INTER_8x4를 획득하는 것이다:
Figure pct00021
여기에서, 수학식 17의 좌측은 서브 어파인 블록들의 축소 또는 확대 수준을 나타내는 반면에, (3.25)는 3.25의 픽셀 천이를 나타낸다.
최악 상황의 대역폭을 보장하기 위한 제한 사항은 INTER_9x9를 획득하는 것이다
Figure pct00022
여기에서,
Figure pct00023
이다(128 및 16 은 각각 정규화 인자 및 움직임 벡터 정밀도를 나타낸다).
2.8 일반화된 양방향 예측 개선
일부 실시형태는 GBi에 대한 이득-복잡도 트레이드-오프를 개선했고, BMS2.1 안에 채택되었다. GBi는 CU-레벨 가중치가 있는 양방향 예측(Bi-prediction with CU-level weight; BCW)이라고도 불린다. BMS2.1 GBi는 양방향 예측 모드에서 L0 및 L1로부터의 예측기에 동일하지 않은 가중치를 적용한다. 인터 예측 모드에서, 동일한 가중치 쌍 (1/2, 1/2)을 포함하는 다수의 가중치 쌍이 레이트-왜곡 최적화(RDO)에 기반하여 평가되고, 선택된 가중치 쌍의 GBi 인덱스가 디코더에게 시그널링된다. 병합 모드에서, GBi 인덱스는 이웃하는 CU로부터 승계된다. BMS2.1 GBi에서, 양방향 예측 모드에서의 예측기 생성이 수학식 19에 표시된다.
Figure pct00024
여기에서, P GBi GBi의 최종 예측기이다. w 0 w 1 은 선택된 GBi 가중치 쌍이고 목록 0 (L0) 및 목록 1 (L1)의 예측기들에 각각 적용된다. RoundingOffset GBi shiftNum GBi 는 GBi 내의 최종 예측기를 정규화하기 위하여 사용된다. 지원되는 w 1 가중치 세트는 {-1/4, 3/8, 1/2, 5/8, 5/4}이고, 여기에서 다섯 개의 가중치는 하나의 동일한 가중치 쌍 및 네 개의 동일하지 않은 가중치 쌍에 대응한다. 혼합 이득(blending gain), 예를 들어 w 1 w 0 의 합은 1.0으로 고정된다. 그러므로, 대응하는 w 0 가중치 세트는 {5/4, 5/8, 1/2, 3/8, -1/4}이다. 가중치 쌍 선택은 CU-레벨에서 이루어진다.
지연이 적지 않은(non-low delay) 픽쳐의 경우, 가중치 세트 크기는 5로부터 3으로 감소되는데, 여기에서, w 1 가중치 세트는 {3/8, 1/2, 5/8}이고 w 0 가중치 세트는 {5/8, 1/2, 3/8}이다. 지연이 적지 않은 픽쳐에 대한 가중치 세트 크기 감소가 이러한 기여도(contribution) 내의 BMS2.1 GBi 및 모든 GBi 테스트에 적용된다.
일부 실시형태들에서는, GBi 성능을 더 개선하기 위하여, 다음의 변형이 BMS2.1에서의 현존하는 GBi 디자인 위에 적용된다.
2.8.1 GBi 인코더 버그 수정
GBi 인코딩 시간을 줄이기 위하여, 현재의 인코더 디자인에서는, 인코더가 4/8 와 같은 GBi 가중치로부터 추정된 단방향 예측 움직임 벡터를 저장하고, 이들을 다른 GBi 가중치의 단방향 예측 검색을 위해서 재사용할 것이다. 이러한 고속 인코딩 방법은 병진 움직임 모델 및 어파인 움직임 모델 양자 모두에 적용된다. VTM2.0에서는, 6-파라미터 어파인 모델이 4-파라미터 어파인 모델과 함께 채택되었다. BMS2.1 인코더는, GBi 가중치가 4/8 와 같으면 단방향 예측 어파인 MV들을 저장할 때 4-파라미터 어파인 모델과 6-파라미터 어파인 모델을 구별하지 않는다. 결과적으로, GBi 가중치 4/8을 사용한 인코딩 이후에, 4-파라미터 어파인 MV들이 6-파라미터 어파인 MV들로 덮어쓰기될 수 있다. 저장된 6-파라미터 어파인 MV들은 다른 GBi 가중치에 대한 4-파라미터 어파인 ME에 대해서 사용될 수 있고, 또는 저장된 4-파라미터 어파인 MV들이 6-파라미터 어파인 ME에 대해서 사용될 수 있다. 제안된 GBi 인코더 버그 수정은 4-파라미터 및 6-파라미터 어파인 MV 저장을 분리하기 위한 것이다. GBi 가중치가 4/8 와 같으면 인코더는 그러한 어파인 MV들을 어파인 모델 타입에 기반하여 저장하고, 대응하는 어파인 MV들을 다른 GBi 가중치에 대한 어파인 모델 타입에 기반하여 재사용한다.
2.8.2 GBi에 대한 CU 크기 제약
이러한 방법에서, GBi는 작은 CU들에 대해서 디스에이블된다. 인터 예측 모드에서는, 양방향 예측이 사용되고 CU 면적이 128 개의 루마 샘플보다 작으면, GBi가 임의의 시그널링이 없이 디스에이블된다.
2.8.3 GBi가 있는 병합 모드
병합 모드의 경우에, GBi 인덱스는 시그널링되지 않는다. 그 대신에, 이것은 자신이 병합되는 이웃하는 블록으로부터 승계된다. TMVP 후보가 선택되는 경우, GBi가 이러한 블록 내에서 턴오프된다.
2.8.4 GBi가 있는 어파인 예측
현재 블록이 어파인 예측으로 코딩된다면, GBi가 사용될 수 있다. 어파인 인터 모드의 경우, GBi 인덱스가 시그널링된다. 어파인 병합 모드의 경우, GBi 인덱스는 이것이 병합되는 이웃하는 블록으로부터 승계된다. 구성된 어파인 모델이 선택된다면, GBi는 이러한 블록 내에서 턴오프된다.
2.9 예시적인 인터-인트라 예측 모드(IIP)
인터 및 인트라 통합 예측(CIIP)이라고도 불리는 인터-인트라 예측 모드에서는, 다차원 (multi-가정) 예측이 하나의 인트라 예측 및 하나의 병합 인덱싱된 예측을 결합한다. 이러한 블록은 특별한 인터-코딩된 블록으로서 취급된다. 병합 CU에서는, 하나의 플래그가 참인 경우 인트라 후보 목록으로부터 하나의 인트라 모드를 선택하기 위해서, 해당 플래그가 병합 모드에 대해서 시그널링된다. 루마 성분의 경우, 인트라 후보 목록은 DC, 평면, 수평, 및 수직 모드를 포함하는 4 개의 인트라 예측 모드로부터 유도되고, 인트라 후보 목록의 크기는 블록 형상에 따라서 3 또는 4일 수 있다. CU 폭이 CU 높이의 두 배보다 크면, 수평 모드가 인트라 모드 목록 중에서 배타적으로 선택되고, CU 높이가 CU 폭의 두 배보다 크면, 수직 모드가 인트라 모드 목록으로부터 제거된다. 인트라 모드 인덱스에 의해 선택된 하나의 인트라 예측 모드 및 병합 인덱스에 의해 선택된 하나의 병합 인덱싱된 예측이 가중 평균(weighted average)을 사용하여 결합된다. 크로마 성분의 경우, 추가적인 시그널링이 없이 DM이 언제나 적용된다.
예측들을 조합하기 위한 가중치들은 다음과 같이 설명된다. DC 또는 평면 모드가 선택되거나, CB 폭 또는 높이가 4보다 작으면, 동일한 가중치들이 적용된다. 수평/수직 모드가 선택되는 경우, 4 이상의 CB 폭 및 높이를 가지는 CB들에 대해서는, 하나의 CB는 우선 네 개의 동일-면적 영역들로 분할된다. (w_intrai, w_interi)로 불리는 각각의 가중치 세트가 대응하는 영역에 적용될 것이고, 여기에서 i는 1 내지 4 이고, (w_intra1, w_inter1) = ((6, 2), (w_intra2, w_inter2) = (5, 3), (w_intra3, w_inter3) = (3, 5) 이며, (w_intra4, w_inter4) = (2, 6)이다. (w_intra1, w_inter1)은 레퍼런스 샘플에 가장 근접한 영역에 대한 것이고, (w_intra4, w_inter4)는 레퍼런스 샘플로부터 가장 멀리 떨어진 영역에 대한 것이다. 그러면, 두 개의 가중된 예측을 합산하고 3 비트만큼 우측으로 천이함으로써 결합된 예측이 계산될 수 있다. 더욱이, 예측기의 인트라 가정(intra hypothesis)에 대한 인트라 예측 모드가 그 다음의 이웃하는 CU들이 참조하도록 저장될 수 있다.
인트라 및 인터 예측 값들이 PIntra 및 Pinter이고, 가중 인자가 각각 w_intra 및 w_inter라고 가정한다. 위치 (x, y)에서의 예측 값은 (PIntra(x, y) * w_intra(x, y) + PInter(x, y) * w_inter(x, y)) >> N으로서 계산되는데, 여기에서 w_intra(x, y) + w_iner(x, y) = 2^N이다.
IIP-코딩된 블록 내에서의 인트라 예측 모드의 시그널링
인터-인트라 모드가 사용되는 경우, 네 개의 허용된 인트라-예측 모드들인 DC, 평면, 수평 및 수직 중 하나가 선택되고 시그널링된다. 세 개의 최고 가능성 모드(Most Probable Modes; MPMs)가 좌측 및 위의 이웃하는 블록들로부터 구성된다. 인트라-코딩된 이웃하는 블록 또는 IIP-코딩된 이웃하는 블록의 인트라-예측 모드는 하나의 MPM으로서 취급된다. 인트라-예측 모드가 네 개의 허용된 인트라-예측 모드들 중 하나가 아니면, 이것은 각도 차이에 따라서 수직 모드 또는 수평 모드로 반올림될 것이다. 이웃하는 블록들은 현재 블록과 같은 CTU 라인 안에 있어야 한다.
현재 블록의 폭 및 높이가 W 및 H라고 가정한다. W>2*H 또는 H>2*W라면, 세 개의 MPM들 중 하나만이 인터-인트라 모드에서 사용될 수 있다. 그렇지 않으면, 네 개의 유효한 인트라-예측 모드들 모두가 인터-인트라 모드에서 사용될 수 있다.
인터-인트라 모드에서의 인트라-예측 모드는 보통의 인트라-코딩된 블록에서의 인트라-예측 모드를 예측하기 위하여 사용될 수 없다는 것에 주의해야 한다.
인터-인트라 예측은 W*H>=64인 경우에만 사용될 수 있다.
2.10 예시적인 삼각 예측 모드
삼각 예측 모드(triangular prediction mode; TPM)의 개념은, 움직임 보상된 예측을 위하여 새로운 삼각 파티션을 도입하는 것이다. 도 7a 내지 도 7b 에 도시된 바와 같이, 이것은 하나의 CU를, 대각 방향 또는 반전 대각 방향 중 하나에서 두 개의 삼각 예측 유닛으로 분할한다. CU 내의 각각의 삼각 예측 유닛은, 자기 자신의 단방향 예측 움직임 벡터 및 단방향 예측 후보 목록으로부터 유도되는 레퍼런스 프레임 인덱스를 사용하여 인터-예측된다. 삼각 예측 유닛을 예측한 이후에, 대각 에지에 적응적 가중 프로세스가 수행된다. 그러면, 변환 및 양자화 프로세스가 전체 CU에 적용된다. 이러한 모드가 모드들을 스킵하고 병합하기 위해서만 적용된다는 것에 주의한다.
2.10.1 TPM을 위한 단방향 예측 후보 목록
단방향 예측 후보 목록은 다섯 개의 단방향 예측 움직임 벡터 후보들로 이루어진다. 이것은 도 8 에 도시된 바와 같이, 다섯 개의 공간적으로 이웃하는 블록들(1 내지 5) 및 두 개의 시간적으로 공동 위치되는 블록들(6 내지 7)을 포함하는 일곱 개의 이웃하는 블록들로부터 유도된다. 일곱 개의 이웃하는 블록들의 움직임 벡터가 수집되고 단방향 예측 움직임 벡터의 다음과 같은 순서에 따라서 단방향 예측 후보 목록 내에 추가된다: 양방향 예측 움직임 벡터의 L0 움직임 벡터, 양방향 예측 움직임 벡터의 L1 움직임 벡터, 및 양방향 예측 움직임 벡터의 L0 및 L1 움직임 벡터들의 평균화된 움직임 벡터. 후보의 개수가 다섯 개 미만이면, 제로 움직임 벡터가 목록에 추가된다. 이러한 목록에 추가되는 움직임 후보는 TPM 움직임 후보라고 불린다.
좀 더 구체적으로는, 다음의 단계들이 수반된다:
1) 임의의 프루닝 동작이 없이, A1, B1, B0, A0, B2, Col 및 Col2(도 8 의 블록 1 내지 블록 7에 대응함)로부터 움직임 후보들을 획득한다.
2) 변수를 다음과 같이 설정한다: numCurrMergeCand = 0.
3) A1, B1, B0, A0, B2, Col 및 Col2로부터 유도된 각각의 움직임 후보에 대하여 numCurrMergeCand는 5 미만이고, 움직임 후보가 단방향 예측이면(목록 0 또는 목록 1 중 하나로부터), 이것은 병합 목록에 추가되고 numCurrMergeCand는 1만큼 증가된다. 이러한 추가된 움직임 후보는 '원래의 단방향 예측된 후보(originally uni-predicted candidate)'라고 명명된다. 풀 프루닝(full pruning)이 적용된다.
4) A1, B1, B0, A0, B2, Col 및 Col2로부터 유도된 각각의 움직임 후보에 대하여 numCurrMergeCand는 5 미만이고, 움직임 후보가 양방향 예측이면, 목록 0로부터의 움직임 정보가 병합 목록에 추가되고(즉, 목록 0으로부터의 단방향 예측이 되도록 변경됨), numCurrMergeCand는 1만큼 증가된다. 이러한 추가된 움직임 후보는 '절단된 List0-예측된 후보(Truncated List0-predicted candidate)'라고 명명된다. 풀 프루닝(full pruning)이 적용된다.
5) A1, B1, B0, A0, B2, Col 및 Col2로부터 유도된 각각의 움직임 후보에 대하여 numCurrMergeCand는 5 미만이고, 움직임 후보가 양방향 예측이면, 목록 1로부터의 움직임 정보가 병합 목록에 추가되고(즉, 목록 1로부터의 단방향 예측이 되도록 변경됨), numCurrMergeCand는 1만큼 증가된다. 이러한 추가된 움직임 후보는 '절단된 List1-예측된 후보(Truncated List1-predicted candidate)'라고 명명된다. 풀 프루닝(full pruning)이 적용된다.
6) A1, B1, B0, A0, B2, Col 및 Col2로부터 유도된 각각의 움직임 후보에 대하여 numCurrMergeCand는 5 미만이고, 움직임 후보가 양방향 예측이면,
- 목록 0 레퍼런스 픽쳐의 슬라이스 양자화 파라미터(QP)가 목록 1 레퍼런스 픽쳐의 슬라이스 QP보다 작으면, 목록 1의 움직임 정보가 우선 목록 0 레퍼런스 픽쳐로 스케일링되고, 두 개의 MV들(하나는 원본 목록 0으로부터 온 것이고 다른 것은 목록 1로부터의 스케일링된 MV임)의 평균, 즉 목록 0 움직임 후보로부터의 평균화된 단방향 예측이 병합 목록에 추가되며, numCurrMergeCand는 1만큼 증가한다.
- 그렇지 않으면, 목록 0의 움직임 정보가 우선 목록 1 레퍼런스 픽쳐로 스케일링되고, 두 개의 MV들(하나는 원본 목록 1로부터 온 것이고 다른 것은 목록 0으로부터의 스케일링된 MV임)의 평균, 즉 목록 1 움직임 후보로부터의 평균화된 단방향 예측이 병합 목록에 추가되며, numCurrMergeCand는 1만큼 증가한다.
풀 프루닝(full pruning)이 적용된다.
7) numCurrMergeCand가 5 미만이면, 제로 움직임 벡터 후보가 추가된다.
2.11 VVC에서의 디코더-측 움직임 벡터 정제(Decoder-side Motion Vector Refinement; DMVR)
VVC에서의 DMVR의 경우, 목록 0 및 목록 1 사이의 MVD 미러링이 도 13 에 도시된 바와 같이 가정되고, 쌍방 매칭(bilateral matching)이 수행되어 MV들을 정제함으로써, 예를 들어 여러 MVD 후보들 중에서 최선의 MVD를 찾는다. 두 개의 레퍼런스 픽쳐 목록들에 대한 MV들을 MVL0(L0X, L0Y), 및 MVL1(L1X, L1Y)로 표시한다. 비용 함수(예를 들어, SAD)를 최소화할 수 있는, 목록 0에 대해 (MvdX, MvdY)로 표시된 MVD가 최선의 MVD로서 규정된다. SAD 함수의 경우, 이것은 목록 0 레퍼런스 픽쳐 내의 움직임 벡터 (L0X+MvdX, L0Y+MvdY)로써 유도된 목록 0 의 레퍼런스 블록 및 목록 1 레퍼런스 픽쳐 내의 움직임 벡터 (L1X-MvdX, L1Y-MvdY)로써 유도된 목록 1의 레퍼런스 블록 사이의 SAD로서 규정된다.
움직임 벡터 정제 프로세스는 두 번 반복될 수 있다. 각각의 반복 시에, 최대 6 개의 MVD들(정수-화소(integer-pel) 정밀도를 가짐)이 도 14 에 도시된 바와 같이 두 단계에서 점검될 수 있다. 제 1 단계에서는, MVD (0, 0), (-1, 0), (1, 0), (0, -1), (0, 1)이 점검된다. 제 2 단계에서는, MVD (-1, -1), (-1, 1), (1, -1) 또는 (1, 1) 중 하나가 선택되고 추가적으로 점검될 수 있다. 함수 Sad(x, y)가 MVD (x, y)의 SAD 값을 반환한다고 가정한다. (MvdX, MvdY) 표시되고 제 2 단계에서 점검된 MVD는 다음과 같이 판정된다:
MvdX = -1;
MvdY = -1;
If (Sad(1, 0) < Sad(-1, 0))
MvdX = 1;
If (Sad(0, 1) < Sad(0, -1))
MvdY = 1;
제 1 반복 시에, 시작 포인트는 시그널링된 MV이고, 제 2 반복 시에, 시작 포인트는 시그널링된 MV에 제 1 반복에서의 선택된 최선의 MVD를 더한 것이다. DMVR은, 하나의 레퍼런스 픽쳐가 선행하는 픽쳐이고 다른 레퍼런스 픽쳐가 후속하는 픽쳐이며, 두 개의 레퍼런스 픽쳐들이 현재 픽쳐로부터 동일한 픽쳐 순서 카운트 거리를 가지는 경우에만 적용된다.
DMVR의 프로세스를 더 단순화하기 위하여, 후속하는 주된 특징들이 일부 실시형태들에서 구현될 수 있다:
1. list0 및 list1 사이의 (0,0) 위치 SAD가 임계보다 작은 경우의 조기 종결(early termination).
2. list0 및 list1 사이의 SAD가 일부 위치에 대해서 제로인 경우의 조기 종결.
3. DMVR에 대한 블록 크기들이 다음을 만족함: W*H>=64 && H>=8, 여기에서 W 및 H는 블록의 폭 및 높이임.
4. 16*16보다 큰 CU 크기의 DMVR을 위하여, CU를 다수의 16x16 서브-블록들로 분할함. CU의 폭 또는 높이가 16보다 큰 경우에만, 이것은 수직 또는 수평 방향으로 분할된다.
5. 레퍼런스 블록 크기 (W+7)*(H+7) (루마의 경우).
6. 25 포인트 SAD-기반 정수-화소 검색(integer-pel search)(예를 들어 (+-) 2 정제 검색 범위, 단일 스테이지)
7. 이중선형-보간(Bilinear-interpolation)에 기반한 DMVR.
8. "파라메트릭 오차 표면 방정식(Parametric error surface equation)"에 기반한 서브-화소 정제. 이러한 프로시저는, 마지막 MV 정제 반복 시에, 최소 SAD 비용이 제로와 같지 않고 최선의 MVD가 (0, 0)인 경우에만 수행된다.
9. 레퍼런스 블록 패딩이 있는 루마/크로마 MC(필요한 경우).
10. 정제된 MV들은 MC 및 TMVP들을 위해서만 사용된다.
2.11.1 DMVR의 용도
다음 조건들이 모든 참이면, DMVR이 이네이블될 수 있다:
- SPS 내의 DMVR 이네이블 플래그(예를 들어, sps_dmvr_enabled_flag)가 1과 같다.
- TPM 플래그, 인터-어파인 플래그 및 서브블록 병합 플래그(ATMVP 또는 어파인 병합 중 하나임), MMVD 플래그가 모두 0 과 같다.
- 병합 플래그가 1과 같다.
- 현재 블록이 양방향 예측되고, 현재 픽쳐 및 목록 1 내의 레퍼런스 픽쳐 사이의 픽쳐 순서 카운트(Picture Order Count; POC) 거리가 목록 0 내의 레퍼런스 픽쳐 및 현재 픽쳐 사이의 POC 거리와 같다.
- 현재 CU 높이가 8 이상이다.
- 루마 샘플의 개수(CU 폭*높이)가 64 이상이다.
2.11.2 "파라메트릭 오차 표면 방정식"에 기반한 서브-화소(sub-pel) 정제
이러한 방법은 다음과 같이 요약된다:
1. 중심 위치가 주어진 반복에서의 최선의 비용 위치(cost position)인 경우에만 파라메트릭 오차 표면 근사(fit)가 계산된다.
2. 중심 위치 비용 및 중심으로부터의 (-1,0), (0,-1), (1,0) 및 (0,1) 위치에서의 비용이 다음 형태의 2-D 포물선 오차 표면 수학식을 근사화하기 위해서 사용된다
Figure pct00025
여기에서, (
Figure pct00026
는 최소 비용인 위치에 대응하고, C는 최소 비용 값에 대응한다. 5 개의 미지수가 있는 5 개의 수학식을 풀어냄으로써, (
Figure pct00027
은 다음과 같이 계산된다:
Figure pct00028
Figure pct00029
(
Figure pct00030
는 분할이 수행되는 정밀도(예를 들어 몫의 얼마나 많은 비트가 계산되는지)를 조절함으로써, 임의의 요구된 서브-픽셀 정밀도로 계산될 수 있다. 1/16-화소 정확도의 경우, 몫의 절대적 값 내의 4-비트만이 계산될 필요가 있고, 이것은 CU마다 요구되는 2 개의 분할의 고속 천이된 감산에 기반한 구현형태를 제공한다.
3. 계산된 (
Figure pct00031
가 정수 거리 정제 MV에 추가되어 서브-픽셀로 정확한 정제 델타 MV를 얻는다.
2.11.3 DMVR에서 요구되는 레퍼런스 샘플
크기 W * H인 블록에 대하여, 허용될 수 있는 최대 MVD 값이 +/- 오프셋이고(예를 들어, VVC에서는 2), 필터 크기가 filteSize (예를 들어, VVC에서는 루마의 경우에는 8이고 크로마의 경우에는 4임)라고 가정하면, (W + 2 * offSet + filterSize - 1) * (H + 2 * offSet + filterSize - 1) 개의 레퍼런스 샘플들이 요구된다. 메모리 대역폭을 감소시키기 위하여, 중앙의 (W + filterSize - 1) * (H + filterSize - 1) 개의 레퍼런스 샘플들만이 페치되고, 다른 픽셀들은 페치된 샘플들의 경계를 반복시킴으로써 생성된다. 8 * 8 블록에 대한 예가 도 15 에 도시되고, 15 * 15 개의 레퍼런스 샘플들이 페치되며, 페치된 샘플들의 경계가 반복되어 17 * 17 개의 영역을 생성한다.
움직임 벡터 정제 도중에, 이러한 레퍼런스 샘플들을 사용하여 이중선형 움직임 보상이 수행된다. 한편, 최종 움직임 보상도 이러한 레퍼런스 샘플들을 사용하여 수행된다.
2.12 상이한 블록 크기에 대한 대역폭 계산
현재의 8-탭 루마 보간 필터 및 4-탭 크로마 보간 필터에 기반하여, 각각의 블록 유닛에 대한 메모리 대역폭 (4:2:0 색상 포맷의 경우, 두 개의 M/2 x N/2 크로마 블록들이 있는 하나의 MxN 루마 블록)이 아래의 표 1에 작성된다.
블록 크기
MxN
요구되는 샘플/픽셀 단방향 양방향
4*4 (11*11+2*5*5)/(4*4) 10.688 21.375
4*8 (11*15+2*5*7)/(4*8) 7.344 14.688
4*16 (11*23+2*5*11)/(4*16) 5.672 11.344
4*32 (11*39+2*5*19)/(4*32) 4.836 9.672
4*64 (11*71+2*5*35)/(4*64) 4.418 8.836
4*128 (11*135+2*5*67)/(4*128) 4.209 8.418
8*8 (15*15+2*7*7)/(8*8) 5.047 10.094
8*16 (15*23+2*7*11)/(8*16) 3.898 7.797
8*32 (15*39+2*7*19)/(8*32) 3.324 6.648
8*64 (15*71+2*7*35)/(8*64) 3.037 6.074
8*128 (15*135+2*7*67)/(8*128) 2.894 5.787
표 1 예시적인 메모리 대역폭
이와 유사하게, 현재의 8-탭 루마 보간 필터 및 4-탭 크로마 보간 필터에 기반하여, 각각의 MxN 루마 블록 유닛에 대한 메모리 대역폭이 다음 표 2 에 작성된다.
블록 크기
MxN
요구되는 샘플/픽셀 단방향 양방향
4*4 (11*11)/(4*4) 7.563 15.125
4*8 (11*15)/(4*8) 5.156 10.313
4*16 (11*23)/(4*16) 3.953 7.906
4*32 (11*39)/(4*32) 3.352 6.703
4*64 (11*71)/(4*64) 3.051 6.102
4*128 (11*135)/(4*128) 2.900 5.801
8*8 (15*15)/(8*8) 3.516 7.031
8*16 (15*23)/(8*16) 2.695 5.391
8*32 (15*39)/(8*32) 2.285 4.570
8*64 (15*71)/(8*64) 2.080 4.160
8*128 (15*135)/(8*128) 1.978 3.955
표 2 예시적인 메모리 대역폭
그러므로, 색상 포맷과 무관하게, 각각의 블록 크기에 대한 대역폭 요구 사항은 내림 차순으로 다음이 된다:
4*4 Bi > 4*8 Bi > 4*16 Bi > 4*4 Uni > 8*8 Bi > 4*32 Bi > 4*64Bi > 4*128 Bi >8*16 Bi >4*8 Uni >8*32 Bi >….
2.12 VTM-3.0에서의 움직임 벡터 정밀도 이슈
VTM-3.0에서는, MV 정밀도가 저장된 1/16 루마 픽셀이다. MV가 시그널링되고 있으면, 가장 정밀한 정밀도는 1/4 루마 픽셀이다.
3. 개시된 실시형태에 의해 해결되는 문제점들의 예
1. 어파인 예측과 관련되는 대역폭 제어 방법들은 충분히 명확하지 않고, 더 높은 탄력성을 가져야 한다.
2. HEVC 디자인에서, 메모리 대역폭 요구 사항에 대한 최악의 경우는 8x8 양방향 예측이고, 하나의 코딩 유닛(CU)도 비대칭 예측 모드로 분할될 수 있으며, 예컨대 하나의 16x16이 4x16 및 12x16과 같은 크기의 두 개의 PU들로 분할될 수 있다는 것에 주의한다. VVC에서, 새로운 QTBT 파티션 구조에 기인하여, 하나의 CU는 4x16으로 설정될 수 있고, 양방향 예측이 이네이블될 수 있다. 양방향 예측된 4x16 CU는 양방향 예측된 8x8 CU와 비교할 때 더 높은 메모리 대역폭을 요구한다. 더 높은 대역폭을 요구하는 블록 크기(예컨대, 4×16 또는 16×4)를 어떻게 다뤄야 하는지는 알려져 있지 않다.
3. GBi와 같은 새로운 코딩 툴은 더 많은 라인 버퍼 이슈가 생기게 한다
4. 인터-인트라 모드는 인터-코딩된 블록 내에서 사용되는 인트라-예측 모드를 시그널링하기 위해서 더 많은 메모리 및 로직을 요구한다.
5. 1/16 루마 픽셀 MV 정밀도는 더 높은 메모리 저장소를 요구한다.
6. 하나의 8x8 블록 내의 네 개의 4x4 블록들을 보간하기 위하여, (8 + 7 + 1) * (8 + 7 + 1) 개의 레퍼런스 픽셀을 페치할 필요가 있고, 비-어파인/비-평면 모드 8x8 블록과 비교할 때 약 14% 더 많은 픽셀을 요구한다.
7. 하이브리드 인트라 및 인터 예측에서의 평균화 동작은 다른 코딩 툴, 예를 들어 가중된 예측, 로컬 조명 보상, OBMC 및 삼각 예측과 정렬되어야 할 것이고, 여기에서 오프셋은 천이가 이루어지기 이전에 추가된다.
4. 실시형태의 예들
본 명세서에 개시된 기법은 어파인 예측 및 다른 새로운 코딩 툴에서 요구되는 대역폭 및 라인 버퍼를 감소시킬 수 있다.
후술되는 설명은 일반적인 개념을 설명하기 위한 예로 여겨져야 하고, 좁은 의미로 해석되어서는 안된다. 더욱이, 실시형태들은 임의의 방식으로 결합될 수 있다.
후술되는 설명에서, 어파인 코딩된 현재 CU의 폭 및 높이는 각각 w 및 h이다. 보간 필터 탭(움직임 보상에서의 보간 필터 탭)은 N(예를 들어, 8, 6, 4, 또는 2)이고, 현재 블록 크기는 WxH라는 것이 가정된다.
어파인 예측을 위한 대역폭 제어
예 1: 어파인 코딩된 블록 내의 서브-블록 SB의 움직임 벡터가 MVSB라고 가정하면 ((MVx, MVy)로 표시됨), MVSB는 대표 움직임 벡터 MV'(MV'x, MV'y)에 상대적으로 특정 범위 내에 속할 수 있다.
일부 실시형태들에서는, MVx>=MV'x-DH0 이고 MVx<=MV'x+DH1 이며 MVy>=MV'y-DV0 이고 MVy<=MV'y+DV1 인데, 여기에서 MV' = (MV'x, MV'y)이다. 일부 실시형태들에서는, DH0은 DH1과 같거나 같지 않을 수 있다; DV0은 DV1과 같거나 같지 않을 수 있다. 일부 실시형태들에서는, DH0은 DV0 과 같거나 같지 않을 수 있다; DH1은 DV1과 같거나 같지 않을 수 있다. 일부 실시형태들에서는, DH0은 DH1과 같지 않을 수 있다; DV0은 DV1과 같지 않을 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 인코더로부터 디코더로, 예컨대 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU/PU에서 시그널링될 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 상이한 표준 프로파일/레벨/티어와 다르게 규정될 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 현재 블록의 폭 및 높이에 따라 달라질 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 현재 블록이 단방향 예측 또는 양방향 예측인지에 따라 달라질 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 서브-블록 SB의 위치에 따라 달라질 수 있다. 일부 실시형태들에서는, DH0, DH1, DV0 및 DV1은 MV'를 어떻게 얻느냐에 따라 달라질 수 있다.
일부 실시형태들에서는, MV'는 MV0, MV1 또는 MV2와 같은 하나의 CPMV일 수 있다.
일부 실시형태들에서는, MV'는 코너 서브-블록 중 하나에 대한 MC에서 사용되는 MV, 예컨대 도 3 의 MV0', MV1' 또는 MV2'일 수 있다.
일부 실시형태들에서는, MV'는 현재 블록의 어파인 모델로써, 현재 블록 안 또는 밖의 임의의 위치에 대해서 유도된 MV일 수 있다. 예를 들어, 이것은 현재 블록의 중심 위치(예를 들어, x=w/2 및 y=h/2)에 대해서 유도될 수 있다.
일부 실시형태들에서는, MV'는 현재 블록의 임의의 서브-블록, 예컨대 중심 서브-블록(도 3 에 도시되는 C0, C1, C2 또는 C3) 중 하나에 대한 MC에서 사용되는 MV일 수 있다.
일부 실시형태들에서는, MVSB가 제약을 만족시키지 않으면, MVSB는 유효한 범위로 클리핑되어야 한다. 일부 실시형태들에서는, 클리핑된 MVSB가 MV 버퍼 내에 저장되고, 이것은 다음 코딩된 블록의 MV들을 예측하기 위하여 사용될 것이다. 일부 실시형태들에서는, 클리핑되기 전의 MVSB는 MV 버퍼 내에 저장된다.
일부 실시형태들에서는, MVSB가 제약을 만족시키지 않으면, 해당 비트-스트림은 표준을 준수하지 않는 것으로 여겨진다(무효함). 일 예에서, MVSB가 제약을 만족시켜야 한다는 것이 표준에 규정될 수 있다. 이러한 제약은 임의의 제약을 준수하는 인코더에 의해서 준수되어야 하고, 그렇지 않으면 인코더는 표준을 준수하지 않는 것으로 간주된다.
일부 실시형태들에서는, MVSB 및 MV'는 시그널링 MV 정밀도(signaling MV precision)(예컨대, 쿼터-픽셀 정밀도)로 표현될 수 있다. 일부 실시형태들에서는, MVSB 및 MV'는 저장 MV 정밀도(storage MV precision)(예컨대, 1/16 정밀도)로 표현될 수 있다. 일부 실시형태들에서는, MVSB 및 MV'는 시그널링 또는 저장 정밀도와 다른 정밀도(예컨대, 정수 정밀도)로 반올림될 수 있다.
예 2: 어파인 코딩된 블록에 대하여, 해당 블록 내의 각각의 MxN(예컨대, 8x4,4x8 또는 8x8) 블록이 기본 유닛으로서 간주된다. MxN 블록 내의 모든 4x4 서브-블록 MV들은, 네 개의 4x4 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 K 픽셀을 넘지 않도록 제약된다.
일부 실시형태들에서는, 이러한 제약을 적용할지 그리고 어떻게 적용할지는 현재 블록이 양방향 예측 또는 단방향 예측을 적용하는지 여부에 따라 달라진다. 예를 들어, 이러한 제약은 단방향 예측이 아니라 양방향 예측에 대해서만 적용된다. 다른 예로서, M, N 및 K는 양방향 예측 및 단방향 예측에 대해서 다르다.
일부 실시형태들에서는, M, N 및 K는 현재 블록의 폭 및 높이에 따라서 달라질 수 있다.
일부 실시형태들에서는, 제약을 적용할지 여부는 인코더로부터 디코더로, 예컨대 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU/PU에서 시그널링될 수 있다. 예를 들어, 제약을 적용할지 여부를 표시하기 위하여 온/오프 플래그가 시그널링된다. 다른 예로서, M, N 및 K가 시그널링된다.
일부 실시형태들에서는, M, N 및 K는 상이한 표준 프로파일/레벨/티어에 대해서 다르게 규정될 수 있다.
예 3: 서브-블록의 폭 및 높이는 상이한 어파인 코딩된 블록들에 대해서 다르게 계산될 수 있다.
일부 실시형태들에서는, 계산 방법은 단방향 예측 및 양방향 예측이 있는 어파인 코딩된 블록에 대해서 다르다. 일 예에서, 서브-블록 크기는 단방향 예측이 있는 블록에 대해서 고정된다(예컨대, 4×4, 4×8 또는 8×4로 고정됨). 다른 예에서, 서브-블록 크기는 양방향 예측이 있는 블록들에 대해서 계산된다. 이러한 경우에, 서브-블록 크기는 양방향 예측된 두 개의 상이한 어파인 블록들에 대해서 다를 수 있다.
일부 실시형태들에서는, 양방향 예측된 어파인 블록에 대해서, 레퍼런스 목록 0으로부터의 서브-블록의 폭 및/또는 높이 및 레퍼런스 목록 1로부터의 서브-블록의 폭 및/또는 높이는 다를 수 있다. 일 예에서, 레퍼런스 목록 0으로부터의 서브-블록의 폭 및 높이가 Wsb0 및 Hsb0로서 각각 유도되고; 레퍼런스 목록 1로부터의 서브-블록의 폭 및 높이가 Wsb1 및 Hsb1로서 각각 유도된다고 가정한다. 그러면, 레퍼런스 목록 0 및 레퍼런스 목록 1 양자 모두에 대한 서브-블록의 최종 폭 및 높이가 Max(Wsb0, Wsb1) 및 Max(Hsb0, HSb1)로서 각각 계산된다.
일부 실시형태들에서는, 서브-블록의 계산된 폭 및 높이는 루마 성분에만 적용된다. 크로마 성분의 경우, 이것은 언제나, 예컨대 4×4 크로마 서브-블록으로 고정되고, 이것은 4:2:0 색상 포맷을 가지는 8×8 루마 블록에 대응한다.
일부 실시형태들에서는, 서브-블록의 폭 및 높이를 결정하기 위해서 MVx-MV'x 및 MVy - MV'y가 계산된다. (MVx, MVy) 및 (MV'x, MV'y)가 예 1 에서 규정된다.
일부 실시형태들에서는, 이러한 계산에 수반되는 MV들은 시그널링 MV 정밀도(signaling MV precision)(예컨대, 쿼터-픽셀 정밀도)로 표현될 수 있다. 일 예에서, 이러한 MV들은 저장 MV 정밀도(storage MV precision)(예컨대, 1/16 정밀도)로 표현될 수 있다. 다른 예로서, 이러한 MV들은 시그널링 또는 저장 정밀도와 다른 정밀도(예컨대, 정수 정밀도)로 반올림될 수 있다.
일부 실시형태들에서는, 서브-블록의 폭 및 높이를 결정하기 위한 계산에서 사용되는 임계는 인코더로부터 디코더로, 예컨대 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU/PU에서 시그널링될 수 있다.
일부 실시형태들에서는, 서브-블록의 폭 및 높이를 결정하기 위한 계산에서 사용되는 임계는 상이한 표준 프로파일/레벨/티어들에 대해서 다를 수 있다.
예 4: 하나의 W2xH2 서브-블록/블록 내의 W1xH1 개의 서브-블록들을 보간하기 위하여, (W2 + N - 1 - PW) * (H2 + N - 1 - PH) 개의 블록들이 우선 페치되고, 그 후에 예 6에서 설명된 픽셀 패딩 방법(예를 들어, 경계 픽셀 반복 방법)이 적용되어 더 큰 블록을 생성하며, 이제 이것이 W1xH1 개의 서브-블록들을 보간하기 위하여 사용된다. 예를 들어, W2=H2=8이고, W1=H1=4이며, PW=PH=0이다.
일부 실시형태들에서는, 임의의 W1xH1 서브-블록의 MV의 정수 부분은 W2xH2 서브-블록/블록 모두를 페치하기 위하여 사용될 수 있고, 상이한 경계 픽셀 반복 방법이 이에 상응하여 요구될 수 있다. 예를 들어, 모든 W1xH1 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 1 픽셀을 넘지 않으면, 상단-좌측의 W1xH1 서브-블록의 MV의 정수 부분이 W2xH2 서브-블록/블록 전체를 페치하기 위하여 사용된다. 레퍼런스 블록의 우측 및 하단 경계는 한 번 반복된다. 다른 예로서, 모든 W1xH1 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 1 픽셀을 넘지 않으면, 하단-우측의 W1xH1 서브-블록의 MV의 정수 부분이 W2xH2 서브-블록/블록 전체를 페치하기 위하여 사용된다. 레퍼런스 블록의 좌측 및 상단 경계는 한 번 반복된다.
일부 실시형태들에서는, 임의의 W1xH1 서브-블록의 MV가 우선 수정되고, 그 후에 전체 W2xH2 서브-블록/블록을 페치하기 위하여 사용될 수 있고, 상이한 경계 픽셀 반복 방법이 이에 상응하여 요구될 수 있다. 예를 들어, 모든 W1xH1 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 2 픽셀을 넘지 않는 경우, 상단-좌측 W1xH1 서브-블록의 MV의 정수 부분이 (1, 1)만큼 가산될 수 있고(여기에서 1은 1 정수 픽셀 거리를 의미함), 그 후에 전체 W2xH2 서브-블록/블록을 페치하기 위하여 사용된다. 이러한 경우에, 레퍼런스 블록의 좌측, 우측, 상단 및 하단 경계는 한 번 반복된다. 다른 예로서, 모든 W1xH1 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 2 픽셀을 넘지 않는 경우, 하단-우측 W1xH1 서브-블록의 MV의 정수 부분이 (-1, -1)만큼 가산될 수 있고(여기에서 1은 1 정수 픽셀 거리를 의미함), 그 후에 전체 W2xH2 서브-블록/블록을 페치하기 위하여 사용된다. 이러한 경우에, 레퍼런스 블록의 좌측, 우측, 상단 및 하단 경계는 한 번 반복된다.
특정 블록 크기에 대한 대역폭 제어
예 5: 현재 블록의 w 및 h가 다음과 같은 조건들 중 하나 이상을 만족시키면, 양방향 예측이 허용되지 않는다.
A. w는 T1과 같고 h가 T2 와 같거나, h가 T1과 같고 w가 T2 와 같다. 일 예에서, T1 = 4이고 T2 = 16이다.
B. w는 T1과 같고 h는 T2보다 크지 않거나, h가 T1과 같고 w는 T2보다 크지 않다. 일 예에서, T1 = 4이고 T2 = 16이다.
C. w는 T1보다 크지 않고 h가 T2보다 크지 않거나, h가 T1보다 크지 않고 w가 T2보다 크지 않다. 일 예에서, T1 = 8이고 T2 = 8이다. 다른 예에서, T1==8, T2==4이다. 또 다른 예에서, T1==4 및 T2==4이다.
일부 실시형태들에서는, 양방향 예측은 4x8 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 8x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x16 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 16x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x8, 8x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x16, 16x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x8, 16x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x16, 8x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4xN 블록들에 대해서 디스에이블될 수 있고, 예를 들어 N <= 16 이다. 일부 실시형태들에서는, 양방향 예측은 Nx4 블록들에 대해서 디스에이블될 수 있고, 예를 들어 N <= 16 이다. 일부 실시형태들에서는, 양방향 예측은 8xN 블록들에 대해서 디스에이블될 수 있고, 예를 들어 N <= 16 이다. 일부 실시형태들에서는, 양방향 예측은 Nx8 블록들에 대해서 디스에이블될 수 있고, 예를 들어 N <= 16 이다. 일부 실시형태들에서는, 양방향 예측은 4x8, 8x4, 4x16 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x8, 8x4, 16x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 8x4, 4x16, 16x4 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 양방향 예측은 4x8, 8x4, 4x16, 16x4 블록들에 대해서 디스에이블될 수 있다.
일부 실시형태들에서는, 본 명세서에서 개시되는 블록 크기는 루마 성분과 같은 하나의 색성분을 가리킬 수 있고, 양방향 예측이 디스에이블되는지 여부에 대한 결정은 모든 색성분에 적용될 수 있다. 예를 들어, 양방향 예측이 어떤 블록의 루마 성분의 블록 크기에 따라서 디스에이블되면, 양방향 예측도 다른 색성분의 대응하는 블록에 대해서 디스에이블될 것이다. 일부 실시형태들에서는, 본 명세서에서 개시되는 블록 크기는 루마 성분과 같은 하나의 색성분을 가리킬 수 있고, 양방향 예측이 디스에이블되는지 여부에 대한 결정은 해당 색성분에만 적용될 수 있다.
일부 실시형태들에서는, 양방향 예측이 어떤 블록에 대해서 디스에이블되고, 선택된 병합 후보가 양방향 예측된다면, 병합 후보의 레퍼런스 목록 0 또는 레퍼런스 목록 1로부터의 오직 하나의 MV만이 해당 블록에 할당된다.
일부 실시형태들에서는, 양방향 예측이 어떤 블록에 대하여 디스에이블되면, 삼각 예측 모드(TPM)는 해당 블록에 대하여 허용되지 않는다.
일부 실시형태들에서는, 예측 방향(목록 0/1로부터의 단방향 예측, 양방향 예측)을 어떻게 시그널링할지는 블록 차원에 따라서 달라질 수 있다. 일 예에서, 1) 블록 폭 * 블록 높이 < 64 이거나 2) 블록 폭 * 블록 높이 = 64 이지만 폭이 높이와 같지 않는 경우에, 목록 0/1로부터의 단방향 예측의 표시가 시그널링될 수 있다. 다른 예로서, 1) 블록 폭 * 블록 높이 > 64 이거나 2) 블록 폭 * 블록 높이 = 64 이고 폭이 높이와 같은 경우에, 목록 0/1로부터의 단방향 예측 또는 양방향 예측의 표시가 시그널링될 수 있다.
일부 실시형태들에서는, 4x4 블록들에 대해서는 단방향 예측 및 양방향 예측 양자 모두가 디스에이블될 수 있다. 일부 실시형태들에서는, 이것은 어파인 코딩된 블록들에 대해서 디스에이블될 수 있다. 또는, 이것은 비-어파인 코딩된 블록들에 대해서 디스에이블될 수 있다. 일부 실시형태들에서는, 8x8 블록에 대한 사중 트리 분할, 8x4 또는 4x8 블록에 대한 이중 트리 분할, 4x16 또는 16x4 블록에 대한 삼중 트리 분할의 표시는 스킵될 수 있다. 일부 실시형태들에서는, 4x4 블록은 인트라-블록으로서 코딩되어야 한다. 일부 실시형태들에서는, 4x4 블록에 대한 MV는 정수-정밀도를 가져야 한다. 예를 들어, 4x4 블록에 대한 IMV 플래그는 1이어야 한다. 다른 예로서, 4x4 블록에 대한 MV는 정수-정밀도로 반올림되어야 한다.
일부 실시형태들에서는, 양방향 예측이 허용된다. 그러나, 보간 필터 탭이 N이라고 가정하면, (W + N - 1) * (H + N - 1) 개의 레퍼런스 픽셀을 페치하는 대신에, (W + N - 1 - PW) * (W + N - 1 - PH) 개의 레퍼런스 픽셀들만이 페치된다. 한편, 레퍼런스 블록 경계(상단, 좌측, 하단 및 우측 경계)에 있는 픽셀들은 반복되어 도 9 에 도시된 바와 같은 (W + N - 1) * (H + N - 1) 블록을 생성하고, 이것이 최종 보간을 위하여 사용된다. 일부 실시형태들에서는, PH는 제로이고, 좌측 및/또는 우측 경계만이 반복된다. 일부 실시형태들에서는, PW는 제로이고, 상단 및/또는 하단 경계만이 반복된다. 일부 실시형태들에서는, PW 및 PH 양자 모두는 제로보다 크고, 우선 좌측 및/또는 우측 경계가 반복되며, 그 후에 상단 및/또는 하단 경계가 반복된다. 일부 실시형태들에서는, PW 및 PH 양자 모두는 제로보다 크고, 우선 상단 및/또는 하단 경계가 반복되며, 그 후에 좌측 및 우측 경계가 반복된다. 일부 실시형태들에서는, 좌측 경계는 M1 회 반복되고, 우측 경계는 PW - M1 회 반복된다. 일부 실시형태들에서는, 상단 경계는 M2 회 반복되고, 하단 경계는 PH - M2 회 반복된다. 일부 실시형태들에서는, 이러한 경계 픽셀 반복 방법은 모든 레퍼런스 블록 중 일부 또는 전부에 적용될 수 있다. 일부 실시형태들에서는, PW 및 PH는 Y, Cb 및 Cr과 같은 상이한 색성분에 대해서 다를 수 있다.
도 9는 보간 이전의 레퍼런스 블록의 반복 경계 픽셀(repeat boundary pixel)의 일 예를 도시한다.
예 6: 일부 실시형태들에서는, (W + N - 1 - PW) * (W + N - 1 - PH) 개의 레퍼런스 픽셀들((W + N - 1) * (H + N - 1) 개의 레퍼런스 픽셀들 대신에)이 WxH 블록의 움직임 보상을 위해서 페치될 수 있다. 범위 (W + N - 1 - PW) * (W + N - 1 - PH) 밖이지만 범위 (W + N - 1) * (H + N - 1) 안에 있는 샘플들이 보간 프로세스를 수행하기 위해서 패딩된다. 하나의 패딩 방법에서, 레퍼런스 블록 경계(상단, 좌측, 하단 및 우측 경계)에 있는 픽셀들은 반복되어 도 11 에 도시된 바와 같은 (W + N - 1) * (H + N - 1) 블록을 생성하고, 이것이 최종 보간을 위하여 사용된다.
일부 실시형태들에서는, PH는 제로이고, 좌측 및/또는 우측 경계만이 반복된다.
일부 실시형태들에서는, PW는 제로이고, 상단 또는/및 하단 경계만이 반복된다.
일부 실시형태들에서는, PW 및 PH 양자 모두는 제로보다 크고, 우선 좌측 및/또는 우측 경계가 반복되며, 그 후에 상단 및/또는 하단 경계가 반복된다.
일부 실시형태들에서는, PW 및 PH 양자 모두는 제로보다 크고, 우선 상단 및/또는 하단 경계가 반복되며, 그 후에 좌측 및 우측 경계가 반복된다.
일부 실시형태들에서는, 좌측 경계는 M1 회 반복되고, 우측 경계는 PW - M1 회 반복된다.
일부 실시형태들에서는, 상단 경계는 M2 회 반복되고, 하단 경계는 PH - M2 회 반복된다.
일부 실시형태들에서는, 이러한 경계 픽셀 반복 방법은 모든 레퍼런스 블록 중 일부 또는 전부에 적용될 수 있다.
일부 실시형태들에서는, PW 및 PH는 Y, Cb 및 Cr과 같은 상이한 색성분에 대해서 다를 수 있다.
일부 실시형태들에서는, PW 및 PH는 상이한 블록 크기 또는 형상에 대해서 다를 수 있다.
일부 실시형태들에서는, PW 및 PH는 단방향 예측 및 양방향 예측에 대해서 다를 수 있다.
일부 실시형태들에서는, 패딩은 어파인 모드에서 수행되지 않을 수 있다.
일부 실시형태들에서, 범위 (W + N - 1 - PW) * (W + N - 1 - PH) 밖이지만 범위 (W + N - 1) * (H + N - 1) 안에 있는 샘플들이 단일 값이 되도록 설정된다. 일부 실시형태들에서는, 단일 값은 1<<(BD-1)인데, 여기에서 BD는 샘플의 비트-깊이, 예컨대 8 또는 10이다. 일부 실시형태들에서는, 단일 값은 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU 행/CTU/CU/PU 내에서 인코더로부터 디코더로 시그널링된다. 일부 실시형태들에서는, 단일 값은 범위 (W + N - 1 - PW) * (W + N - 1 - PH) 안의 샘플들로부터 유도된다.
예 7: DMVR에서 (W + filterSize - 1) * (H + filterSize - 1) 개의 레퍼런스 샘플을 페치하는 대신에, (W + filterSize - 1 - PW) * (H + filterSize - 1 - PH) 개의 레퍼런스 샘플들이 페치될 수 있고, 요구된 다른 모든 샘플들은 페치된 레퍼런스 샘플들의 경계를 반복시킴으로써 생성될 수 있으며, 여기에서 PW >= 0 이고 PH >= 0 이다.
일부 실시형태들에서는, 예 6에서 제안된 방법이 비-페치된 샘플들을 패딩하기 위해서 사용될 수 있다.
일부 실시형태들에서는, DMVR의 최종 움직임 보상에서, 패딩이 다시 수행되지 않을 수도 있다.
일부 실시형태들에서는, 전술된 방법을 적용할지 여부는 블록 차원에 따라 달라질 수 있다.
예 8: inter_pred_idc의 시그널링 방법은 w 및 h가 예 5 에서의 조건을 만족시키는지 여부에 따라 달라질 수 있다. 하나의 예가 다음 표 3 에 표시된다:
inter_pred_idc inter_pred_idc의 명칭
!((w==T1 && h==T2) ||(h==T1 && w==T2)) (w==T1 && h==T2) ||(h==T1 && w==T2)
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
다른 예가 다음 표 4 에 표시된다:
inter_pred_idc inter_pred_idc의 명칭
!((w==T1 && h<=T2) ||(h==T1 && w<=T2)) (w==T1 && h<=T2) ||(h==T1 && w<=T2)
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
또 다른 예가 다음 표 5 에 표시된다:
inter_pred_idc inter_pred_idc의 명칭
!((w<=T1 && h<=T2) ||(h<=T1 && w<=T2)) (w<=T1 && h<=T2) ||(h<=T1 && w<=T2)
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
예 9: 병합 후보 목록 구성 프로세스는 w 및 h가 예 4의 조건을 만족시키는지 여부에 따라서 달라질 수 있다. 다음 실시형태들은 w 및 h가 조건들을 만족시키는 경우를 기술한다.
일부 실시형태들에서는, 하나의 병합 후보가 양방향 예측을 사용하면, 레퍼런스 목록 0로부터의 오직 예측만이 보유되고, 병합 후보는 레퍼런스 목록 0을 참조하는 단방향 예측으로서 취급된다.
일부 실시형태들에서는, 하나의 병합 후보가 양방향 예측을 사용하면, 레퍼런스 목록 1로부터의 오직 예측만이 보유되고, 병합 후보는 레퍼런스 목록 1을 참조하는 단방향 예측으로서 취급된다.
일부 실시형태들에서는, 하나의 병합 후보가 양방향 예측을 사용하면, 해당 후보는 이용불가능한 것으로 취급된다. 즉, 이러한 병합 후보는 병합 목록으로부터 제거된다.
일부 실시형태들에서는, 삼각 예측 모드에 대한 병합 후보 목록 구성 프로세스가 그 대신에 사용된다.
예 10: 코딩 트리 분할 프로세스는, 분할 이후의 자식 CU의 폭 및 높이가 예 5의 조건을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 분할 이후의 자식 CU의 폭 및 높이가 예 5의 조건을 만족시키면, 분할은 허용되지 않는다. 일부 실시형태들에서는, 코딩 트리 분할의 시그널링은 한 종류의 분할이 허용되는지 여부에 따라서 달라질 수 있다. 일 예에서, 한 종류의 분할이 허용되지 않는다면, 해당 분할을 나타내는 코드워드는 생략된다.
예 11: 스킵 플래그 및/또는 인트라 블록 복제(Intra Block Copy; IBC) 플래그의 시그널링은 블록의 폭 및/또는 높이가 어떤 조건(예를 들어, 예 5 에서 언급된 조건들)을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 조건은 루마 블록이 X 개보다 많은 샘플을 보유하지 않는 것이다. 예를 들어 X = 16이다;
일부 실시형태들에서는, 조건은 루마 블록이 X 개의 샘플을 보유하는 것이다. 예를 들어 X = 16이다.
일부 실시형태들에서는, 조건은 루마 블록의 폭 및 높이 양자 모두가 X와 같은 것이다. 예를 들어 X = 4이다;
일부 실시형태들에서는, 위의 조건들 중 하나 또는 일부가 참이면, 이러한 블록에 대해서 인터 모드 및/또는 IBC 모드가 허용되지 않는다.
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드가 허용되지 않으면, 스킵 플래그는 이것에 대해서 시그널링되지 않을 수도 있다. 또는, 더 나아가 스킵 플래그는 거짓인 것으로 추론될 수 있다.
일부 실시형태들에서는, 어떤 블록에 대해서 인터 모드 및 IBC 모드가 허용되지 않으면, 스킵 플래그는 이것에 대해서 시그널링되지 않을 수도 있고, 묵시적으로 거짓이 되도록 유도될 수 있다(예를 들어, 해당 블록은 비-스킵 모드에서 코딩되도록 유도된다).
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드가 허용되지 않지만 해당 블록에 대해서 IBC 모드가 허용되면, 스킵 플래그는 여전히 시그널링될 수 있다. 일부 실시형태들에서는, 해당 블록이 스킵 모드에서 코딩된다면 IBC 모드 시그널링되지 않을 수 있고, IBC 플래그는 묵시적으로 참이 되도록 유도된다(예를 들어, 해당 블록은 IBC 모드에서 코딩되도록 유도된다).
예 12: 예측 모드의 시그널링은 블록의 폭 및/또는 높이가 어떤 조건(예를 들어, 예 5 에서 언급된 조건들)을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 조건은 루마 블록이 X 개보다 많은 샘플을 보유하지 않는 것이고, 예를 들어 X = 16 이다.
일부 실시형태들에서는, 조건은 루마 블록이 X 개의 샘플을 보유하는 것이고, 예를 들어 X = 16 이다.
일부 실시형태들에서는, 조건은 루마 블록의 폭 및 높이 양자 모두가 X와 같은 것이고, 예를 들어 X = 4 이다.
일부 실시형태들에서는, 위의 조건들 중 하나 또는 일부가 참이면, 이러한 블록에 대해서 인터 모드 및/또는 IBC 모드가 허용되지 않는다.
일부 실시형태들에서는, 특정 모드의 표시의 시그널링이 스킵될 수 있다.
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드 및 IBC 모드가 허용되지 않으면, 인터 및 IBC 모드의 표시의 시그널링이 스킵되고, 이것이 인트라 모드인지 또는 팔레트 모드인지 여부와 같은, 남아 있는 허용된 모드들은 여전히 시그널링될 수 있다.
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드 및 IBC 모드가 허용되지 않으면, 예측 모드는 시그널링되지 않을 수도 있다. 또는, 더 나아가, 예측 모드는 묵시적으로 인트라 모드가 되도록 유도될 수 있다.
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드가 허용되지 않으면, 인터 모드의 표시의 시그널링이 스킵되고, 이것이 인트라 모드인지 또는 IBC 모드인지 여부와 같은, 남아 있는 허용된 모드들은 여전히 시그널링될 수 있다. 또는, 이것이 인트라 모드인지 또는 IBC 모드인지 또는 팔레트 모드인지와 같은, 남아 있는 허용된 모드들은 여전히 시그널링될 수 있다.
일부 실시형태들에서는, 어떤 블록에 대하여 인터 모드가 허용되지 않지만 IBC 모드 및 인트라 모드가 해당 블록에 대하여 허용되면, 해당 블록이 IBC 모드에서 코딩되는지 여부를 표시하기 위해서 IBC 플래그가 시그널링될 수 있다. 또는, 더 나아가, 예측 모드는 시그널링되지 않을 수도 있다.
예 13: 삼각형 모드의 시그널링은 블록의 폭 및/또는 높이가 어떤 조건(예를 들어, 예 5 에서 언급된 조건들)을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 조건은 루마 블록 크기가 몇 가지 특정한 크기들 중 하나인 것이다. 예를 들어, 특정한 크기는 4x16 및/또는 16x4를 포함할 수 있다.
일부 실시형태들에서는, 위의 조건이 참인 경우, 삼각형 모드는 허용되지 않을 수 있고, 현재 블록이 삼각형 모드에서 코딩되는지 여부를 표시하는 플래그가 시그널링되지 않을 수 있으며, 거짓이 되도록 유도될 수 있다.
예 14: 인터 예측 방향의 시그널링은 블록의 폭 및/또는 높이가 어떤 조건(예를 들어, 예 5 에서 언급된 조건들)을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 조건은 루마 블록 크기가 몇 가지 특정한 크기들 중 하나인 것이다. 예를 들어, 특정한 크기는 8x4 및/또는 4x8 및/또는 4x16 및/또는 16x4를 포함할 수 있다.
일부 실시형태들에서는, 위의 조건이 참이면, 해당 블록은 오직 단방향으로 예측되고, 및 현재 블록이 양방향 예측되는지 여부를 표시하는 플래그가 시그널링되지 않을 수 있으며, 거짓이 되도록 유도될 수 있다.
예 15: SMVD(symmetric MVD)의 시그널링은 블록의 폭 및/또는 높이가 어떤 조건(예를 들어, 예 5 에서 언급된 조건들)을 만족시키는지 여부에 따라서 달라질 수 있다.
일부 실시형태들에서는, 조건은 루마 블록 크기가 몇 가지 특정한 크기들 중 하나인 것이다. 일부 실시형태들에서는, 조건은 블록 크기가 32 개보다 많은 샘플을 가지지 않는 것으로서 규정된다. 일부 실시형태들에서는, 조건은 블록 크기가 4x8 또는 8x4인지로서 규정된다. 일부 실시형태들에서는, 조건은 블록 크기가 4x4, 4x8 또는 8x4인지로서 규정된다. 일부 실시형태들에서는, 특정한 크기는 8x4 및/또는 4x8 및/또는 4x16 및/또는 16x4를 포함할 수 있다.
일부 실시형태들에서는, 어떤 조건들이 참이면, SMVD의 사용의 표시(예컨대, SMVD 플래그)가 시그널링되지 않을 수 있고, 거짓이 되도록 유도될 수 있다. 예를 들어, 블록은 단방향으로 예측되도록 설정될 수 있다.
일부 실시형태들에서는, 어떤 조건들이 참이면, SMVD의 사용의 표시(예컨대, SMVD 플래그)는 여전히 시그널링될 수 있지만, 목록 0 또는 목록 1 움직임 정보만이 움직임 보상 프로세스에서 활용될 수 있다.
예 16: 움직임 벡터(정규 병합 모드, ATMVP 모드, MMVD 병합 모드, MMVD 스킵 모드 등에서 유도된 움직임 벡터와 같은 움직임 벡터) 또는 IBC를 위해 사용되는 블록 벡터는 블록의 폭 및/또는 높이가 어떤 조건을 만족시키는지 여부에 따라서 변경될 수 있다.
일부 실시형태들에서는, 조건은 루마 블록 크기가 몇 가지 특정한 크기들 중 하나인 것이다. 예를 들어, 특정한 크기는 8x4 및/또는 4x8 및/또는 4x16 및/또는 16x4를 포함할 수 있다.
일부 실시형태들에서는, 위의 조건이 참인 경우, 해당 블록의 움직임 벡터 또는 블록 벡터는, 유도된 움직임 정보가 양방향 예측이면 단방향성 움직임 벡터로 변경될 수 있다(예를 들어, 일부 오프셋과 함께 이웃하는 블록으로부터 승계됨). 이러한 프로세스는 변환 프로세스라고 불리고, 최종 단방향성 움직임 벡터는 '변환된 단방향성(converted uni-directional)' 움직임 벡터라고 명명된다. 일부 실시형태들에서는, 레퍼런스 픽쳐 목록 X (예를 들어, X는 0 또는 1 임)의 움직임 정보는 유지될 수 있고, 이러한 움직임 정보 및 목록 Y (Y는 1 - X 임)의 움직임 정보는 버려질 수 있다. 일부 실시형태들에서는, 레퍼런스 픽쳐 목록 X (예를 들어, X는 0 또는 1 임)의 움직임 정보 및 목록 Y (Y는 1-X 임)의 움직임 정보는 목록 X로의 새로운 움직임 후보 포인트를 유도하기 위해서 공동으로 활용될 수 있다. 일 예에서, 새로운 움직임 후보의 움직임 벡터는 두 개의 레퍼런스 픽쳐 목록들의 평균화된 움직임 벡터일 수 있다. 다른 예로서, 목록 Y의 움직임 정보는 우선 목록 X에 맞게 스케일링될 수 있다. 그러면, 새로운 움직임 후보의 움직임 벡터는 두 개의 레퍼런스 픽쳐 목록들의 평균화된 움직임 벡터일 수 있다. 일부 실시형태들에서는, 예측 방향 X에서의 움직임 벡터는 사용되지 않을 수 있고(예를 들어, 예측 방향 X에서의 움직임 벡터는 (0, 0)으로 변경되고, 예측 방향 X에서의 레퍼런스 인덱스는 -1 로 변경됨), 예측 방향은 1 - X로 변경될 수 있으며, X = 0 이거나 1 이다. 일부 실시형태들에서는, 변환된 단방향성 움직임 벡터들은 HMVP 룩업 테이블을 업데이트하기 위하여 사용될 수 있다. 일부 실시형태들에서는, 유도된 양방향성 움직임 정보, 예를 들어 단방향성 MV들로 변환되기 전의 양방향성 MV들은 HMVP 룩업 테이블을 업데이트하기 위하여 사용될 수 있다. 일부 실시형태들에서는, 변환된 단방향성 움직임 벡터들이 저장될 수 있고, 후속하는 코딩된 블록, TMVP, 디블로킹 등의 움직임 예측을 위해서 사용될 수 있다. 일부 실시형태들에서는, 유도된 양방향성 움직임 정보, 예를 들어 단방향성 MV들로 변환되기 전의 양방향성 MV들이 저장될 수 있고, 후속하는 코딩된 블록, TMVP, 디블로킹 등의 움직임 예측을 위해서 사용될 수 있다. 일부 실시형태들에서는, 변환된 단방향성 움직임 벡터들은 움직임 정제를 위해서 사용될 수 있다. 일부 실시형태들에서는, 유도된 양방향성 움직임 정보는, 예컨대 광학적 흐름 방법을 사용하는 움직임 정제 및/또는 샘플 정제를 위해서 사용될 수 있다. 일부 실시형태들에서는, 유도된 양방향성 움직임 정보에 따라서 생성된 예측 블록들은 우선 정제될 수 있고, 그 이후에 오직 하나의 예측 블록이 하나의 블록의 최종 예측 및/또는 복원 블록을 유도하기 위하여 활용될 수 있다.
일부 실시형태들에서는, 어떤 조건들이 참인 경우에, (양방향 예측된) 움직임 벡터들은 MMVD에서의 베이스 병합 후보로서 사용되기 전에 단방향성 움직임 벡터로 변환될 수 있다.
일부 실시형태들에서는, 어떤 조건들이 참인 경우에, (예를 들어, 블록의 차원이 상술한 예 5에서 특정된 조건을 만족하는 경우)(양방향 예측된) 움직임 벡터들은 병합 목록 내에 삽입되기 전에 단방향성 움직임 벡터로 변환될 수 있다.
일부 실시형태들에서는, 변환된 단방향성 움직임 벡터들은 오직 레퍼런스 목록 0만으로부터 온 것일 수 있다. 일부 실시형태들에서는, 현재 슬라이스/타일 그룹/픽쳐가 양방향 예측되는 경우에, 변환된 단방향성 움직임 벡터들은 레퍼런스 목록 0 또는 목록 1로부터 온 것일 수 있다. 일부 실시형태들에서는, 현재 슬라이스/타일 그룹/픽쳐가 양방향 예측되는 경우에, 레퍼런스 목록 0 및 목록 1 로부터의 변환된 단방향성 움직임 벡터들은 병합 목록 및/또는 MMVD 베이스 병합 후보 목록 내에 인터리빙될 수 있다.
일부 실시형태들에서는, 움직임 정보를 단방향성 움직임 벡터로 어떻게 변환하는지는 레퍼런스 픽쳐들에 따라서 달라질 수 있다. 일부 실시형태들에서는, 하나의 비디오 데이터 유닛의 모든 레퍼런스 픽쳐(예컨대, 타일/타일 그룹)가 디스플레이 순서에서 과거의 픽쳐라면, 목록 1 움직임 정보가 활용될 수 있다. 일부 실시형태들에서는, 하나의 비디오 데이터 유닛의 레퍼런스 픽쳐(예컨대, 타일/타일 그룹) 중 적어도 하나가 과거의 픽쳐이고, 적어도 하나가 디스플레이 순서에서 미래의 픽쳐이면, 목록 0 움직임 정보가 활용될 수 있다. 일부 실시형태들에서는, 움직임 정보를 단방향성 움직임 벡터로 어떻게 변환하는지는 저지연 점검 플래그에 따라서 달라질 수 있다.
일부 실시형태들에서는, 변환 프로세스는 움직임 보상 프로세스 직전에 호출될 수 있다. 일부 실시형태들에서는, 변환 프로세스는 움직임 후보 목록(예를 들어, 병합 목록) 구성 프로세스 직후에 호출될 수 있다. 일부 실시형태들에서는, 변환 프로세스는 MMVD 프로세스에서의 MVD 가산 프로세스(adding MVD process)를 호출하기 전에 호출될 수 있다. 즉, MVD 가산 프로세스는 양방향 예측 대신에 단방향 예측의 디자인을 따른다. 일부 실시형태들에서는, 변환 프로세스는 PROF 프로세스에서의 샘플 정제 프로세스를 호출하기 전에 호출될 수 있다. 즉, MVD 가산 프로세스는 양방향 예측 대신에 단방향 예측의 디자인을 따른다. 일부 실시형태들에서는, 변환 프로세스는 BIO(BDOF라고도 알려져 있음) 프로세스를 호출하기 전에 호출될 수 있다. 즉, 일부 경우에, BIO는 단방향 예측을 변환된 바 있기 때문에 디스에이블될 수 있다. 일부 실시형태들에서는, 변환 프로세스는 DMVR 프로세스를 호출하기 전에 호출될 수 있다. 즉, 일부 경우에, DMVR은 단방향 예측을 변환된 바 있기 때문에 디스에이블될 수 있다.
예 17: 일부 실시형태들에서는, 움직임 후보 목록을 어떻게 생성할지는 블록 차원에 따라서 달라질 수 있다. 예를 들어, 예 5에서 상술한 바와 같다.
일부 실시형태들에서는, 어떤 블록 차원에 대해서, 공간적 블록 및/또는 시간적 블록 및/또는 HMVP로부터 유도된 모든 움직임 후보 및/또는 다른 종류의 움직임 후보들은 단방향 예측되도록 제한될 수 있다.
일부 실시형태들에서는, 어떤 블록 차원에 대하여, 공간적 블록 및/또는 시간적 블록 및/또는 HMVP로부터 유도된 하나의 움직임 후보 및/또는 다른 종류의 움직임 후보는 양방향 예측이면, 이것은 후보 목록에 추가되기 전에 우선 단방향 예측될 수 있다.
예 18: 공유된 병합 목록이 허용되는지 여부는 인코딩 모드에 따라서 달라질 수 있다.
일부 실시형태들에서는, 공유된 병합 목록은 정규 병합 모드로 코딩된 블록들에 대해서는 허용되지 않을 수 있고, IBC 모드로 코딩된 블록들에 대해서는 허용될 수 있다.
일부 실시형태들에서는, 부모 공유 노드로부터 분할된 하나의 블록이 정규 병합 모드로 코딩되는 경우, HMVP 테이블의 업데이트는 해당 블록을 인코딩/디코딩한 이후에 디스에이블될 수 있다.
예 19: 위의 개시된 예들에서, 루마 블록에 대한 블록 크기/폭/높이는 또한 Cb, Cr, 또는 G/B/R과 같은 크로마 블록에 대한 블록 크기/폭/높이로 변경될 수 있다.
GBi 모드에 대한 라인 버퍼 감소
예 20: GBi 가중된 인덱스가 이웃하는 블록으로부터 승계되거나 예측될 수 있는지(CABAC 콘텍스트 선택을 포함함)는 현재 블록의 위치에 의존한다.
일부 실시형태들에서는, GBi 가중된 인덱스는 현재 블록과 같은 코딩 트리 유닛(CTU, 최대 코딩 유닛(Largest Coding Unit; LCU)이라고도 알려짐) 내에 있지 않는 이웃하는 블록으로부터 승계되거나 예측될 수 없다.
일부 실시형태들에서는, GBi 가중된 인덱스는 현재 블록과 같은 CTU 라인 또는 CTU 행 내에 있지 않는 이웃하는 블록으로부터 승계되거나 예측될 수 없다.
일부 실시형태들에서는, GBi 가중된 인덱스는 현재 블록과 같은 M×N 영역 내에 있지 않는 이웃하는 블록으로부터 승계되거나 예측될 수 없다. 예를 들어, M=N=64 이다. 이러한 경우에, 하나의 타일/슬라이스/픽쳐는 다수의 중첩되지 않는 MxN 영역들로 분할된다.
일부 실시형태들에서는, GBi 가중된 인덱스는 현재 블록과 같은 M×N 영역 라인 또는 M×N 영역 행 내에 있지 않는 이웃하는 블록으로부터 승계되거나 예측될 수 없다. 예를 들어, M=N=64 이다. CTU 라인/행 및 영역 라인/행은 도 10 에 도시된다.
일부 실시형태들에서는, 현재 블록의 상단-좌측 코너(또는 임의의 다른 위치)가 (x,y)이고, 이웃하는 블록의 상단-좌측 코너(또는 임의의 다른 위치)가 (x', y')라고 가정하면, 이것은 다음 조건들 중 하나가 만족되면 이웃하는 블록으로부터 승계되거나 예측될 수 없다.
(1) x / M != x' / M 일 것. 예를 들어, M = 128 또는 64 이다.
(2) y / N != y' / N 일 것. 예를 들어, N = 128 또는 64 이다.
(3) ((x / M != x' / M) && (y / N != y' / N)) 일 것. 예를 들어, M = N=128 이거나 M= N = 64 이다.
(4) ((x / M != x' / M) || (y / N != y' / N)) 일 것. 예를 들어, M = N=128 이거나 M= N = 64 이다.
(5) x >> M != x' >>M 일 것. 예를 들어, M = 7 또는 6 이다.
(6) y >> N != y' >>N 일 것. 예를 들어, N = 7 또는 6 이다.
(7) ((x >> M != x' >>M) && (y >> N != y' >>N)) 일 것. 예를 들어, M = N=7 이거나 M= N = 6 이다.
(8) ((x >> M != x' >>M) || (y >> N != y' >>N)) 일 것. 예를 들어, M = N=7 이거나 M= N = 6 이다.
일부 실시형태들에서는, GBi가 어떤 픽쳐/슬라이스/타일 그룹/타일 내에 적용될 수 있는지 여부를 표시하기 위해서 플래그가 PPS 또는 슬라이스 헤더 또는 타일 그룹 헤더 또는 타일 내에서 시그널링된다. 일부 실시형태들에서는, GBi가 사용되는지 여부 그리고 GBi가 어떻게 사용되는지(예컨대, 얼마나 많은 후보 가중치 및 가중치들의 값이 존재하는지)가 픽쳐/슬라이스/타일 그룹/타일에 대해서 유도될 수 있다. 일부 실시형태들에서는, 이러한 유도는 QP, 시간 층, POC 거리 등과 같은 정보에 의존할 수 있다.
도 10 은 CTU (영역) 라인의 일 예를 도시한다. 음영처리된 CTU (영역들)는 하나의 CUT (영역) 라인 내에 있고, 음영처리되지 않은 CTU (영역들)는 다른 CUT (영역) 라인 내에 있다.
인터-인트라 예측(IIP)을 위한 단순화
예 21: IIP-코딩된 블록 내에서의 인트라-예측 모드의 코딩은, IIP-코딩된 이웃하는 블록의 인트라-예측 모드와 독립적으로 코딩된다.
일부 실시형태들에서는, 인트라-코딩된 블록의 인트라-예측 모드만이, 예컨대 MPM 목록 구성 프로세스 도중에, IIP-코딩된 블록을 위한 인트라-예측 모드의 코딩에서 사용될 수 있다.
일부 실시형태들에서는, IIP-코딩된 블록 내의 인트라-예측 모드는 임의의 이웃하는 블록으로부터의 모드 예측이 없이 코딩된다.
예 22: 양자 모두가 새로운 IIP-코딩된 블록의 인트라-예측 모드를 코딩하기 위하여 사용되는 경우에, IIP-코딩된 블록의 인트라-예측 모드는 인트라-코딩된 블록의 인트라-예측 모드보다 낮은 우선순위를 가질 수 있다.
일부 실시형태들에서는, IIP-코딩된 블록에 대한 MPM들을 유도할 때, IIP-코딩된 블록 및 인트라-코딩된 이웃하는 블록 양자 모두의 인트라-예측 모드들이 활용된다. 그러나, 인트라-코딩된 이웃하는 블록들로부터의 인트라 예측 모드는 IIP-코딩된 이웃하는 블록들로부터의 인트라 예측 모드 이전에 MPM 목록에 삽입될 수 있다.
일부 실시형태들에서는, 인트라-코딩된 이웃하는 블록들로부터의 인트라 예측 모드는 IIP-코딩된 이웃하는 블록들로부터의 인트라 예측 모드 이후에 MPM 목록에 삽입될 수도 있다.
예 23: IIP-코딩된 블록 내의 인트라-예측 모드는 인트라-코딩된 블록의 인트라-예측 모드를 예측하기 위해서도 사용될 수 있다.
일부 실시형태들에서는, IIP-코딩된 블록 내의 인트라-예측 모드는 보통의 인트라-코딩된 블록에 대한 MPM들을 유도하기 위하여 사용될 수 있다. 일부 실시형태들에서는, 보통의 인트라-코딩된 블록에 대한 MPM들을 유도하기 위하여 사용될 때, IIP-코딩된 블록 내의 인트라-예측 모드는 인트라-코딩된 블록 내의 인트라-예측 모드보다 낮은 우선순위를 가질 수 있다.
일부 실시형태들에서는, IIP-코딩된 블록 내의 인트라-예측 모드는, 다음 조건들 중 하나 이상이 만족되는 경우에만, 인트라-코딩된 블록 또는 IIP-코딩된 블록의 인트라-예측 모드를 예측하기 위서도 사용될 수 있다:
1. 두 개의 블록들이 동일한 CTU 라인 내에 있을 것.
2. 두 개의 블록들이 동일한 CTU 내에 있을 것.
3. 두 개의 블록들이 동일한 M×N 영역 내에 있을 것, 여기에서, 예컨대 M=N=64 이다.
4. 두 개의 블록들은 M×N 영역 라인 내에 있을 것, 여기에서, 예컨대 M=N=64 이다.
예 24: 일부 실시형태들에서는, IIP-코딩된 블록에 대한 MPM 구성 프로세스는 보통의 인트라-코딩된 블록에 대한 MPM 구성 프로세스와 동일해야 한다.
일부 실시형태들에서는, 여섯 개의 MPM들이 인터-인트라 예측이 있는 인터-코딩된 블록에 대해서 사용된다.
일부 실시형태들에서는, MPM들 중 일부만이 IIP-코딩된 블록에 대해서 사용된다. 일부 실시형태들에서는, 첫 번째 것이 언제나 사용된다. 또는, 더 나아가, MPM 플래그 및 MPM 인덱스를 시그널링할 필요가 없다. 일부 실시형태들에서는, 처음 네 개의 MPM들이 활용될 수 있다. 또는, 더 나아가, MPM 플래그를 시그널링할 필요는 없지만, MPM 인덱스는 시그널링될 필요가 있다.
일부 실시형태들에서는, 각각의 블록은 MPM 목록 내에 포함된 인트라 예측 모드들에 따라서 MPM 목록 중 하나를 선택할 수 있고, 예컨대 주어진 모드(예를 들어, 평면 모드)와 비교할 때 최소 인덱스가 있는 모드가 선택된다.
일부 실시형태들에서는, 각각의 블록은 MPM 목록으로부터의 모드들의 서브세트를 선택할 수 있고, 서브세트 내의 모드 인덱스를 시그널링할 수 있다.
일부 실시형태들에서는, 인트라 MPM 모드를 코딩하기 위하여 사용되는 콘텍스트가 IIP-코딩된 블록들 내의 인트라 모드들을 코딩하기 위해서 재사용된다. 일부 실시형태들에서는, 인트라 MPM 모드를 코딩하기 위하여 사용되는 상이한 콘텍스트들이 IIP-코딩된 블록들 내의 인트라 모드들을 코딩하기 위해서 채용된다.
예 25: 일부 실시형태들에서는, 수평 및 수직 방향을 제외하는 각도 인트라 예측 모드에 대하여, IIP-코딩된 블록에 대해서 생성된 인트라 예측 블록 및 인터 예측 블록에 대해서 동일한 가중치가 활용된다.
예 26: 일부 실시형태들에서는, 특정 위치에 대해서, 제로 가중치가 IIP 코딩 프로세스에서 적용될 수 있다.
일부 실시형태들에서는, 제로 가중치는 IIP 코딩 프로세스에서 사용되는 인트라 예측 블록에 적용될 수 있다.
일부 실시형태들에서는, 제로 가중치는 IIP 코딩 프로세스에서 사용되는 인터 예측 블록에 적용될 수 있다.
예 27: 일부 실시형태들에서는, IIP-코딩된 블록의 인트라-예측 모드는, 현재 블록의 크기가 무엇인지와 무관하게, MPM들 중 하나로서만 선택될 수 있다.
일부 실시형태들에서는, 현재 블록의 크기가 무엇인지와 무관하게, MPM 플래그는 시그널링되지 않고 1인 것으로 추론된다.
예 28: IIP-코딩된 블록에 대하여, 크로마 성분들에 대한 인트라-예측을 수행하기 위해서, 루마-예측-크로마 모드(Luma-predict-chroma mode; LM) 모드가 유도된 모드(derived mode; DM) 모드 대신에 사용된다.
일부 실시형태들에서는, DM 및 LM 양자 모두가 허용될 수 있다.
일부 실시형태들에서는, 크로마 성분들에 대해서 여러 인트라 예측 모드들이 허용될 수 있다.
일부 실시형태들에서는, 크로마 성분들에 대해서 여러 모드들을 허용할지 여부는 색상 포맷에 따라서 달라질 수 있다. 일 예에서, 4:4:4 색상 포맷의 경우, 허용된 크로마 인트라 예측 모드는 루마 성분에 대한 것과 같을 수 있다.
예 29: 다음과 같은 하나 이상의 특정한 경우에는 인터-인트라 예측이 허용되지 않을 수도 있다:
A. w == T1 || h == T1 이고, 예를 들어 T1 = 4 이다
B. w > T1 || h > T1 이고, 예를 들어 T1 = 64 이다
C. (w == T1 && h == T2) || (w == T2 && h == T1) 이고, 예를 들어 T1 = 4 이고 T2 = 16 이다.
예 30: 인터-인트라 예측은 양방향 예측이 있는 블록에 대해서는 허용되지 않을 수도 있다.
일부 실시형태들에서는, 어떤 IIP-코딩된 블록에 대한 선택된 병합 후보가 양방향 예측을 사용한다면, 이것은 단방향 예측 병합 후보로 변환될 것이다. 일부 실시형태들에서는, 레퍼런스 목록 0로부터의 예측만이 보유되고, 병합 후보는 레퍼런스 목록 0을 참조하는 단방향 예측으로서 취급된다. 일부 실시형태들에서는, 레퍼런스 목록 1로부터의 예측만이 보유되고, 병합 후보는 레퍼런스 목록 1을 참조하는 단방향 예측으로서 취급된다.
일부 실시형태들에서는, 선택된 병합 후보가 단방향 예측 병합 후보가 되어야 한다는 제한 사항이 추가된다. 또는, IIP-코딩된 블록에 대한 시그널링된 병합 인덱스는 단방향 예측 병합 후보의 인덱스를 표시한다(즉, 양방향 예측 병합 후보들은 카운트되지 않는다).
일부 실시형태들에서는, 삼각 예측 모드에서 사용되는 병합 후보 목록 구성 프로세스가 IIP-코딩된 블록에 대한 움직임 후보 목록을 유도하기 위해서 활용될 수 있다.
예 31: 인터-인트라 예측이 적용되는 경우에, 일부 코딩 툴들은 허용되지 않을 수도 있다.
일부 실시형태들에서는, 양방향성 광학적 흐름(Bi-directional Optical flow; BIO)은 양방향 예측에 대해서 적용되지 않는다.
일부 실시형태들에서는, 중첩된 블록 움직임 보상(OBMC)은 적용되지 않는다.
일부 실시형태들에서는, 디코더측 움직임 벡터 유도/정제 프로세스는 허용되지 않는다.
예 32: 인터-인트라 예측에서 사용되는 인트라 예측 프로세스는 보통의 인트라-코딩된 블록들에서 사용되는 것과 다를 수 있다.
일부 실시형태들에서는, 이웃하는 샘플들은 상이한 방법으로 필터링될 수 있다. 일부 실시형태들에서는, 이웃하는 샘플들은 인터-인트라 예측에서 사용되는 인트라-예측을 수행하기 이전에 필터링되지 않는다.
일부 실시형태들에서는, 위치-의존적 인트라 예측 샘플 필터링 프로세스는 인터-인트라 예측에서 사용되는 인트라-예측에 대해서 수행되지 않는다. 일부 실시형태들에서는, 멀티라인(multiline) 인트라-예측은 인터-인트라 예측에서 허용되지 않는다. 일부 실시형태들에서는, 광각 인트라-예측은 인터-인트라 예측에서 허용되지 않는다.
예 33: 하이브리드 인트라 및 인터 예측에서의 인트라 및 인터 예측 값들이 PIntra 및 Pinter이고, 가중 인자가 각각 w_intra 및 w_inter라고 가정한다. 위치 (x, y)에서의 예측 값은 (PIntra(x, y) * w_intra(x, y) + PInter(x, y) * w_inter(x, y) + offset(x, y)) >> N으로서 계산되는데, 여기에서 w_intra(x, y) + w_iner(x, y) = 2^N 이고, 및 offset(x, y) = 2^(N - 1) 이다. 일 예에서는, N = 3 이다.
예 34: 일부 실시형태들에서는, 보통의 인트라-코딩된 블록 및 IIP-코딩된 블록 내에서 시그널링되는 MPM 플래그는 동일한 산술 코딩 콘텍스트를 공유해야 한다.
예 35: 일부 실시형태들에서는, IIP-코딩된 블록 내의 인트라-예측 모드를 코딩하기 위하여 MPM이 필요하지 않다. (블록 폭 및 높이가 w 및 h라고 가정한다).
일부 실시형태들에서는, 네 개의 모드 {평면, DC, 수직, 수평}은 00, 01, 10 및 11 로서 이진화된다(00-평면, 01-DC, 10-수직, 11-수평과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, 네 개의 모드 {평면, DC, 수직, 수평}은 0, 10, 110 및 111 로서 이진화된다(0-평면, 10-DC, 110-수직, 111-수평과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, 네 개의 모드 {평면, DC, 수직, 수평}은 1, 01, 001 및 000 으로서 이진화된다(1-평면, 01-DC, 001-수직, 000-수평과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, W>N*H (N은 정수 예컨대, 2임)가 사용될 수 있는 경우에, 세 개의 모드 {평면, DC, 수직}만이 사용될 수 있다. 세 개의 모드는 1, 01, 11 로서 이진화된다(1-평면, 01-DC, 11-수직과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, W>N*H (N은 2 와 같은 정수임)가 사용될 수 있는 경우에는, 세 개의 모드 {평면, DC, 수직}만이 사용될 수 있다. 세 개의 모드는 0, 10, 00 으로서 이진화된다(0-평면, 10-DC, 00-수직과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, H>N*W (N은 2 와 같은 정수임)가 사용될 수 있는 경우에는, 세 개의 모드 {평면, DC, 수평}만이 사용될 수 있다. 세 개의 모드는 1, 01, 11 로서 이진화된다(1-평면, 01-DC, 11-수평과 같은 임의의 매핑 규칙이 있을 수 있다).
일부 실시형태들에서는, H>N*W (N은 2 와 같은 정수임)가 사용될 수 있는 경우에는, 세 개의 모드 {평면, DC, 수평}만이 사용될 수 있다. 세 개의 모드는 0, 10, 00 으로서 이진화된다(0-평면, 10-DC, 00-수평과 같은 임의의 매핑 규칙이 있을 수 있다).
예 36: 일부 실시형태들에서는, DC 및 평면 모드만이 IIP-코딩된 블록 내에서 사용된다. 일부 실시형태들에서는, DC 또는 평면(Planar)이 사용되는지를 표시하기 위해서 하나의 플래그가 시그널링된다.
예 37: 일부 실시형태들에서는, IIP는 상이한 색성분에 대해서 다르게 수행된다.
일부 실시형태들에서는, 인터-인트라-예측은 크로마 성분(예컨대, Cb 및 Cr)에는 수행되지 않는다.
일부 실시형태들에서는, 크로마 성분에 대한 인트라-예측 모드는 IIP-코딩된 블록 내의 루마 성분에 대한 것과 다르다. 일부 실시형태들에서는, 크로마에 대해서 DC 모드가 언제나 사용된다. 일부 실시형태들에서는, 크로마에 대해서 평면 모드가 언제나 사용된다. 일부 실시형태들에서는, 크로마에 대해서 LM 모드가 언제나 사용된다.
일부 실시형태들에서는, 상이한 색성분에 대해서 IIP를 어떻게 수행하는지는, 색상 포맷(예컨대, 4:2:0 또는 4:4:4)에 따라서 달라질 수 있다.
일부 실시형태들에서는, 상이한 색성분에 대해서 IIP를 어떻게 수행하는지는 블록 크기에 따라서 달라질 수 있다. 예를 들어, 현재 블록의 폭 또는 높이가 4 이하인 경우에는, 인터-인트라-예측이 크로마 성분(예컨대, Cb 및 Cr)에 수행되지 않는다.
MV 정밀도 이슈
다음의 설명에서, 공간적 움직임 예측을 위해 저장된 MV들을 위해 사용되는 정밀도는 P1으로 표시되고, 시간적 움직임 예측에 대해서 저장된 MV들을 위해 사용되는 정밀도는 P2로 표시된다.
예 38: P1 및 P2는 동일할 수 있고, 또는 이들은 다를 수도 있다.
일부 실시형태들에서는, P1은 1/16 루마 픽셀이고, P2는 1/4 루마 픽셀이다. 일부 실시형태들에서는, P1은 1/16 루마 픽셀이고, P2는 1/ 8 루마 픽셀이다. 일부 실시형태들에서는, P1은 1/8 루마 픽셀이고, P2는 1/4 루마 픽셀이다. 일부 실시형태들에서는, P1은 1/8 루마 픽셀이고, P2는 1/ 8 루마 픽셀이다. 일부 실시형태들에서는, P2는 1/16 루마 픽셀이고, P1은 1/4 루마 픽셀이다. 일부 실시형태들에서는, P2는 1/16 루마 픽셀이고, P1은 1/ 8 루마 픽셀이다. 일부 실시형태들에서는, P2는 1/8 루마 픽셀이고, P1은 1/4 루마 픽셀이다.
예 39: P1 및 P2는 고정되지 않을 수도 있다. 일부 실시형태들에서는, P1/P2는 상이한 표준 프로파일/레벨/티어에 대해서 다를 수 있다. 일부 실시형태들에서는, P1/P2는 상이한 시간 층 내의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, P1/P2는 상이한 폭/높이의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, P1/P2는 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU 내에서 인코더로부터 디코더로 시그널링될 수 있다.
예 40: MV (MVx, MVy)의 경우, MVx 및 MVy에 대한 정밀도는 다를 수 있고, Px 및 Py로 표시된다.
일부 실시형태들에서는, Px/Py는 상이한 표준 프로파일/레벨/티어에 대해서 다를 수 있다. 일부 실시형태들에서는, Px/Py는 상이한 시간 층 내의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, Px는 상이한 폭의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, Py는 상이한 높이의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, Px/Py는 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU 내에서 인코더로부터 디코더로 시그널링될 수 있다.
예 41: MV (MVx, MVy)를 시간적 움직임 예측을 위해서 저장하기 전에, 이것은 정확한 정밀도로 변경되어야 한다.
일부 실시형태들에서는, P1>=P2 라면, MVx=Shift(MVx, P1-P2), MVy=Shift(MVy, P1-P2) 이다. 일부 실시형태들에서는, P1>=P2 라면, MVx=SignShift(MVx, P1-P2), MVy=SignShift(MVy, P1-P2) 이다. 일부 실시형태들에서는, P1<P2 라면, MVx= MVx <<(P2-P1), MVy= MVy<<(P2-P1) 이다.
예 42: MV(MVx, MVy) 정밀도가 Px 및 Py이고, MVx 또는 MVy가 N 비트의 정수에 의해 저장된다고 가정한다. MV (MVx, MVy)의 범위는 MinX <=MVx<= MaxX 이고, MinY <=MVy<= MaxY 이다.
일부 실시형태들에서는, MinX는 MinY와 같을 수 있고, MinY와 같지 않을 수도 있다. 일부 실시형태들에서는, MaxX는 MaxY와 같을 수 있고, MaxY와 같지 않을 수도 있다. 일부 실시형태들에서는, {MinX, MaxX}는 Px에 따라서 달라질 수 있다. 일부 실시형태들에서는, {MinY, MaxY}는 Py에 따라서 달라질 수 있다. 일부 실시형태들에서는, MinX, MaxX, MinY, MaxY}는 N에 따라서 달라질 수 있다. 일부 실시형태들에서는, {MinX, MaxX, MinY, MaxY}는, 공간적 움직임 예측을 위해 저장된 MV 및 시간적 움직임 예측을 위해 저장된 MV에 대해서 다를 수 있다. 일부 실시형태들에서는, {MinX, MaxX, MinY, MaxY}는 상이한 표준 프로파일/레벨/티어에 대해서 다를 수 있다. 일부 실시형태들에서는, {MinX, MaxX, MinY, MaxY}는 상이한 시간 층에 있는 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, {MinX, MaxX, MinY, MaxY}는 상이한 폭/높이의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, {MinX, MaxX, MinY, MaxY}는 VPS/SPS/PPS/슬라이스 헤더/타일 그룹 헤더/타일/CTU/CU 내에서 인코더로부터 디코더로 시그널링될 수 있다. 일부 실시형태들에서는, {MinX, MaxX}는 상이한 폭의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, {MinY, MaxY}는 상이한 높이의 픽쳐들에 대해서 다를 수 있다. 일부 실시형태들에서는, MVx는 공간적 움직임 예측을 위해서 저장되기 이전에 [MinX, MaxX]로 클리핑된다. 일부 실시형태들에서는, MVx는 시간적 움직임 예측을 위해서 저장되기 이전에 [MinX, MaxX]로 클리핑된다. 일부 실시형태들에서는, MVy는 공간적 움직임 예측을 위해서 저장되기 전에 [MinY, MaxY]로 클리핑된다. 일부 실시형태들에서는, MVy는 시간적 움직임 예측을 위해서 저장되기 전에 [MinY, MaxY]로 클리핑된다.
어파인 병합 모드를 위한 라인 버퍼 감소
예 43: 이웃하는 블록으로부터 어파인 병합 후보에 의해 승계된 어파인 모델(유도된 CPMV들 또는 어파인 파라미터)은 언제나 6-파라미터 어파인 모델이다.
일부 실시형태들에서는, 이웃하는 블록이 4-파라미터 어파인 모델로 코딩된다면, 어파인 모델은 여전히 6-파라미터 어파인 모델로서 승계된다.
일부 실시형태들에서는, 이웃하는 블록으로부터의 4-파라미터 어파인 모델이 6-파라미터 어파인 모델 또는 4-파라미터 어파인 모델로서 승계되는지 여부는 현재 블록의 위치에 따라서 달라질 수 있다. 일부 실시형태들에서는, 이웃하는 블록으로부터의 4-파라미터 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 코딩 트리 유닛(Coding Tree Unit; CTU)(최대 코딩 유닛(Largest Coding Unit; LCU)이라고도 알려져 있음) 내에 있지 않으면, 6-파라미터 어파인 모델로서 승계된다. 일부 실시형태들에서는, 이웃하는 블록으로부터의 4-파라미터 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 CTU 라인 또는 CTU 행 내에 있지 않으면, 6-파라미터 어파인 모델로서 승계된다. 일부 실시형태들에서는, 이웃하는 블록으로부터의 4-파라미터 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 M×N 영역 내에 있지 않으면, 6-파라미터 어파인 모델로서 승계된다. 예를 들어, M=N=64 이다. 이러한 경우에, 하나의 타일/슬라이스/픽쳐는 다수의 중첩되지 않는 MxN 영역들로 분할된다. 일부 실시형태들에서는, 이웃하는 블록으로부터의 4-파라미터 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 M×N 영역 라인 또는 M×N 영역 행 내에 있지 않으면, 6-파라미터 어파인 모델로서 승계된다. 예를 들어, M=N=64 이다. CTU 라인/행 및 영역 라인/행은 도 10 에 도시된다.
일부 실시형태들에서는, 현재 블록의 상단-좌측 코너(또는 임의의 다른 위치)가 (x,y)이고, 이웃하는 블록의 상단-좌측 코너(또는 임의의 다른 위치)가 (x', y')라고 가정하면, 이웃하는 블록으로부터의 4-파라미터 어파인 모델은, 이웃하는 블록이 다음 조건들 중 하나 이상을 만족시키면 6-파라미터 어파인 모델로서 승계된다:
(a) x / M != x' / M 일 것. 예를 들어, M = 128 또는 64 이다.
(b) y / N != y' / N 일 것. 예를 들어, N = 128 또는 64 이다.
(c) ((x / M != x' / M) && (y / N != y' / N)) 일 것. 예를 들어, M = N=128 이거나 M= N = 64 이다.
(d) ((x / M != x' / M) || (y / N != y' / N)) 일 것. 예를 들어, M = N=128 이거나 M= N = 64 이다.
(e) x >> M != x' >>M 일 것. 예를 들어, M = 7 또는 6 이다.
(f) y >> N != y' >>N 일 것. 예를 들어, N = 7 또는 6 이다.
(g) ((x >> M != x' >>M) && (y >> N != y' >>N)) 일 것. 예를 들어, M = N=7 이거나 M= N = 6 이다.
(h) ((x >> M != x' >>M) || (y >> N != y' >>N)) 일 것. 예를 들어, M = N=7 이거나 M= N = 6 이다.
5. 실시형태
후술되는 설명은 개시된 기술이 현재 VVC 표준의 신택스 구조 내에 어떻게 구현될 수 있는지를 보여준다. 새롭게 추가되는 것은 굵은 글씨로 표시되고, 삭제되는 것은 이탤릭체로 표시된다.
5.1 실시형태 #1 (4x4 인터 예측을 디스에이블하고, 4x8, 8x4, 4x16 및 16x4 블록들에 대해서 양방향 예측을 디스에이블함)
7.3.6.6 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 기술자
if( tile_group_type != I | | sps_ibc_enabled_flag ) {
if( treeType != DUAL_TREE_CHROMA && !( cbWidth == 4 && cbHeight == 4 && !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && tile_group_type != I && !( cbWidth == 4 && cbHeight == 4 ) )
pred_mode_flag ae(v)
if( ( ( tile_group_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( tile_group_type != I && CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) &&
sps_ibc_enabled_flag && !( cbWidth == 4 && cbHeight == 4 && cu_skip_flag[ x0 ][ y0 ] = = 1 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
if( sps_pcm_enabled_flag &&
cbWidth >= MinIpcmCbSizeY && cbWidth <= MaxIpcmCbSizeY &&
cbHeight >= MinIpcmCbSizeY && cbHeight <= MaxIpcmCbSizeY )
pcm_flag[ x0 ][ y0 ] ae(v)
if( pcm_flag[ x0 ][ y0 ] ) {
while( !byte_aligned( ) )
pcm_alignment_zero_bit f(1)
pcm_sample( cbWidth, cbHeight, treeType)
} else {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( y0 % CtbSizeY ) > 0 )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if (intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY | | cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ))
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA )
intra_chroma_pred_mode[ x0 ][ y0 ] ae(v)
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
merge_flag[ x0 ][ y0 ] ae(v)
if( merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
mvd_coding( x0, y0, 0, 0 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_flag[ x0 ][ y0 ] ae(v)
}
} else {
if( tile_group_type = = B )
inter_pred_idc[ x0 ][ y0 ] ae(v)
if( sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16 ) {
inter_affine_flag[ x0 ][ y0 ] ae(v)
if( sps_affine_type_flag && inter_affine_flag[ x0 ][ y0 ] )
cu_affine_type_flag[ x0 ][ y0 ] ae(v)
}
}
7.4.7.6 코딩 유닛 시맨틱스
pred_mode_flag가 0 과 같으면 현재 코딩 유닛이 인터 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_flag가 1과 같으면 현재 코딩 유닛이 인트라 예측 모드에서 코딩된다는 것을 규정한다. 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 다음과 같이 유도된다:
- pred_mode_flag가 0 과 같으면, CuPredMode[ x ][ y ]는 MODE_INTER와 같아지도록 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 같으면), CuPredMode[ x ][ y ]는 MODE_INTRA와 같아지도록 설정된다.
pred_mode_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 cbWidth가 4와 같고 cbHeight가 4와 같은 코딩 유닛을 디코딩할 경우에는 1과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩할 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0 과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 스킵 모드에서 코딩되는 코딩 유닛을 디코딩하고 cbWidth가 4와 같고 cbHeight가 4와 같은 경우에는 sps_ibc_enabled_flag의 값과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩하는 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 MODE_IBC와 같아지도록 설정된다.
inter_pred_idc[ x0 ][ y0 ]는 list0, list1, 또는 양방향 예측이 표 7-9에 따라서 현재 코딩 유닛에 대해 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 ( x0, y0 )를 규정한다.
inter_pred_idc inter_pred_idc의 명칭
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12 | | ( cbWidth + cbHeight )  = =  20
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
표 7-9 - 인터 예측 모드에 대한 명칭 연관성
inter_pred_idc[ x0 ][ y0 ]가 존재하지 않으면, 이것은 PRED_L0 과 같도록 추론된다.
8.5.2.1 종합적인 사항
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인, 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플들 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플들 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도의 루마 움직임 벡터들 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 레퍼런스 인덱스들 refIdxL0 및 refIdxL1,
- 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양방향 예측 가중치 인덱스 gbiIdx.
변수 LX가 현재 픽쳐의 RefPicList[ X ]라고 하고, X는 0 또는 1이다.
변수 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], refIdxL0 및 refIdxL1, 및 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ]을 유도하기 위하여, 다음 내용들이 적용된다:
- merge_flag[ xCb ][ yCb ]가 1과 같으면, 절 8.5.2.2에서 규정된 바와 같은 병합 모드를 위한 루마 움직임 벡터에 대한 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력들로 호출되고, 출력은 루마 움직임 벡터 mvL0[ 0 ][ 0 ], mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0, refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx이다.
- 그렇지 않으면, 다음 내용들이 적용된다:
- 변수 predFlagLX[ 0 ][0 ], mvLX[ 0 ][0 ] 및 refIdxLX 내에서, PRED_LX 내에서, 그리고 신택스 요소 ref_idx_lX 및 MvdLX 내에서 0 또는 1로 치환되는 X에 대하여, 다음 순서의 단계들이 적용된다:
1. 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]가 다음과 같이 유도된다:
- inter_pred_idc[ xCb ][ yCb ]가 PRED_LX 또는 PRED_BI와 같으면,
refIdxLX = ref_idx_lX[ xCb ][ yCb ] (8-266)
predFlagLX[ 0 ][0 ] = 1 (8-267)
- 그렇지 않으면, 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]는 다음에 의해서 규정된다:
refIdxLX = -1 (8-268)
predFlagLX[ 0 ][0 ] = 0 (8-269)
2. 변수 mvdLX는 다음과 같이 유도된다:
mvdLX[ 0 ] = MvdLX[ xCb ][ yCb ][ 0 ] (8-270)
mvdLX[ 1 ] = MvdLX[ xCb ][ yCb ][ 1 ] (8-271)
3. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 절 8.5.2.8 내의 루마 움직임 벡터 예측을 위한 유도 프로세스가 루마 코딩 블록 위치 ( xCb, yCb ), 코딩 블록 폭 cbWidth, 코딩 블록 높이 cbHeight 및 변수 refIdxLX를 입력으로서 호출되고, 출력은 mvpLX이다.
4. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 루마 움직임 벡터 mvLX[ 0 ][ 0 ]이 다음과 같이 유도된다:
uLX[ 0 ] = ( mvpLX[ 0 ] + mvdLX[ 0 ] + 218 ) % 218 (8-272)
mvLX[ 0 ][ 0 ][ 0 ] = ( uLX[ 0 ] >= 217 ) ? ( uLX[ 0 ] - 218 ): uLX[ 0 ] (8-273)
uLX[ 1 ] = ( mvpLX[ 1 ] + mvdLX[ 1 ] + 218 ) % 218 (8-274)
mvLX[ 0 ][ 0 ][ 1 ] = ( uLX[ 1 ] >= 217 ) ? ( uLX[ 1 ] - 218 ): uLX[ 1 ] (8-275)
주의 1 - 앞서 규정된 바와 같은, mvLX[ 0 ][ 0 ][ 0 ] 및 mvLX[ 0 ][ 0 ][ 1 ] 의 결과적으로 얻어지는 값들은 언제나 -217 내지 217 - 1의 범위 안에 있을 것이고, 범위는 양단을 포함한다.
- 양방향 예측 가중치 인덱스 gbiIdx는 gbi_idx[ xCb ][ yCb ]와 같아지도록 설정된다.
다음 조건들 모두가 참이면, refIdxL1은 -1과 같아지도록 설정되고, predFlagL1은 0 과 같아지도록 설정되며, gbiIdx는 0 과 같아지도록 설정된다:
- predFlagL0[ 0 ][ 0 ]은 1과 같을 것.
- predFlagL1[ 0 ][ 0 ]은 1과 같을 것.
- ( cbWidth + cbHeight = = 8 ) | | ( cbWidth + cbHeight = = 12 ) | | ( cbWidth + cbHeight = = 20 )
= cbWidth는 4와 같다; cbHeight는 4와 같다.
절 8.5.2.16에 규정된 바와 같은 이력에 기반한 움직임 벡터 예측기 목록에 대한 업데이트 프로세스는, 루마 움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0 및 refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx로 호출된다.
9.5.3.8 inter_pred_idc에 대한 이진화 프로세스
이러한 프로세스로 들어가는 입력은, 신택스 요소 inter_pred_idc에 대한 이진화 프로세스의 요청, 현재 루마 코딩 블록 폭 cbWidth 및 현재 루마 코딩 블록 높이 cbHeight이다.
이러한 프로세스의 출력은 신택스 요소의 이진화이다.
신택스 요소 inter_pred_idc에 대한 이진화는 표 9-9 에 규정된다.
inter_pred_idc의 값 inter_pred_idc의 명칭 Bin string
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12 | | ( cbWidth + cbHeight )  = =  20
0 PRED_L0 00 0
1 PRED_L1 01 1
2 PRED_BI 1 -
표 9-9 - inter_pred_idc에 대한 이진화
9.5.4.2.1 종합적인 사항
inter_pred_idc[ x0 ][ y0 ] ( cbWidth + cbHeight ) != 8 && ( cbWidth + cbHeight ) != 12 && ( cbWidth + cbHeight ) != 20 ? 7 - ( ( 1 +
Log2( cbWidth ) + Log2( cbHeight ) ) >> 1 )
: 4
4 na na na na
표 9-10 - 콘텍스트 코딩된 빈이 있는 신택스 요소로의 ctxInc의 할당
5.2 실시형태 #2 (4x4 인터 예측을 디스에이블함)
7.3.6.6 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 기술자
if( tile_group_type != I | | sps_ibc_enabled_flag ) {
if( treeType != DUAL_TREE_CHROMA && !( cbWidth == 4 && cbHeight == 4 && !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && tile_group_type != I && !( cbWidth == 4 && cbHeight == 4 ) )
pred_mode_flag ae(v)
if( ( ( tile_group_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( tile_group_type != I && CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) &&
sps_ibc_enabled_flag && !( cbWidth == 4 && cbHeight == 4 && cu_skip_flag[ x0 ][ y0 ] = = 1 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
if( sps_pcm_enabled_flag &&
cbWidth >= MinIpcmCbSizeY && cbWidth <= MaxIpcmCbSizeY &&
cbHeight >= MinIpcmCbSizeY && cbHeight <= MaxIpcmCbSizeY )
pcm_flag[ x0 ][ y0 ] ae(v)
if( pcm_flag[ x0 ][ y0 ] ) {
while( !byte_aligned( ) )
pcm_alignment_zero_bit f(1)
pcm_sample( cbWidth, cbHeight, treeType)
} else {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( y0 % CtbSizeY ) > 0 )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if (intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY | | cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ))
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA )
intra_chroma_pred_mode[ x0 ][ y0 ] ae(v)
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
merge_flag[ x0 ][ y0 ] ae(v)
if( merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
mvd_coding( x0, y0, 0, 0 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_flag[ x0 ][ y0 ] ae(v)
}
} else {
if( tile_group_type = = B )
inter_pred_idc[ x0 ][ y0 ] ae(v)
if( sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16 ) {
inter_affine_flag[ x0 ][ y0 ] ae(v)
if( sps_affine_type_flag && inter_affine_flag[ x0 ][ y0 ] )
cu_affine_type_flag[ x0 ][ y0 ] ae(v)
}
}
7.4.7.6 코딩 유닛 시맨틱스
pred_mode_flag가 0 과 같으면 현재 코딩 유닛이 인터 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_flag가 1과 같으면 현재 코딩 유닛이 인트라 예측 모드에서 코딩된다는 것을 규정한다. 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 다음과 같이 유도된다:
- pred_mode_flag가 0 과 같으면, CuPredMode[ x ][ y ]는 MODE_INTER와 같아지도록 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 같으면), CuPredMode[ x ][ y ]는 MODE_INTRA와 같아지도록 설정된다.
pred_mode_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 cbWidth가 4와 같고 cbHeight가 4와 같은 코딩 유닛을 디코딩할 경우에는 1과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩할 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0 과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 스킵 모드에서 코딩되는 코딩 유닛을 디코딩하고 cbWidth가 4와 같고 cbHeight가 4와 같은 경우에는 sps_ibc_enabled_flag의 값과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩하는 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 MODE_IBC와 같아지도록 설정된다.
5.3 실시형태 #3 (4x8, 8x4, 4x16 및 16x4 블록에 대한 양방향 예측을 디스에이블함)
7.4.7.6 코딩 유닛 시맨틱스
inter_pred_idc[ x0 ][ y0 ]는 list0, list1, 또는 양방향 예측이 표 7-9에 따라서 현재 코딩 유닛에 대해 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 ( x0, y0 )를 규정한다.
inter_pred_idc inter_pred_idc의 명칭
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12 | | ( cbWidth + cbHeight )  = =  20
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
표 7-9 - 인터 예측 모드에 대한 명칭 연관성
inter_pred_idc[ x0 ][ y0 ]가 존재하지 않으면, 이것은 PRED_L0 와 같도록 추론된다.
8.5.2.1 종합적인 사항
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인, 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플들 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플들 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도의 루마 움직임 벡터들 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 레퍼런스 인덱스들 refIdxL0 및 refIdxL1,
- 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양방향 예측 가중치 인덱스 gbiIdx.
변수 LX가 현재 픽쳐의 RefPicList[ X ]라고 하고, X는 0 또는 1이다.
변수 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], refIdxL0 및 refIdxL1, 및 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ]을 유도하기 위하여, 다음 내용들이 적용된다:
- merge_flag[ xCb ][ yCb ]가 1과 같으면, 절 8.5.2.2에서 규정된 바와 같은 병합 모드를 위한 루마 움직임 벡터에 대한 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력들로 호출되고, 출력은 루마 움직임 벡터 mvL0[ 0 ][ 0 ], mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0, refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx이다.
- 그렇지 않으면, 다음 내용들이 적용된다:
- 변수 predFlagLX[ 0 ][0 ], mvLX[ 0 ][0 ] 및 refIdxLX 내에서, PRED_LX 내에서, 그리고 신택스 요소 ref_idx_lX 및 MvdLX 내에서 0 또는 1로 치환되는 X에 대하여, 다음 순서의 단계들이 적용된다:
5. 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]가 다음과 같이 유도된다:
- inter_pred_idc[ xCb ][ yCb ]가 PRED_LX 또는 PRED_BI와 같으면,
refIdxLX = ref_idx_lX[ xCb ][ yCb ] (8-266)
predFlagLX[ 0 ][0 ] = 1 (8-267)
- 그렇지 않으면, 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]는 다음에 의해서 규정된다:
refIdxLX = -1 (8-268)
predFlagLX[ 0 ][0 ] = 0 (8-269)
6. 변수 mvdLX는 다음과 같이 유도된다:
mvdLX[ 0 ] = MvdLX[ xCb ][ yCb ][ 0 ] (8-270)
mvdLX[ 1 ] = MvdLX[ xCb ][ yCb ][ 1 ] (8-271)
7. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 절 8.5.2.8 내의 루마 움직임 벡터 예측을 위한 유도 프로세스가 루마 코딩 블록 위치 ( xCb, yCb ), 코딩 블록 폭 cbWidth, 코딩 블록 높이 cbHeight 및 변수 refIdxLX를 입력으로서 호출되고, 출력은 mvpLX이다.
8. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 루마 움직임 벡터 mvLX[ 0 ][ 0 ]이 다음과 같이 유도된다:
uLX[ 0 ] = ( mvpLX[ 0 ] + mvdLX[ 0 ] + 218 ) % 218 (8-272)
mvLX[ 0 ][ 0 ][ 0 ] = ( uLX[ 0 ] >= 217 ) ? ( uLX[ 0 ] - 218 ): uLX[ 0 ] (8-273)
uLX[ 1 ] = ( mvpLX[ 1 ] + mvdLX[ 1 ] + 218 ) % 218 (8-274)
mvLX[ 0 ][ 0 ][ 1 ] = ( uLX[ 1 ] >= 217 ) ? ( uLX[ 1 ] - 218 ): uLX[ 1 ] (8-275)
주의1 - 앞서 규정된 바와 같은, mvLX[ 0 ][ 0 ][ 0 ] 및 mvLX[ 0 ][ 0 ][ 1 ] 의 결과적으로 얻어지는 값들은 언제나 -217 내지 217 - 1의 범위 안에 있을 것이고, 범위는 양단을 포함한다.
- 양방향 예측 가중치 인덱스 gbiIdx는 gbi_idx[ xCb ][ yCb ]와 같아지도록 설정된다.
다음 조건들 모두가 참이면, refIdxL1은 -1과 같아지도록 설정되고, predFlagL1은 0 과 같아지도록 설정되며, gbiIdx는 0 과 같아지도록 설정된다:
- predFlagL0[ 0 ][ 0 ]은 1과 같을 것.
- predFlagL1[ 0 ][ 0 ]은 1과 같을 것.
- ( cbWidth + cbHeight = = 8 ) | | ( cbWidth + cbHeight = = 12 ) | | ( cbWidth + cbHeight = = 20 )을 만족할 것
- cbWidth는 4와 같을 것; cbHeight는 4와 같을 것.
절 8.5.2.16에 규정된 바와 같은 이력에 기반한 움직임 벡터 예측기 목록에 대한 업데이트 프로세스는, 루마 움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0 및 refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx로 호출된다.
9.5.3.8 inter_pred_idc에 대한 이진화 프로세스
이러한 프로세스로 들어가는 입력은, 신택스 요소 inter_pred_idc에 대한 이진화 프로세스의 요청, 현재 루마 코딩 블록 폭 cbWidth 및 현재 루마 코딩 블록 높이 cbHeight이다.
이러한 프로세스의 출력은 신택스 요소의 이진화이다.
신택스 요소 inter_pred_idc에 대한 이진화는 표 9-9 에 규정된다.
inter_pred_idc의 값 inter_pred_idc의 명칭 Bin string
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12 | | ( cbWidth + cbHeight )  = =  20
0 PRED_L0 00 0
1 PRED_L1 01 1
2 PRED_BI 1 -
표 9-9 - inter_pred_idc에 대한 이진화
9.5.4.2.1 종합적인 사항
inter_pred_idc[ x0 ][ y0 ] ( cbWidth + cbHeight ) != 8 && ( cbWidth + cbHeight ) != 12 && ( cbWidth + cbHeight ) != 20 ? 7 - ( ( 1 +
Log2( cbWidth ) + Log2( cbHeight ) ) >> 1 )
: 4
4 na na na na
표 9-10 - 콘텍스트 코딩된 빈이 있는 신택스 요소로의 ctxInc의 할당
실시형태 #4 (4x4 인터 예측을 디스에이블하고, 4x8, 8x4 블록들에 대한 양방향 예측을 디스에이블함)
7.3.6.6 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 기술자
if( tile_group_type != I | | sps_ibc_enabled_flag ) {
if( treeType != DUAL_TREE_CHROMA && !( cbWidth == 4 && cbHeight == 4 && !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && tile_group_type != I && !( cbWidth == 4 && cbHeight == 4 ) )
pred_mode_flag ae(v)
if( ( ( tile_group_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( tile_group_type != I && CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) &&
sps_ibc_enabled_flag && !( cbWidth == 4 && cbHeight == 4 && cu_skip_flag[ x0 ][ y0 ] = = 1 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
if( sps_pcm_enabled_flag &&
cbWidth >= MinIpcmCbSizeY && cbWidth <= MaxIpcmCbSizeY &&
cbHeight >= MinIpcmCbSizeY && cbHeight <= MaxIpcmCbSizeY )
pcm_flag[ x0 ][ y0 ] ae(v)
if( pcm_flag[ x0 ][ y0 ] ) {
while( !byte_aligned( ) )
pcm_alignment_zero_bit f(1)
pcm_sample( cbWidth, cbHeight, treeType)
} else {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( y0 % CtbSizeY ) > 0 )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if (intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY | | cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ))
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA )
intra_chroma_pred_mode[ x0 ][ y0 ] ae(v)
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
merge_flag[ x0 ][ y0 ] ae(v)
if( merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
mvd_coding( x0, y0, 0, 0 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_flag[ x0 ][ y0 ] ae(v)
}
} else {
if( tile_group_type = = B )
inter_pred_idc[ x0 ][ y0 ] ae(v)
if( sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16 ) {
inter_affine_flag[ x0 ][ y0 ] ae(v)
if( sps_affine_type_flag && inter_affine_flag[ x0 ][ y0 ] )
cu_affine_type_flag[ x0 ][ y0 ] ae(v)
}
}
7.4.7.6 코딩 유닛 시맨틱스
pred_mode_flag가 0 과 같으면 현재 코딩 유닛이 인터 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_flag가 1과 같으면 현재 코딩 유닛이 인트라 예측 모드에서 코딩된다는 것을 규정한다. 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 다음과 같이 유도된다:
- pred_mode_flag가 0 과 같으면, CuPredMode[ x ][ y ]는 MODE_INTER와 같아지도록 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 같으면), CuPredMode[ x ][ y ]는 MODE_INTRA와 같아지도록 설정된다.
pred_mode_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 cbWidth가 4와 같고 cbHeight가 4와 같은 코딩 유닛을 디코딩할 경우에는 1과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩할 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0 과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 스킵 모드에서 코딩되는 코딩 유닛을 디코딩하고 cbWidth가 4와 같고 cbHeight가 4와 같은 경우에는 sps_ibc_enabled_flag의 값과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩하는 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 MODE_IBC와 같아지도록 설정된다.
inter_pred_idc[ x0 ][ y0 ]는 list0, list1, 또는 양방향 예측이 표 7-9에 따라서 현재 코딩 유닛에 대해 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 ( x0, y0 )를 규정한다.
inter_pred_idc inter_pred_idc의 명칭
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
표 7-9 - 인터 예측 모드에 대한 명칭 연관성
inter_pred_idc[ x0 ][ y0 ]가 존재하지 않으면, 이것은 PRED_L0 와 같도록 추론된다.
8.5.2.1 종합적인 사항
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인, 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플들 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플들 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도의 루마 움직임 벡터들 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 레퍼런스 인덱스들 refIdxL0 및 refIdxL1,
- 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양방향 예측 가중치 인덱스 gbiIdx.
변수 LX가 현재 픽쳐의 RefPicList[ X ]라고 하고, X는 0 또는 1이다.
변수 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], refIdxL0 및 refIdxL1, 및 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ]을 유도하기 위하여, 다음 내용들이 적용된다:
- merge_flag[ xCb ][ yCb ]가 1과 같으면, 절 8.5.2.2에서 규정된 바와 같은 병합 모드를 위한 루마 움직임 벡터에 대한 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력들로 호출되고, 출력은 루마 움직임 벡터 mvL0[ 0 ][ 0 ], mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0, refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx이다.
- 그렇지 않으면, 다음 내용들이 적용된다:
- 변수 predFlagLX[ 0 ][0 ], mvLX[ 0 ][0 ] 및 refIdxLX 내에서, PRED_LX 내에서, 그리고 신택스 요소 ref_idx_lX 및 MvdLX 내에서 0 또는 1로 치환되는 X에 대하여, 다음 순서의 단계들이 적용된다:
1. 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]가 다음과 같이 유도된다:
- inter_pred_idc[ xCb ][ yCb ]가 PRED_LX 또는 PRED_BI와 같으면,
refIdxLX = ref_idx_lX[ xCb ][ yCb ] (8-266)
predFlagLX[ 0 ][0 ] = 1 (8-267)
- 그렇지 않으면, 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]는 다음에 의해서 규정된다:
refIdxLX = -1 (8-268)
predFlagLX[ 0 ][0 ] = 0 (8-269)
2. 변수 mvdLX는 다음과 같이 유도된다:
mvdLX[ 0 ] = MvdLX[ xCb ][ yCb ][ 0 ] (8-270)
mvdLX[ 1 ] = MvdLX[ xCb ][ yCb ][ 1 ] (8-271)
3. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 절 8.5.2.8 내의 루마 움직임 벡터 예측을 위한 유도 프로세스가 루마 코딩 블록 위치 ( xCb, yCb ), 코딩 블록 폭 cbWidth, 코딩 블록 높이 cbHeight 및 변수 refIdxLX를 입력으로서 호출되고, 출력은 mvpLX이다.
4. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 루마 움직임 벡터 mvLX[ 0 ][ 0 ]이 다음과 같이 유도된다:
uLX[ 0 ] = ( mvpLX[ 0 ] + mvdLX[ 0 ] + 218 ) % 218 (8-272)
mvLX[ 0 ][ 0 ][ 0 ] = ( uLX[ 0 ] >= 217 ) ? ( uLX[ 0 ] - 218 ): uLX[ 0 ] (8-273)
uLX[ 1 ] = ( mvpLX[ 1 ] + mvdLX[ 1 ] + 218 ) % 218 (8-274)
mvLX[ 0 ][ 0 ][ 1 ] = ( uLX[ 1 ] >= 217 ) ? ( uLX[ 1 ] - 218 ): uLX[ 1 ] (8-275)
주의1 - 앞서 규정된 바와 같은, mvLX[ 0 ][ 0 ][ 0 ] 및 mvLX[ 0 ][ 0 ][ 1 ] 의 결과적으로 얻어지는 값들은 언제나 -217 내지 217 - 1의 범위 안에 있을 것이고, 범위는 양단을 포함한다.
- 양방향 예측 가중치 인덱스 gbiIdx는 gbi_idx[ xCb ][ yCb ]와 같아지도록 설정된다.
다음 조건들 모두가 참이면, refIdxL1은 -1과 같아지도록 설정되고, predFlagL1은 0 과 같아지도록 설정되며, gbiIdx는 0 과 같아지도록 설정된다:
- predFlagL0[ 0 ][ 0 ]은 1과 같다.
- predFlagL1[ 0 ][ 0 ]은 1과 같다.
- ( cbWidth + cbHeight = = 8 ) | | ( cbWidth + cbHeight = = 12 )
- cbWidth는 4와 같다.
- cbHeight는 4와 같다.
절 8.5.2.16 에 규정된 바와 같은 이력에 기반한 움직임 벡터 예측기 목록에 대한 업데이트 프로세스는, 루마 움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0 및 refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx로 호출된다.
9.5.3.8 inter_pred_idc에 대한 이진화 프로세스
이러한 프로세스로 들어가는 입력은, 신택스 요소 inter_pred_idc에 대한 이진화 프로세스의 요청, 현재 루마 코딩 블록 폭 cbWidth 및 현재 루마 코딩 블록 높이 cbHeight이다.
이러한 프로세스의 출력은 신택스 요소의 이진화이다.
신택스 요소 inter_pred_idc에 대한 이진화는 표 9-9 에 규정된다.
inter_pred_idc의 값 inter_pred_idc의 명칭 Bin string
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12
0 PRED_L0 00 0
1 PRED_L1 01 1
2 PRED_BI 1 -
표 9-9 - inter_pred_idc에 대한 이진화
9.5.4.2.1 종합적인 사항
inter_pred_idc[ x0 ][ y0 ] ( cbWidth + cbHeight ) != 8 && ( cbWidth + cbHeight ) != 12 ? 7 - ( ( 1 +
Log2( cbWidth ) + Log2( cbHeight ) ) >> 1 )
: 4
4 na na na na
표 9-10 - 콘텍스트 코딩된 빈이 있는 신택스 요소로의 ctxInc의 할당
5.5 실시형태 #5 (4x4 인터 예측을 디스에이블하고, 4x8, 8x4 블록에 대한 양방향 예측을 디스에이블하며, 정규 병합 모드에 대한 공유된 병합 목록을 디스에이블함)
7.3.6.6 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 기술자
if( tile_group_type != I | | sps_ibc_enabled_flag ) {
if( treeType != DUAL_TREE_CHROMA && !( cbWidth == 4 && cbHeight == 4 && !sps_ibc_enabled_flag ) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && tile_group_type != I && !( cbWidth == 4 && cbHeight == 4 ) )
pred_mode_flag ae(v)
if( ( ( tile_group_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( tile_group_type != I && CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) &&
sps_ibc_enabled_flag && !( cbWidth == 4 && cbHeight == 4 && cu_skip_flag[ x0 ][ y0 ] = = 1 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
if( sps_pcm_enabled_flag &&
cbWidth >= MinIpcmCbSizeY && cbWidth <= MaxIpcmCbSizeY &&
cbHeight >= MinIpcmCbSizeY && cbHeight <= MaxIpcmCbSizeY )
pcm_flag[ x0 ][ y0 ] ae(v)
if( pcm_flag[ x0 ][ y0 ] ) {
while( !byte_aligned( ) )
pcm_alignment_zero_bit f(1)
pcm_sample( cbWidth, cbHeight, treeType)
} else {
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_LUMA ) {
if( ( y0 % CtbSizeY ) > 0 )
intra_luma_ref_idx[ x0 ][ y0 ] ae(v)
if (intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
( cbWidth <= MaxTbSizeY | | cbHeight <= MaxTbSizeY ) &&
( cbWidth * cbHeight > MinTbSizeY * MinTbSizeY ))
intra_subpartitions_mode_flag[ x0 ][ y0 ] ae(v)
if( intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 1 &&
cbWidth <= MaxTbSizeY && cbHeight <= MaxTbSizeY )
intra_subpartitions_split_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_ref_idx[ x0 ][ y0 ] = = 0 &&
intra_subpartitions_mode_flag[ x0 ][ y0 ] = = 0 )
intra_luma_mpm_flag[ x0 ][ y0 ] ae(v)
if( intra_luma_mpm_flag[ x0 ][ y0 ] )
intra_luma_mpm_idx[ x0 ][ y0 ] ae(v)
else
intra_luma_mpm_remainder[ x0 ][ y0 ] ae(v)
}
if( treeType = = SINGLE_TREE | | treeType = = DUAL_TREE_CHROMA )
intra_chroma_pred_mode[ x0 ][ y0 ] ae(v)
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
merge_flag[ x0 ][ y0 ] ae(v)
if( merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
mvd_coding( x0, y0, 0, 0 )
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag &&
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_flag[ x0 ][ y0 ] ae(v)
}
} else {
if( tile_group_type = = B )
inter_pred_idc[ x0 ][ y0 ] ae(v)
if( sps_affine_enabled_flag && cbWidth >= 16 && cbHeight >= 16 ) {
inter_affine_flag[ x0 ][ y0 ] ae(v)
if( sps_affine_type_flag && inter_affine_flag[ x0 ][ y0 ] )
cu_affine_type_flag[ x0 ][ y0 ] ae(v)
}
}
7.4.7.6 코딩 유닛 시맨틱스
pred_mode_flag가 0 과 같으면 현재 코딩 유닛이 인터 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_flag가 1과 같으면 현재 코딩 유닛이 인트라 예측 모드에서 코딩된다는 것을 규정한다. 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 다음과 같이 유도된다:
- pred_mode_flag가 0 과 같으면, CuPredMode[ x ][ y ]는 MODE_INTER와 같아지도록 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 같으면), CuPredMode[ x ][ y ]는 MODE_INTRA와 같아지도록 설정된다.
pred_mode_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 cbWidth가 4와 같고 cbHeight가 4와 같은 코딩 유닛을 디코딩할 경우에는 1과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩할 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0 과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은, I 타일 그룹을 디코딩할 경우 또는 스킵 모드에서 코딩되는 코딩 유닛을 디코딩하고 cbWidth가 4와 같고 cbHeight가 4와 같은 경우에는 sps_ibc_enabled_flag의 값과 같다고 추론되고, P 또는 B 타일 그룹을 디코딩하는 경우에는 0과 같다고 각각 추론된다.
pred_mode_ibc_flag가 1과 같으면, 변수 CuPredMode[ x ][ y ]는 x = x0..x0 + cbWidth - 1 및 y = y0..y0 + cbHeight - 1 에 대해서 MODE_IBC와 같아지도록 설정된다.
inter_pred_idc[ x0 ][ y0 ]는 list0, list1, 또는 양방향 예측이 표 7-9에 따라서 현재 코딩 유닛에 대해 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 ( x0, y0 )를 규정한다.
inter_pred_idc inter_pred_idc의 명칭
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12
0 PRED_L0 PRED_L0
1 PRED_L1 PRED_L1
2 PRED_BI n.a.
표 7-9 - 인터 예측 모드에 대한 명칭 연관성
inter_pred_idc[ x0 ][ y0 ]가 존재하지 않으면, 이것은 PRED_L0 와 같도록 추론된다.
8.5.2.1 종합적인 사항
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인, 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플들 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플들 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도의 루마 움직임 벡터들 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 레퍼런스 인덱스들 refIdxL0 및 refIdxL1,
- 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양방향 예측 가중치 인덱스 gbiIdx.
변수 LX가 현재 픽쳐의 RefPicList[ X ]라고 하고, X는 0 또는 1이다.
변수 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], refIdxL0 및 refIdxL1, 및 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ]을 유도하기 위하여, 다음 내용들이 적용된다:
- merge_flag[ xCb ][ yCb ]가 1과 같으면, 절 8.5.2.2에서 규정된 바와 같은 병합 모드를 위한 루마 움직임 벡터에 대한 유도 프로세스는 루마 위치 ( xCb, yCb ), 변수 cbWidth 및 cbHeight 입력들로 호출되고, 출력은 루마 움직임 벡터 mvL0[ 0 ][ 0 ], mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0, refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx이다.
- 그렇지 않으면, 다음 내용들이 적용된다:
- 변수 predFlagLX[ 0 ][0 ], mvLX[ 0 ][0 ] 및 refIdxLX 내에서, PRED_LX 내에서, 그리고 신택스 요소 ref_idx_lX 및 MvdLX 내에서 0 또는 1로 치환되는 X에 대하여, 다음 순서의 단계들이 적용된다:
5. 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]가 다음과 같이 유도된다:
- inter_pred_idc[ xCb ][ yCb ]가 PRED_LX 또는 PRED_BI와 같으면,
refIdxLX = ref_idx_lX[ xCb ][ yCb ] (8-266)
predFlagLX[ 0 ][0 ] = 1 (8-267)
- 그렇지 않으면, 변수 refIdxLX 및 predFlagLX[ 0 ][0 ]는 다음에 의해서 규정된다:
refIdxLX = -1 (8-268)
predFlagLX[ 0 ][0 ] = 0 (8-269)
6. 변수 mvdLX는 다음과 같이 유도된다:
mvdLX[ 0 ] = MvdLX[ xCb ][ yCb ][ 0 ] (8-270)
mvdLX[ 1 ] = MvdLX[ xCb ][ yCb ][ 1 ] (8-271)
7. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 절 8.5.2.8 내의 루마 움직임 벡터 예측을 위한 유도 프로세스가 루마 코딩 블록 위치 ( xCb, yCb ), 코딩 블록 폭 cbWidth, 코딩 블록 높이 cbHeight 및 변수 refIdxLX를 입력으로서 호출되고, 출력은 mvpLX이다.
4. predFlagLX[ 0 ][ 0 ]이 1과 같은 경우에는, 루마 움직임 벡터 mvLX[ 0 ][ 0 ]이 다음과 같이 유도된다:
uLX[ 0 ] = ( mvpLX[ 0 ] + mvdLX[ 0 ] + 218 ) % 218 (8-272)
m vLX[ 0 ][ 0 ][ 0 ] = ( uLX[ 0 ] >= 217 ) ? ( uLX[ 0 ] - 218 ): uLX[ 0 ] (8-273)
uLX[ 1 ] = ( mvpLX[ 1 ] + mvdLX[ 1 ] + 218 ) % 218 (8-274)
mvLX[ 0 ][ 0 ][ 1 ] = ( uLX[ 1 ] >= 217 ) ? ( uLX[ 1 ] - 218 ): uLX[ 1 ] (8-275)
주의1 - 앞서 규정된 바와 같은, mvLX[ 0 ][ 0 ][ 0 ] 및 mvLX[ 0 ][ 0 ][ 1 ] 의 결과적으로 얻어지는 값들은 언제나 -217 내지 217 - 1의 범위 안에 있을 것이고, 범위는 양단을 포함한다.
- 양방향 예측 가중치 인덱스 gbiIdx는 gbi_idx[ xCb ][ yCb ]와 같아지도록 설정된다.
다음 조건들 모두가 참이면, refIdxL1은 -1과 같아지도록 설정되고, predFlagL1은 0 과 같아지도록 설정되며, gbiIdx는 0 과 같아지도록 설정된다:
- predFlagL0[ 0 ][ 0 ]은 1과 같을 것.
- predFlagL1[ 0 ][ 0 ]은 1과 같을 것.
- ( cbWidth + cbHeight = = 8 ) | | ( cbWidth + cbHeight = = 12 )
- cbWidth는 4와 같을 것.
- cbHeight는 4와 같을 것.
절 8.5.2.16 에 규정된 바와 같은 이력에 기반한 움직임 벡터 예측기 목록에 대한 업데이트 프로세스는, 루마 움직임 벡터 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ], 레퍼런스 인덱스들 refIdxL0 및 refIdxL1, 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ], 및 양방향 예측 가중치 인덱스 gbiIdx로 호출된다.
8.5.2.2 병합 모드에 대한 루마 움직임 벡터를 위한 유도 프로세스
이러한 프로세스는 merge_flag[ xCb ][ yPb ]가 1과 같은 경우에만 호출되는데, 여기에서 ( xCb, yCb )는 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인 현재 루마 코딩 블록의 상단-좌측 샘플을 규정한다.
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인, 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 ( xCb, yCb ),
- 루마 샘플들 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플들 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도의 루마 움직임 벡터들 mvL0[ 0 ][ 0 ] 및 mvL1[ 0 ][ 0 ],
- 레퍼런스 인덱스들 refIdxL0 및 refIdxL1,
- 예측 목록 활용 플래그 predFlagL0[ 0 ][ 0 ] 및 predFlagL1[ 0 ][ 0 ],
- 양방향 예측 가중치 인덱스 gbiIdx.
양방향 예측 가중치 인덱스 gbiIdx는 0 과 같아지도록 설정된다.
변수 xSmr, ySmr, smrWidth, smrHeight, 및 smrNumHmvpCand는 다음과 같이 유도된다:
xSmr = IsInSmr[ xCb ][ yCb ] ? SmrX[ xCb ][ yCb ]: xCb (8-276)
ySmr = IsInSmr[ xCb ][ yCb ] ? SmrY[ xCb ][ yCb ]: yCb (8-277)
smrWidth = IsInSmr[ xCb ][ yCb ] ? SmrW[ xCb ][ yCb ]: cbWidth (8-278)
smrHeight = IsInSmr[ xCb ][ yCb ] ? SmrH[ xCb ][ yCb ]: cbHeight (8-279)
smrNumHmvpCand = IsInSmr[ xCb ][ yCb ] ? NumHmvpSmrCand: NumHmvpCand (8-280)
8.5.2.6 이력에 기반한 병합 후보를 위한 유도 프로세스
이러한 프로세스로 들어가는 입력들은 다음이다:
- 병합 후보 목록 mergeCandList,
- 현재 코딩 유닛이 공유된 병합 후보 영역 내에 있는지 여부를 규정하는 변수 isInSmr,
- 목록 내의 이용가능한 병합 후보들의 개수 numCurrMergeCand.
이러한 프로세스의 출력들은 다음이다:
- 수정된 병합 후보 목록 mergeCandList,
- 목록 내의 병합 후보의 수정된 개수 numCurrMergeCand.
변수 isPrunedA1 및 isPrunedB1 양자 모두는 FALSE와 같아지도록 설정된다.
어레이 smrHmvpCandList 및 변수 smrNumHmvpCand는 다음과 같이 유도된다:
smrHmvpCandList = isInSmr ? HmvpSmrCandList: HmvpCandList (8-353)
smrNumHmvpCand = isInSmr ? NumHmvpSmrCand: NumHmvpCand (8-354)
smrHmvpCandList[ hMvpIdx ] 내의 인덱스가 hMvpIdx = 1..smrNumHmvpCand인 각각의 후보에 대하여, 다음 순서의 단계들이 numCurrMergeCand가 ( MaxNumMergeCand - 1)과 같아질 때까지 반복된다:
1. 변수 sameMotion은 다음과 같이 유도된다:
- 다음 조건들 모두가 임의의 병합 후보 N에 대해서 참이면(N은 A1 또는 B1), sameMotion 및 isPrunedN 양자 모두가 TRUE와 같아지도록 설정된다:
- hMvpIdx는 2 이하이다.
- 후보 smrHmvpCandList[ smrNumHmvpCand - hMvpIdx]는 병합 후보 N과 같다.
- isPrunedN은 FALSE와 같다.
- 그렇지 않으면, sameMotion이 FALSE와 같아지도록 설정된다.
2. sameMotion이 FALSE와 같으면, 후보 smrHmvpCandList[ smrNumHmvpCand - hMvpIdx]가 다음과 같이 병합 후보 목록에 추가된다:
mergeCandList[ numCurrMergeCand++ ] = smrHmvpCandList[ smrNumHmvpCand - hMvpIdx ] (8-355)
9.5.3.8 inter_pred_idc에 대한 이진화 프로세스
이러한 프로세스로 들어가는 입력은, 신택스 요소 inter_pred_idc에 대한 이진화 프로세스의 요청, 현재 루마 코딩 블록 폭 cbWidth 및 현재 루마 코딩 블록 높이 cbHeight이다.
이러한 프로세스의 출력은 신택스 요소의 이진화이다.
신택스 요소 inter_pred_idc에 대한 이진화는 Table 99에 규정된다.
inter_pred_idc의 값 inter_pred_idc의 명칭 Bin string
( cbWidth + cbHeight )  !=  8 ( cbWidth + cbHeight )  = =  8 | | ( cbWidth + cbHeight )  = =  12
0 PRED_L0 00 0
1 PRED_L1 01 1
2 PRED_BI 1 -
표 9-9 - inter_pred_idc에 대한 이진화
9.5.4.2.1 종합적인 사항
inter_pred_idc[ x0 ][ y0 ] ( cbWidth + cbHeight ) != 8 && ( cbWidth + cbHeight ) != 12 ? 7 - ( ( 1 +
Log2( cbWidth ) + Log2( cbHeight ) ) >> 1 )
: 4
4 na na na na
표 9-10 - 콘텍스트 코딩된 빈이 있는 신택스 요소로의 ctxInc의 할당
도 11은 비디오 처리 장치(1100)의 블록도이다. 장치(1100)는 본 명세서에서 설명되는 방법들 중 하나 이상을 구현하기 위하여 사용될 수 있다. 장치(1100)는 스마트 폰, 태블릿, 컴퓨터, 사물 인터넷(Internet of Things; IoT) 수신기 등 내에 구현될 수 있다. 장치(1100)는 하나 이상의 프로세서(1102), 하나 이상의 메모리(1104) 및 비디오 처리 하드웨어(1106)를 포함할 수 있다. 프로세서(들)(1102)는 본 명세서에서 설명되는 하나 이상의 방법을 구현하도록 구성될 수 있다. 메모리(메모리들)(1104)는 본 명세서에서 설명되는 방법 및 기법들을 구현하기 위한 데이터 및 코드를 저장하기 위해서 사용될 수 있다. 비디오 처리 하드웨어(1106)는 하드웨어 회로부 내에서, 본 명세서에서 설명되는 일부 기법을 구현하기 위하여 사용될 수 있다.
도 12는 비디오 처리의 하나의 예시적인 방법(1200)에 대한 흐름도이다. 이러한 방법(1200)은, 어파인 코딩되는 현재 비디오 블록의 대표 움직임 벡터와 현재 비디오 블록의 서브-블록의 움직임 벡터 사이의 크기 제한 사항을 결정하는 단계(1202) 및 상기 크기 제한 사항을 사용하여, 현재 비디오 블록 또는 서브블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계(1204)를 포함한다.
본 명세서에서는, 용어 "비디오 처리"가 비디오 인코딩, 비디오 디코딩, 비디오 압축 또는 비디오 압축해제를 가리킬 수 있다. 예를 들어, 비디오의 픽셀 표현으로부터 대응하는 비트스트림 표현으로의 변환 또는 그 반대 변환 도중에, 비디오 압축 알고리즘이 적용될 수 있다. 현재 비디오 블록의 비트스트림 표현은, 예를 들어 신택스에 의해 규정되는 바와 같이 비트스트림 내에서 공동으로 위치되거나 다른 자리에 분산되는 비트들에 대응할 수 있다. 예를 들어, 매크로블록은, 변환되고 코딩된 오차 잔차 값에 관하여 그리고 또한 비트스트림 내의 헤더 및 다른 필드 내에 있는 비트들을 사용하여 인코딩될 수 있다.
개시된 기법들이, 메모리 요구량 또는 라인 버퍼 크기 요구량이 줄어들기 때문에 비디오 처리의 구현 복잡도가 감소되는 실시형태를 구현하는 데에 유용하다는 것이 이해될 것이다. 본 명세서에서 개시되는 기법들 중 일부는 후속하는 절들에 기반한 설명을 사용하여 설명될 수 있다.
1. 비디오 처리 방법으로서,
어파인 코딩되는 현재 비디오 블록의 대표 움직임 벡터와 현재 비디오 블록의 서브-블록의 움직임 벡터 사이의 크기 제한 사항을 결정하는 단계; 및
상기 크기 제한 사항을 사용하여, 현재 비디오 블록 또는 서브블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
2. 제 1 절에 있어서,
상기 변환을 수행하는 단계는,
상기 픽셀 값으로부터 상기 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
3. 제 1 절에 있어서,
상기 변환을 수행하는 단계는,
상기 비트스트림 표현으로부터 상기 픽셀 값을 생성하는 것을 포함하는, 비디오 처리 방법.
4. 제 1 절 내지 제 3 절 중 어느 한 절에 있어서,
상기 크기 제한 사항은,
MVx>=MV'x-DH0 및 MVx<=MV'x+DH1 및 MVy>=MV'y-DV0 및 MVy<=MV'y+DV1 에 따른 서브-블록의 움직임 벡터 (MVx, MVy)의 제약 값을 포함하고,
MV' = (MV'x, MV'y)이며,
MV'는 대표 움직임 벡터를 나타내고,
DH0, DH1, DV0 및 DV1은 양수를 나타내는, 비디오 처리 방법.
5. 제 4 절에 있어서,
상기 크기 제한 사항은, 다음:
i. DH0이 DH1과 같거나 DV0이 DV1과 같을 것
ii. DH0이 DV0 과 같거나 또는 DH1이 DV1과 같을 것
iii. DH0 및 DH1이 서로 다르거나 DV0 및 DV1이 서로 다를 것
iv. DH0, DH1, DV0 및 DV1이, 비디오 파라미터 세트 레벨 또는 시퀀스 파라미터 세트 레벨 또는 픽쳐 파라미터 세트 레벨 또는 슬라이스 헤더 레벨 또는 타일 그룹 헤더 레벨 또는 타일 레벨 또는 코딩 트리 유닛 레벨 또는 코딩 유닛 레벨 또는 예측 유닛 레벨에서, 상기 비트스트림 표현 내에서 시그널링될 것
v. DH0, DH1, DV0 및 DV1이 비디오 처리의 모드의 함수일 것
vi. DH0, DH1, DV0 및 DV1이 현재 비디오 블록의 폭 및 높이에 따라 달라질 것
vii. DH0, DH1, DV0 및 DV1이 현재 비디오 블록이 단방향 예측 또는 양방향 예측을 사용하여 코딩되는지 여부에 따라 달라질 것
viii. DH0, DH1, DV0 및 DV1이 상기 서브-블록의 위치에 따라 달라질 것
중 적어도 하나를 포함하는, 비디오 처리 방법.
6. 제 1 절 내지 제 5 절 중 어느 한 절에 있어서,
상기 대표 움직임 벡터는 상기 현재 비디오 블록의 제어 포인트 움직임 벡터에 대응하는, 비디오 처리 방법.
7. 제 1 절 내지 제 5 절 중 어느 한 절에 있어서,
상기 대표 움직임 벡터는 상기 현재 비디오 블록의 코너 서브-블록에 대한 움직임 벡터에 대응하는, 비디오 처리 방법.
8. 제 1 절 내지 제 7 절 중 어느 한 절에 있어서,
상기 서브-블록의 움직임 벡터 및 상기 대표 움직임 벡터에 대해서 사용되는 정밀도는,
상기 비트스트림 표현 내의 움직임 벡터 시그널링 정밀도에 대응하는, 비디오 처리 방법.
9. 제 1 절 내지 제 7 절 중 어느 한 절에 있어서,
상기 서브-블록의 움직임 벡터 및 상기 대표 움직임 벡터에 대해서 사용되는 정밀도는,
상기 움직임 벡터를 저장하기 위한 저장 정밀도에 대응하는, 비디오 처리 방법.
10. 비디오 처리 방법으로서,
어파인 코딩된 현재 비디오 블록에 대하여 현재 비디오 블록의 하나 이상의 서브-블록을 결정하는 단계 - 각각의 서브-블록은 MxN 픽셀의 크기를 가지고, M과 N은 2 또는 4의 배수임 -;
상기 서브-블록의 움직임 벡터를 크기 제한 사항에 부합하게 하는(conforming) 단계; 및
트리거에 기반하여 조건부로, 상기 크기 제한 사항을 사용하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
11. 제 10 절에 있어서,
상기 변환을 수행하는 단계는,
상기 픽셀 값으로부터 상기 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
12. 제 10 절에 있어서,
상기 변환을 수행하는 단계는,
상기 비트스트림 표현으로부터 상기 픽셀 값을 생성하는 것을 포함하는, 비디오 처리 방법.
13. 제 10 절 내지 제 12 절 중 어느 한 절에 있어서,
상기 크기 제한 사항은,
상기 현재 비디오 블록의 서브-블록 움직임 벡터들의 정수 부분들 사이의 최대 차이를 K 픽셀 이하로 한정하고,
K는 정수인, 비디오 처리 방법.
14. 제 10 절 내지 제 13 절 중 어느 한 절에 있어서,
상기 방법은,
상기 현재 비디오 블록이 양방향 예측을 사용하여 코딩되는 경우에만 적용되는, 비디오 처리 방법.
15. 제 10 절 내지 제 13 절 중 어느 한 절에 있어서,
상기 방법은,
상기 현재 비디오 블록이 단방향 예측을 사용하여 코딩되는 경우에만 적용되는, 비디오 처리 방법.
16. 제 10 절 내지 제 13 절 중 어느 한 절에 있어서,
M, N 또는 K의 값은, 상기 현재 비디오 블록의 단방향 예측 또는 양방향 예측 모드의 함수인, 비디오 처리 방법.
17. 제 10 절 내지 제 13 절 중 어느 한 절에 있어서,
M, N 또는 K의 값은, 상기 현재 비디오 블록의 높이 또는 폭의 함수인, 비디오 처리 방법.
18. 제 10 절 내지 제 17 절 중 어느 한 절에 있어서,
상기 트리거는,
비디오 파라미터 세트 레벨 또는 시퀀스 파라미터 세트 레벨 또는 픽쳐 파라미터 세트 레벨 또는 슬라이스 헤더 레벨 또는 타일 그룹 헤더 레벨 또는 타일 레벨 또는 코딩 트리 유닛 레벨 또는 코딩 유닛 레벨 또는 예측 유닛 레벨에서, 상기 비트스트림 표현 내에 포함되는, 비디오 처리 방법.
19. 제 18 절에 있어서,
상기 트리거는 M, N 또는 K의 값을 시그널링하는, 비디오 처리 방법.
20. 제 10 절 내지 제 19 절 중 어느 한 절에 있어서,
상기 현재 비디오 블록의 하나 이상의 서브-블록은,
상기 현재 비디오 블록에 대해서 사용되는 어파인 코딩의 타입에 기반하여 계산되는, 비디오 처리 방법.
21. 제 20 절에 있어서,
단방향 예측 및 양방향 예측 어파인 예측 모드의 서브-블록들을 계산하기 위하여, 두 가지 상이한 방법들이 사용되는, 비디오 처리 방법.
22. 제 21 절에 있어서,
상기 현재 비디오 블록이 양방향 예측된 어파인 블록인 경우에,
상이한 레퍼런스 목록들로부터의 서브-블록들의 폭 또는 높이는 서로 다른, 비디오 처리 방법.
23. 제 20 절 내지 제 22 절 중 어느 한 절에 있어서,
상기 하나 이상의 서브-블록은 루마 성분에 대응하는, 비디오 처리 방법.
24. 제 10 절 내지 제 23 절 중 어느 한 절에 있어서,
상기 하나 이상의 서브-블록 중 하나의 서브-블록의 폭 및 높이는,
상기 현재 비디오 블록의 움직임 벡터 값 및 상기 하나 이상의 서브-블록 중 하나의 서브-블록의 움직임 벡터 값 사이의 움직임 차이 벡터를 사용하여 결정되는, 비디오 처리 방법.
25. 제 20 절 내지 제 23 절 중 어느 한 절에 있어서,
상기 계산은,
상기 비트스트림 표현 내에서 시그널링되는 픽셀 정밀도에 기반하는, 비디오 처리 방법.
26. 비디오 처리 방법으로서,
현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계; 및
결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을, 상기 현재 비디오 블록에 대한 양방향 예측 인코딩 모드를 제외함으로써 수행하는 단계를 포함하는, 비디오 처리 방법.
27. 비디오 처리 방법으로서,
현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계; 및
결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고,
인터 예측 모드가 상기 크기 조건에 따라서 상기 비트스트림 표현 내에서 시그널링되는, 비디오 처리 방법.
28. 비디오 처리 방법으로서,
현재 비디오 블록이 크기 조건을 만족시킨다고 결정하는 단계; 및
결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고,
상기 변환 도중에 병합 후보 목록을 생성하는 것은 상기 크기 조건에 의존하는, 비디오 처리 방법.
29. 비디오 처리 방법으로서,
현재 비디오 블록의 자식 코딩 유닛이 크기 조건을 만족시킨다고 결정하는 단계; 및
결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 수행하는 단계를 포함하고,
상기 자식 코딩 유닛을 생성하기 위하여 사용되는 코딩 트리 분할 프로세스는 상기 크기 조건에 의존하는, 비디오 처리 방법.
30. 제 26 절 내지 제 29 절 중 어느 한 절에 있어서,
상기 크기 조건은 다음:
(a) w가 T1과 같고 h가 T2 와 같을 것, 또는 h가 T1과 같고 w가 T2 와 같을 것;
(b) w가 T1과 같고 h가 T2 이하일 것, 또는 h가 T1 와 같고 w가 T2 이하일 것;
(c) w가 T1 이하이고 h가 T2 이하일 것, 또는 h가 T1 이하이고 w가 T2 이하일 것
중 하나이고,
w는 폭이고 h는 높이인, 비디오 처리 방법.
31. 제 30 절에 있어서,
T1 = 8 이고 T2 = 8 이거나, T1 = 8 이고 T2 = 4 이거나, T1=4 이고 T2=4 이거나, T1 = 4 이고 T2 = 16 인, 비디오 처리 방법.
32. 제 26 절 내지 제 29 절 중 어느 한 절에 있어서,
상기 변환은,
상기 비트스트림 표현을 상기 현재 비디오 블록의 픽셀 값으로부터 생성하는 것 또는 상기 현재 비디오 블록의 픽셀 값을 상기 비트스트림 표현으로부터 생성하는 것을 포함하는, 비디오 처리 방법.
33. 비디오 처리 방법으로서,
현재 비디오 블록에 대한 일반화된 양방향 예측(GBi) 프로세스에 대한 가중치 인덱스를 상기 현재 비디오 블록의 위치에 기반하여 결정하는 단계; 및
상기 GBi 프로세스를 구현하도록, 상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 상기 가중치 인덱스를 사용하여 수행하는 단계를 포함하는, 비디오 처리 방법.
34. 제 33 절에 있어서,
상기 변환은,
상기 비트스트림 표현을 상기 현재 비디오 블록의 픽셀 값으로부터 생성하는 것 또는 상기 현재 비디오 블록의 픽셀 값을 상기 비트스트림 표현으로부터 생성하는 것을 포함하는, 비디오 처리 방법.
35. 제 33 절 또는 제 34 절에 있어서,
상기 결정하는 단계는,
제 1 위치에 있는 상기 현재 비디오 블록에 대하여, 이웃하는 블록의 다른 가중치 인덱스를 승계 또는 예측하는 것, 및
제 2 위치에 있는 상기 현재 비디오 블록에 대하여, 상기 이웃하는 블록으로부터 승계하지 않고 GBI를 계산하는 것을 포함하는, 비디오 처리 방법.
36. 제 35 절에 있어서,
상기 제 2 위치는,
상기 이웃하는 블록과 다른 코딩 트리 유닛 내에 위치된 상기 현재 비디오 블록을 포함하는, 비디오 처리 방법.
37. 제 35 절에 있어서,
상기 제 2 위치는,
상기 이웃하는 블록과 다른 코딩 트리 유닛 라인 또는 다른 코딩 트리 유닛 행 내에 있는 상기 현재 비디오 블록에 대응하는, 비디오 처리 방법.
38. 비디오 처리 방법으로서,
현재 비디오 블록이 인트라-인터 예측(IIP) 코딩된 블록으로서 코딩된다고 결정하는 단계; 및
상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을, 상기 현재 비디오 블록의 인트라-예측 모드 또는 최고 가능성 모드(most probable mode; MPM)를 결정하기 위한 단순화 규칙(simplification rule)을 사용하여 수행하는 단계를 포함하는, 비디오 처리 방법.
39. 제 38 절에 있어서,
상기 변환은,
상기 비트스트림 표현을 상기 현재 비디오 블록의 픽셀 값으로부터 생성하는 것 또는 상기 현재 비디오 블록의 픽셀 값을 상기 비트스트림 표현으로부터 생성하는 것을 포함하는, 비디오 처리 방법.
40. 제 38 절 또는 제 39 절에 있어서,
상기 단순화 규칙은,
이웃하는 비디오 블록의 다른 인트라-예측 코딩 모드로부터 독립적이 되도록 인트라-인터 예측(IIP) 코딩되는 현재 비디오 블록의 인트라-예측 코딩 모드를 결정하는 것을 규정하는, 비디오 처리 방법.
41. 제 38 절 또는 제 39 절에 있어서,
상기 인트라-예측 코딩 모드는,
이웃하는 블록들의 코딩으로부터 독립적인 코딩을 사용하여, 상기 비트스트림 표현 내에 표현되는, 비디오 처리 방법.
42. 제 38 절 내지 제 40 절 중 어느 한 절에 있어서,
상기 단순화 규칙은,
인트라-코딩된 블록의 코딩 모드를 인트라-예측 코딩된 블록의 코딩 모드보다 선호하도록, 선택에 우선순위를 부여하도록 규정하는, 비디오 처리 방법.
43. 제 38 절에 있어서,
상기 단순화 규칙은,
IIP 코딩된 이웃하는 블록으로부터의 인트라 예측 모드를 삽입하기 이전에, 인트라-코딩된 이웃하는 블록들로부터의 인트라 예측 모드를 삽입함으로써, 상기 MPM을 결정하는 것을 규정하는, 비디오 처리 방법.
44. 제 38 절에 있어서,
상기 단순화 규칙은,
다른 보통의 인트라-코딩된 블록에 대해서 사용되는 것과 같은 구성 프로세스를, 상기 MPM을 결정하기 위하여 사용하도록 규정하는, 비디오 처리 방법.
45. 비디오 처리 방법으로서,
현재 비디오 블록이 단순화 기준을 만족시킨다고 결정하는 단계; 및
상기 현재 비디오 블록과 비트스트림 표현 사이의 변환을, 상기 변환을 위한 인터-인트라 예측 모드의 사용을 디스에이블함으로써 또는 상기 변환을 위해 사용되는 추가적인 코딩 툴을 디스에이블함으로써 수행하는 단계를 포함하는, 비디오 처리 방법.
46. 제 45 절에 있어서,
상기 변환은,
상기 비트스트림 표현을 상기 현재 비디오 블록의 픽셀 값으로부터 생성하는 것 또는 상기 현재 비디오 블록의 픽셀 값을 상기 비트스트림 표현으로부터 생성하는 것을 포함하는, 비디오 처리 방법.
47. 제 45 절 또는 제 46 절에 있어서,
상기 단순화 기준은,
상기 현재 비디오 블록의 폭 또는 높이가 T1과 같을 것을 포함하고,
T1은 정수인, 비디오 처리 방법.
48. 제 45 절 또는 제 46 절에 있어서,
상기 단순화 기준은,
상기 현재 비디오 블록의 폭 또는 높이가 T1보다 클 것을 포함하고,
T1은 정수인, 비디오 처리 방법.
49. 제 45 절 또는 제 46 절에 있어서,
상기 단순화 기준은,
상기 현재 비디오 블록의 폭이 T1과 같을 것, 및 상기 현재 비디오 블록의 높이가 T2 와 같을 것을 포함하는, 비디오 처리 방법.
48. 제 45 절 또는 제 46 절에 있어서,
상기 단순화 기준은,
상기 현재 비디오 블록이 양방향 예측 모드를 사용한다고 규정하는, 비디오 처리 방법.
49. 제 45 절 또는 제 46 절에 있어서,
상기 추가적인 코딩 툴은 양방향성 광학적 흐름(bi-directional optical flow; BIO) 코딩을 포함하는, 비디오 처리 방법.
50. 제 45 절 또는 제 46 절에 있어서,
상기 추가적인 코딩 툴은, 중첩된 블록 움직임 보상 모드를 포함하는, 비디오 처리 방법.
51. 비디오 처리 방법으로서,
현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 움직임 벡터 기반 인코딩 프로세스를 사용하여 수행하는 단계를 포함하고,
(a) 변환 프로세스 도중에 정밀도 P1이 공간적 움직임 예측 결과를 저장하기 위하여 사용되고, 정밀도 P2가 시간적 움직임 예측 결과를 저장하기 위하여 사용되며, P1 및 P2는 분수이고, 또는
(b) 정밀도 Px가 x-움직임 벡터를 저장하기 위하여 사용되고, 정밀도 Py가 y-움직임 벡터를 저장하기 위하여 사용되며, Px 및 Py는 분수인, 비디오 처리 방법.
52. 제 51 절에 있어서,
P1, P2, Px 및 Py는 상이한 숫자인, 비디오 처리 방법.
53. 제 52 절에 있어서,
P1은 1/16 루마 픽셀이고, P2는 1/4 루마 픽셀이거나,
P1은 1/16 루마 픽셀이고, P2는 1/8 루마 픽셀이거나,
P1은 1/8 루마 픽셀이고, P2는 1/4 루마 픽셀이거나,
P1은 1/8 루마 픽셀이고, P2는 1/8 루마 픽셀이거나,
P2는 1/16 루마 픽셀이고, P1은 1/4 루마 픽셀이거나,
P2는 1/16 루마 픽셀이고, P1은 1/8 루마 픽셀이거나,
P2는 1/8 루마 픽셀이고, P1은 1/4 루마 픽셀인, 비디오 처리 방법.
54. 제 51 절 또는 제 52 절에 있어서,
P1 및 P2는,
상기 비트스트림 표현 내에 포함된 상이한 시간 층들에 내의 상이한 픽쳐들에 대해서 다른, 비디오 처리 방법.
55. 제 51 절 또는 제 52 절에 있어서,
계산된 움직임 벡터는,
시간적 움직임 예측으로서 저장되기 이전에 정밀도 정정 프로세스를 통해서 처리되는, 비디오 처리 방법.
56. 제 51 절 또는 제 52 절에 있어서,
상기 저장하는 것은,
x-움직임 벡터 및 y-움직임 벡터를 N 비트 정수로서 저장하는 것을 포함하고,
x-움직임 벡터들의 값들의 범위는 [MinX, MaxX]이고, y-움직임 벡터들의 값들의 범위는 [MinY, MaxY]이며,
상기 범위들은 다음:
a. MinX가 MinY와 같음,
b. MaxX가 MaxY와 같음,
c. {MinX, MaxX}가 Px에 의존함;
d. {MinY, MaxY}가 Py에 의존함;
e. {MinX, MaxX, MinY, MaxY}가 N에 의존함;
f. {MinX, MaxX, MinY, MaxY}가, 공간적 움직임 예측을 위해 저장된 MV 및 시간적 움직임 예측을 위해 저장된 다른 MV에 대해서 상이함;
g. {MinX, MaxX, MinY, MaxY}가 상이한 시간 층들 내의 픽쳐들에 대해서 상이함;
h. {MinX, MaxX, MinY, MaxY}가 상이한 폭 또는 높이를 가지는 픽쳐들에 대해서 상이함;
i. {MinX, MaxX}가 상이한 폭을 가지는 픽쳐들에 대해서 상이함;
j. {MinY, MaxY}가 상이한 높이를 가지는 픽쳐들에 대해서 상이함;
k. MVx가, 공간적 움직임 예측을 위해서 저장되기 이전에 [MinX, MaxX]로 클리핑됨;
l. MVx가, 시간적 움직임 예측을 위해서 저장되기 이전에 [MinX, MaxX]로 클리핑됨;
m. MVy가, 공간적 움직임 예측을 위해서 저장되기 이전에 [MinY, MaxY]로 클리핑됨;
n. MVy가, 시간적 움직임 예측을 위해서 저장되기 이전에 [MinY, MaxY]로 클리핑됨
중 하나 이상을 만족시키는, 비디오 처리 방법.
59. 비디오 처리 방법으로서,
현재 비디오 블록의 W2xH2 크기의 큰 서브-블록 내의 W1xH1 크기의 작은 서브-블록을, (W2 + N - 1 - PW) * (H2 + N - 1 - PH) 블록을 페치함으로써 보간하는 단계;
페치된 블록을 픽셀 패딩하는 단계;
픽셀 패딩된 블록에 경계 픽셀 반복(boundary pixel repeating)을 수행하고 상기 작은 서브-블록의 픽셀 값을 획득하는 단계 - W1, W2, H1, H2, 및 PW 및 PH는 정수임 -; 및
상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 상기 작은 서브-블록의 보간된 픽셀 값을 사용하여 수행하는 단계를 포함하는, 비디오 처리 방법.
60. 제 59 절에 있어서,
상기 변환은,
상기 비트스트림 표현으로부터 상기 현재 비디오 블록을 생성하는 것, 또는 상기 현재 서브-블록으로부터 상기 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
61. 제 59 절 또는 제 60 절에 있어서,
W2=H2=8 이고, W1=H1=4 이며, PW=PH=0 인, 비디오 처리 방법.
62. 비디오 처리 방법으로서,
WxH 차원의 현재 비디오 블록 및 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환 도중에, 움직임 보상 동작 중에 (W + N - 1 - PW) * (W + N - 1 - PH) 레퍼런스 픽셀을 페치하고 레퍼런스 픽셀을 페치된 레퍼런스 픽셀 밖에 패딩함으로써 상기 움직임 보상 동작을 수행하는 단계; 및
상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 상기 움직임 보상 동작의 결과를 사용하여 수행하는 단계를 포함하고,
W, H, N, PW 및 PH는 정수인, 비디오 처리 방법.
63. 제 62 절에 있어서,
상기 변환은,
상기 비트스트림 표현으로부터 상기 현재 비디오 블록을 생성하는 것, 또는 상기 현재 서브-블록으로부터 상기 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
64. 제 62 절 또는 제 63 절에 있어서,
상기 패딩하는 것은,
페치된 픽셀의 좌측 또는 우측 경계를 반복시키는 것을 포함하는, 비디오 처리 방법.
65. 제 62 절 또는 제 63 절에 있어서,
상기 패딩하는 것은,
페치된 픽셀의 상단 또는 하단 경계를 반복시키는 것을 포함하는, 비디오 처리 방법.
66. 제 62 절 또는 제 63 절에 있어서,
상기 패딩하는 것은,
픽셀 값을 상수로 설정하는 것을 포함하는, 비디오 처리 방법.
67. 제 38 절에 있어서,
상기 규칙은,
다른 인트라-코딩된 블록들에 대해서 사용된 것과 같은 산술 코딩 콘텍스트가 상기 변환 도중에 사용된다고 규정하는, 비디오 처리 방법.
68. 제 38 절에 있어서,
상기 현재 비디오 블록의 변환은,
상기 현재 비디오 블록에 대한 MPM을 사용하는 것을 제외하는, 비디오 처리 방법.
69. 제 38 절에 있어서,
상기 단순화 규칙은,
IIP 코딩된 블록인 상기 현재 비디오 블록의 비트스트림 표현에 대해서 DC 및 평면 모드만을 사용하도록 규정하는, 비디오 처리 방법.
70. 제 38 절에 있어서,
상기 단순화 규칙은,
루마 및 크로마 성분들에 대해서 상이한 인트라-예측 모드들을 규정하는, 비디오 처리 방법.
71. 제 44 절에 있어서,
상기 MPM들의 서브세트가,
IIP 코딩되는 상기 현재 비디오 블록에 대해서 사용되는, 비디오 처리 방법.
72. 제 38 절에 있어서,
상기 단순화 규칙은,
상기 MPM이, MPM 목록 내에 포함된 인트라 예측 모드에 기반하여 선택된다는 것을 표시하는, 비디오 처리 방법.
73. 제 38 절에 있어서,
상기 단순화 규칙은,
MPM들의 서브세트가 MPM 목록으로부터 선택될 것이고, 상기 서브세트와 연관된 모드 인덱스를 시그널링할 것이라는 것을 표시하는, 비디오 처리 방법.
74. 제 38 절에 있어서,
인트라 MPM 모드들을 코딩하기 위하여 사용되는 콘텍스트가,
IIP 코딩되는 상기 현재 비디오 블록에 대한 인트라 모드를 코딩하기 위하여 사용되는, 비디오 처리 방법.
75. 제 44 절에 있어서,
상기 현재 비디오 블록에 대해서 생성되는 인트라-예측 블록 및 인터-예측 블록에 대해서 동일한 가중치가 사용되고,
상기 현재 비디오 블록은 IIP 코딩된 블록인, 비디오 처리 방법.
76. 제 44 절에 있어서,
상기 현재 비디오 블록에 대한 IIP 코딩 프로세스에서, 위치들에 대해서 제로 가중치들이 사용되는, 비디오 처리 방법.
77. 제 77 절에 있어서,
상기 제로 가중치들은 상기 IIP 코딩 프로세스에서 사용되는 인트라 예측 블록에 적용되는, 비디오 처리 방법.
78. 제 77 절에 있어서,
상기 제로 가중치들은 상기 IIP 코딩 프로세스에서 사용되는 인터 예측 블록에 적용되는, 비디오 처리 방법.
79. 비디오 처리 방법으로서,
비디오 블록의 크기에 기반하여, 상기 현재 비디오 블록의 양방향 예측 또는 단방향 예측이 허용되지 않는다고 결정하는 단계; 및
결정 결과에 기반하여, 상기 현재 비디오 블록의 비트스트림 표현과 픽셀 값 사이의 변환을 양방향 예측 또는 단방향 예측 모드를 디스에이블함으로써 수행하는 단계를 포함하는, 비디오 처리 방법. 예를 들어, 허용되지 않는 모드들은 현재 비디오 블록을 인코딩 또는 디코딩하기 위해서 사용되지 않는다. 변환 동작은 비디오 코딩 또는 압축, 또는 비디오 디코딩 또는 압축해제를 나타낼 수 있다.
80. 제 79 절에 있어서,
상기 현재 비디오 블록은 4x8 이고,
상기 결정하는 단계는,
양방향 예측이 허용되지 않는다고 결정하는 것을 포함하는, 비디오 처리 방법. 다른 예들은 예 5 에서 제공된다.
81. 제 79 절에 있어서,
상기 현재 비디오 블록은 4x8 또는 8x4 이고,
상기 결정하는 단계는,
양방향 예측이 허용되지 않는다고 결정하는 것을 포함하는, 비디오 처리 방법.
82. 제 79 절에 있어서,
상기 현재 비디오 블록은 4xN이고, N은 16 이하의 정수이며,
상기 결정하는 단계는, 양방향 예측이 허용되지 않는다고 결정하는 것을 포함하는, 비디오 처리 방법.
83. 제 26 절 내지 제 29 절 및 제 79 절 내지 제 82 절 중 어느 한 절에 있어서,
상기 현재 블록의 크기는,
상기 현재 블록의 색성분 또는 루마 성분의 크기에 대응하는, 비디오 처리 방법.
84. 제 83 절에 있어서,
양방향 예측 또는 단방향 예측을 디스에이블하는 것은,
상기 현재 비디오 블록의 세 개의 성분들 모두에 적용되는, 비디오 처리 방법.
85. 제 83 절에 있어서,
양방향 예측 또는 단방향 예측을 디스에이블하는 것은,
그 크기가 상기 현재 블록의 크기로서 사용되는 색성분에만 적용되는, 비디오 처리 방법.
86. 제 79 절 내지 제 85 절 중 어느 한 절에 있어서,
상기 변환은,
양방향 예측을 디스에이블하고, 더 나아가 양방향 예측되는 병합 후보를 사용하며, 그 후에 오직 하나의 레퍼런스 목록으로부터의 오직 하나의 움직임 벡터를 상기 현재 비디오 블록에 할당함으로써 수행되는, 비디오 처리 방법.
87. 제 79 절에 있어서,
상기 현재 비디오 블록은 4x4 이고,
상기 결정하는 단계는,
양방향 예측 및 단방향 예측 양자 모두가 허용되지 않는다고 결정하는 것을 포함하는, 비디오 처리 방법.
88. 제 87 절에 있어서,
상기 현재 비디오 블록은 인트라-블록으로서 코딩되는, 비디오 처리 방법.
89. 제 87 절에 있어서,
상기 현재 비디오 블록은,
정수 픽셀 움직임 벡터들을 사용하는 것으로 제한되는, 비디오 처리 방법.
제 78 절 내지 제 89 절에 대한 추가적인 예들과 실시형태들은 예 5 에서 설명된다.
90. 비디오를 처리하는 방법으로서,
현재 비디오 블록의 크기에 기반하여, 상기 현재 비디오 블록에 대한 비디오 코딩 조건을 결정하는 단계; 및
상기 비디오 코딩 조건에 기반하여, 상기 현재 비디오 블록과 상기 현재 비디오 블록의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
91. 제 90 절에 있어서,
상기 비디오 코딩 조건은,
상기 비트스트림 표현 내에서 스킵 플래그 또는 인트라 블록 코딩 플래그를 선택적으로 시그널링하는 것을 규정하는, 비디오 처리 방법.
92. 제 90 절 또는 제 91 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록에 대한 예측 모드를 선택적으로 시그널링하는 것을 규정하는, 비디오 처리 방법.
93. 제 90 절 내지 제 92 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록의 삼각형 모드 코딩을 선택적으로 시그널링하는 것을 규정하는, 비디오 처리 방법.
94. 제 90 절 내지 제 93 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록에 대한 인터 예측 방향을 선택적으로 시그널링하는 것을 규정하는, 비디오 처리 방법.
95. 제 90 절 내지 제 94 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록의 인트라 블록 복제를 위해 사용되는 움직임 벡터 또는 블록 벡터를 선택적으로 변경하는 것을 규정하는, 비디오 처리 방법.
96. 제 90 절 내지 제 95 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록의 픽셀 단위의 높이에 의존하는, 비디오 처리 방법.
97. 제 90 절 내지 제 96 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은,
상기 현재 비디오 블록의 픽셀 단위의 폭에 의존하는, 비디오 처리 방법.
98. 제 90 절 내지 제 95 절 중 어느 한 절에 있어서,
상기 비디오 코딩 조건은 상기 현재 비디오 블록이 정사각형 모양인지 여부에 의존하는, 비디오 처리 방법.
제 90 절 내지 제 98 절의 추가적인 예들이 본 명세서의 섹션 4 에 나열된 아이템 11 내지 16 에 제공된다.
99. 제 1 절 내지 제 98 절 중 어느 한 절에 진술된 방법을 수행하도록 구성되는 프로세서를 포함하는, 비디오 인코더 장치.
100. 제 1 절 내지 제 98 절 중 어느 한 절에 진술된 방법을 수행하도록 구성되는 프로세서를 포함하는, 비디오 디코더 장치.
101. 코드가 저장된 컴퓨터 판독가능 매체로서,
상기 코드는, 프로세서에 의해 실행될 때, 상기 프로세서가 제 1 절 내지 제 98 절 중 어느 한 절에 기술된 방법을 구현하게 하는, 컴퓨터 판독가능 매체.
도 16 은 본 명세서에 개시된 다양한 기법들이 구현될 수 있는 하나의 예시적인 비디오 처리 시스템(1600)을 도시하는 블록도이다. 다양한 구현형태들은 시스템(1600)의 구성요소들 중 일부 또는 전부를 포함할 수 있다. 시스템(1600)은 비디오 콘텐츠를 수신하기 위한 입력부(1602)를 포함할 수 있다. 비디오 콘텐츠는 원시 또는 미압축 포맷으로, 예를 들어 8 또는 10 비트의 다성분 픽셀 값으로 수신될 수 있고, 또는 압축되거나 인코딩된 포맷일 수도 있다. 입력부(1602)는 네트워크 인터페이스, 주변 버스 인터페이스, 또는 저장 인터페이스를 나타낼 수 있다. 네트워크 인터페이스의 예는 이더넷, 수동형 광 네트워크(passive optical network; PON) 등과 같은 유선 인터페이스 및 Wi-Fi 또는 셀룰러 인터페이스와 같은 무선 인터페이스를 포함한다.
시스템(1600)은 본 명세서에서 설명되는 다양한 코딩 또는 인코딩 방법을 구현할 수 있는 코딩 컴포넌트(1604)를 포함할 수 있다. 코딩 컴포넌트(1604)는 입력부(1602)로부터 코딩 컴포넌트(1604)의 출력부 사이에서 비디오의 평균 비트레이트를 감소시켜서, 비디오의 코딩된 표현을 생성할 수 있다. 그러므로, 코딩 기법은 가끔 비디오 압축 또는 비디오 트랜스코딩 기법이라고 불린다. 코딩 컴포넌트(1604)의 출력은 저장되거나, 컴포넌트(1606)로 표현되는 바와 같이 연결된 통신부를 통해서 송신될 수 있다. 입력부(1602)에서 수신된 비디오의 저장되거나 통신된 비트스트림(또는 코딩된) 표현은, 디스플레이 인터페이스(1610)로 전송되는 픽셀 값 또는 표시가능한 비디오를 생성하기 위해서 컴포넌트(1608)에 의해 사용될 수 있다. 비트스트림 표현으로부터 사용자가 시청할 수 있는 비디오를 생성하는 프로세스는 가끔 비디오 압축해제라고 불린다. 더욱이, 어떤 비디오 처리 동작들이 "코딩" 동작 또는 툴이라고 불리는 반면에, 코딩 툴 또는 동작은 인코더 및 대응하는 디코딩 툴에서 사용되고, 또는 코딩의 결과를 반전시키는 동작이 디코더에 의해 수행될 것이라는 것이 이해될 것이다.
주변 버스 인터페이스 또는 디스플레이 인터페이스의 예는 범용적 시리얼 버스(universal serial bus; USB) 또는 고분해능 멀티미디어 인터페이스(high definition multimedia interface; HDMI) 또는 디스플레이포트(Displayport) 등을 포함할 수 있다. 저장 인터페이스의 예는 SATA(serial advanced technology attachment), PCI, IDE 인터페이스 등을 포함한다. 본 명세서에서 설명되는 기법은, 모바일 폰, 랩탑, 스마트 폰 또는 디지털 데이터 처리 및/또는 비디오 디스플레이를 수행할 수 있는 다른 디바이스와 같은 다양한 전자 디바이스에서 구현될 수 있다.
도 17 은 본 발명에 따르는 비디오 처리를 위한 방법(1700)의 흐름도 표현이다. 방법(1700)은, 동작 1702 에서, 어파인 코딩 툴을 사용한 비디오의 현재 블록 및 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 서브-블록의 제 1 움직임 벡터 및 현재 블록에 대한 대표 움직임 벡터인 제 2 움직임 벡터가 크기 제약을 준수한다고 결정하는 단계를 포함한다. 이러한 방법(1700)은 또한, 동작 1704에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 서브-블록의 제 1 움직임 벡터는 (MVx, MVy)로 표현되고, 제 2 움직임 벡터는 (MV'x, MV'y)로 표현된다. 크기 제약은, MVx>=MV'x-DH0 이고, MVx<=MV'x+DH1 이며, MVy>=MV'y-DV0 이고, 및 MVy<=MV'y+DV1 이라는 것을 나타내는데, DH0, DH1, DV0 및 DV1은 양수이다. 일부 실시형태들에서는, DH0 = DH1 이다. 일부 실시형태들에서는, DH0 ≠ DH1 이다. 일부 실시형태들에서는, DV0 = DV1 이다. 일부 실시형태들에서는, DV0 ≠ DV0 이다. 일부 실시형태들에서는, DH0 = DV0 이다. 일부 실시형태들에서는, DH0 ≠ DV0 이다. 일부 실시형태들에서는, DH1 = DV1 이다. 일부 실시형태들에서는, DH1 ≠ DV1 이다.
일부 실시형태들에서는, DH0, DH1, DV0, 또는 DV1 중 적어도 하나는 비디오 파라미터 세트 레벨, 시퀀스 파라미터 세트 레벨, 픽쳐 파라미터 세트 레벨, 슬라이스 헤더, 타일 그룹 헤더, 타일 레벨, 코딩 트리 유닛 레벨, 코딩 유닛 레벨, 또는 예측 유닛 레벨에서, 상기 비트스트림 표현 내에서 시그널링된다. 일부 실시형태들에서는, DH0, DH1, DV0, 및 DV1은 변환의 상이한 프로파일, 레벨, 또는 티어들에 대해서 다르다. 일부 실시형태들에서는, DH0, DH1, DV0, 및 DV1은 현재 블록의 폭 또는 높이에 기반한다. 일부 실시형태들에서는, DH0, DH1, DV0, 및 DV1은 현재 블록의 예측 모드에 기반하는데, 예측 모드는 단방향 예측 모드 또는 양방향 예측 모드이다. 일부 실시형태들에서는, DH0, DH1, DV0, 및 DV1은 현재 블록 내에서의 서브-블록의 위치에 기반한다.
일부 실시형태들에서는, 제 2 움직임 벡터는 현재 블록의 제어 포인트 움직임 벡터를 포함한다. 일부 실시형태들에서는, 제 2 움직임 벡터는 현재 블록의 제 2 서브-블록에 대한 움직임 벡터를 포함한다. 일부 실시형태들에서는, 제 2 서브-블록은 현재 블록의 중심 서브-블록을 포함한다. 일부 실시형태들에서는, 제 2 서브-블록은 현재 블록의 코너 서브-블록을 포함한다. 일부 실시형태들에서는, 제 2 움직임 벡터는 현재 블록의 안 또는 밖의 위치에 대해서 유도된 움직임 벡터를 포함하고, 이러한 위치는 현재 블록과 같은 어파인 모델을 사용하여 코딩된다. 일부 실시형태들에서는, 이러한 위치는 현재 블록의 중심 위치를 포함한다.
일부 실시형태들에서는, 제 1 움직임 벡터는 크기 제약을 만족시키도록 조절된다. 일부 실시형태들에서는, 제 1 움직임 벡터가 제 2 움직임 벡터에 대한 크기 제약을 만족시키지 않으면, 비트스트림은 유효하지 않다. 일부 실시형태들에서는, 제 1 움직임 벡터 및 제 2 움직임 벡터는 비트스트림 표현 내의 정밀도를 시그널링하는 움직임 벡터에 따라서 표현된다. 일부 실시형태들에서는, 제 1 움직임 벡터 및 제 2 움직임 벡터는 움직임 벡터를 저장하기 위한 저장 정밀도에 따라서 표현된다. 일부 실시형태들에서는, 제 1 움직임 벡터 및 제 2 움직임 벡터는, 움직임 벡터 시그널링 정밀도 또는 움직임 벡터를 저장하기 위한 저장 정밀도와 다른 정밀도에 따라서 표현된다.
도 18 은 본 발명에 따르는 비디오 처리를 위한 방법(1800)의 흐름도 표현이다. 이러한 방법(1800)은, 동작 1802 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 여섯 개의 파라미터를 포함하는 어파인 모델(affine model)을 결정하는 단계를 포함한다. 어파인 모델은 현재 블록의 이웃하는 블록의 어파인 코딩 정보로부터 승계된다(inherited). 이러한 방법(1800)은, 동작 1804에서, 어파인 모델에 기반하여 상기 변환을 수행하는 단계를 포함한다.
일부 실시형태들에서는, 이웃하는 블록은 여섯 개의 파라미터를 가지는 제 2 어파인 모델을 사용하여 코딩되고, 어파인 모델은 제 2 어파인 모델과 동일하다. 일부 실시형태들에서는, 이웃하는 블록은 네 개의 파라미터를 가지는 제 3 어파인 모델을 사용하여 코딩된다. 일부 실시형태들에서는, 어파인 모델은 현재 블록의 위치에 기반하여 결정된다. 일부 실시형태들에서는, 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 코딩 트리 유닛( coding tree unit; CTU) 내에 있지 않는 경우, 제 3 어파인 모델에 따라서 결정된다. 일부 실시형태들에서는, 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 CTU 라인 또는 같은 CTU 행 내에 있지 않는 경우, 제 3 어파인 모델에 따라서 결정된다.
일부 실시형태들에서는, 하나의 타일, 슬라이스, 또는 픽쳐가 여러 중첩되지 않는 영역들로 분할된다. 일부 실시형태들에서는, 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 영역 내에 있지 않는 경우, 제 3 어파인 모델에 따라서 결정된다. 일부 실시형태들에서는, 어파인 모델은, 이웃하는 블록이 현재 블록과 같은 영역 라인 또는 같은 영역 행 내에 있지 않는 경우, 제 3 어파인 모델에 따라서 결정된다. 일부 실시형태들에서는, 각각의 영역은 64x64의 크기를 가진다. 일부 실시형태들에서는, 현재 블록의 상단-좌측 코너는 (x, y)로 표현되고, 이웃하는 블록의 상단-좌측 코너는 (x', y')로 표현되며, 여기에서 어파인 모델은, x, y, x' 및 y'에 대한 조건이 만족되는 경우, 제 3 어파인 모델에 따라서 결정된다. 일부 실시형태들에서는, 조건은 x / M ≠ x' / M일 것을 표시하고, M은 양의 정수이다. 일부 실시형태들에서는, M은 128 또는 64이다. 일부 실시형태들에서는, 조건은 y / N ≠ y' / N일 것을 표시하고, N은 양의 정수이다. 일부 실시형태들에서는, N은 128 또는 64이다. 일부 실시형태들에서는, 조건은 x / M ≠ x' / M 이고 y / N ≠ y' / N일 것을 표시하고, M 및 N은 양의 정수이다. 일부 실시형태들에서는, M = N = 128 이거나 M = N = 64 이다. 일부 실시형태들에서는, 조건은 x >> M ≠ x' >> M 일 것을 표시하고, M은 양의 정수이다. 일부 실시형태들에서는, M은 6 또는 7 이다. 일부 실시형태들에서는, 조건은 y >> N ≠ y' >> N 일 것을 표시하고, N은 양의 정수이다. 일부 실시형태들에서는, N은 6 또는 7 이다. 일부 실시형태들에서는, 조건은 x >> M ≠ x' >> M 이고 y >> N ≠ y' >> N 일 것을 표시하고, M 및 N은 양의 정수이다. 일부 실시형태들에서는, M = N = 6 이거나 M = N = 7 이다.
도 19 는 본 발명에 따르는 비디오 처리를 위한 방법(1900)의 흐름도 표현이다. 이러한 방법(1900)은, 동작 1902 에서, 비디오의 블록 및 비디오의 비트스트림 표현 사이의 변환을 위하여, 양방향 예측 코딩 기법(bi-prediction coding technique)이 상기 블록에 적용가능한지 여부를, 폭 W 및 높이 H를 가지는 블록의 크기에 기반하여 결정하는 단계를 포함하고, W 및 H는 양의 정수이다. 이러한 방법(1900)은, 동작 1904에서, 결정 결과에 따라서 상기 변환을 수행하는 단계를 포함한다.
일부 실시형태들에서는, 양방향 예측 코딩 기법은, W = T1이고 H = T2 인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 양방향 예측 코딩 기법은, W = T2 이고 H = T1 인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 양방향 예측 코딩 기법은, W = T1이고 H ≤ T2 인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 양방향 예측 코딩 기법은, W ≤ T2 이고 H = T1 인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, T1 = 4 이고 T2 = 16 이다. 일부 실시형태들에서는, 양방향 예측 코딩 기법은, W≤ T1이고 H ≤ T2 인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, T1 = T2 = 8 이다. 일부 실시형태들에서는, T1 = 8 이고 T2 = 4 이다. 일부 실시형태들에서는, T1 = T2 = 4 이다. 일부 실시형태들에서는, T1 = 4 이고 T2 = 8 이다.
일부 실시형태들에서는, 상기 양방향 예측 코딩 기법이 적용가능한 경우에, 상기 양방향 예측 코딩 기법에 관한 정보를 표시하는 표시자가 상기 비트스트림 내에서 시그널링된다. 일부 실시형태들에서는, 상기 양방향 예측 코딩 기법이 상기 블록에 적용가능하지 않는 경우에, 상기 블록에 대한 상기 양방향 예측 코딩 기법에 관한 정보를 표시하는 표시자가 상기 비트스트림으로부터 제외된다. 일부 실시형태들에서는, 상기 양방향 예측 코딩 기법은, 상기 블록의 크기가 4x8 또는 8x4 중 하나인 경우에 적용가능하지 않다. 일부 실시형태들에서는, 상기 양방향 예측 코딩 기법은, 상기 블록의 크기가 4xN 또는 Nx4인 경우에 적용가능하지 않고, N은 양의 정수이고, N ≤ 16 이다. 일부 실시형태들에서는, 상기 블록의 크기는 상기 블록의 제 1 색성분에 대응하고, 상기 양방향 예측 코딩 기법이 적용가능한지 여부는, 상기 제 1 색성분 및 상기 블록의 잔여 색성분에 대해서 결정된다. 일부 실시형태들에서는, 상기 블록의 크기는 상기 블록의 제 1 색성분에 대응하고, 상기 양방향 예측 코딩 기법이 적용가능한지 여부는, 상기 제 1 색성분에 대해서만 결정된다. 일부 실시형태들에서는, 제 1 색성분은 루마 성분을 포함한다.
일부 실시형태들에서는, 이러한 방법은, 상기 양방향 예측 코딩 기법이 현재 블록에 적용가능하지 않은 경우에, 선택된 합병 후보가 상기 양방향 예측 코딩 기법을 사용하여 코딩된다고 결정하면, 제 1 레퍼런스 목록 또는 제 2 레퍼런스 목록으로부터 단일 움직임 벡터를 할당하는 단계를 더 포함한다. 일부 실시형태들에서는, 이러한 방법은, 상기 양방향 예측 코딩 기법이 현재 블록에 적용가능하지 않은 경우에, 삼각 예측 모드(triangular prediction mode)가 상기 블록에 적용가능하지 않다고 결정하는 단계를 더 포함한다. 일부 실시형태들에서는, 상기 양방향 예측 코딩 기법이 적용가능한지 여부는 예측 방향과 연관되고, 상기 예측 방향은 단방향 예측 코딩 기법(uni-prediction coding technique)과 더 연관되며, 상기 예측 방향은 상기 블록의 크기에 기반하여 상기 비트스트림 내에서 시그널링된다. 일부 실시형태들에서는, 상기 단방향 예측 코딩 기법은, (1) WxH < 64 또는 (2) WxH = 64인 경우에 상기 비트스트림 내에서 시그널링되고, W는 H와 같지 않다. 일부 실시형태들에서는, 단방향 예측 코딩 기법 또는 양방향 코딩 기법에 대한 정보는, (1) W x H > 64 또는 (2) W x H = 64인 경우에 상기 비트스트림 내에서 시그널링되고, W는 H와 같다.
일부 실시형태들에서, 상기 블록의 크기가 4x4인 경우에, 제한 사항(restriction)이 상기 양방향 코딩 기법 및 단방향 기법 양자 모두가 상기 블록에 적용가능하지 않다는 것을 표시한다. 일부 실시형태들에서는, 상기 제한 사항은, 상기 블록이 어파인 코딩되는(affine coded) 경우에 적용가능하다. 일부 실시형태들에서는, 상기 제한 사항은, 상기 블록이 어파인 코딩되지 않는 경우에 적용가능하다. 일부 실시형태들에서는, 상기 제한 사항은 상기 블록이 인트라-코딩되는 경우에 적용가능하다. 일부 실시형태들에서는, 상기 제한 사항은, 상기 블록의 움직임 벡터가 정수 정밀도를 가지는 경우에 적용가능하지 않다.
일부 실시형태들에서는, 상기 블록이 부모 블록의 분할(split)에 기반하여 생성된다고 시그널링하는 것이 상기 비트스트림 내에서는 스킵되고, 상기 부모 블록은 (1) 사중 트리 분할(quad-tree split)에 대하여 8x8, (2) 이중 트리 분할(binary tree split)에 대하여 8x4 또는 4x8, 또는 (3) 삼중 트리 분할(triple tree split)에 대하여 4x16 또는 16x4 의 크기를 가진다. 일부 실시형태들에서는, 상기 움직임 벡터가 정수 정밀도를 가진다는 것을 표시하는 표시자는, 상기 비트스트림 내에서 1로 설정된다. 일부 실시형태들에서는, 상기 블록의 움직임 벡터는 정수 정밀도가 되도록 반올림된다.
일부 실시형태들에서는, 상기 양방향 예측 코딩 기법은 상기 블록에 적용가능하다. 레퍼런스 블록은 (W + N - 1 - PW) x (H + N - 1 - PH)의 크기를 가지고, 상기 레퍼런스 블록의 경계 픽셀은, 보간 동작을 위하여 (W + N - 1) x (H + N - 1)의 크기를 가지는 제 2 블록을 생성하도록 반복되며, N은 보간 필터 탭(interpolation filter tap)을 나타내고, N, PW 및 PH는 정수이다. 일부 실시형태들에서는, PH = 0이고, 적어도 좌측 경계 또는 우측 경계의 픽셀은 상기 제 2 블록을 생성하도록 반복된다. 일부 실시형태들에서는, PW = 0이고, 적어도 상단 경계 또는 하단 경계의 픽셀은 상기 제 2 블록을 생성하도록 반복된다. 일부 실시형태들에서는, PW > 0이고 PH > 0이며, 상기 제 2 블록은 적어도 좌측 경계 또는 우측 경계의 픽셀을 반복한 후, 적어도 상단 경계 또는 하단 경계의 픽셀을 반복함으로써 생성된다. 일부 실시형태들에서는, PW > 0이고 PH > 0이며, 상기 제 2 블록은 적어도 상단 경계 또는 하단 경계의 픽셀을 반복한 후, 적어도 좌측 경계 또는 우측 경계의 픽셀을 반복함으로써 생성된다. 일부 실시형태들에서는, 좌측 경계의 픽셀은 M1 회 반복되고, 우측 경계의 픽셀은 (PW - M1) 회 반복된다. 일부 실시형태들에서는, 상단 경계의 픽셀은 M2 회 반복되고, 하단 경계의 픽셀은 (PH - M2) 회 반복된다. 일부 실시형태들에서는, 상기 변환을 위하여, 상기 레퍼런스 블록의 경계 픽셀이 어떻게 반복되는지가 일부 또는 전부의 레퍼런스 블록에 적용된다. 일부 실시형태들에서는, PW 및 PH는 상기 블록의 상이한 성분들에 대해서 다르다.
일부 실시형태들에서는, 병합 후보 목록 구성 프로세스가 상기 블록의 크기에 기반하여 수행된다. 일부 실시형태들에서는, (1) 합병 후보가 양방향 예측 코딩 기법을 사용하여 코딩되고 (2) 양방향 예측이 상기 블록의 크기에 따라서 상기 블록에 적용가능하지 않는 경우에, 상기 합병 후보는 단방향 예측 코딩 기법에서의 제 1 레퍼런스 목록을 가리키는 단방향 예측 후보라고 간주된다. 일부 실시형태들에서는, 상기 제 1 레퍼런스 목록은 상기 단방향 예측 코딩 기법의 레퍼런스 목록 0 또는 레퍼런스 목록 1을 포함한다. 일부 실시형태들에서는, (1) 합병 후보가 양방향 예측 코딩 기법을 사용하여 코딩되고 (2) 양방향 예측이 상기 블록의 크기에 따라서 상기 블록에 적용가능하지 않는 경우에, 상기 합병 후보는 이용불가능한 것으로 간주된다. 일부 실시형태들에서는, 합병 후보 목록 구성 프로세스 중에, 이용불가능한 합병 후보는 합병 후보 목록으로부터 제거된다. 일부 실시형태들에서는, 양방향 예측이 상기 블록의 크기에 따라서 상기 블록에 적용가능하지 않는 경우에, 삼각 예측 모드를 위한 합병 후보 목록 구성 프로세스가 호출된다(invoked).
도 20 은 본 발명에 따르는 비디오 처리를 위한 방법(2000)의 흐름도 표현이다. 이러한 방법(2000)은, 동작 2002 에서, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 트리 분할 프로세스가 상기 블록에 적용가능한지 여부를, 상기 코딩 트리 분할 프로세스에 따라서 상기 블록의 자식 코딩 유닛인 서브-블록의 크기에 기반하여 결정하는 단계를 포함한다. 상기 서브-블록은 폭 W 및 높이 H를 가지고, W 및 H는 양의 정수이다. 이러한 방법(2000)은, 동작 2004에서, 결정 결과에 따라서 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 코딩 트리 분할 프로세스는 W = T1이고 H = T2인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 코딩 트리 분할 프로세스는 W = T2이고 H = T1인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 코딩 트리 분할 프로세스는 W = T1이고 H ≤ T2인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, 코딩 트리 분할 프로세스는 W ≤ T2이고 H = T1인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, T1 = 4 이고 T2 = 16 이다. 일부 실시형태들에서는, 코딩 트리 분할 프로세스는 W≤ T1이고 H ≤ T2인 경우에는 적용가능하지 않고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서는, T1 = T2 = 8 이다. 일부 실시형태들에서는, T1 = 8 이고 T2 = 4 이다. 일부 실시형태들에서는, T1 = T2 = 4 이다. 일부 실시형태들에서는, T1 = 4 이다. 일부 실시형태들에서는, T2 = 4 이다. 일부 실시형태들에서는, 상기 코딩 트리 분할 프로세스가 현재 블록에 적용가능하지 않은 경우에, 상기 코딩 트리 분할 프로세스의 시그널링이 상기 비트스트림으로부터 생략된다.
도 21은 본 발명에 따르는 비디오 처리를 위한 방법(2100)의 흐름도 표현이다. 이러한 방법(2100)은, 동작 2102 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 유닛 레벨 가중치가 있는 양방향 예측(bi-prediction with coding unit level weight; BCW) 코딩 모드의 인덱스가 현재 블록의 위치에 대한 규칙에 기반하여 유도되는지 여부를 결정하는 단계를 포함한다. BCW 코딩 모드에서는, 다수의 가중치를 포함하는 가중치 세트가 현재 블록의 양방향 예측 값을 생성하기 위하여 사용된다. 이러한 방법(2100)은 또한, 동작 2104에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 현재 블록의 양방향 예측 값은, 가중치 세트 내의 적어도 하나의 가중치가 적용되는 경우에, 두 개의 움직임 벡터의 비-평균(non-averaging) 가중합으로서 생성된다. 일부 실시형태들에서는, 규칙은, 현재 블록 및 이웃하는 블록이 상이한 코딩 트리 유닛들 또는 최대 코딩 유닛들 내에 위치되는 경우에, 인덱스가 이웃하는 블록에 따라서 유도되지 않는다는 것을 규정한다. 일부 실시형태들에서는, 규칙은, 현재 블록 및 이웃하는 블록이 하나의 코딩 트리 유닛 내의 상이한 라인 또는 행 내에 위치되는 경우에, 인덱스가 이웃하는 블록에 따라서 유도되지 않는다는 것을 규정한다. 일부 실시형태들에서는, 규칙은, 현재 블록 및 이웃하는 블록이 비디오의 하나의 타일, 슬라이스, 또는 픽쳐의 중첩하지 않는 상이한 영역들 내에 위치되는 경우에, 인덱스가 이웃하는 블록에 따라서 유도되지 않는다는 것을 규정한다. 일부 실시형태들에서는, 규칙은, 현재 블록 및 이웃하는 블록이 비디오의 하나의 타일, 슬라이스, 또는 픽쳐의 중첩하지 않는 상이한 영역들의 상이한 행 내에 위치되는 경우에, 인덱스가 이웃하는 블록에 따라서 유도되지 않는다는 것을 규정한다. 일부 실시형태들에서는, 각각의 영역은 64x64의 크기를 가진다.
일부 실시형태들에서는, 현재 블록의 상단 코너는 (x,y)로 표현되고, 이웃하는 블록의 상단 코너는 (x', y')로 표현된다. 규칙은, (x, y) 및 (x', y')가 어떤 조건을 만족시키는 경우에, 인덱스가 이웃하는 블록에 따라서 유도되지 않는다는 것을 규정한다. 일부 실시형태들에서는, 이러한 조건은 x / M ≠ x' / M일 것을 표시하고, M 양의 정수이다. 일부 실시형태들에서는, M은 128 또는 64이다. 일부 실시형태들에서는, 이러한 조건은 y / N ≠ y' / N일 것을 표시하고, N은 양의 정수이다. 일부 실시형태들에서는, N은 128 또는 64이다. 일부 실시형태들에서는, 이러한 조건은 (x / M ≠ x' / M)이고 (y / N ≠ y' / N)이라는 것을 표시하고, M 및 N은 양의 정수이다. 일부 실시형태들에서는, M = N = 128 이거나 M = N = 64 이다. 일부 실시형태들에서는, 이러한 조건은 x >> M ≠ x' >> M이라는 것을 표시하고, M은 양의 정수이다. 일부 실시형태들에서는, M은 6 또는 7 이다. 일부 실시형태들에서는, 이러한 조건은 y >> N ≠ y' >> N이라는 것을 표시하고, N은 양의 정수이다. 일부 실시형태들에서는, N은 6 또는 7 이다. 일부 실시형태들에서는, 이러한 조건은 (x >> M ≠ x' >> M)이고 (y >> N ≠ y' >> N)이라는 것을 표시하고, M 및 N은 양의 정수이다. 일부 실시형태들에서는, M = N = 6 이거나 M = N = 7 이다.
일부 실시형태들에서는, BCW 코딩 모드가 어떤 픽쳐, 슬라이스, 타일 그룹, 또는 타일에 적용가능한지 여부는, 비트스트림 내의 픽쳐 파라미터 세트, 슬라이스 헤더, 타일 그룹 헤더, 또는 타일 내에 각각 시그널링된다. 일부 실시형태들에서는, BCW 코딩 모드가 어떤 픽쳐, 슬라이스, 타일 그룹, 또는 타일에 적용가능한지 여부는, 해당 픽쳐, 슬라이스, 타일 그룹, 또는 타일과 연관된 정보에 기반하여 유도된다. 일부 실시형태들에서는, 이러한 정보는 양자화 파라미터(quantization parameter; QP), 시간 층, 또는 픽쳐 순서 카운트(Picture Order Count) 거리를 적어도 포함한다.
도 22는 본 발명에 따르는 비디오 처리를 위한 방법(2200)의 흐름도 표현이다. 이러한 방법(2200)은, 동작 2202 에서, 인터 및 인트라 통합 예측(combined inter and intra prediction; CIIP) 코딩 기법을 사용하여 코딩된 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 인트라-예측 모드를 이웃하는 블록의 인트라-예측 모드와 독립적으로 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 이러한 방법(2200)은 또한, 동작 2204에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 현재 블록의 인트라-예측 모드는 임의의 이웃하는 블록의 인트라-예측 예측 모드를 참조하지 않고 결정된다. 일부 실시형태들에서는, 이웃하는 블록은 CIIP 코딩 기법을 사용하여 코딩된다. 일부 실시형태들에서는, 현재 블록의 인트라-예측은, 인트라-예측 코딩 기법을 사용하여 코딩되는 제 2 이웃하는 블록의 인트라-예측 모드에 기반하여 결정된다. 일부 실시형태들에서는, 현재 블록의 인트라-예측 모드를 제 2 인트라-예측 모드에 따라서 결정할지 여부는, 어떤 조건이 만족되는지 여부에 기반하고, 이러한 조건은 제 1 블록인 현재 블록과 제 2 블록인 제 2 이웃하는 블록 사이의 관계를 규정한다. 일부 실시형태들에서는, 이러한 결정은 MPM 모드의 목록을 유도하기 위한, 현재 블록의 최고 가능성 모드(MPM) 구성 프로세스의 일부이다.
도 23 은 본 발명에 따르는 비디오 처리를 위한 방법(2300)의 흐름도 표현이다. 이러한 방법(2300)은, 동작 2302 에서, 인터 및 인트라 통합 예측(CIIP) 코딩 기법을 사용하여 코딩된 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 현재 블록의 인트라-예측 모드를 제 1 이웃하는 블록의 제 1 인트라-예측 모드 및 제 2 이웃하는 블록의 제 2 인트라-예측 모드에 따라서 결정하는 단계를 포함한다. 제 1 이웃하는 블록은 인트라-예측 코딩 기법을 사용하여 코딩되고, 제 2 이웃하는 블록은 CIIP 코딩 기법을 사용하여 코딩된다. 제 1 인트라-예측 모드에는 제 2 인트라-예측 모드와 상이한 우선순위가 주어진다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 이러한 방법(2300)은 또한, 동작 2304에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 이러한 결정은 MPM 모드의 목록을 유도하기 위한, 현재 블록의 최고 가능성 모드(MPM) 구성 프로세스의 일부이다. 일부 실시형태들에서는, 제 1 인트라-예측 모드는 MPM 후보들의 목록 내에서 제 2 인트라-예측 모드 이전에 위치된다. 일부 실시형태들에서는, 제 1 인트라-예측 모드는 MPM 후보들의 목록 내에서 제 2 인트라-예측 모드 이후에 위치된다. 일부 실시형태들에서는, 인트라-예측 모드의 코딩은, 현재 블록의 최고 가능성 모드(MPM) 구성 프로세스를 바이패스한다. 일부 실시형태들에서는, 이러한 방법은, 후속 블록의 인트라-예측 모드를 현재 블록의 인트라-예측 모드에 따라서 결정하는 단계를 더 포함하는데, 여기에서 후속 블록은 인트라-예측 코딩 기법을 사용하여 코딩되고, 현재 블록은 CIIP 코딩 기법을 사용하여 코딩된다. 일부 실시형태들에서는, 이러한 결정은, 후속 블록의 최고 가능성 모드(MPM) 구성 프로세스의 일부이다. 일부 실시형태들에서는, 후속 블록의 MPM 구성 프로세스에서, 현재 블록의 인트라-예측 모드에는 인트라-예측 코딩 기법을 사용하여 코딩되는 다른 이웃하는 블록의 인트라-예측 모드보다 낮은 우선순위가 제공된다. 일부 실시형태들에서는, 후속 블록의 인트라-예측 모드를 현재 블록의 인트라-예측 모드에 따라서 결정할지 여부는, 어떤 조건이 만족되는지 여부에 기반하는데, 이러한 조건은 제 1 블록인 후속 블록 및 제 2 블록인 현재 블록 사이의 관계를 규정한다. 일부 실시형태들에서는, 이러한 조건은 다음:
(1) 제 1 블록 및 제 2 블록이 코딩 트리 유닛(CTU)의 동일한 라인 내에 위치될 것,
(2) 제 1 블록 및 제 2 블록이 동일한 CTU 내에 위치될 것,
(3) 제 1 블록 및 제 2 블록이 동일한 영역 내에 있을 것, 또는
(4) 제 1 블록 및 제 2 블록이 상기 영역의 동일한 라인 내에 있을 것
중 적어도 하나를 포함한다. 일부 실시형태들에서는, 상기 영역의 폭은 상기 영역의 높이와 같다. 일부 실시형태들에서는, 상기 영역은 64x64의 크기를 가진다.
일부 실시형태들에서는, 보통의 인트라 코딩 기법에 대한 최고 가능성 모드들(MPM)의 목록의 서브세트만이 현재 블록을 위해서 사용된다. 일부 실시형태들에서는, 상기 서브세트는 보통의 인트라 코딩 기법을 위한 MPM 모드들의 목록 내의 단일 MPM 모드를 포함한다. 일부 실시형태들에서는, 단일 MPM 모드는 상기 목록 내의 첫 번째 MPM 모드이다. 일부 실시형태들에서는, 상기 단일 MPM 모드를 표시하는 인덱스가 비트스트림 내에서 생략된다. 일부 실시형태들에서는, 상기 서브세트는 MPM 모드들의 목록 내의 처음 네 개의 MPM 모드를 포함한다. 일부 실시형태들에서는, 상기 서브세트 내의 MPM 모드를 표시하는 인덱스는 상기 비트스트림 내에서 시그널링된다. 일부 실시형태들에서는, 인트라-코딩된 블록을 코딩하기 위한 코딩 콘텍스트가 현재 블록을 코딩하기 위하여 재사용된다. 일부 실시형태들에서는, 인트라-코딩된 블록에 대한 제 1 MPM 플래그 및 현재 블록에 대한 제 2 MPM 플래그는 비트스트림 내의 동일한 코딩 콘텍스트를 공유한다. 일부 실시형태들에서는, 현재 블록의 인트라-예측 모드는 현재 블록의 크기와 무관하게, MPM 모드들의 목록으로부터 선택된다. 일부 실시형태들에서는, 처리된 MPM 구성은 디폴트로 이네이블되고, 상기 MPM 구성 프로세스를 표시하는 플래그는 비트스트림 내에서 생략된다. 일부 실시형태들에서는, 현재 블록에 대해서 MPM 목록 구성 프로세스가 필요하지 않다.
일부 실시형태들에서는, 루마-예측-크로마 모드가 현재 블록의 크로마 성분을 처리하기 위해서 사용된다. 일부 실시형태들에서는, 유도된 모드는 현재 블록의 크로마 성분을 처리하기 위해서 사용된다. 일부 실시형태들에서는, 현재 블록의 크로마 성분을 처리하기 위해서 여러 인트라-예측 모드가 사용된다. 일부 실시형태들에서는, 다수의 인트라-예측 모드들이 크로마 성분의 색상 포맷에 기반하여 사용된다. 일부 실시형태들에서는, 색상 포맷이 4:4:4 인 경우에, 다수의 인트라-예측 모드는 현재 블록의 루마 성분에 대한 인트라-예측 모드와 같다. 일부 실시형태들에서는, 네 개의 인트라-예측 모드 각각은 하나 이상의 비트를 사용하여 코딩되고, 네 개의 인트라-예측 모드는 평면 모드, DC 모드, 수직 모드, 및 수평 모드를 포함한다. 일부 실시형태들에서는, 네 개의 인트라-예측 모드들은 00, 01, 10, 및 11 을 사용하여 코딩된다. 일부 실시형태들에서는, 네 개의 인트라-예측 모드들은 0, 10, 110, 및 111 을 사용하여 코딩된다. 일부 실시형태들에서는, 네 개의 인트라-예측 모드들은 1, 01, 001, 및 000 을 사용하여 코딩된다. 일부 실시형태들에서는, 현재 블록의 폭 W 및 높이 H가 어떤 조건을 만족하는 경우에, 네 개의 인트라-예측 모드들의 서브세트만이 사용가능하다. 일부 실시형태들에서는, 이러한 서브세트는, W > N × H인 경우에는 평면 모드, DC 모드, 및 수직 모드를 포함하고, N은 정수이다. 일부 실시형태들에서는, 평면 모드, DC 모드, 및 수직 모드는 1, 01, 및 11 을 사용하여 코딩된다. 일부 실시형태들에서는, 평면 모드, DC 모드, 및 수직 모드는 0, 10, 및 00 을 사용하여 코딩된다. 일부 실시형태들에서,
이러한 서브세트는, H > N × W인 경우에는 평면 모드, DC 모드, 및 수평 모드를 포함하는데, N은 정수이다. 일부 실시형태들에서는, 평면 모드, DC 모드, 수평 모드는 1, 01, 및 11 을 사용하여 코딩된다. 일부 실시형태들에서는, 평면 모드, DC 모드, 수평 모드는 0, 10, 및 00 을 사용하여 코딩된다. 일부 실시형태들에서는, N = 2 이다. 일부 실시형태들에서는, DC 모드 및 평면 모드만이 현재 블록에 대해서 사용된다. 일부 실시형태들에서는, DC 모드 또는 평면 모드를 표시하는 표시자가 상기 비트스트림 내에서 시그널링된다.
도 24 는 본 발명에 따르는 비디오 처리를 위한 방법(2400)의 흐름도 표현이다. 이러한 방법(2400)은, 동작 2402 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 인터-인트라 통합 예측(CIIP) 프로세스가 현재 블록의 색성분에 적용가능한지 여부를 현재 블록의 크기에 기반하여 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 이러한 방법(2400)은 또한, 동작 2404에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 색성분은 크로마 성분을 포함하고, CIIP 프로세스는, 현재 블록의 폭이 4 미만인 경우에는 크로마 성분에 대해서는 수행되지 않는다. 일부 실시형태들에서는, 색성분은 크로마 성분을 포함하고, CIIP 프로세스는, 현재 블록의 높이가 4 미만인 경우에는 크로마 성분에 대해서는 수행되지 않는다. 일부 실시형태들에서는, 현재 블록의 크로마 성분에 대한 인트라-예측 모드는 현재 블록의 루마 성분에 대한 인트라-예측 모드와 다르다. 일부 실시형태들에서는, 크로마 성분은: DC 모드, 평면 모드, 또는 루마-예측-크로마 모드
중 하나를 사용한다. 일부 실시형태들에서는, 크로마 성분에 대한 인트라-예측 모드는 크로마 성분의 색상 포맷에 기반하여 결정된다. 일부 실시형태들에서는, 색상 포맷은 4:2:0 또는 4:4:4 를 포함한다.
도 25 는 본 발명에 따르는 비디오 처리를 위한 방법(2500)의 흐름도 표현이다. 이러한 방법(2500)은, 동작 2502 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 인터 및 인트라 통합 예측(CIIP) 코딩 기법이 현재 블록에 적용되어야 하는지 여부를 현재 블록의 특성에 기반하여 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 이러한 방법(2500)은 또한, 동작 2504에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 특성은 폭 W 및 높이 H를 가지는 현재 블록의 크기를 포함하고, W 및 H는 정수이며, 인터-인트라 예측 코딩 기법은, 상기 블록의 크기가 어떤 조건을 만족시키는 경우에는, 현재 블록에 대해서 디스에이블된다. 일부 실시형태들에서는, 이러한 조건은 W가 T1과 같다는 것을 표시하고, T1은 정수이다. 일부 실시형태들에서는, 이러한 조건은 H가 T1과 같다는 것을 표시하고, T1은 정수이다. 일부 실시형태들에서는, T1 = 4 이다. 일부 실시형태들에서는, T1 = 2 이다. 일부 실시형태들에서는, 이러한 조건은 W가 T1보다 클 것 또는 H가 T1보다 클 것을 표시하고, T1은 정수이다. 일부 실시형태들에서는, T1 = 64 또는 128 이다. 일부 실시형태들에서는, 이러한 조건은 W가 T1 와 같고 H가 T2 와 같을 것을 표시하고, T1 및 T2는 정수이다. 일부 실시형태들에서는, 이러한 조건은 W가 T2 와 같고 H가 T1과 같을 것을 표시하고, T1 및 T2는 정수이다. 일부 실시형태들에서는, T1 = 4 이고 T2 = 16 이다.
일부 실시형태들에서는, 특성 현재 블록에 적용된 코딩 기법을 포함하고, CIIP 코딩 기법은, 상기 코딩 기법이 어떤 조건을 만족시키는 경우에는 현재 블록에 대해서 디스에이블된다. 일부 실시형태들에서는, 이러한 조건은 상기 코딩 기법이 양방향 예측 코딩 기법일 것을 표시한다. 일부 실시형태들에서는, 양방향 예측 코딩된 병합 후보는 단방향 예측 코딩된 병합 후보로 변환되어, 인터-인트라 예측 코딩 기법이 현재 블록에 적용될 수 있게 한다. 일부 실시형태들에서는, 변환된 병합 후보는 단방향 예측 코딩 기법의 레퍼런스 목록 0 과 연관된다. 일부 실시형태들에서는, 변환된 병합 후보는 단방향 예측 코딩 기법의 레퍼런스 목록 1과 연관된다. 일부 실시형태들에서는, 상기 블록의 단방향 예측 코딩된 병합 후보만이 상기 변환을 위하여 선택된다. 일부 실시형태들에서는, 양방향 예측 코딩된 병합 후보는, 상기 비트스트림 표현 내의 병합 후보를 표시하는 병합 인덱스를 결정하기 위하여 버려진다. 일부 실시형태들에서는, 인터-인트라 예측 코딩 기법은 결정 결과에 따라서 상기 현재 블록에 적용된다. 일부 실시형태들에서는, 삼각 예측 모드에 대한 병합 후보 목록 구성 프로세스는 상기 현재 블록의 움직임 후보 목록을 유도하기 위하여 사용된다.
도 26 은 본 발명에 따르는 비디오 처리를 위한 방법(2600)의 흐름도 표현이다. 이러한 방법(2600)은, 동작 2602 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 코딩 툴이 현재 블록에 대하여 디스에이블되어야 하는지 여부를 현재 블록이 인터 및 인트라 통합 예측(CIIP) 코딩 기법으로 코딩되는지 여부에 기반하여 결정하는 단계를 포함한다. CIIP 코딩 기법은 현재 블록의 최종 예측 값을 유도하기 위하여, 미디어간(intermedia) 인터 예측 값 및 미디어간 인트라 예측 값을 사용한다. 이러한 코딩 툴은: 양방향성 광학적 흐름(Bi-Directional Optical Flow; BDOF), 중첩된 블록 움직임 보상(Overlapped Block Motion Compensation; OBMC), 또는 디코더-측 움직임 벡터 정제 프로세스(decoder-side motion vector refinement process; DMVR) 중 적어도 하나를 포함한다. 이러한 방법(2600)은 또한, 동작 2604에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 현재 블록에 대한 인트라-예측 프로세스는 인트라-예측 코딩 기법을 사용하여 코딩되는 제 2 블록에 대한 인트라-예측 프로세스와 다르다. 일부 실시형태들에서는, 상기 현재 블록에 대한 인트라-예측 프로세스에서, 이웃하는 샘플들의 필터링은 스킵된다. 일부 실시형태들에서는, 상기 현재 블록에 대한 인트라-예측 프로세스에서, 위치-의존적 인트라 예측 샘플 필터링 프로세스가 디스에이블된다. 일부 실시형태들에서는, 상기 현재 블록에 대한 인트라-예측 프로세스에서, 멀티라인 인트라-예측 프로세스가 디스에이블된다. 일부 실시형태들에서는, 상기 현재 블록에 대한 인트라-예측 프로세스에서, 광각 인트라-예측 프로세스가 디스에이블된다.
도 27 은 본 발명에 따르는 비디오 처리를 위한 방법(2700)의 흐름도 표현이다. 이러한 방법(2700)은, 동작 2702 에서, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 공간적 움직임 예측을 위한 움직임 벡터를 위해 사용되는 제 1 정밀도 P1 및 시간적 움직임 예측을 위한 움직임 벡터를 위해 사용되는 제 2 정밀도 P2를 결정하는 단계를 포함한다. P1 및/또는 P2는 분수이다. P1 및 P2는 서로 다르다. 이러한 방법(2700)은 또한, 동작 2704에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 제 1 정밀도는 1/16 루마 픽셀이고, 제 2 정밀도는 1/4 루마 픽셀이다. 일부 실시형태들에서는, 제 1 정밀도는 1/16 루마 픽셀이고, 제 2 정밀도는 1/8 루마 픽셀이다. 일부 실시형태들에서는, 제 1 정밀도는 1/8 루마 픽셀이고, 제 2 정밀도는 1/4 루마 픽셀이다. 일부 실시형태들에서는, 제 1 정밀도는 1/16 루마 픽셀이고, 제 2 정밀도는 1/4 루마 픽셀이다. 일부 실시형태들에서는, 제 1 정밀도는 1/16 루마 픽셀이고, 제 2 정밀도는 1/8 루마 픽셀이다. 일부 실시형태들에서는, 제 1 정밀도는 1/8 루마 픽셀이고, 제 2 정밀도는 1/4 루마 픽셀이다. 일부 실시형태들에서는, 제 1 또는 제 2 정밀도 중 적어도 하나는 1/16 루마 픽셀보다 낮다.
일부 실시형태들에서는, 상기 제 1 정밀도 또는 상기 제 2 정밀도 중 적어도 하나는 변할 수 있다. 일부 실시형태들에서는, 제 1 정밀도 또는 제 2 정밀도는 비디오의 프로파일, 레벨, 또는 티어에 따라서 변할 수 있다. 일부 실시형태들에서는, 제 1 정밀도 또는 제 2 정밀도는 상기 비디오의 픽쳐 내의 시간 층에 따라서 변할 수 있다. 일부 실시형태들에서는, 제 1 정밀도 또는 제 2 정밀도는 상기 비디오의 픽쳐의 크기에 따라서 변할 수 있다.
일부 실시형태들에서는, 상기 제 1 정밀도 또는 제 2 정밀도 중 적어도 하나는 상기 비트스트림 표현 내의 비디오 파라미터 세트, 시퀀스 파라미터 세트, 픽쳐 파라미터 세트, 슬라이스 헤더, 타일 그룹 헤더, 타일, 코딩 트리 유닛, 또는 코딩 유닛 내에서 시그널링된다. 일부 실시형태들에서는, 움직임 벡터는 (MVx, MVy)로 표현되고, 상기 움직임 벡터에 대한 정밀도는 (Px, Py)로 표현되며, 여기에서 Px는 MVx와 연관되고, Py는 MVy와 연관된다. 일부 실시형태들에서는, Px 및 Py는 상기 비디오의 프로파일, 레벨, 또는 티어에 따라서 변할 수 있다. 일부 실시형태들에서는, Px 및 Py는 상기 비디오 내의 픽쳐의 시간 층에 따라서 변할 수 있다. 일부 실시형태들에서는, Px 및 Py는 상기 비디오 내의 픽쳐의 폭에 따라서 변할 수 있다. 일부 실시형태들에서는, Px 및 Py는 상기 비트스트림 표현 내의 비디오 파라미터 세트, 시퀀스 파라미터 세트, 픽쳐 파라미터 세트, 슬라이스 헤더, 타일 그룹 헤더, 타일, 코딩 트리 유닛, 또는 코딩 유닛 내에서 시그널링된다. 일부 실시형태들에서는, 디코딩된 움직임 벡터는 (MVx, MVy)라고 표현되고, 상기 움직임 벡터는, 상기 움직임 벡터가 시간적 움직임 예측 움직임 벡터로서 저장되기 이전에 제 2 정밀도에 따라서 조절된다. 일부 실시형태들에서는, 시간적 움직임 예측 움직임 벡터는 (Shift(MVx, P1-P2), Shift(MVy, P1-P2))가 되도록 조절되고, P1 및 P2는 정수이며, P1 ≥ P2이고, Shift는 무부호 숫자에 대한 우측 천이 연산을 나타낸다. 일부 실시형태들에서는, 시간적 움직임 예측 움직임 벡터는 (SignShift(MVx, P1-P2), SignShift(MVy, P1-P2))가 되도록 조절되고, P1 및 P2는 정수이며, 및 P1 ≥ P2 이고, SignShift는 부호화 숫자에 대한 우측 천이 연산을 나타낸다. 일부 실시형태들에서는, 시간적 움직임 예측 움직임 벡터는 (MVx << (P1-P2)), MVy << (P1-P2))가 되도록 조절되고, P1 및 P2는 정수이며, P1 ≥ P2이고, <<는 부호화 숫자 또는 무부호 숫자에 대한 좌측 천이 연산을 나타낸다.
도 28 은 본 발명에 따르는 비디오 처리를 위한 방법(2800)의 흐름도 표현이다. 이러한 방법(2800)은, 동작 2802 에서, 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 움직임 벡터 (MVx, MVy)를 정밀도 (Px, Py)로 결정하는 단계를 포함한다. Px는 MVx와 연관되고, Py는 MVy와 연관된다. MVx 및 MVy는 N 개의 비트를 사용하여 표현되고, MinX ≤ MVx ≤ MaxX이며, MinY ≤ MVy ≤ MaxY이고, MinX, MaxX, MinY, 및 MaxY는 실수 숫자이다. 이러한 방법(2800)은 또한, 동작 2804에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, MinX = MinY이다. 일부 실시형태들에서는, MinX ≠ MinY이다. 일부 실시형태들에서는, MaxX = MaxY이다. 일부 실시형태들에서는, MaxX ≠ MaxY이다.
일부 실시형태들에서는, MinX 또는 MaxX 중 적어도 하나는 Px에 기반한다. 일부 실시형태들에서는, 움직임 벡터는 (Px, Py)로 표시되는 정밀도를 가지고, MinY 또는 MaxY 중 적어도 하나는 Py에 기반한다. 일부 실시형태들에서는, MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는 N에 기반한다. 일부 실시형태들에서는, 공간적 움직임 예측 움직임 벡터에 대한 MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는, 시간적 움직임 예측 움직임 벡터에 대한 대응하는 MinX, MaxX, MinY, 또는 MaxY와 다르다. 일부 실시형태들에서는, MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는 상기 비디오의 프로파일, 레벨, 또는 티어에 따라서 변할 수 있다. 일부 실시형태들에서는, MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는 상기 비디오 내의 픽쳐의 시간 층에 따라서 변할 수 있다. 일부 실시형태들에서는, MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는 상기 비디오 내의 픽쳐의 크기에 따라서 변할 수 있다. 일부 실시형태들에서는, MinX, MaxX, MinY, 또는 MaxY 중 적어도 하나는 상기 비트스트림 표현 내의 비디오 파라미터 세트, 시퀀스 파라미터 세트, 픽쳐 파라미터 세트, 슬라이스 헤더, 타일 그룹 헤더, 타일, 코딩 트리 유닛, 또는 코딩 유닛 내에서 시그널링된다. 일부 실시형태들에서는, MVx는 공간적 움직임 예측 또는 시간적 움직임 예측을 위해서 사용되기 이전에 [MinX, MaxX]로 클리핑된다. 일부 실시형태들에서는, MVy는 공간적 움직임 예측 또는 시간적 움직임 예측을 위해서 사용되기 이전에 [MinY, MaxY]로 클리핑된다.
도 29 는 본 발명에 따르는 비디오 처리를 위한 방법(2900)의 흐름도 표현이다. 이러한 방법(2900)은, 동작 2902 에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 공유된 병합 목록이 현재 블록에 적용가능한지 여부를 현재 블록의 코딩 모드에 따라서 결정하는 단계를 포함한다. 이러한 방법(2900)은 또한, 동작 2904에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다.
일부 실시형태들에서는, 공유된 병합 목록은, 현재 블록이 정규 병합 모드를 사용하여 코딩되는 경우에는 적용가능하지 않다. 일부 실시형태들에서는, 공유된 병합 목록은, 현재 블록이 인트라 블록 복제(Intra Block Copy; IBC) 모드를 사용하여 코딩되는 경우에 적용가능하다. 일부 실시형태들에서는, 이러한 방법은: 상기 변환을 수행하기 이전에, 움직임 후보들의 테이블을 상기 비디오의 과거의 변환 및 비트스트림 표현에 기반하여 유지하는 단계; 및 상기 변환을 수행한 이후에, 상기 현재 블록이 공유된 병합 목록이 적용될 수 있는 부모 블록의 자식이고, 상기 현재 블록이 정규 병합 모드를 사용하여 코딩되는 경우에는, 움직임 후보들의 테이블의 업데이트를 디스에이블하는 단계를 더 포함한다.
도 30 은 본 발명에 따르는 비디오 처리를 위한 방법(3000)의 흐름도 표현이다. 이러한 방법(3000)은, 동작 3002 에서, W x H 크기를 가지는 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 이러한 변환 도중의 움직임 보상을 위한 차원 (W + N - 1) x (H + N - 1)의 제 2 블록을 결정하는 단계를 포함한다. 제 2 블록은 차원 (W + N - 1- PW) x (H + N - 1 - PH)의 레퍼런스 블록에 기반하여 결정된다. N은 필터 크기를 나타내고, W, H, N, PW 및 PH는 음이 아닌 정수이다. PW 및 PH 양자 모두는 0 와 같지 않다. 이러한 방법(3000)은 또한, 동작 3004에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 레퍼런스 블록 밖에 위치되는 제 2 블록 내의 픽셀들은, 상기 레퍼런스 블록의 하나 이상의 경계를 반복시킴으로써 결정된다. 일부 실시형태들에서는, PH = 0 이고, 상기 레퍼런스 블록의 적어도 좌측 경계 또는 우측 경계는 제 2 블록을 생성하도록 반복된다. 일부 실시형태들에서는, PW = 0 이고, 상기 레퍼런스 블록의 적어도 상단 경계 또는 하단 경계는 제 2 블록을 생성하도록 반복된다. 일부 실시형태들에서는, PW > 0 이고 PH > 0 이며, 제 2 블록은, 상기 레퍼런스 블록의 적어도 좌측 경계 또는 우측 경계를 반복시키고, 그 후에 상기 레퍼런스 블록의 적어도 상단 경계 또는 하단 경계를 반복시킴으로써 생성된다. 일부 실시형태들에서는, PW > 0 이고 PH > 0 이며, 제 2 블록은, 상기 레퍼런스 블록의 적어도 상단 경계 또는 하단 경계를 반복시키고, 그 후에 상기 레퍼런스 블록의 적어도 좌측 경계 또는 우측 경계를 반복시킴으로써 생성된다.
일부 실시형태들에서는, 상기 레퍼런스 블록의 좌측 경계는 M1 회 반복되고, 상기 레퍼런스 블록의 우측 경계는 (PW - M1) 회 반복되며, M1은 양의 정수이다. 일부 실시형태들에서는, 상기 레퍼런스 블록의 상단 경계는 M2 회 반복되고, 상기 레퍼런스 블록의 하단 경계는 (PH - M2) 회 반복되며, M2는 양의 정수이다. 일부 실시형태들에서는, PW 또는 PH 중 적어도 하나는 상기 현재 블록의 상이한 색성분에 대해서 다르고, 상기 색성분은 적어도 루마 성분 또는 하나 이상의 크로마 성분을 포함한다. 일부 실시형태들에서는, PW 또는 PH 중 적어도 하나는 상기 현재 블록의 크기 또는 형상에 따라서 변할 수 있다. 일부 실시형태들에서는, PW 또는 PH 중 적어도 하나는 상기 현재 블록의 코딩 특성에 따라서 변할 수 있고, 상기 코딩 특성은 단방향 예측 코딩 또는 양방향 예측 코딩을 포함한다.
일부 실시형태들에서는, 상기 레퍼런스 블록 밖에 제 2 블록 내의 픽셀들은 하나의 값으로 설정된다. 일부 실시형태들에서는, 하나의 값은 1 << (BD - 1) 이고, BD는 상기 레퍼런스 블록 내의 픽셀 샘플들의 비트-깊이이다. 일부 실시형태들에서는, BD는 8 또는 10 이다. 일부 실시형태들에서는, 상기 하나의 값은 상기 레퍼런스 블록의 픽셀 샘플에 기반하여 유도된다. 일부 실시형태들에서는, 상기 하나의 값은 비디오 파라미터 세트, 시퀀스 파라미터 세트, 픽쳐 파라미터 세트, 슬라이스 헤더, 타일 그룹 헤더, 타일, 코딩 트리 유닛 행, 코딩 트리 유닛, 코딩 유닛, 또는 예측 유닛 내에서 시그널링된다. 일부 실시형태들에서는, 상기 레퍼런스 블록 외부에 위치된 상기 제 2 블록 내의 픽셀들의 패딩은, 상기 현재 블록이 어파인 코딩되는 경우에 디스에이블된다.
도 31은 본 발명에 따르는 비디오 처리를 위한 방법(3100)의 흐름도 표현이다. 이러한 방법(3100)은, 동작 3102 에서, W x H 크기를 가지는 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 이러한 변환 도중의 움직임 보상을 위한 차원 (W + N - 1) x (H + N - 1)의 제 2 블록을 결정하는 단계를 포함한다. W와 H는 음이 아닌 정수이고, 여기에서 N은 음이 아닌 정수이며 필터 크기에 기반한다. 변환이 일어나는 도중에, 정제된 움직임 벡터가 원본 움직임 벡터에 대한 움직임 벡터 정제 동작에 따른 멀티-포인트 검색에 기반하여 결정되고, 여기에서 상기 레퍼런스 블록의 픽셀 길이의 경계(pixels long boundaries)가 하나 이상의 비-경계 픽셀을 반복시킴으로써 결정된다. 이러한 방법(3100)은 또한, 동작 3104에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 상기 현재 블록을 처리하는 것은, 상기 현재 블록을 움직임 벡터 정제 동작에서 필터링하는 것을 포함한다. 일부 실시형태들에서는, 상기 레퍼런스 블록이 상기 현재 블록의 처리에 적용가능한지 여부는, 상기 현재 블록의 차원에 기반하여 결정된다. 일부 실시형태들에서는, 현재 블록을 보간하는 것은: 상기 제 2 블록에 기반하여 상기 현재 블록의 다수의 서브-블록을 보간하는 것을 포함한다. 각각의 서브-블록은 W1xH1의 크기를 가지고, W1, H1은 음이 아닌 정수이다. 일부 실시형태들에서는, W1=H1=4 이고, W=H=8 이며, 및 PW=PH=0 이다. 일부 실시형태들에서는, 제 2 블록은 다수의 서브-블록들 중 적어도 하나의 움직임 벡터의 정수 부분에 전적으로 기반하여 결정된다. 일부 실시형태들에서는, 다수의 모든 서브-블록들의 움직임 벡터의 정수 부분들 사이의 최대 차이는 1 픽셀 이하인 경우, 상기 레퍼런스 블록은 상기 현재 블록의 상단-좌측 서브-블록의 움직임 벡터의 정수 부분에 기반하여 결정되고, 상기 레퍼런스 블록의 우측 경계 및 하단 경계 각각은 제 2 블록을 획득하도록 일 회 반복된다. 일부 실시형태들에서는, 다수의 모든 서브-블록들의 움직임 벡터의 정수 부분들 사이의 최대 차이가 1 픽셀 이하인 경우, 상기 레퍼런스 블록은 상기 현재 블록의 하단-우측 서브-블록의 움직임 벡터의 정수 부분에 기반하여 결정되고, 상기 레퍼런스 블록의 좌측 경계 및 상단 경계 각각은 제 2 블록을 획득하도록 일 회 반복된다. 일부 실시형태들에서는, 제 2 블록은 다수의 서브-블록들 중 하나의 변경된 움직임 벡터에 전적으로 기반하여 결정된다.
일부 실시형태들에서는, 다수의 서브-블록 모두의 움직임 벡터의 정수 부분들 사이의 최대 차이가 두 개 이하의 픽셀과 같으면, 상기 현재 블록의 상단-좌측 서브-블록의 움직임 벡터는, 하나의 정수 픽셀 거리를 각각의 성분에 가산하여 변경된 움직임 벡터를 획득함으로써 변경된다. 레퍼런스 블록은 변경된 움직임 벡터에 기반하여 결정되고, 레퍼런스 블록의 좌측 경계, 우측 경계, 상단 경계, 및 하단 경계 각각은 일 회 반복되어 제 2 블록을 얻는다.
일부 실시형태들에서는, 다수의 서브-블록 모두의 움직임 벡터의 정수 부분들 사이의 최대 차이가 두 개 이하의 픽셀과 같은 경우에, 상기 현재 블록의 하단-우측 서브-블록의 움직임 벡터는, 하나의 정수 픽셀 거리를 각각의 성분으로부터 감산하여 변경된 움직임 벡터를 획득함으로써 변경된다. 레퍼런스 블록은 변경된 움직임 벡터에 기반하여 결정되고, 레퍼런스 블록의 좌측 경계, 우측 경계, 상단 경계, 및 하단 경계 각각은 일 회 반복되어 제 2 블록을 얻는다.
도 32는 본 발명에 따르는 비디오 처리를 위한 방법(3200)의 흐름도 표현이다. 이러한 방법(3200)은, 동작 3202 에서, 인터 및 인트라 통합 예측(CIIP) 코딩 기법을 사용하여 코딩된 비디오의 블록과 비디오의 비트스트림 표현 사이의 변환을 위하여, 상기 블록 내의 소정 위치에서의 예측 값을 해당 위치에서의 인터 예측 값과 인트라 예측 값의 가중합에 기반하여 결정하는 단계를 포함한다. 가중합은, 인터 예측 값 및 인트라 예측 값에 기반하여 획득된 최초의 합에 오프셋을 가산하는 것에 기반하여 얻어지고, 이러한 오프셋은 상기 가중합을 결정하기 위하여 수행되는 우천이 연산 이전에 가산된다. 이러한 방법(3200)은 또한, 동작 3204에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 더 포함한다.
일부 실시형태들에서는, 상기 블록 내의 위치는 (x, y)로 표현되고, 위치 (x, y)에서의 인터 예측 값은 Pinter(x, y)로 표현되며, 위치 (x, y)에서의 인트라 예측 값은 Pintra(x, y)로 표현되고, 위치 (x, y)에서의 인터-예측 가중치는 w_inter(x, y)로 표현되며, 위치 (x, y)에서의 인트라-예측 가중치는 w_intra(x, y)로 표현된다. 위치 (x, y)에서의 예측 값은 (Pintra(x, y) × w_intra(x, y) + Pinter(x, y) × w_inter(x, y) + offset(x, y)) >> N 이 되도록 결정되고, 여기에서 w_intra(x, y) + w_inter(x, y) = 2^N 이고 offset(x, y) = 2^(N-1) 이며, N은 양의 정수이다. 일부 실시형태들에서는, N = 2 이다.
일부 실시형태들에서는, 가중합은 해당 위치에서의 인터 예측 값 및 인트라 예측 값에 대해서 동일한 가중치를 사용하여 결정된다. 일부 실시형태들에서는, 가중합을 결정하기 위해서, 블록 내의 위치에 따라서 제로 가중치가 사용된다. 일부 실시형태들에서는, 제로 가중치는 인터 예측 값에 적용된다. 일부 실시형태들에서는, 제로 가중치는 인트라 예측 값에 적용된다.
도 33은 본 발명에 따르는 비디오 처리를 위한 방법(3300)의 흐름도 표현이다. 이러한 방법(3300)은, 동작 3302에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해, 현재 블록의 크기와 연관된 조건이 만족되었는지 여부에 부분적으로 기초하여 현재 블록의 코딩 정보가 비트스트림 표현에서 표현되는 방식을 결정하는 단계를 포함한다. 이 방법(3300)은, 동작 3304에서, 이 결정에 기반하여 변환을 수행하는 단계도 포함한다.
일부 실시형태들에서는, 코딩 정보는 조건이 만족되는 경우 비트스트림 표현에서 시그널링된다. 일부 실시형태들에서는, 코딩 정보는 조건이 만족되는 경우 비트스트림 표현에서 생략된다. 일부 실시형태들에서는, 조건이 만족되는 경우, 현재 블록에 대해 IBC(인트라 블록 복사, intra block copy) 코딩 툴 또는 인터 예측 코딩 툴 중 적어도 하나가 디스에이블 된다. 일부 실시형태들에서는, IBC 코딩 툴 및 인터 예측 코딩 툴이 디스에이블(disable)되는 경우 코딩 정보는 비트스트림 표현에서 생략된다. 일부 실시형태들에서는, 코딩 정보는 IBC 코딩 툴이 이네이블 되고 인터 예측 툴이 디스에이블 되는 경우 비트스트림 표현에서 시그널링된다.
일부 실시형태들에서는, 코딩 정보는 IBC 툴 및/또는 인터 예측 코딩 툴과 연관된 동작 모드를 포함하고, 동작 모드는 적어도 정상(normal) 모드 혹은 스킵(skip) 모드를 포함한다. 일부 실시형태들에서는, 코딩 정보는 코딩 툴과 연관된 예측 모드의 사용을 지시하는 지시자(indicator)를 포함한다. 일부 실시형태들에서, 코딩 툴은 비트스트림 표현에서 코딩 정보가 생략되는 경우 사용되지 않는다. 일부 실시형태들에서, 코딩 툴은 코딩 정보가 비트스트림 표현에서 생략되는 경우 사용된다. 일부 실시형태들에서, 코딩 툴은 IBC(인트라 블록 복사, intra block copy) 코딩 툴 혹은 인터 예측 코딩 툴을 포함한다.
일부 실시형태들에서, 지시자(indicator)가 비트스트림에서 생략되는 경우, 다른 하나 이상의 코딩 툴들을 지시하는 하나 이상의 지시자들은 비트스트림 표현에서 시그널링된다. 일부 실시형태들에서, 다른 하나 이상의 코딩 툴들은 적어도 인트라 코딩 툴 혹은 팔레트 코딩 툴을 포함한다. 일부 실시형태들에서, 지시자는 인터 모드와 인트라 모드를 구별하되, 하나 이상의 지시자들에는 인터 예측 코딩 툴이 디스에이블되고 IBC 코딩 툴이 인에이블 되는 경우 비트스트림에서 시그널링되는 IBC 모드를 지시하는 제1 지시자 및 팔레트 모드를 지시하는 제2 지시자가 포함된다.
일부 실시형태들에서, 코딩 정보는 스킵 모드에 대한 제3 지시자를 포함하고, 스킵 모드는 인터-스킵 모드 혹은 IBC 스킵 모드이다. 일부 실시형태들에서, 스킵 모드에 대한 제3 지시자는 인터 예측 코딩 툴이 디스에이블되고 IBC 코딩 툴이 인에이블 되는 경우 시그널링된다. 일부 실시형태들에서, 비트스트림 표현에서 IBC 모드의 사용이 생략되었음을 지시하는 지시자에도 불구하고 예측 모드는 인터 예측 코딩 툴이 디스에이블되고 IBC 코딩 툴이 이네이블되는 경우 IBC 모드로 결정되고, 스킵 모드는 현재 블록에 적용 가능하다.
일부 실시형태들에서는, 코딩 정보는 삼각(triangle) 모드를 포함한다. 일부 실시형태들에서는, 코딩 정보는 인터 예측 방향을 포함한다. 일부 실시 형태들에서는, 코딩 정보는 현재 블록이 단 예측 코딩 툴을 이용하여 코딩된 경우 비트스트림 표현에서 생략된다. 일부 실시형태들에서, 코딩 정보는 SMVD(symmetric motion vector difference) 방법의 사용을 지시하는 지시자(indicator)를 포함한다. 일부 실시형태들에서, 조건이 만족되면, 현재 블록은 비트스트림 표현에서 SMVD 방법의 사용을 지시하는 지시자에도 불구하고 단 예측되도록 설정된다. 일부 실시형태들에서는, SMVD 방법의 사용을 지시하는 지시자가 비트스트림 표현에서 제외되는 경우 단 예측 코딩 툴과 연관된 목록 0 혹은 목록 1만이 움직임 보상 프로세스에서 사용된다.
일부 실시형태들에서, 조건은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 조건은 현재 블록의 너비가 T2이고, 현재 블록의 높이가 T1임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 조건은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2 이하임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 조건은 현재 블록의 너비가 T2이고 현재 블록의 높이가 T1 이하임을 지시하며, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 조건은 현재 블록의 너비가 T1 이하이고, 현재 블록의 높이가 T2 이하임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 현재 블록의 너비는 T1 이상이고, 현재 블록의 높이는 T2 이상이며, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 조건은 현재 블록의 너비는 T1 이상이고, 현재 블록의 높이는 T2 이상임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, T1는 4이고, T2는 16이다. 일부 실시형태들에서, T1 및 T2는 8이다. 일부 실시형태들에서, T1은 8이고 T2은 4이다. 일부 실시형태들에서, T1 및 T2는 4이다. 일부 실시형태들에서, T1 및 T2는 32이다. 일부 실시형태들에서, T1 및 T2는 64이다. 일부 실시형태들에서, T1 및 T2는 128이다.
일부 실시형태들에서, 조건은 현재 블록이 4x8, 8x4, 4x16, 혹은 16x4의 크기를 가짐을 지시한다. 일부 실시형태들에서, 조건은 블록이 4x8, 8x4의 크기를 가짐을 지시한다. 일부 실시형태들에서, 조건은 현재 블록의 크기가 4xN 혹은 Nx4 임을 지시하며, N은 양의 정수로서 N ≤ 16이다. 일부 실시형태들에서, 조건은 현재 블록의 크기가 8xN 혹은 Nx8임을 지시하며, N은 양의 정수로서 N ≤ 16이다. 일부 실시형태들에서, 조건은 현재 블록의 색성분이 N 샘플보다 작거나 동일함을 지시한다. 일부 실시형태들에서, N은 16이다. 일부 실시형태들에서, N은 32이다.
일부 실시형태들에서, 조건은 현재 블록의 색성분이 높이와 동일한 너비를 갖는다는 것을 지시한다. 일부 실시형태들에서, 조건은 현재 블록의 색성분이 4x8, 8x4, 4x4, 4x16 혹은 16x4의 크기를 가짐을 지시한다. 일부 실시형태들에서, 색성분은 루마 성분 혹은 하나 이상의 크로마 성분을 포함한다. 일부 실시형태들에서, 조건이 현재 블록이 4인 너비 및 4인 높이를 가짐을 지시하는 경우, 인터 예측 툴이 디스에이블된다. 일부 실시형태들에서, 조건이 현재 블록이 4인 너비 및 4인 높이를 가짐을 지시하는 경우 IBC 예측 툴은 디스에이블된다.
일부 실시형태들에서, 단 예측 코딩 툴과 연관된 목록 0은 (1) 현재 블록이 4인 너비 및 8인 높이를 갖거나, (2) 현재 블록이 8인 너비 및 4인 높이를 갖는 경우 움직임 보상 프로세스에서 사용된다. 양 예측 코딩 툴은 움직임 보상 프로세스에서 디스에이블된다.
도 34는 본 발명에 따르는 비디오 처리를 위한 방법(3400)의 흐름도 표현이다. 이러한 방법(3400)은, 동작 3402에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해, 변경된 움직임 벡터 세트를 결정하는 단계를 포함한다. 이러한 방법(3400)은 동작 3404에서 변경된 움직임 벡터 세트를 기반으로 변환을 수행하는 단계를 포함한다. 조건을 만족하는 현재 블록으로 인해, 변경된 움직임 벡터 세트는 현재 블록에 연관된 움직임 벡터 세트의 변경된 버전이다.
일부 실시형태들에서, 움직임 벡터 세트는 정규(regular) 머지 코딩 기술, sbTMVP(sub-block temporal motion vector prediction), 혹은 MMVD(Merge with motion vector difference) 중 하나를 이용하여 유도된다. 일부 실시형태들에서, 움직임 벡터 세트는 인트라 블록 복사(IBC) 코딩 기술에서 이용하는 블록 벡터를 포함한다. 일부 실시형태들에서, 조건은 현재 블록의 루마 성분의 크기가 기 정의된 크기와 동일함을 특정한다. 일부 실시형태들에서, 기 정의된 크기는 8x4 혹은 4x8 중 적어도 하나를 포함한다.
일부 실시형태들에서, 움직임 벡터 세트를 변경하는 단계는 현재 블록의 움직임 정보가 제1 예측 방향에 대한 제1 참조 픽처 리스트에서 제1 참조 픽처를 참조하는 제1 움직임 벡터와 제2 예측 방향에 대한 제2 참조 픽처 리스트에서 제2 참조 픽처를 참조하는 제2 움직임 벡터를 포함하는 양 방향으로 결정되는 경우 움직임 벡터를 단 방향 움직임 벡터로 변환하는 단계를 포함한다. 일부 실시형태들에서, 현재 블록의 움직임 정보는 이웃 블록의 움직임 정보에 기반하여 유도된다. 일부 실시형태들에서, 이 방법은 제1 예측 방향 혹은 제2 예측 방향 중 하나의 정보를 폐기하는 단계를 포함한다. 일부 실시형태들에서, 정보를 폐기하는 단계는 움직임 폐기되는 예측 방향의 움직임 벡터를 (0, 0)으로 변경하는 단계를 포함한다. 일부 실시형태들에서, 정보를 폐기하는 단계는 폐기되는 예측 방향의 참조 인덱스를 -1로 변경하는 단계를 포함한다. 일부 실시형태들에서, 정보를 폐기하는 단계는 폐기된 예측 방향을 다른 예측 방향으로 변경하는 단계를 포함한다.
일부 실시형태들에서, 이러한 방법은 제1 예측 방향에 대한 정보와 제2 예측 방향에 대한 정보에 기반하여 새로운 움직임 후보를 유도하는 단계를 더 포함한다. 일부 실시형태들에서, 새로운 움직임 후보를 유도하는 단계는 제1 예측 방향의 제1 움직임 벡터와 제2 예측 방향의 제2 움직임 벡터의 평균에 기초하여 새로운 움직임 후보의 움직임 벡터를 결정하는 단계를 포함한다. 일부 실시형태들에서, 새로운 움직임 후보를 유도하는 단계는 제2 예측 방향에 대한 정보에 따라 제1 예측 방향으로 제1 움직임 벡터를 스케일링함으로써 스케일링된 움직임 벡터를 결정하는 단계; 및 스케일링된 움직임 벡터와 제2 예측 방향의 제2 움직임 벡터의 평균에 기초하여 새로운 움직임 후보의 움직임 벡터를 결정하는 단계를 포함한다.
일부 실시형태들에서, 제1 참조 픽처 리스트는 목록 0(list 0)이고 제2 참조 픽처 리스트는 목록 1(list 1)이다. 일부 실시형태들에서, 제1 참조 픽처 리스트는 목록 1(list 1)이고, 제2 참조 픽처 리스트는 목록 0(list 0)이다. 일부 실시형태들에서, 이러한 방법은 변환된 움직임 벡터를 이용하여 과거 변환들에 기초하여 결정된 움직임 후보들의 표를 업데이트하는 단계를 포함한다. 일부 실시형태들에서, 표는 HMVP(History Motion Vector Prediction) 표를 포함한다.
일부 실시형태들에서, 방법은 움직임 벡터 세트를 변경하는 단계에 앞서 제1 예측 방향 및 제2 예측 방향에 대한 정보를 사용하여 과거 변환들에 기초하여 결정된 움직임 후보의 표를 업데이트하는 단계를 포함한다. 일부 실시형태들에서, 변환된 움직임 벡터는 현재 블록에 대한 움직임 보상 동작을 위해 사용된다. 일부 실시형태들에서, 변환된 움직임 벡터는 다음(후속) 블록의 움직임 벡터를 예측하는 데 사용된다. 일부 실시형태들에서, 변환된 움직임 벡터는 현재 블록에 대한 디블록킹 과정(deblocking process)에 사용된다.
일부 실시형태들에서, 제1 예측 방향 및 제2 예측 방향에 대한 정보는 움직임 벡터 세트를 변경하는 단계에 앞서 현재 블록에 대한 움직임 보상 동작에 사용된다. 일부 실시형태들에서, 움직임 벡터 세트를 변경하는 단계에 앞서 정보는 후속 블록의 움직임 벡터를 예측하는 데 사용된다. 일부 실시형태들에서, 제1 예측 방향 및 제2 예측 방향에 대한 정보는 움직임 벡터 세트를 변경하는 단계에 앞서 현재 블록에 대한 디블록킹 과정에 사용된다.
일부 실시형태들에서, 변환된 움직임 벡터는 현재 블록에 대한 움직임 개선 동작(motion refinement operation)에 사용된다. 일부 실시형태들에서, 움직임 벡터 세트를 변경하는 단계에 앞서 제1 예측 방향 및 제2 예측 방향에 대한 정보는 현재 블록에 대한 개선 동작을 위해 사용된다. 일부 실시형태들에서, 개선 동작은 적어도 BDOF(Bi-Directional Optical Flow) 동작 혹은 PROF(Prediction Refined with Optical Flow) 동작을 포함하는 광 흐름 코딩 동작(optical flow coding operation)을 포함한다.
일부 실시형태들에서, 이러한 방법은 제1 예측 방향에 대한 정보 및 제2 예측 방향에 대한 정보에 기초하여 중간 예측 블록들을 생성하는 단계, 중간 예측 블록을 개선하는 단계, 및 중간 예측 블록들 중 하나에 기초하여 최종 예측 블록을 결정하는 단계를 포함한다.
도 35는 본 발명에 따르는 비디오 처리를 위한 방법(3500)의 흐름도 표현이다. 이러한 방법(3500)은, 동작 3502에서, 비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해, 블록 차원의 조건이 만족된 경우 양방향 움직임 벡터로부터 단 방향 움직임 벡터를 결정하는 단계를 포함한다. 단 방향 움직임 벡터는 이후 변환을 위한 머지 후보로서 사용된다. 이러한 방법(3500)은 동작 3504에서 결정에 기반하여 변환을 수행하는 단계를 포함한다.
일부 실시형태들에서, 변환된 단 방향 움직임 벡터는 MMVD(Merge with Motion Vector Difference) 코딩 프로세스에서 베이스 머지 후보로써 사용된다. 일부 실시형태들에서, 변환된 단 방향 움직임 벡터는 이후 머지 리스트에 삽입된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 양 방향 움직임 벡터의 한 예측 방향에 기초하여 변환된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 오직 한 예측 방향에 기초하여 변환되고, 오직 한 예측 방향은 참조 픽처 리스트 0에 연관된다. 일부 실시형태들에서, 현재 블록이 위치한 비디오 데이터 유닛이 양예측되는 경우, 후보 리스트에서 제1 후보에 대한 오직 하나의 예측 방향은 참조 픽처 리스트 0에 연관되고, 후보 리스트에서 제2 후보에 대한 오직 하나의 예측 방향은 참조 픽처 리스트 1에 연관된다. 후보 리스트는 머지 후보 리스트 혹은 MMVD 베이스 후보 리스트를 포함한다.
일부 실시형태들에서, 비디오 데이터 유닛은 현재 슬라이스, 타일 그룹, 혹은 비디오의 픽처를 포함한다. 일부 실시형태들에서, 단 방향 움직임 벡터는 비디오 데이터 유닛의 모든 참조 픽처들이 디스플레이 순서에 따라 과거 픽처들인 경우 참조 픽처 리스트 1에 기초하여 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 디스플레이 순서에 따라 비디오 데이터 유닛의 참조 픽처들의 적어도 제1 참조 픽처가 과거 픽처이고 비디오 데이터 유닛의 참조 픽처들의 적어도 제2 참조 픽처가 미래 픽처인 경우 참조 픽처 리스트 0에 기초하여 결정된다. 일부 실시형태들에서, 상이한 참조 픽처 리스트들에 기초하여 결정된 단 방향 움직임 벡터들은 머지 리스트에서 인터리브(interleave) 방식으로 위치된다.
일부 실시형태들에서, 단 방향 움직임 벡터는 저 지연 확인 지시자(low delay check indicator)에 기초하여 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 변환 동안 움직임 보상 프로세스에 앞서 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 MMVD(Merge With Motion Vector Difference) 코딩 프로세스에서 움직임 벡터 차이를 추가하는 단계에 앞서 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 샘플 개선 프로세스(sample refinement process)에 앞서 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 BDOF(Bi-Directional Optical Flow) 프로세스에 앞서 결정된다. 일부 실시형태들에서, BDOF 프로세스는 단 방향 움직임 벡터를 사용한다는 결정에 기초하여 이후 디스에이블된다.
일부 실시형태들에서, 단 방향 움직임 벡터는 PROF(Prediction Refinement with Optical Flow) 프로세스에 앞서 결정된다. 일부 실시형태들에서, 단 방향 움직임 벡터는 DMVR(Decoder-side Motion Vector Refinement) 프로세스에 앞서 결정된다. 일부 실시형태들에서, DMVR 프로세스는 단 방향 움직임 벡터에 기초하여 이후 디스에이블된다.
일부 실시형태들에서, 블록 차원의 조건은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2임을 지시하고, T1 및 T2 는 양의 정수이다. 일부 실시형태들에서, 블록 차원의 조건은 현재 블록의 너비가 T2이고 현재 블록의 높이가 T1임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 블록 차원의 조건은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2 이하임을 지시하고, T1 및 T2는 양의 정수이다. 일부 실시예들에서, 블록 차원의 조건은 현재 블록의 너비가 T2이고 현재 블록의 높이가 T1 이하임을 지시하고, T1 및 T2는 양의 정수이다.
도 36은 본 발명에 따르는 비디오 처리를 위한 방법(3600)의 흐름도 표현이다. 이러한 방법(3600)은, 동작 3602에서, 비디오의 현재 블록 및 비디오의 비트스트림 표현 간의 변환을 위해 현재 블록의 움직임 후보를 현재 블록의 차원에 기반한 단 방향 예측 후보로 제한하도록 결정하는 단계를 포함한다. 이러한 방법(3600)은, 동작 3604에서, 이러한 결정에 기초하여 변환을 수행하는 단계를 포함한다.
일부 실시형태들에서, 현재 블록의 차원이 조건을 만족하는 경우, 현재 블록의 모든 움직임 후보들은 양 방향 예측 후보들로 제한된다. 일부 실시형태들에서, 양 방향 움직임 후보는 현재 블록의 차원이 조건을 만족하는 경우 단 방향 예측 후보로 변환된다. 일부 실시형태들에서, 현재 블록의 차원은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2임을 지시하며, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 블록 차원의 조건은 현재 블록의 너비가 T2이고 현재 블록의 높이가 T1임을 지시하되, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 블록 차원의 조건은 현재 블록의 너비가 T1이고 현재 블록의 높이가 T2 이하임을 지시하며, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, 현재 블록의 차원은 현재 블록의 너비가 T2이고, 현재 블록의 높이가 T1 이하임을 지시하되, T1 및 T2는 양의 정수이다. 일부 실시형태들에서, T1은 4이고 T2는 8이다. 일부 실시 형태들에서, T1은 4이고 T2는 4이다. 일부 실시형태들에서, T1는 8이고 T2도 8이다.
일부 실시형태들에서는, 전술된 방법에서 상기 변환을 수행하는 것은, 비트스트림 표현을 상기 비디오의 현재 블록에 기반하여 생성하는 것을 포함한다. 일부 실시형태들에서는, 전술된 방법에서 상기 변환을 수행하는 것은, 상기 비디오의 현재 블록을 상기 비트스트림 표현으로부터 생성하는 것을 포함한다.
본 문서에서, “비디오 처리(video processing)”이라는 용어는 비디오 인코딩, 비디오 디코딩, 비디오 압축 혹은 비디오 압축 해제를 지시할 수 있다. 예를 들어, 비디오 압축 알고리즘은 비디오의 픽셀 표현에서 대응하는 비트스트림 표현으로 또는 그 반대로 변환하는 동안 적용될 수 있다. 현재 비디오 블록의 비트스트림 표현은, 예를 들어, 신택스에서 정의된 바와 같이, 비트스트림 내에서 동일 위치(co-located) 비트들에 대응되거나 다른 위치들에 확산될 수 있다. 예를 들어, 매크로블록은 변환 및 코딩된 오류 잔차 값들의 관점에서 인코딩될 수 있으며, 헤더의 비트들 혹은 비트스트림에서의 다른 필드들을 이용하여 인코딩될 수 있다. 또한, 변환 동안, 디코더는 상술한 솔루션에서 설명된 바와 같이 결정에 기초하여 일부 필드가 존재하거나 존재하지 않을 수 있다는 지식으로 비트스트림을 파싱할 수 있다. 유사하게, 인코더는 특정 신택스 필드들이 포함되는지 혹은 포함되지 않는지를 결정할 수 있으며, 비트스트림 표현으로부터 신택스 필드들을 포함하거나 제외함으로써 그에 따라 비트스트림 표현을 생성할 수 있다.
본 명세서에서 설명되는, 개시된 솔루션, 예, 실시형태, 모듈 및 기능적 동작 및 그 이외의 솔루션, 예, 실시형태, 모듈 및 기능적 동작은, 디지털 전자 회로로, 또는 본 명세서에서 개시되는 구조체 및 그들의 구조적 균등물을 포함하는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나의 이상의 조합으로 구현될 수 있다. 개시된 실시형태 및 그 외의 실시형태들은, 하나 이상의 컴퓨터 프로그램 제품으로서, 예를 들어 데이터 처리 장치에 의해 실행되거나 그 동작을 제어하기 위한, 컴퓨터-판독가능 매체 상에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터-판독가능 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기재, 메모리 디바이스, 머신-판독가능한 전파된 신호에 영향을 주는 물질의 조합, 또는 이들 중 하나 이상의 조합일 수 있다. 용어 "데이터 처리 장치"는, 예를 들어 프로그래밍가능한 프로세서, 컴퓨터, 또는 다수의 프로세서 또는 컴퓨터를 포함하는, 데이터를 처리하기 위한 모든 장치, 디바이스, 및 머신을 망라한다. 이러한 장치는 하드웨어에 추가하여, 관심 대상인 컴퓨터 프로그램을 위한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다. 전파된 신호는 인위적으로 생성된 신호, 예를 들어, 적절한 수신기 장치로 송신되기 위한 정보를 인코딩하기 위하여 생성되는, 머신에 의해 생성된 전기적, 광학적, 또는 전자기적 신호이다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드라고도 알려져 있음)은 컴파일되거나 해석된 언어를 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 이것은 독립형 프로그램과 같은 또는 컴퓨팅 환경에서 사용되기에 적합한 모듈, 성분, 서브루틴, 또는 다른 유닛과 같은 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템 내의 파일에 대응하는 것은 아니다. 프로그램은 다른 프로그램 또는 데이터를 보유하는 파일(예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트) 내에, 문제가 되는 프로그램 전용의 단일 파일 내에, 또는 여러 개의 조율된 파일들)예를 들어, 하나 이상의 모듈, 서브-프로그램, 또는 코드의 일부를 저장하는 파일) 내에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 하나의 사이트에 위치되거나 여러 사이트들에 걸쳐서 분산되고 통신 네트워크에 의하여 상호연결되는 여러 컴퓨터들 상에서 실행되도록 구현될 수 있다.
본 명세서에서 설명되는 프로세스 및 로직 흐름은 입력 데이터 상에 작용하여 출력을 생성함으로써 기능을 수행하기 위한 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍가능한 프로세서에 의하여 수행될 수 있다. 또한 프로세스 및 로직 흐름은 특수 목적 로직 회로부, 예를 들어 FPGA(field programmable gate array), 또는 ASIC(application-상세 integrated circuit)에 의하여 수행될 수 있으며, 장치는 또한 이러한 것으로서 구현될 수 있다.
컴퓨터 프로그램을 실행하기에 적합한 프로세서는, 예를 들어 범용 및 주문형 마이크로프로세서 양자 모두, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서를 포함한다. 일반적으로, 프로세서는 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 이들 모두로부터 명령 및 데이터를 수신할 것이다. 컴퓨터의 본질적인 요소는 명령을 수행하기 위한 프로세서 및 명령 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어 자기적, 자기-광학적 디스크, 또는 광학적 디스크를 더욱 포함하거나, 이것으로부터 데이터를 수신하거나 이것으로 데이터를 전송하거나, 또는 이들 모두를 하기 위하여 이것에 동작가능하도록 커플링될 것이다. 그러나, 컴퓨터는 이러한 디바이스를 가져야 하는 것은 아니다. 컴퓨터 프로그램 명령 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체는, 예를 들자면 반도체 메모리 디바이스, 예를 들어 EPROM, EEPROM, 및 플래시 메모리 디바이스; 자기적 디스크, 예를 들어 내부 하드 디스크 또는 착탈식 디스크; 자기-광학적 디스크; 및 CD-ROM 및 DVD 디스크를 포함하는 비-휘발성 메모리, 미디어 및 메모리 디바이스의 모든 형태를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로부에 의하여 보충되거나 그 내부에 통합될 수 있다.
본 특허 명세서가 많은 특징을 포함하고 있지만, 이들은 임의의 기술 요지 또는 청구될 내용의 범위를 한정하는 것으로 해석되어서는 안 되고, 오히려 특정 기법의 특정 실시형태들에 특유할 수 있는 특징들의 설명으로서 해석되어야 한다. 본 특허 명세서에서 별개의 실시형태들의 콘텍스트에서 설명되는 일부 특징들은, 단일 실시형태 내에 조합되어 구현될 수도 있다. 반대로, 단일 실시예의 콘텍스트에서 설명되는 다양한 특징들은 또한 따로따로 다수의 실시예들에서 또는 임의의 적합한 서브컴비네이션에서 구현될 수 있다. 더구나, 비록 특징들이 특정한 조합들로 작용하는 것으로 위에서 설명될 수도 있고 그와 같이 처음에 청구된 경우에도, 청구된 조합들로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 서브컴비네이션 또는 서브컴비네이션의 변형예를 위한 것일 수도 있다.
이와 유사하게, 동작들이 도면들에서 특정한 순서로 묘사되는 반면에, 원하는 결과들을 획득하기 위하여 이러한 동작들이 도시된 특정한 순서로 또는 순차적인 순서로 수행되어야 하거나, 또는 도시된 모든 동작들이 수행되어야 한다고 요구하는 것으로 이해되어서는 안 된다. 더욱이, 본 특허 명세서에서 설명되는 실시형태들 내의 다양한 시스템 성분들을 분리하는 것은, 모든 실시형태에서 이러한 분리를 요구하는 것으로 이해되어서는 안 된다.
몇 가지의 구현형태와 예들만이 설명되고, 다른 구현형태, 개선형태, 및 변형예들이 본 특허 명세서에서 설명되고 예시된 것에 기반하여 이루어질 수 있다.

Claims (54)

  1. 비디오 처리 방법에 있어서,
    비디오의 현재 블록과 비디오의 비트스트림 표현 간의 변환을 위해, 현재 블록의 크기와 연관된 조건이 만족되었는지 여부에 부분적으로 기초하여 현재 블록의 코딩 정보가 비트스트림 표현에서 표현되는 방식을 결정하는 단계; 및
    상기 결정에 기초하여 상기 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
  2. 제1 항에 있어서,
    상기 코딩 정보는 상기 조건이 만족되는 경우 상기 비트스트림 표현에서 시그널링되는, 비디오 처리 방법.
  3. 제1 항에 있어서,
    상기 코딩 정보는 상기 조건이 만족되는 경우 상기 비트스트림 표현에서 생략되는, 비디오 처리 방법.
  4. 제1 항 내지 제3 항 중 적어도 어느 한 항에 있어서,
    상기 조건이 만족되는 경우, 인트라 블록 복사(IBC) 코딩 툴 혹은 인터 예측 코딩 툴 중 적어도 하나가 현재 블록에 대해 디스에이블(disable)되는, 비디오 처리 방법.
  5. 제4 항에 있어서,
    상기 코딩 정보는 상기 IBC 코딩 툴과 상기 인터 예측 코딩 툴이 디스에이블(disable)되는 경우 비트스트림 표현에서 생략되는, 비디오 처리 방법.
  6. 제4 항에 있어서,
    상기 코딩 정보는 상기 IBC 코딩 툴이 이네이블(enable)되고 상기 인터 예측 툴이 디스에이블(disable)되는 경우 상기 비트스트림 표현에서 시그널링되는, 비디오 처리 방법.
  7. 제1 항 내지 제6 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 상기 IBC 툴 및/혹은 상기 인터 예측 코딩 툴과 연관된 동작 모드를 포함하고, 상기 동작 모드는 적어도 정상(normal) 모드 혹은 스킵 모드를 포함하는, 비디오 처리 방법.
  8. 제1 항 내지 제7 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 코딩 툴과 연관된 예측 모드의 사용을 지시하는 지시자를 포함하는, 비디오 처리 방법.
  9. 제8 항에 있어서,
    상기 코딩 툴은 상기 비트스트림 표현에서 상기 코딩 정보가 생략되는 경우 사용되지 않는, 비디오 처리 방법.
  10. 제8 항에 있어서,
    상기 코딩 툴은 상기 비트스트림 표현에서 상기 코딩 정보가 생략되는 경우 사용되는, 비디오 처리 방법.
  11. 제8 항 내지 제10 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 툴은 인트라 블록 복사(IBC) 코딩 툴 혹은 인터 예측 코딩 툴을 포함하는, 비디오 처리 방법.
  12. 제8 항 내지 제11 항 중 적어도 어느 한 항에 있어서,
    상기 지시자가 상기 비트스트림에서 생략되는 경우, 다른 하나 이상의 코딩 툴들을 지시하는 하나 이상의 지시자들은 상기 비트스트림 표현에서 시그널링되는, 비디오 처리 방법.
  13. 제12 항에 있어서,
    상기 다른 하나 이상의 코딩 툴들은 적어도 인트라 코딩 툴 혹은 팔레트 코딩 툴을 포함하는, 비디오 처리 방법.
  14. 제12 항에 있어서,
    상기 지시자는 인터 모드와 인트라 모드를 구분하되, 상기 인터 예측 코딩 툴이 디스에이블(disable)되고 상기 IBC 코딩 툴이 이네이블(enable)되는 경우, 상기 하나 이상의 지시자들은 상기 비트스트림에서 시그널링되는 IBC 모드를 지시하는 제1 지시자 및 팔레트 모드를 지시하는 제2 지시자를 포함하는, 비디오 처리 방법.
  15. 제1 항 내지 제14 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 상기 스킵 모드에 대한 제3 지시자를 포함하고, 상기 스킵 모드는 인터-스킵 모드 혹은 IBC 스킵 모드인, 비디오 처리 방법.
  16. 제15 항에 있어서,
    상기 스킵 모드에 대한 상기 제3 지시자는 상기 인터 예측 코딩 툴이 디스에이블(disable)되고, 상기 IBC 코딩 툴이 이네이블(enable)되는 경우 시그널링되는, 비디오 처리 방법.
  17. 제15 항 혹은 제16 항에 있어서,
    상기 비트스트림 표현에서 상기 IBC 모드의 사용이 생략된다는 상기 지시자에도 불구하고 상기 인터 예측 코딩 툴이 디스에이블(disable)되고 상기 IBC 코딩 툴이 이네이블(enable)되는 경우 상기 예측 모드는 상기 IBC 모드로 결정되고, 상기 스킵 모드는 상기 현재 블록에 적용 가능한, 비디오 처리 방법.
  18. 제1 항 내지 제17 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 삼각(triangle) 모드를 포함하는, 비디오 처리 방법.
  19. 제1 항 내지 제18 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 인터 예측 방향을 포함하는, 비디오 처리 방법.
  20. 제19 항에 있어서,
    상기 코딩 정보는 상기 현재 블록이 단 예측 코딩 툴을 이용하여 코딩된 경우 상기 비트스트림 표현에서 생략되는, 비디오 처리 방법.
  21. 제1 항 내지 제20 항 중 적어도 어느 한 항에 있어서,
    상기 코딩 정보는 SMVD(Symmetric Motion Vector Difference) 방법의 사용을 지시하는 지시자를 포함하는, 비디오 처리 방법.
  22. 제21 항에 있어서,
    상기 조건이 만족되는 경우, 상기 현재 블록은 상기 비트스트림 표현에서 상기 SMVD 방법의 사용을 지시하는 상기 지시자에도 불구하고 단 예측되도록 설정되는, 비디오 처리 방법.
  23. 제22 항에 있어서,
    상기 SMVD 방법의 상기 사용을 지시하는 상기 지시자가 상기 비트스트림 표현으로부터 배제되는 경우, 단 예측 코딩 툴과 연관되는 목록 0(list 0) 혹은 목록(list 1)만이 움직임 보상 프로세스에서 사용되는, 비디오 처리 방법.
  24. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T1이고 상기 현재 블록의 높이가 T2이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  25. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T2이고 상기 현재 블록의 높이가 T1이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  26. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T1이고 상기 현재 블록의 높이가 T2이하이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  27. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T2이고 상기 현재 블록의 높이가 T1 이하이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  28. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T1 이하이고 상기 현재 블록의 높이가 T2 이하이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  29. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T1 이상이고 상기 현재 블록의 높이가 T2 이상이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  30. 제1 항 내지 제23 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 폭이 T1 이상이고 상기 현재 블록의 높이가 T2 이상이며, T1 및 T2는 양의 정수임을 지시하는, 비디오 처리 방법.
  31. 제24 항 내지 제30 항 중 적어도 어느 한 항에 있어서,
    T1은 4이고, T2는 16인, 비디오 처리 방법.
  32. 제24 항 내지 제30 항에 있어서,
    T1 및 T2는 8인, 비디오 처리 방법.
  33. 제24 항 내지 제30 항에 있어서,
    T1은 8이고, T2는 4인, 비디오 처리 방법.
  34. 제24 항 내지 제30 항에 있어서,
    T1 및 T2는 4인, 비디오 처리 방법.
  35. 제24 항 내지 제30 항에 있어서,
    T1 및 T2는 32인, 비디오 처리 방법.
  36. 제24 항 내지 제30 항에 있어서,
    T1 및 T2는 64인, 비디오 처리 방법.
  37. 제24 항 내지 제30 항에 있어서,
    T1 및 T2는 128인, 비디오 처리 방법.
  38. 제1 항 내지 제37 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 크기가 4x8, 8x4, 4x16 혹은 16x4임을 지시하는, 비디오 처리 방법.
  39. 제1 항 내지 제37 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 크기가 4x8, 8x4임을 지시하는, 비디오 처리 방법.
  40. 제1 항 내지 제37 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 크기가 4xN, Nx4이고, N은 양의 정수이며 N ≤ 16 임을 지시하는, 비디오 처리 방법.
  41. 제1 항 내지 제37 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 크기가 8xN, Nx8이고, N은 양의 정수이며 N ≤ 16 임을 지시하는, 비디오 처리 방법.
  42. 제1 항 내지 제37 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 색성분이 N개 이하의 샘플들을 포함함을 지시하는, 비디오 처리 방법.
  43. 제42 항에 있어서,
    N은 16인, 비디오 처리 방법.
  44. 제42 항에 있어서,
    N은 32인, 비디오 처리 방법.
  45. 제1 항 내지 제44 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 색성분이 높이와 동일한 폭을 가짐을 지시하는, 비디오 처리 방법.
  46. 제1 항 내지 제44 항 중 적어도 어느 한 항에 있어서,
    상기 조건은 상기 현재 블록의 색성분의 크기가 4x8, 8x4, 4x4, 4x16 혹은 16x4임을 지시하는, 비디오 처리 방법.
  47. 제42 항 내지 제46 항 중 적어도 어느 한 항에 있어서,
    상기 색성분은 루마 성분 혹은 하나 이상의 크로마 성분들을 포함하는, 비디오 처리 방법.
  48. 제1 항 내지 제47 항 중 적어도 어느 한 항에 있어서,
    인터 예측 툴은 상기 조건은 상기 현재 블록이 4인 폭 및 4인 높이를 가짐을 지시하는 경우 디스에이블(disable)되는, 비디오 처리 방법.
  49. 제1 항 내지 제48 항 중 적어도 어느 한 항에 있어서,
    IBC 예측 툴은 상기 조건이 상기 현재 블록이 4인 폭 및 4인 높이를 가짐을 지시하는 경우 디스에이블(disable)되는, 비디오 처리 방법.
  50. 제1 항 내지 제49 항 중 적어도 어느 한 항에 있어서,
    단 예측 코딩 툴에 연관된 목록 0(list 0)은 (1) 상기 현재 블록의 폭이 4이고, 높이가 8이거나, (2) 상기 현재 블록의 폭이 8이고, 높이가 4인 경우 움직임 보상 프로세스에서 사용되고, 양 예측 코딩 툴이 상기 움직임 보상 프로세스에서 디스에이블(disable)되는, 비디오 처리 방법.
  51. 제1 항 내지 제50 항 중 적어도 어느 한 항에 있어서,
    상기 변환을 수행하는 단계는 상기 비디오의 상기 현재 블록에 기반하여 상기 비트스트림 표현을 생성하는 단계를 포함하는, 비디오 처리 방법.
  52. 제1 항 내지 제50 항 중 적어도 어느 한 항에 있어서,
    상기 변환을 수행하는 단계는 상기 비트스트림 표현으로부터 상기 비디오의 상기 현재 블록을 생성하는 단계를 포함하는, 비디오 처리 방법.
  53. 제1항 내지 제52 항 중 적어도 어느 한 항에 기재된 방법을 구현하는 프로세서를 포함하는 비디오 처리 장치.
  54. 프로세서에 의해 실행될 때 프로세서가 제1항 내지 제52 항 중 적어도 어느 한 항에 기재된 방법을 구현하게 하는 코드가 저장된, 컴퓨터 판독 가능 매체.



KR1020217027315A 2019-03-06 2020-03-06 크기에 따른 인터 코딩 KR20210131347A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CNPCT/CN2019/077179 2019-03-06
CN2019077179 2019-03-06
PCT/CN2020/078108 WO2020177756A1 (en) 2019-03-06 2020-03-06 Size dependent inter coding

Publications (1)

Publication Number Publication Date
KR20210131347A true KR20210131347A (ko) 2021-11-02

Family

ID=78124310

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217027315A KR20210131347A (ko) 2019-03-06 2020-03-06 크기에 따른 인터 코딩

Country Status (4)

Country Link
EP (1) EP3915251A4 (ko)
JP (1) JP7192145B2 (ko)
KR (1) KR20210131347A (ko)
CN (1) CN113545038B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA3143538A1 (en) 2019-06-14 2020-12-17 Lg Electronics Inc. Image decoding method and device for deriving weight index information for generation of prediction sample

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130195188A1 (en) * 2012-01-26 2013-08-01 Panasonic Corporation Image coding method, image coding apparatus, image decoding method, image decoding apparatus, and image coding and decoding apparatus
US9591312B2 (en) * 2012-04-17 2017-03-07 Texas Instruments Incorporated Memory bandwidth reduction for motion compensation in video coding
US20160277758A1 (en) * 2013-10-16 2016-09-22 Sharp Kabushiki Kaisha Image decoding device and image coding device
CN105493505B (zh) * 2014-06-19 2019-08-06 微软技术许可有限责任公司 统一的帧内块复制和帧间预测模式
US10327001B2 (en) * 2014-06-19 2019-06-18 Qualcomm Incorporated Systems and methods for intra-block copy
US9918105B2 (en) * 2014-10-07 2018-03-13 Qualcomm Incorporated Intra BC and inter unification
US10200713B2 (en) * 2015-05-11 2019-02-05 Qualcomm Incorporated Search region determination for inter coding within a particular picture of video data
EP3273692A4 (en) * 2015-06-10 2018-04-04 Samsung Electronics Co., Ltd. Method and apparatus for encoding or decoding image using syntax signaling for adaptive weight prediction
EP3318060B1 (en) * 2015-07-27 2021-05-26 Mediatek Inc. Reference picture storage in intra block copy mode
EP3301920A1 (en) * 2016-09-30 2018-04-04 Thomson Licensing Method and apparatus for coding/decoding omnidirectional video

Also Published As

Publication number Publication date
EP3915251A1 (en) 2021-12-01
EP3915251A4 (en) 2022-03-16
CN113545038A (zh) 2021-10-22
JP2022522149A (ja) 2022-04-14
JP7192145B2 (ja) 2022-12-19
CN113545038B (zh) 2023-10-24

Similar Documents

Publication Publication Date Title
KR102628361B1 (ko) 인터-예측을 위한 대역폭 제어 방법
JP7182000B2 (ja) インター-イントラ複合予測モードにおける重み
KR102635518B1 (ko) 변환된 단예측 후보의 사용
JP7192145B2 (ja) サイズに依存したインターコーディング
WO2020192643A1 (en) Derivation of converted uni-prediction candidate

Legal Events

Date Code Title Description
A201 Request for examination