KR102649200B1 - 인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩 - Google Patents

인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩 Download PDF

Info

Publication number
KR102649200B1
KR102649200B1 KR1020217037075A KR20217037075A KR102649200B1 KR 102649200 B1 KR102649200 B1 KR 102649200B1 KR 1020217037075 A KR1020217037075 A KR 1020217037075A KR 20217037075 A KR20217037075 A KR 20217037075A KR 102649200 B1 KR102649200 B1 KR 102649200B1
Authority
KR
South Korea
Prior art keywords
ibc
motion vector
video
candidates
merge
Prior art date
Application number
KR1020217037075A
Other languages
English (en)
Other versions
KR20220012239A (ko
Inventor
리 장
지장 수
카이 장
홍빈 리우
Original Assignee
베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
바이트댄스 아이엔씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드, 바이트댄스 아이엔씨 filed Critical 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드
Publication of KR20220012239A publication Critical patent/KR20220012239A/ko
Application granted granted Critical
Publication of KR102649200B1 publication Critical patent/KR102649200B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/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/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/11Selection of coding mode or of prediction mode among a plurality of spatial 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/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • 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/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques

Abstract

블록 벡터 시그널링 및/또는 병합 후보를 사용하는, 비디오의 인트라-블록 코딩 기반 디코딩 또는 인코딩을 위한 방법, 디바이스 및 시스템이 개시된다. 예시적인 비디오 처리를 위한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비트스트림 표현은 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하는 인트라 블록 복제(intra block copy; IBC) 개선된 움직임 벡터 예측(advanced motion vector prediction; AMVP) 모드에 대한 움직임 벡터차(motion vector prediction; MVD) 관련 신택스 요소를 포함하며, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.

Description

인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩
관련 출원에 대한 상호 참조
본 출원은 2020년 5월 25일에 출원된 국제 특허 출원 PCT/CN2020/092032의 국내 단계이다. 파리 조약을 준수하는 적용가능한 특허법 및/또는 규칙에 따라서, 본 출원은 2019 년 5 월 25 일에 출원된 국제 특허 출원 번호 제 PCT/CN2019/088454에 대한 우선권을 시기적절하게 주장한다. 이러한 법률에 따른 모든 목적을 위하여, 앞서 언급된 출원들의 모든 개시내용은 본 출원의 개시 내용의 일부로서 본 명세서에서 원용에 의해 통합된다.
본 문서는 비디오 및 이미지 코딩 및 디코딩 기술에 관한 것이다.
디지털 비디오는 인터넷 및 다른 디지털 통신 네트워크에서 가장 넓은 대역폭을 사용한다. 비디오를 수신하고 디스플레이할 수 있는 접속된 사용자 디바이스의 개수가 증가함에 따라서, 디지털 비디오 사용을 위한 대역폭 수요는 계속하여 증가할 것으로 기대된다.
개시된 기법은, 블록 벡터 시그널링 및/또는 병합 후보를 사용하면서 비디오의 인트라-블록 코딩 기반 디코딩 또는 인코딩이 수행되는 비디오 또는 이미지 디코더 또는 인코더 실시형태에 의해서 사용될 수 있다.
하나의 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비트스트림 표현은 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하는 인트라 블록 복제(intra block copy; IBC) 개선된 움직임 벡터 예측(advanced motion vector prediction; AMVP) 모드에 대한 움직임 벡터차(motion vector prediction; MVD) 관련 신택스 요소를 포함하며, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환에 대하여, 인트라 블록 복제(IBC) 모드의 사용의 표시가 상기 비디오 영역에 대하여 디스에이블되고, 상기 IBC 모드의 사용은 상기 비디오의 시퀀스 레벨에서 이네이블된다고 결정하는 단계; 및 상기 결정에 기반하여 변환을 수행하는 단계를 포함하고,
상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비트스트림 표현은, 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하여, 인트라 블록 복제(IBC) 모드 및/또는 하나 이상의 IBC-관련 신택스 요소의 사용에 관련된 표시를 선택적으로 포함하며, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는, 제 1 타입의 인트라 블록 복제(IBC) 후보의 최대 개수의 표시는 상기 변환 중에 사용되는 인터 모드에 대한 병합 후보의 최대 개수로부터 독립적으로 상기 비트스트림 표현 내에서 시그널링되며, 상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은, 비디오의 비디오 영역 및 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)는 IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨) 및 IBC 발전된 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)의 함수이며, 상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은, 비디오의 비디오 영역 및 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)는 상기 비디오 영역의 코딩된 모드 정보에 기반한다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 디코딩된 인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 병합 인덱스 또는 디코딩된 IBC 병합 인덱스는 상기 인트라 블록 복제(IBC) 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)보다 작다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계, 및 상기 결정에 기반하여, 상기 변환 도중에 디폴트 예측 블록을 사용하는 단계를 포함한다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계, 및 상기 결정에 기반하여, 상기 비디오 영역이 무효 블록 벡터를 가지고 있는 것으로 처리함으로써 상기 변환을 수행하는 단계를 포함한다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 조건을 만족시키지 못한다고 결정하는 단계, 상기 결정에 기반하여, 보충적(supplemental) 블록 벡터(BV) 후보 목록을 생성하는 단계, 및 상기 보충적 BV 후보 목록을 사용하여 상기 변환을 수행하는 단계를 포함한다.
또 다른 대표적인 양태에서는, 비디오 처리를 위한 방법이 개시된다. 이러한 방법은 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)가 2와 같지 않다.
다른 예시적인 양태에서, 전술된 방법은 프로세서를 포함하는 비디오 디코더 장치에 의해서 구현될 수 있다.
다른 예시적인 양태에서, 전술된 방법은 프로세서를 포함하는 비디오 인코더 장치에 의해서 구현될 수 있다.
또 다른 예에서 양태, 이러한 방법은 프로세서-실행가능 명령의 형태로 구현되고 컴퓨터-판독가능 프로그램 매체에 저장될 수 있다.
이러한 특징과 다른 특징들이 본 명세서 전체에서 설명된다.
도 1은 병합 후보 목록 구조에 대한 유도 프로세스의 일 예를 도시한다.
도 2는 공간적 병합 후보들의 예시적인 위치를 보여준다.
도 3은 공간적 병합 후보의 리던던시 점검을 위하여 고려되는 후보 쌍의 예들을 보여준다.
도 4a 및 도 4b는 N×2N 및 2N×N 파티션의 제 2 예측 유닛(PU)에 대한 위치의 예들을 보여준다.
도 5는 시간적 병합 후보에 대한 움직임 벡터 스케일링의 예시도이다.
도 6은 시간적 병합 후보인 C0 및 C1에 대한 후보 위치의 예를 보여준다.
도 7은 결합된 양-예측성 병합 후보의 일 예를 보여준다.
도 8은 움직임 벡터 예측 후보에 대한 유도 프로세스를 요약한다.
도 9는 공간적 움직임 벡터 후보에 대한 움직임 벡터 스케일링의 예시도이다.
도 10a 및 도 10b는 4-파라미터 아핀 움직임 모델 및 6-파라미터 아핀 움직임 모델을 각각 보여준다.
도 11은 서브-블록마다의 아핀 움직임 벡터 필드(motion vector field; MVF)의 일 예이다.
도 12는 아핀 병합 모드를 위한 후보 위치의 예들을 보여준다.
도 13은 수정된 병합 목록 구조 프로세스의 일 예를 보여준다.
도 14는 삼각형 파티션 기반 인터 예측의 예를 보여준다.
도 15는 서브-블록마다의 UMVE(ultimate motion vector expression) 검색 프로세스의 일 예를 도시한다.
도 16은 UMVE 검색 포인트(UMVE Search Point)의 일 예를 도시한다.
도 17은 DMVR 내의 목록 0 및 목록 1 사이에서 미러링되는 MVD (0, 1)의 일 예를 도시한다.
도 18은 일 회의 반복에서 점검될 수 있는 MV들의 예를 보여준다.
도 19는 인트라 블록 복제(intra block copy; IBC)의 일 예를 도시한다.
도 20a 내지 도 20k는 비디오 처리를 위한 방법의 예들에 대한 흐름도들이다.
도 21은 비디오 처리 장치의 일 예의 블록도이다.
도 22는 개시된 기법이 구현될 수 있는 하나의 예시적인 비디오 처리 시스템의 블록도이다.
본 명세서는 압축해제되거나 디코딩된 디지털 비디오 또는 이미지의 품질을 개선하기 위하여 이미지 또는 비디오 비트스트림의 디코더에 의해서 사용될 수 있는 다양한 기법을 제공한다. 간략화를 위하여, "비디오"라는 용어는 본 명세서에서 픽쳐들의 시퀀스(전통적으로 비디오라고 불림) 및 개별적인 이미지 양자 모두를 포함하도록 사용된다. 더욱이, 비디오 인코더는 추가적인 인코딩을 위해서 사용되는 디코딩된 프레임을 재구성하기 위해서, 인코딩의 프로세스 도중에 이러한 기법들을 구현할 수도 있다.
섹션의 제목은 본 명세서에서 쉽게 이해되도록 하기 위해서 사용된 것이고, 이러한 실시형태 및 기법들이 해당 섹션에만 적용가능하다고 한정하는 것이 아니다. 이와 같이, 하나의 섹션에 있는 실시형태들은 다른 섹션에 있는 실시형태와 결합될 수 있다.
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 표준을 위해 노력하고 있다.
VVC 드래프트의 최근 버전, 즉, Versatile Video Coding(Draft 5)은 다음 사이트에서 입수할 수 있다:
phenix.it-sudparis.eu/jvet/doc_end_user/documents/14_Geneva/wg11/JVET-N1001-v2.zip
VTM이라고 불리는 VVC의 최신 레퍼런스 소프트웨어는 다음에서 입수할 수 있다:
vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/tags/VTM-5.0
2.1 HEVC/H.265에서의 인터 예측
인터-코딩된 코딩 유닛(CU)의 경우, 이것은 파티션 모드에 따라서 하나의 예측 유닛(PU) 또는 2 개의 PU들로 코딩될 수 있다. 각각의 인터-예측된 PU는 하나 또는 두 개의 레퍼런스 픽쳐 목록에 대한 움직임 파라미터를 가진다. 움직임 파라미터는 움직임 벡터 및 레퍼런스 픽쳐 인덱스를 포함한다. 두 개의 레퍼런스 픽쳐 목록 중 하나를 사용하는 것은 inter_pred_idc를 사용해서 시그널링될 수도 있다. 움직임 벡터는 예측기에 상대적인 델타로서 명시적으로 코딩될 수 있다.
CU가 스킵 모드로 코딩되는 경우, 하나의 PU가 해당 CU와 연관되고, 큰 잔차 계수, 큰 코딩된 움직임 벡터 델타 또는 레퍼런스 픽쳐 인덱스가 존재하지 않는다. 현재 PU에 대한 움직임 파라미터가, 공간적 및 시간적 후보를 포함하는 이웃하는 PU들로부터 획득되는 병합 모드가 규정된다. 병합 모드는 스킵 모드에 대해서만 적용되는 것이 아니라, 임의의 인터-예측된 PU에도 적용될 수 있다. 병합 모드에 대한 대안은 움직임 파라미터의 명시적 송신인데, 여기에서는 움직임 벡터(더 구체적으로는 움직임 벡터 예측기와 비교되는 움직임 벡터차(motion vector difference; MVD))에서, 각각의 레퍼런스 픽쳐 목록에 대한 대응하는 레퍼런스 픽쳐 인덱스 및 레퍼런스 픽쳐 목록 사용이 각각의 PU마다 명시적으로 시그널링된다. 이러한 모드는 본 명세서에서 진보된 움직임 벡터 예측(Advanced motion vector prediction; AMVP)이라고 명명된다.
시그널링에 의하여 두 레퍼런스 픽쳐 목록 중 하나가 사용될 것이 표시되면, 해당 PU가 샘플들의 하나의 블록으로부터 생성된다. 이것은 '단일-예측(uni-prediction)'이라고 불린다. 단일-예측은 P-슬라이스 및 B-슬라이스 양자 모두에 대해서 이용가능하다.
시그널링에 의하여 레퍼런스 픽쳐 목록들 양자 모두가 사용될 것이 표시되면, PU는 샘플들의 두 블록으로부터 생성된다. 이것은 '양-예측(bi-prediction)'이라고 불린다. 양-예측은 B-슬라이스에 대해서만 이용가능하다.
다음 텍스트는 HEVC에서 규정된 인터 예측 모드에 대한 세부사항을 제공한다. 설명은 병합 모드로부터 시작될 것이다.
2.1.1 레퍼런스 픽쳐 목록
HEVC에서는, 현재 디코딩된 픽쳐 이외의 레퍼런스 픽쳐의 데이터 요소(예를 들어, 샘플 값 또는 움직임 벡터)로부터 유도된 예측을 나타내기 위하여 인터 예측이라는 용어가 사용된다. H.264/AVC에서와 같이, 다수의 레퍼런스 픽쳐로부터 하나의 픽쳐가 예측될 수 있다. 인터 예측을 위하여 사용되는 레퍼런스 픽쳐는 하나 이상의 레퍼런스 픽쳐 목록 내에 조직화된다. 레퍼런스 인덱스는 목록 내의 레퍼런스 픽쳐 중 어느 것이 예측 신호를 생성하기 위하여 사용되어야 하는지를 식별한다.
단일 레퍼런스 픽쳐 목록인 목록 0이 P 슬라이스에 대해서 사용되고, 두 개의 레퍼런스 픽쳐 목록인 목록 0 및 목록 1이 B 슬라이스에 대해서 사용된다. 목록 0/1 내에 포함된 레퍼런스 픽쳐가 캡쳐/디스플레이 순서의 관점에서 과거 및 미래의 픽쳐로부터 온 것일 수 있다는 것에 주의해야 한다.
2.1.2 병합 모드
2.1.2.1 병합 모드에 대한 후보의 유도
PU가 병합 모드를 사용하여 예측되는 경우, 병합 후보 목록 내의 엔트리를 가리키는 인덱스는 비트스트림으로부터 파싱되고, 움직임 정보를 취출하기 위하여 사용된다. 이러한 목록의 구조는 HEVC 표준 내에 규정되고, 단계들의 다음 시퀀스에 따라서 요약될 수 있다:
- 단계 1: 초기 후보 유도
= 단계 1.1: 공간적 후보 유도
= 단계 1.2: 공간적 후보에 대한 리던던시 점검
= 단계 1.3: 시간적 후보 유도
- 단계 2: 추가적 후보 삽입
= 단계 2.1: 양-예측성 후보의 생성
= 단계 2.2: 제로 움직임 후보의 삽입
이러한 단계들은 도 1 에서도 개략적으로 도시된다. 공간적 병합 후보 유도를 위해서, 최대 네 개의 병합 후보가 다섯 개의 상이한 위치에 위치된 후보들 사이에서 선택된다. 시간적 병합 후보 유도를 위해서, 하나의 병합 후보의 최대가 두 개의 후보들 사이에서 선택된다. 각각의 PU에 대해서 일정한 개수의 후보가 디코더측에서 추정되기 때문에, 단계 1에서 획득된 후보의 개수가 슬라이스 헤더 내에서 시그널링되는 병합 후보의 최대 개수(MaxNumMergeCand)에 도달하지 않는 경우에는 추가적 후보가 생성된다. 후보의 개수가 일정하기 때문에, 최선의 병합 후보의 인덱스는 절단된 유너리 이진화(truncated unary binarization; TU)를 사용하여 인코딩된다. CU의 크기가 8과 같으면, 현재 CU의 모든 PU들은 단일 병합 후보 목록을 공유하고, 이것은 2N×2N 예측 유닛의 병합 후보 목록과 동일하다.
다음 설명에서, 앞서 언급된 단계와 연관된 동작들이 상세히 설명된다.
도 1은 병합 후보 목록 구조에 대한 유도 프로세스의 일 예를 도시한다.
2.1.2.2 공간적 후보 유도
공간적 병합 후보를 유도할 때, 네 개의 병합 후보 중 최대가 도 2에서 도시되는 위치에 위치된 후보들 사이에서 선택된다. 유도의 순서는 A1, B1, B0, A0 및 B2이다. 위치 B2 위치 A1, B1, B0, A0의 임의의 PU가 이용가능하지 않거나 (예를 들어 다른 슬라이스 또는 타일에 속하기 때문에), 인트라 코딩되는 경우에만 고려된다. 위치 A1에 있는 후보가 추가된 이후에, 잔여 후보를 추가하는 것은 리던던시 점검을 거치고, 이것은 동일한 움직임 정보를 가지는 후보가 목록으로부터 제외됨으로써 코딩 효율이 개선되게 하는 것을 보장한다. 계산 복잡도를 낮추기 위해서, 가능한 후보 쌍들 모두가 언급된 리던던시 점검에서 고려되는 것은 아니다. 그 대신에, 도 3에서 화살표와 연결된 쌍들만이 고려되고, 후보는 리던던시 점검을 위해서 사용되는 대응하는 후보가 동일한 움직임 정보를 가지지 않는 경우에만 목록에 추가된다. 중복된 움직임 정보의 다른 소스는 2Nx2N과 다른 파티션과 연관되는 "제 2 PU"이다. 일 예로서, 도 4는 N×2N 및 2N×N 각각의 경우에 대한 제 2 PU를 도시한다. 현재 PU가 N×2N으로서 파티셔닝되면, 위치 A1에 있는 후보는 목록 구조에 대해서 고려되지 않는다. 사실상, 이러한 후보를 추가하면 두 개의 예측 유닛이 동일한 움직임 정보를 가지는 결과가 초래될 것인데, 이것은 하나의 코딩 유닛 내에 하나의 PU만을 가지는 것에 비해서 과잉이 된다. 이와 유사하게, 위치 B1은 현재 PU가 2N×N으로서 파티셔닝되는 경우에는 고려되지 않는다.
도 2는 공간적 병합 후보들의 예시적인 위치를 보여준다.
도 3은 공간적 병합 후보의 리던던시 점검을 위하여 고려되는 후보 쌍의 예들을 보여준다.
도 4는 N×2N 및 2N×N 파티션의 제 2 PU에 대한 위치의 예들을 보여준다.
2.1.2.3 시간적 후보 유도
이러한 단계에서는 하나의 후보만이 목록에 추가된다. 특히, 이러한 시간적 병합 후보를 유도할 때, 주어진 레퍼런스 픽쳐 목록 내의 현재 픽쳐와 최소의 POC 차이를 가지는 픽쳐에 속하는 상호-위치된 PU에 기반하여 스케일링된 움직임 벡터가 유도된다. 상호-위치된 PU의 유도를 위해서 사용될 레퍼런스 픽쳐 목록은 슬라이스 헤더 내에서 명시적으로 시그널링된다. 시간적 병합 후보에 대한 스케일링된 움직임 벡터는 도 5에서 점선으로 표시되어 예시되는 것과 같이 획득되고, 이것은 상호-위치된 PU의 움직임 벡터로부터 POC 거리인 tb 및 td를 사용하여 스케일링되며, 여기에서 tb는 현재 픽쳐의 레퍼런스 픽쳐 및 현재 픽쳐 사이의 POC 차이라고 규정되고, td는 상호-위치된 픽쳐의 레퍼런스 픽쳐 및 상호-위치된 픽쳐 사이의 POC 차이가 되도록 규정된다. 시간적 병합 후보의 레퍼런스 픽쳐 인덱스는 제로와 같도록 설정된다. 스케일링 프로세스의 실제 구현예가 HEVC 사양에 기술된다. B-슬라이스에 대하여, 하나는 레퍼런스 픽쳐 목록 0에 대한 것이고 다른 것은 레퍼런스 픽쳐 목록 1에 대한 것인 두 개의 움직임 벡터가 획득되고 결합되어 양-예측성 병합 후보를 생성한다.
도 5는 시간적 병합 후보에 대한 움직임 벡터 스케일링의 예시도이다.
레퍼런스 프레임에 속하는 상호-위치된 PU(Y) 내에서, 시간적 후보에 대한 위치가 도 6에서 도시되는 바와 같이 후보 C0 및 C1 사이에서 선택된다. 위치 C0에서의 PU가 이용가능하지 않은지, 인트라 코딩되는지, 또는 현재 코딩 트리 유닛(CTU(coding tree unit); LCU(largest coding unit)이라고도 알려짐) 행 밖이라면, 위치 C1이 사용된다. 그렇지 않으면, 시간적 병합 후보를 유도하는 데에 위치 C0가 사용된다.
도 6은 시간적 병합 후보인 C0 및 C1에 대한 후보 위치의 예를 보여준다.
2.1.2.4 추가적인 후보 삽입
공간적 및 시간적 병합 후보 이외에, 두 가지 추가적 타입의 병합 후보인 결합된 양-예측성 병합 후보 및 제로 병합 후보가 존재한다. 결합된 양-예측성 병합 후보는 공간적 및 시간적 병합 후보를 활용함으로써 생성된다. 결합된 양-예측성 병합 후보는 B-슬라이스에 대해서만 사용된다. 결합된 양-예측성 후보는 초기 후보의 제 1 레퍼런스 픽쳐 목록 움직임 파라미터를 다른 후보의 제 2 레퍼런스 픽쳐 목록 움직임 파라미터와 결합함으로써 생성된다. 이러한 두 개의 투플(tuple)이 상이한 움직임 가설(hypotheses)을 제공한다면, 이들은 새로운 양-예측성 후보를 형성할 것이다. 일 예로서, 도 7은 mvL0 및 refIdxL0 또는 mvL1 및 refIdxL1을 가지는 원래의 목록 내의 두 개의 후보 (좌측)가 최종 목록(우측)에 추가된 결합된 양-예측성 병합 후보를 생성하도록 사용되는 경우를 보여준다. 이러한 추가적 병합 후보를 생성하기 위하여 고려되는 조합에 관련된 다수의 규칙이 존재한다.
도 7은 결합된 양-예측성 병합 후보의 일 예를 보여준다.
제로 움직임 후보가 삽입되어 병합 후보 목록 내의 잔여 엔트리를 채우고, 따라서 MaxNumMergeCand 용량에 도달한다. 이러한 후보는 제로 공간적 변위 및, 제로로부터 시작하여 새로운 제로 움직임 후보가 목록에 추가될 때마다 증가하는 레퍼런스 픽쳐 인덱스를 가진다. 마지막으로, 이러한 후보에 대해서는 리던던시 점검이 수행되지 않는다.
2.1.3 AMVP
AMVP는 움직임 벡터의 이웃하는 PU들과의 시공간적 상관도를 활용하는데, 이것은 움직임 파라미터의 명시적 전송을 위해서 사용된다. 각각의 레퍼런스 픽쳐 목록에 대하여, 시간적으로 이웃하는 PU 위치 위의 좌측의 이용가능성을 우선 점검하고, 리던던트 후보를 제거하며, 후보 목록이 일정한 길이를 가지게 하도록 제로 벡터를 추가함으로써, 움직임 벡터 후보 목록이 구성된다. 그러면, 인코더는 후보 목록으로부터 최선의 예측기를 선택할 수 있고, 선택된 후보를 표시하는 대응하는 인덱스를 전송한다. 병합 인덱스 시그널링과 유사하게, 최선의 움직임 벡터 후보의 인덱스는 절단된 유너리(truncated unary)를 사용하여 인코딩된다. 이러한 경우에 인코딩될 최대 값은 2 이다(도 8을 참조한다). 다음 섹션에서, 움직임 벡터 예측 후보의 유도 프로세스의 세부사항이 제공된다.
2.1.3.1 AMVP 후보의 유도
도 8은 움직임 벡터 예측 후보에 대한 유도 프로세스를 요약한다.
도 8은 움직임 벡터 예측 후보의 유도 프로세스의 일 예를 도시한다.
움직임 벡터 예측에서, 두 타입의 움직임 벡터 후보가 고려된다: 공간적 움직임 벡터 후보 및 시간적 움직임 벡터 후보. 공간적 움직임 벡터 후보 유도를 위하여, 두 움직임 벡터 후보는 최종적으로 도 2에서 도시되는 바와 같은 다섯 개의 상이한 위치에 위치된 각각의 PU의 움직임 벡터에 기반하여 유도된다.
시간적 움직임 벡터 후보 유도를 위하여, 하나의 움직임 벡터 후보가, 두 개의 상이한 상호-위치된 위치에 기반하여 유도된 두 개의 후보 중에서 선택된다. 시공간적 후보의 제1 목록이 만들어진 이후에, 목록 내의 중복된 움직임 벡터 후보가 제거된다. 포텐셜 후보의 개수가 두 개보다 크면, 연관된 레퍼런스 픽쳐 목록 내의 그 레퍼런스 픽쳐 인덱스가 1 보다 큰 움직임 벡터 후보가 목록으로부터 제거된다. 시공간적 움직임 벡터 후보의 개수가 두 개보다 적으면, 추가적인 제로 움직임 벡터가 목록에 추가된다.
2.1.3.2 공간적 움직임 벡터 후보
공간적 움직임 벡터 후보를 유도할 때, 도 2에서 도시되는 바와 같은 위치에 위치된 PU들로부터 유도되는 다섯 개의 포텐셜 후보 중에서 가장 큰 것이 고려되고, 그러한 위치는 움직임 병합의 위치들과 동일하다. 현재 PU의 좌측에 대한 유도 순서는 A0, A1, 및 스케일링된 A0, 스케일링된 A1으로 규정된다. 현재 PU의 상측에 대한 유도 순서는 B0, B1, B2, 스케일링된 B0, 스케일링된 B1, 스케일링된 B2로 규정된다. 그러므로 각 측에 대해서 움직임 벡터 후보로서 사용될 수 있는 네 개의 경우가 존재하고, 두 가지 경우는 공간적 스케일링을 사용하도록 요구되지 않고, 두 가지 경우는 공간적 스케일링이 사용된다. 네 가지 상이한 케이스는 다음과 같이 요약된다.
- 공간적 스케일링 없음
= (1) 동일한 레퍼런스 픽쳐 목록, 및 동일한 레퍼런스 픽쳐 인덱스(동일한 POC)
= (2) 상이한 레퍼런스 픽쳐 목록, 하지만 동일한 레퍼런스 픽쳐(동일한 POC)
- 공간적 스케일링 있음
= (3) 동일한 레퍼런스 픽쳐 목록, 하지만 상이한 레퍼런스 픽쳐(상이한 POC)
= (4) 상이한 레퍼런스 픽쳐 목록, 및 상이한 레퍼런스 픽쳐(상이한 POC)
공간적-스케일링이 없는 경우가 처음 점검되고, 그 후에 공간적 스케일링이 있는 경우가 점검된다. 공간적 스케일링은 레퍼런스 픽쳐 목록과 무관하게, 이웃하는 PU의 레퍼런스 픽쳐 및 현재 PU의 레퍼런스 픽쳐 사이에서 POC가 다른 경우에 고려된다. 만일 좌측 후보의 모든 PU들이 이용가능하지 않거나 인트라 코딩된다면, 좌측 및 위의 MV 후보의 병렬적 유도를 돕도록 상측 움직임 벡터에 대한 스케일링이 허용된다. 그렇지 않으면, 공간적 스케일링은 상측 움직임 벡터에 대해서 허용되지 않는다.
도 9는 공간적 움직임 벡터 후보에 대한 움직임 벡터 스케일링의 예시도이다.
공간적 스케일링 프로세스에서, 이웃하는 PU의 움직임 벡터는 도 9에 도시된 바와 같은 시간적 스케일링의 경우에서와 유사한 방식으로 스케일링된다. 주된 차이는 레퍼런스 픽쳐 목록 및 현재 PU의 인덱스가 입력으로서 주어진다는 것이다; 실제 스케일링 프로세스는 시간적 스케일링의 경우와 동일하다.
2.1.3.3 시간적 움직임 벡터 후보
레퍼런스 픽쳐 인덱스 유도 이외에, 시간적 병합 후보를 유도하기 위한 모든 프로세스는 공간적 움직임 벡터 후보의 유도(도 6을 참조한다)의 경우와 동일하다. 레퍼런스 픽쳐 인덱스는 디코더로 시그널링된다.
2.2 VVC 내에서의 인터 예측 방법
시그널링 MVD를 위한 적응적 움직임 벡터차 해상도(Adaptive Motion Vector difference Resolution; AMVR), 움직임 벡터차(Motion Vector Differences; MMVD)와의 병합, 삼각 예측 모드(Triangular prediction mode; TPM), 결합된 인트라-인터 예측(Combined intra-inter prediction; CIIP), 진보된 TMVP(Advanced TMVP(ATMVP); SbTMVP라고도 알려짐), 아핀 예측 모드, 일반화된 양-예측(Generalized Bi-Prediction; GBI), 디코더-측 움직임 벡터 정제(Decoder-측 Motion Vector Refinement; DMVR) 및 양방향성 광학 흐름(Bi-directional Optical flow(BIO); BDOF라고도 알려짐)과 같이, 인터 예측 개선을 위한 여러 새로운 코딩 툴이 존재한다.
VVC에서 지원되는 세 번의 상이한 병합 목록 구조 프로세스가 존재한다:
1) 서브-블록 병합 후보 목록: 이것은 ATMVP 및 아핀 병합 후보를 포함한다. 하나의 병합 목록 구조 프로세스가 아핀 모드 및 ATMVP 모드 양자 모두에 대해서 공유된다. 여기에서, ATMVP 및 아핀 병합 후보는 순서대로 추가될 수 있다. 서브-블록 병합 목록 크기는 슬라이스 헤더 내에서 시그널링되고, 최대 값은 5이다.
2) 정규 병합 목록: 잔여 코딩 블록에 대하여, 하나의 병합 목록 구조 프로세스가 공유된다. 여기에서, 공간적/시간적/HMVP, 쌍별로 결합된 양-예측 병합 후보 및 제로 움직임 후보가 순서대로 삽입될 수 있다. 정규 병합 목록 크기는 슬라이스 헤더 내에서 시그널링되고, 최대 값은 6이다. MMVD, TPM, CIIP는 정규 병합 목록에 의존한다.
3) IBC 병합 목록: 이것은 정규 병합 목록과 유사한 방식으로 이루어진다.
이와 유사하게, VVC에서 지원되는 세 개의 AMVP 목록이 존재한다:
1) 아핀 AMVP 후보 목록
2) 정규 AMVP 후보 목록
3) IBC AMVP 후보 목록: JVET-N0843을 채택하기 때문에 IBC 병합 목록과 같은 구조 프로세스임
2.2.1 VVC에서의 코딩 블록 구조체
VVC에서는, 사중-트리/이중 트리/삼중-트리(QT/BT/TT) 구조가 하나의 픽쳐 정사각형 또는 사각형 블록들로 분할하기 위해서 채용된다.
QT/BT/TT 이외에, 별개의 트리(듀얼 코딩 트리라고도 불림)도 I-프레임에 대해서 VVC 내에 채용된다. 별개의 트리의 경우, 코딩 블록 구조는 루마 및 크로마 성분에 대해서 별개로 시그널링된다.
또한, 특정한 코딩 방법들의 커플로 코딩된 블록을 제외하고는 CU는 PU 및 TU와 같게 설정된다(예컨대, PU는 TU와 같지만 CU보다는 작은 인트라 서브-파티션 예측, 및 PU는 CU와 같지만 TU가 PU보다 작은 인터-코딩된 블록에 대한 서브-블록 변환).
2.2.2 아핀 예측 모드
HEVC에서는, 움직임 보상 예측(motion compensation prediction; MCP)을 위해서 병진 움직임 모델만이 적용된다. 하지만 실세계에는 많은 종류의 움직임, 예를 들어 줌인/아웃, 회전, 시점 움직임 및 다른 비정규적 움직임이 존재한다. VVC에서는, 4-파라미터 아핀 모델 및 6-파라미터 아핀 모델과 함께 단순화된 아핀 변환 움직임 보상 예측이 적용된다. 도 10a 및 도 10b에 도시된 바와 같이, 블록의 아핀 움직임 필드는 4-파라미터 아핀 모델에 대해서는 두 개의 제어 포인트 움직임 벡터(control point motion vector; CPMV) 또는 6-파라미터 아핀 모델에는 세 개의 CPMV에 의해 기술된다.
도 10a 및 도 10b는 다음을 도시한다: 도 10a: 단순화된 아핀 움직임 모델-파라미터 아핀, 도 10b: 6-파라미터 아핀 모드.
어떤 블록의 움직임 벡터 필드(motion vector field; MVF)는 다음 수학식들에 의해서 기술되는데, 4-파라미터 아핀 모델(4-파라미터가 a, b, e f로 규정됨)은 수학식 1에서 규정되고, 6-파라미터 아핀 모델(4-파라미터는 변수 a, b, c, d, e f로 규정됨)은 수학식 2에서 각각 규정된다:
여기에서, (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)는 현재 블록 내의 상단-좌측 샘플에 상대적인 대표 포인트의 좌표를 나타내고, (mvh(x, y), mvv(x, y))는 (x, y)에 위치된 샘플에 대해서 유도된 움직임 벡터이다. CP 움직임 벡터는 시그널링될 수 있고(아핀 AMVP 모드에서와 같이), 또는 즉시 유도될 수도 있다(아핀 병합 모드(affine merge mode)에서와 같이). wh는 현재 블록의 폭 및 높이이다. 실제로는, 제산(division)은 반올림 연산이 있는 우측-천이에 의해 구현된다. VTM에서는, 대표 포인트가 서브-블록의 중심 위치로서 규정되고, 예를 들어 현재 블록 내의 상단-좌측 샘플에 상대적인 서브-블록의 좌측-상단 코너의 좌표가 (xs, ys)이면, 대표 포인트의 좌표는 (xs+2, ys+2)가 되도록 규정된다. 각각의 서브-블록(즉, VTM에서는 4x4)에서는, 전체 서브-블록에 대한 움직임 벡터를 유도하기 위해서 대표 포인트가 활용된다.
움직임 보상 예측을 더욱 간략화하기 위해서, 서브-블록 기반 아핀 변환 예측이 적용된다. 각각의 M×N 서브-블록의 움직임 벡터를 유도하기 위하여(M 및 N 양자 모두는 현재의 VVC에서는 4로 설정됨), 도 11에 도시된 바와 같은 현재 VVC) 각각의 서브-블록의 중심 샘플의 움직임 벡터는 수학식 1 또는 수학식 2에 의해 계산되고, 1/16의 분수 정확도로 라운딩된다. 그러면, 1/16-화소(pel)에 대한 움직임 보상 보간 필터가 적용되어 유도된 움직임 벡터가 있는 각각의 서브-블록의 예측을 생성한다. 1/16-화소에 대한 보간 필터가 아핀 모드에 의해서 도입된다.
도 11은 서브-블록마다의 아핀 MVF의 일 예를 도시한다.
MCP 이후에, 각각의 서브-블록의 고정확도 움직임 벡터가 라운딩되고, 정상 움직임 벡터와 동일한 정확도로 저장된다.
2.2.3 전체 블록에 대한 병합
2.2.3.1 병진적 정규 병합 모드의 병합 목록 구조
2.2.3.1.1 이력-기반 움직임 벡터 예측(HMVP)
병합 목록 디자인과 다르게, VVC에서는 이력-기반 움직임 벡터 예측(history-based motion vector prediction; HMVP) 방법이 채용된다.
HMVP에서는, 이전에 코딩된 움직임 정보가 저장된다. 이전에 코딩된 블록의 움직임 정보는 HMVP 후보로서 규정된다. 다수의 HMVP 후보들이 HMVP 테이블이라고 명명되는 테이블 내에 저장되고, 이러한 테이블이 인코딩/디코딩 프로세스 도중에 실시간으로(on-the-fly) 유지된다. HMVP 테이블은 새로운 타일/LCU 행/슬라이스의 코딩/디코딩 을 시작할 때에 비워진다. 인터-코딩된 블록 및 비-서브-블록 비-TPM 모드가 존재할 때마다, 연관된 움직임 정보가 테이블의 마지막 엔트리에 새로운 HMVP 후보로서 추가된다. 전체 코딩 흐름은 도 12에 도시된다.
2.2.3.1.2 정규 병합 목록 구조 프로세스
정규 병합 목록(병진적 움직임을 위한)의 구조는 단계들의 다음 시퀀스에 의해서 요약될 수 있다:
- 단계 1: 공간적 후보의 유도
- 단계 2: HMVP 후보의 삽입
- 단계 3: 쌍별 평균 후보의 삽입
- 단계 4: 디폴트 움직임 후보
HMVP 후보는 AMVP 및 병합 후보 목록 구조 프로세스들 양자 모두에서 사용될 수 있다. 도 13은 수정된 병합 후보 목록 구조 프로세스 (청색으로 강조됨)를 도시한다. 병합 후보 목록이 TMVP 후보 삽입 이후에 풀(full) 상태가 아니면, HMVP 테이블 내에 저장된 HMVP 후보가 병합 후보 목록을 채우기 위해서 활용될 수 있다. 하나의 블록이 보통 움직임 정보의 관점에서 가장 가까운 이웃하는 블록과 더 높은 상관도를 가진다는 것을 고려하면서, 테이블 내의 HMVP 후보는 인덱스들의 내림 차순으로 삽입된다. 테이블 내의 마지막 엔트리가 목록에 처음 추가되는 반면에, 첫 번째 엔트리는 끝에 추가된다. 이와 유사하게, 리던던시 제거가 HMVP 후보에 적용된다. 이용가능한 병합 후보의 총 수가 시그널링되도록 허용되는 병합 후보의 최대 개수에 도달하면, 병합 후보 목록 구조 프로세스가 종결된다.
모든 공간적/시간적/HMVP 후보가 비-IBC 모드로 코딩될 것이라는 것에 주의한다. 그렇지 않으면, 이것은 정규 병합 후보 목록에 추가되도록 허용되지 않는다.
HMVP 테이블은 최대 5 개의 정규 움직임 후보를 포함하고, 이들 각각은 고유하다.
2.2.3.2 삼각형 예측 모드(TPM)
VTM4에서는, 삼각형 파티션 모드가 인터 예측을 위하여 지원된다. 삼각형 파티션 모드는 8x8 이상의 CU들에만 적용되고 병합 모드에서 코딩되지만, MMVD 또는 CIIP 모드에서는 그렇지 않다. 이러한 조건을 만족하는 CU의 경우, 삼각형 파티션 모드가 적용되는지 여부를 표시하기 위하여 CU-레벨 플래그가 시그널링된다.
이러한 모드가 사용되는 경우, 하나의 CU는 도 13에서 도시되는 바와 같이 대각 분할 또는 반-대각 분할 중 어느 하나를 사용하여 두 개의 삼각형 모양의 파티션으로 균등하게 분할된다. CU 내의 각각의 삼각형 파티션은 자기 자신의 움직임을 사용하여 인터-예측된다; 각각의 파티션에 대해서는 단일-예측만이 허용되고, 즉 각각의 파티션은 하나의 움직임 벡터 및 하나의 레퍼런스 인덱스를 가진다. 종래의 양-예측과 동일한 것으로 보장하기 위하여 단일-예측 움직임 제약이 적용되고, 각각의 CU에 대해서는 두 개의 움직임 보상된 예측만이 필요하다.
도 14는 삼각형 파티션 기반 인터 예측의 예를 보여준다.
CU-레벨 플래그가 현재 CU가 삼각형 파티션 모드를 사용하여 코딩된다는 것을 표시하면, 삼각형 파티션의 방향(대각 또는 반-대각)을 표시하는 플래그, 및 두 개의 병합 인덱스들(각각의 파티션당 하나씩)이 추가적으로 시그널링된다. 삼각형 파티션들 각각을 예측한 이후에, 대각 또는 반-대각 에지에 따른 샘플 값들이 적응적 가중치와의 혼합 처리를 사용하여 조절된다. 이것은 전체 CU에 대한 예측 신호이고, 변환 및 양자화 프로세스가 다른 예측 모드에서와 같이 전체 CU에 적용될 것이다. 마지막으로, 삼각형 파티션 모드를 사용하여 예측된 CU의 움직임 필드가 4x4 유닛 내에 저장된다.
정규 병합 후보 목록이 추가적인 움직임 벡터 프루닝(pruning)이 없이 삼각형 파티션 병합 예측을 위해서 재사용된다. 정규 병합 후보 목록 내의 각각의 병합 후보의 경우, 자신의 L0 또는 L1 움직임 벡터 중 하나 그리고 하나만이 삼각형 예측을 위해서 사용된다. 또한, L0 대 L1 움직임 벡터를 선택하는 순서는 그 병합 인덱스 패리티에 기반한다. 이러한 스킴에 의해서, 정규 병합 목록이 직접적으로 사용될 수 있다.
2.2.3.3 MMVD
JVET-L0054에서는, 최종적 움직임 벡터 표현(ultimate motion vector expression(UMVE), MMVD라고도 알려짐)이 제공된다. UMVE는 제안된 움직임 벡터 표현 방법과 함께 스킵 또는 병합 모드 중 하나에 대해서 사용된다.
UMVE는 VVC에서의 정규 병합 후보 목록 내에 포함된 것과 같은 병합 후보를 재사용한다. 병합 후보들 중에서 베이스 후보가 선택될 수 있고, 제안된 움직임 벡터 표현 방법에 의해서 추가적으로 확대된다.
UMVE는 새로운 움직임 벡터차(MVD) 표현 방법을 제공하는데, 여기에서는 시작 포인트, 움직임 크기 및 움직임 방향이 MVD를 나타내기 위하여 사용된다.
도 15는 UMVE 검색 프로세스의 일 예를 도시한다.
도 16은 UMVE 검색 포인트(UMVE Search Point)의 일 예를 도시한다.
이러한 제안된 기법은 병합 후보 목록을 그 자체로서 사용한다. 하지만 디폴트 병합 타입(MRG_TYPE_DEFAULT_N)인 후보들만이 UMVE의 확장을 위해서 고려된다.
베이스 후보 인덱스는 시작 포인트를 규정한다. 베이스 후보 인덱스는 목록 내의 후보들 중 최선의 후보를 다음과 같이 표시한다.
베이스 후보 IDX 0 1 2 3
N 번째 MVP 제 1 MVP 제 2 MVP 제 3 MVP 제 4 MVP
<테이블 1. 베이스 후보 IDX>
베이스 후보의 개수가 1과 같으면, 베이스 후보 IDX는 시그널링되지 않는다.
거리 인덱스는 움직임 크기 정보이다. 거리 인덱스는 시작 포인트 정보로부터의 미리 규정된 거리를 표시한다. 미리 규정된 거리는 다음과 같다:
거리 IDX 0 1 2 3 4 5 6 7
픽셀 거리 1/4-화소 1/2-화소 1-화소 2-화소 4-화소 8-화소 16-화소 32-화소
<테이블 2. 거리 IDX>
방향 인덱스는 시작 포인트에 상대적인 MVD의 방향을 나타낸다. 방향 인덱스는 아래 표시된 바와 같은 네 개의 방향을 표시할 수 있다.
방향 IDX 00 01 10 11
x-축 + - N/A N/A
y-축 N/A N/A + -
<테이블 3. 방향 IDX>
UMVE 플래그는 스킵 플래그 또는 병합 플래그를 전송한 직후에 시그널링된다. 스킵 또는 병합 플래그가 참이면, UMVE 플래그는 파싱된다. UMVE 플래그가 1과 같으면, UMVE 신택스가 파싱된다. 하지만, 1이 아니면, 아핀 플래그가 파싱된다. 아핀 플래그가 1과 같으면, 즉 아핀 모드이지만 1 이 아니면, 스킵/병합 인덱스가 VTM의 스킵/병합 모드에 대해서 파싱된다.
UMVE 후보에 기인한 추가적인 라인 버퍼가 필요하지 않다. 그 이유는 소프트웨어의 스킵/병합 후보가 베이스 후보로서 직접적으로 사용되기 때문이다. 입력 UMVE 인덱스를 사용하면, MV에 대한 보충(supplement)이 움직임 보상 직후에 판정된다. 이것을 위해서 긴 라인 버퍼를 유지할 필요가 없다.
현재 공통 테스트 조건에서, 병합 후보 목록 내의 제 1 또는 제 2 병합 후보 중 어느 하나가 베이스 후보로서 선택될 수 있다.
UMVE는 MMVD (Merge with MV Difference)라고도 알려져 있다.
2.2.3.4 결합된 인트라-인터 예측(CIIP)
JVET-L0100에서는 다중 가설 예측(multi-hypothesis prediction)이 제안되고, 여기에서는 결합된 인트라 및 인터 예측이 여러 가설을 생성하기 위한 하나의 방식이다.
다중 가설 예측이 인트라 모드를 개선하기 위하여 적용되는 경우, 다중 가설 예측은 하나의 인트라 예측 및 하나의 병합 인덱싱된 예측을 결합한다. 병합 CU에서는, 하나의 플래그가 참인 경우 인트라 후보 목록으로부터 하나의 인트라 모드를 선택하기 위해서, 해당 플래그가 병합 모드에 대해서 시그널링된다. 루마 성분에 대하여, 인트라 후보 목록은 오직 하나의 인트라 예측 모드, 즉 평면형 모드로부터 유도된다. 인트라 및 인터 예측으로부터의 예측 블록에 적용된 가중치는 두 개의 이웃하는 블록(A1 및 B1)의 코딩된 모드(인트라 또는 비-인트라)에 의해 결정된다.
2.2.4 서브-블록-기반 기술에 대한 병합
모든 서브-블록 관련 움직임 후보들이 비-서브 블록 병합 후보에 대한 정규 병합 목록에 추가하여 별개의 병합 목록 내에 포함되는 것이 제안된다.
서브-블록 관련 움직임 후보는 '서브-블록 병합 후보 목록(sub-block merge candidate list)'이라고 불리는 별개의 병합 목록에 포함된다.
일 예에서, 서브-블록 병합 후보 목록은 ATMVP 후보 및 아핀 병합 후보를 포함한다.
서브-블록 병합 후보 목록은 다음 순서로 후보로 채워진다:
a. ATMVP 후보(이용가능하거나 이용불가능할 수 있음);
b. 아핀 병합 목록(상속된 아핀 후보; 및 구성된 아핀 후보를 포함함)
c. 제로 MV 4-파라미터 아핀 모델로서의 패딩
2.2.4.1.1 ATMVP (서브 블록 시간적 움직임 벡터 예측기(SbTMVP)라고도 불림)
ATMVP의 기본적인 아이디어는 하나의 블록에 대하여 다수의 세트의 시간적 움직임 벡터 예측기를 유도하는 것이다. 각각의 서브-블록에는 하나의 세트의 움직임 정보가 할당된다. ATMVP 병합 후보가 생성되면, 움직임 보상이 전체 블록 레벨 대신에 8x8 레벨에서 이루어진다.
2.2.5 정규 인터 모드(AMVP)
2.2.5.1 AMVP 움직임 후보 목록
HEVC에서의 AMVP 디자인과 유사하게, 최대 2 개의 AMVP 후보가 유사한. 그러나, HMVP 후보는 TMVP 후보 이후에 추가될 수도 있다. HMVP 테이블 내의 HMVP 후보는 인덱스의 오름 차순으로(즉, 가장 오래된 0과 같은 인덱스로부터 시작함) 트래버스된다. 그 레퍼런스 픽쳐가 타겟 레퍼런스 픽쳐와 동일한지(즉, POC 값이 동일한지) 여부를 찾기 위해서 최대 4 개의 HMVP 후보가 점검될 수 있다.
2.2.5.2 AMVR
HEVC에서는, 움직임 벡터차(MVD)(움직임 벡터 및 PU의 예측된 움직임 벡터 사이의 벡터차)는, use_integer_mv_flag가 슬라이스 헤더 내에서 0과 같은 경우에 쿼터 루마 샘플들의 단위로 시그널링된다. VVC에서는, 국지적으로 적응적 움직임 벡터 해상도(adaptive motion vector resolution; AMVR)가 도입된다. VVC에서는, MVD가 쿼터 루마 샘플, 정수 루마 샘플 또는 네 개의 루마 샘플(즉, 1/4-화소, 1-화소, 4-화소)의 단위로 코딩될 수 있다. MVD 해상도는 코딩 유닛(CU) 레벨에서 제어되고, MVD 해상도 플래그는 적어도 하나의 비-제로 MVD 성분을 가지는 각각의 CU에 대해서 조건적으로 시그널링된다.
적어도 하나의 비-제로 MVD 성분을 가지는 CU의 경우, 쿼터 루마 샘플 MV 정밀도가 CU 내에서 사용되는지 여부를 표시하기 위해서 제 1 플래그가 시그널링된다. 제 1 플래그(1과 같음)는 쿼터 루마 샘플 MV 정밀도가 사용되지 않는다는 것을 표시하고, 다른 플래그는 정수 루마 샘플 MV 정밀도 또는 네 개의 루마 샘플 MV 정밀도가 사용되는지 여부를 표시하기 위해서 시그널링된다.
CU의 제 1 MVD 해상도 플래그가 제로이거나, CU에 대해서 코딩되지 않는 경우(이것은 CU 내의 모든 MVD들이 제로라는 것을 의미함), 쿼터 루마 샘플 MV 해상도가 CU에 대해서 사용된다. CU가 정수-루마 샘플 MV 정밀도 또는 네 개의-루마-샘플 MV 정밀도를 사용하는 경우, 해당 CU에 대한 AMVP 후보 목록 내의 MVP들은 대응하는 정밀도로 라운딩된다.
2.2.5.3 JVET-N1001-v2에서의 대칭적 움직임 벡터차
JVET-N1001-v2에서는, 양-예측에서의 움직임 정보 코딩을 위해서 대칭적 움직임 벡터차(symmetric motion vector difference; SMVD)가 적용된다.
우선, 슬라이스 레벨에서, SMVD 모드에서 각각 사용되는 목록 0/1의 레퍼런스 픽쳐 인덱스를 표시하기 위한 변수 RefIdxSymL0 및 RefIdxSymL1이 N1001-v2에서 규정되는 다음 단계로 유도된다. 두 변수 중 적어도 하나가 -1과 같으면, SMVD 모드는 디스에이블될 것이다.
2.2.6 움직임 정보의 정제
2.2.6.1 디코더-측 움직임 벡터 정제(DMVR)
양-예측 동작에서, 하나의 블록 영역을 예측하기 위해서, list0의 움직임 벡터(MV) 및 list1의 MV 각각을 사용하여 형성된 두 개의 예측 블록이 결합되어 단일 예측 신호를 형성한다. 디코더-측 움직임 벡터 정제(DMVR) 방법에서는, 양-예측의 두 개의 움직임 벡터가 더욱 정제된다.
VVC에서의 DMVR의 경우, 목록 0 및 목록 1 사이의 MVD 미러링이 도 17에 도시된 바와 같이 가정되고, 쌍방 매칭(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들(정수 정밀도를 가짐)이 도 18에 도시된 바와 같이 두 단계에서 점검될 수 있다. 제 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;
첫 번째 반복 시에, 시작 포인트는 시그널링된 MV이고, 제 2 반복 시에, 시작 포인트는 시그널링된 MV에 제 1 반복에서의 선택된 최선의 MVD를 더한 것이다. DMVR은, 하나의 레퍼런스 픽쳐가 선행하는 픽쳐이고 다른 레퍼런스 픽쳐가 다음 픽쳐이며, 두 개의 레퍼런스 픽쳐들이 현재 픽쳐로부터 동일한 픽쳐 순서 카운트 거리를 가지는 경우에만 적용된다.
도 17은 DMVR 내의 목록 0 및 목록 1 사이에서 미러링되는 MVD (0, 1)의 일 예를 도시한다.
도 18은 일 회의 반복에서 점검될 수 있는 MV들의 예를 보여준다.
DMVR의 프로세스를 더 단순화하기 위하여, JVET-M0147은 JEM에서의 디자인에 몇 가지 변경을 제안했다. 좀 더 구체적으로는, VTM-4.0(곧 배포될 예정임)에 대한 채택된 DMVR 디자인은 다음의 주된 특징을 가진다:
- list0 및 list1 사이의(0,0) 위치 SAD가 임계보다 작은 경우의 조기 종결.
- list0 및 list1 사이의 SAD가 일부 위치에 대해서 제로인 경우의 조기 종결.
- DMVR에 대한 블록 크기: W*H>=64 && H>=8, 여기에서 W 및 H는 블록의 폭 및 높이임.
- 16*16보다 큰 CU 크기의 DMVR을 위하여, CU를 다수의 16x16 서브-블록들로 분할함. CU의 폭 또는 높이가 16보다 큰 경우에만, 이것은 수직 또는 수평 방향으로 분할된다.
- 레퍼런스 블록 크기 (W+7)*(H+7)(루마의 경우).
- 25 포인트 SAD-기반 정수-화소 검색(integer-pel search) (예를 들어 (+-) 2 정제 검색 범위, 단일 스테이지)
- 이중선형-보간(Bilinear-interpolation)에 기반한 DMVR.
- "파라메트릭 오차 표면 방정식(Parametric error surface equation)"에 기반한 서브-화소 정제. 이러한 프로시저는, 마지막 MV 정제 반복 시에, 최소 SAD 비용이 제로와 같지 않고 최선의 MVD가 (0, 0)인 경우에만 수행된다.
- 레퍼런스 블록 패딩이 있는 루마/크로마 MC(필요한 경우).
- 정제된 MV들은 MC 및 TMVP들을 위해서만 사용된다.
2.2.6.1.1 DMVR의 사용
다음 조건들이 모든 참이면, DMVR이 이네이블될 수 있다:
- SPS 내의 DMVR 이네이블 플래그(즉, sps_dmvr_enabled_flag)가 1과 같다
- TPM 플래그, 인터-아핀 플래그 및 서브블록 병합 플래그(ATMVP 또는 아핀 병합 중 하나임), MMVD 플래그가 모두 0과 같다
- 병합 플래그가 1과 같다
- 현재 블록이 양 예측되고, 현재 픽쳐 및 목록 1 내의 레퍼런스 픽쳐 사이의 POC 거리가 목록 0 내의 레퍼런스 픽쳐 및 현재 픽쳐 사이의 POC 거리와 같다
- 현재 CU 높이가 8 이상이다
- 루마 샘플의 개수(CU 폭*높이)가 64 이상이다
2.2.6.1.2 "파라메트릭 오차 표면 방정식(Parametric error surface equation)"에 기반한 서브-화소 정제
이러한 방법은 다음과 같이 요약된다:
1. 중심 위치가 주어진 반복에서의 최선의 비용 위치 (cost position)인 경우에만 파라메트릭 오차 표면 근사(fit)가 계산된다.
2. 중심 위치 비용 및 중심으로부터의 (-1,0), (0,-1), (1,0) 및 (0,1) 위치에서의 비용이 다음 형태의 2-D 포물선 오차 표면 수학식
을 근사화하기 위해서 사용되는데, 여기에서 ( 는 가장 비용이 적은 위치에 해당하고, C는 최소 비용 값에 대응된다. 5 개의 미지수가 있는 5 개의 수학식을 풀어냄으로써, (는 다음과 같이 계산된다:
(는 분할이 수행되는 정밀도 (예를 들어 몫의 얼마나 많은 비트가 계산되는지)를 조절함으로써, 임의의 요구된 서브-픽셀 정밀도로 계산될 수 있다. 1/16-화소 정확도의 경우, 몫의 절대적 값 내의 4-비트만이 계산될 필요가 있고, 이것은 CU마다 요구되는 2 개의 분할의 고속 천이된 감산에 기반한 구현형태를 제공한다.
3. 계산된 (가 정수 거리 정제 MV에 추가되어 서브-픽셀로 정확한 정제 델타 MV를 얻는다.
2.2.6.2 양방향-방향성 광학 흐름(BDOF)
2.3 인트라 블록 복제
현재 픽쳐 레퍼런싱이라고도 알려져 있는 인트라 블록 복제(Intra block copy; IBC)는 HEVC 스크린 콘텐츠 코딩 확장(HEVC Screen Content Coding extension; HEVC-SCC) 및 현재 VVC 테스트 모델(VTM-4.0)에서 채택되어 왔다. IBC는 움직임 보상의 개념을 인터-프레임 코딩으로부터 인트라-프레임 코딩으로 확장한다. 도 18에 시연된 바와 같이, 현재 블록은 IBC가 적용될 때 동일한 픽쳐 내의 레퍼런스 블록에 의해서 예측된다. 레퍼런스 블록 내의 샘플은 현재 블록이 코딩되거나 디코딩되기 이전에 이미 재구성되었어야 한다. 비록 IBC가 대부분의 카메라-캡쳐 시퀀스에 대해서 효율적이지 않지만, 이것은 스크린 콘텐츠에 대해서 상당한 코딩 이득을 보여준다. 그 이유는, 스크린 콘텐츠 픽쳐 내에는 아이콘 및 텍스트 문자와 같은 많은 반복 패턴이 존재하기 때문이다. IBC는 이러한 반복 패턴들 사이의 리던던시를 효과적으로 제거할 수 있다. HEVC-SCC에서, 인터-코딩된 코딩 유닛(CU)은 현재 픽쳐를 자신의 레퍼런스 픽쳐로 선택한다면 IBC를 적용할 수 있다. MV는 이러한 경우에 블록 벡터(BV)라고 재명명되고, BV는 언제나 정수-픽셀 정밀도를 가진다. 메인 프로파일 HEVC와 호환가능하기 위하여, 현재 픽쳐는 디코딩된 픽쳐 버퍼(DPB) 내에서 "장기(long-term)" 레퍼런스 픽쳐라고 표시된다. 이와 유사하게, 다수의 뷰/3D 비디오 코딩 표준에서는, 인터-뷰 레퍼런스 픽쳐도 "장기" 레퍼런스 픽쳐라고 표시된다는 것에 주의해야 한다.
자신의 레퍼런스 블록을 찾기 위한 BV를 따라서, 레퍼런스 블록을 복제함으로써 예측이 생성될 수 있다. 원본 신호로부터 레퍼런스 픽셀을 감산함으로써 잔차를 얻을 수 있다. 그러면, 변환 및 양자화가 다른 코딩 모드에서와 같이 적용될 수 있다.
도 19는 인트라 블록 복제의 일 예이다.
그러나, 레퍼런스 블록이 픽쳐 밖에 있거나, 현재 블록과 중첩되거나, 재구성 구역의 외부에 있거나 일부 제약에 의해서 제한되는 유효한 구역의 외부에 있으면, 일부 또는 모든 픽셀 값이 규정되지 않는다. 기본적으로, 이러한 문제점을 해결하기 위한 두 가지 솔루션이 존재한다. 하나는, 예를 들어 비트스트림 적합도에서 이러한 상황을 허락하지 않는 것이다. 다른 솔루션은 이렇게 규정되지 않은 픽셀 값에 대해서 패딩을 적용하는 것이다. 다음 서브-세션은 이러한 솔루션들을 자세하게 설명한다.
2.3.1 VVC 테스트 모델 내의 IBC(VTM4.0)
현재 VVC 테스트 모델, 즉 VTM-4.0 디자인에서는, 전체 레퍼런스 블록이 현재 코딩 트리 유닛(CTU)을 가져야 하고, 현재 블록과 중첩하지 않는다. 따라서, 레퍼런스 또는 예측 블록을 패딩할 필요가 없다. IBC 플래그는 현재 CU의 예측 모드로서 코딩된다. 따라서, 총 세 개의 예측 모드인 MODE_INTRA, MODE_INTER 및 MODE_IBC가 각각의 CU에 대하여 존재한다.
2.3.1.1 IBC 병합 모드
IBC 병합 모드에서는, IBC 병합 후보 목록 내의 엔트리를 가리키는 인덱스가 비트스트림으로부터 파싱된다. IBC 병합 목록의 구성은 단계들의 다음 시퀀스에 따라서 요약될 수 있다:
- 단계 1: 공간적 후보의 유도
- 단계 2: HMVP 후보의 삽입
- 단계 3: 쌍별 평균 후보의 삽입
공간적 병합 후보의 유도 시에, 최대 네 개의 병합 후보가 도 2에서 도시되는 바와 같이 A1, B1, B0, A0 및 B2 로 표시된 위치에 위치된 후보들 사이에서 선택된다. 유도의 순서는 A1, B1, B0, A0 및 B2이다. 위치 B2 위치 A1, B1, B0, A0의 임의의 PU가 이용가능하지 않거나 (예를 들어 다른 슬라이스 또는 타일에 속하기 때문에), IBC 모드로 코딩되지 않는 경우에만 고려된다. 위치 A1에 있는 후보가 추가된 이후에, 잔여 후보를 삽입하는 것은 리던던시 점검을 거치고, 이것은 동일한 움직임 정보를 가지는 후보가 목록으로부터 제외됨으로써 코딩 효율이 개선되게 하는 것을 보장한다.
공간적 후보의 삽입 이후에, IBC 병합 목록 크기가 여전히 최대 IBC 병합 목록 크기보다 작으면, HMVP 테이블로부터의 IBC 후보가 삽입될 수 있다. HMVP 후보를 삽입할 때에 리던던시 점검이 수행된다.
마지막으로, 쌍별 평균 후보가 IBC 병합 목록에 삽입된다.
병합 후보에 의해 식별된 레퍼런스 블록이 픽쳐의 밖에 있거나, 현재 블록과 중첩하거나, 재구성 구역의 밖에 있거나, 일부 제약에 의해서 한정되는 유효한 구역의 밖에 있으면, 이러한 병합 후보는 무효한 병합 후보라고 불린다.
무효한 병합 후보가 IBC 병합 목록 내에 삽입될 수 있다는 것에 주의한다.
2.3.1.2 IBC AMVP 모드
IBC AMVP 모드에서, IBC AMVP 목록 내의 엔트리에 대한 AMVP 인덱스 포인트가 비트스트림으로부터 파싱된다. IBC AMVP 목록의 구성은 단계들의 다음 시퀀스에 따라서 요약될 수 있다:
- 단계 1: 공간적 후보의 유도
= 이용가능한 후보가 발견될 때까지 A0, A1을 점검한다.
= 이용가능한 후보가 발견될 때까지 B0, B1, B2를 점검한다.
- 단계 2: HMVP 후보의 삽입
- 단계 3: 제로 후보의 삽입
공간적 후보의 삽입 이후에, IBC AMVP 목록 크기가 여전히 최대 IBC AMVP 목록 크기보다 작으면, HMVP 테이블로부터의 IBC 후보가 삽입될 수 있다.
마지막으로, 제로 후보가 IBC AMVP 목록 내에 삽입된다.
2.3.1.3 크로마 IBC 모드
현재 VVC에서, 크로마 IBC 모드에서의 움직임 보상이 서브 블록 레벨에서 수행된다. 크로마 블록은 여러 서브 블록으로 파티셔닝될 것이다. 각각의 서브 블록은 대응하는 루마 블록이 블록 벡터를 가지는지 결정하고, 이것이 존재한다면 유효성을 결정한다. 현재 VTM에는 인코더 제약이 존재하는데, 여기에서 현재 크로마 CU 내의 모든 서브 블록이 유효한 루마 블록 벡터를 가진다면 크로마 IBC 모드가 테스트될 것이다. 예를 들어, YUV 420 비디오 상에서, 크로마 블록은 NxM이고, 그러면 연위된 (collocated) 루마 영역은 2Nx2M이다. 크로마 블록의 서브 블록 크기는 2x2이다. 크로마 mv 유도를 수행한 후 블록 복제 프로세스를 수행하기 위한 여러 단계들이 존재한다.
1) 크로마 블록이 우선 (N >> 1)*(M >> 1) 개의 서브 블록으로 파티셔닝될 것이다.
2) (x, y)의 좌표를 가지는 상단 좌측 샘플이 있는 각각의 서브 블록은 (2x, 2y)의 좌표를 가지는 동일한 상단-좌측 샘플을 커버하는 대응하는 루마 블록을 페치한다.
3) 인코더는 페치된 루마 블록의 블록 벡터(bv)를 점검한다. 다음 조건 중 하나가 만족되면, bv는 무효한 것으로 여겨진다.
a. 대응하는 루마 블록의 bv가 존재하는 않는다.
b. bv에 의해 식별된 예측 블록이 아직 재구성되지 않는다.
c. bv에 의해 식별된 예측 블록이 현재 블록과 부분적으로 또는 완전히 중첩된다.
4) 서브 블록의 크로마 움직임 벡터가 대응하는 루마 서브 블록의 움직임 벡터로 설정된다.
IBC 모드는 모든 서브 블록이 유효한 bv를 발견할 경우에 인코더에서 허용된다.
IBC 블록의 디코딩 프로세스는 아래 나열된다. IBC 모드에서의 크로마 움직임 벡터 유도 에 관련된 부분은 이중 중괄호로 둘러싸여져 있고, 즉, {{a}}는 "a"가 IBC 모드에서의 크로마 움직임 벡터 유도에 관련된다는 것을 나타낸다.
8.6.1 IBC 예측에서 코딩된 코딩 유닛에 대한 범용 디코딩 프로세스
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단좌측 루마 샘플에 상대적인 현재 코딩 블록의 상단-좌측 샘플을 규정하는 루마 위치 (xCb, yCb),
- 루마 샘플 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight,
- 단일 또는 듀얼 트리가 사용되는지 규정하는 변수 treeType - 이것은 듀얼 트리가 사용된다면 현재 트리가 루마 또는 크로마 성분 중 어느 것에 대응하는지를 규정한다.
이러한 프로세스의 출력은 루프내 필터링 이전의 수정된 재구성 픽쳐이다.
절 8.7.1에서 규정된 바와 같은 양자화 파라미터에 대한 유도 프로세스가 루마 위치 (xCb, yCb), 루마 샘플 내의 현재 코딩 블록의 폭 cbWidth 및 루마 샘플 내의 현재 코딩 블록의 높이 cbHeight, 및 변수 treeType을 입력으로 가지고 호출된다.
ibc 예측 모드에서 코딩된 코딩 유닛에 대한 디코딩 프로세스는 다음 순서의 단계들로 이루어진다:
1. 현재 코딩 유닛의 움직임 벡터 성분이 다음과 같이 유도된다:
1. treeType이 SINGLE_TREE 또는 DUAL_TREE_LUMA와 같으면, 다음이 적용된다:
- 절 8.6.2.1에 규정된 바와 같은 움직임 벡터 성분에 대한 유도 프로세스가 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth 및 루마 코딩 블록 높이 cbHeight를 입력으로 가지고 호출되고, 루마 움직임 벡터 mvL[ 0 ][ 0 ]를 출력으로서 가진다.
- treeType이 SINGLE_TREE와 같다면, 절 8.6.2.9 내의 크로마 움직임 벡터에 대한 유도 프로세스가 루마 움직임 벡터 mvL[ 0 ][ 0 ]를 입력으로 가지고, 크로마 움직임 벡터 mvC[ 0 ][ 0 ]를 출력으로 가지면서 호출된다.
- 수평 방향으로의 루마 코딩 서브블록의 개수 numSbX 및 수직 방향으로의 개수 numSbY는 양자 모두 1과 같이 설정된다.
1. 그렇지 않으면, treeType가 DUAL_TREE_CHROMA와 같다면, 다음이 적용된다:
- 수평 방향으로의 루마 코딩 서브블록의 개수 numSbX 및 수직 방향으로의 개수 numSbY가 다음과 같이 유도된다:
numSbX =(cbWidth >> 2) (8-886)
numSbY =(cbHeight >> 2) (8-887)
- {{크로마 움직임 벡터 mvC[ xSbIdx ][ ySbIdx ]는 xSbIdx = 0.. numSbX - 1, ySbIdx = 0.. numSbY - 1에 대해서 다음과 같이 유도된다:
- 루마 움직임 벡터 mvL[ xSbIdx ][ ySbIdx ]는 다음과 같이 유도된다:
- 연위된 루마 코딩 유닛의 위치 (xCuY, yCuY)는 다음과 같이 유도된다:
xCuY = xCb + xSbIdx*4 (8-888)
yCuY = yCb + ySbIdx*4 (8-889)
- CuPredMode[ xCuY ][ yCuY ]가 MODE_INTRA와 같다면, 다음이 적용된다.
mvL[ xSbIdx ][ ySbIdx ][ 0 ] = 0 (8-890)
mvL[ xSbIdx ][ ySbIdx ][ 1 ] = 0 (8-891)
predFlagL0[ xSbIdx ][ ySbIdx ] = 0 (8-892)
predFlagL1[ xSbIdx ][ ySbIdx ] = 0 (8-893)
- 그렇지 않으면, (CuPredMode[ xCuY ][ yCuY ]가 MODE_IBC와 같으면), 다음이 적용된다:
mvL[ xSbIdx ][ ySbIdx ][ 0 ]=MvL0[ xCuY ][ yCuY ][ 0 ] (8-894)
mvL[ xSbIdx ][ ySbIdx ][ 1 ]=MvL0[ xCuY ][ yCuY ][ 1 ] (8-895)
predFlagL0[ xSbIdx ][ ySbIdx ] = 1 (8-896)
predFlagL1[ xSbIdx ][ ySbIdx ] = 0 (8-897)}}
- 절 8.6.2.9에서의 크로마 움직임 벡터의 유도 프로세스가 mvL[ xSbIdx ][ ySbIdx ]를 입력으로 가지고 mvC[ xSbIdx ][ ySbIdx ]를 출력으로 가지고서 호출된다.
- 크로마 움직임 벡터 mvC[ xSbIdx ][ ySbIdx ]가 다음 제약을 준수해야 한다는 것이 비트스트림 적합도의 요구 사항이다:
- 절 6.4.X에 규정된 바와 같은 블록 이용가능성에 대한 유도 프로세스[Ed. (BB): 이웃하는 블록 이용가능성 점검 프로세스 미정]가 현재 크로마 위치 (xCurr, yCurr)가 (xCb / SubWidthC, yCb / SubHeightC) 및 이웃하는 크로마 위치 (xCb / SubWidthC +(mvC[ xSbIdx ][ ySbIdx ][ 0 ] >> 5), yCb / SubHeightC +(mvC[ xSbIdx ][ ySbIdx ][ 1 ] >> 5))로 설정된 상태로 입력으로서 가지고 호출되는 경우, 출력은 TRUE와 같아질 것이다.
- 절 6.4.X에 규정된 바와 같은 블록 이용가능성에 대한 유도 프로세스[Ed. (BB): 이웃하는 블록 이용가능성 점검 프로세스 미정]가 현재 크로마 위치 (xCurr, yCurr)가 (xCb / SubWidthC, yCb / SubHeightC) 및 이웃하는 크로마 위치 (xCb / SubWidthC +(mvC[ xSbIdx ][ ySbIdx ][ 0 ] >> 5) + cbWidth / SubWidthC - 1, yCb / SubHeightC +(mvC[ xSbIdx ][ ySbIdx ][ 1 ] >> 5)+ cbHeight / SubHeightC - 1)로 설정된 상태로 입력으로서 가지고 호출되는 경우, 출력은 TRUE와 같아질 것이다.
- 다음 조건 중 하나 또는 양자 모두가 참이어야 한다:
- (mvC[ xSbIdx ][ ySbIdx ][ 0 ] >> 5) + xSbIdx * 2 + 2가 0 이하여야 한다.
- (mvC[ xSbIdx ][ ySbIdx ][ 1 ] >> 5) + ySbIdx * 2 + 2가 0 이하여야 한다.
2. 현재 코딩 유닛의 예측 샘플은 다음과 같이 유도된다:
- treeType이 SINGLE_TREE 또는 DUAL_TREE_LUMA와 같다면, 현재 코딩 유닛의 예측 샘플은 다음과 같이 유도된다:
- 절 8.6.3.1에서 규정되는 바와 같은 ibc 블록에 대한 디코딩 프로세스가, 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth 및 루마 코딩 블록 높이 cbHeight, 수평 방향으로의 루마 코딩 서브블록의 개수 numSbX 및 수직 방향으로의 개수 numSbY, xSbIdx = 0.. numSbX - 1, 및 ySbIdx = 0.. numSbY - 1인 루마 움직임 벡터 mvL[ xSbIdx ][ ySbIdx ], 0과 같이 설정된 변수 cIdx를 입력으로서 가지고, 예측 루마 샘플의 (cbWidth) x (cbHeight) 어레이 predSamplesL인 ibc 예측 샘플(predSamples)을 출력으로서 가지고 호출된다.
- treeType이 SINGLE_TREE 또는 DUAL_TREE_CHROMA와 같다면, 현재 코딩 유닛의 예측 샘플은 다음과 같이 유도된다:
- 절 8.6.3.1에서 규정된 바와 같은 ibc 블록에 대한 디코딩 프로세스가, 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth 및 루마 코딩 블록 높이 cbHeight, 수평 방향으로의 루마 코딩 서브블록의 개수 numSbX 및 수직 방향으로의 개수 numSbY, xSbIdx = 0.. numSbX - 1, 및 ySbIdx = 0.. numSbY - 1인 크로마 움직임 벡터 mvC[ xSbIdx ][ ySbIdx ] 및 1과 같이 설정된 변수 cIdx를 입력으로서 가지고, 및 크로마 컴포넌트 Cb에 대한 예측 크로마 샘플의 (cbWidth / 2) x (cbHeight / 2) 어레이 predSamplesCb인 ibc 예측 샘플(predSamples)을 출력으로서 가지고 호출된다.
- 절 8.6.3.1에서 규정된 바와 같은 ibc 블록에 대한 디코딩 프로세스가, 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth 및 루마 코딩 블록 높이 cbHeight, 수평 방향으로의 루마 코딩 서브블록의 개수 numSbX 및 수직 방향으로의 개수 numSbY, xSbIdx = 0.. numSbX - 1, 및 ySbIdx = 0.. numSbY - 1인 크로마 움직임 벡터 mvC[ xSbIdx ][ ySbIdx ] 및 2와 같이 설정된 변수 cIdx를 입력으로서 가지고, 및 크로마 컴포넌트 Cr에 대한 예측 크로마 샘플의 (cbWidth / 2) x (cbHeight / 2) 어레이 predSamplesCr인 ibc 예측 샘플(predSamples)을 출력으로서 가지고 호출된다.
3. 변수 NumSbX[ xCb ][ yCb ] 및 NumSbY[ xCb ][ yCb ]는 numSbX 및 numSbY와 같도록 각각 설정된다.
4. 현재 코딩 유닛의 잔여 샘플은 다음과 같이 유도된다:
- treeType이 SINGLE_TREE와 같거나 treeType이 DUAL_TREE_LUMA와 같은 경우, 절 8.5.8 에서 규정된 바와 같이 인터 예측 모드에서 코딩된 코딩 블록의 잔차 신호에 대한 디코딩 프로세스가, 루마 위치 (xCb, yCb)와 같도록 설정된 위치 (xTb0, yTb0), 루마 코딩 블록 폭 cbWidth와 같도록 설정된 폭 nTbW, 루마 코딩 블록 높이 cbHeight와 같도록 설정된 높이 nTbH 및 0과 같은 변수 cIdxset을 입력으로서 가지고, 어레이 resSamplesL을 출력으로서 가지면서 호출된다.
- treeType이 SINGLE_TREE와 같거나 treeType DUAL_TREE_CHROMA와 같은 경우, 절 8.5.8에서 규정된 바와 같이 인터 예측 모드에서 코딩된 코딩 블록의 잔차 신호에 대한 디코딩 프로세스는, 크로마 위치 (xCb / 2, yCb / 2)와 같도록 설정된 위치 (xTb0, yTb0), 크로마 코딩 블록 폭 cbWidth / 2와 같도록 설정된 폭 nTbW 세트, 크로마 코딩 블록 높이 cbHeight / 2와 같도록 설정된 높이 nTbH 및 1과 같은 변수 cIdxset을 입력으로서 가지고, 및 어레이 resSamplesCb를 출력으로서 가지고서 호출된다.
- treeType이 SINGLE_TREE와 같거나 treeType DUAL_TREE_CHROMA와 같은 경우, 절 8.5.8에서 규정된 바와 같이 인터 예측 모드에서 코딩된 코딩 블록의 잔차 신호에 대한 디코딩 프로세스는, 크로마 위치 (xCb / 2, yCb / 2)와 같도록 설정된 위치 (xTb0, yTb0), 크로마 코딩 블록 폭 cbWidth / 2와 같도록 설정된 폭 nTbW 세트, 크로마 코딩 블록 높이 cbHeight / 2와 같도록 설정된 높이 nTbH 및 2와 같은 변수 cIdxset을 입력으로서 가지고, 및 어레이 resSamplesCr을 출력으로서 가지고서 호출된다.
5. 현재 코딩 유닛의 재구성된 샘플은 다음과 같이 유도된다:
- treeType이 SINGLE_TREE와 같거나 treeType이 DUAL_TREE_LUMA와 같은 경우, 절 8.7.5에서 규정된 바와 같이 색성분에 대한 픽쳐 재구성 프로세스는, (xCb, yCb)과 같도록 설정된 블록 위치 (xB, yB), cbWidth와 같도록 설정된 블록 폭 bWidth, cbHeight와 같도록 설정된 블록 높이 bHeight, 0과 같도록 설정된 변수 cIdx, predSamplesL과 같도록 설정된 (cbWidth) x (cbHeight) 어레이 predSamples 및 resSamplesL과 같도록 설정된 (cbWidth) x (cbHeight) 어레이 resSamples를 입력으로서 가지고 호출되고, 출력은 루프내 필터링 이전의 수정된 재구성 픽쳐이다.
- treeType이 SINGLE_TREE와 같거나 treeType이 DUAL_TREE_CHROMA와 같은 경우, 절 8.7.5 에 규정된 바와 같이 색성분에 대한 픽쳐 재구성 프로세스는, (xCb / 2, yCb / 2)와 같도록 설정된 블록 위치 (xB, yB), cbWidth / 2와 같도록 설정된 블록 폭 bWidth, cbHeight / 2와 같도록 설정된 블록 높이 bHeight, 1과 같도록 설정된 변수 cIdx, predSamplesCb와 같도록 설정된 (cbWidth / 2) x (cbHeight / 2) 어레이 predSamples 및 resSamplesCb와 같도록 설정된 (cbWidth / 2) x (cbHeight / 2) 어레이 resSamples를 입력으로서 사용하여 호출되고, 출력은 루프내 필터링 이전의 수정된 재구성 픽쳐이다.
- treeType이 SINGLE_TREE와 같거나 treeType이 DUAL_TREE_CHROMA와 같은 경우, 절 8.7.5 에 규정된 바와 같이 색성분에 대한 픽쳐 재구성 프로세스는, (xCb / 2, yCb / 2)와 같도록 설정된 블록 위치 (xB, yB), cbWidth / 2와 같도록 설정된 블록 폭 bWidth, cbHeight / 2와 같도록 설정된 블록 높이 bHeight, 2와 같도록 설정된 변수 cIdx, predSamplesCr과 같도록 설정된 (cbWidth / 2) x (cbHeight / 2) 어레이 predSamples 및 resSamplesCr과 같도록 설정된 (cbWidth / 2) x (cbHeight / 2) 어레이 resSamples를 입력으로서 사용하여 호출되고, 출력은 루프내 필터링 이전의 수정된 재구성 픽쳐이다.
2.3.2 IBC에 대한 최근의 진보(VTM5.0에서)
2.3.2.1 단일 BV 목록
JVET-N0843이 VVC에 채택된다. JVET-N0843에서는, IBC에서의 병합 모드 및 AMVP 모드에 대한 BV 예측기가 공통 예측기 목록을 공유할 것이고, 이것은 다음 요소들로 이루어진다:
- 2 개의 공간적 이웃 위치 (도 2의 A1, B1)
- 5 개의 HMVP 엔트리
- 디폴트인 제로 벡터
목록 내의 후보의 개수는 슬라이스 헤더로부터 유도된 변수에 의해 제어된다. 병합 모드의 경우, 이러한 목록의 처음 6 개의 엔트리까지가 사용될 것이다; AMVP 모드의 경우, 이러한 목록의 처음 2 개의 엔트리가 사용될 것이다. 그리고, 이러한 목록은 공유된 병합 목록 영역 요구 사항에 따른다(SMR 내에 동일한 목록을 공유하고 있음).
전술된 BV 예측기 후보 목록에 추가하여, JVET-N0843은 HMVP 후보 및 존재하는 병합 후보(A1, B1) 사이의 프루닝 동작을 단순화하는 것을 역시 제안하였다. 단순화된 설명에서는, 2 개까지의 프루닝(pruning) 동작이 존재할 것인데, 그 이유는 이것이 오직 처음의 HMVP 후보를 공간적 병합 후보(들)와 비교하기 때문이다.
2.3.2.1.1 디코딩 프로세스
8.6.2.2 IBC 루마 움직임 벡터 예측에 대한 유도 프로세스
이러한 프로세스는 CuPredMode[ xCb ][ yCb ]가 MODE_IBC와 같은 경우에만 호출되는데, 여기에서(xCb, yCb)는 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인 현재 루마 코딩 블록의 상단-좌측 샘플을 규정한다.
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단좌측 루마 샘플에 상대적인 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 (xCb, yCb),
- 루마 샘플 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도 안의 루마 움직임 벡터 mvL.
변수 xSmr, ySmr, smrWidth, smrHeight, 및 smrNumHmvpIbcCand는 다음과 같이 유도된다:
xSmr = IsInSmr[ xCb ][ yCb ] ? SmrX[ xCb ][ yCb ]: xCb (8-910)
ySmr = IsInSmr[ xCb ][ yCb ] ? SmrY[ xCb ][ yCb ]: yCb (8-911)
smrWidth = IsInSmr[ xCb ][ yCb ] ? SmrW[ xCb ][ yCb ]: cbWidth (8-912)
smrHeight = IsInSmr[ xCb ][ yCb ] ? SmrH[ xCb ][ yCb ]: cbHeight (8-913)
smrNumHmvpIbcCand = IsInSmr[ xCb ][ yCb ] ? NumHmvpSmrIbcCand: NumHmvpIbcCand (8-914)
루마 움직임 벡터 mvL은 다음 순서의 단계에 의해서 유도된다:
1. 절 8.6.2.3 에 규정된 바와 같이 이웃하는 코딩 유닛으로부터의 공간적 움직임 벡터 후보에 대한 유도 프로세스가, (xSmr, ySmr)과 같게 설정된 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth, 및 smrWidth 및 smrHeight와 같도록 설정된 루마 코딩 블록 높이 cbHeight를 입력으로서 가지고 호출되고, 출력은 이용가능성 플래그 availableFlagA1, availableFlagB1 및 움직임 벡터 mvA1 및 mvB1이다.
2. 움직임 벡터 후보 목록 mvCandList는 다음과 같이 구성된다:
i = 0
if(availableFlagA1)
mvCandList [ i++ ] = mvA1 (8-915)
if(availableFlagB1)
mvCandList [ i++ ] = mvB1
3. 변수 numCurrCand는 mvCandList 내의 병합 후보의 개수와 동일하게 설정된다.
4. numCurrCand가 MaxNumMergeCandand보다 작고 smrNumHmvpIbcCand가 0보다 큰 경우, 8.6.2.4에서 규정된 바와 같이 IBC 이력-기반 움직임 벡터 후보의 유도 프로세스는, mvCandList, IsInSmr[ xCb ][ yCb ]와 동일하게 설정된 isInSmr, 및 numCurrCand를 입력으로서 가지고, 수정된 mvCandList 및 numCurrCand를 출력으로서 가지고서 호출된다.
5. numCurrCand가 MaxNumMergeCand보다 작으면, numCurrCand가 MaxNumMergeCand와 같아질 때까지 다음이 적용된다:
1. mvCandList[ numCurrCand ][ 0 ]가 0과 동일하게 설정된다.
2. mvCandList[ numCurrCand ][ 1 ]이 0과 동일하게 설정된다.
3. numCurrCand가 1만큼 증가된다.
6. 변수 mvIdx는 다음과 같이 유도된다:
mvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ]: mvp_l0_flag[ xCb ][ yCb ] (8-916)
7. 다음 할당이 이루어진다:
mvL[ 0 ] = mergeCandList[ mvIdx ][ 0 ] (8-917)
mvL[ 1 ] = mergeCandList[ mvIdx ][ 1 ] (8-918)
2.3.2.2 IBC의 크기 제한
최근의 VVC 및 VTM5에서는, 이전의 VTM 및 VVC 버전에서의 현재의 비트스트림 제약 상단에 128x128 IBC 모드를 디스에이블하기 위한 신택스 제약(syntax constraint)을 명시적으로 사용하는 것이 제안되는데, 이것은 IBC 플래그의 존재가 CU 크기(< 128x128)에 의존하게 한다.
2.3.2.3 IBC에 대한 공유된 병합 목록
디코더 복잡도를 감소시키고 병렬적 인코딩을 지원하기 위하여, JVET-M0147은 작은 스킵/병합-코딩된 CU들의 병렬 처리가 가능해지게 하기 위하여 CU 분할 트리 내의 하나의 조상 노드의 모든 리프 코딩 유닛(CU들)에 대하여 동일한 병합 후보 목록을 공유하는 것을 제안했다. 조상 노드는 병합 공유 노드라고 명명된다. 공유된 병합 후보 목록은, 병합 공유 노드를 리프 CU인 것처럼 취급하면서 병합 공유 노드에서 생성된다.
좀 더 구체적으로는, 다음이 적용될 수 있다:
- 블록이 32 이하의 루마 샘플을 가지고, 2 개의 4x4 자식 블록으로 분할된다면, 매우 작은 블록들 (예를 들어, 두 개의 인접한 4x4 블록) 사이의 공유 병합 목록이 사용된다.
- 블록이 32보다 큰 루마 샘플을 가지지만, 분할 이후에 적어도 하나의 자식 블록이 임계(32)보다 작으면, 해당 분할의 모든 자식 블록이 동일한 병합 목록을 공유한다(예를 들어 삼중 분할의 경우 16x4 또는 4x16 또는 사중 분할의 경우 8x8).
이러한 제한 사항은 IBC 병합 모드에만 적용된다.
2.4 코딩 유닛 및 병합 모드에 대한 신택스 테이블 및 의미론
7.3.5.1 범용 슬라이스 헤더 신택스
slice_header( ) { 서술자
slice_pic_parameter_set_id ue(v)
if( rect_slice_flag | | NumBricksInPic > 1 )
slice_address u(v)
if( !rect_slice_flag && !single_brick_per_slice_flag )
num_bricks_in_slice_minus1 ue(v)
slice_type ue(v)
...
{{ if ( slice_type != I ) }}{
if( sps_temporal_mvp_enabled_flag )
slice_temporal_mvp_enabled_flag u(1)
if( slice_type = = B )
mvd_l1_zero_flag u(1)
if( cabac_init_present_flag )
cabac_init_flag u(1)
if( slice_temporal_mvp_enabled_flag ) {
if( slice_type = = B )
collocated_from_l0_flag u(1)
}
if( ( weighted_pred_flag && slice_type = = P ) | |
( weighted_bipred_flag && slice_type = = B ) )
pred_weight_table( )
{{ six_minus_max_num_merge_cand }} ue(v)
{{ if( sps_affine_enabled_flag )
five_minus_max_num_subblock_merge_cand ue(v)
if( sps_fpel_mmvd_enabled_flag )
slice_fpel_mmvd_enabled_flag u(1)
if( sps_triangle_enabled_flag && MaxNumMergeCand >= 2 )
max_num_merge_cand_minus_max_num_triangle_cand ue(v)
} else if ( sps_ibc_enabled_flag )
six_minus_max_num_merge_cand }} ue(v)
slice_qp_delta se(v)
if( pps_slice_chroma_qp_offsets_present_flag ) {
slice_cb_qp_offset se(v)
slice_cr_qp_offset se(v)
}
...
byte_alignment( )
}
7.3.7.5 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 서술자
if( slice_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 && slice_type != I
&& !( cbWidth = = 4 && cbHeight = = 4 ) )
pred_mode_flag ae(v)
if( ( ( slice_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( slice_type != I && ( CuPredMode[ x0 ][ y0 ] != MODE_INTRA | |
( cbWidth = = 4 && cbHeight = = 4 && cu_skip_flag[ x0 ][ y0 ] = = 0 ) ) ) ) &&
sps_ibc_enabled_flag && ( cbWidth != 128 | | cbHeight != 128 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
...
}
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
general_merge_flag[ x0 ][ y0 ] ae(v)
if( general_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( slice_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)
}
if( sps_smvd_enabled_flag && inter_pred_idc[ x0 ][ y0 ] = = PRED_BI &&
!inter_affine_flag[ x0 ][ y0 ] && RefIdxSymL0 > -1 && RefIdxSymL1 > -1 )
sym_mvd_flag[ x0 ][ y0 ] ae(v)
...
}
}
7.3.7.7 병합 데이터 신택스
merge_data( x0, y0, cbWidth, cbHeight ) { 서술자
{{ if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
if( MaxNumMergeCand > 1 )
merge_idx[ x0 ][ y0 ] ae(v)
} else { }}
if( sps_mmvd_enabled_flag | | cbWidth * cbHeight != 32 )
regular_merge_flag[ x0 ][ y0 ] ae(v)
if ( regular_merge_flag[ x0 ][ y0 ] = = 1 ){
if( MaxNumMergeCand > 1 )
merge_idx[ x0 ][ y0 ] ae(v)
} else {
if( sps_mmvd_enabled_flag && cbWidth * cbHeight != 32 )
mmvd_merge_flag[ x0 ][ y0 ] ae(v)
if( mmvd_merge_flag[ x0 ][ y0 ] = = 1 ) {
if( MaxNumMergeCand > 1 )
mmvd_cand_flag[ x0 ][ y0 ] ae(v)
mmvd_distance_idx[ x0 ][ y0 ] ae(v)
mmvd_direction_idx[ x0 ][ y0 ] ae(v)
} else {
if( MaxNumSubblockMergeCand > 0 && cbWidth >= 8 && cbHeight >= 8 )
merge_subblock_flag[ x0 ][ y0 ] ae(v)
if( merge_subblock_flag[ x0 ][ y0 ] = = 1 ) {
if( MaxNumSubblockMergeCand > 1 )
merge_subblock_idx[ x0 ][ y0 ] ae(v)
} else {
if( sps_ciip_enabled_flag && cu_skip_flag[ x0 ][ y0 ] = = 0 &&
( cbWidth * cbHeight ) >= 64 && cbWidth < 128 && cbHeight < 128 ) {
ciip_flag[ x0 ][ y0 ] ae(v)
if( ciip_flag[ x0 ][ y0 ] && MaxNumMergeCand > 1 )
merge_idx[ x0 ][ y0 ] ae(v)
}
if( MergeTriangleFlag[ x0 ][ y0 ] ) {
merge_triangle_split_dir[ x0 ][ y0 ] ae(v)
merge_triangle_idx0[ x0 ][ y0 ] ae(v)
merge_triangle_idx1[ x0 ][ y0 ] ae(v)
}
}
}
}
}
}
7.4.6.1 범용 슬라이스 헤더 의미론
six_minus_max_num_merge_cand 는 6에서 감산된, 슬라이스 내에 지원되는 병합 움직임 벡터 예측(MVP) 후보의 최대 개수를 규정한다. 병합 MVP 후보의 최대 개수 MaxNumMergeCand는 다음과 같이 유도된다:
MaxNumMergeCand = 6 - six_minus_max_num_merge_cand (7-57)
MaxNumMergeCand의 값은 1 내지 6의 범위에 포함될 것이고, 양단을 포함한다.
five_minus_max_num_subblock_merge_cand는 5에서 감산된, 슬라이스 내에 지원되는 서브블록-기반 병합 움직임 벡터 예측(MVP) 후보의 최대 개수를 규정한다. five_minus_max_num_subblock_merge_cand가 존재하지 않으면, 이것은 5 - sps_sbtmvp_enabled_flagPRED_L0와 같다고 추론된다. 서브블록-기반 병합 MVP 후보의 최대 개수 MaxNumSubblockMergeCand는 다음과 같이 유도된다:
MaxNumSubblockMergeCand = 5 - five_minus_max_num_subblock_merge_cand (7-58)
MaxNumSubblockMergeCand의 값은 0 내지 5의 범위 안에 속할 것이고, 양단을 포함한다.
7.4.8.5 코딩 유닛 시맨틱스
pred_mode_flag가 0과 같으면 현재 코딩 유닛이 인터 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_flag가 1과 같으면 현재 코딩 유닛이 인트라 예측 모드에서 코딩된다는 것을 규정한다.
pred_mode_flag가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- cbWidth가 4와 같고 cbHeight가 4와 같으면, pred_mode_flag는 1과 같도록 추론된다.
- 그렇지 않으면, pred_mode_flag는 I 슬라이스를 디코딩할 때에는 1과 같은 것으로, 그리고 P 또는 B 슬라이스를 각각 디코딩 할 때에는 0과 같은 것으로 추론된다.
변수 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_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- cu_skip_flag[ x0 ][ y0 ]가 1과 같고, cbWidth가 4와 같으며, cbHeight가 4와 같으면, pred_mode_ibc_flag는 1과 같은 것으로 추론된다.
- 그렇지 않으면, cbWidth 및 cbHeight 양자 모두가 128과 같으면, pred_mode_ibc_flag는 0과 같도록 추론된다.
- 그렇지 않으면, pred_mode_ibc_flag는 I 슬라이스를 디코딩할 때에는 sps_ibc_enabled_flag의 값과 같고, P 또는 B 슬라이스를 각각 디코딩할 때에는 0과 같다고 추론된다.
pred_mode_ibc_flag가 1과 같으면, 변수 CuPredMode[ x ][ y ]는 x = x0.. x0 + cbWidth - 1 및 y = y0.. y0 + cbHeight - 1에 대해서 MODE_IBC와 같아지도록 설정된다.
general_merge_flag[ x0 ][ y0 ]는 현재 코딩 유닛에 대한 인터 예측 파라미터가 이웃하는 인터-예측된 파티션으로부터 추론되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
general_merge_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- cu_skip_flag[ x0 ][ y0 ]가 1과 같으면, general_merge_flag[ x0 ][ y0 ]는 1과 같도록 추론된다.
- 그렇지 않으면, general_merge_flag[ x0 ][ y0 ]는 0과 같도록 추론된다.
mvp_l0_flag[ x0 ][ y0 ]는 목록 0의 움직임 벡터 예측기 인덱스를 규정하는데, 여기에서 x0, y0는 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
mvp_l0_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
mvp_l1_flag[ x0 ][ y0 ]는 mvp_l0_flag와 동일한 의미론을 가지고, l0 및 목록 0는 각각 l1 및 목록 1로 대체된다.
inter_pred_idc[ x0 ][ y0 ]는 list0, list1, 또는 양 예측이 테이블 7-10에 따라서 현재 코딩 유닛에 대해 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
inter_pred_idc inter_pred_idc의 명칭
( cbWidth + cbHeight )  >  12 ( cbWidth + cbHeight )  = =  12 ( cbWidth + cbHeight )  = =  8
0 PRED_L0 PRED_L0 n.a.
1 PRED_L1 PRED_L1 n.a.
2 PRED_BI n.a. n.a.
<테이블 7-10. 인터 예측 모드에 대한 명칭 연관성>
inter_pred_idc[ x0 ][ y0 ]가 존재하지 않으면, 이것은 PRED_L0와 같도록 추론된다.
7.4.8.7 병합 데이터 의미론
1과 같은 regular_merge_flag[ x0 ][ y0 ]는, 현재 코딩 유닛의 인터 예측 파라미터를 생성하기 위하여 정규 병합 모드가 사용된다는 것을 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
regular_merge_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- 다음 조건들 모두가 참이면, regular_merge_flag[ x0 ][ y0 ]는 1과 같도록 추론된다:
- sps_mmvd_enabled_flag가 0과 같다.
- general_merge_flag[ x0 ][ y0 ]가 1과 같다.
- cbWidth*cbHeight가 32와 같다.
- 그렇지 않으면, regular_merge_flag[ x0 ][ y0 ]는 0과 같도록 추론된다.
1과 같은 mmvd_merge_flag[ x0 ][ y0 ]는, 현재 코딩 유닛의 인터 예측 파라미터를 생성하기 위해서 움직임 벡터차가 있는 병합 모드가 사용된다는 것을 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
mmvd_merge_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- 다음 조건들 모두가 참이면, mmvd_merge_flag[ x0 ][ y0 ]는 1과 같도록 추론된다:
- sps_mmvd_enabled_flag가 1과 같다.
- general_merge_flag[ x0 ][ y0 ]가 1과 같다.
- cbWidth*cbHeight가 32와 같다.
- regular_merge_flag[ x0 ][ y0 ]가 0과 같다.
- 그렇지 않으면, mmvd_merge_flag[ x0 ][ y0 ]는 0과 같도록 추론된다.
mmvd_cand_flag[ x0 ][ y0 ]는 병합 후보 목록 내의 첫 후보(0) 및 둘째 후보(1)가 mmvd_distance_idx[ x0 ][ y0 ] 및 mmvd_direction_idx[ x0 ][ y0 ]로부터 유도된 움직임 벡터차를 가지고 사용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
mmvd_cand_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
mmvd_distance_idx[ x0 ][ y0 ]는 테이블 7-12에 규정되는 바와 같이 MmvdDistance[ x0 ][ y0 ]를 유도하기 위하여 사용되는 인덱스를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
mmvd_distance_idx[ x0 ][ y0 ] MmvdDistance[ x0 ][ y0 ]
slice_fpel_mmvd_enabled_flag = = 0 slice_fpel_mmvd_enabled_flag = = 1
0 1 4
1 2 8
2 4 16
3 8 32
4 16 64
5 32 128
6 64 256
7 128 512
<테이블 7-12. mmvd_distance_idx[ x0 ][ y0 ]에 기반한 MmvdDistance[ x0 ][ y0 ] 의 사양>
mmvd_direction_idx[ x0 ][ y0 ]는 테이블 7-13에 규정된 바와 같이 MmvdSign[ x0 ][ y0 ]를 유도하기 위하여 사용되는 인덱스를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
mmvd_direction_idx[ x0 ][ y0 ] MmvdSign[ x0 ][ y0 ][0] MmvdSign[ x0 ][ y0 ][1]
0 +1 0
1 -1 0
2 0 +1
3 0 -1
<테이블 7-13. mmvd_direction_idx[ x0 ][ y0 ]에 기반한 MmvdSign[ x0 ][ y0 ] 의 사양>
병합 플러스 MVD 오프셋 MmvdOffset[ x0 ][ y0 ] 의 양자 모두의 성분은 다음과 같이 유도된다:
MmvdOffset[ x0 ][ y0 ][ 0 ] =(MmvdDistance[ x0 ][ y0 ] << 2) * MmvdSign[ x0 ][ y0 ][0] (7-124)
MmvdOffset[ x0 ][ y0 ][ 1 ] =(MmvdDistance[ x0 ][ y0 ] << 2) * MmvdSign[ x0 ][ y0 ][1] (7-125)
merge_subblock_flag[ x0 ][ y0 ]는 현재 코딩 유닛에 대한 서브블록-기반 인터 예측 파라미터가 이웃하는 블록으로부터 추론되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다. merge_subblock_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
merge_subblock_idx[ x0 ][ y0 ]는 서브블록-기반 병합 후보 목록의 병합 후보 인덱스를 규정하는데, 여기에서 x0, y0는 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
merge_subblock_idx[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
ciip_flag[ x0 ][ y0 ]는 결합된 인터-픽쳐 병합 및 인트라-픽쳐 예측이 현재 코딩 유닛에 대해서 적용되는지 여부를 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
ciip_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
ciip_flag[ x0 ][ y0 ]가 1과 같으면, 변수 IntraPredModeY[ x ][ y ] with x = xCb.. xCb + cbWidth - 1 및 y = yCb.. yCb + cbHeight - 1은 INTRA_PLANAR와 같도록 설정된다.
B 슬라이스를 디코딩할 때에 현재 코딩 유닛의 예측 샘플을 생성하기 위하여 삼각 형상 기반 움직임 보상이 사용되는지 여부를 규정하는 MergeTriangleFlag[ x0 ][ y0 ]는 다음과 같이 유도된다:
- 다음 조건들 모두가 참이면, MergeTriangleFlag[ x0 ][ y0 ]는 1과 같도록 설정된다:
- sps_triangle_enabled_flag가 1과 같다.
- slice_type이 B와 같다.
- general_merge_flag[ x0 ][ y0 ]가 1과 같다.
- MaxNumTriangleMergeCand가 2 이상이다.
- cbWidth * cbHeight가 64 이상이다.
- regular_merge_flag[ x0 ][ y0 ]가 0과 같다.
- mmvd_merge_flag[ x0 ][ y0 ]가 0과 같다.
- merge_subblock_flag[ x0 ][ y0 ]가 0과 같다.
- ciip_flag[ x0 ][ y0 ]가 0과 같다.
- 그렇지 않으면, MergeTriangleFlag[ x0 ][ y0 ]는 0과 동일하게 설정된다.
merge_triangle_split_dir[ x0 ][ y0 ]는 병합 삼각형 모드의 분할 방향을 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
merge_triangle_split_dir[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
merge_triangle_idx[ x0 ][ y0 ]는 삼각형 기반 움직임 보상 후보 목록의 첫 번째 병합 후보 인덱스를 규정하는데, 여기에서 x0, y0는 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
merge_triangle_idx0[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
merge_triangle_idx1[ x0 ][ y0 ]는 삼각형 기반 움직임 보상 후보 목록의 두 번째 병합 후보 인덱스를 규정하는데, 여기에서 x0, y0는 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
merge_triangle_idx1[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0과 같도록 추론된다.
merge_idx[ x0 ][ y0 ]는 병합 후보 목록의 병합 후보 인덱스를 규정하는데, 여기에서 x0, y0는 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
merge_idx[ x0 ][ y0 ]가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- mmvd_merge_flag[ x0 ][ y0 ]가 1과 같으면, merge_idx[ x0 ][ y0 ]는 mmvd_cand_flag[ x0 ][ y0 ]와 같도록 추론된다.
- 그렇지 않으면(mmvd_merge_flag[ x0 ][ y0 ]가 0과 같으면), merge_idx[ x0 ][ y0 ]는 0과 같도록 추론된다.
3. 실시형태들에 의해서 해결되는 기술적 문제들의 예
현재의 IBC는 다음의 문제점들을 가질 수 있다:
1. P/B 슬라이스의 경우, 얼마나 많은 IBC 움직임(BV) 후보가 IBC 움직임 목록에 추가될 수 있는지가 정규 병합 목록 크기와 같도록 설정된다. 그러므로, 정규 병합 모드가 디스에이블되면, IBC 병합 모드도 역시 디스에이블된다. 그러나, 정규 병합 모드가 그것의 큰 이득을 고려할 때 디스에이블될 경우에도 IBC 병합 모드를 이네이블하는 것이 바람직하다.
2. IBC AMVP 및 IBC 병합 모드는 동일한 움직임(BV) 후보 목록 구조 프로세스를 공유한다. 병합 후보의 최대 개수(예를 들어, MaxNumMergeCand)에 의하여 표시되는 목록 크기는 슬라이스 헤더 내에서 시그널링된다. IBC AMVP 케이스의 경우, BV 예측기는 두 개의 IBC 움직임 후보 중 하나에서부터만 선택될 수 있다.
a. BV 후보 목록 크기가 1인 경우, 이러한 경우에 BV 예측기 인덱스의 시그널링은 필요하지 않다.
b. BV 후보 목록 크기가 0이면, IBC 병합 및 AMVP 모드 양자 모두는 디스에이블될 것이다. 그러나, 현재의 디자인에서는, BV 예측기 인덱스가 여전히 시그널링된다.
3. IBC는 시퀀스 레벨에서 이네이블될 수 있지만, 시그널링된 BV 목록 크기에 기인하여, IBC는 디스에이블될 수 있고, IBC 모드의 표시 및 관련된 신택스가 여전히 시그널링되며, 이것이 비트를 낭비한다.
4 예시적인 기법 및 실시형태
후술되는 구체적인 발명들은 일반적인 개념을 설명하기 위한 예로서 간주되어야 한다. 이러한 발명은 협의로 해석되어서는 안된다. 더욱이, 이러한 발명은 임의의 방식으로 결합될 수 있다.
본 발명에서, 디코더 측 움직임 벡터 유도(decoder side motion vector derivation; DMVD)는 블록/서브-블록 움직임 정보를 유도 또는 정제하기 위한 움직임 추정을 수행하는 DMVR 및 FRUC, 및 샘플별 움직임 정제를 수행하는 BIO와 같은 방법을 포함한다.
BV가 유도되거나 예측될 수 있는 기반이 되는, BV 후보 목록 내의 BV 후보의 최대 개수(즉, BV 후보 목록 크기)를 maxIBCCandNum으로 표시한다.
IBC 병합 후보의 최대 개수를 maxIBCMrgNum으로, 그리고 IBC AMVP 후보의 최대 개수를 maxIBCAMVPNum으로 표시한다. 스킵 모드는 모든 계수가 0과 같은 특수한 병합 모드로서 취급될 수 있다는 것에 주의한다.
1. IBC(예를 들어, IBC AMVP 및/또는 IBC 병합) 모드는 IBC가 어떤 시퀀스에 대해서 이네이블되는 경우에도 어떤 픽쳐/슬라이스/타일/타일 그룹/브릭 또는 다른 비디오 유닛에 대해서 디스에이블될 수 있다.
a. 일 예에서, IBC AMVP 및/또는 IBC 병합 모드가 이네이블되는지 여부의 표시는, 픽쳐/슬라이스/타일/타일 그룹/브릭 또는 다른 비디오 유닛-레벨에서, 예컨대 PPS, APS, 슬라이스 헤더, 픽쳐 헤더, 등에서 시그널링될 수 있다.
i. 일 예에서, 표시는 플래그일 수 있다.
ii. 일 예에서, 표시는 허용된 BV 예측기들의 개수일 수 있다. 허용된 BV 예측기의 개수가 0과 같으면, 이것은 IBC AMVP 및/또는 병합 모드가 디스에이블된다는 것을 나타낸다.
1) 또는, 허용된 BV 예측기들의 개수는 예측성 방식으로 시그널링될 수도 있다.
a. 예를 들어, X 마이너스 허용된 BV 예측기들의 개수가 시그널링될 수 있는데, 여기에서 X는 2와 같은 고정된 숫자이다.
iii. 또는, 더 나아가 이러한 표시는 예컨대 비디오 콘텐츠가 스크린 콘텐츠인지 여부, 또는 sps_ibc_enabled_flag에 기반하여 조건에 따라서 시그널링될 수도 있다.
b. 일 예에서, IBC 모드는 비디오 콘텐츠가 스크린 콘텐츠가 아닌 경우(카메라-캡쳐 콘텐츠 또는 혼합된 콘텐츠)에는 디스에이블될 수 있다.
c. 일 예에서, IBC 모드는 비디오 콘텐츠가 카메라-캡쳐 콘텐츠인 경우에 디스에이블될 수 있다.
2. IBC의 사용(예를 들어, pred_mode_ibc_flag) 및 IBC 관련 신택스 요소를 시그널링할지 여부는 maxIBCCandNum에 의존할 수 있다(예를 들어, maxIBCCandNum은 MaxNumMergeCand와 동일하게 설정된다).
a. 일 예에서, maxIBCCandNum이 0과 같으면, I 슬라이스에 대하여 IBC 스킵 모드의 사용을 시그널링하는 것(예를 들어, cu_skip_flag)은 스킵될 수 있고, IBC는 디스에이블되는 것으로 추론된다.
b. 일 예에서, maxIBCMrgNum이 0과 같으면, I 슬라이스에 대하여 IBC 스킵 모드의 사용을 시그널링하는 것(예를 들어, cu_skip_flag)은 스킵될 수 있고, IBC 스킵 모드는 디스에이블되는 것으로 추론된다.
c. 일 예에서, maxIBCCandNum이 0과 같으면, IBC 병합/IBC AMVP 모드의 사용의 시그널링(예를 들어, pred_mode_ibc_flag)은 스킵될 수 있고, IBC는 디스에이블된 것으로 추론된다.
d. 일 예에서, maxIBCCandNum이 0과 같고 현재 블록이 IBC 모드로 시그널링된다면, 병합 모드의 시그널링(예를 들어, general_merge_flag)은 스킵될 수 있고, IBC 병합 모드는 디스에이블된 것으로 추론된다.
i. 또는, 현재 블록은 IBC AMVP 모드로 코딩되는 것으로 추론된다.
e. 일 예에서, maxIBCMrgNum이 0과 같고 현재 블록이 IBC 모드로 시그널링된다면, 병합 모드의 시그널링(예를 들어, general_merge_flag)은 스킵될 수 있고, IBC 병합 모드는 디스에이블된 것으로 추론된다.
i. 또는, 현재 블록은 IBC AMVP 모드로 코딩되는 것으로 추론된다.
3. IBC AMVP 모드에 대한 움직임 벡터차 관련 신택스 요소를 시그널링할지 여부는 maxIBCCandNum에 의존할 수 있다(예를 들어, maxIBCCandNum은 MaxNumMergeCand와 같게 설정된다).
a. 일 예에서, maxIBCCandNum이 0과 같으면, IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스의 시그널링(예를 들어, mvp_l0_flag)은 스킵될 수 있고, IBC AMVP 모드는 디스에이블되는 것으로 추론된다.
b. 일 예에서, maxIBCCandNum이 0과 같으면, 움직임 벡터차의 시그널링(예를 들어, mvd_coding)은 스킵될 수 있고, IBC AMVP 모드는 디스에이블된 것으로 추론된다.
c. 일 예에서, IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스 및/또는 움직임 벡터 예측기의 정밀도 및/또는 움직임 벡터차의 정밀도는 maxIBCCandNum이 K보다 크다는 조건 하에서 코딩될 수 있다(예를 들어, K = 0 또는 1).
i. 일 예에서, IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스(예를 들어, mvp_l0_flag)는 maxIBCCandNum이 1과 같은 경우 시그널링되지 않을 수 있다.
1) 하나의 예에서, IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스(예를 들어, mvp_l0_flag)는 이러한 경우에 0과 같은 값인 것으로 추론될 수 있다.
ii. 일 예에서, IBC AMVP 모드에 대한 움직임 벡터 예측기의 정밀도 및/또는 움직임 벡터차의 시그널링(예를 들어, amvr_precision_flag)은 maxIBCCandNum이 0과 같다면 스킵될 수 있다.
iii. 일 예에서, IBC AMVP 모드에 대한 움직임 벡터 예측기의 정밀도 및/또는 움직임 벡터차의 정밀도의 시그널링(예를 들어, amvr_precision_flag)은 maxIBCCandNum이 0보다 크다는 조건에 달려있을 수 있다.
4. maxIBCCandNum이 정규 병합 후보의 최대 개수로부터 디커플링될 수 있다는 것이 제안된다.
a. 일 예에서, maxIBCCandNum은 직접적으로 시그널링될 수 있다.
i. 또는, IBC가 어떤 슬라이스에 대해서 이네이블되면, 적합도 비트스트림은 maxIBCCandNum이 0보다 크다는 것을 만족시킬 것이다.
b. 일 예에서, maxIBCCandNum 및 다른 신택스 요소/고정된 값의 예측성 코딩이 시그널링될 수 있다.
i. 일 예에서, 정규 병합 목록 크기 및 maxIBCCandNum 사이의 차이가 코딩될 수 있다.
ii. 일 예에서, (K 마이너스 maxIBCCandNum)이 코딩될 수 있고, 예를 들어 K = 5 또는 6이다.
iii. 일 예에서, (maxIBCCandNum 마이너스 K)가 코딩될 수 있고, 예를 들어 K = 0 또는 2이다.
c. 일 예에서, maxIBCMrgNum 및/또는 maxIBCAMVPNum의 표시는 전술된 방법에 따라서 시그널링될 수 있다.
5. maxIBCCandNum은 Func(maxIBCMrgNum, maxIBCAMVPNum)과 같도록 설정될 수 있다
a. 일 예에서, maxIBCAMVPNum은 2로 고정되고, maxIBCCandNum은 Func(maxIBCMrgNum, 2)로 설정된다.
b. 일 예에서, Func(a, b)는 두 변수 a 및 b 사이의 더 큰 값을 반환한다.
6. maxIBCCandNum은 하나의 블록의 코딩된 모드 정보에 따라서 결정될 수 있다. 즉, 얼마나 많은 BV 후보가 BV 후보 목록에 추가될 수 있는지는 해당 블록의 모드 정보에 의존할 수 있다.
a. 일 예에서, 하나의 블록이 IBC 병합 모드로 코딩된다면, maxIBCCandNum은 maxIBCMrgNum으로 설정될 수 있다.
b. 일 예에서, 하나의 블록이 IBC AMVP 모드로 코딩된다면, maxIBCCandNum은 maxIBCAMVPNum으로 설정될 수 있다.
7. 적합도 비트스트림은 디코딩된 IBC AMVP 또는 IBC 병합 인덱스가 maxIBCCandNum보다 작다는 것을 만족시킬 것이다.
a. 일 예에서, 적합도 비트스트림은 디코딩된 IBC AMVP 인덱스가 maxIBCAMVPNum보다 작다는 것을 만족시킬 것이다.
b. 일 예에서, 적합도 비트스트림은 디코딩된 IBC 병합 인덱스가 maxIBCMrgNum(예를 들어, 2)보다 작은 것을 만족시킬 것이다.
8. IBC AMVP 또는 IBC 병합 후보 인덱스가 BV 후보 목록 내에서 BV 후보를 식별할 수 없으면(예를 들어, IBC AMVP 또는 병합 후보 인덱스가 maxIBCCandNum보다 작지 않거나, 디코딩된 IBC AMVP 인덱스가 maxIBCAMVPNum보다 작지 않거나, 또는 디코딩된 IBC 병합 인덱스가 maxIBCMrgNum보다 작지 않으면), 디폴트 예측 블록이 활용될 수 있다.
a. 일 예에서, 디폴트 예측 블록 내의 모든 샘플은 (1<<(비트 깊이 -1)로 설정된다.
b. 일 예에서, 디폴트 BV가 해당 블록에 할당될 수 있다.
9. IBC AMVP 또는 IBC 병합 후보 인덱스가 BV 후보 목록 내에서 BV 후보를 식별할 수 없으면(예를 들어, IBC AMVP 또는 병합 후보 인덱스가 maxIBCCandNum보다 작지 않거나, 디코딩된 IBC AMVP 인덱스가 maxIBCAMVPNum보다 작지 않거나, 디코딩된 IBC 병합 인덱스가 maxIBCMrgNum보다 작지 않으면), 해당 블록은 무효한 BV를 가지는 IBC 블록으로 취급될 수 있다.
a. 일 예에서, 무효한 BV를 가지는 블록에 적용되는 프로세스가 해당 블록에 적용될 수 있다.
10. 특정 조건 하에서는, 예컨대 디코딩된 IBC AMVP 또는 IBC 병합 인덱스가 maxIBCCandNum보다 작지 않은 경우에 보충적 BV 후보 목록이 구성될 수 있다.
a. 일 예에서, 보충적 BV 후보 목록은 다음 단계들 중 하나 또는 여러 단계로 구성된다(순서대로, 또는 인터리빙된 방식으로):
i. HMVP 후보를 다음과 같은 추가함
1) HMVP 테이블 내의 K번째 엔트리(예를 들어, K=0)로부터 시작하여 HMVP 후보 인덱스의 오름 차순으로
2) K번째 엔트리부터 시작하여(예를 들어, K = 0 또는 K = maxIBCCandNum - IBC AMVP/IBC 병합 인덱스 또는 K = maxIBCCandNum - 1 - IBC AMVP/IBC 병합 인덱스) HMVP 테이블 내의 마지막 엔트리까지 HMVP 후보 인덱스의 내림 차순으로
ii. maxIBCCandNum 개의 후보가 있는 BV 후보 목록을 사용하여 사용가능한 후보로부터 유도된 가상 BV 후보.
1) 하나의 예에서는 오프셋이 수평 방향에 추가되거나 및/또는 오프셋이 BV 후보의 수직 성분에 추가되어 가상 BV 후보를 얻을 수 있다.
2) 하나의 예에서는 오프셋이 수평 방향에 추가되거나 및/또는 오프셋이 HMVP 테이블 내의 HMVP 후보의 수직 성분에 추가되어 가상 BV 후보를 얻을 수 있다.
iii. 디폴트 후보를 추가하는 것
1) 하나의 예에서는, (0, 0)이 디폴트 후보로서 추가될 수 있다.
2) 하나의 예에서는 디폴트 후보가 현재 블록의 차원에 따라서 유도될 수 있다.
11. maxIBCAMVPNum은 2와 다를 수 있다.
a. 또는, 더욱이, 움직임 벡터 예측기 인덱스를 표시하기 위해서 플래그(예를 들어, mvp_l0_flag)를 시그널링하는 대신에, 1보다 클 수 있는 인덱스가 시그널링될 수도 있다.
i. 일 예에서, 인덱스는 유너리/절단된 유너리/고정 길이/지수적-골롬(golomb)/다른 이진화 방법으로 이진화될 수 있다.
ii. 일 예에서, 인덱스의 이진 빈 스트링의 빈들(bins)은 콘텍스트 코딩되거나 바이패스 코딩될 수 있다.
1) 하나의 예에서, 인덱스의 이진 빈 스트링의 첫 번째 K 개의(예를 들어, K = 1) 빈은 콘텍스트 코딩될 수 있고, 잔여 빈은 바이패스 코딩될 수 있다.
b. 일 예에서, maxIBCAMVPNum은 maxIBCMrgNum보다 클 수 있다.
i. 또는, 더욱이, BV 후보 목록 내의 처음 maxIBCMrgNum 개의 BV 후보가 IBC 병합 코딩된 블록에 대해서 활용될 수 있다.
12. IBC BV 후보 목록은 maxIBCCandNum이 0으로 설정되는 경우에도 여전히 구성될 수 있다(예를 들어, MaxNumMergeCand = 0).
a. 일 예에서, 병합 목록은 IBC AMVP 모드가 이네이블되는 경우와 같이 구성될 수 있다.
b. 일 예에서, 병합 목록은 IBC 병합 모드가 디스에이블되는 경우 최대 maxIBCAMVPNum 개의 BV 후보를 포함하도록 구성될 수 있다.
13. 전술된 방법에 대해서, "maxIBCCandNum"이라는 용어는 "maxIBCMrgNum" 또는 "maxIBCAMVPNum"으로 교체될 수 있다.
14. 전술된 방법에 대하여, "maxIBCCandNum" 및/또는 "maxIBCMrgNum"라는 용어는 정규 병합 목록에 대한 병합 후보의 최대 개수를 나타낼 수 있는 MaxNumMergeCand에 의해서 교체될 수 있다.
5 실시형태
JVET-N1001-v5 상에 새롭게 가산된 부분은 이중 중괄호로 둘러싸이는데, 즉, {{a}}는 "a"가 추가되었다는 것을 나타내고, 삭제된 부분은 이중 대괄호에 의해서 둘러싸이는데, 즉 [[a]]는 "a"가 삭제되었다는 것을 표시한다.
5.1 실시형태 #1
IBC 움직임 후보의 최대 개수(예를 들어, IBC AMVP 및/또는 IBC 병합을 위한)의 표시는 슬라이스 헤더/PPS/APS/DPS 내에서 시그널링될 수 있다.
7.3.5.1 범용 슬라이스 헤더 신택스
slice_header( ) { 서술자
slice_pic_parameter_set_id ue(v)
if( rect_slice_flag | | NumBricksInPic > 1 )
slice_address u(v)
if( !rect_slice_flag && !single_brick_per_slice_flag )
num_bricks_in_slice_minus1 ue(v)
slice_type ue(v)
if( NalUnitType = = GRA_NUT )
recovery_poc_cnt se(v)
slice_pic_order_cnt_lsb u(v)
if( NalUnitType = = IDR_W_RADL | | NalUnitType = = IDR_N_LP | |
NalUnitType = = CRA_NUT )
no_output_of_prior_pics_flag u(1)
if( output_flag_present_flag )
pic_output_flag u(1)
if( ( NalUnitType != IDR_W_RADL && NalUnitType != IDR_N_LP ) | |
sps_idr_rpl_present_flag ) {
...
}
}
if ( slice_type != I ) {
if( sps_temporal_mvp_enabled_flag )
slice_temporal_mvp_enabled_flag u(1)
if( slice_type = = B )
mvd_l1_zero_flag u(1)
if( cabac_init_present_flag )
cabac_init_flag u(1)
if( slice_temporal_mvp_enabled_flag ) {
if( slice_type = = B )
collocated_from_l0_flag u(1)
}
if( ( weighted_pred_flag && slice_type = = P ) | |
( weighted_bipred_flag && slice_type = = B ) )
pred_weight_table( )
six_minus_max_num_merge_cand ue(v)
if( sps_affine_enabled_flag )
five_minus_max_num_subblock_merge_cand ue(v)
if( sps_fpel_mmvd_enabled_flag )
slice_fpel_mmvd_enabled_flag u(1)
if( sps_triangle_enabled_flag && MaxNumMergeCand >= 2 )
max_num_merge_cand_minus_max_num_triangle_cand ue(v)
{{ if( sps_ibc_enabled_flag )
max_num_merge_cand_minus_max_num_IBC_cand ue(v) }}
} else if ( sps_ibc_enabled_flag )
six_minus_max_num_merge_cand ue(v)
slice_qp_delta se(v)
...
}
{{ max_num_merge_cand_minus_max_num_IBC_cand는 MaxNumMergeCand로부터 감산된, 슬라이스 내에서 지원된 IBC 병합 모드 후보의 최대 개수를 규정한다 IBC 병합 모드 후보의 최대 개수 MaxNumIBCMergeCand는 다음과 같이 유도된다
MaxNumIBCMergeCand = MaxNumMergeCand - max_num_merge_cand_minus_max_num_IBC_cand
max_num_merge_cand_minus_max_num_IBC_cand가 존재하면, MaxNumIBCMergeCand의 값은 2(또는 0) 내지 MaxNumMergeCand 사이의 범위에 속할 것이고, 양단을 포함한다. When max_num_merge_cand_minus_max_num_IBC_cand 존재하지 않으면, MaxNumIBCMergeCand는 0과 동일하게 설정된다. MaxNumIBCMergeCand가 0과 동일하면, IBC 병합 및 IBC AMVP 모드는 현재 슬라이스에 대해서 허용되지 않는다. }}
또는, MaxNumIBCMergeCand의 표시의 시그널링은 다음으로 교체될 수 있다
{{ if( sps_ibc_enabled_flag )
five_minus_max_num_IBC_cand ue(v)
MaxNumIBCMergeCand = 5 - five_minus_max_num_IBC_cand }}
5.2 실시형태 #2
IBC BV 목록의 최대 개수를 IBC 및 정규 인터 모드 양자 모두를 제어하는 MaxNumMergeCand로부터 별개의 변수 MaxNumIBCMergeCand로 변경하는 것이 제안된다.
8.6.2.2 IBC 루마 움직임 벡터 예측에 대한 유도 프로세스
이러한 프로세스는 CuPredMode[ xCb ][ yCb ]가 MODE_IBC와 같은 경우에만 호출되는데, 여기에서(xCb, yCb)는 현재 픽쳐의 상단-좌측 루마 샘플에 상대적인 현재 루마 코딩 블록의 상단-좌측 샘플을 규정한다.
이러한 프로세스로 들어가는 입력들은 다음이다:
- 현재 픽쳐의 상단좌측 루마 샘플에 상대적인 현재 루마 코딩 블록의 상단-좌측 샘플의 루마 위치 (xCb, yCb),
- 루마 샘플 내의 현재 코딩 블록의 폭을 규정하는 변수 cbWidth,
- 루마 샘플 내의 현재 코딩 블록의 높이를 규정하는 변수 cbHeight.
이러한 프로세스의 출력들은 다음이다:
- 1/16 분수-샘플 정확도 안의 루마 움직임 벡터 mvL.
변수 xSmr, ySmr, smrWidth, smrHeight, 및 smrNumHmvpIbcCand는 다음과 같이 유도된다:
xSmr = IsInSmr[ xCb ][ yCb ] ? SmrX[ xCb ][ yCb ]: xCb (8-910)
ySmr = IsInSmr[ xCb ][ yCb ] ? SmrY[ xCb ][ yCb ]: yCb (8-911)
smrWidth = IsInSmr[ xCb ][ yCb ] ? SmrW[ xCb ][ yCb ]: cbWidth (8-912)
smrHeight = IsInSmr[ xCb ][ yCb ] ? SmrH[ xCb ][ yCb ]: cbHeight (8-913)
smrNumHmvpIbcCand = IsInSmr[ xCb ][ yCb ] ? NumHmvpSmrIbcCand: NumHmvpIbcCand (8-914)
루마 움직임 벡터 mvL은 다음 순서의 단계에 의해서 유도된다:
1. 절 8.6.2.3 에 규정된 바와 같이 이웃하는 코딩 유닛으로부터의 공간적 움직임 벡터 후보에 대한 유도 프로세스가, (xSmr, ySmr)과 같게 설정된 루마 코딩 블록 위치 (xCb, yCb), 루마 코딩 블록 폭 cbWidth, 및 smrWidth 및 smrHeight와 같도록 설정된 루마 코딩 블록 높이 cbHeight를 입력으로서 가지고 호출되고, 출력은 이용가능성 플래그 availableFlagA1, availableFlagB1 및 움직임 벡터 mvA1 및 mvB1이다.
2. 움직임 벡터 후보 목록 mvCandList는 다음과 같이 구성된다:
i = 0
if(availableFlagA1)
mvCandList [ i++ ] = mvA1 (8-915)
if(availableFlagB1)
mvCandList [ i++ ] = mvB1
3. 변수 numCurrCand는 mvCandList 내의 병합 후보의 개수와 동일하게 설정된다.
4. numCurrCand가 [[MaxNumMergeCand]] {{MaxNumIBCMergeCand}}보다 작고 smrNumHmvpIbcCand가 0보다 큰 경우, 8.6.2.4에서 규정된 바와 같이 IBC 이력-기반 움직임 벡터 후보의 유도 프로세스는, mvCandList, IsInSmr[ xCb ][ yCb ]와 동일하게 설정된 isInSmr[[]]{{}} numCurrCand를 입력으로서 가지고, 수정된 mvCandList 및 numCurrCand를 출력으로서 가지고서 호출된다.
5. numCurrCand가 [[MaxNumMergeCand]] {{MaxNumIBCMergeCand}}, numCurrCand가 MaxNumMergeCand와 같아질 때까지 다음이 적용된다:
1. mvCandList[ numCurrCand ][ 0 ]가 0과 동일하게 설정된다.
2. mvCandList[ numCurrCand ][ 1 ]이 0과 동일하게 설정된다.
3. numCurrCand가 1만큼 증가된다.
변수 mvIdx는 다음과 같이 유도된다:
mvIdx = general_merge_flag[ xCb ][ yCb ] ? merge_idx[ xCb ][ yCb ]: mvp_l0_flag[ xCb ][ yCb ] (8-916)
다음의 할당이 이루어진다:
mvL[ 0 ] = mergeCandList[ mvIdx ][ 0 ] (8-917)
mvL[ 1 ] = mergeCandList[ mvIdx ][ 1 ] (8-918)
일 예에서, MaxNumIBCMergeCand는 현재 블록이 IBC 병합 모드라면 MaxNumMergeCand로 설정되고, 현재 블록이 IBC AMVP 모드라면 2로 설정된다.
일 예에서, MaxNumIBCMergeCand는 시그널링된 정보로부터, 예컨대 실시형태 #1을 사용하여 유도된다.
5.3 실시형태 #3
최대 허용된 IBC 후보 개수에 따른 IBC 관련 신택스 요소의 조건부 시그널링. 일 예에서, MaxNumIBCMergeCand는 MaxNumMergeCand와 동일하게 설정된다.
7.3.7.5 코딩 유닛 신택스
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 서술자
if( slice_type != I | | sps_ibc_enabled_flag ) {
if( treeType != DUAL_TREE_CHROMA &&
!( cbWidth = = 4 && cbHeight = = 4 && !(sps_ibc_enabled_flag {{&& MaxNumIBCMergeCand>0)}}) )
cu_skip_flag[ x0 ][ y0 ] ae(v)
if( cu_skip_flag[ x0 ][ y0 ] = = 0 && slice_type != I
&& !( cbWidth = = 4 && cbHeight = = 4 ) )
pred_mode_flag ae(v)
if( ( ( slice_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |
( slice_type != I && ( CuPredMode[ x0 ][ y0 ] != MODE_INTRA | |
( cbWidth = = 4 && cbHeight = = 4 && cu_skip_flag[ x0 ][ y0 ] = = 0 ) ) ) ) &&
sps_ibc_enabled_flag {{&& MaxNumIBCMergeCand>0}} && ( cbWidth != 128 | | cbHeight != 128 ) )
pred_mode_ibc_flag ae(v)
}
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
...
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
general_merge_flag[ x0 ][ y0 ] ae(v)
if( general_merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
...
}
1과 같은 cu_skip_flag[ x0 ][ y0 ]는, 현재 코딩 유닛에 대하여 P 또는 B 슬라이스를 디코딩할 때, 다음 중 하나 이상이 cu_skip_flag[ x0 ][ y0 ] 이후에 파싱되는 것을 제외하고는 더 많은 신택스 요소가 파싱된다는 것과: IBC 모드 플래그 pred_mode_ibc_flag [ x0 ][ y0 ] {{MaxNumIBCMergeCand가 0보다 큰 경우}}, 및 merge_data() 신택스 구조체; I 슬라이스를 디코딩할 때{{그리고 MaxNumIBCMergeCand가 0보다 큰 경우}}, merge_idx[ x0 ][ y0 ]이외의 더 많은 신택스 요소가 cu_skip_flag[ x0 ][ y0 ] 이후에 파싱되지 않는다는 것을 규정한다. cu_skip_flag[ x0 ][ y0 ]가 0과 같으면 코딩 유닛이 스킵되지 않는다는 것을 규정한다. 어레이 인덱스들 x0, y0는, 픽쳐의 상단-좌측 루마 샘플에 상대적인, 고려되는 코딩 블록의 상단-좌측 루마 샘플의 위치 (x0, y0)를 규정한다.
cu_skip_flag[ x0 ][ y0 ]가 존재하지 않으면, 이것은 0와 같도록 추론된다.
pred_mode_ibc_flag가 1과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩된다는 것을 규정한다. pred_mode_ibc_flag가 0과 같으면, 현재 코딩 유닛이 IBC 예측 모드에서 코딩되지 않는다는 것을 규정한다.
pred_mode_ibc_flag가 존재하지 않으면, 이것은 다음과 같이 추론된다:
- cu_skip_flag[ x0 ][ y0 ]가 1과 같고, cbWidth가 4와 같으며, cbHeight가 4와 같으면, pred_mode_ibc_flag는 1과 같은 것으로 추론된다.
- 그렇지 않으면, cbWidth 및 cbHeight 양자 모두가 128과 같으면, pred_mode_ibc_flag는 0과 같도록 추론된다.
- 그렇지 않으면, pred_mode_ibc_flag는 I 슬라이스를 디코딩할 때에는{{그리고 MaxNumIBCMergeCand가 0보다 큰 경우}} sps_ibc_enabled_flag의 값과 같고, P 또는 B 슬라이스를 각각 디코딩할 때에는 0과 같다고 추론된다.
5.4 실시형태 #3
최대 허용된 IBC 후보 개수에 따른 IBC 관련 신택스 요소의 조건부 시그널링.
Coding_unit( x0, y0, cbWidth, cbHeight, treeType ) { 서술자
...
if( CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) {
...
} else if( treeType != DUAL_TREE_CHROMA ) { /* MODE_INTER or MODE_IBC */
if( cu_skip_flag[ x0 ][ y0 ] = = 0 )
general_merge_flag[ x0 ][ y0 ] ae(v)
if( general_merge_flag[ x0 ][ y0 ] ) {
merge_data( x0, y0, cbWidth, cbHeight )
} else if ( CuPredMode[ x0 ][ y0 ] = = MODE_IBC ) {
{{ if( MaxNumIBCAMVPCand > 0) }}
mvd_coding( x0, y0, 0, 0 )
{{ if(MaxNumIBCAMVPCand > 1) }}
mvp_l0_flag[ x0 ][ y0 ] ae(v)
if( sps_amvr_enabled_flag && {{MaxNumIBCAMVPCand > 0 && }}
( MvdL0[ x0 ][ y0 ][ 0 ] != 0 | | MvdL0[ x0 ][ y0 ][ 1 ] != 0 ) ) {
amvr_precision_flag[ x0 ][ y0 ] ae(v)
}
} else {
if( slice_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)
}
...
}
일 예에서, MaxNumIBCAMVPCand는 MaxNumIBCMergeCand 또는 MaxNumMergeCand로 설정될 수 있다.
도 20a는 비디오 처리를 위한 예시적인 방법(2000)을 보여준다. 방법(2000)은, 동작 2002에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비트스트림 표현은 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하는 인트라 블록 복제(intra block copy; IBC) 개선된 움직임 벡터 예측(advanced motion vector prediction; AMVP) 모드에 대한 움직임 벡터차(motion vector prediction; MVD) 관련 신택스 요소를 포함한다. 일부 실시형태들에서, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
도 20b는 비디오 처리를 위한 예시적인 방법(2005)을 보여준다. 방법(2005)은 동작 2007에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환에 대하여, 인트라 블록 복제(IBC) 모드의 사용의 표시가 해당 비디오 영역에 대해서 디스에이블되고, IBC 모드의 사용이 비디오의 시퀀스 레벨에서 이네이블된다는 것을 결정하는 단계를 포함한다.
이러한 방법(2005)은, 동작 2009에서, 결정 결과에 기반하여 상기 변환을 수행하는 단계를 포함한다. 일부 실시형태들에서, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
도 20c는 비디오 처리를 위한 예시적인 방법(2010)을 보여준다. 이러한 방법(2010)은 동작 2012에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비트스트림 표현은, 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하여, 인트라 블록 복제(IBC) 모드 및/또는 하나 이상의 IBC-관련 신택스 요소의 사용에 관련된 표시를 선택적으로 포함한다. 일부 실시형태들에서, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
도 20d는 비디오 처리를 위한 예시적인 방법(2020)을 보여준다. 이러한 방법(2020)은 동작 2022에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는, 제 1 타입의 인트라 블록 복제(IBC) 후보의 최대 개수의 표시는 상기 변환 중에 사용되는 인터 모드에 대한 병합 후보의 최대 개수로부터 독립적으로 상기 비트스트림 표현 내에서 시그널링된다. 일부 실시형태들에서, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
도 20e는 비디오 처리를 위한 예시적인 방법(2030)을 보여준다. 방법(2030)은 동작 2032에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는 상기 인트라 블록 복제(IBC) 움직임 후보의 최대 개수는 상기 IBC 병합 후보의 최대 개수 및 IBC 발전된 움직임 벡터 예측(AMVP) 후보의 최대 개수의 함수이다. 일부 실시형태들에서, IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측된다.
도 20f는 비디오 처리를 위한 예시적인 방법(2040)을 보여준다. 이러한 방법(2040)은 동작 2042에서, 비디오의 비디오 영역 및 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 상기 비디오 영역의 변환 도중에 사용되는, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수는 상기 비디오 영역의 코딩된 모드 정보에 기반한다.
도 20g는 비디오 처리를 위한 예시적인 방법(2050)을 보여준다. 이러한 방법(2050)은 동작 2052에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 디코딩된 인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 병합 인덱스 또는 디코딩된 IBC 병합 인덱스는 상기 인트라 블록 복제(IBC) 움직임 후보의 최대 개수보다 작다.
도 20h는 비디오 처리를 위한 예시적인 방법(2060)을 보여준다. 이러한 방법(2060)은 동작 2062에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계를 포함한다.
방법(2060)은 단계 2064에서, 상기 결정에 기반하여, 상기 변환 도중에 디폴트 예측 블록을 사용하는 단계를 포함한다.
도 20i는 비디오 처리를 위한 예시적인 방법(2070)을 보여준다. 이러한 방법(2070)은 동작 2072에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계를 포함한다.
방법(2070)은 동작 2074에서, 상기 결정에 기반하여, 비디오 영역을 무효 블록 벡터를 가지고 있는 것으로 취급함으로써 상기 변환을 수행하는 단계를 포함한다.
도 20j는 비디오 처리를 위한 예시적인 방법(2080)을 보여준다. 이러한 방법(2080)은 동작 2082에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기 후보 인덱스 또는 IBC 병합 후보 인덱스가 소정 조건을 만족시키지 못한다고 결정하는 단계를 포함한다.
방법(2080)은 동작 2084에서, 상기 결정에 기반하여, 보충적 블록 벡터(BV) 후보 목록을 생성하는 단계를 포함한다.
이러한 방법(2080)은, 동작 2086에서, 보충적 BV 후보 목록을 사용하여 상기 변환을 수행하는 단계를 포함한다.
도 20k는 비디오 처리를 위한 예시적인 방법(2090)을 보여준다. 이러한 방법(2090)은 동작 2092에서, 비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고, 인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 후보의 최대 개수는 2와 같지 않다.
도 21은 비디오 처리 장치(2100)의 블록도이다. 장치(2100)는 본 명세서에서 설명되는 방법들 중 하나 이상을 구현하기 위하여 사용될 수 있다. 장치(2100)는 스마트 폰, 태블릿, 컴퓨터, 사물 인터넷(Internet of Things; IoT) 수신기 등 내에 구현될 수 있다. 장치(2100)는 하나 이상의 프로세서(2102), 하나 이상의 메모리(2104) 및 비디오 처리 하드웨어(2106)를 포함할 수 있다. 프로세서(들)(2102)는 본 명세서에서 설명되는 하나 이상의 방법을 구현하도록 구성될 수 있다. 메모리(메모리들)(2104)는 본 명세서에서 설명되는 방법 및 기법들을 구현하기 위한 데이터 및 코드를 저장하기 위해서 사용될 수 있다. 비디오 처리 하드웨어(2106)는 하드웨어 회로부 내에서, 본 명세서에서 설명되는 일부 기법을 구현하기 위하여 사용될 수 있다. 비디오 처리 하드웨어(2106)는 프로세서(들)(2102) 내에 부분적으로 또는 전체적으로, 전용 하드웨어, 또는 그래픽 프로세서 유닛(GPU) 또는 전문화된 신호 처리 블록으로서 포함될 수 있다.
일부 실시형태들에서, 비디오 코딩 방법은 도 21에 대하여 설명된 바와 같은 하드웨어 플랫폼 상에 구현되는 장치를 사용하여 구현될 수 있다.
개시된 기술의 일부 실시형태는 비디오 처리 툴 또는 모드를 이네이블하기 위한 판정 또는 결정을 하는 것을 포함한다. 일 예에서, 비디오 처리 툴 또는 모드가 이네이블되면, 인코더는 비디오의 블록을 처리할 때 툴 또는 모드를 사용하거나 구현할 것이지만, 결과적으로 얻어지는 비트스트림을 툴 또는 모드의 사용에 기반하여 반드시 수정하지 않을 수도 있다. 즉, 비디오로부터 비디오의 비트스트림 표현으로 변환하는 것은, 앞서의 판정 또는 결정에 기반하여 이네이블되는 경우 비디오 처리 툴 또는 모드를 사용할 것이다. 다른 예에서, 비디오 처리 툴 또는 모드가 이네이블되는 경우, 디코더는 비트스트림을 해당 비트스트림이 비디오 처리 툴 또는 모드에 기반하여 수정되었다는 정보를 가지고 처리할 것이다. 즉, 비디오의 비트스트림 표현으로부터 비디오의 블록으로의 변환이 앞서의 판정 또는 결정에 기반하여 이네이블되었던 비디오 처리 툴 또는 모드를 사용하여 수행될 것이다.
개시된 기술의 일부 실시형태는 비디오 처리 툴 또는 모드를 디스에이블하기 위한 판정 또는 결정을 하는 것을 포함한다. 일 예에서, 비디오 처리 툴 또는 모드가 디스에이블되는 경우, 인코더는 비디오의 블록을 비디오의 비트스트림 표현으로 변환할 때에 툴 또는 모드를 사용되지 않을 것이다. 다른 예에서, 비디오 처리 툴 또는 모드가 디스에이블되는 경우, 디코더는 비트스트림을 비트스트림이 앞서의 판정 또는 결정에 기반하여 이네이블되었던 비디오 처리 툴 또는 모드를 사용하여 수정되지 않았다는 정보를 가지고 처리할 것이다.
도 22는 본 명세서에 개시된 다양한 기법들이 구현될 수 있는 하나의 예시적인 비디오 처리 시스템(2200)을 도시하는 블록도이다. 다양한 구현형태들은 시스템(2200)의 구성요소들 중 일부 또는 전부를 포함할 수 있다. 시스템(2200)은 비디오 콘텐츠를 수신하기 위한 입력부(2202)를 포함할 수 있다. 비디오 콘텐츠는 원시 또는 미압축 포맷으로, 예를 들어 8 또는 10 비트의 다성분 픽셀 값으로 수신될 수 있고, 또는 압축되거나 인코딩된 포맷일 수도 있다. 입력부(2202)는 네트워크 인터페이스, 주변 버스 인터페이스, 또는 저장 인터페이스를 나타낼 수 있다. 네트워크 인터페이스의 예는 이더넷, 수동형 광 네트워크(passive optical network; PON) 등과 같은 유선 인터페이스 및 Wi-Fi 또는 셀룰러 인터페이스와 같은 무선 인터페이스를 포함한다.
시스템(2200)은 본 명세서에서 설명되는 다양한 코딩 또는 인코딩 방법을 구현할 수 있는 코딩 컴포넌트(2204)를 포함할 수 있다. 코딩 컴포넌트(2204)는 입력부(2202)로부터 코딩 컴포넌트(2204)의 출력부 사이에서 비디오의 평균 비트레이트를 감소시켜서, 비디오의 코딩된 표현을 생성할 수 있다. 그러므로, 코딩 기법은 가끔 비디오 압축 또는 비디오 트랜스코딩 기법이라고 불린다. 코딩 컴포넌트(2204)의 출력은 저장되거나, 컴포넌트(2206)로 표현되는 바와 같이 연결된 통신부를 통해서 송신될 수 있다. 입력부(2202)에서 수신된 비디오의 저장되거나 통신된 비트스트림(또는 코딩된) 표현은, 디스플레이 인터페이스(2210)로 전송되는 픽셀 값 또는 표시가능한 비디오를 생성하기 위해서 컴포넌트(2208)에 의해 사용될 수 있다. 비트스트림 표현으로부터 사용자가 시청할 수 있는 비디오를 생성하는 프로세스는 가끔 비디오 압축해제라고 불린다. 더욱이, 어떤 비디오 처리 동작들이 "코딩" 동작 또는 툴이라고 불리는 반면에, 코딩 툴 또는 동작은 인코더 및 대응하는 디코딩 툴에서 사용되고, 또는 코딩의 결과를 반전시키는 동작이 디코더에 의해 수행될 것이라는 것이 이해될 것이다.
주변 버스 인터페이스 또는 디스플레이 인터페이스의 예는 범용적 시리얼 버스(universal serial bus; USB) 또는 고분해능 멀티미디어 인터페이스(high definition multimedia interface; HDMI) 또는 디스플레이포트(Displayport) 등을 포함할 수 있다. 저장 인터페이스의 예는 SATA(serial advanced technology attachment), PCI, IDE 인터페이스 등을 포함한다. 본 명세서에서 설명되는 기법은, 모바일 폰, 랩탑, 스마트 폰 또는 디지털 데이터 처리 및/또는 비디오 디스플레이를 수행할 수 있는 다른 디바이스와 같은 다양한 전자 디바이스에서 구현될 수 있다.
일부 실시형태들에서, 다음의 기술적 해결책들이 구현될 수 있다:
A1. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비트스트림 표현은 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하는 인트라 블록 복제(intra block copy; IBC) 개선된 움직임 벡터 예측(advanced motion vector prediction; AMVP) 모드에 대한 움직임 벡터차(motion vector prediction; MVD) 관련 신택스 요소를 포함하며,
IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측되는, 비디오 처리 방법.
A2. 해결 방법 A1에 있어서,
상기 MVD 관련 신택스 요소는,
상기 IBC AMVP 모드의 코딩된 움직임 벡터 예측기 인덱스, 움직임 벡터 예측기의 코딩된 정밀도, 움직임 벡터차, 및 상기 움직임 벡터차의 코딩된 정밀도
중 적어도 하나를 포함하는, 비디오 처리 방법.
A3. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 K 이하인 것에 기반하여, 상기 비트스트림 표현은 상기 IBC AMVP 모드에 대한 MDV 관련 신택스 요소의 시그널링을 제외사고, 상기 IBC AMVP 모드는 디스에이블되는 것으로 추론되며,
K는 정수인, 비디오 처리 방법.
A4. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 K 이하인 것에 기반하여, 상기 비트스트림 표현은 상기 움직임 벡터차의 시그널링을 제외사고, 상기 IBC AMVP 모드는 디스에이블되는 것으로 추론되며,
K는 정수인, 비디오 처리 방법.
A5. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 K보다 큰 것에 기반하여, 상기 비트스트림 표현은
코딩된 움직임 벡터 예측기 인덱스, 움직임 벡터 예측기의 코딩된 정밀도, 및 상기 IBC AMVP 모드의 움직임 벡터차의 코딩된 정밀도
중 적어도 하나를 포함하고,
K는 정수인, 비디오 처리 방법.
A6. 해결 방법들 A3 내지 A5 중 어느 하나의 해결 방법에 있어서,
K = 0 또는 K = 1인, 비디오 처리 방법.
A7. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 1과 같은 것에 기반하여 상기 비트스트림 표현은 상기 IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스를 제외하는, 비디오 처리 방법.
A8. 해결 방법 A19에 있어서,
상기 IBC AMVP 모드에 대한 움직임 벡터 예측기 인덱스는 제로인 것으로 추론되는, 비디오 처리 방법.
A9. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 제로와 같은 것에 기반하여, 상기 비트스트림 표현은 움직임 벡터 예측기의 정밀도 및/또는 상기 IBC AMVP 모드의 움직임 벡터차의 정밀도를 제외하는, 비디오 처리 방법.
A10. 해결 방법 A1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 제로보다 큰 것에 기반하여, 상기 비트스트림 표현은 움직임 벡터 예측기의 정밀도 및/또는 상기 IBC AMVP 모드의 움직임 벡터차의 정밀도를 제외하는, 비디오 처리 방법.
A11. 해결 방법들 A1 내지 A10 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 상기 IBC 움직임 후보의 최대 개수(maxIBCCandNum으로 표시됨)인, 비디오 처리 방법.
A12. 해결 방법들 A1 내지 A10 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 IBC 병합 후보의 최대 개수(maxIBCMrgNum으로 표시됨)인, 비디오 처리 방법.
A13. 해결 방법들 A1 내지 A10 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 IBC 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum으로 표시됨)인, 비디오 처리 방법.
A14. 해결 방법들 A1 내지 A10 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 상기 비트스트림 표현 내에서 시그널링되는, 비디오 처리 방법.
A15. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환에 대하여, 인트라 블록 복제(IBC) 모드의 사용의 표시가 상기 비디오 영역에 대하여 디스에이블되고, 상기 IBC 모드의 사용은 상기 비디오의 시퀀스 레벨에서 이네이블된다고 결정하는 단계; 및
상기 결정에 기반하여 변환을 수행하는 단계를 포함하고,
상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측되는, 비디오 처리 방법.
A16. 해결 방법 A15에 있어서,
상기 비디오 영역은 상기 비디오 픽쳐의 픽쳐, 슬라이스, 타일, 타일 그룹, 또는 브릭(brick)에 대응하는, 비디오 처리 방법.
A17. 해결 방법 A15 또는 A16에 있어서,
상기 비트스트림 표현은 상기 결정과 연관되는 표시를 포함하는, 비디오 처리 방법.
A18. 해결 방법 A17에 있어서,
표시는 픽쳐, 슬라이스, 타일, 브릭, 또는 적응 파라미터 세트(adaptation parameter set; APS) 내에서 시그널링되는, 비디오 처리 방법.
A19. 해결 방법 A18에 있어서,
상기 표시는 픽쳐 파라미터 세트(picture parameter set; PPS), 슬라이스 헤더, 픽쳐 헤더, 타일 헤더, 타일 그룹 헤더, 또는 브릭 헤더 내에서 시그널링되는, 비디오 처리 방법.
A20. 해결 방법 A15에 있어서,
상기 IBC 모드는, 상기 비디오의 비디오 콘텐츠가 스크린 콘텐츠와 상이한 것에 기반하여 디스에이블되는, 비디오 처리 방법.
A21. 해결 방법 A15에 있어서,
상기 IBC 모드는, 상기 비디오의 비디오 콘텐츠가 카메라-캡쳐 콘텐츠(camera-captured content)인 것에 기반하여 디스에이블되는, 비디오 처리 방법.
A22. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비트스트림 표현은, 상기 비디오 영역의 변환 도중에 사용되는 제 1 타입의 IBC 후보의 최대 개수에 기반하여, 인트라 블록 복제(IBC) 모드 및/또는 하나 이상의 IBC-관련 신택스 요소의 사용에 관련된 표시를 선택적으로 포함하며,
IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측되는, 비디오 처리 방법.
A23. 해결 방법 A22에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는, 인터 코딩된 블록에 대한 병합 후보의 최대 개수와 같게 설정되는, 비디오 처리 방법.
A24. 해결 방법 A22에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 제로와 같은 것에 기반하여, 상기 비트스트림 표현은 IBC 스킵 모드(skip mode)의 시그널링을 제외하고,
상기 IBC 스킵 모드는 디스에이블되는 것으로 추론되는, 비디오 처리 방법.
A25. 해결 방법 A22에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 제로와 같은 것에 기반하여, 상기 비트스트림 표현은 IBC 병합 모드 또는 IBC 개선된 움직임 벡터 예측(advanced motion vector prediction; AMVP) 모드의 시그널링을 제외하고,
상기 IBC 모드는 디스에이블된 것으로 추론되는, 비디오 처리 방법.
A26. 해결 방법 A22에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수가 제로와 같은 것에 기반하여, 상기 비트스트림 표현은 병합 모드의 시그널링을 제외하고,
IBC 병합 모드는 디스에이블되는 것으로 추론되는, 비디오 처리 방법.
A27. 해결 방법들 A22 내지 A26 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는
IBC 움직임 후보(maxIBCCandNum이라고 표시됨)의 최대 개수, IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨), 또는 IBC 진보된 움직임 벡터 예측(AMVP) 후보(maxIBCAMVPNum이라고 표시됨)의 최대 개수인, 비디오 처리 방법.
A28. 해결 방법들 A22 내지 A26 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 상기 비트스트림 표현 내에서 시그널링되는, 비디오 처리 방법.
A29. 해결 방법들 A1 내지 A28 중 어느 하나의 해결 방법에 있어서,
상기 변환은,
상기 비트스트림 표현으로부터 상기 비디오 영역의 픽셀 값을 생성하는 것을 포함하는, 비디오 처리 방법.
A30. 해결 방법들 A1 내지 A28 중 어느 하나의 해결 방법에 있어서,
상기 변환은,
상기 비디오 영역의 픽셀 값으로부터 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
A31. 비디오 처리 장치로서,
해결 방법들 A1 내지 A28 중 하나 이상에 기술된 방법을 수행하도록 구성되는 프로세서를 포함하는, 비디오 처리 장치.
A32. 프로그램 코드를 저장하는 컴퓨터 판독가능 매체로서,
상기 프로그램 코드는 실행될 때, 프로세서가 해결 방법들 A1 내지 A30 중 하나 이상에 기술된 방법을 구현하게 하는, 판독가능 매체.
일부 실시형태들에서, 다음의 기술적 솔루션들이 구현될 수 있다:
B1. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비디오 영역의 변환 도중에 사용되는, 제 1 타입의 인트라 블록 복제(IBC) 후보의 최대 개수의 표시는 상기 변환 중에 사용되는 인터 모드에 대한 병합 후보의 최대 개수로부터 독립적으로 상기 비트스트림 표현 내에서 시그널링되며,
상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측되는, 비디오 처리 방법.
B2. 해결 방법 B1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 상기 비트스트림 표현 내에서 직접적으로 시그널링되는, 비디오 처리 방법.
B3. 해결 방법 B1에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는, 상기 IBC 모드가 상기 비디오 영역의 변환을 위하여 이네이블되는 것에 기인하여, 제로보다 큰, 비디오 처리 방법.
B4. 해결 방법들 B1 내지 B3 중 어느 하나의 해결 방법에 있어서,
상기 방법은,
다른 값을 사용하여 상기 제 1 타입의 IBC 후보의 최대 개수(maxNumIBC라고 표시됨)를 예측성 코딩(predictively coding)하는 단계를 더 포함하는, 비디오 처리 방법.
B5. 해결 방법 B4에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수의 표시는 상기 예측성 코딩 이후의 차이로 설정되는, 비디오 처리 방법.
B6. 해결 방법 B5에 있어서,
상기 차이는 상기 다른 값 및 상기 제 1 타입의 IBC 후보의 최대 개수 사이인, 비디오 처리 방법.
B7. 해결 방법 B6에 있어서,
상기 다른 값은 정규 병합 목록(regular merge list)의 크기(S)이고,
(S-maxNumIBC)는 비트스트림 내에서 시그널링되며,
S는 정수인, 비디오 처리 방법.
B8. 해결 방법 B6에 있어서,
상기 다른 값은 고정된 정수(K)이고,
(K-maxNumIBC)는 상기 비트스트림 내에서 시그널링되는, 비디오 처리 방법.
B9. 해결 방법 B8에 있어서,
K = 5 또는 K = 6인, 비디오 처리 방법.
B10. 해결 방법들 B6 내지 B9 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 (K - 상기 비트스트림 내에서 시그널링되는 최대 개수의 표시)가 되도록 유도되는, 비디오 처리 방법.
B11. 해결 방법 B5에 있어서,
상기 차이는 상기 제 1 타입의 IBC 후보의 최대 개수 및 상기 다른 값 사이인, 비디오 처리 방법.
B12. 해결 방법 B11에 있어서,
상기 다른 값은 고정된 정수(K)이고,
(maxNumIBC-K)는 상기 비트스트림 내에서 시그널링되는, 비디오 처리 방법.
B13. 해결 방법 B12에 있어서,
K = 0 또는 K = 2인, 비디오 처리 방법.
B14. 해결 방법들 B11 내지 B13에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 (상기 비트스트림 내에서 시그널링되는 최대 개수의 표시+ K)가 되도록 유도되는, 비디오 처리 방법.
B15. 해결 방법들 B1 내지 B14 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 상기 IBC 움직임 후보의 최대 개수(maxIBCCandNum으로 표시됨)인, 비디오 처리 방법.
B16. 해결 방법들 B1 내지 B14 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 IBC 병합 후보의 최대 개수(maxIBCMrgNum으로 표시됨)인, 비디오 처리 방법.
B17. 해결 방법들 B1 내지 B14 중 어느 하나의 해결 방법에 있어서,
상기 제 1 타입의 IBC 후보의 최대 개수는 IBC 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum으로 표시됨)인, 비디오 처리 방법.
B18. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역 및 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비디오 영역의 변환 도중에 사용되는, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)는 IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨) 및 IBC 발전된 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)의 함수이며,
상기 IBC 모드가 적용되는 경우, 상기 비디오 영역의 샘플은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 샘플로부터 예측되는, 비디오 처리 방법.
B19. 해결 방법 B18에 있어서,
maxIBCAMVPNum은 2와 같은, 비디오 처리 방법.
B20. 해결 방법 B18 또는 B19에 있어서,
상기 함수는 자신의 인수들 중 더 큰 인수를 반환하는, 비디오 처리 방법.
B21. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역 및 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비디오 영역의 변환 도중에 사용되는, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)는 상기 비디오 영역의 코딩된 모드 정보에 기반하는, 비디오 처리 방법.
B22. 해결 방법 B21에 있어서,
maxIBCCandNum은, IBC 병합 모드로 코딩되고 있는 상기 비디오 영역에 기반하여 IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨)로 설정되는, 비디오 처리 방법.
B23. 해결 방법 B21에 있어서,
maxIBCCandNum은 IBC AMVP 모드로 코딩되고 있는 비디오 영역에 기반하여 IBC 진보된 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)로 설정되는, 비디오 처리 방법.
B24. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
디코딩된 인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 병합 인덱스 또는 디코딩된 IBC 병합 인덱스는 상기 IBC 움직임 후보의 최대 개수(maxIBCCandNum이라고 표시됨)보다 작은, 비디오 처리 방법.
B25. 해결 방법 B24에 있어서,
상기 디코딩된 IBC AMVP 병합 인덱스는 IBC AMVP 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)보다 작은, 비디오 처리 방법.
B26. 해결 방법 B24에 있어서,
상기 디코딩된 IBC 병합 인덱스는 IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨)보다 작은, 비디오 처리 방법.
B27. 해결 방법 B26에 있어서,
maxIBCMrgNum = 2인, 비디오 처리 방법.
B28. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계; 및
상기 결정에 기반하여, 상기 변환 도중에 디폴트 예측 블록을 사용하는 단계를 포함하는, 비디오 처리 방법.
B29. 해결 방법 B28에 있어서,
상기 디폴트 예측 블록의 각각의 샘플은 (1 <<(BitDepth - 1))로 설정되고,
BitDepth는 양의 정수인, 비디오 처리 방법.
B30. 해결 방법 B28에 있어서,
디폴트 블록 벡터가 상기 디폴트 예측 블록에 할당되는, 비디오 처리 방법.
B31. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계; 및
상기 결정에 기반하여, 상기 비디오 영역이 무효 블록 벡터를 가지고 있는 것으로 처리함으로써 상기 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
B32. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 대안적 움직임 벡터 예측기(AMVP) 후보 인덱스 또는 IBC 병합 후보 인덱스가 조건을 만족시키지 못한다고 결정하는 단계;
상기 결정에 기반하여, 보충적(supplemental) 블록 벡터(BV) 후보 목록을 생성하는 단계; 및
상기 보충적 BV 후보 목록을 사용하여 상기 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
B33. 해결 방법 B32에 있어서,
상기 조건은, 상기 IBC AMVP 후보 인덱스 또는 상기 IBC 병합 후보 인덱스가 상기 비디오 영역에 대한 IBC 움직임 후보의 최대 개수보다 작지 않은 것을 포함하는, 비디오 처리 방법.
B34. 해결 방법 B32 또는 B33에 있어서,
상기 보충적 BV 후보 벡터 목록은,
하나 이상의 이력-기반 움직임 벡터 예측(HMVP) 후보를 추가하는 단계;
하나 이상의 가상 BV 후보를 다른 BV 후보로부터 생성하는 단계; 및
하나 이상의 디폴트 후보를 추가하는 단계를 사용하여 생성되는, 비디오 처리 방법.
B35. 해결 방법 B34에 있어서,
상기 단계들은 차례대로 수행되는, 비디오 처리 방법.
B36. 해결 방법 B34에 있어서,
상기 단계는 인터리빙된 방식으로 수행되는, 비디오 처리 방법.
B37. 비디오 처리를 위한 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
인트라 블록 복제(IBC) 진보된 움직임 벡터 예측(AMVP) 후보의 최대 개수(maxIBCAMVPNum이라고 표시됨)가 2와 같지 않는, 비디오 처리 방법.
B38. 해결 방법 B37에 있어서,
상기 비트스트림 표현은, 움직임 벡터 예측기 인덱스를 표시하는 플래그를 제외하고, 1보다 큰 값을 가지는 인덱스를 포함하는, 비디오 처리 방법.
B39. 해결 방법 B38에 있어서,
상기 인덱스는 유너리, 절단된 유너리(truncated unary), 고정 길이, 또는 지수적-골롬(exponential-Golomb) 표현을 사용하여 이진 코딩되는, 비디오 처리 방법.
B40. 해결 방법 B38에 있어서,
상기 인덱스의 이진 빈 스트링의 빈들은 콘텍스트 코딩되거나 바이패스 코딩되는, 비디오 처리 방법.
B41. 해결 방법 B37에 있어서,
maxIBCAMVPNum은 IBC 병합 후보의 최대 개수(maxIBCMrgNum이라고 표시됨)보다 큰, 비디오 처리 방법.
B42. 비디오 처리 방법으로서,
비디오 영역과 상기 비디오 영역의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 움직임 후보의 최대 개수가 제로라고 결정하는 단계, 및
상기 결정에 기반하여, 상기 변환 도중에 IBC 블록 벡터 후보 목록을 생성함으로써 상기 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
B43. 해결 방법 B42에 있어서,
상기 변환은,
IBC 발전된 움직임 벡터 예측(AMVP) 모드가 상기 비디오 영역의 변환을 위하여 이네이블되는 것에 기반하여 병합 목록을 생성하는 것을 더 포함하는, 비디오 처리 방법.
B44. 해결 방법 B42에 있어서,
상기 변환은,
IBC 병합 모드가 상기 비디오 영역의 변환을 위하여 디스에이블되는 것에 기반하여 IBC AMVP 후보의 최대 개수에 달하는 길이를 가지는 병합 목록을 생성하는 것을 더 포함하는, 비디오 처리 방법.
B45. 해결 방법들 B1 내지 B44 중 어느 하나의 해결 방법에 있어서,
상기 변환은,
상기 비트스트림 표현으로부터 상기 비디오 영역의 픽셀 값을 생성하는 것을 포함하는, 비디오 처리 방법.
B46. 해결 방법들 B1 내지 B44 중 어느 하나의 해결 방법에 있어서,
상기 변환은,
상기 비디오 영역의 픽셀 값으로부터 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
B47. 비디오 처리 장치로서,
해결 방법들 B1 내지 B46 중 임의의 하나 이상의 해결 방법에 기술된 방법을 수행하도록 구성되는 프로세서를 포함하는, 비디오 처리 장치.
B48. 코드가 저장된 컴퓨터 판독가능 매체로서,
상기 코드는, 프로세서에 의해 실행될 때, 상기 프로세서가 해결 방법들 B1 내지 B46 중 임의의 하나 이상의 해결 방법에 기술된 방법을 구현하게 하는, 컴퓨터 판독가능 매체.
일부 실시형태들에서, 다음의 기술적 해결책들이 구현될 수 있다:
C1. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오 영역의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제 모드를 사용하는 것이 상기 비디오 영역에 대해서 디스에이블되고 상기 인트라 블록 복제 모드를 사용하는 것이 상기 비디오의 다른 비디오 영역에 대하여 이네이블된다고 결정하는 단계; 및
상기 결정에 기반하여 상기 변환을 수행하는 단계를 포함하고,
상기 인트라 블록 복제 모드에서, 상기 비디오 영역의 픽셀은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는, 비디오 처리 방법.
C2. 해결 방법 C1에 있어서,
상기 비디오 영역은, 상기 비디오 픽쳐의 비디오 픽쳐 또는 슬라이스 또는 타일 또는 타일 그룹 또는 브릭(brick)에 대응하는, 비디오 처리 방법.
C3. 해결 방법 C1 또는 C2에 있어서,
상기 비트스트림 표현은 상기 결정에 관련된 표시를 포함하는, 비디오 처리 방법.
C4. 해결 방법 C3에 있어서,
상기 표시는 픽쳐 또는 슬라이스 또는 타일 또는 타일 그룹 또는 브릭 레벨에 포함되는, 비디오 처리 방법.
C5. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비트스트림 표현은, 상기 비디오 영역의 변환 도중에 사용되고 maxIBCCandNum이라고 표시되는 IBC 움직임 후보의 최대 개수가, 상기 변환 도중에 사용되고 MaxNumMergeCand라고 표시되는 병합 후보의 최대 개수와 같은 경우에, 상기 결정과 관련되는 표시를 선택적으로 포함하는, 비디오 처리 방법.
C6. 해결 방법 C5에 있어서,
maxIBCCandNum은 제로와 같고,
maxIBCCCardNum이 제로와 같은 것에 기인하여, 상기 비트스트림 표현은 특정 IBC 정보의 시그널링을 제외하는, 비디오 처리 방법.
C7. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
상기 비트스트림 표현은, 조건을 만족하는, 상기 비디오 영역의 변환 도중에 사용되고 maxIBCCandNum으로 표시되는 인트라 블록 복제 움직임 후보의 최대 개수의 값에 의존하여 인트라 블록 복제 대안적 움직임 벡터 예측기에 대한 움직임 벡터차 관련된 신택스 요소를 포함하고,
상기 인트라 블록 복제 모드에서, 상기 비디오 영역의 픽셀은 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는, 비디오 처리 방법.
C8. 해결 방법 C7에 있어서,
상기 조건은, maxIBCCandNum이 MaxNumMergeCand로 표시되고 상기 변환 도중에 사용되는 병합 후보의 최대 개수와 같은 것을 포함하는, 비디오 처리 방법.
C9. 해결 방법 C8에 있어서,
maxIBCCandNum은 0과 같고,
maxIBCCandNum이 0과 같은 것에 기인하여, 상기 인트라 블록 복제 대안적 움직임 벡터 예측기에 대한 움직임 벡터 예측기 인덱스의 시그널링이 상기 비트스트림 표현으로부터 생략되는, 비디오 처리 방법.
C10. 해결 방법 C8에 있어서,
maxIBCCandNum은 0과 같고,
maxIBCCandNum이 0과 같은 것에 기인하여, 상기 인트라 블록 복제 대안적 움직임 벡터 예측기에 대한 움직임 벡터차의 시그널링이 상기 비트스트림 표현으로부터 생략되는, 비디오 처리 방법.
C11. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
maxIBCCandNum으로 표시되고 상기 비디오 영역의 변환 도중에 사용되는 상기 인트라 블록 복제 움직임 후보의 최대 개수는, MaxNumMergeCand라고 표시되고 상기 변환 도중에 사용되는 병합 후보의 최대 개수로부터 독립적으로 상기 비트스트림 표현 내에서 시그널링되며,
인트라 블록 복제는, 상기 비디오 영역의 픽셀이 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는 모드에 대응하는, 비디오 처리 방법.
C12. 해결 방법 C11에 있어서,
MaxIBCCandNum은 상기 인트라 블록 복제가 상기 비디오 영역의 변환에 대하여 이네이블되는 것에 기인하여 제로보다 큰, 비디오 처리 방법.
C13. 해결 방법 C11 또는 C12에 있어서,
maxIBCCandNum은 다른 값을 사용하는 예측성 코딩에 의하여 상기 비트스트림 표현 내에서 시그널링되는, 비디오 처리 방법.
C14. 해결 방법 C13에 있어서,
다른 값은 MaxNumMergeCand인, 비디오 처리 방법.
C15. 해결 방법 C13에 있어서,
다른 값은 상수 K인, 비디오 처리 방법.
C16. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
maxIBCCandNum으로 표시되고 상기 비디오 영역의 변환 도중에 사용되는 인트라 블록 복제(IBC) 움직임 후보의 최대 개수는 상기 비디오 영역의 코딩된 모드 정보에 의존하며,
IBC는, 상기 비디오 영역의 픽셀이 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는 모드에 대응하는, 비디오 처리 방법.
C17. 해결 방법 C16에 있어서,
블록이 IBC 병합 모드로 통합되는 경우, maxIBCCandNum은 maxIBCMrgNum으로 표시되는 IBC 병합 후보의 최대 개수로 설정되는, 비디오 처리 방법.
C18. 해결 방법 C16에 있어서,
블록이 IBC 대안적 움직임 벡터 예측 후보(AMVP) 모드로 코딩되는 경우, maxIBCCandNum은 maxIBCAMVPNum으로 표시되는 IBC AMVP 번호의 최대 번호로 설정되는, 비디오 처리 방법.
C19. 해결 방법 C17에 있어서,
maxIBCMrgNum은 슬라이스 헤더 내에서 시그널링되는, 비디오 처리 방법.
C20. 해결 방법 C17에 있어서,
maxIBCMrgNum은 허용된 비-IBC 병진적 병합 후보의 최대 개수와 같도록 설정되는, 비디오 처리 방법.
C21. 해결 방법 C18에 있어서,
maxIBCAMVPNum은 2로 설정되는, 비디오 처리 방법.
C22. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
maxIBCCandNum으로 표시되고 비디오 영역의 변환 도중에 사용되는 인트라 블록 복제(IBC) 움직임 후보의 최대 개수는, maxIBCMrgNum으로 표시되는 IBC 병합 후보의 최대 개수, 및 maxIBCAMVPNum으로 표시되는 IBC 대안적 움직임 벡터 예측 후보 개수의 최대 개수와 제 1 함수이며,
IBC는, 상기 비디오 영역의 픽셀이 상기 비디오 영역에 대응하는 비디오 픽쳐 비디오 픽쳐 내의 다른 픽셀로부터 예측되는 모드에 대응하는, 비디오 처리 방법.
C23. 해결 방법 C22에 있어서,
maxIBCAMVPNum은 2와 같은, 비디오 처리 방법.
C24. 해결 방법 C22 또는 C23에 있어서,
상기 변환 도중에, 디코딩된 IBC 대안적 움직임 벡터 예측기 인덱스는 maxIBCAMVPNum보다 작은, 비디오 처리 방법.
C25. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제 대안적 움직임 벡터 예측기 인덱스 또는 인트라 블록 복제 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계; 및 상기 결정에 기반하여 상기 변환 도중에 디폴트 예측 블록을 사용하는 단계를 포함하는, 비디오 처리 방법.
C26. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제 대안적 움직임 벡터 예측기 인덱스 또는 인트라 블록 복제 병합 후보 인덱스가 블록 벡터 후보 목록 내에서 블록 벡터 후보를 식별하지 못한다고 결정하는 단계; 및 상기 결정에 기반하여, 상기 비디오 영역이 무효 블록 벡터를 가지고 있는 것으로 처리함으로써 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
C27. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제 대안적 움직임 벡터 예측기 인덱스 또는 인트라 블록 복제 병합 후보 인덱스가 조건을 만족시키지 못한다고 결정하는 단계;
상기 결정에 기반하여, 보충적 블록 벡터(BV) 후보 목록을 생성하는 단계; 및
상기 보충적 블록 벡터 후보 목록을 사용하여 상기 변환을 수행하는 단계를 포함하는, 비디오 처리 방법.
C28. 해결 방법 C27에 있어서,
상기 조건은, 인트라 블록 복제 대안적 움직임 벡터 예측기 인덱스 또는 인트라 블록 복제 병합 후보 인덱스가 상기 비디오 영역에 대한 인트라 블록 복제 후보의 최대 개수보다 작은 것을 포함하는, 비디오 처리 방법.
C29. 해결 방법 C27 또는 C28에 있어서,
상기 보충적 BV 후보 벡터 목록은,
이력 기반 움직임 벡터 예측기 후보를 생성하는 단계,
다른 BV 후보로부터 가상 BV 후보를 생성하는 단계; 및
디폴트 후보를 추가하는 단계를 사용하여 생성되는, 비디오 처리 방법.
C30. 해결 방법 C29에 있어서,
상기 단계들은 차례대로 수행되는, 비디오 처리 방법.
C31. 해결 방법 C29에 있어서,
상기 단계는 인터리빙된 방식으로 수행되는, 비디오 처리 방법.
C32. 비디오 처리 방법으로서,
비디오의 비디오 영역과 상기 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함하고,
maxIBCAMVPNum으로 표시되는 IBC 대안적 움직임 벡터 예측 후보 번호의 최대 번호가 2와 같지 않으며,
IBC는 상기 비디오 영역의 픽셀이 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는 모드에 대응하는, 비디오 처리 방법.
C33. 해결 방법 C32에 있어서,
상기 비트스트림 표현은, 움직임 벡터 예측기 인덱스를 표시하는 제 1 플래그를 제외하고, 1보다 큰 값을 가지는 인덱스를 포함하는, 비디오 처리 방법.
C34. 해결 방법 C32 또는 C33에 있어서,
상기 인덱스는 유너리/절단된 유너리/고정 길이/지수적-골롬/다른 이진화 표현으로의 이진화를 사용하여 코딩되는, 비디오 처리 방법.
C35. 비디오 처리 방법으로서,
비디오 영역과 상기 비디오 영역의 비트스트림 표현 사이의 변환 도중에, 인트라 블록 복제(IBC) 후보의 최대 개수가 제로라고 결정하는 단계, 및
상기 결정에 기반하여, 상기 변환 도중에 IBC 블록 벡터 후보 목록을 생성함으로써 상기 변환을 수행하는 단계를 포함하고,
IBC는, 상기 비디오 영역의 픽셀이 상기 비디오 영역에 대응하는 비디오 픽쳐 내의 다른 픽셀로부터 예측되는 모드에 대응하는, 비디오 처리 방법.
C36. 해결 방법 C35에 있어서,
상기 변환은, IBC 대안적 움직임 벡터 예측기 모드가 상기 비디오 영역의 변환을 위하여 이네이블된다고 가정함으로써 병합 목록을 생성하는 것을 더 포함하는, 비디오 처리 방법.
C37. 해결 방법 C34에 있어서,
상기 변환은, 상기 IBC 병합 모드가 상기 비디오 영역의 변환을 위하여 디스에이블되는 경우, IBC 진보된 움직임 벡터 예측기 후보의 최대 개수에 달하는 길이를 가지는 병합 목록을 생성하는 것을 더 포함하는, 비디오 처리 방법.
C38. 해결 방법 C1 내지 C37 중 임의의 해결 방법에 진술된 방법으로서,
상기 변환은 상기 비트스트림 표현으로부터 상기 비디오 영역의 픽셀 값을 생성하는 것을 포함하는, 비디오 처리 방법.
C39. 해결 방법 C1 내지 C37 중 임의의 해결 방법에 진술된 방법으로서,
상기 변환은,
상기 비디오 영역의 픽셀 값으로부터 비트스트림 표현을 생성하는 것을 포함하는, 비디오 처리 방법.
C40. 비디오 처리 장치로서,
해결 방법들 C1 내지 C39 중 임의의 하나 이상의 해결 방법에 기술된 방법을 수행하도록 구성되는 프로세서를 포함하는, 비디오 처리 장치.
C41. 코드가 저장된 컴퓨터 판독가능 매체로서,
상기 코드는, 프로세서에 의해 실행될 때, 상기 프로세서가 해결 방법들 C1 내지 C39 중 임의의 하나 이상에 기술된 방법을 구현하게 하는, 컴퓨터 판독가능 매체.
본 명세서에서 설명되는, 개시된 솔루션, 예, 실시형태, 모듈 및 기능적 동작 및 그 이외의 솔루션, 예, 실시형태, 모듈 및 기능적 동작은, 디지털 전자 회로로, 또는 본 명세서에서 개시되는 구조체 및 그들의 구조적 균등물을 포함하는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나의 이상의 조합으로 구현될 수 있다. 개시된 실시형태 및 그 외의 실시형태들은, 하나 이상의 컴퓨터 프로그램 제품으로서, 예를 들어 데이터 처리 장치에 의해 실행되거나 그 동작을 제어하기 위한, 컴퓨터-판독가능 매체 상에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터-판독가능 매체는 머신-판독가능 저장 디바이스, 머신-판독가능 저장 기재, 메모리 디바이스, 머신-판독가능 전파된 신호에 영향을 주는 물질의 조합, 또는 이들 중 하나 이상의 조합일 수 있다. 용어 "데이터 처리 장치"는, 예를 들어 프로그래밍가능한 프로세서, 컴퓨터, 또는 다수의 프로세서 또는 컴퓨터를 포함하는, 데이터를 처리하기 위한 모든 장치, 디바이스, 및 머신을 망라한다. 이러한 장치는 하드웨어에 추가하여, 관심 대상인 컴퓨터 프로그램을 위한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다. 전파된 신호는 인위적으로 생성된 신호, 예를 들어, 적절한 수신기 장치로 송신되기 위한 정보를 인코딩하기 위하여 생성되는, 머신에 의해 생성된 전기적, 광학적, 또는 전자기적 신호이다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드라고도 알려져 있음)은 컴파일되거나 해석된 언어를 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 이것은 독립형 프로그램과 같은 또는 컴퓨팅 환경에서 사용되기에 적합한 모듈, 성분, 서브루틴, 또는 다른 유닛과 같은 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템 내의 파일에 대응하는 것은 아니다. 프로그램은 다른 프로그램 또는 데이터를 보유하는 파일(예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트) 내에, 문제가 되는 프로그램 전용의 단일 파일 내에, 또는 여러 개의 조율된 파일들)예를 들어, 하나 이상의 모듈, 서브-프로그램, 또는 코드의 일부를 저장하는 파일) 내에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서 또는 하나의 사이트에 위치되거나 여러 사이트들에 걸쳐서 분산되고 통신 네트워크에 의하여 상호접속되는 여러 컴퓨터들 상에서 실행되도록 구현될 수 있다.
본 명세서에서 설명된 프로세스 및 로직 흐름은 입력 데이터에서 동작하고 출력을 생성함으로써 기능을 수행하기 위한 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍가능한 프로세서에 의해서 수행될 수 있다. 또한 프로세스 및 로직 흐름은 특수 목적 로직 회로부, 예를 들어 FPGA(field programmable gate array), 또는 ASIC(application-specific integrated circuit)에 의하여 수행될 수 있으며, 장치는 또한 이러한 것으로서 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서는, 일 예로서, 일반 및 특수 목적 마이크로 프로세서(들), 및 임의 종류의 디지털 컴퓨터의 하나 이상의 프로세서(들)을 포함한다. 일반적으로, 프로세서는 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 이들 모두로부터 명령 및 데이터를 수신할 것이다. 컴퓨터의 본질적인 요소는 명령을 수행하기 위한 프로세서 및 명령 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어 자기적, 자기-광학적 디스크, 또는 광학적 디스크를 더욱 포함하거나, 이것으로부터 데이터를 수신하거나 이것으로 데이터를 전송하거나, 또는 이들 모두를 하기 위하여 이것에 동작가능하도록 커플링될 것이다. 그러나, 컴퓨터는 이러한 디바이스를 가져야 하는 것은 아니다. 컴퓨터 프로그램 명령 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체는, 예를 들자면 반도체 메모리 디바이스, 예를 들어 EPROM, EEPROM, 및 플래시 메모리 디바이스; 자기적 디스크, 예를 들어 내부 하드 디스크 또는 착탈식 디스크; 자기-광학적 디스크; 및 CD-ROM 및 DVD 디스크를 포함하는 비-휘발성 메모리, 미디어 및 메모리 디바이스의 모든 형태를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로부에 의하여 보충되거나 그 내부에 통합될 수 있다.
본 특허 명세서가 많은 특징을 포함하고 있지만, 이들은 임의의 기술 요지 또는 청구될 내용의 범위를 한정하는 것으로 해석되어서는 안 되고, 오히려 특정 기법의 특정 실시형태들에 특유할 수 있는 특징들의 설명으로서 해석되어야 한다. 본 특허 명세서에서 별개의 실시형태들의 콘텍스트에서 설명되는 일부 특징들은, 단일 실시형태 내에 조합되어 구현될 수도 있다. 반대로, 단일 실시형태의 콘텍스트에서 설명되는 다양한 특징들은 또한 따로따로 다수의 실시형태들에서 또는 임의의 적합한 서브컴비네이션에서 구현될 수 있다. 더구나, 비록 특징들이 특정한 조합들로 작용하는 것으로 위에서 설명될 수도 있고 그와 같이 처음에 청구된 경우에도, 청구된 조합들로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 서브컴비네이션 또는 서브컴비네이션의 변형예를 위한 것일 수도 있다.
이와 유사하게, 동작들이 도면들에서 특정한 순서로 묘사되는 반면에, 원하는 결과들을 획득하기 위하여 이러한 동작들이 도시된 특정한 순서로 또는 순차적인 순서로 수행되어야 하거나, 또는 도시된 모든 동작들이 수행되어야 한다고 요구하는 것으로 이해되어서는 안 된다. 더욱이, 본 특허 명세서에서 설명되는 실시형태들 내의 다양한 시스템 성분들을 분리하는 것은, 모든 실시형태에서 이러한 분리를 요구하는 것으로 이해되어서는 안 된다.
몇 가지의 구현형태와 예들만이 설명되고, 다른 구현형태, 개선형태, 및 변형예들이 본 특허 명세서에서 설명되고 예시된 것에 기반하여 이루어질 수 있다.

