KR20240119195A - 모션 정보 저장을 위한 방법 및 장치 - Google Patents

모션 정보 저장을 위한 방법 및 장치 Download PDF

Info

Publication number
KR20240119195A
KR20240119195A KR1020247025742A KR20247025742A KR20240119195A KR 20240119195 A KR20240119195 A KR 20240119195A KR 1020247025742 A KR1020247025742 A KR 1020247025742A KR 20247025742 A KR20247025742 A KR 20247025742A KR 20240119195 A KR20240119195 A KR 20240119195A
Authority
KR
South Korea
Prior art keywords
motion information
distance
sample
parameter
sample set
Prior art date
Application number
KR1020247025742A
Other languages
English (en)
Inventor
한 가오
세미흐 에센리크
엘레나 알렉산드로브나 알시나
뱌오 왕
아난드 메헤르 코트라
Original Assignee
후아웨이 테크놀러지 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 후아웨이 테크놀러지 컴퍼니 리미티드 filed Critical 후아웨이 테크놀러지 컴퍼니 리미티드
Publication of KR20240119195A publication Critical patent/KR20240119195A/ko

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • H04N19/543Motion estimation other than block-based using regions
    • 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/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/167Position within a video image, e.g. region of interest [ROI]
    • 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/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/20Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Analysis (AREA)

Abstract

모션 정보 저장 방법은, 현재 블록의 샘플 세트와 공통 경계 사이의 거리를 결정하는 단계; 및 샘플 세트에 대해 제3 모션 정보가 저장되는지 여부를 결정하기 위해, 거리를 임계치와 비교하는 단계를 포함하고, 제3 모션 정보는 제1 모션 정보 및 제2 모션 정보로부터 유도된다.

Description