Claims (32)

  1. 비디오 처리 방법에 있어서,
    비디오의 비디오 영역과 상기 비디오의 비트스트림 간의 변환을 수행하는 단계를 포함하되,
    병합 모드 (merge mode)의 적용 여부를 결정하고,
    인트라 블록 복제(intra block copy, IBC) 움직임 벡터 예측 모드의 적용 여부를 결정하되,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비트스트림에 상기 IBC 움직임 벡터 예측 모드에 대한 적어도 하나의 신택스 요소를 포함할지 여부는 상기 비디오 영역의 상기 변환 동안 사용되는 IBC 후보의 최대 수에 기초하고;
    상기 적어도 하나의 신택스 요소는 리스트 0의 움직임 벡터 예측기 인덱스를 포함하고,
    리스트 0은 참조 픽처 리스트 인덱스가 0인 상기 비디오 영역의 참조 픽처 리스트를 의미하고,
    상기 IBC 움직임 벡터 예측 모드가 적용되는 경우, 상기 비디오 영역의 샘플들은 상기 비디오 영역을 포함하는 비디오 픽처의 다른 샘플들로부터 예측되고,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비디오 영역의 벡터는 움직임 벡터 예측기 및 움직임 벡터 차이에 기반하여 유도되고,
    상기 움직임 벡터 예측기는 상기 리스트 0의 움직임 벡터 예측기 인덱스에 기반하여 결정되고,
    상기 IBC 후보의 최대 수가 0일 경우, 상기 IBC 움직임 벡터 예측 모드는 비활성화(disable)되고,
    상기 IBC 움직임 벡터 예측 모드가 상기 비디오 영역을 포함하는 슬라이스에 대해 활성화(enable)되는 경우, 상기 IBC 후보의 최대 수는 0 보다 큰, 비디오 처리 방법.
  2. 제1 항에 있어서,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 움직임 벡터 예측기의 정밀도, 움직임 벡터 차이, 상기 IBC 움직임 벡터 예측 모드의 움직임 벡터 차이의 정밀도가 조건적으로 상기 비트스트림내에 포함되는, 비디오 처리 방법.
  3. 제1 항에 있어서,
    K 보다 큰 상기 IBC 후보의 최대 수에 기반하여, 상기 비트스트림은 상기 적어도 하나의 신택스 요소를 포함하고,
    K 보다 작거나 같은 상기 IBC 후보의 최대 수에 기반하여, 상기 비트스트림은 상기 적어도 하나의 신택스 요소를 제외하되,
    K는 정수인, 비디오 처리 방법.
  4. 제3 항에 있어서,
    상기 적어도 하나의 신택스 요소에 포함될 상기 리스트 0의 움직임 벡터 예측기 인덱스가 제외되는 경우, 상기 리스트 0의 움직임 벡터 예측기 인덱스는 0으로 추론되는, 비디오 처리 방법.
  5. 제3 항에 있어서,
    K는 1인, 비디오 처리 방법.
  6. 제1 항에 있어서,
    상기 IBC 후보의 최대 수는 상기 비트스트림내에서 지시되는, 비디오 처리 방법.
  7. 제1 항에 있어서,
    상기 IBC 후보의 최대 수는 (L - 상기 비트스트림에서 시그널링되는 표시)로 유도되고, L은 기 정의된 값인, 비디오 처리 방법.
  8. 제9 항에 있어서,
    L은 6인, 비디오 처리 방법.
  9. 제1 항에 있어서,
    상기 IBC 후보의 최대 수는 블록의 정규 병합 후보의 최대 수와 분리되는 (decoupled), 비디오 처리 방법.
  10. 제1 항에 있어서,
    상기 IBC 후보의 최대 수는 maxIBCMrgNum로 표시되는 IBC 병합 후보의 최대 수인, 비디오 처리 방법.
  11. 제1 항에 있어서,
    상기 변환은 상기 비트스트림으로부터 상기 비디오 영역을 디코딩하는 것을 포함하는, 비디오 처리 방법.
  12. 제1 항에 있어서,
    상기 변환은 상기 비디오 영역을 상기 비트스트림으로 인코딩하는 것을 포함하는, 비디오 처리 방법.
  13. 프로세서와 명령을 포함하는 비 일시적 메모리를 포함하는 비디오 데이터 처리 장치에 있어서, 상기 명령은 상기 프로세서에 의해 실행 시, 상기 프로세서가,
    비디오의 비디오 영역과 상기 비디오의 비트스트림 간의 변환을 수행하게 하되,
    병합 모드 (merge mode)의 적용 여부를 결정하고,
    인트라 블록 복제(intra block copy, IBC) 움직임 벡터 예측 모드의 적용 여부를 결정하되,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비트스트림에 상기 IBC 움직임 벡터 예측 모드에 대한 적어도 하나의 신택스 요소를 포함할지 여부는 상기 비디오 영역의 상기 변환 동안 사용되는 IBC 후보의 최대 수에 기초하고;
    상기 적어도 하나의 신택스 요소는 리스트 0의 움직임 벡터 예측기 인덱스를 포함하고,
    리스트 0은 참조 픽처 리스트 인덱스가 0인 상기 비디오 영역의 참조 픽처 리스트를 의미하고,
    상기 IBC 움직임 벡터 예측 모드가 적용되는 경우, 상기 비디오 영역의 샘플들은 상기 비디오 영역을 포함하는 비디오 픽처의 다른 샘플들로부터 예측되고,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비디오 영역의 벡터는 움직임 벡터 예측기 및 움직임 벡터 차이에 기반하여 유도되고,
    상기 움직임 벡터 예측기는 상기 리스트 0의 움직임 벡터 예측기 인덱스에 기반하여 결정되고,
    상기 IBC 후보의 최대 수가 0일 경우, 상기 IBC 움직임 벡터 예측 모드는 비활성화(disable)되고,
    상기 IBC 움직임 벡터 예측 모드가 상기 비디오 영역을 포함하는 슬라이스에 대해 활성화(enable)되는 경우, 상기 IBC 후보의 최대 수는 0 보다 큰, 비디오 데이터 처리 장치.
  14. 명령이 저장된 비 일시적 컴퓨터 판독가능한 저장 매체에 있어서, 상기 명령은 프로세서가,
    비디오의 비디오 영역과 상기 비디오의 비트스트림 간의 변환을 수행하게 하되,
    병합 모드 (merge mode)의 적용 여부를 결정하고,
    인트라 블록 복제(intra block copy, IBC) 움직임 벡터 예측 모드의 적용 여부를 결정하되,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비트스트림에 상기 IBC 움직임 벡터 예측 모드에 대한 적어도 하나의 신택스 요소를 포함할지 여부는 상기 비디오 영역의 상기 변환 동안 사용되는 IBC 후보의 최대 수에 기초하고;
    상기 적어도 하나의 신택스 요소는 리스트 0의 움직임 벡터 예측기 인덱스를 포함하고,
    리스트 0은 참조 픽처 리스트 인덱스가 0인 상기 비디오 영역의 참조 픽처 리스트를 의미하고,
    상기 IBC 움직임 벡터 예측 모드가 적용되는 경우, 상기 비디오 영역의 샘플들은 상기 비디오 영역을 포함하는 비디오 픽처의 다른 샘플들로부터 예측되고,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비디오 영역의 벡터는 움직임 벡터 예측기 및 움직임 벡터 차이에 기반하여 유도되고,
    상기 움직임 벡터 예측기는 상기 리스트 0의 움직임 벡터 예측기 인덱스에 기반하여 결정되고,
    상기 IBC 후보의 최대 수가 0일 경우, 상기 IBC 움직임 벡터 예측 모드는 비활성화(disable)되고,
    상기 IBC 움직임 벡터 예측 모드가 상기 비디오 영역을 포함하는 슬라이스에 대해 활성화(enable)되는 경우, 상기 IBC 후보의 최대 수는 0 보다 큰, 비 일시적 컴퓨터 판독가능한 저장 매체.
  15. 비디오 처리 장치에 의해 수행되는 방법에 의해 생성된 비디오의 비트스트림을 저장하는 비 일시적 컴퓨터 판독가능한 기록 매체에 있어서, 상기 방법은,
    상기 비디오의 비디오 영역에 기반하여 상기 비트스트림을 생성하는 단계를 포함하되,
    병합 모드 (merge mode)의 적용 여부를 결정하고,
    인트라 블록 복제(intra block copy, IBC) 움직임 벡터 예측 모드의 적용 여부를 결정하되,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비트스트림에 상기 IBC 움직임 벡터 예측 모드에 대한 적어도 하나의 신택스 요소를 포함할지 여부는 상기 비디오 영역의 상기 변환 동안 사용되는 IBC 후보의 최대 수에 기초하고;
    상기 적어도 하나의 신택스 요소는 리스트 0의 움직임 벡터 예측기 인덱스를 포함하고,
    리스트 0은 참조 픽처 리스트 인덱스가 0인 상기 비디오 영역의 참조 픽처 리스트를 의미하고,
    상기 IBC 움직임 벡터 예측 모드가 적용되는 경우, 상기 비디오 영역의 샘플들은 상기 비디오 영역을 포함하는 비디오 픽처의 다른 샘플들로부터 예측되고,
    상기 IBC 움직임 벡터 예측 모드는 적용되고 상기 병합 모드는 적용되지 않을 경우, 상기 비디오 영역의 벡터는 움직임 벡터 예측기 및 움직임 벡터 차이에 기반하여 유도되고,
    상기 움직임 벡터 예측기는 상기 리스트 0의 움직임 벡터 예측기 인덱스에 기반하여 결정되고,
    상기 IBC 후보의 최대 수가 0일 경우, 상기 IBC 움직임 벡터 예측 모드는 비활성화(disable)되고,
    상기 IBC 움직임 벡터 예측 모드가 상기 비디오 영역을 포함하는 슬라이스에 대해 활성화(enable)되는 경우, 상기 IBC 후보의 최대 수는 0 보다 큰, 비 일시적 컴퓨터 판독가능한 기록 매체.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
KR1020217037075A 2019-05-25 2020-05-25 인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩 KR102649200B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN2019088454 2019-05-25
CNPCT/CN2019/088454 2019-05-25
PCT/CN2020/092032 WO2020238837A1 (en) 2019-05-25 2020-05-25 Coding of block vectors for intra block copy-coded blocks

Publications (2)

Publication Number Publication Date
KR20220012239A KR20220012239A (ko) 2022-02-03
KR102649200B1 true KR102649200B1 (ko) 2024-03-18

Family

ID=73551880

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217037075A KR102649200B1 (ko) 2019-05-25 2020-05-25 인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩

Country Status (6)

Country Link
US (2) US11616973B2 (ko)
EP (1) EP3954117A4 (ko)
JP (2) JP7332721B2 (ko)
KR (1) KR102649200B1 (ko)
CN (2) CN113950840A (ko)
WO (2) WO2020238837A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20240006015A (ko) * 2019-06-14 2024-01-12 엘지전자 주식회사 움직임 벡터를 이용한 영상 코딩 방법 및 장치
KR20210158401A (ko) * 2019-06-19 2021-12-30 엘지전자 주식회사 결정된 예측 모드를 적용하여 예측 샘플들을 생성하는 영상 디코딩 방법 및 그 장치
US11553197B2 (en) * 2019-08-05 2023-01-10 Tencent America LLC Method and apparatus for intra picture block compensation
US11778217B2 (en) * 2021-02-22 2023-10-03 Tencent America LLC High level syntax control for screen content coding
US11917165B2 (en) * 2021-08-16 2024-02-27 Tencent America LLC MMVD signaling improvement
WO2023098829A1 (en) * 2021-12-01 2023-06-08 Beijing Bytedance Network Technology Co., Ltd. Method, apparatus, and medium for video processing
WO2023177695A1 (en) * 2022-03-14 2023-09-21 Beijing Dajia Internet Information Technology Co., Ltd. Inter prediction in video coding
WO2023193721A1 (en) * 2022-04-05 2023-10-12 Beijing Bytedance Network Technology Co., Ltd. Method, apparatus, and medium for video processing
WO2023193691A1 (en) * 2022-04-05 2023-10-12 Beijing Bytedance Network Technology Co., Ltd. Method, apparatus, and medium for video processing
WO2023198063A1 (en) * 2022-04-11 2023-10-19 Beijing Bytedance Network Technology Co., Ltd. Method, apparatus, and medium for video processing
WO2023236914A1 (en) * 2022-06-06 2023-12-14 Mediatek Inc. Multiple hypothesis prediction coding
WO2023237017A1 (en) * 2022-06-07 2023-12-14 Beijing Bytedance Network Technology Co., Ltd. Method, apparatus, and medium for video processing
WO2024044404A1 (en) * 2022-08-26 2024-02-29 Beijing Dajia Internet Information Technology Co., Ltd. Methods and devices using intra block copy for video coding

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170118484A1 (en) * 2014-06-12 2017-04-27 Canon Kabushiki Kaisha Image encoding apparatus, image encoding method and program, image decoding apparatus, and image decoding method and program
US20180131957A1 (en) * 2012-04-12 2018-05-10 JVC Kenwood Corporation Moving picture decoding device, moving picture decoding method, and moving picture decoding program

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105847830B (zh) * 2010-11-23 2019-07-12 Lg电子株式会社 由编码装置和解码装置执行的间预测方法
US11109036B2 (en) * 2013-10-14 2021-08-31 Microsoft Technology Licensing, Llc Encoder-side options for intra block copy prediction mode for video and image coding
CN103561263B (zh) * 2013-11-06 2016-08-24 北京牡丹电子集团有限责任公司数字电视技术中心 基于运动矢量约束和加权运动矢量的运动补偿预测方法
US9554141B2 (en) * 2013-11-18 2017-01-24 Arris Enterprises, Inc. Intra block copy for intra slices in high efficiency video coding (HEVC)
JP6373008B2 (ja) * 2013-12-27 2018-08-15 三菱電機株式会社 画像符号化装置、画像復号装置、画像符号化方法及び画像復号方法
US20150271515A1 (en) * 2014-01-10 2015-09-24 Qualcomm Incorporated Block vector coding for intra block copy in video coding
CN105493505B (zh) * 2014-06-19 2019-08-06 微软技术许可有限责任公司 统一的帧内块复制和帧间预测模式
US9948949B2 (en) * 2014-06-20 2018-04-17 Qualcomm Incorporated Intra block copy block vector signaling for video coding
US10027981B2 (en) * 2014-09-01 2018-07-17 Hfi Innovation Inc. Method of intra picture block copy for screen content and video coding
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
EP3304907B1 (en) * 2015-06-08 2022-03-23 VID SCALE, Inc. Intra block copy mode for screen content coding
WO2017067429A1 (en) * 2015-10-19 2017-04-27 Mediatek Inc. Method and apparatus for decoded picture buffer management in video coding system using intra block copy
GB2547053B (en) * 2016-02-08 2020-07-08 Canon Kk Methods, devices, and computer programs for combining the use of intra-layer prediction and inter-layer prediction with scalability & screen content features
CN116743991A (zh) * 2016-08-03 2023-09-12 株式会社Kt 视频解码方法、视频编码方法和视频数据的传送方法
US10390015B2 (en) * 2016-08-26 2019-08-20 Qualcomm Incorporated Unification of parameters derivation procedures for local illumination compensation and cross-component linear model prediction
CN116866564A (zh) * 2016-10-04 2023-10-10 株式会社Kt 用于处理视频信号的方法和装置
KR102435500B1 (ko) * 2016-10-06 2022-08-23 세종대학교산학협력단 비디오 신호의 복호화 방법 및 이의 장치
JP2019129371A (ja) * 2018-01-23 2019-08-01 富士通株式会社 動画像符号化装置、動画像符号化方法、動画像復号装置、動画像復号方法、及び動画像符号化用コンピュータプログラムならびに動画像復号用コンピュータプログラム
US10462483B1 (en) * 2018-04-26 2019-10-29 Tencent America LLC Method and apparatus for video coding
US10841602B2 (en) * 2018-07-16 2020-11-17 Tencent America LLC Hierarchical tiles
GB2579763B (en) * 2018-09-21 2021-06-09 Canon Kk Video coding and decoding
JP7399973B2 (ja) * 2019-02-19 2023-12-18 ヒューマックス・カンパニー・リミテッド イントラ予測ベースのビデオ信号処理方法及び装置
CN113597767A (zh) * 2019-03-08 2021-11-02 Oppo广东移动通信有限公司 预测方法、编码器、解码器及计算机存储介质
US11350083B2 (en) * 2019-04-19 2022-05-31 Qualcomm Incorporated Intra block copy merging data syntax for video coding
US11394990B2 (en) 2019-05-09 2022-07-19 Tencent America LLC Method and apparatus for signaling predictor candidate list size
JP7405870B2 (ja) 2019-05-24 2023-12-26 華為技術有限公司 Ibcマージ・リストのために使用する符号化器、復号器、及び対応する方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180131957A1 (en) * 2012-04-12 2018-05-10 JVC Kenwood Corporation Moving picture decoding device, moving picture decoding method, and moving picture decoding program
US20170118484A1 (en) * 2014-06-12 2017-04-27 Canon Kabushiki Kaisha Image encoding apparatus, image encoding method and program, image decoding apparatus, and image decoding method and program