모션 정보 저장을 위한 방법 및 장치{METHOD AND APPARATUS FOR MOTION INFORMATION STORAGE}
본 출원의 실시예들은 일반적으로 비디오 코딩 분야에 관한 것으로, 보다 구체적으로는 인터 예측(inter prediction)에 관한 것이다.
비디오 코딩(비디오 인코딩 및 디코딩)은 광범위한 디지털 비디오 애플리케이션들, 예를 들면, 브로드캐스트 디지털 TV, 인터넷 및 모바일 네트워크들을 통한 비디오 전송, 실시간 대화 애플리케이션들, 이를테면 비디오 채팅, 화상 회의, DVD 및 블루-레이 디스크들, 비디오 콘텐츠 취득 및 편집 시스템들, 및 보안 애플리케이션들의 캠코더들에 사용된다.
비교적 짧은 비디오라도 묘사하는 데 필요한 비디오 데이터의 양은 상당할 수 있으며, 이는, 데이터가 스트리밍되거나 그렇지 않으면 제한된 대역폭 용량으로 통신 네트워크를 통해 통신되는 경우, 난제들을 초래할 수 있다. 따라서, 비디오 데이터는 일반적으로, 현대의 전기통신 네트워크들을 통해 통신되기 전에 압축된다. 메모리 자원들이 제한될 수 있기 때문에, 비디오가 저장 디바이스에 저장되는 경우에 비디오의 크기가 또한 쟁점일 수 있다. 비디오 압축 디바이스들은 종종, 전송 또는 저장 이전에 비디오 데이터를 코딩하기 위해 소스에서 소프트웨어 및/또는 하드웨어를 사용하며, 이로써 디지털 비디오 이미지들을 표현하는 데 필요한 데이터의 수량을 줄인다. 이후, 비디오 데이터를 디코딩하는 비디오 압축해제 디바이스에 의해, 압축된 데이터가 목적지에서 수신된다. 제한된 네트워크 자원들 및 더 높은 비디오 품질에 대한 계속 증가하는 요구로 인해, 픽처(picture) 품질을 거의 또는 전혀 희생하지 않으면서 압축 비율을 개선시키는 개선된 압축 및 압축해제 기법들이 요구된다.
본 출원의 실시예들은, 독립항들에 따른 인코딩 및 디코딩을 위한 장치들 및 방법들을 제공한다.
앞서 말한 그리고 다른 목적들은 독립항들의 청구 대상에 의해 달성된다.
추가 구현 형태들은 종속항들, 상세한 설명 및 도면들로부터 명백하다.
본 출원의 제1 양상에 따라, 모션 정보 저장 방법이 개시되고, 현재 블록은 제1 서브블록 및 제2 서브블록으로 구성되고, 제1 서브블록 및 제2 서브블록은 공통 경계(common boundary)에 의해 분리되고, 제1 서브블록은 제1 모션 정보에 대응하고 제2 서브블록은 제2 모션 정보에 대응하며, 이 방법은, 현재 블록의 샘플 세트와 공통 경계 사이의 거리를 결정하는 단계; 및 샘플 세트에 대해 제3 모션 정보가 저장되는지 여부를 결정하기 위해, 거리를 임계치(threshold)와 비교하는 단계를 포함하고, 제3 모션 정보는 제1 모션 정보 및 제2 모션 정보로부터 유도된다.
실현가능한 구현에서, 샘플 세트에 대해 제3 모션 정보가 저장되는지 여부를 결정하기 위해, 거리를 임계치와 비교하는 단계는, 거리의 절대 값이 임계치 이하인 경우, 샘플 세트에 대해 제3 모션 정보가 저장된다고 결정하는 단계를 포함한다.
실현가능한 구현에서, 거리의 절대 값이 임계치보다 큰 경우, 이 방법은, 거리가 양(positive)인 경우 샘플 세트에 대해 제1 모션 정보가 저장된다고 결정하는 단계; 또는 거리가 음(negative)인 경우 샘플 세트에 대해 제2 모션 정보가 저장된다고 결정하는 단계를 더 포함한다.
실현가능한 구현에서, 임계치는 미리결정된다.
실현가능한 구현에서, 임계치는 공통 경계와 수평 방향 또는 수직 방향 사이의 기하학적 관계에 기반한다.
실현가능한 구현에서, 임계치는 공통 경계의 직교 방향과 수평 방향 또는 수직 방향 사이의 각도에 기반한다.
실현가능한 구현에서, 임계치는 현재 블록의 폭 및/또는 높이에 기반한다.
실현가능한 구현에서, 공통 경계가 각도 파라미터 및 거리 파라미터에 의해 결정되고, 현재 블록의 샘플 세트와 공통 경계 사이의 거리를 결정하기 전에, 이 방법은 각도 파라미터 및 거리 파라미터를 결정하는 단계를 더 포함한다.
실현가능한 구현에서, 디코더에서, 각도 파라미터 및 거리 파라미터를 결정하는 단계는, 비트스트림으로부터 각도 파라미터 및 거리 파라미터를 파싱하는 단계 또는 비트스트림으로부터 지시자(indicator)를 파싱하는 단계, 및 지시자에 기반하여 각도 파라미터 및 거리 파라미터를 획득하는 단계를 포함한다.
실현가능한 구현에서, 각도 파라미터 및 거리 파라미터를 결정한 후, 이 방법은, 각도 파라미터에 기반하여 제1 계산 파라미터를 결정하는 단계; 각도 파라미터에 기반하여 temp 각도(temp angular) 파라미터를 계산하는 단계; temp 각도 파라미터에 기반하여 제2 계산 파라미터를 결정하는 단계; 및 각도 파라미터 및 거리 파라미터에 기반하여 제3 계산 파라미터를 계산하는 단계를 더 포함한다.
실현가능한 구현에서, 제1 계산 파라미터는 각도 파라미터에 따라 미리설정된 룩업 테이블을 체크함으로써 결정되고, 제2 계산 파라미터는 temp 각도 파라미터에 따라 룩업 테이블을 체크함으로써 결정되며, 제1 계산 파라미터 및 제2 계산 파라미터는, 각각, 동일한 각도의 코사인 값 및 사인 값이다.
실현가능한 구현에서, 거리는,
distFromLine = (x + K) * P1 + (y + K) * P2 - P3
에 의해 계산되며, 여기서 P1, P2 및 P3은, 각각, 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, distFromLine은 거리를 표현하고, K는 음이 아닌(non-negative) 정수이고, x는 샘플 세트에서 타깃 포지션의 수평 좌표를 표현하고, y는 직교 좌표계(rectangular coordinate system)에서 타깃 포지션의 수직 좌표를 표현하며, 현재 블록의 상단-좌측 샘플의 포지션이 좌표 원점으로 설정되고, 우측 방향은 양의 수평 방향으로 설정되고 그리고 아래 방향은 양의 수직 방향으로 설정된다.
실현가능한 구현에서, K는 1과 동일하다.
실현가능한 구현에서, 타깃 포지션은 샘플 세트에서 미리결정된다.
실현가능한 구현에서, 미리결정된 포지션은 샘플 세트의 상단-좌측 포지션 또는 샘플 세트의 중심 포지션이다.
실현가능한 구현에서, 거리의 샘플 정밀도(sample precision)는 정수 샘플보다 높고; 이에 상응하여, 거리는,
distFromLine = ((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3
에 의해 계산되며, 여기서 2N은 거리의 샘플 정밀도의 역수(reciprocal)를 표현한다.
실현가능한 구현에서, N은 1과 동일하다.
실현가능한 구현에서, 샘플 세트는 현재 블록의 루마 샘플 세트이다.
실현가능한 구현에서, 현재 블록의 샘플 세트와 공통 경계 사이의 거리를 결정하기 전에, 이 방법은, 현재 블록을 다수의 샘플 세트들로 세분하는 단계 ―다수의 샘플 세트들 각각은 샘플 세트와 동일한 크기를 가짐―; 또는 현재 블록을 샘플 세트로 설정하는 단계를 더 포함한다.
실현가능한 구현에서, 샘플 세트는 4×4 샘플 어레이이다.
실현가능한 구현에서, 다수의 샘플 세트들 각각은 각각의 모션 정보 저장 유닛에 대응하고, 모션 정보 저장 유닛은 제1 모션 정보, 제2 모션 정보 및 제3 모션 정보 중 하나를 저장하는 데 사용된다.
실현가능한 구현에서, 제1 서브블록 및 제2 서브블록은 삼각형 파티션(triangle partition), 사다리꼴 파티션(trapezoid partition) 또는 비대칭 직사각형 파티션(asymmetric rectangular partition)이다.
실현가능한 구현에서, 제1 모션 정보는 제1 참조 픽처 리스트에 기반한 모션 정보를 포함하고, 제2 모션 정보는 제2 참조 픽처 리스트에 기반한 모션 정보를 포함하고, 그리고 제3 모션 정보는 제1 모션 정보 및 제2 모션 정보를 포함한다.
본 출원의 제2 양상에 따라, 프로세서 및 메모리를 포함하는, 비디오 스트림을 디코딩하기 위한 장치가 개시된다. 메모리는, 프로세서로 하여금 제1 양상에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
본 출원의 제3 양상에 따라, 프로세서 및 메모리를 포함하는, 비디오 스트림을 인코딩하기 위한 장치가 개시된다. 메모리는, 프로세서로 하여금 제1 양상에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
제4 양상에 따라, 명령들이 저장되어 있는 컴퓨터-판독가능 저장 매체가 제안되며, 명령들은, 실행되는 경우, 하나 이상의 프로세서들로 하여금, 비디오 데이터를 코딩하게 하도록 구성된다. 명령들은, 하나 이상의 프로세서들로 하여금, 제1 양상에 따른 방법을 수행하게 한다.
제5 양상에 따라, 컴퓨터 프로그램은 컴퓨터 상에서 실행되는 경우, 제1 양상에 따른 방법을 수행하기 위한 프로그램 코드를 포함한다.
하나 이상 실시예들의 세부사항들은 첨부 도면들 및 아래의 설명에 제시된다. 다른 특징들, 목적들, 이점들은 상세한 설명, 도면들 및 청구항들로부터 명백해질 것이다.
하기에서는, 본 출원의 다음의 실시예들이 첨부된 도해(figure)들 및 도면들을 참조로 보다 상세하게 설명된다.
도 1a는 본 출원의 실시예들을 구현하도록 구성된 비디오 코딩 시스템의 예를 도시하는 블록도이다.
도 1b는 본 출원의 실시예들을 구현하도록 구성된 비디오 코딩 시스템의 다른 예를 도시하는 블록도이다.
도 2는 본 출원의 실시예들을 구현하도록 구성된 비디오 인코더의 예를 도시하는 블록도이다.
도 3은 본 출원의 실시예들을 구현하도록 구성된 비디오 디코더의 예시적 구조를 도시하는 블록도이다.
도 4는 인코딩 장치 또는 디코딩 장치의 예를 예시하는 블록도이다.
도 5는 인코딩 장치 또는 디코딩 장치의 다른 예를 예시하는 블록도이다.
도 6은 공간적 병합 후보의 포지션들의 예를 도시하는 다이어그램이다.
도 7은 공간적 병합 후보들의 리던던시 체크(redundancy check)를 위해 고려되는 후보 쌍들의 예를 도시하는 다이어그램이다.
도 8은 시간적 병합 후보에 대한 모션 벡터 스케일링(motion vector scaling)의 예를 도시하는 다이어그램이다.
도 9는 크기 8×8 루마(luma) 샘플들의 예측 블록에 대한 모션 벡터 저장의 예를 도시하는 다이어그램이다.
도 10은 삼각형 파티션 기반 인터 예측의 예를 도시하는 다이어그램이다.
도 11은 삼각형 파티션 모드에 대한 단방향 예측(uni-prediction) MV 선택의 예를 도시하는 다이어그램이다.
도 12는 블렌딩 프로세스(blending process)에서 사용되는 가중치들의 예를 도시하는 다이어그램이다.
도 13은 삼각형 파티션 모드에 대한 모션 벡터 저장의 예를 도시하는 다이어그램이다.
도 14는 상이한 기하학적 파티션(Geometrical partition)의 예를 도시하는 다이어그램이다.
도 15는 GEO 파티셔닝 파라미터들의 예를 도시하는 다이어그램이다.
도 16은 블렌딩 연산의 예를 도시하는 다이어그램이다.
도 17은 블렌딩 연산을 위한 룩업 테이블의 예를 도시하는 다이어그램이다.
도 18은 정수 포지션(integer position) 및 절반 픽셀 포지션(half pixel position)을 갖는 4×4 모션 저장 예의 예를 도시하는 다이어그램이다.
도 19는 모션 저장 방법의 예를 도시하는 다이어그램이다.
도 20은 모션 정보 저장 방법의 예를 예시하는 블록도이다.
도 21은 모션 정보 저장 장치의 예를 예시하는 블록도이다.
도 22는 콘텐츠 전달 서비스를 실현하는 콘텐츠 공급 시스템(3100)의 예시적 구조를 도시하는 블록도이다.
도 23은 일 예의 단말 디바이스의 구조를 도시하는 블록도이다.
다음의 동일한 참조 부호들은, 달리 명시적으로 지정되지 않는 경우, 동일하거나 최소한 기능적으로 동등한 특징들을 나타낸다.
다음의 설명에서, 본 개시내용의 일부를 형성하고 그리고 본 출원의 실시예들이 사용될 수 있는 특정 양상들 또는 본 출원의 실시예들의 특정 양상들을 예시로서 도시하는 첨부 도면이 참조된다. 본 출원의 실시예들이 다른 양상들에서 사용될 수 있고 그리고 도해들에 도시되지 않은 구조적 또는 논리적 변경들을 포함할 수 있다는 것이 이해된다. 따라서, 다음의 상세한 설명은 제한적인 의미로 받아들여서는 안 되며, 본 출원의 범위는 첨부된 청구항들에 의해 정의된다.
예를 들어, 설명되는 방법과 관련한 본 개시내용은 방법을 수행하도록 구성된 대응하는 디바이스 또는 시스템에 대해서도 또한 사실을 유지할 수 있고 그 반대도 마찬가지라는 것이 이해된다. 예를 들어, 하나 또는 복수의 특정 방법 단계들이 설명된 경우, 대응하는 디바이스는 설명된 하나 또는 복수의 방법 단계를 수행하기 위해, 하나 또는 복수의 유닛들, 예를 들어 기능 유닛들(예를 들어, 하나 또는 복수의 단계를 수행하는 하나의 유닛, 또는 각각이 복수의 단계들 중 하나 이상을 수행하는 복수의 유닛들)을, 그러한 하나 이상의 유닛들이 도해들에 명시적으로 설명되거나 예시되지 않은 경우에도, 포함할 수 있다. 한편, 예를 들어, 특정 장치가 하나 또는 복수의 유닛들, 예를 들어 기능 유닛들을 기반으로 설명된 경우, 대응하는 방법은 하나 또는 복수의 유닛들의 기능을 수행하는 하나의 단계(예를 들어, 하나 또는 복수의 유닛들의 기능을 수행하는 하나의 단계, 또는 각각이 복수의 유닛들 중 하나 이상의 유닛들의 기능을 수행하는 복수의 단계들)를, 그러한 하나 또는 복수의 단계들이 도해들에 명시적으로 설명되거나 예시되지 않은 경우에도, 포함할 수 있다. 추가로, 본원에서 설명되는 다양한 예시적인 실시예들 및/또는 양상들의 특징들은, 달리 구체적으로 언급되지 않는 한, 서로 결합될 수 있음이 이해된다.
비디오 코딩은 통상적으로, 비디오 또는 비디오 시퀀스를 형성하는 일련의 픽처들을 프로세싱하는 것을 의미한다. "픽처"라는 용어 대신, "프레임" 또는 "이미지"라는 용어가 비디오 코딩 분야에서 동의어로 사용될 수 있다. 비디오 코딩(또는 일반적으로 코딩)은 비디오 인코딩 및 비디오 디코딩의 2개 부분들을 포함한다. 비디오 인코딩은 소스 측에서 수행되며, 통상적으로 (보다 효율적인 저장 및/또는 전송을 위해) 비디오 픽처들을 표현하는 데 요구되는 데이터의 양을 줄이기 위해 원본 비디오 픽처들을 (예를 들어, 압축에 의해) 프로세싱하는 것을 포함한다. 비디오 디코딩은 목적지 측에서 수행되며, 통상적으로 비디오 픽처들을 재구성하기 위해 인코더와 비교되는 역(reverse) 프로세싱을 포함한다. 비디오 픽처들(또는 일반적으로 픽처들)의 "코딩"을 언급하는 실시예들은, 비디오 픽처들 또는 개개의 비디오 시퀀스들의 "인코딩" 또는 "디코딩"에 관한 것으로 이해되어야 한다. 인코딩 부분과 디코딩 부분의 조합은 또한 CODEC(Coding and Decoding)으로 지칭된다.
무손실(lossless) 비디오 코딩의 경우, 원본 비디오 픽처들이 재구성될 수 있는 데, 즉, 재구성된 비디오 픽처들은 (저장 또는 전송 중 어떠한 전송 손실도 또는 다른 데이터 손실도 없다고 가정하여) 원본 비디오 픽처들과 동일한 품질을 갖는다. 손실(lossy) 비디오 코딩의 경우, 디코더에서 완전히 재구성될 수 없는 비디오 픽처들을 표현하기 위한 데이터의 양을 줄이기 위해, 예를 들어 양자화에 의한 추가 압축이 수행되는 데, 즉, 재구성된 비디오 픽처들의 품질은 원본 비디오 픽처들의 품질에 비해 더 낮거나 더 나쁘다.
여러 비디오 코딩 표준들은 "손실 하이브리드 비디오 코덱"의 그룹에 속한다(즉, 샘플 도메인에서 공간 및 시간 예측을 결합하고 변환 도메인에서 양자화를 적용하기 위해 2D 변환 코딩을 결합). 비디오 시퀀스의 각각의 픽처는 전형적으로 한 세트의 비-중첩 블록들로 분할되고, 코딩은 전형적으로 블록 레벨에서 수행된다. 다른 말로, 인코더에서, 비디오는 전형적으로, 블록(비디오 블록) 레벨에서, 예를 들어, 예측 블록을 생성하기 위해 공간적(인트라 픽처) 예측 및/또는 시간적(인터 픽처) 예측을 사용하여 예측 블록을 생성하고, 잔차 블록(residual block)을 획득하기 위해 현재 블록(현재 프로세싱되는/프로세싱될 블록)에서 예측 블록을 차감하고, 잔차 블록을 변환하고 그리고 전송될 데이터의 양을 줄이기(압축) 위해 변환 도메인에서 잔차 블록을 양자화함으로써 프로세싱, 즉 인코딩되는 반면, 디코더에서는, 인코더와 비교하여 역 프로세싱이 인코딩된 또는 압축된 블록에 적용되어 표현을 위해 현재 블록을 재구성한다. 또한, 인코더는 디코더 프로세싱 루프를 복제하여, 둘 모두 동일한 예측들(예를 들어, 인트라-예측 및 인터-예측) 및/또는 후속 블록들을 프로세싱하기 위한, 즉 코딩하기 위한 재구성들을 생성한다.
비디오 코딩 시스템(10)의 다음의 실시예들에서, 비디오 인코더(20) 및 비디오 디코더(30)는 도 1 내지 도 3에 기반하여 설명된다.
도 1a는 예시적인 코딩 시스템(10), 예를 들어, 본 출원의 기법들을 활용할 수 있는 비디오 코딩 시스템(10)(또는 짧게 코딩 시스템(10))을 예시하는 개략적인 블록도이다. 비디오 코딩 시스템(10)의 비디오 인코더(20)(또는 짧게 인코더(20)) 및 비디오 디코더(30)(또는 짧게 디코더(30))는, 본 출원에서 설명되는 다양한 예들에 따른 기법들을 수행하도록 구성될 수 있는 디바이스들의 예들을 표현한다.
도 1a에 도시된 바와 같이, 코딩 시스템(10)은, 예를 들어, 인코딩된 픽처 데이터(13)를 디코딩하기 위해, 목적지 디바이스(14)에 인코딩된 픽처 데이터(21)를 제공하도록 구성된 소스 디바이스(12)를 포함한다.
소스 디바이스(12)는, 인코더(20)를 포함하며 그리고 추가적으로, 즉 선택적으로, 픽처 소스(16), 사전-프로세서(또는 사전-프로세싱 유닛)(18), 예를 들어, 픽처 사전-프로세서(18), 및 통신 인터페이스 또는 통신 유닛(22)을 포함할 수 있다.
픽처 소스(16)는 임의의 종류의 픽처 캡처 디바이스, 예를 들어 실세계 픽처를 캡처하기 위한 카메라, 및/또는 임의의 종류의 픽처 생성 디바이스, 예를 들어 컴퓨터 애니메이션 픽처를 생성하기 위한 컴퓨터-그래픽 프로세서, 또는 실세계 픽처, 컴퓨터로 생성되는 픽처(예를 들어 스크린 콘텐츠, 가상 현실(VR) 픽처) 및/또는 이들의 조합(예를 들어, 증강 현실(AR) 픽처)을 획득 및/또는 제공하기 위한 임의의 종류의 다른 디바이스일 수 있거나 이를 포함할 수 있다. 픽처 소스는 전술된 픽처들 중 임의의 것을 저장하는 임의의 종류의 메모리 또는 저장부일 수 있다.
사전-프로세싱 유닛(18)에 의해 수행되는 프로세싱 및 사전-프로세서(18)와 구별하여, 픽처 또는 픽처 데이터(17)는 또한 원시(raw) 픽처 또는 원시 픽처 데이터(17)로 지칭될 수 있다.
사전-프로세서(18)는, (원시) 픽처 데이터(17)를 수신하고 그리고 픽처 데이터(17)에 대한 사전-프로세싱을 수행하여 사전-프로세싱된 픽처(19) 또는 사전-프로세싱된 픽처 데이터(19)를 획득하도록 구성된다. 사전-프로세서(18)에 의해 수행되는 사전-프로세싱은, 예를 들어, 트리밍, 컬러 포맷 변환(예를 들어, RGB에서 YCbCr로), 컬러 보정 또는 노이즈 제거(de-noising)를 포함할 수 있다. 사전-프로세싱 유닛(18)이 선택적 컴포넌트일 수 있다는 것이 이해될 수 있다.
비디오 인코더(20)는, 사전-프로세싱된 픽처 데이터(19)를 수신하고 그리고 인코딩된 픽처 데이터(21)를 제공하도록 구성된다(더 상세사항들은 예를 들어, 도 2에 기반하여 아래에서 설명될 것임).
소스 디바이스(12)의 통신 인터페이스(22)는, 인코딩된 픽처 데이터(21)를 수신하고 그리고 인코딩된 픽처 데이터(21)(또는 그의 임의의 추가 프로세싱된 버전)를 통신 채널(13)을 통해, 저장 또는 다이렉트 재구성을 위한 다른 디바이스, 예를 들어 목적지 디바이스(14) 또는 임의의 다른 디바이스에 전송하도록 구성될 수 있다.
목적지 디바이스(14)는, 디코더(30)(예를 들어, 비디오 디코더(30))를 포함하고 그리고 추가적으로, 즉 선택적으로, 통신 인터페이스 또는 통신 유닛(28), 사후-프로세서(32)(또는 사후-프로세싱 유닛(32)) 및 디스플레이 디바이스(34)를 포함할 수 있다.
목적지 디바이스(14)의 통신 인터페이스(28)는, 인코딩된 픽처 데이터(21)(또는 그의 임의의 추가 프로세싱된 버전)를, 예를 들어, 소스 디바이스(12)로부터 또는 임의의 다른 소스, 예를 들어, 저장 디바이스, 예를 들어, 인코딩된 픽처 데이터 저장 디바이스로부터 직접 수신하고 그리고 인코딩된 픽처 데이터(21)를 디코더(30)에 제공하도록 구성된다.
통신 인터페이스(22) 및 통신 인터페이스(28)는, 인코딩된 픽처 데이터(21) 또는 인코딩된 데이터(13)를, 소스 디바이스(12)와 목적지 디바이스(14) 사이의 다이렉트 통신 링크(예를 들어, 다이렉트 유선 또는 무선 연결)를 통해 또는 임의의 종류의 네트워크(예를 들어, 유선 또는 무선 네트워크 또는 이들의 임의의 조합), 또는 임의의 종류의 사설 및 공용 네트워크, 또는 임의의 종류의 이들의 조합을 통해 전송 또는 수신하도록 구성될 수 있다.
통신 인터페이스(22)는 예를 들어, 인코딩된 픽처 데이터(21)를 적절한 포맷, 예를 들어 패킷들로 패키징하고 그리고/또는 인코딩된 픽처 데이터를, 통신 링크 또는 통신 네트워크를 통한 전송을 위한 임의의 종류의 전송 인코딩 또는 프로세싱을 사용하여 프로세싱하도록 구성될 수 있다.
통신 인터페이스(22)의 상대물(counterpart)을 형성하는 통신 인터페이스(28)는, 예를 들어, 전송된 데이터를 수신하고 그리고 그 전송 데이터를, 임의의 종류의 대응하는 전송 디코딩 또는 프로세싱 및/또는 디패키징(de-packaging)을 사용하여 프로세싱하여, 인코딩된 픽처 데이터(21)를 획득하도록 구성될 수 있다.
통신 인터페이스(22) 및 통신 인터페이스(28) 둘 모두는, 소스 디바이스(12)로부터 목적지 디바이스(14)를 가리키는 도 1a의 통신 채널(13)에 대한 화살표로 지시된 바와 같은 단방향 통신 인터페이스들로서 또는 양방향 통신 인터페이스들로서 구성될 수 있고 ,그리고 예를 들어, 예컨대 연결을 설정하고, 통신 링크 및/또는 데이터 전송, 예를 들어 인코딩된 픽처 데이터 전송과 관련된 임의의 다른 정보를 확인응답하고 교환하기 위해, 메시지들을 전송 및 수신하도록 구성될 수 있다.
디코더(30)는, 인코딩된 픽처 데이터(21)를 수신하고 그리고 디코딩된 픽처 데이터(31) 또는 디코딩된 픽처(31)를 제공하도록 구성된다(더 상세사항들은 예를 들어, 도 3 또는 도 5에 기반하여 아래에서 설명될 것임).
목적지 디바이스(14)의 사후-프로세서(32)는, 디코딩된 픽처 데이터(31)(또한, 재구성된 픽처 데이터로 불림), 예를 들어 디코딩된 픽처(31)를 사후-프로세싱하여, 사후-프로세싱된 픽처 데이터(33), 예를 들어, 사후-프로세싱된 픽처(33)를 획득하도록 구성된다. 예를 들어, 사후-프로세싱 유닛(32)에 의해 수행되는 사후-프로세싱은, 예를 들어, 디스플레이 디바이스(34)에 의한 디스플레이를 위해 디코딩된 픽처 데이터(31)를 준비하기 위한, 컬러 포맷 변환(예를 들어, YCbCr에서 RGB로), 컬러 보정, 트리밍 또는 재-샘플링 또는 임의의 다른 프로세싱을 포함할 수 있다.
목적지 디바이스(14)의 디스플레이 디바이스(34)는, 예를 들어, 사용자 또는 뷰어에게 픽처를 디스플레이하기 위해, 사후-프로세싱된 픽처 데이터(33)를 수신하도록 구성된다. 디스플레이 디바이스(34)는 재구성된 픽처를 표현하기 위한 임의의 종류의 디스플레이, 예를 들어, 통합형 또는 외부 디스플레이 또는 모니터일 수 있거나 이를 포함할 수 있다. 디스플레이는 예를 들어, 액정 디스플레이들(LCD), 유기 발광 다이오드(OLED) 디스플레이들, 플라즈마 디스플레이들, 프로젝터들, 마이크로 LED 디스플레이들, LCoS(liquid crystal on silicon), 디지털 광 프로세서(DLP) 또는 임의의 종류의 다른 디스플레이를 포함할 수 있다.
도 1a는 소스 디바이스(12) 및 목적지 디바이스(14)를 별개의 디바이스들로서 도시하지만, 디바이스들의 실시예들은 또한, 소스 디바이스(12)와 목적지 디바이스(14) 둘 다, 또는 소스 디바이스(12)의 대응하는 기능과 목적지 디바이스(14)의 대응하는 기능 둘 다를 포함할 수 있다. 이러한 실시예에서, 소스 디바이스(12) 또는 대응하는 기능 및 목적지 장치(14) 또는 대응하는 기능은, 동일한 하드웨어 및/또는 소프트웨어를 사용하여 또는 별도의 하드웨어 및/또는 소프트웨어 또는 이들의 임의의 조합에 의해 구현될 수 있다.
설명에 기반하여 당업자에게 명백한 바와 같이, 도 1a에 도시된 바와 같은 소스 디바이스(12) 및/또는 목적지 디바이스(14) 내의 상이한 유닛들 또는 기능들의 존재 및 (정확한) 세분은 실제 디바이스 및 애플리케이션에 따라 달라질 수 있다.
인코더(20)(예를 들어, 비디오 인코더(20)) 또는 디코더(30)(예를 들어, 비디오 디코더(30)) 또는 인코더(20)와 디코더(30) 둘 다는, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서(DSP)들, 주문형 집적 회로(ASIC)들, 필드-프로그램가능 게이트 어레이(FPGA)들, 이산 로직, 하드웨어, 비디오 코딩 전용물 또는 이들의 조합들과 같은, 도 1b에 도시된 바와 같은 프로세싱 회로부를 통해 구현될 수 있다. 인코더(20)는, 도 2의 인코더(20) 및/또는 본원에 설명된 임의의 다른 인코더 시스템 또는 서브시스템과 관련하여 논의된 바와 같은 다양한 모듈들을 구체화하도록, 프로세싱 회로부(46)를 통해 구현될 수 있다. 디코더(30)는, 도 3의 디코더(30) 및/또는 본원에 설명된 임의의 다른 디코더 시스템 또는 서브시스템과 관련하여 논의된 바와 같은 다양한 모듈들을 구체화하도록, 프로세싱 회로부(46)를 통해 구현될 수 있다. 프로세싱 회로부는 나중에 논의되는 바와 같은 다양한 동작들을 수행하도록 구성될 수 있다. 도 5에 도시된 바와 같이, 기법들이 부분적으로 소프트웨어로 구현되는 경우, 디바이스는 소프트웨어를 위한 명령들을 적절한 비-일시적 컴퓨터-판독가능 저장 매체에 저장할 수 있고 그리고 본 개시내용의 기법들을 수행하기 위해 하나 이상의 프로세서들을 사용하여 명령들을 하드웨어에서 실행할 수 있다. 비디오 인코더(20) 및 비디오 디코더(30) 중 하나는, 예를 들어, 도 1b에 도시된 바와 같이 단일 디바이스에서 결합된 인코더/디코더(CODEC)의 일부로서 통합될 수 있다.
소스 디바이스(12) 및 목적지 디바이스(14)는, 광범위한 디바이스들 중 임의의 것(임의의 종류의 핸드헬드 또는 고정 디바이스들, 예를 들어, 노트북 또는 노트북 컴퓨터들, 모바일 폰들, 스마트 폰들, 태블릿들 또는 태블릿 컴퓨터들, 카메라들, 데스크톱 컴퓨터들, 셋톱 박스들, 텔레비전들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔들, 비디오 스트리밍 디바이스들(이를테면, 콘텐츠 서비스 서버들 또는 콘텐츠 전달 서버들), 브로드캐스트 수신기 디바이스, 브로드캐스트 전송기 디바이스들 등을 포함함)을 포함할 수 있고 그리고 임의의 종류의 운영 시스템을 사용하거나 또는 사용하지 않을 수 있다. 일부 경우들에서, 소스 디바이스(12) 및 목적지 디바이스(14)는 무선 통신을 위해 구비될 수 있다. 따라서, 소스 디바이스(12) 및 목적지 디바이스(14)는 무선 통신 디바이스들일 수 있다.
일부 경우들에서, 도 1a에 예시된 비디오 코딩 시스템(10)은 단지 예이고, 그리고 본 출원의 기법들은 인코딩 디바이스와 디코딩 디바이스 사이의 임의의 데이터 통신을 반드시 포함하지 않는 비디오 코딩 설정들(예를 들어, 비디오 인코딩 또는 비디오 디코딩)에 적용될 수 있다. 다른 예들에서, 데이터는 로컬 메모리로부터 검색되거나, 네트워크를 통해 스트리밍되는 식이다. 비디오 인코딩 디바이스는 데이터를 인코딩하여 메모리에 저장할 수 있고, 그리고/또는 비디오 디코딩 디바이스는 메모리로부터 데이터를 검색하고 디코딩할 수 있다. 일부 예에서, 인코딩 및 디코딩은, 서로 통신하는 것이 아니라 단순히 데이터를 메모리에 인코딩하고 그리고/또는 메모리로부터 데이터를 검색 및 디코딩하는 디바이스들에 의해 수행된다.
설명의 편의를 위해, 예를 들어, HEVC(High-Efficiency Video Coding) 또는 VVC(Versatile Video coding)의 참조 소프트웨어, ITU-T VCEG(Video Coding Experts Group) 및 ISO/IEC MPEG(Motion Picture Experts Group)에 대한 JCT-VC(Joint Collaboration Team on Video Coding)에 의해 개발된 차세대 비디오 코딩 표준을 참조로, 본 출원의 실시예들이 설명된다. 당업자는 본 출원의 실시예들이 HEVC 또는 VVC로 제한되지 않는다는 것을 이해할 것이다.
인코더 및 인코딩 방법
도 2는 본 출원의 기법들을 구현하도록 구성된 예시적인 비디오 인코더(20)의 개략적인 블록도를 도시한다. 도 2의 예에서, 비디오 인코더(20)는, 입력(201)(또는 입력 인터페이스(201)), 잔차 계산 유닛(204), 변환 프로세싱 유닛(206), 양자화 유닛(208), 역양자화 유닛(210), 및 역변환 프로세싱 유닛(212), 재구성 유닛(214), 루프 필터 유닛(220), 디코딩된 픽처 버퍼(DPB)(230), 모드 선택 유닛(260), 엔트로피 인코딩 유닛(270) 및 출력(272)(또는 출력 인터페이스(272))을 포함한다. 모드 선택 유닛(260)은 인터 예측 유닛(244), 인트라 예측 유닛(254) 및 파티셔닝 유닛(262)을 포함할 수 있다. 인터 예측 유닛(244)은 모션 추정 유닛 및 모션 보상 유닛(미도시)을 포함할 수 있다. 도 2에 도시된 바와 같은 비디오 인코더(20)는 또한, 하이브리드 비디오 코텍에 따른 하이브리드 비디오 인코더 또는 비디오 디코더로 지칭될 수 있다.
잔차 계산 유닛(204), 변환 프로세싱 유닛(206), 양자화 유닛(208), 모드 선택 유닛(260)은 인코더(20)의 순방향 신호 경로를 형성하는 것으로 지칭될 수 있는 반면, 역양자화 유닛(210), 역변환 프로세싱 유닛(212), 재구성 유닛(214), 버퍼(216), 루프 필터(220), 디코딩된 픽처 버퍼(DPB)(230), 인터 예측 유닛(244) 및 인트라 예측 유닛(254)은 비디오 인코더(20)의 역방향 신호 경로를 형성하는 것으로 지칭될 수 있고, 여기서, 비디오 인코더(20)의 역방향 신호 경로는 디코더의 신호 경로에 대응한다(도 3의 비디오 디코더(30) 참조). 역양자화 유닛(210), 역변환 프로세싱 유닛(212), 재구성 유닛(214), 루프 필터(220), 디코딩된 픽처 버퍼(DPB)(230), 인터 예측 유닛(244) 및 인트라 예측 유닛(254)은 또한, 비디오 인코더(20)의 "내장(built-in) 디코더"를 형성하는 것으로 또한 지칭된다.
픽처들 & 픽처 파티셔닝(픽처들 & 블록들)
인코더(20)는, 예를 들어, 입력(201)을 통해, 픽처(17)(또는 픽처 데이터(17)), 예를 들어 비디오 또는 비디오 시퀀스를 형성하는 픽처들의 시퀀스의 픽처를 수신하도록 구성될 수 있다. 수신된 픽처 또는 픽처 데이터는 또한, 사전-프로세싱된 픽처(19)(또는 사전-프로세싱된 픽처 데이터(19))일 수 있다. 단순화를 위해, 다음의 설명은 픽처(17)를 참조한다. 픽처(17)는 또한, (특히, 현재 픽처를 다른 픽처들, 예를 들어 동일한 비디오 시퀀스, 즉 현재 픽처를 또한 포함하는 비디오 시퀀스의 이전에 인코딩된 및/또는 디코딩된 픽처들과 구별하기 위한 비디오 코딩에서) 현재 픽처 또는 코딩될 픽처로 지칭될 수 있다.
(디지털) 픽처는 세기 값들을 갖는 샘플들의 2-차원 어레이 또는 행렬이거나 또는 이로 간주될 수 있다. 어레이의 샘플은 또한, 픽셀(픽처 엘리먼트의 축약형) 또는 pel로 지칭될 수 있다. 어레이 또는 픽처의 수평 및 수직 방향(또는 축)에서 샘플들의 수는 픽처의 크기 및/또는 해상도를 정의한다. 컬러의 표현을 위해, 통상적으로 3개의 컬러 성분들이 이용되는 데, 즉, 픽처는 3개의 샘플 어레이들로 표현될 수 있거나 또는 이를 포함할 수 있다. RBG 포맷 또는 컬러 공간에서, 픽처는 대응하는 적색, 녹색 및 청색 샘플 어레이를 포함한다. 그러나, 비디오 코딩에서, 각각의 픽셀은 통상적으로, 루미넌스(luminance) 및 크로미넌스(chrominance) 포맷 또는 컬러 공간(예를 들어, YCbCr)로 표현되며, 이는 Y로 지시되는 루미넌스 성분(때로는 또한 L이 대신 사용됨)과 Cb 및 Cr로 지시되는 2개의 크로미넌스 성분들을 포함한다. 루미넌스(또는 짧게 루마) 성분(Y)은, 밝기 또는 그레이 레벨 세기(예를 들어, 그레이-스케일 픽처에서와 같음)를 표현하는 반면, 2개의 크로미넌스(또는 짧게 크로마) 성분들(Cb 및 Cr)은 색도(chromaticity) 또는 컬러 정보 성분들을 표현한다. 이에 따라, YCbCr 포맷의 픽처는 루미넌스 샘플 값들(Y)의 루미넌스 샘플 어레이, 및 크로미넌스 값들(Cb 및 Cr)의 2개의 크로미넌스 샘플 어레이들을 포함한다. RGB 포맷의 픽처들은 YCbCr 포맷으로 컨버팅 또는 변환될 수 있으며 그 반대일 수도 있고, 이 프로세스는 컬러 변환 또는 컨버전으로 알려져 있다. 픽처가 단색(monochrome)이면, 픽처는 루미넌스 샘플 어레이만 포함할 수 있다. 이에 따라, 픽처는, 예를 들어, 단색 포맷의 루마 샘플들의 어레이, 또는 4:2:0, 4:2:2 및 4:4:4 컬러 포맷의 루마 샘플들의 어레이 및 크로마 샘플들의 2개의 대응하는 어레이들일 수 있다.
비디오 인코더(20)의 실시예들은, 픽처(17)를 복수의(통상적으로 비-중첩하는) 픽처 블록들(203)로 파티셔닝하도록 구성된 픽처 파티셔닝 유닛(도 2에 도시되지 않음)을 포함할 수 있다. 이러한 블록들은 또한, 루트 블록들, 매크로 블록들(H.264/AVC) 또는 코딩 트리 블록들(CTB) 또는 코딩 트리 유닛들(CTU)(H.265/HEVC 및 VVC)로 지칭될 수 있다. 픽처 파티셔닝 유닛은, 비디오 시퀀스의 모든 픽처들과 동일한 블록 크기 및 블록 크기를 정의하는 대응하는 그리드를 사용하도록, 또는 픽처들 또는 픽처들의 서브세트들 또는 그룹들 간의 블록 크기를 변경하고 각각의 픽처를 대응하는 블록들로 파티셔닝하도록 구성될 수 있다.
추가 실시예들에서, 비디오 인코더는 픽처(17)의 블록(203), 예를 들어, 픽처(17)를 형성하는 하나, 여러 또는 모든 블록들을 직접 수신하도록 구성될 수 있다. 픽처 블록(203)은 또한, 현재 픽처 블록 또는 코딩될 픽처 블록으로 지칭될 수 있다.
픽처(17)와 마찬가지로, 픽처 블록(203)은 다시, 픽처(17)보다 차원이 작지만, 세기 값들(샘플 값들)을 갖는 샘플들의 2-차원 어레이 또는 행렬이거나 또는 이로 간주될 수 있다. 다른 말로, 블록(203)은, 예를 들어, 하나의 샘플 어레이(예를 들어, 단색 픽처(17)의 경우 루마 어레이 또는 컬러 픽처의 경우 루마 또는 크로마 어레이) 또는 3개의 샘플 어레이들(예를 들어, 컬러 픽처(17)의 경우 루마 및 2개의 크로마 어레이들), 또는 적용되는 컬러 포맷에 따라 임의의 다른 수 및/또는 종류의 어레이들을 포함할 수 있다. 블록(203)의 수평 및 수직 방향(또는 축)의 샘플들의 수는 블록(203)의 크기를 정의한다. 이에 따라, 블록은, 예를 들어 샘플들의 M×N(M-열 × N-행) 어레이, 또는 변환 계수의 M×N 어레이일 수 있다.
도 2에 도시된 비디오 인코더(20)의 실시예들은, 블록 단위로 픽처(17)를 인코딩하도록 구성될 수 있으며, 예를 들어 인코딩 및 예측이 블록(203)마다 수행된다.
도 2에 도시된 비디오 인코더(20)의 실시예들은 추가로, 슬라이스들(또한, 비디오 슬라이스들로 지칭됨)을 사용함으로써 픽처를 파티셔닝 및/또는 인코딩하도록 구성될 수 있고, 여기서 픽처는 하나 이상의 슬라이스들(전형적으로 비-중첩)로 파티셔닝되거나 또는 이들을 사용하여 인코딩될 수 있고, 그리고 각각의 슬라이스는 하나 이상의 블록들(예를 들어, CTU들) 또는 하나 이상의 그룹들의 블록들(예를 들어, 타일들(H.265/HEVC 및 VVC) 또는 브릭(brick)들(VVC))을 포함할 수 있다.
도 2에 도시된 비디오 인코더(20)의 실시예들은 추가로, 슬라이스들/타일 그룹들(또한 비디오 타일 그룹들로 지칭됨) 및/또는 타일들(또한 비디오 타일들로 지칭됨)을 사용함으로써 픽처를 파티셔닝 및/또는 인코딩하도록 구성될 수 있고, 여기서 픽처는 하나 이상의 슬라이스들/타일 그룹들(전형적으로 비-중첩)로 파티셔닝되거나 또는 이들을 사용하여 인코딩될 수 있으며, 각각의 슬라이스/타입 그룹은 예를 들어, 하나 이상의 블록들(예를 들어, CTU들) 또는 하나 이상의 타일들을 포함할 수 있으며, 각각의 타일은 예를 들어 직사각형 형상일 수 있으며 하나 이상의 블록들(예를 들어, CTU들), 예를 들어 완전 또는 분수(fractional) 블록들을 포함할 수 있다.
잔차 계산
잔차 계산 유닛(204)은, 픽처 블록(203) 및 예측 블록(265)에 기반하여, 예를 들어, 샘플 단위로(픽셀 단위로), 픽처 블록(203)의 샘플 값들로부터 예측 블록(265)의 샘플 값들을 차감하여 샘플 도메인에서 잔차 블록(205)을 획득함으로써, 잔차 블록(205)(또한, 잔차(205)로 지칭됨)을 계산하도록 구성될 수 있다(예측 블록(265)에 대한 추가 세부사항들은 이후에 제공됨).
변환
변환 프로세싱 유닛(206)은, 예를 들어, 변환 도메인에서 변환 계수들(207)을 획득하기 위해 잔차 블록(205)의 샘플 값들에 변환, 예를 들어 이산 코사인 변환(DCT) 또는 이산 사인 변환(DST)을 적용하도록 구성될 수 있다. 변환 계수들(207)은 또한, 변환 잔차 계수들로 지칭될 수 있고 변환 도메인에서의 잔차 블록(205)을 표현할 수 있다.
변환 프로세싱 유닛(206)은 H.265/HEVC에 대해 지정된 변환들과 같은 DCT/DST의 정수 근사(integer approximation)들을 적용하도록 구성될 수 있다. 직교 DCT 변환과 비교하여, 이러한 정수 근사들은 통상적으로 특정 팩터에 의해 스케일링된다. 정변환(forward transform) 및 역변환에 의해 프로세싱되는 잔차 블록의 노름(norm)을 보존하기 위해, 추가 스케일링 팩터들이 변환 프로세스의 일부로서 적용된다. 스케일링 팩터들은 전형적으로, 시프트 연산들에 대한 2의 거듭제곱인 스케일링 팩터들, 변환 계수들의 비트 깊이, 정확도와 구현 비용들 간의 트레이드오프 등과 같은 특정 제약들에 기반하여 선정된다. 예를 들어, 특정 스케일링 팩터들은, 예를 들어, 역변환 프로세싱 유닛(212)에 의한 역변환(및 예를 들어 비디오 디코더(30)에서 역변환 프로세싱 유닛(312)에 의한 대응하는 역변환)에 대해 지정되며, 그리고 예를 들어, 인코더(20)에서, 변환 프로세싱 유닛(206)에 의한 정변환에 대한 대응하는 스케일링 팩터들이 그에 따라 지정될 수 있다.
비디오 인코더(20)의 실시예들(각각, 변환 처리 유닛(206))은, 예를 들어, 변환 파라미터들, 예를 들어, 직접적으로 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩 또는 압축되는 변환 또는 변환들의 타입을 출력하도록 구성될 수 있어, 예를 들어, 비디오 디코더(30)가 디코딩을 위해 변환 파라미터들을 수신하고 사용할 수 있다.
양자화
양자화 유닛(208)은, 예를 들어 스칼라 양자화 또는 벡터 양자화를 적용함으로써, 양자화된 계수들(209)을 획득하기 위해 변환 계수들(207)을 양자화하도록 구성될 수 있다. 양자화된 계수들(209)은 또한, 양자화된 변환 계수들(209) 또는 양자화된 잔차 계수들(209)로 지칭될 수 있다.
양자화 프로세스는 변환 계수들(207)의 일부 또는 전부와 연관된 비트 깊이를 감소시킬 수 있다. 예를 들어, n-비트 변환 계수는 양자화 동안 m-비트 변환 계수로 절삭(rounded down)될 수 있고, 여기서 n은 m보다 크다. 양자화 정도는 양자화 파라미터(QP)를 조정함으로써 수정될 수 있다. 예를 들어, 스칼라 양자화의 경우, 더 미세한(finer) 또는 더 개략적(coarser) 양자화를 달성하기 위해 서로 다른 스케일링이 적용될 수 있다. 더 작은 양자화 스텝 크기들은 더 미세한 양자화에 대응하는 반면, 더 큰 양자화 스텝 크기들은 더 개략적 양자화에 대응한다. 적용가능한 양자화 스텝 크기는 양자화 파라미터(QP)에 의해 지시될 수 있다. 양자화 파라미터는, 예를 들어, 미리정의된 세트의 적용가능한 양자화 스텝 크기들에 대한 인덱스일 수 있다. 예를 들어, 작은 양자화 파라미터들은 미세한 양자화(작은 양자화 스텝 크기들)에 대응할 수 있고, 큰 양자화 파라미터들은 개략적 양자화(큰 양자화 스텝 크기들)에 대응할 수 있거나, 또는 이의 역일 수 있다. 양자화는 양자화 스텝 크기에 의한 나눗셈을 포함할 수 있고, 예를 들어 역양자화 유닛(210)에 의한 대응하는 및/또는 역 탈양자화(inverse dequantization)는 양자화 스텝 크기에 의한 곱셈을 포함할 수 있다. 일부 표준들, 예를 들어 HEVC에 따른 실시예들은, 양자화 스텝 크기를 결정하기 위해 양자화 파라미터를 사용하도록 구성될 수 있다. 일반적으로, 양자화 스텝 크기는 나눗셈을 포함하는 방정식의 고정 소수점 근사(fixed point approximation)를 사용하는 양자화 파라미터에 기반하여 계산될 수 있다. 양자화 스텝 크기 및 양자화 파라미터에 대한 방정식의 고정 소수점 근사에 사용되는 스케일링 때문에 수정될 수 있는 잔차 블록의 노름을 복원하기 위해, 양자화 및 탈양자화를 위한 추가 스케일링 팩터들이 도입될 수 있다. 하나의 예시적인 구현에서, 역변환 및 탈양자화의 스케일링은 결합될 수 있다. 대안적으로, 맞춤형 양자화 테이블들이 사용되어 인코더로부터 디코더로, 예를 들어 비트스트림에서 시그널링될 수 있다. 양자화는 손실 연산이며, 여기서 손실은 양자화 스텝 크기들이 증가함에 따라 증가한다.
예를 들어, 비디오 인코더(20)의 실시예들(각각 양자화 유닛(208))은, 예를 들어, 직접적으로 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩되는 양자화 파라미터들(QP)을 출력하도록 구성될 수 있어, 예를 들어, 비디오 디코더(30)가 디코딩을 위해 양자화 파라미터들을 수신하고 적용할 수 있다.
역양자화
역양자화 유닛(210)은, 예를 들어, 양자화 유닛(208)과 동일한 양자화 스텝 크기에 기반하여 또는 이를 사용하여 양자화 유닛(208)에 의해 적용되는 양자화 방식의 역(inverse)을 적용함으로써, 양자화 유닛(208)의 역양자화를 탈양자화된 계수들에 적용하여 탈양자화된 계수들(211)을 획득하도록 구성된다. 탈양자화된 계수들(211)은 또한, 탈양자화된 잔차 계수들(211)로 지칭될 수 있고 그리고 통상적으로 양자화에 의한 손실로 인한 변환 계수들과 전형적으로 동일하지는 않지만, 변환 계수들(207)에 대응할 수 있다.
역변환
역변환 프로세싱 유닛(212)은, 샘플 도메인에서 재구성된 잔차 블록(213)(또는 대응하는 탈양자화된 계수들(213))을 획득하기 위해, 변환 프로세싱 유닛(206)에 의해 적용되는 변환의 역변환, 예를 들어 역 이산 코사인 변환(DCT) 또는 역 이산 사인 변환(DST) 또는 다른 역 변환들을 적용하도록 구성된다. 재구성된 잔차 블록(213)은 또한, 변환 블록(213)으로 지칭될 수 있다.
재구성
재구성 유닛(214)(예를 들어, 가산기 또는 합산기(214))은, 예를 들어, 샘플단위로, 재구성된 잔차 블록(213)의 샘플 값들 및 예측 블록(265)의 샘플 값들을 추가함으로써, 샘플 도메인에서 재구성된 블록(215)을 획득하기 위해, 변환 블록(213)(즉, 재구성된 잔차 블록(213))을 예측 블록(265)에 추가하도록 구성된다.
필터링
루프 필터 유닛(220)(또는 짧게 "루프 필터"(220))은, 필터링된 블록(221)을 획득하기 위해, 재구성된 블록(215)을 필터링하도록 또는 일반적으로, 필터링된 샘플 값들을 획득하기 위해, 재구성된 샘플들을 필터링하도록 구성된다. 루프 필터 유닛은, 예를 들어, 픽셀 트랜지션들을 평활화하거나 아니면 비디오 품질을 개선시키도록 구성된다. 루프 필터 유닛(220)은 하나 이상의 루프 필터들, 이를테면 디블록킹 필터, 적응적 샘플 오프셋(SAO; sample-adaptive offset) 필터 또는 하나 이상의 다른 필터들, 예를 들어 적응적 루프 필터(ALF), 잡음 억제 필터(NSF), 또는 이들의 임의의 조합을 포함할 수 있다. 일 예에서, 루프 필터 유닛(220)은 디블록킹 필터, SAO 필터 및 ALF 필터를 포함할 수 있다. 필터링 프로세스의 순서는, 디블로킹 필터, SAO 및 ALF일 수 있다. 다른 예에서, LMCS(luma mapping with chroma scaling)(즉, 적응적 인-루프 리셰이퍼)로 불리는 프로세스가 추가된다. 이 프로세스는 디블록킹 이전에 수행된다. 다른 예에서, 디블록킹 필터 프로세스는 또한, 내부 서브-블록 에지들, 예를 들어, 아핀(affine) 서브-블록 에지들, ATMVP 서브-블록 에지들, 서브-블록 변환(SBT) 에지들 및 인트라 서브-파티션(ISP) 에지들에도 적용될 수 있다. 도 2에서는 루프 필터 유닛(220)이 인 루프 필터(in loop filter)인 것으로 도시되어 있지만, 다른 구성들에서, 루프 필터 유닛(220)은 포스트 루프 필터(post loop filter)로서 구현될 수 있다. 필터링된 블록(221)은 또한, 필터링된 재구성된 블록(221)으로 지칭될 수 있다.
비디오 인코더(20)의 실시예들(각각 루프 필터 유닛(220))은, 예를 들어 직접적으로 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩되는 루프 필터 파라미터들(이를테면 SAO 필터 파라미터들 또는 ALF 필터 파라미터들 또는 LMCS 파라미터들)을 출력하도록 구성될 수 있어, 예를 들어, 디코더(30)는 디코딩을 위해 동일한 루프 필터 파라미터들 또는 개개의 루프 필터들을 수신하고 적용할 수 있다.
디코딩된 픽처 버퍼
디코딩된 픽처 버퍼(DPB)(230)는, 비디오 인코더(20)에 의해 비디오 데이터를 인코딩하기 위한 참조 픽처들 또는 일반적으로 참조 픽처 데이터를 저장하는 메모리일 수 있다. DPB(230)는, 동기식 DRAM(SDRAM), 자기저항 RAM(MRAM), 저항성 RAM(RRAM)을 포함하는 동적 랜덤 액세스 메모리(DRAM), 또는 다른 타입들의 메모리 디바이스들과 같은, 다양한 메모리 디바이스들 중 임의의 것에 의해 형성될 수 있다. 디코딩된 픽처 버퍼(DPB)(230)는 하나 이상의 필터링된 블록들(221)을 저장하도록 구성될 수 있다. 디코딩된 픽처 버퍼(230)는, 동일한 현재 픽처 또는 상이한 픽처들, 예를 들어 이전에 재구성된 픽처들의 다른 이전에 필터링된 블록들, 예를 들어 이전에 재구성되고 필터링된 블록들(221)을 저장하도록 추가로 구성될 수 있고, 그리고 예를 들어 인터 예측을 위해, 완전한 이전에 재구성된, 즉 디코딩된 픽처(및 대응하는 참조 블록들 및 샘플들) 및/또는 부분적으로 재구성된 현재 픽처(및 대응하는 참조 블록들 및 샘플들)를 제공할 수 있다. 디코딩된 픽처 버퍼(DPB)(230)는 또한, 예를 들어, 재구성된 블록(215)이 루프 필터 유닛(220)에 의해 필터링되지 않은 경우, 하나 이상의 필터링되지 않은 재구성된 블록들(215), 또는 일반적으로 필터링되지 않은 재구성된 샘플들, 또는 재구성된 블록들 또는 샘플들의 임의의 다른 추가 프로세싱된 버전을 저장하도록 구성될 수 있다.
모드 선택(파티셔닝 & 예측)
모드 선택 유닛(260)은, 파티셔닝 유닛(262), 인터-예측 유닛(244) 및 인트라-예측 유닛(254)을 포함하고 그리고 하나 또는 복수의 이전에 디코딩된 픽처들로부터의, 예를 들어, 디코딩된 픽처 버퍼(230) 또는 다른 버퍼들(예를 들어, 라인 버퍼, 미도시)로부터의 그리고/또는 동일한 (현재) 픽처의 재구성된 픽처 데이터, 예를 들어, 필터링된 및/또는 필터링되지 않은 재구성된 샘플들 또는 블록들, 및 원본 픽처 데이터, 예를 들어, 원본 블록(203)(현재 픽처(17)의 현재 블록(203))을 수신하거나 획득하도록 구성된다. 재구성된 픽처 데이터는, 예측 블록(265) 또는 예측기(265)를 획득하기 위해, 예측, 예를 들어 인터-예측 또는 인트라-예측을 위한 참조 픽처 데이터로 사용된다.
모드 선택 유닛(260)은, 현재 블록 예측 모드(어떠한 파티셔닝도 포함하지 않음) 및 예측 모드(예를 들어, 인트라 또는 인터 예측 모드)에 대한 파티셔닝을 결정하거나 선택하도록 그리고 잔차 블록(205)의 계산 및 재구성된 블록(215)의 재구성을 위해 사용되는 대응하는 예측 블록(265)을 생성하도록 구성될 수 있다.
모드 선택 유닛(260)의 실시예들은 파티셔닝 및 예측 모드를 (예를 들어, 모드 선택 유닛(260)에 의해 지원되거나 모드 선택 유닛(260)에 대해 이용가능한 것들로부터) 선택하도록 구성될 수 있으며, 이는 최상의 매치 또는 다른 말로, 최소 잔차(최소 잔차는 전송 또는 저장을 위한 더 나은 압축을 의미함) 또는 최소 시그널링 오버헤드(최소 시그널링 오버헤드는 전송 또는 저장을 위한 더 나은 압축을 의미함)를 제공하거나, 또는 이 둘 다를 고려하거나 밸런싱한다. 모드 선택 유닛(260)은, 레이트 왜곡 최적화(RDO)에 기반하여 파티셔닝 및 예측 모드를 결정하도록, 즉 최소 레이트 왜곡을 제공하는 예측 모드를 선택하도록 구성될 수 있다. 이 맥락에서 "더 나은(better)", "최소(minimum)", "최적(optimum)" 등과 같은 용어들이 반드시 전체 "더 나은", "최소", "최적" 등을 나타내는 것은 아니지만, 임계치를 초과하거나 그 미만으로 떨어지는 값 또는 잠재적으로 "차선의(sub-optimum) 선택"을 유도하지만 복잡성과 프로세싱 시간을 감소시키는 다른 제약들과 같은, 종료 또는 선택 기준의 이행을 또한 지칭할 수 있다.
다른 말로, 파티셔닝 유닛(262)은 비디오 시퀀스로부터의 픽처를 코딩 트리 유닛(CTU)들의 시퀀스로 파티셔닝하도록 구성될 수 있고, 그리고 CTU(203)는, 예를 들어, 블록 파티션들 또는 서브-블록들 각각에 대한 예측을 수행하기 위해, 예를 들어, 쿼드-트리-파티셔닝(QT), 바이너리 파티셔닝(BT) 또는 트리플-트리-파티셔닝(TT) 또는 이들의 임의의 조합을 반복적으로 사용하여, 더 작은 블록 파티션들 또는 서브-블록들(다시 블록을 형성함)로 추가로 파티셔닝될 수 있으며, 여기서 모드 선택은 파티셔닝된 블록(203)의 트리-구조의 선택을 포함하고 그리고 예측 모드들은 블록 파티션들 또는 서브-블록들 각각에 적용된다.
다음에서, 예시적인 비디오 인코더(20)에 의해 수행되는 (예를 들어, 파티셔닝 유닛(260)에 의한) 파티셔닝 및 (인터-예측 유닛(244) 및 인트라-예측 유닛(254)에 의한) 예측 프로세싱이 더 상세히 설명될 것이다.
파티셔닝
파티셔닝 유닛(262)은 비디오 시퀀스로부터의 픽처를 코딩 트리 유닛(CTU)들의 시퀀스로 파티셔닝하도록 구성될 수 있고, 그리고 파티셔닝 유닛(262)은 코딩 트리 유닛(CTU)(203)을 더 작은 파티션들, 예를 들어 정사각형 또는 직사각형 크기의 더 작은 블록들로 파티셔닝(또는 세분)할 수 있다. 3개의 샘플 어레이들을 갖는 픽처의 경우, CTU는 크로마 샘플들의 2개의 대응하는 블록들과 함께 루마 샘플들의 N×N 블록으로 구성된다. CTU에서 루마 블록의 최대 허용 크기는 개발중인 VVC(versatile video coding)에서 128×128인 것으로 지정되지만, 이는 미래에는 128×128이 아닌 값, 예를 들어, 256×256으로 지정될 수 있다. 픽처의 CTU들은 슬라이스들/타일 그룹들, 타일들 또는 브릭(brick)들로 클러스터링/그룹화될 수 있다. 타일은 픽처의 직사각형 영역을 커버하며, 타일은 하나 이상의 브릭들로 분할될 수 있다. 브릭은 타일 내에 다수의 CTU 행들로 구성된다. 다수의 브릭들로 파티셔닝되지 않은 타일이 브릭으로 지칭될 수 있다. 그러나, 브릭은 타일의 트루(true) 서브세트이며, 타일로 지칭되지 않는다. VVC에서 지원되는 2개 모드들의 타일 그룹들, 즉 래스터-스캔 슬라이스/타일 그룹 모드 및 직사각형 슬라이스 모드가 존재한다. 래스터-스캔 타일 그룹 모드에서, 슬라이스/타일 그룹은 픽처의 타일 래스터 스캔에서 타일들의 시퀀스를 포함한다. 직사각형 슬라이스 모드에서, 슬라이스는, 픽처의 직사각형 영역을 집합적으로 형성하는, 픽처의 다수의 브릭들을 포함한다. 직사각형 슬라이스 내의 브릭들은 슬라이스의 브릭 래스터 스캔 순서로 있다. 이러한 더 작은 블록들(이는 또한 서브-블록들로 지칭됨)은 훨씬 더 작은 파티션들로 추가로 파티셔닝될 수 있다. 이는 또한, 트리-파티셔닝 또는 계층적 트리-파트셔닝으로 지칭되며, 여기서 예를 들어 루트-트리 레벨 0(계층-레벨 0, 깊이 0)에서, 루트 블록은 재귀적으로 파티셔닝될 수 있는데, 예를 들어, 그 다음 낮은 트리-레벨의 2개 이상의 블록들, 예를 들어 트리-레벨 1(계층-레벨 1, 깊이 1)의 노드들로 파티셔닝될 수 있고, 여기서 이러한 블록들은, 예를 들어, 종료 기준이 충족되었기 때문에, 예를 들어, 최대 트리 깊이 또는 최소 블록 크기에 도달했기 때문에, 파티셔닝이 종료될 때까지, 그 다음 낮은 레벨, 예를 들어 트리-레벨 2(계층-레벨 2, 깊이 2)의 2개 이상의 블록들로 다시 파티셔닝될 수 있는 식일 수 있다. 더 이상 파티셔닝되지 않는 블록들은 또한 트리의 리프-블록들 또는 리프 노드들로 지칭된다. 2개의 파티션들로의 파티셔닝을 사용하는 트리는 바이너리 트리(BT)로 지칭되고, 3개의 파티션들로의 파티셔닝을 사용하는 트리는 터너리-트리(TT)로 지칭되고, 그리고 4개의 파티션들로의 파티셔닝을 사용하는 트리는 쿼드-트리(QT)로 지칭된다.
예를 들어, 코딩 트리 유닛(CTU)은, 루마 샘플들의 CTB, 3개의 샘플 어레이들을 갖는 픽처의 크로마 샘플들의 2개의 대응하는 CTB들, 또는 샘플들을 코딩하는 데 사용되는 신택스 구조들 또는 3개의 별개의 컬러 평면들을 사용하여 코딩되는 픽처 또는 단색 픽처의 샘플들의 CTB일 수 있거나 이를 포함할 수 있다. 이에 상응하여, 코딩 트리 블록(CTB)은, 컴포넌트를 CTB로 분할하는 것이 파티셔닝이도록 N의 일부 값에 대한 샘플들의 N×N 블록일 수 있다. 코딩 유닛(CU)은, 루마 샘플들의 코딩 블록, 3개의 샘플 어레이들을 갖는 픽처의 크로마 샘플들의 2개의 대응하는 코딩 블록들, 또는 샘플들을 코딩하는 데 사용되는 신택스 구조들 또는 3개의 별개의 컬러 평면들을 사용하여 코딩되는 픽처 또는 단색 픽처의 샘플들의 코딩 블록일 수 있거나 이를 포함할 수 있다. 이에 상응하여, 코딩 블록(CB)은, CTB를 코딩 블록들로 분할하는 것이 파티셔닝이도록 N 및 N의 일부 값들에 대한 샘플들의 MxN 블록일 수 있다.
실시예들에서, 예를 들어, HEVC에 따라, 코딩 트리 유닛(CTU)은 코딩 트리로 표시되는 쿼드-트리 구조를 사용함으로써 CU들로 세분될 수 있다. 인터-픽처(시간적) 또는 인트라-픽처(공간적) 예측을 사용하여 픽처 영역을 코딩할지 여부가 리프 CU 레벨에서 판단된다. 각각의 리프 CU는 PU 세분 타입에 따라 1개, 2개 또는 4개의 PU들로 추가로 세분될 수 있다. 하나의 PU 내에서, 동일한 예측 프로세스가 적용되고, 관련 정보는 PU 기준으로 디코더에 전송된다. PU 세분 타입에 기반한 예측 프로세스를 적용함으로써 잔차 블록을 획득한 후, 리프 CU는 CU에 대한 코딩 트리와 유사한 다른 쿼드트리 구조에 따라 변환 유닛(TU)들로 파티셔닝될 수 있다.
실시예들에서, 예를 들어, VVC(Versatile Video Coding)로 지칭되는, 현재 개발 중인 최신 비디오 코딩 표준에 따라, 바이너리 및 터너리 세분 세그멘테이션 구조를 사용하는 결합된 쿼드-트리 네스트형 멀티-타입 트리는, 예를 들어, 코딩 트리 유닛을 파티셔닝하는 데 사용된다. 코딩 트리 유닛 내의 코딩 트리 구조에서, CU는 정사각형 또는 직사각형 형상을 가질 수 있다. 예를 들어, 코딩 트리 유닛(CTU)은 먼저 쿼터너리(quaternary) 트리에 의해 파티셔닝된다. 그런 다음, 쿼터너리 트리 리프 노드들이 멀티-타입 트리 구조에 의해 추가로 파티셔닝될 수 있다. 멀티-타입 트리 구조에는, 수직 바이너리 세분(SPLIT_BT_VER), 수평 바이너리 세분(SPLIT_BT_HOR), 수직 터너리 세분(SPLIT_TT_VER) 및 수평 터너리 세분(SPLIT_TT_HOR)의 4개의 세분 타입들이 존재한다. 멀티-타입 트리 리프 노드들은 코딩 유닛(CU)로 불리며, CU가 최대 변환 길이에 비해 너무 크지 않은 경우, 이 세그먼테이션은 어떠한 추가 파티셔닝도 없이 예측 및 변환 프로세싱에 사용된다. 이는, 대부분의 경우, CU, PU 및 TU가 네스트형 멀티-타입 트리 코딩 블록 구조를 갖는 쿼드트리에서 동일한 블록 크기를 갖는다는 것을 의미한다. 지원되는 최대 변환 길이가 CU의 컬러 성분의 폭 또는 높이보다 작은 경우 예외가 발생한다. VVC는 네스트형 멀티-타입 트리 코딩 트리 구조를 갖는 쿼드트리에서 파티션 세분 정보의 고유한 시그널링 메커니즘을 전개한다. 시그널링 메커니즘에서, 코딩 트리 유닛(CTU)은 쿼터너리 트리의 루트(root)로서 취급되며 먼저 쿼터너리 트리 구조에 의해 파티셔닝된다. 각각의 쿼터너리 트리 리프 노드(이를 허용할 만큼 충분히 큰 경우)는 멀티-타입 트리 구조에 의해 추가로 파티셔닝된다. 멀티-타입 트리 구조에서, 노드가 추가로 파티셔닝되는지 여부를 지시하기 위해 첫 번째 플래그(mtt_split_cu_flag)가 시그널링되고; 노드가 추가로 파티셔닝되는 경우, 세분 방향을 지시하기 위해 두 번째 플래그(mtt_split_cu_vertical_flag)가 시그널링되고, 그런 다음 세분이 바이너리 세분인지 터너리 세분인지를 지시하기 위해 세 번째 플래그(mtt_split_cu_binary_flag)가 시그널링된다. mtt_split_cu_vertical_flag 및 mtt_split_cu_binary_flag의 값들에 기반하여, 미리정의된 규칙 또는 테이블을 기반으로 디코더에 의해 CU의 멀티-타입 트리 슬리팅 모드(MttSplitMode)가 유도될 수 있다. 특정 설계, 예를 들어, VVC 하드웨어 디코더들에서 64×64 루마 블록 및 32×32 크로마 파이프라이닝 설계에 대해, 도 6에 도시된 바와 같이, 루마 코딩 블록의 폭 또는 높이가 64보다 큰 경우, TT 세분은 금지된다는 것이 주목되어야 한다. TT 세분은 또한, 크로마 코딩 블록의 폭 또는 높이가 32보다 큰 경우 또한 금지된다. 파이프라이닝 설계는, 픽처에서의 비-중첩 유닛들로 정의된 가상 파이프라인 데이터 유닛(VPDU)들 픽처를 분할할 것이다. 하드웨어 디코더들에서, 연속하는 VPDU들은 다수의 파이프라인 스테이지들에서 동시에 프로세싱된다. VPDU 크기는, 대부분의 파이프라인 스테이지들에서 버퍼 크기에 대략 비례하므로, VPDU 크기를 작게 유지하는 것이 중요하다. 대부분의 하드웨어 디코더들에서, VPDU 크기는 최대 변환 블록(TB) 크기로 설정될 수 있다. 그러나, VVC에서, 터너리 트리(TT) 및 바이너리 트리(BT) 파티션은 VPDU들의 크기 증가를 유도할 수 있다. 또한, 트리 노드 블록의 일부가 하단 또는 우측 픽처 경계를 초과하는 경우, 트리 노드 블록은, 각가의 모든 코딩된 CU의 모든 샘플들이 픽처 경계들 내부에 위치될 때까지 강제로 세분된다는 것이 주목되어야 한다.
예로서, ISP(Intra Sub-Partitions) 툴은 블록 크기에 따라 루마 인트라-예측 블록을 수직으로 또는 수평으로 2개 또는 4개의 서브-파티션들로 분할할 수 있다.
일 예에서, 비디오 인코더(20)의 모드 선택 유닛(260)은 본원에 설명된 파티셔닝 기법들의 임의의 조합을 수행하도록 구성될 수 있다.
위에서 설명된 바와 같이, 비디오 인코더(20)는 한 세트의 (예를 들어, 미리결정된) 예측 모드들로부터 최상의 또는 최적의 예측 모드를 결정하거나 선택하도록 구성된다. 세트의 예측 모드들은, 예를 들어, 인트라-예측 모드들 및/또는 인터-예측 모드들을 포함할 수 있다.
인트라-예측
세트의 인트라-예측 모드들은, 35개의 상이한 인트라-예측 모드들, 예를 들어 DC(또는 산술평균(mean)) 모드 및 평면 모드와 같은 비-방향성 모드들, 또는 예를 들어 HEVC에 정의된 바와 같은 방향성 모드를 포함할 수 있거나, 또는 67개의 상이한 인트라-예측 모드들, 예를 들어, DC(또는 산술평균) 모드 및 평면 모드와 같은 비-방향성 모드들, 또는 예를 들어 VVC에 대해 정의된 바와 같은 방향성 모드들을 포함할 수 있다. 예로서, 몇몇 종래의 각도 인트라 예측 모드들은, 예를 들어 VVC에 정의된 바와 같은, 비-정사각 블록들에 대한 광각(wide-angle) 인트라 예측 모드들로 적응적으로 교체된다. 다른 예로서, DC 예측에 대한 나눗셈 연산들을 회피하기 위해, 더 긴 측만이 비-정사각 블록들의 평균(average)을 계산하는 데 사용된다. 그리고, 평면 모드의 인트라 예측의 결과들은 PDPC(position dependent intra prediction combination) 방법에 의해 추가로 수정될 수 있다.
인트라-예측 유닛(254)은, 세트의 인트라-예측 모드들 중의 인트라-예측 모드에 따라, 인트라-예측 블록(265)을 생성하기 위해 동일한 현재 픽처의 이웃 블록들의 재구성된 샘플들을 사용하도록 구성된다.
인트라 예측 유닛(254)(또는 일반적으로, 모드 선택 유닛(260))은 추가로, 인트라-예측 파라미터들(또는 일반적으로, 블록에 대한 선택된 인트라 예측 모드를 지시하는 정보)를, 인코딩된 픽처 데이터(21)에 포함시키기 위해 신택스 엘리먼트들(266)의 형태로 엔트로피 인코딩 유닛(270)에 출력하도록 구성되고, 이로써, 예를 들어, 비디오 디코더(30)가 예측 파라미터들을 수신하고 디코딩을 위해 사용할 수 있다.
인터-예측
세트의 (또는 가능한) 인터-예측 모드들은, 이용가능한 참조 픽처들(즉, 예를 들어 DBP(230)에 저장된 이전의 적어도 부분적으로 디코딩된 픽처들) 및 다른 인터-예측 파라미터들, 예를 들어, 참조 픽처의 전체 또는 참조 픽처의 오직 일부(예를 들어, 현재 블록 영역 주변의 서치 윈도우 영역)만이 가장 매칭하는 참조 블록을 서치하는 데 사용되는지 여부, 및/또는 예를 들어, 픽셀 보간이 적용되는지 여부, 예를 들어 하프/세미-pel, 쿼터-pel 및/또는 1/16 pel 보간이 적용되는지 또는 적용되지 않는지 여부에 의존한다.
위의 예측 모드에 추가하여, 스킵 모드, 다이렉트 모드가 적용될 수 있다.
인터 예측 유닛(244)은 모션 추정(ME) 유닛 및 모션 보상(MC) 유닛(둘 다 도 2에 도시되지 않음)을 포함할 수 있다. 모션 추정 유닛은, 모션 추정을 위해, 픽처 블록(203)(현재 픽처(17)의 현재 픽처 블록(203)) 및 디코딩된 픽처(231)를, 또는 적어도 하나 또는 복수의 이전에 재구성된 블록들, 예를 들어, 하나 또는 복수의 다른/상이한 이전에 디코딩된 픽처들(231)의 재구성된 블록들을 수신하거나 또는 획득하도록 구성될 수 있다. 예를 들어, 비디오 시퀀스는 현재 픽처 및 이전에 디코딩된 픽처들(231)을 포함할 수 있거나, 또는 다른 말로, 현재 픽처 및 이전에 디코딩된 픽처들(231)은 비디오 시퀀스를 형성하는 픽처들의 시퀀스의 일부이거나 이를 형성할 수 있다.
인코더(20)는, 예를 들어, 복수의 다른 픽처들의 동일한 또는 상이한 픽처들의 복수의 참조 블록들로부터 참조 블록을 선택하고 그리고 참조 픽처(또는 참조 픽처 인덱스), 및/또는 참조 블록의 포지션(x, y 좌표들)과 현재 블록의 포지션 사이의 오프셋(공간적 오프셋)을 인터 예측 파라미터들로서 모션 추정 유닛에 제공하도록 구성될 수 있다. 이 오프셋은 또한 모션 벡터(MV)라 불린다.
모션 보상 유닛은, 인터 예측 파라미터를 획득하고, 예를 들어 수신하고 그리고 인터 예측 파라미터에 기반하거나 또는 이를 사용하여 인터 예측을 수행하여 인터 예측 블록(265)을 획득하도록 구성된다. 모션 보상 유닛에 의해 수행되는 모션 보상은, 모션 추정에 의해 결정되는 모션/블록 벡터에 기반하여 예측 블록을 페칭하거나 또는 생성하는 것, 가능하게는 서브-픽셀 정밀도에 대한 보간들을 수행하는 것을 수반할 수 있다. 보간 필터링은, 알려진 픽셀 샘플들로부터 추가적인 픽셀 샘플들을 생성할 수 있으며, 따라서 잠재적으로 픽처 블록을 코딩하는 데 사용될 수 있는 후보 예측 블록들의 수를 증가시킬 수 있다. 현재 픽처 블록의 PU에 대한 모션 벡터를 수신한 때에, 모션 보상 유닛은, 참조 픽처 리스트들 중 하나에서 모션 벡터가 가리키는 예측 블록의 위치를 찾을 수 있다.
모션 보상 유닛은 또한, 비디오 슬라이스의 픽처 블록들을 디코딩할 시에, 비디오 디코더(30)에 의한 사용을 위해 블록들 및 비디오 슬라이스들과 연관된 신택스 엘리먼트들을 생성할 수 있다. 슬라이스들 및 개개의 신택스 엘리먼트들에 추가하여 또는 이에 대한 대안으로, 타일 그룹들 및/또는 타일들 및 개개의 신택스 엘리먼트들이 생성되거나 사용될 수 있다.
엔트로피 코딩
엔트로피 인코딩 유닛(270)은, 예를 들어, 엔트로피 인코딩 알고리즘 또는 방식(예를 들어, 가변 길이 코딩(VLC) 방식, 이진화, CABAC(context adaptive binary arithmetic coding), SBAC(syntax-based context-adaptive binary arithmetic coding), PIPE(probability interval partitioning entropy) 코딩 또는 다른 엔트로피 인코딩 방법론 또는 기법)을 적용하거나, 또는 양자화된 계수들(209), 인터 예측 파라미터들, 인트라 예측 파라미터들, 루프 필터 파라미터들 및/또는 다른 신택스 엘리먼트들에 대해 우회(압축 없음)하여, 예를 들어 인코딩된 비트스트림(21)의 형태로, 출력(272)을 통해 출력될 수 있는 인코딩된 픽처 데이터(21)를 획득하도록 구성되고, 이로써, 예를 들어, 비디오 디코더(30)가 디코딩을 위한 파라미터들을 수신하고 사용할 수 있다. 인코딩된 비트스트림(21)은 비디오 디코더(30)에 전송되거나 또는 비디오 디코더(30)에 의한 나중의 전송 또는 검색을 위해 메모리에 저장될 수 있다.
비디오 인코더(20)의 다른 구조적 변경들이 비디오 스트림을 인코딩하는데 사용될 수 있다. 예를 들어, 비-변환 기반 인코더(20)는 특정 블록들 또는 프레임들에 대한 변환 프로세싱 유닛(206) 없이 직접 잔차 신호를 양자화할 수 있다. 다른 구현에서, 인코더(20)는 단일 유닛으로 결합된 양자화 유닛(208) 및 역양자화 유닛(210)을 가질 수 있다.
디코더 및 디코딩 방법
도 3은 본 출원의 기법들을 구현하도록 구성된 비디오 디코더(30)의 예를 도시한다. 비디오 디코더(30)는, 예를 들어 인코더(20)에 의해 인코딩된, 인코딩된 픽처 데이터(21)(예를 들어, 인코딩된 비트스트림(21))를 수신하여, 디코딩된 픽처(331)를 획득하도록 구성된다. 인코딩된 픽처 데이터 또는 비트스트림은, 인코딩된 픽처 데이터, 예를 들어 인코딩된 비디오 슬라이스(및/또는 타일 그룹들 또는 타일들)의 픽처 블록들 및 연관된 신택스 엘리먼트들을 표현하는 데이터를 디코딩하기 위한 정보를 포함한다.
도 3의 예에서, 디코더(30)는 엔트로피 디코딩 유닛(304), 역양자화 유닛(310), 역변환 프로세싱 유닛(312), 재구성 유닛(314)(예를 들어, 합산기(314)), 루프 필터(320), 디코딩된 픽처 버퍼(DBP)(330), 모드 적용 유닛(360), 인터 예측 유닛(344) 및 인트라 예측 유닛(354)을 포함한다. 인터 예측 유닛(344)은 모션 보상 유닛일 수 있거나 또는 이를 포함할 수 있다. 비디오 디코더(30)는, 일부 예들에서, 도 2로부터 비디오 인코더(100)에 대해 설명된 인코딩 패스와 일반적으로 상반되는 디코딩 패스를 수행할 수 있다.
인코더(20)와 관련하여 설명된 바와 같이, 역양자화 유닛(210), 역변환 프로세싱 유닛(212), 재구성 유닛(214), 루프 필터(220), 디코딩된 픽처 버퍼(DPB)(230), 인터 예측 유닛(344) 및 인트라 예측 유닛(354)은 또한, 비디오 인코더(20)의 "내장 디코더"를 형성하는 것으로 또한 지칭된다. 이에 따라, 역양자화 유닛(310)은 역양자화 유닛(110)과 기능이 동일할 수 있으며, 역변환 프로세싱 유닛(312)은 역변환 프로세싱 유닛(212)과 기능이 동일할 수 있고, 재구성 유닛(314)은 재구성 유닛(214)과 기능이 동일할 수 있고, 루프 필터(320)는 루프 필터(220)와 기능이 동일할 수 있고, 그리고 디코딩된 픽처 버퍼(330)는 디코딩된 픽처 버퍼(230)와 기능이 동일할 수 있다. 따라서, 비디오(20) 인코더의 개개의 유닛들 및 기능들에 대해 제공되는 설명들은, 비디오 디코더(30)의 개개의 유닛들 및 기능들에 대응하게 적용된다.
엔트로피 디코딩
엔트로피 디코딩 유닛(304)은, 비트스트림(21)(또는 일반적으로, 인코딩된 픽처 데이터(21))을 파싱하고 그리고 예를 들어, 인코딩된 픽처 데이터(21)에 대해 엔트로피 디코딩을 수행하여, 예를 들어, 양자화된 계수들(309) 및/또는 디코딩된 코딩 파라미터들(도 3에 도시되지 않음), 예를 들어, 인터 예측 파라미터들(예를 들어, 참조 픽처 인덱스 및 모션 벡터), 인트라 예측 파라미터(예를 들어, 인트라 예측 모드 또는 인덱스), 변환 파라미터들, 양자화 파라미터들, 루프 필터 파라미터들 및/또는 다른 신택스 엘리먼트들 중 임의의 것 또는 이 모두를 획득하도록 구성된다. 엔트로피 디코딩 유닛(304)은, 인코더(20)의 엔트로피 인코딩 유닛(270)과 관련하여 설명된 바와 같은 인코딩 방식들에 대응하는 디코딩 알고리즘들 또는 방식들을 적용하도록 구성될 수 있다. 엔트로피 디코딩 유닛(304)은 추가로, 모드 적용 유닛(360)에 인터 예측 파라미터들, 인트라 예측 파라미터 및/또는 다른 신택스 엘리먼트들을 제공하고 그리고 디코더(30)의 다른 유닛들에 다른 파라미터들을 제공하도록 구성될 수 있다. 비디오 디코더(30)는 비디오 슬라이스 레벨 및/또는 비디오 블록 레벨에서 신택스 엘리먼트들을 수신할 수 있다. 슬라이스들 및 개개의 신택스 엘리먼트들에 추가하여 또는 이에 대한 대안으로, 타일 그룹들 및/또는 타일들 및 개개의 신택스 엘리먼트들이 수신되고 그리고/또는 사용될 수 있다.
역양자화
역양자화 유닛(310)은, (예를 들어, 파싱 및/또는 디코딩에 의해, 예를 들어 엔트로피 디코딩 유닛(304)에 의해) 인코딩된 픽처 데이터(21)로부터 양자화된 계수들 및 양자화 파라미터들(QP)(또는 일반적으로, 역양자화와 관련된 정보)을 수신하고 그리고 양자화 파라미터들에 기반하여, 디코딩된 양자화 계수(309)에 역양자화를 적용하여 탈양자화된 계수들(311)(이는 또한, 변환 계수들(311)로 지칭됨)을 획득하도록 구성될 수 있다. 역양자화 프로세스는, 양자화의 정도, 그리고 마찬가지로, 적용해야 하는 역양자화의 정도를 결정하기 위해, 비디오 슬라이스(또는 타일 또는 타일 그룹)의 각각의 비디오 블록에 대해 비디오 인코더(20)에 의해 결정된 양자화 파라미터의 사용을 포함할 수도 있다.
역변환
역변환 프로세싱 유닛(312)은, 또한 변환 계수들(311)로 지칭되는 탈양자화된 계수들(311)를 수신하고 그리고 탈양자화된 계수들(311)에 변환을 적용하여, 샘플 도메인에서 재구성된 잔차 블록들(213)을 획득하도록 구성될 수 있다. 재구성된 잔차 블록들(213)은 또한, 변환 블록들(313)로 지칭될 수 있다. 변환은 역변환, 예를 들어, 역 DCT, 역 DST, 역 정수 변환, 또는 개념적으로 유사한 역변환 프로세스일 수 있다. 역변환 프로세싱 유닛(312)은 추가로, 탈양자화된 계수들(311)에 적용될 변환을 결정하기 위해, (예를 들어, 예를 들어 엔트로피 디코딩 유닛(304)에 의한, 파싱 및/또는 디코딩에 의해) 인코딩된 픽처 데이터(21)로부터 변환 파라미터들 또는 대응하는 정보를 수신하도록 구성될 수 있다.
재구성
재구성 유닛(314)(예를 들어, 가산기 또는 합산기(314))은, 예를 들어, 재구성된 잔차 블록(313)의 샘플 값들 및 예측 블록(365)의 샘플 값들을 추가함으로써, 샘플 도메인에서 재구성된 블록(315)을 획득하기 위해, 재구성된 잔차 블록(313)을 예측 블록(365)에 추가하도록 구성될 수 있다.
필터링
(코딩 루프 내의 또는 코딩 루프 이후의) 루프 필터 유닛(320)은, 필터링된 블록(321)을 획득하기 위해, 예를 들어 픽셀 트랜지션들을 평활화하거나 또는 그렇지 않으면 비디오 품질을 개선시키기 위해, 재구성된 블록(315)을 필터링하도록 구성된다. 루프 필터 유닛(320)은 하나 이상의 루프 필터들, 이를테면 디-블록킹 필터, 샘플 적응 오프셋(SAO) 필터 또는 하나 이상의 다른 필터들, 예를 들어 적응 루프 필터(ALF), 잡음 억제 필터(NSF), 또는 이들의 임의의 조합을 포함할 수 있다. 일 예에서, 루프 필터 유닛(220)은 디-블록킹 필터, SAO 필터 및 ALF 필터를 포함할 수 있다. 필터링 프로세스의 순서는, 디블로킹 필터, SAO 및 ALF일 수 있다. 다른 예에서, LMCS(luma mapping with chroma scaling)(즉, 적응형 인-루프 리셰이퍼)로 불리는 프로세스가 추가된다. 이 프로세스는 디블록킹 이전에 수행된다. 다른 예에서, 디블록킹 필터 프로세스는 또한, 내부 서브-블록 에지들, 예를 들어, 아핀(affine) 서브-블록 에지들, ATMVP 서브-블록 에지들, 서브-블록 변환(SBT) 에지들 및 인트라 서브-파티션(ISP) 에지들에도 적용될 수 있다. 도 3에서는 루프 필터 유닛(320)이 인 루프 필터(in loop filter)인 것으로 도시되어 있지만, 다른 구성들에서, 루프 필터 유닛(320)은 포스트 루프 필터(post loop filter)로서 구현될 수 있다.
디코딩된 픽처 버퍼
그런 다음, 픽처의 디코딩된 비디오 블록(321)이 디코딩된 픽처 버퍼(330)에 저장되고, 디코딩된 픽처 버퍼(330)는, 디코딩된 픽처들(331)을, 다른 픽처들에 대한 후속 모션 보상을 위한 및/또는 출력을 각각 디스플레이하기 위한 참조 픽처들로서 저장한다.
디코더(30)는, 디코딩된 픽처(311)를, 예를 들어 출력(312)을 통해, 사용자에게 제시하기 위해 또는 사용자에게 보여주기 위해 출력하도록 구성된다.
예측
인터 예측 유닛(344)은 인터 예측 유닛(244)(특히 모션 보상 유닛)과 동일할 수 있고, 그리고 인트라 예측 유닛(354)은, 인터 예측 유닛(254)과 기능이 동일할 수 있고 그리고 (예를 들어, 파싱 및/또는 디코딩에 의해, 예를 들어, 엔트로피 디코딩 유닛(304)에 의해) 인코딩된 픽처 데이터(21)로부터 수신된 파티셔닝 및/또는 예측 파라미터들 또는 개개의 정보에 기반하여, 세분 또는 파티셔닝 판단들 및 예측을 수행한다. 모드 적용 유닛(360)은, 재구성된 픽처들, 블록 또는 개개의 샘플들(필터링되거나 필터링되지 않음)에 기반하여 블록 당 예측(인트라 또는 인터 예측)을 수행하여 예측 블록(365)을 획득하도록 구성될 수 있다.
비디오 슬라이스가 인트라 코딩된(I) 슬라이스로서 코딩되는 경우, 모드 적용 유닛(360)의 인트라 예측 유닛(354)은, 현재 픽처의 이전에 디코딩된 블록들로부터의 데이터 및 시그널링된 인트라 예측 모드에 기반하여, 현재 비디오 슬라이스의 픽처 블록에 대한 예측 블록(365)을 생성하도록 구성된다. 비디오 픽처가 인터 코딩된(즉, B 또는 P) 슬라이스로서 코딩되는 경우, 모드 적용 유닛(360)의 인터 예측 유닛(344)(예를 들어, 모션 보상 유닛)은, 엔트로피 디코딩 유닛(304)으로부터 수신된 모션 벡터들 및 다른 신택스 엘리먼트들에 기반하여 현재 비디오 슬라이스의 비디오 블록에 대한 예측 블록들(365)을 생성하도록 구성된다. 인터 예측에 대해, 예측 블록들은 참조 픽처 리스트들 중 하나의 참조 픽처 리스트 내의 참조 픽처들 중 하나로부터 생성될 수 있다. 비디오 디코더(30)는, DPB(330)에 저장된 참조 픽처들에 기반하여 디폴트 구성 기법들을 사용하여 참조 프레임 리스트들, 즉, 리스트 0 및 리스트 1을 구성할 수 있다. 동일하거나 유사한 것은, 슬라이스들(예를 들어, 비디오 슬라이스들)에 추가로 또는 대안적으로 타일 그룹들(예를 들어, 비디오 타일 그룹들) 및/또는 타일들(예를 들어, 비디오 타일들)을 사용하는 실시예들에 대해 또는 이 실시예에 의해 적용될 수 있고, 예를 들어, 비디오는 I, P 또는 B 타일 그룹들 및/또는 타일들을 사용하여 코딩될 수 있다.
모드 적용 유닛(360)은, 모션 벡터들 또는 관련된 정보 및 다른 신택스 엘리먼트들을 파싱함으로써 현재 비디오 슬라이스의 비디오 블록에 대한 예측 정보를 결정하도록 구성되고 그리고 디코딩되는 현재 비디오 블록에 대한 예측 블록들을 생성하기 위해 예측 정보를 사용한다. 예를 들어, 모션 적용 유닛(360)은, 비디오 슬라이스의 비디오 블록들을 코딩하기 위해 사용되는 예측 모드(예를 들어, 인트라 또는 인터 예측), 인터 예측 슬라이스 타입(예를 들어, B 슬라이스, P 슬라이스 또는 GPB 슬라이스), 슬라이스에 대한 참조 픽처 리스트들 중 하나 이상의 것에 대한 구성 정보, 슬라이스의 각각의 인터 인코딩된 비디오 블록에 대한 모션 벡터들, 슬라이스의 각각의 인터 코딩된 비디오 블록에 대한 인터 예측 상태, 및 현재 비디오 슬라이스 내의 비디오 블록들을 디코딩하기 위한 다른 정보를 결정하기 위해, 수신된 신택스 엘리먼트들 중 일부를 사용한다. 동일하거나 유사한 것은, 슬라이스들(예를 들어, 비디오 슬라이스들)에 추가로 또는 대안적으로 타일 그룹들(예를 들어, 비디오 타일 그룹들) 및/또는 타일들(예를 들어, 비디오 타일들)을 사용하는 실시예들에 대해 또는 이 실시예에 의해 적용될 수 있고, 예를 들어, 비디오는 I, P 또는 B 타일 그룹들 및/또는 타일들을 사용하여 코딩될 수 있다.
도 3에 도시된 비디오 디코더(30)의 실시예들은, 슬라이스들(또한, 비디오 슬라이스들로 지칭됨)을 사용함으로써 픽처를 파티셔닝 및/또는 디코딩하도록 구성될 수 있고, 여기서 픽처는 하나 이상의 슬라이스들(전형적으로 비-중첩)로 파티셔닝되거나 또는 이들을 사용하여 디코딩될 수 있고, 그리고 각각의 슬라이스는 하나 이상의 블록들(예를 들어, CTU들) 또는 하나 이상의 그룹들의 블록들(예를 들어, 타일들(H.265/HEVC 및 VVC) 또는 브릭들(VVC))을 포함할 수 있다.
도 3에 도시된 비디오 디코더(30)의 실시예들은 추가로, 슬라이스들/타일 그룹들(또한 비디오 타일 그룹들로 지칭됨) 및/또는 타일들(또한 비디오 타일들로 지칭됨)을 사용함으로써 픽처를 파티셔닝 및/또는 디코딩하도록 구성될 수 있고, 여기서 픽처는 하나 이상의 슬라이스들/타일 그룹들(전형적으로 비-중첩)로 파티셔닝되거나 또는 이들을 사용하여 디코딩될 수 있으며, 각각의 슬라이스/타일 그룹은 예를 들어 하나 이상의 블록들(예를 들어, CTU들) 또는 하나 이상의 타일들을 포함할 수 있으며, 각각의 타일은, 예를 들어 직사각형 형상일 수 있으며 하나 이상의 블록들(예를 들어, CTU들), 예를 들어 완전 또는 분수 블록들을 포함할 수 있다.
비디오 디코더(30)의 다른 변형들은 인코딩된 픽처 데이터(21)를 디코딩하는 데 사용될 수 있다. 예를 들어, 디코더(30)는 루프 필터링 유닛(320) 없이 출력 비디오 스트림을 생성할 수 있다. 예를 들어, 비-변환 기반 디코더(30)는 특정 블록들 또는 프레임들에 대한 역변환 프로세싱 유닛(312) 없이 직접 잔차 신호를 역양자화할 수 있다. 다른 구현에서, 비디오 디코더(30)는, 단일 유닛으로 결합되는 역양자화 유닛(310) 및 역변환 프로세싱 유닛(312)을 가질 수 있다.
인코더(20) 및 디코더(30)에서, 현재 단계의 프로세싱 결과가 추가로 프로세싱된 다음, 그 다음 단계에 출력될 수 있음을 이해해야 한다. 예를 들어, 보간 필터링, 모션 벡터 유도 또는 루프 필터링 후에, 클립 또는 시프트와 같은 추가 연산이 보간 필터링, 모션 벡터 유도 또는 루프 필터링의 프로세싱 결과에 대해 수행될 수 있다.
현재 블록의 유도된 모션 벡터들(이로 제한되는 것은 아니지만, 아핀 모드의 제어 포인트 모션 벡터들, 아핀, 평면, ATMVP 모드들의 서브-블록 모션 벡터들, 시간 모션 벡터들 등을 포함)에 추가 연산들이 적용될 수 있음이 주목되어야 한다. 예를 들어, 모션 벡터의 값은 그를 표현하는 비트에 따라 미리정의된 범위로 제한된다. 모션 벡터의 표현 비트가 bitDepth이면, 범위는 -2^(bitDepth-1) ~ 2^(bitDepth-1)-1이며, 여기서 "^"는 지수화를 의미한다. 예를 들어, bitDepth가 16과 동일하게 설정되는 경우, 범위는 -32768 ~ 32767이고; bitDepth가 18과 동일하게 설정되는 경우, 범위는 -131072~131071이다. 예를 들어, 유도된 모션 벡터의 값(예를 들어, 하나의 8×8 블록 내에 4개의 4×4 서브-블록들의 MV들)은, 4개의 4×4 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 N 픽셀들을 초과하지 않게, 이를테면1 픽셀을 초과하지 않도록 제한된다. 여기서는, bitDepth에 따라 모션 벡터를 제한하기 위한 2개의 방법들을 제공한다.
도 4는 본 개시내용의 실시예에 따른 비디오 코딩 디바이스(400)의 개략도이다. 비디오 코딩 디바이스(400)는 본원에 개시되는 바와 같은 개시된 실시예들을 구현하는데 적합하다. 일 실시예에서, 비디오 코딩 디바이스(400)는 도 1a의 비디오 디코더(30)와 같은 디코더 또는 도 1a의 비디오 인코더(20)와 같은 인코더일 수 있다.
비디오 코딩 디바이스(400)는, 데이터를 수신하기 위한 입구 포트들(410)(또는 입력 포트들(410)) 및 수신기 유닛들(Rx)(420); 데이터를 프로세싱하기 위한 프로세서, 논리 유닛, 또는 CPU(central processing unit)(430); 데이터를 전송하기 위한 전송기 유닛들(Tx)(440) 및 출구 포트들(450)(또는 출력 포트들(450)); 및 데이터를 저장하기 위한 메모리(460)를 포함한다. 비디오 코딩 디바이스(400)는 또한, 광학 또는 전기 신호들의 유출 또는 유입을 위한 입구 포트들(410), 수신기 유닛들(420), 전송기 유닛들(440) 및 출구 포트들(450)에 커플링되는 광학-전기(OE: optical-to-electrical) 컴포넌트들 및 전기-광학(EO: electrical-to-optical) 컴포넌트들을 포함할 수 있다.
프로세서(430)는 하드웨어 및 소프트웨어로 구현된다. 프로세서(430)는 하나 이상의 CPU 칩들, 코어들(예를 들어, 멀티-코어 프로세서), FPGA들, ASIC들 및 DSP들로서 구현될 수 있다. 프로세서(430)는 입구 포트들(410), 수신기 유닛들(420), 전송기 유닛들(440), 출구 포트들(450), 및 메모리(460)와 통신한다. 프로세서(430)는 코딩 모듈(470)을 포함한다. 코딩 모듈(470)은 위에서 설명된 개시된 실시예들을 구현한다. 예를 들어, 코딩 모듈(470)은 다양한 코딩 동작들을 구현하거나, 프로세싱하거나, 준비하거나 또는 제공한다. 따라서, 코딩 모듈(470)의 포함은, 비디오 코딩 디바이스(400)의 기능에 대한 실질적인 개선을 제공하고 그리고 비디오 코딩 디바이스(400)의 상이한 상태로의 변환에 영향을 미친다. 대안적으로, 코딩 모듈(470)은, 메모리(460)에 저장되고 그리고 프로세서(430)에 의해 실행되는 명령들로서 구현된다.
메모리(460)는, 하나 이상의 디스크들, 테이프 드라이브들 및 솔리드-스테이트 드라이브들을 포함할 수 있으며 그리고 프로그램들이 실행을 위해 선택될 때 그러한 프로그램들을 저장하고 그리고 프로그램 실행 중에 판독한 명령들 및 데이터를 저장하기 위한 오버-플로우 데이터 저장 디바이스로서 사용될 수 있다. 메모리(460)는, 예를 들어, 휘발성 및/또는 비휘발성일 수 있고 그리고 ROM(read-only memory), RAM(random access memory), TCAM(ternary content-addressable memory) 및/또는 SRAM(static random-access memory)일 수 있다.
도 5는 예시적인 실시예에 따라 도 1로부터의 소스 디바이스(12)와 목적지 디바이스(14) 중 하나 또는 둘 다로서 사용될 수 있는 장치(500)의 간략화된 블록도이다.
장치(500)의 프로세서(502)는 중앙 프로세싱 유닛일 수 있다. 대안적으로, 프로세서는(502)는 현재-존재하거나 이후에 전개되는 정보를 조작 또는 프로세싱할 수 있는 임의의 다른 타입의 디바이스 또는 다수의 디바이스들일 수 있다. 개시된 구현들이 도시된 바와 같은 단일 프로세서, 예를 들어, 프로세서(502)를 이용하여 실시될 수 있지만, 속도 및 효율에서의 이점들은 1개 초과의 프로세서를 사용하여 달성될 수 있다.
장치(500) 내의 메모리(504)는 일 구현에서 ROM(read only memory) 디바이스 또는 RAM(random access memory) 디바이스일 수 있다. 임의의 다른 적합한 타입의 저장 디바이스가 메모리(504)로서 사용될 수 있다. 메모리(504)는 버스(512)를 사용하여 프로세서(502)에 의해 액세스되는 코드 및 데이터(506)를 포함할 수 있다. 메모리(504)는 운영 시스템(508) 및 애플리케이션 프로그램들(510)을 더 포함할 수 있고, 애플리케이션 프로그램들(510)은 프로세서(502)가 본원에 설명되는 방법들을 수행하게 허용하는 적어도 하나의 프로그램을 포함한다. 예를 들어, 애플리케이션 프로그램들(510)은, 본원에서 설명되는 방법들을 수행하는 비디오 코딩 애플리케이션을 더 포함하는 애플리케이션들 1 내지 N을 포함할 수 있다.
장치(500)는 또한, 디스플레이(518)와 같은 하나 또는 그 초과의 출력 디바이스들을 포함할 수 있다. 일 예에서, 디스플레이(518)는 터치 입력들을 감지하도록 동작가능한 터치 감지 엘리먼트와 디스플레이를 결합한 터치 감지 디스플레이일 수 있다. 디스플레이(518)은 버스(512)를 통해 프로세서(502)에 커플링될 수 있다.
단일 버스로서 본원에서 도시되지만, 장치(500)의 버스(512)는 다수의 버스들로 구성될 수 있다. 추가로, 2차 저장부(514)는, 장치(500)의 다른 컴포넌트들에 직접 커플링될 수 있거나 또는 네트워크를 통해 액세스될 수 있으며, 메모리 카드와 같은 단일의 통합된 유닛 또는 다수의 메모리 카드들과 같은 다수의 유닛들을 포함할 수 있다. 따라서, 장치(500)는 광범위하게 다양한 구성들로 구현될 수 있다.
다음은 일부 관련 예들이며, JVET 회의 문서 JVET-N1002를 참조로 사용하고 있음이 주목된다.
I. 병합 예측:
병합 후보 리스트는 다음의 5가지 타입들의 후보들을 순서대로 포함하여 구성된다:
1) 공간적 이웃 CU들의 공간적 MVP
2) 병치된(collocated) CU들의 시간적 MVP
3) FIFO 테이블로부터의 히스토리-기반 MVP
4) 쌍별 평균 MVP
5) 제로 MV들.
병합 리스트의 크기는 슬라이스 헤더에 시그널링되며, 병합 리스트의 최대 허용 크기는 정수이며, 예를 들어 그 수는 6일 수 있다. 병합 모드의 각각의 CU 코드에 대해, 최상의 병합 후보의 인덱스가 인코딩된다. 이 세션에서는 병합 후보들의 각각의 카테고리의 생성 프로세스가 제공된다.
(1) 공간적 후보 유도
예로서, 도 6에 도시된 포지션들에 위치된 후보들 중에서 최대 4개의 병합 후보들이 선택된다. 유도 순서는 A0, B0, B1, A1 및 B2이다. 포지션 B2는, 포지션 A0, B0, B1, A1의 임의의 CU가 (예를 들어, 그것이 다른 슬라이스 또는 타일에 속하기 때문에) 이용가능하지 않은 경우 또는 인트라 코딩된 경우에만 고려된다. 포지션 A1에서의 후보가 추가된 후에, 나머지 후보들의 추가는, 동일한 모션 정보를 가진 후보들이 리스트에서 제외되는 것을 보장하는 리던던시 체크로 처리된다. 실현가능한 구현에서, 도 7에서 화살표로 연결된 쌍들만이 고려되고 그리고 후보는, 리던던시 체크에 사용되는 대응하는 후보가 동일한 모션 정보가 아닌 경우에만 리스트에 추가된다.
(2) 시간적 후보 유도
예로서, 단지 하나의 후보만이 리스트에 추가된다. 특히, 이 시간적 병합 후보의 유도에서, 스케일링된 모션 벡터는 병치된 참조 픽처에 속하는 병치된 CU에 기반하로 유도된다. 병치된 CU의 유도에 사용될 참조 픽처 리스트는 슬라이스 헤더에서 명시적으로 시그널링된다. 시간적 병합 후보에 대한 스케일링된 모션 벡터는 도 8에서 점선으로 예시된 바와 같이 획득되며, 이는 POC 거리, tb 및 td를 사용하여 병치된 CU의 모션 벡터로부터 스케일링되며, 여기서, tb는 현재 픽처의 참조 픽처와 현재 픽처 간의 POC 차이인 것으로 정의되고, 그리고 td는 병치된 픽처의 참조 픽처와 병치된 픽처 간의 POC 차이인 것으로 정의된다. 시간적 병합 후보의 참조 픽처 인덱스는 제로와 동일하게 설정된다.
POC(Picture Order Count)는, 각각의 픽처와 연관된 변수를 의미하고, CVS(Coded Video Sequence)의 모든 픽처들 중에서 연관된 픽처를 고유하게 식별하고, 그리고 연관된 픽처가 디코딩된 픽처 버퍼로부터 출력될 경우, 디코딩된 픽처 버퍼로부터 출력될 동일한 CVS에서의 다른 픽처들의 출력 순서 포지션들에 대한 출력 순서로 연관된 픽처의 포지션을 지시한다는 것이 주목된다.
(3) 히스토리-기반 병합 후보들 유도
HMVP(History-Based MVP) 병합 후보들은 공간적 MVP 및 TMVP 후에 병합 리스트에 추가된다. 이전에 코딩된 블록의 모션 정보는 테이블에 저장되고 현재 CU에 대한 MVP로서 사용된다. 다수의 HMVP 후보들을 갖는 테이블은 인코딩/디코딩 프로세스 동안 유지된다. 테이블은 새로운 CTU 행이 발견될 때 리셋된다. 비-서브블록 인터- 코딩된 CU가 존재할 때마다, 연관된 모션 정보는 새로운 HMVP 후보로서 테이블의 마지막 엔트리에 추가된다. 테이블에서 가장 최근 여러 HMVP 후보들이 순서대로 체크되고 그리고 TMVP 후보 뒤에 있는 후보 리스트에 삽입된다. 공간적 또는 시간적 병합 후보에 대한 HMVP 후보에 대해 리던던시 체크가 적용된다.
(4) 쌍별 평균 병합 후보들 유도
기존 병합 후보 리스트에서 미리정의된 후보 쌍들을 평균화함으로써 쌍별 평균 후보들이 생성되며, 미리정의된 쌍들은 {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}으로서 정의되고, 여기서 수들은 병합 후보 리스트에 대한 병합 인덱스들을 표시한다. 평균화된 모션 벡터들은 각각의 참조 리스트에 대해 별개로 계산된다. 두 모션 벡터들이 하나의 리스트에서 이용가능한 경우, 이 두 모션 벡터들은 이들이 상이한 참조 픽처들을 가리키는 경우에도 평균화되고; 단지 하나의 모션 벡터만이 이용가능한 경우, 하나를 직접 사용하고; 모션 벡터가 이용가능하지 않은 경우, 이 리스트는 유효하지 않은 상태로 유지한다.
(5) 쌍별 평균 병합 후보들이 추가된 후 병합 리스트가 채워지지 않은 경우, 최대 병합 후보 번호에 도달될 때까지 마지막에 제로 MVP들이 삽입된다.
II. 양방향 예측
인터-픽처 예측은 이미지 샘플들의 블록에 대한 모션 보상 예측(MCP)을 유도하기 위해 픽처들 간의 시간적 상관을 사용한다. 각각의 블록에 대해, 이전에 디코딩된 픽처에서 대응하는 블록이 예측자로서 기능하는 것을 알 수 있다. 이전에 디코딩된 픽처에서 블록의 포지션은 모션 벡터(Δx, Δy)에 의해 지시되며, 여기서 Δx는 수평을 지정하고 Δy는 현재 블록의 포지션에 대한 수직 변위를 지정한다. 모션 벡터들(Δx, Δy)은 기본 객체의 움직임을 보다 정확하게 캡처하기 위해 분수 샘플 정확도일 수 있다. 대응하는 모션 벡터가 분수 샘플 정확도를 갖는 경우 예측 신호를 유도하기 위해 참조 픽처들에 보간이 적용된다. 이전에 디코딩된 픽처는, 참조 픽처로 지칭되며, 참조 픽처 리스트에 대한 참조 인덱스 Δt로 지시된다.
(하나의 세트의 모션 데이터를 사용하는 단방향 예측과 비교하여) 양방향 예측의 경우, 2개 세트들의 모션 데이터(Δx0, Δy0, Δt0 및 Δx1, Δy1, Δt1)는 2개의 MCP들(상이한 픽처들 또는 동일한 픽처로부터의 것일 수 있음)을 생성하는 데 사용되며, 이들은 이후 결합되어 최종 MCP를 취한다. 일반적으로, 이는 평균화에 의해 유도된다. 가중된 예측(weighted prediction)의 경우, 각각의 MCP에 상이한 가중치들이 적용될 수 있다. 양방향 예측에 사용될 수 있는 참조 픽처들은 2개의 개별 리스트들, 즉 리스트 0 및 리스트 1에 저장된다.
III. 모션 정보 저장
모션 보상이 수행된 후, 예측 블록과 연관된 (단방향 예측 또는 양방향 예측) 모션 정보는 메모리에 저장된다. 저장된 모션 정보는, 이를테면 공간적 또는 시간적 모션 벡터 예측을 통해, 미래의 블록(CU/PU)의 참조 정보로서 사용된다.
일부 예들에서, 모션 정보 저장은 모션 정보 서브-블록들 또는 모션 정보 저장 유닛들의 2차원 어레이를 사용함으로써 수행된다. 2차원 어레이의 공간 해상도는 코딩될 이미지의 공간 해상도와 상이할 수 있다. 일 예에서, 모션 정보 저장 유닛의 더 낮은 해상도는 메모리 공간을 절약하기 위해 사용된다. 예를 들어, 16x16 르마 샘플들은 단일 모션 정보 저장 유닛에 해당하며, 이는 16x16 루마 샘플들에서의 각각의 샘플이 동일한 모션 정보를 가지며 동일한 모션 정보가 이 16x16 루마 샘플들에 대응하는 단일 모션 정보 저장 유닛에 저장된다는 것을 의미한다. 다른 말로, 모션 정보 저장 유닛은, 16x16 루마 샘플들로 구성된, 연관된 예측 블록의 인터-픽처 예측 정보를 포함한다.
그리고, 16×16 루마 샘플들은 2차원 샘플 어레이인 한 세트의 루마 샘플들을 의미하며, 2차원 샘플 어레이의 폭과 높이 둘 다가 16이라는 것이 주목된다. 단일 모션 정보 저장 유닛은 또한, 8×8 루마 샘플들, 4×4 루마 샘플들 또는 다른 N×M 루마 샘플들 또는 크로마 샘플들에 대응할 수 있으며, N 및 M은 양의 정수이다. 그리고, 모션 정보 저장 유닛의 크기가 작을수록 더 나은 모션 벡터 예측이 가능하지만, 메모리 공간이 더 많이 든다는 것이 이해될 수 있다. 크기 8×8 루마 샘플들의 예측 블록에 대한 모션 벡터 저장이 도 9에 예시되어 있다. Mv0로 라벨링된, 예측 블록의 모션 정보는, 각각의 2x2 모션 벡터 저장 유닛에 저장된다.
III. 인터 예측을 위한 삼각형 파티션
예로서, 삼각형 파티션 모드는, 8×8 보다 크며 스킵 또는 병합 모드로 코딩된 CU들에만 적용된다. ACU-레벨 플래그는, 삼각형 파티션 모드가 적용되는지 여부를 지시하도록 시그널링된다.
삼각형 파티션 모드에서 CU는 대각 세분 또는 반-대각(anti-diagonal) 세분을 사용하여 2개의 삼각형 형상 파티션들로 균등하게 세분된다(도 10). CU의 각각의 삼각형 파티션은 자체 모션을 사용하여 인터 예측되며; 각각의 파티션에 대해 단방향 예측만이 허용되는 데, 즉, 각각의 파티션은 하나의 모션 벡터와 하나의 참조 인덱스를 갖는다. 단방향 예측 모션 제약은, 기존의 양방향 예측과 동일하게, 각각의 CU에 대해 단지 2개의 모션 보상 예측만이 필요하다는 것을 보장하기 위해 적용된다. 각각의 파티션에 대한 단방향 예측 모션은 위에서 언급된 병합 예측을 위해 구성된 병합 후보 리스트를 직접 유도하고, 리스트에서의 주어진 병합 후보로부터 단방향 예측 모션의 선택은 "단방향 예측 후보 리스트 구성" 절차에 따른다. 삼각형 분할들 각각을 예측한 후에, 대각 또는 반-대각 에지를 따른 샘플 값들은 적응 가중치들을 사용하는 블렌딩 프로세싱을 사용하여 조정된다. 마지막으로, 삼각형 파티션 모드를 사용하여 예측된 CU의 모션 필드가 저장된다.
(1) 단방향 예측 후보 리스트 구성
병합 후보 인덱스가 주어지면, 단방향 예측 모션 벡터는, 도 11의 예와 같이, 위에서 언급된 병합 예측을 위해 구성된 병합 후보 리스트로부터 유도된다. 리스트에서의 후보에 대해, 병합 후보 인덱스 값의 패리티(parity)와 동일한 X를 갖는 그의 LX 모션 벡터는, 삼각형 파티션 모드에 대한 단방향 예측 모션 벡터로 사용된다. 이러한 모션 벡터들은, 도 11에서 "x"로 마킹된다. 대응하는 LX 모션 벡터가 존재하지 않는 경우, 병합 예측 후보 리스트에서 동일한 후보의 L(1-X) 모션 벡터는 삼각형 파티션 모드에 대한 단방향 예측 모션 벡터로 사용된다.
(2) 삼각형 파티션 에지를 따른 블렌딩
자체 모션을 사용하여 각각의 삼각형 파티션을 예측한 후, 대각 또는 반-대각 에지 주변의 샘플들을 유도하기 위해, 2개의 예측 신호들에 블렌딩이 적용된다. 다음의 가중치들이 블렌딩 프로세스에 사용된다: 도 12에 도시된 바와 같이, 루마에 대해 {7/8, 6/8, 5/8, 4/8, 3/8, 2/8, 1/8}, 크로마에 대해 {6/8, 4/8, 2/8}.
(3) 모션 필드 저장
예로서, 삼각형 파티션 모드로 코딩된 CU의 모션 벡터들은 4×4 유닛들로 저장된다. 각각의 4×4 유닛의 포지션에 따라, 단방향 예측 또는 양방향 예측 모션 벡터들이 저장된다. Mv1 및 Mv2는, 각각, 파티션 1 및 파티션 2에 대한 단방향 예측 모션 벡터들로 표시된다. 4×4 유닛이 도 12의 예에 도시된 비-가중 영역에 위치된 경우, 해당 4×4 유닛에 대해 Mv1 또는 Mv2가 저장된다. 그렇지 않은 경우(4×4 유닛이 가중 영역에 위치된 경우), 양방향 예측 모션 벡터가 저장된다. 양방향 예측 모션 벡터는 다음의 프로세스에 따라 Mv1 및 Mv2로부터 유도된다:
1) Mv1 및 Mv2가 상이한 참조 픽처 리스트들로부터의 것(하나는 L0으로부터의 것, 다른 하나는 L1으로부터의 것)이라면, Mv1 및 Mv2는 양방향 예측 모션 벡터를 형성하기 위해 간단히 결합된다.
2) 이와 달리, Mv1 및 Mv2가 동일한 리스트로부터의 것이고 일반성 손실이 없다면, 이들이 둘 다 L0로부터의 것이라는 것을 가정한다. 이 경우:
Mv2(또는 Mv1) 중 하나의 것의 참조 픽처가 L1에 나타나면, 해당 Mv2(또는 Mv1)가 L1의 해당 참조 픽처를 사용하여 L1 모션 벡터로 컨버팅된다. 그런 다음, 2개의 모션 벡터는 양방향 예측 모션 벡터를 형성하기 위해 결합된다.
그렇지 않으면, 양방향 예측 모션 대신에, 단방향 예측 모션 Mv1만이 저장된다.
다른 예로서, 삼각형 파티션 모드에 대한 모션 벡터 저장은 도 13에 예시되어 있다.
IV. 인터 블록들에 대한 기하학적 파티셔닝
삼각형 파티션 모드에 대해, 2개의 서브블록들이 분리 라인에 의해 세분되며, 분리 라인의 방향은 45도 또는 135도이다. 예를 들어, 도 14에 도시된 바와 같이, 본 출원에서 GEO(Geometrical partitioning) 모드로 불리는, 다른 파티션 각도들 및 파티션 비율들도 또한 가능하다.
일 예에서, GEO 파티셔닝의 전체 수는 140일 수 있다. 이 수는 유연성과 비트 비용 간의 밸런스에서 최적인 것으로 밝혀졌다. GEO에 대한 추가적인 시그널링은, 각도(α)에 대한 시그널링 및 블록의 중심에 상대적인 분리 라인 변위(ρ)를 요구한다. α는, 11.25도의 분리도를 갖는, 0도 내지 360도의 양자화된 각도를 표현하고, ρ는 5개의 상이한 값들을 갖는 거리를 표현한다. α 및 ρ의 의미는 도 15에 예시되어 있다.
비디오 코딩 기법 분야에서, 일반적으로, 인코더 측에서 수행되는 예측 프로세스와 디코더 측에서 수행되는 예측 프로세스는, 부가 정보(side information)가 디코더 측의 비트스트림으로부터 파싱된다는 점을 제외하고는 유사한 반면, 이 부가 정보는 RDO(rate-distortion optimization) 방법과 같은 미리설정된 규칙에 의해 결정된다는 것이 이해될 수 있다. 예로서, 디코더 측의 GEO 모드에서 예측 샘플들을 획득하기 위해 다음의 단계들이 적용된다.
S101: 현재 블록의 파티션 비율이 결정된다.
엘리먼트 신택스 geo_partition_idx는 α 및 ρ 쌍들을 저장하는 룩업 테이블에 대한 인덱스로서 사용되는 비트스트림으로부터 파싱된다. 일 예에서, α 및 ρ는 각각 각도 인덱스 및 거리 인덱스로 표현된다.
S102: 제1 서브블록에 대한 제1 예측 모드 및 제2 서브블록에 대한 제2 예측 모드가 획득된다.
일반적으로, GEO 블록의 각각의 파티션(서브블록)의 모션 벡터들을 유도하기 위해, 삼각형 파티션 모드에 사용되는 것과 동일한 병합 리스트 유도 프로세스가 사용된다. 각각의 파티션은 단방향 예측에 의해서만 예측된다. 2개의 엘리먼트 신택스 geo_merge_idx0 및 geo_merge_idx1은, 각각, 2개의 서브블록들의 예측 모드들을 지시하기 위해 비트스트림으로부터 파싱된다.
일 예에서, 제1 예측 모드는 제2 예측 모드와 동일하지 않다. 일 예에서, 예측 모드(제1 예측 모드 또는 제2 예측 모드)는 인터 예측 모드일 수 있고, 인터 예측 모드에 대한 정보는 참조 픽처 인덱스 및 모션 벡터를 포함할 수 있다. 다른 예에서, 예측 모드는 인트라 예측 모드일 수 있고, 인트라 예측 모드에 대한 정보는 인트라 예측 모드 인덱스를 포함할 수 있다.
S103: 각각, 제1 예측 모드 및 제2 예측 모드를 사용하여, 제1 서브블록에 대한 제1 예측 값 및 제2 서브블록에 대한 제2 예측 값이 생성된다.
S104: S101에서 개시된 분할에 따라, 제1 예측 값과 제2 예측 값의 조합에 따라 예측 샘플들의 조합된 값들이 획득된다.
예로서, 보다 구체적으로, 단계(S104)는 다음을 포함한다:
S104-1: 현재 블록의 루마 샘플에 대해, 샘플 거리(sample_dist)가 계산되고, 샘플 거리는 S101에서 결정된 현재 블록의 분리 라인까지의 루마 샘플의 거리를 표현한다.
일 예에서, 샘플 거리(sample_dist)는 다음의 공식에 따라 계산된다:
sample_dist = ((x<<1) + 1)*Dis[angleIdx1] + ((y<<1) + 1))*Dis[angleIdx2] - offset(distanceIdx).
● angleIdx1 및 angleIdx2는, 단계(S101)에서의 각도 인덱스로서, 비트스트림으로부터 획득되거나 또는 비트스트림으로부터 획득된 다른 정보에 기반하여 유도되며, 예를 들어, 엘리먼트 신택스 geo_partition_idx에 기반하여 유도되고; angleIdx1 및 angleIdx2는 분리 라인의 양자화된 삼각 파라미터(quantized trigonometric parameter)들을 표현한다.
● x 및 y는 현재 블록의 상단-좌측 샘플에 대한 샘플의 수평 및 수직 거리들이다.
● offset(distanceIdx)은 인덱스 값 (distanceIdx)의 함수이고, 인덱스 값은, 단계(S101)에서의 거리 인덱스로서, 비트스트림으로부터 획득되거나 또는 비트스트림으로부터 획득된 다른 정보에 기반하여 유도되며, 예를 들어, 엘리먼트 신택스 geo_partition_idx에 기반하여 유도된다.
● Dis[]는 미리정의된 룩업 테이블이다.
다른 예에서, sample_dist 및 sampleWeight1은 다음의 식들에 따라 획득될 수 있다:
- nCbR = (W>H) ? (W / H) : (H / W)
- sample_dist = (W>H) ? (Clip3(0, 8, (x / nCbR - y) + 4)) : (Clip3(0, 8, (x - y/nCbR) + 4)),
또는
sample_dist = (W>H) ? (Clip3(0, 8, (H - 1 - x / nCbR - y) + 4)) : (Clip3(0, 8, ( W - 1 - x - y / nCbR ) + 4 ) ).
여기서, W는 현재 블록의 폭이고, H는 현재 블록의 높이이다.
위의 2개 예들은 정수 산술에 따른 2가지 계산 방법을 보여준다는 것이 주목된다. 본 발명의 실시예들은 sample_dist의 계산의 그러한 예들로 제한되지 않는다.
예들에서, sample_dist는 (x, y)에 위치된 샘플과 분리 라인 사이의 직교 라인 거리일 수 있다. 다른 예에서, (x, y)에 위치된 샘플을 통해 수평 라인 또는 수직 라인을 만든다. 수평 라인 또는 수직 라인은 분리 라인과의 교차점을 가질 수 있다. sample_dist는 (x, y)에 위치된 샘플과 교차점 사이의 거리일 수 있다.
S104-2: 블렌딩 연산은, sample_dist를 입력으로서 그리고 sampleWeight1 또는 sampleWeight2를 출력으로서 사용하는 함수로써 구현된다.
sample_dist는 가중치를 계산하는 데 사용되며, 가중 팩터들은 제1 서브블록 및 제2 서브블록에 각각 대응하는 제1 예측 값 및 제2 예측 값을 결합함으로써 유도되는 결합 예측 값에 사용된다. 일 예에서, 가중 팩터들은, 제1 예측 값 및 제2 예측 값에 각각 대응하는 가중 값들을 지칭하는 sampleWeight1 및 sampleWeight2로 표시된다. 일 예에서, sampleWeight1은 sample_dist에 따라 계산되고, sampleWeight2는 공식 sampleWeight2 = T - sampleWeight1에 따라 계산되며, 여기서 T는 미리정의된 상수이다. 일 예에서, 미리정의된 상수(T)는 8과 동일하고, 이는 sampleWeight1 및 sampleWeight2가 0 내지 8(0과 8 포함) 사이의 값 범위에 있는 값을 가질 수 있음을 의미한다. 다른 예에서, 미리정의된 상수(T)는 16과 동일하다.
일 예에 따라, 제1 가중 팩터 sampleWeight1은 sample_dist 및 룩업 테이블에 따라 획득된다. 일 예에서, 룩업 테이블은 필터 계수들을 저장하는 데 사용된다. 다른 말로, 블렌딩 연산은 룩업 테이블에 따라 구현된다. 이러한 예에서, sample_dist의 함수는 룩업 테이블에 대한 인덱스 값으로서 사용될 수 있다. 상기 함수는, 상수 연산을 사용한 나눗셈 또는 곱셈, 정량 우측 시프팅 연산, 절대 값을 취하는 연산 또는 클리핑 연산, 또는 이들의 조합일 수 있다.
블렌딩 연산은 비트스트림의 지시 값에 따라 샘플에, 또는 비트스트림의 지시 값에 따라 샘플에 적용된다.
일 예에서, sampleWeight1 = Clip3(0, 8, f(sample_dist))이다. 함수 f()는, 상수 연산을 사용한 나눗셈/덧셈/곱셈, 정량 우측 시프팅 연산, 절대 값을 취하는 연산 또는 클리핑 연산, 또는 이들의 조합일 수 있다.
일 예에서, sampleWeight1(또는 sampleWeight2) = Clip3(0, 8, sample_dist)이다,
일 예에서, sampleWeight1(또는 sampleWeight2) = Clip3(0, 8, sample_dist+4)이다,
일 예에서, sampleWeight1(또는 sampleWeight2) = sample_dist == 4 ? 4 : sample_dist < 4 ? 0 : 8이다;
일 예에서, sampleWeight1(또는 sampleWeight2) = Clip3(0, 8, (sample_dist - 4)*K + sample_dist)이다;
일 예에서, sampleWeight1 (또는 sampleWeight2) = sample_dist == 0 ? 4 : sample_dist < 0 ? 0 : 8이다;
일 예에서, sampleWeight1 (또는 sampleWeight2) = Clip3(0, 8, sample_dist*K + Clip3(0, 8, sample_dist+4))이고, K는 0보다 큰 값을 갖는 정수이다. 블렌딩 연산은 K가 증가함에 따라 더 짧아진다(따라서, 더 명확해짐(sharper))는 것이 주목된다. 예를 들어, K = 4이면, 제2 블렌딩 연산은 "sampleWeight = sample_dist == 0 ? 4 : sample_dist < 0 ? 0 : 8"과 동일해지며, 이는 도 16에 예시되어 있다. 일 예에 따라, 비트스트림에서 지시자의 값은 K의 값을 지시한다.
일 예에서, 블렌딩 연산은 도 17에 예시된 테이블들과 같은 룩업 테이블로서 구현될 수 있다. 일 예에서, sampleWeight는 geoFilter[idx]로 획득될 수 있고, 여기서 idx는 sampleDist의 함수로써 획득되고, geoFilter는 필터 가중치들의 1차원 선형 어레이이. 예로서, idx = min((abs(sample_dist) + 8) >> 4, maxIdx)이고, 여기서 maxIdx는 idx가 가정할 수 있는 최대 값이다.
S105: 단계(S101)에서 개시된 분할에 따라 그리고 단계(104)에서 개시된 조합 방법에 따라, 현재 블록의 예측 모드 정보(예를 들어, 모션 벡터들을 포함하는 모션 정보 또는 인트라 예측 정보)를 저장한다.
구체적으로, GEO 예측 모드에 대한 디코딩 프로세스의 제1 실시예에서:
이 프로세스는, MergeTriangleFlag[xCb][yCb]가 1과 동일하거나 또는 geo_flag[xCb][yCb]가 1과 동일한 코딩 유닛을 디코딩하는 경우 호출된다.
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 픽처의 상단-좌측 루마 샘플에 대한 현재 코딩 블록의 상단-좌측 샘플을 지정하는 루마 위치(xCb, yCb),
- 루마 샘플들에서 현재 코딩 블록의 폭을 지정하는 변수 cbWidth,
- 루마 샘플들에서 현재 코딩 블록의 높이를 지정하는 변수 cbHeight,
- 1/16 분수-샘플 정확도의 루마 모션 벡터들 mvA 및 mvB,
- 크로마 모션 벡터들 mvCA 및 mvCB,
- 참조 인덱스 refIdxA 및 refIdxB,
- 예측 리스트은 플래그들 predListFlagA 및 predListFlagB.
이 프로세스의 출력들은 다음과 같다:
- 루마 예측 샘플들의 (cbWidth)x(cbHeight) 어레이 predSamplesL,
- 성분 Cb에 대한 크로마 예측 샘플들의 (cbWidth/2)x(cbHeight/2) 어레이 predSamplesCb,
- 성분 Cr에 대한 크로마 예측 샘플들의 (cbWidth/2)x(cbHeight/2) 어레이 predSamplesCr.
predSamplesLAL 및 predSamplesLBL을 예측된 루마 샘플 값들의 (cbWidth)x(cbHeight) 어레이들이라고 하고 그리고 predSamplesLACb, predSamplesLBCb, predSamplesLACr 및 predSamplesLBCr을 예측된 크로마 샘플 값들의 (cbWidth/2)x(cbHeight/2) 어레이들이라고 하자.
predSamplesL, predSamplesCb 및 predSamplesCr은 다음과 같은 순서화된 단계들에 의해 유도된다:
1. A와 B 각각이 N인 경우, 다음이 적용된다:
- 루마 샘플들의 순서화된 2차원 어레이 refPicLNL 및 크로마 샘플들의 2개의 순서화된 2차원 어레이들 refPicLNCb 및 refPicLNCr로 구성된 참조 픽처는, predListFlagN과 동일하게 설정된 X 및 refIdxN과 동일하게 설정된 refIdxX를 입력으로 하여 유도된다.
- 어레이 predSamplesLNL은, 루마 위치(xCb, yCb), cbWidth와 동일하게 설정된 루마 코딩 블록 폭 sbWidth, cbHeight와 동일하게 설정된 루마 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLNL과 동일하게 설정된 참조 어레이 refPicLXL, FALSE와 동일하게 설정된 변수 bdofFlag, 및 0과 동일하게 설정된 변수 cIdx를 입력들로 하여 유도된다.
- 어레이 predSamplesLNcb는, 루마 위치(xCb, yCb), cbWidth/2와 동일하게 설정된 코딩 블록 폭 sbWidth은, cbHeight/2와 동일하게 설정된 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvCN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLNcb과 동일하게 설정된 참조 어레이 refPicLXcb, FALSE와 동일하게 설정된 bdofFlag, 및 1과 동일하게 설정된 변수 cIdx를 입력들로 하여 유도된다.
- 어레이 predSamplesLNcr은 루마 위치(xCb, yCb), cbWidth/2와 동일하게 설정된 코딩 블록 폭 sbWidth, cbHeight/2와 동일하게 설정된 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvCN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLcr과 동일하게 설정된 참조 어레이 refPicLXcr, FALSE와 동일하게 설정된 변수 bdofFlag, 및 2와 동일하게 설정된 변수 cIdx를 입력들로 하여 유도된다.
2. geo_flag[xCb][yCb]가 1과 동일한 경우, 기하학적 파티셔닝 관련 변수들 angleIdx 및 distanceIdx는 표 1에 지정된 geo_partitioning_idx[xCb][yCb]의 값에 따라 설정된다.
a. 기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스가 호출된다. 프로세스에 대한 입력은, 변수들 angleIdx, distanceIdx, cbWidth 및 cbHeight뿐만 아니라, 각각, (cbWidth)x(cbHeight), (cbWidth/2)x(cbHeight/2) 및 (cbWidth/4)x(cbHeight/4) 크기의 3개의 순서화된 어레이들 sampleWeightL, sampleWeightC 및 motionWeight이다.
b. xL = 0..cbWidth - 1 및 yL = 0..cbHeight - 1인 현재 루마 코딩 블록 내의 예측 샘플들 predSamplesL[xL][yL]은, cbWidth와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLAL, predSamplesLBL, predWeightL 및 0과 동일한 cIdx를 입력들로 하는 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
c. xC = 0..cbWidth/2 - 1 및 yC = 0..cbHeight/2 - 1인 현재 크로마 성분 Cb 코딩 블록 내의 예측 샘플들 predSamplesCb[xC][yC]은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLACb, predSamplesLBCb, predWeightC 및 1과 동일한 cIdx를 입력들로 하는 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
d. xC = 0..cbWidth/2 - 1 및 yC = 0..cbHeight/2 - 1인 현재 크로마 성분 Cr 코딩 블록 내의 예측 샘플들 predSamplesCr[xC][yC]은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLACr, predSamplesLBCr, predWeightC 및 2와 동일한 cIdx를 입력들로 하는 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
e. 기하학적 병합 모드에 대한 모션 벡터 저장 프로세스는, 루마 코딩 블록 위치(xCb, yCb), 루마 코딩 블록 폭 cbWidth, 루마 코딩 블록 높이 cbHeight, 샘플 어레이 motionWeight, 루마 모션 벡터들 mvA 및 mvB, 참조 인덱스들 refIdxA 및 refIdxB 및 예측 리스트 플래그들 predListFlagA 및 predListFlagB을 입력으로 하여 호출된다.
삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스
이 프로세스에 대한 입력은 다음과 같다:
- 0 또는 1과 동일한 참조 리스트를 표현하는 변수 X,
- 참조 인덱스 refIdxN.
이 프로세스의 출력은 다음과 같다:
- 참조 인덱스 refIdxTemp.
변수 refPicPoc는 다음과 같이 유도된다 :
참조 픽처 리스트 refPicListTemp는 다음과 같이 유도된다:
변수 rrefIdxTemp는 다음과 같이 유도된다 :
- mapStop 변수는 FALSE와 동일하게 설정된다.
- m = 0..NumRefIdxActive[1] - 1인 변수 refIdxm의 경우, mapStop이 FALSE과 동일해질 때까지 다음이 적용된다:
기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 코딩 블록의 폭 및 높이를 지정하는 두 개의 변수들 nCbW 및 nCbH,
- 현재 기하학적 파티셔닝 모드의 각도 및 거리 룩업 값들을 지정하는 2개의 변수들 angleIdx 및 distanceIdx,
- (nCbW)x(nCbH) 어레이 sampleWeightL,
- (nCbW/2)x(nCbH/2) 어레이 sampleWeightC,
- (nCbW/4)x(nCbH/4) 어레이 motionWeight.
이 프로세스의 출력은, 0...8 범위를 갖는 샘플-당 가중치 값들의 동일한 3개의 어레이들 sampleWeightL, sampleWeightC 및 motionWeight이다.
1. 현재 기하학적 파티셔닝 모드에 대해 sampleWeightL에 저장된 루마 블렌딩 가중치들이 다음과 같이 유도된다:
다음의 변수들의 값이 다음과 같이 설정된다:
- wIdx는 log2(nCbW) - 3로 설정된다,
- hIdx는 log2(nCbH) - 3로 설정된다,
- stepOffset는 64로 설정된다,
- (wIdx >= hIdx)의 비교에 따라 다음의 변수들이 설정된다:
- displacementX는 angleIdx로 설정된다
- displacementY는 (displacementX + 8)%32로 설정된다
- angleN는 다음과 같이 설정된다:
angleN = angleIdx, angleIdx >= 0 && angleIdx <=8인 경우,
angleN = 16 - angleIdx, angleIdx > 8 && angleIdx<= 16인 경우,
angleN = angleIdx - 16, angleIdx > 16 && angleIdx <=24인 경우,
angleN = 32 - angleIdx, 그렇지 않으면
- 추가로, angleN은 wIsLargerH에 따라 다음의 값으로 설정된다:
angleN = (wIsLargerH) ? 8 - angleN : angleN
- stepDis는 표 2에 지정된 바와 같이 whRatio 및 angleN의 값들에 따라 설정되며, 그리고 추가로,
stepSize = stepDis + stepOffset,
- rho는 표 3에 지정된, Dis로 표시된 룩업 테이블을 사용하여 다음의 값으로 설정된다:
각각의 샘플 포지션 x=0...nCbW - 1 및 y=0...nCbH - 1에 대해, sampleWeightL[x][y]의 값은 다음의 방식으로 유도된다:
- 거리 distFromLine은, 다음과 같이, 표 3에 지정된 Dis로 표시된 룩업 테이블을 사용하여 계산된다:
- 스케일링된 거리 distScaled는 다음과 같이 유도된다:
sampleWeightL[x][y]의 값은 필터 가중치 룩업 테이블에 따라 설정되며, 다음과 같이 표 4에서 다음과 같이 지정된 GeoFilter로 표시된다:
sampleWeightL[x][y] = GeoFilter[distScaled], distFromLine <= 0인 경우
sampleWeightL[x][y] = 8 - GeoFilter[distScaled], distFromLine > 0인 경우
2. 현재 기하학적 파티셔닝 모드에 대한 sampleWeightC에 저장된 크로마 가중치들이 다음과 같이 유도된다:
각각의 샘플 포지션 x=0...(nCbW/2)-1 및 y=0...(nCbH/2)-1에 대해, sampleWeightC[x][y]의 값은 다음의 방식으로 유도된다:
sampleWeightC[x][y] = sampleWeightL[(x<<1)][(y<<1)]
3. 현재 기하학적 파티셔닝 모드에 대해 어레이 motionWeight에 저장된 모션 가중치들은 다음과 같이 유도된다:
- 다음의 변수들이 다음과 같이 설정된다:
threshScaler = ((log2(nCbW) + log2(nCbH)) >> 1) - 1
threshLower = 32 >> threshScaler
threshUpper = 32 - threshLower
각각의 샘플 포지션 x=0...(nCbW/4)-1 및 y=0...(nCbH/4)-1에 대해, motionWeight[x][y]의 값은 다음의 방식으로 유도된다:
Cnt = sampleWeightL[(x<<2)][(y<<2)]
+ sampleWeightL[(x<<2) + 3][(y<<2)]
+ sampleWeightL[(x<<2)][(y<<2) + 3]
+ sampleWeightL[(x<<2) + 3][(y<<2) + 3]
motionWeight[x][y]의 값은 다음과 같이 설정된다:
motionWeight[x][y] = 0, Cnt <= threshLower인 경우
motionWeight[x][y] = 1, Cnt >= threshUpper인 경우
motionWeight[x][y] = 2, 그렇지 않은 경우
기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 코딩 블록의 폭 및 높이를 지정하는 두 개의 변수들 nCbW 및 nCbH,
- 2개의 (nCbW)x(nCbH) 어레이들 predSamplesLA 및 predSamplesLB,
- (nCbW)x(nCbH) 어레이 sampleWeight,
- 컬러 성분 인덱스를 지정하는 변수 cIdx.
이 프로세스의 출력은 예측 샘플 값들의 (nCbW)x(nCbH) 어레이 pbSamples이다.
변수 bitDepth는 다음과 같이 유도된다:
- cIdx가 0이면, bitDepth는 BitDepthY와 동일하게 설정된다.
- 그렇지 않으면, bitDepth는 BitDepthC와 동일하게 설정된다.
변수 shift1 및 offset1은 다음과 같이 유도된다:
- 변수 shift1은 Max(5, 17 - bitDepth)와 동일하게 설정된다.
- 변수 offset1은 1 << ( shift1 - 1)과 동일하게 설정 된다.
예측 샘플 값들은 다음과 같이 유도된다:
pbSamples[x][y] =
Clip3( 0, (1  <<  bitDepth) - 1,
(predSamplesLA[x][y] * sampleWeight[x][y] 
+ predSamplesLB[x][y] * ( 8 -sampleWeight[x][y]) + offset1 ) >> shift1)
기하학적 파티셔닝 병합 모드에 대한 모션 벡터 저장
이 프로세스는 geo_flag[xCb][yCb]가 1과 동일한 코딩 유닛을 디코딩하는 경우 호출된다.
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 픽처의 상단-좌측 루마 샘플에 대한 현재 코딩 블록의 상단-좌측 샘플을 지정하는 루마 위치(xCb, yCb),
- 루마 샘플들에서 현재 코딩 블록의 폭을 지정하는 변수 cbWidth,
- 루마 샘플들에서 현재 코딩 블록의 높이를 지정하는 변수 cbHeight,
- 모션 할당 인덱스들을 포함하는 (cbWidth/4)x(cbHeight/4) 크기의 어레이 motionWeight,
- 1/16 분수-샘플 정확도의 루마 모션 벡터들 mvA 및 mvB,
- 참조 인덱스들 refIdxA 및 refIdxB,
- 예측 리스트 플래그들 predListFlagA 및 predListFlagB.
수평 및 수직 방향으로 현재 코딩 블록의 4×4 블록들의 수를 지정하는 변수들 numSbX 및 numSbY는, numSbX = cbWidth >> 2 및 numSbY = cbHeight >> 2와 동일하게 설정된다.
변수 minSb는 min(numSbX, numSbY)과 동일하게 설정된다.
변수 refIdxTempA는, predListFlagA와 동일하게 설정된 X 및 refIdxA와 동일하게 설정된 refIdxN를 입력으로 하는 삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스를 호출함으로써 유도된다.
변수 refIdxTempB는, predListFlagB와 동일하게 설정된 X 및 refIdxB와 동일하게 설정된 refIdxN를 입력으로 하는 삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스를 호출함으로써 유도된다.
xSbIdx = 0..numSbX - 1 및 ySbIdx = 0..numSbY - 1인 서브블록 인덱스 (xSbIdx, ySbIdx)의 각각의 4×4 서브블록에 대해 다음이 적용된다:
- motionWeight[xSbIdx][ySbIdx]가 0과 동일한 경우, 다음이 적용된다:
- 그렇지 않으면, motionWeight[xSbIdx][ySbIdx]가 1과 동일한 경우, 다음이 적용된다:
- 그렇지 않으면(motionWeight[xSbIdx][ySbIdx]가 2과 동일한 경우), 다음이 적용된다:
- predListFlagA + predListFlagB가 1과 동일한 경우, 다음이 적용된다:
- predListFlagA + predListFlagB가 0과 동일한 경우, 다음이 적용된다:
- predListFlagA + predListFlagB가 2와 동일한 경우, 다음이 적용된다:
- x = 0..3 및 y = 0..3에 대해 다음의 할당들이 이루어진다:
표 1- geo _partition_ idx 값에 기반한 angleIdx distanceIdx 값들의 사양.
표 2- whRatio 및 angleN의 값들에 따른 스텝 거리 stepDis의 사양.
표 3-기하학적 파티셔닝 거리의 유도를 위한 룩업 테이블 Dis.
표 4-기하학적 파티셔닝 필터 가중치들의 유도를 위한 필터 가중치 룩업 테이블 GeoFilter.
GEO 예측 모드에 대한 디코딩 프로세스의 제2 실시예에서, 모션 정보 저장 프로세스는 다음과 같다:
코딩 블록을 K개의 모션 저장 유닛들로 하위 세분하고, 코딩 블록의 크기는 MxN 루마 샘플들이며, 일 예에서, 각각의 모션 저장 유닛은 동일한 크기의 (M/K) x (N/K) 루마 샘플들을 갖는다. 일 예에서, K의 값은 4이고, M의 값은 16이고, N의 값은 16이고, 이 예에서, 각각의 모션 저장 유닛은 4×4 크기의 루마 서브-블록과 연관된다. 코딩 블록의 상단-좌측 포지션(x,y)은 모션 저장 블록의 상단-좌측 포지션(x/K, y/K)과 연관된다.
모션 저장 유닛에 대해, 제1 샘플 가중치 또는 제2 샘플 가중치에 따라, 제1 단방향 예측 모션 정보, 제2 단방향 예측 모션 정보 또는 양방향 예측 모션 정보가 저장되는지 여부를 판단한다. 일 예에서, 판단은 세분 경계까지의 모션 저장 유닛의 샘플에 대한 거리에 따른다. 샘플은 정수 샘플 또는 분수 샘플일 수 있다. 구분 라인은 기하학적 파티션 모드의 세분 라인으로 정의된다. 일 예에 따라, K는 4(루마 샘플들과 관련한 모션 저장 유닛의 폭 및 높이)와 동일하다. 코딩 블록을 모션 저장 유닛들로 분할하는 예가 도 13에 도시되어 있다.
일 예에 따라, 샘플과 세분 경계 사이의 거리는 다음과 같이 계산될 수 있다: 루마 블록에 대해, 샘플 거리(sample_dist)가 계산되고, 샘플 거리는 블록의 분리 라인까지의 루마 샘플의 거리를 표현한다.
일 예에서 샘플 거리(sample_dist)는 다음의 공식에 따라 계산된다:
sample_dist = ((x<<1) + 1)*Dis[angleIdx1] + ((y<<1) + 1))*Dis[angleIdx2] - offset(distanceIdx).
● angleIdx1의 값 및 angleIdx2의 값은 비트스트림으로부터 획득되거나 또는 비트스트림으로부터 획득된 다른 정보에 기반하여 유도/계산되며, angleIdx1 및 angleIdx2는 분리 라인의 양자화된 삼각 파라미터들을 표현하며, 첫 번째 것은 코사인 타입이고 두 번째 것은 사인 타입이다.
● x 및 y는 코딩 블록의 상단-좌측 샘플에 대한 샘플의 -x 및 -y 좌표들이다.
● offset(distanceIdx)은 인덱스 값(distanceIdx)의 함수인 오프셋 값이며, 인덱스 값은 비트스트림으로부터 획득되거나 비트스트림으로부터 획득된 다른 정보에 기반하여 유도/계산된다.
● Dis[]는 룩업 테이블이다. Dis[angleIdx1]은 상기 샘플의 -x 좌표에서 유닛 증가(값 1의 증가)에 대한 샘플 거리(sample_dist)의 변화를 설명한다. Dis[angleIdx2]는 상기 샘플의 -y 좌표에서 유닛 증가(값 1의 증가)에 대한 샘플 거리(sample_dist)의 변화를 설명한다.
위 예의 조정자(coordinator)는, 상단-좌측 포지션에 따른 것이 아니라 현재 코딩 블록의 상단-좌측 포지션에 따른다는 것이 주목된다.
위의 예는 정수 산술에 따른 계산 방법을 보여준다는 것이 주목된다. 본 발명의 실시예들은 sample_dist의 계산의 그러한 예들로 제한되지 않는다.
위의 예에 따라, 샘플 코디네이터가 1 비트 좌측으로 시프트((x<<1), (y<<1))된다는 것이 주목된다. 이 예에서, 거리 계산은 정수 산술에 대해 최대 1/2 샘플 정밀도까지 수행될 수 있으며, 예를 들어 (0.5, 0.5)의 샘플 포지션이 계산될 수 있다.
도 18은 정수 포지션 및 절반 픽셀 포지션(분수 포지션, 세분 경계 및 샘플과 세분 경계 사이의 거리(sample_dist))를 갖는 4×4 모션 저장 예를 도시한다.
예에서, 결정은, 다음의 단계들에 따라 취해질, Mv0으로 라벨링된 제1 단방향 예측 모션 정보를 저장할지, Mv1로 라벨링된 제2 단방향 예측 모션 정보를 저장할지, 또는 Mv2로 라벨링된 양방향 예측 모션 정보와 같은 결합된 모션 정보를 저장할지 여부를 나타낸다. 일 예에서, 판단은 모션 저장 유닛에 대해 실행되며; 다른 예에서, 판단은 코딩 블록에 포함된 적어도 2개(또는 모든) 모션 저장 유닛들에 대해 실행된다. 모션 저장 유닛의 상단-좌측 좌표는 (x/K, y/K)로 주어지고 모션 저장 유닛의 폭 및 높이는 루마 샘플에 관련하여 K로 주어진다.
계산된 거리 sample_dist가 임계치보다 작거나 그리고/또는 동일한 경우, 모션 저장 유닛에 대해 결합된 모션 정보(Mv2)가 저장된다. 임계치는 고정된 수일 수 있고, 세분 라인의 각도, 현재 코딩 블록의 종횡비 또는 다른 파라미터들에 기반하여 적응적으로 유도될 수 있고; 그렇지 않으면(sample_dist 거리가 임계치보다 크거나 그리고/또는 동일하면), sample_dist의 부호(sign)가 체크된다:
sample_dist가 음(또는 양)인 경우, 현재 모션 저장 유닛에 대한 MV0(또는 MV1)이 저장되고,
그렇지 않으면(sample_dist가 양(또는 음)인 경우), 현재 모션 저장 유닛에 대한 MV1(또는 MV0)이 저장된다.
도 19는 언급된 방법에 기반한 모션 저장의 일 예를 도시한다.
다른 모션 저장 방법에 비해, 이 방법은 각각의 모션 저장 유닛에 하나의 샘플 거리만 계산하면 되므로, 계산 복잡성이 감소된다.
도 20에 도시된 바와 같이, GEO 예측 모드에 대한 디코딩 프로세스의 제3 실시예는 다음과 같다:
양방향 예측을 허용하는 비디오 코딩 기법에 대해, 2개의 참조 프레임 리스트들, 예를 들어 List0 및 List1, 또는 순방향 참조 프레임 리스트 및 역방향 참조 프레임 리스트가 사용된다. 예를 들어, 모션 정보는:
(1) 예측 플래그 L0(PFL0) 및 예측 플래그 L1(PFL1)를 포함하며, 여기서 예측 플래그 L0가 참인 경우 List0이 인터 예측에 사용될 것이며, 그렇지 않은 경우(예측 플래그 L0이 거짓), List0은 사용되지 않을 것이다. 예측 플래그 L1도 유사하다.
(2) 참조 인덱스 L0(RIL0) 및 참조 인덱스 L1(RIL1)를 포함하며, 참조 인덱스 L0은, List0으로부터의 어떤 참조 프레임(후보)이 현재 참조 프레임으로 사용되는 지를 지시하는 데 사용된다. 참조 인덱스 L1도 유사하다. 그리고 실행가능한 구현에서, 참조 인덱스 L0이 -1과 동일하다는 것은, List0로부터 어떠한 참조 프레임도 사용되지 않는다는 것을 의미한다.
(3) 모션 벡터 L0(MVL0) 및 모션 벡터 L1(MVL1)를 포함하며, 이는 각각 List0 및 List1에 대응하며, 이들 둘 다 수평 성분과 수직 성분을 갖는다.
현재 블록에 대한 모션 정보가 결정된 후, 실현가능한 구현에서, 모션 정보는 미래 코딩 블록들의 예측 프로세스를 위한 참조 정보로서, 예를 들어 공간적 예측 또는 시간적 예측에서 이웃 블록의 예측 모션 정보로서 저장되고 사용될 수 있다.
모션 정보는 메모리에 저장되고, 보다 구체적으로, 본 실시예에서 모션 정보 저장 유닛에 저장된다.
현재 블록은 다수의 샘플 세트들로 세분될 수 있고, 여기서 다수의 샘플 세트들 각각은 샘플 세트와 동일한 크기를 갖거나; 또는 현재 블록을 샘플 세트로 설정한다. 예를 들어, 샘플 세트는 4×4 샘플 어레이일 수 있다. 샘플 세트의 크기는 또한, 8×8, 16×16, 8×16 등일 수 있으며, 이는 제한되지 않는다. 복수의 샘플 세트들 각각은 각각의 모션 정보 저장 유닛에 대응하므로, 샘플 세트의 모션 정보는 대응하는 모션 정보 저장 유닛에 저장될 것이다. "샘플 세트의 모션 정보"에 대해서는 2가지 경우들이 있다는 것이 주목된다. 경우 1: 모션 정보는 샘플 세트의 예측 값을 결정하는 데 사용되며; 경우 2: 모션 정보가 저장을 위해 샘플 세트에 할당된다.
또한, 본 실시예에서, 샘플 세트는 루마 샘플 세트이고 그리고 다른 실시예에서, 샘플 세트는 크로마 샘플 세트일 수 있다.
GEO 예측 모드는 위 섹션에서 소개되었다. 일반적으로, GEO 예측에서, 현재 블록은 제1 서브블록 및 제2 서브블록으로 구성되고, 제1 서브블록 및 제2 서브블록은 공통 경계에 의해 분리되고, 제1 서브블록은 제1 모션 정보에 대응하고 그리고 제2 서브블록은 제2 모션 정보에 대응한다. 제1 서브블록 및 제2 서브블록은 삼각형 파티션, 사다리꼴 파티션 또는 비대칭 직사각형 파티션 등일 수 있고, 이는 제한되지 않는다. 그리고, 예를 들어 삼각형 파티션에서, 각각의 서브블록은 삼각형 블록이라는 것이 이해될 수 있다.
본 실시예의 예로서, 제1 모션 정보 및 제2 모션 정보 둘 다는 단방향 예측으로부터 발생된다. 제1 모션 정보는 RIL0, MVL0만을 포함(이는 PFL0=1, PFL1 =0임을 의미함)할 것이거나; 또는 RIL1, MVL1만을 포함(이는 PFL0=0, PFL1 =1임을 의미함)할 수 있으며; 유사하게 제2 모션 정보는 RIL0, MVL0만을 포함(이는 PFL0=1, PFL1 =0임을 의미함)할 것이거나; 또는 RIL1, MVL1만을 포함(이는 PFL0=0, PFL1 =1임을 의미함)할 수 있다.
S201: 각도 파라미터 및 거리 파라미터가 결정된다.
공통 경계는 각도 파라미터 및 거리 파라미터에 의해 결정된다.
(1) 디코더에서:
실현가능한 구현에서, 비트스트림으로부터 직접 각도 파라미터 및 거리 파라미터가 파싱된다.
다른 실행가능한 구현에서, 비트스트림으로부터 지시자가 파싱되고, 그리고 지시자에 기반하여 각도 파라미터 및 거리 파라미터가 획득된다. 지시자는 인덱스일 수 있고, 각도 파라미터 및 거리 파라미터는 이러한 인덱스로 룩업 테이블을 체크함으로써 결정될 수 있다. 즉, 각도 파라미터 및 거리 파라미터는 일정 함수써 계산될 수 있으며, 지시자는 함수의 입력이다.
다른 실행가능한 구현에서, 비트스트림으로부터 2개의 지시자들이 파싱되고, 그리고 2개의 지시자들 중 하나로부터 각도 파라미터가 그리고 2개의 지시자들 중 다른 하나로부터 거리 파라미터가 획득된다.
본 실시예에서, 신택스 엘리먼트 "geo_partition_idx"가 비트스트림으로부터 파싱된다. 각도 파라미터 "angleIdx" 및 거리 파라미터 "distanceIdx"는, 한 쌍의 "angleIdx" 및 "distanceIdx"와, "geo_partition_idx" 간의 관계를 정의하는 룩업 테이블을 서치함으로써 획득된다. 예를 들어, 룩업 테이블은 표 1일 수 있다.
S202: 각도 파라미터에 기반하여 제1 계산 파라미터가 결정되고; 각도 파라미터에 기반하여 temp 각도 파라미터가 계산되고; temp 각도 파라미터에 기반하여 제2 계산 파라미터가 결정되고; 그리고 각도 파라미터 및 거리 파라미터에 기반하여 제3 계산 파라미터가 계산된다.
제1 계산 파라미터는 각도 파라미터에 따라 미리설정된 룩업 테이블을 체크함으로써 결정되고, 계산 파라미터는 temp 각도 파라미터에 따라 룩업 테이블을 체크함으로써 결정되며, 제1 계산 파라미터 및 제2 계산 파라미터는, 각각, 동일한 각도의 코사인 값 및 사인 값이다. 코사인 및 사인 계산들이 시뮬레이팅되고 룩업 테이블 방법으로 대체될 수 있으며, 계산 복잡성이 감소된다는 것이 이해될 수 있다.
본 실시예에서,
실현가능한 구현에서: 제1 계산 파라미터는 Dis[angleIdx]로 설정되고, Dis[]는 룩업 테이블(예를 들어, 표 3일 수 있음)이다.
TempIdx로 가정하여, temp 각도 파라미터가 (angleIdx + 8)%32로 설정된다.
제2 계산 파라미터는 Dis[TempIdx]로 설정된다.
이론적으로, Dis[angleIdx] 및 Dis[TempIdx]는 동일한 각도의 근사 코사인 값 및 사인 값이며, 각도는 공통 경계와 현재 블록 간의 기하학적 관계를 표현한다는 것이 주목된다.
다른 실현가능한 구현에서: 제1 계산 파라미터는 Dis1[angleIdx]로 설정되고, Dis1[]는 룩업 테이블(예를 들어, 표 3일 수 있음)이다.
제2 계산 파라미터는 Dis2[angleIdx]로 설정되고, Dis2[]는 다른 룩업 테이블이다.
Dis1[angleIdx] 및 Dis2[angleIdx]는 동일한 각도의 근사 코사인 값 및 사인 값이며, 각도는 공통 경계와 현재 블록 간의 기하학적 관계를 표현한다는 것이 주목된다.
제3 계산 파라미터는 다음과 같이 획득된다:
wIdx는 log2(nCbW) - 3으로 설정되고, nCbW는 현재 블록의 폭이다;
hIdx는 log2(nCbH) - 3으로 설정되고, nCbH는 현재 블록의 높이이다;
stepOffset은 양의 정수로 설정되며, 예를 들어, 64로 설정된다.
wIdx와 hIdx를 비교하면:
whRratio = (wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx
wIsLargerH = (wIdx >= hIdx) ? true : false
scaleStep = (wIdx >= hIdx) ? (1 << hIdx) : (1 << wIdx)
또 다른 실현가능한 구현에서, 다음이 이해될 수 있다:
whRratio = (wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx
wIsLargerH = (wIdx >= hIdx) ? true : false
scaleStep = (wIdx > hIdx) ? (1 << hIdx) : (1 << wIdx)
angleN는 다음과 같이 설정된다:
angleN = angleIdx angleIdx >= 0 && angleIdx <= 8인 경우,
angleN = 16 - angleIdx, angleIdx > 8 && angleIdx <= 16인 경우,
angleN = angleIdx - 16, angleIdx > 16 && angleIdx <= 24인 경우,
angleN = 32 - angleIdx, 그렇지 않으면
상이한 구현들에서, 엔드포인트들 angleIdx 0, 8, 16, 24은, 예를 들어, 상이한 서브섹션에 속할 수 있다는 것이 주목된다:
다른 실행가능한 구현에서, angleN은 다음과 같이 설정된다:
angleN = angleIdx, angleIdx > 0 && angleIdx < 8인 경우,
angleN = 16 - angleIdx, angleIdx >= 8 && angleIdx < 16인 경우,
angleN = angleIdx - 16, angleIdx >= 16 && angleIdx < 24인 경우,
angleN = 32 - angleIdx, 그렇지 않은 경우
추가로, angleN은 다음 값으로 설정된다:
angleN = (wIsLargerH) ? 8 - angleN : angleN
stepDis는 룩업 테이블, 예를 들어, 표 2에 지정된 바와 같이 whRatio 및 angleN의 값들에 따라 설정된다.
stepSize = stepDis + stepOffset
제3 계산 파라미터 rho는 Dis로 표시된 룩업 테이블, 예를 들어 표 3을 사용하여 다음의 값으로 설정된다.
rho = distanceIdx*stepSize*scaleStep + nCbW*Dis[angleIdx] + nCbH*Dis[TempIdx].
그리고, 이에 상응하여, 다른 실행가능한 구현에서, 제3 계산 파라미터 rho는 다음과 같이 설정될 수 있다:
rho = distanceIdx*stepSize*scaleStep + nCbW*Dis1 [angleIdx] + nCbH*Dis2 [angleIdx].
각도 파라미터 및 거리 파라미터 이후에 제1, 제2 및 제3 계산 파라미터가 결정될 수 있다는 것이 주목된다. 실행가능한 구현에서 제1, 제2 및 제3 계산 파라미터는 현재 블록의 모든 샘플들에 대한 파라미터들로 오직 한 번만 계산될 것이다. 그리고, 현재 블록의 제1, 제2 및 제3 계산 파라미터가 이미 결정된 경우, 모션 정보 저장 프로세스를 위해 단계(S201) 및 단계(S202)가 스킵될 수 있다.
S203: 현재 블록의 샘플 세트와 공통 경계 사이의 거리가 결정된다.
거리는,
distFromLine = (x + K) * P1 + (y + K) * P2 - P3 에 의해 계산되며,
P1, P2 및 P3은, 각각, 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, distFromLine은 거리를 표현하고, K는 음이 아닌 정수이고, x는 샘플 세트에서 타깃 포지션의 수평 좌표를 표현하고, y는 직교 좌표계에서 타깃 포지션의 수직 좌표를 표현하며, 현재 블록의 상단-좌측 샘플의 포지션이 좌표 원점으로 설정되고, 우측 방향은 양의 수평 방향으로 설정되고 그리고 아래 방향은 양의 수직 방향으로 설정된다.
실현가능한 구현에서, K는 1과 동일하다.
distFromLine = (x + 1) * P1 + (y + 1) * P2 - P3.
현재 블록의 샘플 세트와 공통 경계 사이의 거리는 일반적으로, 샘플 세트의 타깃 포지션과 공통 경계 사이의 거리라는 것이 주목된다.
샘플 세트의 타깃 포지션은 미리결정된다. 예를 들어, 미리결정된 포지션은 샘플 세트의 상단-좌측 포지션, 또는 샘플 세트의 중심 포지션, 또는 샘플 세트의 다른 포지션일 수 있다.
타깃 포지션은 샘플 세트에서 정수 샘플 포지션의 포지션일 수 있고, 타깃 포지션은 또한 분수 샘플 포지션의 포지션일 수 있다는 것이 주목된다. 예를 들어, 타깃 포지션은 현재 블록의 무게 중심의 포지션일 수 있다. 보다 구체적으로, 현재 블록이 4×4 샘플 어레이인 경우, 타깃 포지션은 본 실시예의 직교 좌표계에서 (1.5, 1.5) 좌표를 갖는 포지션일 수 있다.
실현가능한 구현에서, 거리의 샘플 정밀도는 정수 샘플보다 높다. 이에 상응하여, 거리는,
distFromLine = ((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3에 의해 계산되며,
2N은 거리의 샘플 정밀도의 역수를 표현하고, 예를 들어, 거리의 샘플 정밀도가 절반 픽셀 정밀도인 경우, N은 1과 동일하며, 거리의 샘플 정밀도가 1/4 픽셀 정밀도인 경우, N은 2와 동일하다.
예로서, 거리는,
distFromLine = ((x<<1) + 1) * Dis[angleIdx] + ((y<<1) + 1) * Dis[TempIdx] - rho에 의해 계산된다.
S204: 샘플 세트에 대해 제3 모션 정보가 저장되는지 여부를 결정하기 위해, 거리가 임계치와 비교된다.
제3 정보는 제1 모션 정보 및 제2 모션 정보로부터 유도된다. 실현가능한 구현에서, 제3 모션 정보는, 양방향 예측을 위한 모션 정보와 같이, 제1 모션 정보와 제2 모션 정보의 조합이다. 보다 구체적으로, 제1 모션 정보가 RILX_first, MVLX_first를 포함하는 경우, 제2 모션 정보는 RILY_second, MVLY_second를 포함하고, 여기서 X는 0 또는 1일 수 있고, Y는 0 또는 1일 수 있으며, 제3 모션 정보는 모든 RILX_first, MVLX_first, RILY_second, MVLY_second를 포함할 수 있으며, 이는 PFL0=1, PFL1=1을 의미한다.
다른 실현가능한 구현에서, 제3 모션 정보는, 제1 모션 정보 및 제2 모션 정보 둘 다가 동일한 리스트(List0 또는 List1)에 대응하는 경우, 제1 모션 정보 또는 제2 모션 정보 중 하나와 동일할 수 있다. 예를 들어, 제1 모션 정보 및 제2 모션 정보 둘 다에 대해 PFL1이 0과 동일하고 PFL0이 1과 동일한 경우, 제3 모션 정보는 제1 모션 정보(또는 상이한 구현에 따라, 제2 모션 정보)와 동일하게 설정될 수 있다. 유사하게, 제1 모션 정보 및 제2 모션 정보 둘 다에 대해 PFL1이 1과 동일하고 PFL0이 0과 동일한 경우, 제3 모션 정보는 제1 모션 정보(또는 상이한 구현에 따라, 제2 모션 정보)와 동일하게 설정될 수 있다.
실현가능한 구현에서, 임계치는 미리결정된 값일 수 있다.
다른 실행가능한 구현에서, 임계치는, 공통 경계와 수평 방향 사이의 기하학적 관계에 기반하거나 또는 공통 경계와 수직 방향 사이의 기하학적 관계에 기반한다. 보다 구체적으로, 임계치는 공통 경계의 직교 방향과 수평 방향 또는 수직 방향 사이의 각도에 기반한다. 그리고, 다른 구현들에서, 기하학적 관계는 공통 경계와 현재 블록 또는 현재 블록의 서브블록의 블록 경계 사이의 길이 관계를 포함할 수 있다. 본 실시예에서, 임계값은 위에서 계산된 각도에 따라, 룩업 테이블, 예를 들어 표 5에 의해 획득될 수 있다.
Threshold = RhoMax[angleN].
angleN은 단계(S204) 이전에 결정될 수 있기 때문에, 임계치는 단계(S204) 이전에 현재 블록에 대해 결정될 수 있다는 것이 주목된다.
임계치는 또한,
threshLower = - RhoMax[angleN]
threshUpper = RhoMax[angleN] 일 수 있다.
표 5-기하학적 파티셔닝 모션 가중치들의 유도를 위한 RhoMax 표.
다른 실행가능한 구현에서, 임계치는 또한,
threshLower = - K
threshUpper = K일 수 있고, 여기서 K는 미리결정된 양수이다. 예를 들어, K 값은 1일 수 있다. 일 예에서, K는 비트스트림의 지시자에 따라 획득될 수 있다.
다른 실행가능한 구현에서, 임계치는 현재 블록의 폭 및/또는 높이에 기반한다.
임계치가 또한 위의 2개 이상의 조건들에 의해 결정될 수 있다는 것이 주목된다. 예를 들어, 현재 블록의 폭 및/또는 높이는 일정 비율, 비율 = 1<< abs(log2(width) - log2(height))로 결정될 수 있고, 그런 다음, 이 비율은 각도에 의해 결정된 임계치를 스케일링하는 데 사용된다. 그리고, 스케일링된 임계치가 최종 임계치로 설정된다.
임계치와 거리 간의 비교들이 다음과 같이 수행된다:
S204-1: 거리의 절대 값이 임계치 이하인 경우, 샘플 세트에 대해 제3 모션 정보가 저장된다고 결정된다.
S204-2: 거리의 절대 값이 임계치보다 큰 경우:
거리가 양(또는 음)인 경우, 샘플 세트에 대해 제1 모션 정보가 저장된다고 결정되거나; 또는
거리가 음(또는, 위에서의 분기부에 따라, 양)인 경우, 샘플 세트에 대해 제2 모션 정보가 저장된다고 결정된다.
다른 구현에 따라, 또한 단계(S204-1)의 조건은, 거리의 절대 값이 임계치보다 작은 것일 수 있고, 이에 따라, 단계(S204-2)의 조건은, 거리의 절대 값이 임계치 이상인 것일 수 있다는 것이 이해될 수 있다.
다른 실행가능한 구현에서, 절대 값의 계산은 더 많은 서브섹션들로 대체된다.
본 실시예에서, 거리가 threshLower보다 작은 경우, 샘플 세트에 대해 저장되는 제1 모션 정보가 저장되고; 거리가 threshUpper보다 더 큰 경우, 샘플 세트에 대해 저장되는 제2 모션 정보가 저장되고; 그렇지 않으면, 샘플 세트에 대해 저장되는 제3 모션 정보가 저장된다.
그리고, 모션 정보 저장 유닛에 저장된 제1 모션 정보, 제2 모션 정보 및 제3 모션 정보 중 하나가 샘플 세트에 대응한다는 것이 이해될 수 있다.
현재 블록이 다수의 샘플 세트들로 세분될 수 있는 경우, 실현가능한 구현에서, 본 실시예의 위의 단계들이 모든 샘플 세트들에 사용된다는 것이 주목된다. 다른 실행 가능한 구현에서, 본 실시예의 위의 단계들은 오직 하나의 샘플 세트에만 사용된다. 다른 실행가능한 구현에서, 본 실시예의 위의 단계들은 적어도 2개의 샘플 세트들에 사용된다. 위의 단계들로 구현되지 않는 샘플 세트들에 대해, 실행가능한 구현에서, 미리결정된 조건에 따라 추론된 모션 정보 또는 디폴트 모션 정보가 저장될 것이다.
GEO 파티션에 대한 모션 정보의 저장을 결정하기 위해서, CU 레벨에서 모듈 파라미터가 결정될 수 있는 미리결정된 GEO 파티션 모듈(함수)에 기반하여 거리 값만이 계산될 필요가 있다는 것이 주목된다. 컴퓨팅 복잡도는 제한된다.
GEO 예측 모드에 대한 디코딩 프로세스의 제4 실시예에서:
이 프로세스는, MergeTriangleFlag[xCb][yCb]가 1과 동일하거나 또는 geo_flag[xCb][yCb]가 1과 동일한 코딩 유닛을 디코딩하는 경우 호출된다.
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 픽처의 상단-좌측 루마 샘플에 대한 현재 코딩 블록의 상단-좌측 샘플을 지정하는 루마 위치(xCb, yCb),
- 루마 샘플들에서 현재 코딩 블록의 폭을 지정하는 변수 cbWidth,
- 루마 샘플들에서 현재 코딩 블록의 높이를 지정하는 변수 cbHeight,
- 1/16 분수-샘플 정확도의 루마 모션 벡터들 mvA 및 mvB,
- 크로마 모션 벡터들 mvCA 및 mvCB,
- 참조 인덱스들 refIdxA 및 refIdxB,
- 예측 리스트 플래그들 predListFlagA 및 predListFlagB.
이 프로세스의 출력들은 다음과 같다:
- 루마 예측 샘플들의 (cbWidth)x(cbHeight) 어레이 predSamplesL,
- 성분 Cb에 대한 크로마 예측 샘플들의 (cbWidth/2)x(cbHeight/2) 어레이 predSamplesCb,
- 성분 Cr에 대한 크로마 예측 샘플들의 (cbWidth/2)x(cbHeight/2) 어레이 predSamplesCr.
predSamplesLAL 및 predSamplesLBL을 예측된 루마 샘플 값들의 (cbWidth)x(cbHeight) 어레이들이라고 하고 그리고 predSamplesLACb, predSamplesLBCb, predSamplesLACr 및 predSamplesLBCr을 예측된 크로마 샘플 값들의 (cbWidth/2)x(cbHeight/2) 어레이들이라고 하자.
predSamplesL, predSamplesCb 및 predSamplesCr은 다음과 같은 순서화된 단계들에 의해 유도된다:
3. A와 B 각각이 N인 경우, 다음이 적용된다:
- 루마 샘플들의 순서화된 2차원 어레이 refPicLNL 및 크로마 샘플들의 2개의 순서화된 2차원 어레이들 refPicLNCb 및 refPicLNCr로 구성된 참조 픽처는, predListFlagN과 동일하게 설정된 X 및 refIdxN과 동일하게 설정된 refIdxX를 입력으로 하여 유도된다.
- 어레이 predSamplesLNL은, 루마 위치(xCb, yCb), cbWidth와 동일하게 설정된 루마 코딩 블록 폭 sbWidth, cbHeight와 동일하게 설정된 루마 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLNL과 동일하게 설정된 참조 어레이 refPicLXL, FALSE와 동일하게 설정된 변수 bdofFlag 및 0과 동일하게 설정된 변수 cIdx를 입력들로 하는 분수 샘플 보간 프로세스를 호출함으로써 유도된다.
- 어레이 predSamplesLNcb는, 루마 위치(xCb, yCb), cbWidth/2와 동일하게 설정된 코딩 블록 폭 sbWidth, cbHeight/2와 동일하게 설정된 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvCN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLNcb와 동일하게 설정된 참조 어레이 refPicLXcb, FALSE와 동일하게 설정된 변수 bdofFlag 및 1과 동일하게 설정된 변수 cIdx를 입력들로 하는 분수 샘플 보간 프로세스를 호출함으로써 유도된다.
- 어레이 predSamplesLNCr은, 루마 위치(xCb, yCb), cbWidth/2와 동일하게 설정된 코딩 블록 폭 sbWidth, cbHeight/2와 동일하게 설정된 코딩 블록 높이 sbHeight, (0, 0)과 동일하게 설정된 모션 벡터 오프셋 mvOffset, mvCN과 동일하게 설정된 모션 벡터 mvLX 및 refPicLNCr과 동일하게 설정된 참조 어레이 refPicLXCr, FALSE와 동일하게 설정된 변수 bdofFlag 및 2와 동일하게 설정된 변수 cIdx를 입력들로 하는 분수 샘플 보간 프로세스를 호출함으로써 유도된다.
4. MergeTriangleFlag[xCb][yCb]가 1과 동일한 경우, 병합 삼각형 모드 변수 triangleDir의 파티셔닝 방향은 merge_triangle_split_dir[xCb][yCb]와 동일하게 설정된다.
a. xL = 0..cbWidth - 1 및 yL = 0..cbHeight - 1인 현재 루마 코딩 블록 내의 예측 샘플들 predSamplesL[xL][yL]은, cbWidth와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLAL 및 predSamplesLBL, 및 변수 triangleDir 및 0과 동일한 cIdx를 입력들로 하는 삼각형 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
b. xc = 0..cbWidth/2 - 1 및 yc = 0..cbHeight/2 - 1인 현재 크로마 성분 Cb 코딩 블록 내의 예측 샘플들 predSamplesc[xc][yc]은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLAcb 및 predSamplesLBcb, 변수 triangleDir 및 1과 동일한 cIdx를 입력들로 하는 삼각형 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
c. xc = 0..cbWidth/2 - 1 및 yc = 0..cbHeight/2 - 1인 현재 크로마 성분 Cr 코딩 블록 내의 예측 샘플 predSamplesCr[xc][yc]은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLACr 및 predSamplesLBCr, 변수 triangleDir 및 2와 동일한 cIdx를 입력들로 하는 삼각형 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
d. 병합 삼각형 병합 모드에 대한 모션 벡터 저장 프로세스는, 루마 코딩 블록 위치(xCb, yCb), 루마 코딩 블록 폭 cbWidth, 루마 코딩 블록 높이 cbHeight, 파티션 방향 triangleDir, 루마 모션 벡터들 mvA 및 mvB, 참조 인덱스들 refIdxA 및 refIdxB 및 예측 리스트 플래그들 predListFlagA 및 predListFlagB를 입력들로 하여 호출된다.
5. geo_flag[xCb][yCb]가 1과 동일한 경우, 기하학적 파티셔닝 관련 변수들 angleIdx 및 distanceIdx는 표 1에 지정된 geo_partitioning_idx[xCb][yCb]의 값에 따라 설정된다.
a. 기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스가 호출된다. 프로세스에 대한 입력은, 변수들 angleIdx, distanceIdx, cbWidth 및 cbHeight뿐만 아니라, 각각, (cbWidth)x(cbHeight), (cbWidth/2)x(cbHeight/2) 및 (cbWidth/4)x(cbHeight/4) 크기의 3개의 순서화된 어레이들 sampleWeightL, sampleWeightC 및 motionWeight이다.
b. xL = 0..cbWidth - 1 및 yL = 0..cbHeight - 1인 현재 루마 코딩 블록 내의 예측 샘플 predSamplesL[xL][yL]은, cbWidth와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLAL, predSamplesLBL, predWeightL 및 0과 동일한 cIdx를 입력들로 하는 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
c. xC = 0..cbWidth/2 - 1 및 yC = 0..cbHeight/2 - 1인 현재 크로마 성분 Cb 코딩 블록 내의 예측 샘플 predSamplesCb[xC][yC]은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLACb, predSamplesLBCb, predWeightC 및 1과 동일한 cIdx를 입력들로 하는 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
d. xC = 0..cbWidth/2 - 1 및 yC = 0..cbHeight/2 - 1인 현재 크로마 성분 Cr 코딩 블록 내의 예측 샘플들 predSamplesCr[xC][yC] 은, cbWidth/2와 동일하게 설정된 코딩 블록 폭 nCbW, cbHeight/2와 동일하게 설정된 코딩 블록 높이 nCbH, 샘플 어레이들 predSamplesLACr, predSamplesLBCr, predWeightC 및 2와 동일한 cIdx를 입력들로 하는, 8.5.8.3 절에서 지정된 기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스를 호출함으로써 유도된다.
e. 기하학적 병합 모드에 대한 모션 벡터 저장 프로세스는, 루마 코딩 블록 위치(xCb, yCb), 루마 코딩 블록 폭 cbWidth, 루마 코딩 블록 높이 cbHeight, 샘플 어레이 motionWeight, 루마 모션 벡터들 mvA 및 mvB, 참조 인덱스들 refIdxA 및 refIdxB 및 예측 리스트 플래그들 predListFlagA 및 predListFlagB를 입력들로 하여 호출된다.
삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스
이 프로세스에 대한 입력은 다음과 같다:
- 0 또는 1과 동일한 참조 리스트를 표현하는 변수 X,
- 참조 인덱스 refIdxN.
이 프로세스의 출력은 다음과 같다:
- 참조 인덱스 refIdxTemp.
변수 refPicPoc는 다음과 같이 유도된다 :
참조 픽처 리스트 refPicListTemp는 다음과 같이 유도된다:
변수 rrefIdxTemp는 다음과 같이 유도된다 :
- mapStop 변수는 FALSE와 동일하게 설정된다.
- m = 0..NumRefIdxActive[1] - 1인 변수 refIdxm의 경우, mapStop이 FALSE과 동일해질 때까지 다음이 적용된다:
기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 코딩 블록의 폭 및 높이를 지정하는 두 개의 변수들 nCbW 및 nCbH,
- 현재 기하학적 파티셔닝 모드의 각도 및 거리 룩업 값들을 지정하는 2개의 변수들 angleIdx 및 distanceIdx,
- (nCbW)x(nCbH) 어레이 sampleWeightL,
- (nCbW/2)x(nCbH/2) 어레이 sampleWeightC,
- (nCbW/4)x(nCbH/4) 어레이 motionWeight.
이 프로세스의 출력은, 0...8 범위를 갖는 샘플-당 가중치 값들의 동일한 3개의 어레이들 sampleWeightL, sampleWeightC 및 motionWeight 이다.
4. 현재 기하학적 파티셔닝 모드에 대해 sampleWeightL에 저장된 루마 블렌딩 가중치들이 다음과 같이 유도된다:
다음의 변수들의 값이 다음과 같이 설정된다:
- wIdx는 log2(nCbW) - 3로 설정된다,
- hIdx는 log2(nCbH) - 3로 설정된다,
- stepOffset는 64로 설정된다,
- (wIdx >= hIdx)의 비교에 따라 다음의 변수들이 설정된다:
- displacementX는 angleIdx로 설정된다
- displacementY는 (displacementX + 8)%32로 설정된다
- angleN는 다음과 같이 설정된다:
angleN = angleIdx angleIdx >= 0 && angleIdx <= 8인 경우,
angleN = 16 - angleIdx, angleIdx > 8 && angleIdx <= 16인 경우,
angleN = angleIdx - 16, angleIdx > 16 && angleIdx <= 24인 경우,
angleN = 32 - angleIdx, 그렇지 않은 경우
- 추가로, angleN은 wIsLargerH에 따라 다음의 값으로 설정된다:
angleN = (wIsLargerH) - 8 - angleN : angleN
- stepDis는 표 2에 지정된 바와 같이 whRatio 및 angleN의 값들에 따라 설정되며, 그리고 추가로,
stepSize = stepDis + stepOffset,
- rho는 표 3에 지정된, Dis로 표시된 룩업 테이블을 사용하여 다음의 값으로 설정된다:
각각의 샘플 포지션 x=0...nCbW - 1 및 y=0...nCbH - 1에 대해, sampleWeightL[x][y]의 값은 다음의 방식으로 유도된다:
- 거리 distFromLine[x][y]은, 다음과 같이, 표 3에 지정된 Dis로 표시된 룩업 테이블을 사용하여 계산된다:
- 스케일링된 거리 distScaled는 다음과 같이 유도된다:
sampleWeightL[x][y]의 값은 필터 가중치 룩업 테이블에 따라 설정되며, 다음과 같이 표 4에 지정된 GeoFilter로 표시된다:
sampleWeightL[x][y] = GeoFilter[distScaled], distFromLine <= 0인 경우
sampleWeightL[x][y] = 8 - GeoFilter[distScaled], distFromLine > 0인 경우
5. 현재 기하학적 파티셔닝 모드에 대해 sampleWeightC에 저장된 크로마 가중치들이 다음과 같이 유도된다:
각각의 샘플 포지션 x=0...(nCbW/2) - 1 및 y=0...nCbH/2) - 1에 대해, sampleWeightC[x][y]의 값은 다음의 방식으로 유도된다:
sampleWeightC[x][y] = sampleWeightL[(x<<1)][(y<<1)]
6. 현재 기하학적 파티셔닝 모드에 대해 어레이 motionWeight에 저장된 모션 가중치들은 다음과 같이 유도된다:
- 다음의 변수들은 표 5에 따라 다음과 같이 설정된다:
threshLower = - RhoMax[angleN]
threshUpper = RhoMax[angleN].
각각의 샘플 포지션 x=0...(nCbW/4) - 1 및 y=0... nCbH/4) - 1에 대해, motionWeight[x][y]의 값은 다음의 방식으로 유도된다:
Cnt = distFromLine[x*4 + 1][y*4 + 1]
motionWeight[x][y]의 값은 다음과 같이 설정된다:
motionWeight[x][y] = 0, Cnt <= threshLower인 경우
motionWeight[x][y] = 1, Cnt >= threshUpper인 경우
motionWeight[x][y] = 2, 그렇지 않은 경우
기하학적 파티셔닝 병합 모드에 대한 가중된 샘플 예측 프로세스
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 코딩 블록의 폭 및 높이를 지정하는 두 개의 변수들 nCbW 및 nCbH,
- 2개의 (nCbW)x(nCbH) 어레이들 predSamplesLA 및 predSamplesLB,
- (nCbW)x(nCbH) 어레이 sampleWeight,
- 컬러 성분 인덱스를 지정하는 변수 cIdx.
이 프로세스의 출력은 예측 샘플 값들의 (nCbW)x(nCbH) 어레이 pbSamples이다.
변수 bitDepth는 다음과 같이 유도된다:
- cIdx가 0과 동일한 경우, bitDepth는 BitDepthY와 동일하게 설정된다.
- 그렇지 않으면, bitDepth는 BitDepthC와 동일하게 설정된다.
변수들 shift1 및 offset1은 다음과 같이 유도된다:
- 변수 shift1은 Max(5, 17 - bitDepth)와 동일하게 설정된다.
- 변수 offset1은 1 << (shift1 - 1)과 동일하게 설정된다.
예측 샘플 값들은 다음과 같이 유도된다:
pbSamples[x][y] =
Clip3(0, (1 << bitDepth) - 1,
(predSamplesLA[x][y] * sampleWeight[x][y]
+ predSamplesLB[x][y] * (8 - sampleWeight[x][y]) + offset1) >> shift1)
기하학적 파티셔닝 병합 모드에 대한 모션 벡터 저장
이 프로세스는 geo_flag[xCb][yCb]가 1과 동일한 코딩 유닛을 디코딩하는 경우 호출된다.
이 프로세스에 대한 입력들은 다음과 같다:
- 현재 픽처의 상단-좌측 루마 샘플에 대한 현재 코딩 블록의 상단-좌측 샘플을 지정하는 루마 위치(xCb, yCb),
- 루마 샘플들에서 현재 코딩 블록의 폭을 지정하는 변수 cbWidth,
- 루마 샘플들에서 현재 코딩 블록의 높이를 지정하는 변수 cbHeight,
- 모션 할당 인덱스들을 포함하는 (cbWidth/4)x(cbHeight/4) 크기의 어레이 motionWeight,
- 1/16 분수-샘플 정확도의 루마 모션 벡터들 mvA 및 mvB,
- 참조 인덱스들 refIdxA 및 refIdxB,
- 예측 리스트 플래그들 predListFlagA 및 predListFlagB.
수평 및 수직 방향으로 현재 코딩 블록의 4×4 블록들의 수를 지정하는 변수들 numSbX 및 numSbY는, numSbX = cbWidth >> 2 및 numSbY = cbHeight >> 2와 동일하게 설정된다.
변수 minSb는 min(numSbX, numSbY)과 동일하게 설정된다.
변수 refIdxTempA는, predListFlagA와 동일하게 설정된 X 및 refIdxA와 동일하게 설정된 refIdxN를 입력들로 하는, 8.5.7.4절에 지정된 삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스를 호출함으로써 유도된다.
변수 refIdxTempB는, predListFlagB와 동일하게 설정된 X 및 refIdxB와 동일하게 설정된 refIdxN를 입력들로 하는, 8.5.7.4절에 지정된 삼각형 병합 모드에 대한 참조 픽처 매핑 프로세스를 호출함으로써 유도된다.
xSbIdx=0..numSbX - 1 및 ySbIdx =0..numSbY - 1인 서브블록 인덱스 (xSbIdx, ySbIdx)의 각각의 4×4 서브블록에 대해 다음이 적용된다:
- motionWeight[xSbIdx][ySbIdx]가 0과 동일한 경우, 다음이 적용된다:
- 그렇지 않으면, motionWeight[xSbIdx][ySbIdx]가 1과 동일한 경우, 다음이 적용된다:
- 그렇지 않으면(motionWeight[xSbIdx][ySbIdx]가 2와 동일한 경우), 다음이 적용된다:
- predListFlagA + predListFlagB가 1과 동일한 경우,
- predListFlagA + predListFlagB가 0과 동일한 경우, 다음이 적용됩니다.
- predListFlagA + predListFlagB가 2와 동일한 경우, 다음이 적용됩니다.
- x = 0..3 및 y = 0..3에 대해 다음의 할당들이 이루어진다:
대안적 구현에서, "기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스"의 단계 6은 다음과 같이 구현될 수 있다:
6. 현재 기하학적 파티셔닝 모드에 대한 어레이 motionWeight에 저장된 모션 가중치들은 다음과 같이 유도된다:
- 다음 변수들은 표 5에 따라 다음과 같이 설정된다:
threshLower = - RhoMax[angleN]
threshUpper = RhoMax[angleN].
각각의 샘플 포지션 x=0... (nCbW/4) - 1 및 y=0...nCbH/4) - 1에 대해, motionWeight[x][y]의 값은 다음의 방식으로 유도된다:
Cnt = ((x<<4) + 3)*Dis[displacementX] + ((y<<4) + 3))*Dis[displacementY] - rho<<1
motionWeight[x][y]의 값은 다음과 같이 설정된다:
motionWeight[x][y] = 0, Cnt <= threshLower인 경우
motionWeight[x][y] = 1, Cnt >= threshUpper인 경우
motionWeight[x][y] = 2, 다른 경우에
"기하학적 파티셔닝 병합 모드에 대한 샘플 가중치 유도 프로세스"의 단계 6의 위의 예시적인 구현에서, 식 "Cnt = ((x<<4) + 3)*Dis[displacementX] + ((y<<4) + 3))*Dis[displacementY] - rho<<1"는 샘플들의 세트의 무게 중심과 라인 사이의 거리의 계산에 대응한다. 이 예의 샘플들의 세트는 다음 좌표를 갖는 16개의 샘플들을 포함한다:
무게 중심 좌표들은 (x*4 + 1.5, y*4 + 1.5)이다. 위의 식들에서, 정수 산술이 원하는 구현 특징이기 때문에, 좌표 오프셋들을 1.5 정수(따라서, 이 예에서는 3)로 만들기 위해 식의 모든 덧셈 항에 2가 곱해진다.
제5 실시예에서, 도 21에 도시된 바와 같이, 모션 정보를 저장하기 위한 장치는 다음과 같다:
모션 정보 저장 장치(3000)로서, 현재 블록은 제1 서브블록 및 제2 서브블록으로 구성되고, 제1 서브블록 및 제2 서브블록은 공통 경계에 의해 분리되며, 제1 서브블록은 제1 모션 정보에 대응하고, 제2 서브블록은 제2 모션 정보에 대응하고, 장치(3000)는 현재 블록의 샘플 세트와 공통 경계 사이의 거리를 결정하도록 구성된 계산 모듈(3001); 및 샘플 세트에 대해 제3 모션 정보가 저장되는지 여부를 결정하기 위해, 거리를 임계치와 비교하도록 구성된 비교 모듈(3002)을 포함하고, 제3 모션 정보는 제1 모션 정보 및 제2 모션 정보로부터 유도된다.
실현가능한 구현에서, 비교 모듈(3002)은, 거리의 절대 값이 임계치 이하인 경우, 샘플 세트에 대해 제3 모션 정보가 저장된다고 결정하도록 구성된다.
실현가능한 구현에서, 거리의 절대 값이 임계치보다 큰 경우, 비교 모듈(3002)은 추가로, 거리가 양인 경우, 샘플 세트에 대해 제1 모션 정보가 저장된다고 결정하도록; 또는 거리가 음인 경우, 샘플 세트에 대해 제2 모션 정보가 저장된다고 결정하도록 구성된다.
실현가능한 구현에서, 임계치는 미리결정된다.
실현가능한 구현에서, 임계치는 공통 경계와 수평 방향 또는 수직 방향 사이의 기하학적 관계에 기반한다.
실현가능한 구현에서, 임계치는 공통 경계의 직교 방향과 수평 방향 또는 수직 방향 사이의 각도에 기반한다.
실행가능한 구현에서, 임계치는 현재 블록의 폭 및/또는 높이에 기반한다.
실행가능한 구현에서, 공통 경계는 각도 파라미터 및 거리 파라미터에 의해 결정되며, 계산 모듈(3001)은 추가로, 각도 파라미터 및 거리 파라미터를 결정하도록 구성된다.
실현가능한 구현에서, 디코더에서, 계산 모듈(3001)은 추가로, 비트스트림으로부터 각도 파라미터 및 거리 파라미터를 파싱하도록; 또는 비트스트림으로부터 지시자를 파싱하도록, 그리고 지시자에 기반하여 각도 파라미터 및 거리 파라미터를 획득하도록 구성된다.
실현가능한 구현에서, 계산 모듈(3001)은 추가로, 각도 파라미터에 기반하여 제1 계산 파라미터를 결정하고; 각도 파라미터에 기반하여 temp 각도 파라미터를 계산하고; temp 각도 파라미터에 기반하여 제2 계산 파라미터를 결정하고; 그리고 각도 파라미터 및 거리 파라미터에 기반하여 제3 계산 파라미터를 계산하도록 구성된다.
실현가능한 구현에서, 제1 계산 파라미터는 각도 파라미터에 따라 미리설정된 룩업 테이블을 체크함으로써 결정되고, 제2 계산 파라미터는 temp 각도 파라미터에 따라 룩업 테이블을 체크함으로써 결정되고, 그리고 제1 계산 파라미터 및 제2 계산 파라미터는, 각각, 동일한 각도의 코사인 값 및 사인 값이다.
실현가능한 구현에서, 거리는,
distFromLine = (x + K) * P1 + (y + K) * P2 - P3 에 의해 계산되며,
P1, P2 및 P3은, 각각, 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, distFromLine은 거리를 표현하고, K는 음이 아닌 정수이고, x는 샘플 세트에서 타깃 포지션의 수평 좌표를 표현하고, y는 직교 좌표계에서 타깃 포지션의 수직 좌표를 표현하며, 현재 블록의 상단-좌측 샘플의 포지션이 좌표 원점으로 설정되고, 우측 방향은 양의 수평 방향으로 설정되고 그리고 아래 방향은 양의 수직 방향으로 설정된다.
실현가능한 구현에서, K는 1과 동일하다.
실현가능한 구현에서, 타깃 포지션은 샘플 세트에서 미리결정된다.
실현가능한 구현에서, 미리결정된 포지션은 샘플 세트의 상단-좌측 포지션 또는 샘플 세트의 중심 포지션이다.
실현가능한 구현에서, 거리의 샘플 정밀도는 정수 샘플보다 높고;
이에 상응하여, 거리는,
distFromLine = ((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3 에 의해 계산되며,
2N은 거리의 샘플 정밀도의 역수를 표현한다.
실현가능한 구현에서, K는 1과 동일하다.
실현가능한 구현에서, 샘플 세트는 현재 블록의 루마 샘플 세트이다.
실현가능한 구현에서, 장치(3000)는 세분 모듈(3003)을 더 포함하며, 이는 현재 블록을 다수의 샘플 세트들로 세분하도록 구성되며, 다수의 샘플 세트들 각각은 샘플 세트와 동일한 크기를 갖거나; 또는 현재 블록을 샘플 세트로 설정한다.
실현가능한 구현에서, 샘플 세트는 4×4 샘플 어레이이다.
실현가능한 구현에서, 다수의 샘플 세트들 각각은, 각각의 모션 정보 저장 유닛에 대응하고, 모션 정보 저장 유닛은 제1 모션 정보, 제2 모션 정보 및 제3 모션 정보 중 하나를 저장하는 데 사용된다.
실현가능한 구현에서, 제1 서브블록 및 제2 서브블록은 삼각형 파티션, 사다리꼴 파티션 또는 비대칭 직사각형 파티션이다.
실현가능한 구현에서, 제1 모션 정보는 제1 참조 픽처 리스트에 기반한 모션 정보를 포함하고, 제2 모션 정보는 제2 참조 픽처 리스트에 기반한 모션 정보를 포함하고, 그리고 제3 모션 정보는 제1 모션 정보 및 제2 모션 정보를 포함한다.
제6 실시예에서, 비디오 스트림을 디코딩하기 위한 장치는 프로세서 및 메모리를 포함하며, 메모리는, 프로세서로 하여금, 제3 실시예의 임의의 구현에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
제7 실시예에서, 비디오 스트림을 인코딩하기 위한 장치는 프로세서 및 메모리를 포함하며, 메모리는, 프로세서로 하여금, 제3 실시예의 임의의 구현에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
제8 실시예에서, 컴퓨터-판독가능 저장 매체에는 명령들이 저장되어 있고, 명령들은, 실행되는 경우, 하나 이상의 프로세서들로 하여금, 비디오 데이터를 코딩하게 하도록 구성되며, 명령들은, 하나 이상의 프로세서들로 하여금, 제3 실시예의 임의의 구현에 따른 방법을 수행하게 한다.
제9 실시예에서, 컴퓨터 프로그램은, 컴퓨터 상에서 실행되는 경우, 제3 실시예의 임의의 구현에 따른 방법을 수행하기 위한 프로그램 코드를 포함한다.
다음은 상술된 실시예에 도시된 인코딩 방법뿐만 아니라 디코딩 방법의 적용들, 및 이를 사용하는 시스템에 대한 설명이다.
도 22는 콘텐츠 배포 서비스를 구현하기 위한 콘텐츠 공급 시스템(3100)을 도시하는 블록도이다. 이 콘텐츠 공급 시스템(3100)은 캡처 디바이스(3102), 단말 디바이스(3106)를 포함하고, 선택적으로 디스플레이(3126)를 포함한다. 캡처 디바이스(3102)는 통신 링크(3104)를 통해 단말 디바이스(3106)와 통신한다. 통신 링크는 위에서 설명된 통신 채널(13)을 포함할 수 있다. 통신 링크(3104)는 WIFI, 이더넷, 케이블, 무선(3G/4G/5G), USB, 또는 이들의 임의의 종류의 조합 등을 포함하지만 이로 제한되지 않는다.
캡처 디바이스(3102)는 데이터를 생성하고, 그리고 위의 실시예들에서 도시된 인코딩 방법에 의해 데이터를 인코딩할 수 있다. 대안적으로, 캡처 디바이스(3102)는 스트리밍 서버(도면에 도시되지 않음)에 데이터를 배포할 수 있고, 서버는 데이터를 인코딩하고 인코딩된 데이터를 단말 디바이스(3106)에 전송한다. 캡처 디바이스(3102)는, 카메라, 스마트 폰 또는 패드, 컴퓨터 또는 랩톱, 화상 회의 시스템, PDA, 차량 탑재 디바이스, 또는 이들 중 임의의 것의 조합 등을 포함하지만, 이로 제한되지 않는다. 예를 들어, 캡처 디바이스(3102)는 위에서 설명된 바와 같은 소스 디바이스(12)를 포함할 수 있다. 데이터가 비디오를 포함하는 경우, 캡처 디바이스(3102)에 포함된 비디오 인코더(20)는 실제로 비디오 인코딩 프로세싱을 수행할 수 있다. 데이터가 오디오(즉, 음성)를 포함하는 경우, 캡처 디바이스(3102)에 포함된 오디오 인코더는 실제로 오디오 인코딩 프로세싱을 수행할 수 있다. 일부 실제 시나리오들에 대해, 캡처 디바이스(3102)는 인코딩된 비디오 및 오디오 데이터를 함께 멀티플렉싱함으로써 이들을 배포한다. 다른 실제 시나리오들에 대해, 예를 들어 화상 회의 시스템에서, 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터는 멀티플렉싱되지 않는다. 캡처 디바이스(3102)는 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터를 단말 디바이스(3106)에 별도로 배포한다.
콘텐츠 공급 시스템(3100)에서, 단말 디바이스(310)는 인코딩된 데이터를 수신하고 재생한다. 단말 디바이스(3106)는, 데이터 수신 및 복구 능력을 갖춘 디바이스, 이를테면, 스마트 폰 또는 패드(3108), 컴퓨터 또는 랩톱(3110), NVR(network video recorder)/DVR(digital video recorder)(3112), TV(3114), STB(set top box)(3116), 화상 회의 시스템(3118), 비디오 감시 시스템(3120), PDA(personal digital assistant)(3122), 차량 탑재 디바이스(3124), 또는 이들 중 임의의 것의 조합 또는 상술된 인코딩된 데이터를 디코딩할 수 있는 것일 수 있다. 예를 들어, 단말 디바이스(3106)는 위에서 설명된 바와 같은 목적지 디바이스(14)를 포함할 수 있다. 인코딩된 데이터가 비디오를 포함하는 경우, 단말 디바이스에 포함된 비디오 디코더(30)는 비디오 디코딩을 수행하도록 우선순위화된다. 인코딩된 데이터가 오디오를 포함하는 경우, 단말 디바이스에 포함된 오디오 디코더는 오디오 디코딩 프로세싱을 수행하도록 우선순위화된다.
예를 들어, 자체 디스플레이를 갖춘 단말 디바이스, 예를 들어, 스마트 폰 또는 패드(3108), 컴퓨터 또는 랩톱(3110), NVR(network video recorder)/DVR(digital video recorder)(3112), TV(3114), PDA(personal digital assistant)(3122), 또는 차량 탑재 디바이스(3124)에 대해, 단말 디바이스는 디코딩된 데이터를 자신의 디스플레이에 공급할 수 있다. 디스플레이가 장착되지 않은 단말 디바이스, 예를 들어 STB(3116), 화상 회의 시스템(3118) 또는 비디오 감시 시스템(3120)에 대해서는, 외부 디스플레이(3126)가 그 내부에 접속되어 디코딩된 데이터를 수신하고 표시한다.
이 시스템의 각각의 디바이스가 인코딩 또는 디코딩을 수행하는 경우, 상술된 실시예들에 도시된 바와 같은 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스가 사용될 수 있다.
도 23은 단말 디바이스(3106)의 일 예의 구조를 도시하는 다이어그램이다. 단말 디바이스(3106)가 캡처 디바이스(3102)로부터 스트림을 수신한 후, 프로토콜 처리 유닛(3202)은 스트림의 전송 프로토콜을 분석한다. 프로토콜은 RTSP(Real Time Streaming Protocol), HTTP(Hyper Text Transfer Protocol), HTTP HLS(HTTP Live streaming protocol), MPEG-DASH, RTP(Real-time Transport protocol), RTMP(Real Time Messaging Protocol), 또는 이들의 임의의 종류의 조합 등을 포함하지만 이로 제한되지 않는다.
프로토콜 처리 유닛(3202)이 스트림을 처리한 후, 스트림 파일이 생성된다. 파일은 디멀티플렉싱 유닛(3204)에 출력된다. 디멀티플렉싱 유닛(3204)은 멀티플렉싱된 데이터를 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터로 분리할 수 있다. 위에서 설명된 바와 같이, 일부 실제 시나리오들에 대해, 예를 들어 화상 회의 시스템에서, 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터는 멀티플렉싱되지 않는다. 이런 상황에서, 인코딩된 데이터는 디멀티플렉싱 유닛(3204)을 거치지 않고 비디오 디코더(3206) 및 오디오 디코더(3208)에 전송된다.
디멀티플렉싱 프로세싱을 통해, 비디오 기본 스트림(ES), 오디오 ES 및 선택적으로는 자막들이 생성된다. 상술된 실시예들에서 설명되는 바와 같은 비디오 디코더(30)를 포함하는 비디오 디코더(3206)는, 상술된 실시예에서 도시된 바와 같은 디코딩 방법에 의해 비디오 ES를 디코딩하여 비디오 프레임을 생성하고, 이 데이터를 동기화 유닛(3212)에 공급한다. 오디오 디코더(3208)는 오디오 ES를 디코딩하여 오디오 프레임을 생성하고, 이 데이터를 동기화 유닛(3212)에 공급한다. 대안적으로, 비디오 프레임은, 동기화 유닛(3212)에 공급되기 전에 버퍼(도 23에 도시되지 않음)에 저장될 수 있다. 유사하게, 오디오 프레임은, 동기화 유닛(3212)에 공급되기 전에 버퍼(도 23에 도시되지 않음)에 저장될 수 있다.
동기화 유닛(3212)은 비디오 프레임과 오디오 프레임을 동기화하고, 비디오/오디오를 비디오/오디오 디스플레이(3214)에 공급한다. 예를 들어, 동기화 유닛(3212)은 비디오 및 오디오 정보의 제시를 동기화한다. 정보는, 코딩된 오디오 및 시각 데이터의 제시에 관한 타임 스탬프들 및 데이터 스트림 자체의 전달에 관한 타임 스탬프들을 사용하여 신택스로 코딩될 수 있다.
스트림에 자막이 포함된 경우, 자막 디코더(3210)는, 자막을 디코딩하여 이를 비디오 프레임 및 오디오 프레임과 동기화하고, 그리고 비디오/오디오/자막을 비디오/오디오/자막 디스플레이(3216)에 공급한다.
본 출원은 상술된 시스템으로 제한되지 않으며, 상술된 실시예들에서 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스 중 하나가 다른 시스템, 예를 들어 자동차 시스템에 통합될 수 있다.
수학적 연산자들
본 출원에서 사용되는 수학적 연산자들은 C 프로그래밍 언어에서 사용되는 것과 유사하다. 그러나, 정수 나눗셈과 산술 시프트 연산의 결과들이 보다 정확하게 정의되고, 지수화 및 실수 값 나눗셈과 같은 추가 연산들이 정의된다. 넘버링 및 카운팅 규칙들은 일반적으로 0에서 시작하며, 예를 들면 "첫 번째"는 0번째와 등가이고 "두 번째"는 1번째와 등가인 식이다.
산술 연산자들
다음의 산술 연산자들은 다음과 같이 정의된다:
+ 덧셈
? 뺄셈(2-인수 연산자) 또는 부정(negation)(단항 전치 연산자)
* 곱셈, 행렬 곱셈을 포함
xy 지수화. x를 y의 거듭제곱으로 지정한다. 다른 맥락들에서, 이러한 표기법은 지수화로 해석할 의도가 없는 위첨자 표시에 사용된다.
/ 결과가 0으로 잘라버림되는 정수 나눗셈. 예를 들어, 7/4 및 -7/-4는 1로 잘라버림되고 -7/4 및 7/-4는 -1로 잘라버림됨.
÷ 잘라버림이나 반올림이 의도되지 않은 수학식들에서의 나눗셈을 표시하는 데 사용된다.
잘라버림이나 반올림이 의도되지 않은 수학식들에서의 나눗셈을 표시하는 데 사용된다.
x로부터 y까지(y 포함)의 모든 정수 값들을 취하는 i와 f(i)의 합
x%y 모듈러스. x를 y로 나눈 나머지, x >= 0 및 y > 0인 정수들 x 및 y에 대해서만 정의된다.
논리 연산자들
다음의 논리 연산자들은 다음과 같이 정의된다:
x&&y x 및 y의 부울 논리 "and"
x∥y x 및 y의 부울 논리 "or"
! 부울 논리 "not"
x ? y:z x가 TRUE이거나 0과 동일하지 않으면, y 값으로 평가되고; 그렇지 않으면, z 값으로 평가된다.
관계 연산자들
다음의 논리 연산자들은 다음과 같이 정의된다:
> 보다 큼
>= 이상
< 미만
<= 이하
== 동일함
!= 동일하지 않음
관계 연산자가, "na" 값(해당 사항 없음)을 할당받은 신택스 엘리먼트 또는 변수에 적용되는 경우, “na" 값은 신택스 엘리먼트 또는 변수에 대한 유일 값(distinct value)으로 처리된다. “na" 값은 임의의 다른 값과 동일하지 않은 것으로 간주된다.
비트 단위(bit-wise) 연산자들
다음의 비트 단위 연산자들은 다음과 같이 정의된다:
& 비트 단위 "and". 정수 인수들에 대해 연산되는 경우, 정수 값의 2의 보수 표현에 대해 연산한다. 다른 인수보다 적은 수의 비트를 포함하는 바이너리 인수에 대해 연산되는 경우, 더 짧은 인수는 0과 같은 상위 비트(more significant bit)를 추가함으로써 확장된다.
│ 비트 단위 "or". 정수 인수들에 대해 연산되는 경우, 정수 값의 2의 보수 표현에 대해 연산한다. 다른 인수보다 적은 수의 비트를 포함하는 바이너리 인수에 대해 연산되는 경우, 더 짧은 인수는 0과 같은 상위 비트(more significant bit)를 추가함으로써 확장된다.
^ 비트 단위 "배타적 or". 정수 인수들에 대해 연산되는 경우, 정수 값의 2의 보수 표현에 대해 연산한다. 다른 인수보다 적은 수의 비트를 포함하는 바이너리 인수에 대해 연산되는 경우, 더 짧은 인수는 0과 같은 상위 비트를 추가함으로써 확장된다.
x>>y x의 2의 보수 정수 표현을 y 이진수(binary digit)만큼 산술 우측 시프트. 이 함수는 y의 음이 아닌 정수 값들에 대해서만 정의된다. 우측 시프트의 결과로 최상위 비트(MSB)로 시프트된 비트는 시프트 연산 이전 x의 MSB와 동일한 값을 갖는다.
x<<y x의 2의 보수 정수 표현을 y 이진수만큼 산술 좌측 시프트. 이 함수는 y의 음이 아닌 정수 값들에 대해서만 정의된다. 좌쪽 시프트의 결과로 최하위 비트(LSB)로 시프트된 비트는 0과 동일한 값을 갖는다.
할당 연산자들
다음의 산술 연산자들은 다음과 같이 정의된다:
= 할당 연산자들
+ + 증분, 즉 x++는 x = x + 1과 등가이고; 어레이 인덱스에서 사용되는 경우, 증분 연산 이전의 변수 값에 대해 평가된다.
-- 감분, 즉 x--는 x = x - 1과 등가이고; 어레이 인덱스에서 사용되는 경우, 감분 연산 이전의 변수 값에 대해 평가된다.
+= 지정된 양만큼 증분, 즉 x += 3은 x = x + 3과 등가이고, 그리고 x+= (-3)은 x = x + (-3)과 등가이다.
-= 지정된 양만큼 감분, 즉 x -= 3은 x = x - 3과 등가이고, 그리고 x -= (-3)은 x = x - (-3)과 등가이다.
범위 표기법
다음의 표기법은 값들의 범위를 지정하는 데 사용된다:
x = y..z x는 y에서 시작하여 z(y와 z를 포함)까지의 정수 값들을 취하며, x, y 및 z는 정수들이고 z는 y보다 크다.
수학적 함수들
다음의 수학적 함수가 정의된다:
Asin(x) 라디안 단위로, -1.0 내지 1.0(-1.0과 1.0 포함) 범위의 인수 x에 대해 연산되는 삼각 역사인 함수, 출력 값은 -π÷2 내지 π÷2 범위( -π÷2과 π÷2 포함)이다.
Atan(x) 라디안 단위로, 인수 x에 대해 연산되는 삼각 역 탄젠트 함수, 출력 값은, -π÷2 내지 π÷2 범위(-π÷2과 π÷2 포함)이다.
Ceil(x) x 이상인 가장 작은 정수.
Clip1Y(x) = Clip3(0, (1 << BitDepthY) - 1, x)
Clip1C(x) = Clip3(0, (1 << BitDepthC) - 1, x)
Cos(x) 라디안 단위로, 인수 x에 대해 연산되는 삼각 코사인 함수.
Floor(x) x 이하인 가장 큰 정수.
Ln(x) x의 자연 로그(밑수-e 로그, 여기서 e는 자연 로그 밑수 상수 2.718 281 828...)이다.
Log2(x) x의 밑수가 2인 로그.
Log10(x) x의 밑수가 10인 로그.
Round(x) = Sign(x) * Floor(Abs(x) + 0.5 )
Sin(x) 라디안 단위로, 인수 x에 대해 연산되는 삼각 사인 함수.
Swap(x, y) = (y, x)
Tan(x) 라디안 단위로, 인수 x에 대해 연산되는 삼각 탄젠트 함수.
연산 우선순위 순서
표현식의 우선순위 순서가 괄호를 사용하여 명시적으로 지시되지 않는 경우, 다음 원칙들이 적용된다:
- 더 높은 우선순위의 연산들은 더 낮은 우선순위의 임의의 연산에 앞서 평가된다.
- 우선순위가 같은 연산들은 좌측에서 우측으로 순차적으로 평가된다.
아래 표는 가장 높은 것부터 가장 낮은 것까지의 연산들의 우선순위를 지정한다; 표에서 더 높은 포지션은 더 높은 우선순위를 지시한다.
C 프로그래밍 언어에서도 또한 사용되는 이러한 연산자들에 대해, 본 명세서에서 사용되는 우선순위는 C 프로그래밍 언어에서 사용되는 것과 동일하다.
표: 가장 높은(표 상단)에서 가장 낮은(표 하단)까지의 연산 우선순위
논리 연산들에 대한 텍스트 설명
텍스트에서, 수학적으로 다음의 형태로 설명되는 논리 연산들의 명령문은 다음과 같다:
은, 다음과 같은 방식으로 설명될 수 있다:
... 다음과 같이 / ... 다음이 적용된다.
- 조건 0인 경우, 명령문 0
- 그렇지 않은 경우, 조건 1인 경우, 명령문 1
- ...
- 그렇지 않은 경우(나머지 조건에 대한 참고 사항), 명령문 n
텍스트에서 각각의 "If ... Otherwise, if ... Otherwise, ..." 명령문은, "... as follows" 또는 "... the following applies" 바로 뒤에 "If ... "가 도입된다. “If ... Otherwise, if ... Otherwise, ..."의 마지막 조건은 항상 "Otherwise, ..."이다. 삽입된 "If ... Otherwise, if ... Otherwise, ..." 명령문들은, "... as follows" 또는 "... the following applies"을 끝 "Otherwise, ..."과 매칭시킴으로썩 식별될 수 있다.
텍스트에서, 수학적으로 다음의 형태로 설명되는 논리 연산들의 명령문은 다음과 같다:
은, 다음과 같은 방식으로 설명될 수 있다:
... 다음과 같이 / ... 다음이 적용된다:
- 다음 조건들이 모두 참인 경우 명령문 0::
- 조건 0a
- 조건 0b
- 그렇지 않은 경우, 다음 조건들 중 하나 이상이 참인 경우, 명령문 1:
- 조건 1a
- 조건 1b
- ...
- 그렇지 않은 경우, 명령문 n
텍스트에서, 수학적으로 다음의 형태로 설명되는 논리 연산들의 명령문은 다음과 같다:
은 다음과 같은 방식으로 설명된 수 있다:
조건 0인 경우, 명령문 0
조건 1인 경우, 명령문 1
예를 들어, 인코더(20) 및 디코더(30)의 실시예들, 및 예를 들어, 인코더(20) 및 디코더(30)를 참조로 본원에서 설명되는 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능들은 컴퓨터-판독가능 매체에 저장되거나 하나 이상의 명령 또는 코드로서 통신 매체를 통해 전송되고 하드웨어-기반 처리 유닛에 의해 실행될 수 있다. 컴퓨터-판독가능 매체들은, 예를 들어, 통신 프로토콜에 따라, 일 장소에서 다른 장소로의 컴퓨터 프로그램의 전달을 용이하게 하는 임의의 매체들을 포함하는 유형의 매체, 예를 들어, 데이터 저장 매체 또는 통신 매체에 대응하는 컴퓨터-판독가능 저장 매체를 포함할 수 있다. 이러한 방식으로, 컴퓨터-판독가능 매체는 일반적으로, (1) 비일시적인, 유형의 컴퓨터-판독가능 저장 매체 또는 (2) 신호 또는 캐리어 파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체들은, 본 개시내용에 설명된 기법들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 리트리브하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 매체를 포함할 수 있다.
제한이 아닌 예로서, 그러한 컴퓨터-판독가능 저장 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장부, 자기 디스크 저장부 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는데 사용될 수 있고, 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 연결수단(connection)이 컴퓨터-판독가능 매체로 적절히 지칭된다. 예를 들어, 명령들이 동축 케이블, 광섬유 케이블, 꼬임 쌍선, 디지털 가입자 회선(DSL: digital subscriber line), 또는 적외선, 라디오 및 마이크로파와 같은 무선 기술들을 이용하여 웹사이트, 서버 또는 다른 원격 소스로부터 전송된다면, 동축 케이블, 광섬유 케이블, 꼬임 쌍선, DSL, 또는 적외선, 라디오 및 마이크로파와 같은 무선 기술들이 매체의 정의에 포함된다. 그러나, 컴퓨터-판독가능 저장 매체들 및 데이터 저장 매체들은 연결들, 캐리어 파들, 신호들 또는 다른 일시적 매체들을 포함하지 않지만, 그 대신 비-일시적 유형의 저장 매체들에 관한 것임이 이해되어야 한다. 본원에서 사용되는 바와 같은 디스크(disk 및 disc)는 콤팩트 디스크(CD: compact disc), 레이저 디스크(laser disc), 광 디스크(optical disc), 디지털 다기능 디스크(DVD: digital versatile disc), 플로피 디스크(floppy disk) 및 블루레이 디스크(Blu-ray disc)를 포함하며, 여기서 디스크(disk)들은 보통 데이터를 자기적으로 재생하는 한편, 디스크(disc)들은 데이터를 레이저들에 의해 광학적으로 재생한다. 상기한 것들의 결합들이 또한, 컴퓨터-판독가능 매체의 범위 내에 포함되어야 한다.
명령들은, 하나 이상의 디지털 신호 프로세서(DSP)들, 범용 마이크로프로세서들, 주문형 집적 회로(ASIC)들, 필드 프로그래밍가능 로직 어레이(FPGA)들, 또는 다른 동등한 통합형 또는 이산 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수 있다. 이에 따라, 본원에서 사용된 바와 같은 “프로세서"라는 용어는, 본원에서 설명되는 기법들의 구현에 적합한 전술한 구조 또는 임의의 다른 구조 중 임의의 구조를 지칭할 수 있다. 추가로, 일부 양상들에서, 본원에서 설명된 기능은, 인코딩 및 디코딩을 위해 구성된 전용 하드웨어 및/또는 소프트웨어 모듈들 내에서 제공되거나 또는 결합된 코덱으로 통합될 수 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들로 완전히 구현될 수 있다.
본 개시내용의 기법들은, 무선 핸드셋, 집적 회로(IC) 또는 한 세트의 IC들(예를 예를 들어, 칩셋)을 포함하는 광범위하게 다양한 디바이스들 또는 장치들에서 구현될 수 있다. 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양상들을 강조하기 위해 본 개시내용에서는 다양한 컴포넌트들, 모듈들 또는 유닛들이 설명되지만, 이들이 반드시 서로 다른 하드웨어 유닛들에 의한 실현을 필요로 하는 것은 아니다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛들은, 코덱 하드웨어 유닛으로 결합될 수 있거나 또는 적절한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서들을 포함하는 상호작동식(interoperative) 하드웨어 유닛들의 집합체에 의해 제공될 수 있다.

Claims (40)

  1. 디코딩 방법으로서,
    비트스트림을 수신하는 단계 - 여기서 상기 비트스트림은 현재 블록의 코딩된 데이터와 지시자를 포함하고, 상기 현재 블록은 공통 경계에 의해 제1 서브블록과 제2 서브블록으로 분리되며, 상기 제1 서브블록은 제1 예측 값에 대응하고 상기 제2 서브블록은 제2 예측 값에 대응하며, 상기 공통 경계는 기하학적 파티션 모드의 분리 라인임 - ;
    상기 비트스트림으로부터 상기 지시자를 파싱하는 단계;
    상기 지시자에 기초하여 각도 파라미터와 거리 파라미터를 획득하는 단계 - 여기서 상기 각도 파라미터는 기하학적 파티션 모드의 각도 인덱스를 지정하고 상기 거리 파라미터는 기하학적 파티션 모드의 거리 인덱스를 지정함 - ;
    미리 설정된 룩업 테이블을 확인함으로써 상기 각도 파라미터와 상기 거리 파라미터에 기초하여 상기 현재 블록 내의 샘플 세트와 상기 공통 경계 사이의 거리를 결정하는 단계;
    상기 거리에 따라 제1 가중 팩터를 획득하는 단계;
    상기 제1 가중 팩터에 따라 제2 가중 팩터를 획득하는 단계; 및
    상기 제1 예측 값, 상기 제2 예측 값, 상기 제1 가중 팩터 및 상기 제2 가중 팩터를 사용하여 상기 현재 블록에 대한 결합 예측 값을 획득하는 단계
    를 포함하는 디코딩 방법.
  2. 제1항에 있어서,
    상기 각도 파라미터는 angleIdx이고 상기 거리 파라미터는 distanceIdx이며, 상기 미리 설정된 룩업 테이블을 확인함으로써 상기 각도 파라미터와 거리 파라미터에 기초하여 거리를 결정하는 단계가,
    다음의 방정식:
    distFromLine=((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3
    을 사용하여 상기 거리를 계산하는 단계
    를 포함하고, 여기서 distFromLine은 상기 거리를 나타내고, K는 음이 아닌 정수이며, N=1이고, P1, P2 및 P3는 각각 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, 상기 제1 계산 파라미터는 angleIdx에 따라 상기 미리 설정된 룩업 테이블을 확인하여 결정되고, 상기 제2 계산 파라미터는 (angleIdx+8)%32에 따라 상기 룩업 테이블을 확인하여 결정되며, 상기 제3 계산 파라미터는 angleIdx 및 distanceIdx에 기초하여 결정되는, 디코딩 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 디코딩 방법은 추가적으로:
    상기 거리를 임계값과 비교하여 상기 샘플 세트에 대해 제3 모션 정보를 저장할지 여부를 결정하는 단계 - 여기서 상기 제1 서브블록은 제1 모션 정보에 대응하고 상기 제2 서브블록은 제2 모션 정보에 대응하며, 제3 모션 정보는 상기 제1 모션 정보와 상기 제2 모션 정보에 의해 도출되는, 디코딩 방법.
  4. 제3항에 있어서,
    상기 거리를 임계값과 비교하여 상기 샘플 세트에 대해 제3 모션 정보를 저장할지 여부를 결정하는 단계가,
    상기 거리의 절대값이 상기 임계값보다 작거나 같은 경우에, 상기 샘플 세트에 대해 제3 모션 정보를 저장하기로 결정하는 단계
    를 포함하는, 디코딩 방법.
  5. 제3항에 있어서,
    상기 거리의 절대값이 상기 임계값보다 큰 경우에, 상기 디코딩 방법은 추가로:
    상기 거리가 양(positive)인 경우, 상기 샘플 세트에 대해 상기 제1 모션 정보를 저장하기로 결정하는 단계; 또는 상기 거리가 음(negative)인 경우, 상기 샘플 세트에 대해 상기 제2 모션 정보를 저장하기로 결정하는 단계
    를 더 포함하는 디코딩 방법.
  6. 제3항에 있어서,
    상기 임계값은 미리 설정된 것인, 디코딩 방법.
  7. 제1항 또는 제2항에 있어서,
    상기 제1 가중 팩터는 다음의 방정식:
    sampleWeight1=Clip3( 0, 8, f(sample_dist))
    을 사용하여 계산되고, 여기서 sampleWeight1은 제1 가중 팩터를 나타내고 sample_dist는 상기 거리를 나타내며, f(sample_dist)는 sample_dist를 입력으로 하는 함수를 표현하는, 디코딩 방법.
  8. 제1항 또는 제2항에 있어서,
    상기 제1 가중 팩터에 따라 상기 제2 가중 팩터를 획득하는 단계가,
    다음의 공식:
    sampleWeight2 = T - sampleWeight1
    에 따라 상기 제2 가중 팩터를 계산하는 단계
    를 포함하며, 여기서 sampleWeight1은 상기 제1 가중 팩터를 나타내고, 상기 sampleWeight2는 상기 제2 가중 팩터를 나타내며, T는 미리 정의된 상수인, 디코딩 방법.
  9. 제8항에 있어서,
    T는 8인, 디코딩 방법.
  10. 제1항 또는 제2항에 있어서,
    상기 샘플 세트는 상기 현재 블록의 루마(luma) 샘플 세트인, 디코딩 방법.
  11. 제1항 또는 제2항에 있어서,
    상기 현재 블록 내의 샘플 세트와 상기 공통 경계 사이의 거리를 결정하기 전에, 상기 디코딩 방법은 추가로:
    상기 현재 블록을 복수의 샘플 세트로 분할하는 단계 - 여기서 각각의 샘플 세트는 상기 샘플 세트와 동일한 크기를 가지거나 또는 상기 현재 블록을 상기 샘플 세트로 설정하는 단계
    를 더 포함하는 디코딩 방법.
  12. 제1항 또는 제2항에 있어서,
    상기 샘플 세트는 4x4 샘플 배열인, 디코딩 방법.
  13. 제1항 또는 제2항에 있어서,
    상기 제1 모션 정보와 상기 제2 모션 정보가 서로 다른 참조 픽처 리스트로부터 온 것일 때, 상기 제3 모션 정보는 상기 제1 모션 정보와 상기 제2 모션 정보를 결합함으로써 획득되며, 상기 제1 모션 정보와 상기 제2 모션 정보가 동일한 참조 픽처 리스트에서 온 것일 때, 상기 제3 모션 정보는 상기 제2 모션 정보와 동일한 것인, 디코딩 방법.
  14. 제1항 또는 제2항에 있어서,
    저장된 상기 모션 정보는 상기 샘플 세트의 예측 값을 결정하는 데 사용되거나 저장된 상기 모션 정보는 향후 코딩 블록의 예측 프로세스에 대한 참조 정보로 사용되는, 디코딩 방법.
  15. 디코딩 장치로서,
    비트스트림을 수신하도록 구성되는 수신 모듈 - 여기서 상기 비트스트림은 현재 블록의 코딩된 데이터와 지시자를 포함하고, 상기 현재 블록은 공통 경계에 의해 제1 서브블록과 제2 서브블록으로 분리되며, 상기 제1 서브블록은 제1 예측 값에 대응하고 상기 제2 서브블록은 제2 예측 값에 대응하며, 상기 공통 경계는 기하학적 파티션 모드의 분리 라인임 - ;
    상기 비트스트림으로부터 상기 지시자를 파싱하도록 구성되는 파싱 모듈;
    상기 지시자에 기초하여 각도 파라미터와 거리 파라미터를 획득하도록 구성되는 획득 모듈 - 여기서 상기 각도 파라미터는 기하학적 파티션 모드의 각도 인덱스를 지정하고 상기 거리 파라미터는 기하학적 파티션 모드의 거리 인덱스를 지정함 - ;
    미리 설정된 룩업 테이블을 확인함으로써 상기 각도 파라미터와 상기 거리 파라미터에 기초하여 상기 현재 블록 내의 샘플 세트와 상기 공통 경계 사이의 거리를 결정하도록 구성되는 계산 모듈
    을 포함하고,
    상기 획득 모듈은 추가로,
    상기 거리에 따라 제1 가중 팩터를 획득하고,
    상기 제1 가중 팩터에 따라 제2 가중 팩터를 획득하며,
    상기 제1 예측 값, 상기 제2 예측 값, 상기 제1 가중 팩터 및 상기 제2 가중 팩터를 사용하여 상기 현재 블록에 대한 결합 예측 값을 획득하도록 구성되는, 디코딩 장치.
  16. 제15항에 있어서,
    상기 각도 파라미터는 angleIdx이고 상기 거리 파라미터는 distanceIdx이며, 상기 결정 모듈은 추가로:
    다음의 방정식:
    distFromLine=((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3
    을 사용하여 상기 거리를 계산하도록 구성되고, 여기서 distFromLine은 상기 거리를 나타내고, K는 음이 아닌 정수이며, N=1이고, P1, P2 및 P3는 각각 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, 상기 제1 계산 파라미터는 angleIdx에 따라 상기 미리 설정된 룩업 테이블을 확인하여 결정되고, 상기 제2 계산 파라미터는 (angleIdx+8)%32에 따라 상기 룩업 테이블을 확인하여 결정되며, 상기 제3 계산 파라미터는 angleIdx 및 distanceIdx에 기초하여 결정되는, 디코딩 장치.
  17. 제15항 또는 제16항에 있어서,
    상기 거리를 임계값과 비교하여 상기 샘플 세트에 대해 제3 모션 정보를 저장할지 여부를 결정하도록 구성되는 비교 모듈 - 상기 제1 서브블록은 제1 모션 정보에 대응하고 상기 제2 서브블록은 제2 모션 정보에 대응하며, 제3 모션 정보는 상기 제1 모션 정보와 상기 제2 모션 정보에 의해 도출됨 -
    을 더 포함하는 디코딩 장치.
  18. 제17항에 있어서,
    상기 비교 모듈이,
    상기 거리의 절대값이 상기 임계값보다 작거나 같은 경우에, 상기 샘플 세트에 대해 제3 모션 정보를 저장하기로 결정하도록 구성되는, 디코딩 장치.
  19. 제17항에 있어서,
    상기 거리의 절대값이 상기 임계값보다 큰 경우에, 상기 비교 모듈은 추가로:
    상기 거리가 양(positive)인 경우, 상기 샘플 세트에 대해 상기 제1 모션 정보를 저장하기로 결정하거나; 또는 상기 거리가 음(negative)인 경우, 상기 샘플 세트에 대해 상기 제2 모션 정보를 저장하기로 결정하도록 구성되는, 디코딩 장치.
  20. 제15항 또는 제16항에 있어서,
    상기 임계값은 미리 설정된 것인, 디코딩 장치.
  21. 제15항 또는 제16항에 있어서,
    상기 제1 가중 팩터는 다음의 방정식:
    sampleWeight1=Clip3( 0, 8, f(sample_dist))
    을 사용하여 계산되고, 여기서 sampleWeight1은 제1 가중 팩터를 나타내고 sample_dist는 상기 거리를 나타내며, f(sample_dist)는 sample_dist를 입력으로 하는 함수를 표현하는, 디코딩 장치.
  22. 제15항 또는 제16항에 있어서,
    상기 획득 모듈이 추가로,
    다음의 공식:
    sampleWeight2 = T - sampleWeight1
    에 따라 상기 제2 가중 팩터를 계산하도록 구성되고, 여기서 sampleWeight1은 상기 제1 가중 팩터를 나타내고, 상기 sampleWeight2는 상기 제2 가중 팩터를 나타내며, T는 미리 정의된 상수인, 디코딩 장치.
  23. 제22항에 있어서,
    T는 8인, 디코딩 장치.
  24. 제15항 또는 제16항에 있어서,
    상기 샘플 세트는 상기 현재 블록의 루마(luma) 샘플 세트인, 디코딩 장치.
  25. 제15항 또는 제16항에 있어서,
    상기 디코딩 장치는 분리 모듈을 더 포함하고,
    상기 분리 모듈은,
    상기 현재 블록을 복수의 샘플 세트로 분리하거나 - 여기서 각각의 샘플 세트는 상기 샘플 세트와 동일한 크기를 가짐 - ; 또는
    상기 현재 블록을 상기 샘플 세트로 설정하도록 구성되는, 디코딩 장치.
  26. 제15항 또는 제16항에 있어서,
    상기 샘플 세트는 4x4 샘플 배열인, 디코딩 장치.
  27. 제15항 또는 제16항에 있어서,
    상기 제1 모션 정보와 상기 제2 모션 정보가 서로 다른 참조 픽처 리스트로부터 온 것일 때, 상기 제3 모션 정보는 상기 제1 모션 정보와 상기 제2 모션 정보를 결합함으로써 획득되며, 상기 제1 모션 정보와 상기 제2 모션 정보가 동일한 참조 픽처 리스트에서 온 것일 때, 상기 제3 모션 정보는 상기 제2 모션 정보와 동일한 것인, 디코딩 장치.
  28. 제15항 또는 제16항에 있어서,
    저장된 상기 모션 정보는 상기 샘플 세트의 예측 값을 결정하는 데 사용되거나 저장된 상기 모션 정보는 향후 코딩 블록의 예측 프로세스에 대한 참조 정보로 사용되는, 디코딩 장치.
  29. 비디오 비트스트림을 디코딩하기 위한 장치로서, 상기 장치는 프로세서와 메모리를 포함하며, 상기 메모리는 상기 프로세서가 제1항 내지 제14항 중 어느 한 항의 방법을 수행하도록 하는 명령을 저장하는, 장치.
  30. 컴퓨터가 판독 가능한 저장 매체로서, 상기 매체는, 실행될 때 하나 이상의 프로세서로 하여금 비디오 데이터를 코딩하도록 구성되게끔 야기하는 명령을 포함하고, 상기 명령은 상기 하나 이상의 프로세서로 하여금 제1항 내지 제14항 중 어느 한 항의 방법을 수행하도록 야기하는, 컴퓨터가 판독 가능한 저장 매체.
  31. 인코딩 방법으로서,
    비트스트림에 현재 블록과 지시자를 인코딩하는 단계 - 여기서 상기 현재 블록은 공통 경계에 의해 제1 서브블록과 제2 서브블록으로 분리되며, 상기 제1 서브블록은 제1 예측 값에 대응하고 상기 제2 서브블록은 제2 예측 값에 대응하며, 상기 공통 경계는 기하학적 파티션 모드의 분리 라인이고, 상기 지시자는 각도 파라미터와 거리 파라미터를 획득하기 위해 사용되며, 상기 각도 파라미터는 상기 기하학적 파티션 모드의 각도 인덱스를 지정하고 상기 거리 파라미터는 상기 기하학적 파티션 모두의 거리 인덱스를 지정함 - ;
    미리 설정된 룩업 테이블을 확인함으로써 상기 각도 파라미터와 상기 거리 파라미터에 기초하여 상기 현재 블록 내의 샘플 세트와 상기 공통 경계 사이의 거리를 결정하는 단계;
    상기 거리에 따라 제1 가중 팩터를 획득하는 단계;
    상기 제1 가중 팩터에 따라 제2 가중 팩터를 획득하는 단계; 및
    상기 제1 예측 값, 상기 제2 예측 값, 상기 제1 가중 팩터 및 상기 제2 가중 팩터를 사용하여 상기 현재 블록에 대한 결합 예측 값을 획득하는 단계
    를 포함하는 인코딩 방법.
  32. 제31항에 있어서,
    상기 제1 가중 팩터는 다음의 방정식:
    sampleWeight1=Clip3( 0, 8, f(sample_dist))
    을 사용하여 계산되고, 여기서 sampleWeight1은 제1 가중 팩터를 나타내고 sample_dist는 상기 거리를 나타내며, f(sample_dist)는 sample_dist를 입력으로 하는 함수를 표현하는, 인코딩 방법.
  33. 제31항 또는 제32항에 있어서,
    상기 제1 가중 팩터에 따라 상기 제2 가중 팩터를 획득하는 단계가,
    다음의 공식:
    sampleWeight2 = T - sampleWeight1
    에 따라 상기 제2 가중 팩터를 계산하는 단계
    를 포함하며, 여기서 sampleWeight1은 상기 제1 가중 팩터를 나타내고, 상기 sampleWeight2는 상기 제2 가중 팩터를 나타내며, T는 미리 정의된 상수인, 인코딩 방법.
  34. 제33항에 있어서,
    T는 8인, 인코딩 방법.
  35. 제31항 또는 제32항에 있어서,
    상기 각도 파라미터는 angleIdx이고 상기 거리 파라미터는 distanceIdx이며, 상기 미리 설정된 룩업 테이블을 확인함으로써 상기 각도 파라미터와 거리 파라미터에 기초하여 거리를 결정하는 단계가,
    다음의 방정식:
    distFromLine=((x<<N) + K) * P1 + ((y<<N) + K) * P2 - P3
    을 사용하여 상기 거리를 계산하는 단계
    를 포함하고, 여기서 distFromLine은 상기 거리를 나타내고, K는 음이 아닌 정수이며, N=1이고, P1, P2 및 P3는 각각 제1 계산 파라미터, 제2 계산 파라미터 및 제3 계산 파라미터이며, 상기 제1 계산 파라미터는 angleIdx에 따라 상기 미리 설정된 룩업 테이블을 확인하여 결정되고, 상기 제2 계산 파라미터는 (angleIdx+8)%32에 따라 상기 룩업 테이블을 확인하여 결정되며, 상기 제3 계산 파라미터는 angleIdx 및 distanceIdx에 기초하여 결정되는, 인코딩 방법.
  36. 제31항 또는 제32항에 있어서,
    상기 인코딩 방법은 추가적으로:
    상기 거리를 임계값과 비교하여 상기 샘플 세트에 대해 제3 모션 정보를 저장할지 여부를 결정하는 단계 - 여기서 상기 제1 서브블록은 제1 모션 정보에 대응하고 상기 제2 서브블록은 제2 모션 정보에 대응하며, 제3 모션 정보는 상기 제1 모션 정보와 상기 제2 모션 정보에 의해 도출되는, 인코딩 방법.
  37. 제36항에 있어서,
    상기 거리를 임계값과 비교하여 상기 샘플 세트에 대해 제3 모션 정보를 저장할지 여부를 결정하는 단계가,
    상기 거리의 절대값이 상기 임계값보다 작거나 같은 경우에, 상기 샘플 세트에 대해 제3 모션 정보를 저장하기로 결정하는 단계
    를 포함하는, 인코딩 방법.
  38. 제36항에 있어서,
    상기 거리의 절대값이 상기 임계값보다 큰 경우에, 상기 인코딩 방법은 추가로:
    상기 거리가 양(positive)인 경우, 상기 샘플 세트에 대해 상기 제1 모션 정보를 저장하기로 결정하는 단계; 또는
    상기 거리가 음(negative)인 경우, 상기 샘플 세트에 대해 상기 제2 모션 정보를 저장하기로 결정하는 단계
    를 더 포함하는 디코딩 방법.
  39. 비디오 비트스트림을 인코딩하기 위한 장치로서, 상기 장치는 프로세서와 메모리를 포함하며, 상기 메모리는 상기 프로세서가 제31항 내지 제38항 중 어느 한 항의 방법을 수행하도록 하는 명령을 저장하는, 장치.
  40. 현재 블록의 코딩된 데이터와 지시자를 포함하는 비트스트림 구조로서,
    현재 블록은 공통 경계에 의해 제1 서브블록과 제2 서브블록으로 분리되며, 상기 제1 서브블록은 제1 예측 값에 대응하고 상기 제2 서브블록은 제2 예측 값에 대응하며, 상기 공통 경계는 기하학적 파티션 모드의 분리 라인이고, 상기 지시자는 각도 파라미터와 거리 파라미터를 획득하기 위해 사용되며, 상기 각도 파라미터는 기하학적 파티션 모드의 각도 인덱스를 지정하고 상기 거리 파라미터는 기하학적 파티션 모드의 거리 인덱스를 지정하며;
    상기 각도 파라미터와 상기 거리 파라미터는 미리 설정된 룩업 테이블을 확인함으로써 상기 현재 블록 내의 샘플 세트와 상기 공통 경계 사이의 거리를 결정하기 위해 사용되고, 상기 거리는 제1 가중 팩터를 획득하기 위해 사용되며, 상기 제1 가중 팩터는 제2 가중 팩터를 획득하기 위해 사용되며, 상기 제1 예측 값, 상기 제2 예측 값, 상기 제1 가중 팩터 및 상기 제2 가중 팩터는 상기 현재 블록에 대한 결합 예측 값을 획득하기 위해 사용되는, 비트스트림 구조.
KR1020247025742A 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치 KR20240119195A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
PCT/EP2019/072716 WO2021037337A1 (en) 2019-08-26 2019-08-26 Method and apparatus for motion information storage
KR1020227008195A KR102691349B1 (ko) 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020227008195A Division KR102691349B1 (ko) 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20240119195A true KR20240119195A (ko) 2024-08-06

Family

ID=67777310

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020247025742A KR20240119195A (ko) 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치
KR1020227008195A KR102691349B1 (ko) 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020227008195A KR102691349B1 (ko) 2019-08-26 2019-08-26 모션 정보 저장을 위한 방법 및 장치

Country Status (17)

Country Link
US (1) US12081765B2 (ko)
EP (2) EP4005204B1 (ko)
JP (2) JP7385004B2 (ko)
KR (2) KR20240119195A (ko)
CN (3) CN116708797A (ko)
AU (1) AU2019462982A1 (ko)
BR (1) BR112022003113A2 (ko)
CA (1) CA3152030A1 (ko)
DK (1) DK4005204T3 (ko)
ES (1) ES2967663T3 (ko)
FI (1) FI4005204T3 (ko)
HU (1) HUE064061T2 (ko)
MX (1) MX2022002197A (ko)
PL (1) PL4005204T3 (ko)
PT (1) PT4005204T (ko)
WO (1) WO2021037337A1 (ko)
ZA (1) ZA202201896B (ko)

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2461977C2 (ru) 2006-12-18 2012-09-20 Конинклейке Филипс Электроникс Н.В. Сжатие и снятие сжатия изображения
KR101740039B1 (ko) * 2009-06-26 2017-05-25 톰슨 라이센싱 적응형 기하학적 분할을 이용한 비디오 인코딩 및 디코딩 방법 및 장치
US8879632B2 (en) * 2010-02-18 2014-11-04 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
JP2012023597A (ja) * 2010-07-15 2012-02-02 Sony Corp 画像処理装置及び画像処理方法
JP2012080369A (ja) * 2010-10-01 2012-04-19 Sony Corp 画像処理装置及び画像処理方法
US9338476B2 (en) 2011-05-12 2016-05-10 Qualcomm Incorporated Filtering blockiness artifacts for video coding
US8964833B2 (en) 2011-07-19 2015-02-24 Qualcomm Incorporated Deblocking of non-square blocks for video coding
CN103716629B (zh) 2012-09-29 2017-02-22 华为技术有限公司 用于图像处理的方法、装置、编码器和解码器
US10200711B2 (en) 2015-03-27 2019-02-05 Qualcomm Incorporated Motion vector derivation in video coding
KR20180081716A (ko) 2015-11-13 2018-07-17 엘지전자 주식회사 영상 코딩 시스템에서 임계값을 이용한 적응적 영상 예측 방법 및 장치
WO2017195554A1 (ja) 2016-05-13 2017-11-16 シャープ株式会社 予測画像生成装置、動画像復号装置、および動画像符号化装置。
CN112584161B (zh) * 2018-12-28 2022-05-31 杭州海康威视数字技术股份有限公司 一种编解码方法及其设备
EP3987795A4 (en) * 2019-08-15 2023-02-08 Alibaba Group Holding Limited BLOCK PARTITION METHODS FOR VIDEO CODING
US11570434B2 (en) * 2019-08-23 2023-01-31 Qualcomm Incorporated Geometric partition mode with harmonized motion field storage and motion compensation

Also Published As

Publication number Publication date
KR102691349B1 (ko) 2024-08-05
HUE064061T2 (hu) 2024-02-28
ZA202201896B (en) 2022-12-21
DK4005204T3 (da) 2024-01-02
CN115118978A (zh) 2022-09-27
MX2022002197A (es) 2022-03-11
US20220191504A1 (en) 2022-06-16
JP7385004B2 (ja) 2023-11-21
WO2021037337A1 (en) 2021-03-04
CA3152030A1 (en) 2021-03-04
EP4005204B1 (en) 2023-10-04
CN114270845A (zh) 2022-04-01
PT4005204T (pt) 2023-12-06
BR112022003113A2 (pt) 2022-05-17
FI4005204T3 (fi) 2024-01-09
ES2967663T3 (es) 2024-05-03
CN116708797A (zh) 2023-09-05
JP2022545785A (ja) 2022-10-31
KR20220044817A (ko) 2022-04-11
CN115118978B (zh) 2023-04-11
EP4221212A1 (en) 2023-08-02
AU2019462982A1 (en) 2022-03-03
US12081765B2 (en) 2024-09-03
PL4005204T3 (pl) 2024-03-11
EP4005204A1 (en) 2022-06-01
JP2024020331A (ja) 2024-02-14

Similar Documents

Publication Publication Date Title
US11968387B2 (en) Encoder, a decoder and corresponding methods for inter prediction using bidirectional optical flow
US12047599B2 (en) Motion vector range derivation for enhanced interpolation filter
US12058337B2 (en) Usage of DCT based interpolation filter
US20240031598A1 (en) Encoder, a decoder and corresponding methods for inter-prediction
JP2022550032A (ja) 拡張補間フィルタのメモリ帯域幅削減のためのアフィン動きモデル制限
US20220264094A1 (en) Usage of DCT Based Interpolation Filter and Enhanced Bilinear Interpolation Filter in Affine Motion Compensation
WO2021057629A1 (en) Apparatus and method for performing deblocking
WO2021062684A1 (en) Encoder, decoder and corresponding methods for inter prediction
KR102691349B1 (ko) 모션 정보 저장을 위한 방법 및 장치
WO2020085953A1 (en) An encoder, a decoder and corresponding methods for inter prediction
RU2815734C1 (ru) Способ и устройство для хранения информации о движении
RU2793825C1 (ru) Способ и устройство для хранения информации о движении
US20220345729A1 (en) Encoder, decoder and corresponding methods of coding block partitioning restrictions derivation
WO2021008470A1 (en) An encoder, a decoder and corresponding methods

Legal Events

Date Code Title Description
A107 Divisional application of patent