Also Published As

Publication number Publication date
US20220046272A1 (en) 2022-02-10
EP3954117A4 (en) 2022-06-08
WO2020238837A1 (en) 2020-12-03
EP3954117A1 (en) 2022-02-16
WO2020238838A1 (en) 2020-12-03
CN113853783B (zh) 2023-12-15
CN113853783A (zh) 2021-12-28
JP7332721B2 (ja) 2023-08-23
CN113950840A (zh) 2022-01-18
US11616973B2 (en) 2023-03-28
JP2023156417A (ja) 2023-10-24
JP2022534201A (ja) 2022-07-28
US20230164348A1 (en) 2023-05-25
KR20220012239A (ko) 2022-02-03

Similar Documents

Publication Publication Date Title
KR102649200B1 (ko) 인트라 블록 복제-코딩된 블록에 대한 블록 벡터의 코딩
JP7323641B2 (ja) アフィンモードのための適応動きベクトル差分分解
WO2020259426A1 (en) Motion candidate list construction for intra block copy mode
JP2022519883A (ja) デコーダ側精緻化ツールのサイズ選択アプリケーション
JP2022525876A (ja) オプティカルフローベースの予測精緻化の計算
US20220094927A1 (en) Sub-block based intra block copy
JP7318099B2 (ja) ビデオコーディングにおける変換ブロック・サイズ制約
WO2020244660A1 (en) Motion candidate list construction for video coding
KR102627821B1 (ko) 이웃 블록 정보를 사용한 모션 후보 리스트 구성
WO2021110017A1 (en) Merge with motion vector differencing in affine mode
WO2020248925A1 (en) History-based motion vector prediction with default parameters
KR102662036B1 (ko) 모션 벡터 차이 모드에서 병합시 모션 벡터 정밀도
WO2021036990A1 (en) Initialization of history-based motion vector predictor tables
CN114097219A (zh) 基于历史的运动矢量预测表中的运动信息的存储
KR20210106427A (ko) 모션 벡터 차이 모드에서 병합시 모션 벡터 정밀도

Legal Events

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