KR20220104059A - 교차-컴포넌트 선형 모델 예측을 위한 필터링의 방법 및 장치 - Google Patents

교차-컴포넌트 선형 모델 예측을 위한 필터링의 방법 및 장치 Download PDF

Info

Publication number
KR20220104059A
KR20220104059A KR1020227023204A KR20227023204A KR20220104059A KR 20220104059 A KR20220104059 A KR 20220104059A KR 1020227023204 A KR1020227023204 A KR 1020227023204A KR 20227023204 A KR20227023204 A KR 20227023204A KR 20220104059 A KR20220104059 A KR 20220104059A
Authority
KR
South Korea
Prior art keywords
luma
samples
subwidthc
block
subheightc
Prior art date
Application number
KR1020227023204A
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 KR20220104059A publication Critical patent/KR20220104059A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • 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/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • 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)

Abstract

개시내용은 선형 모델을 이용한 인트라 예측을 위한 방법들 및 코딩 장치에 관한 것이다. 방법은: 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여 현재의 블록의 루마 컴포넌트를 위한 필터를 결정하는 단계, 및 필터링된 재구성된 루마 샘플들을 획득하기 위하여, 현재의 블록의 루마 컴포넌트의 재구성된 루마 샘플들 및/또는 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들의 영역에 결정된 필터를 적용하는 단계를 포함한다. 방법은 필터링된 재구성된 루마 샘플들에 기초하여, 선형 모델 계수들을 획득하는 단계를 더 포함한다. 교차-컴포넌트 예측은 선형 모델 유도의 선형 모델 계수들 및 필터링된 재구성된 루마 샘플에 기초하여 수행된다.

Description

교차-컴포넌트 선형 모델 예측을 위한 필터링의 방법 및 장치
이 특허 출원은 2019년 12월 30일자로 출원된 미국 가출원 제62/955,405호 및 2020년 1월 7일자로 출원된 미국 가출원 제62/958,293호에 대한 우선권을 주장하고, 각각은 이로써, 그 전체가 참조로 포함된다.
본 출원(개시내용)의 실시예들은 일반적으로, 픽처 프로세싱(picture processing)의 분야에 관한 것으로, 더 상세하게는, 교차 컴포넌트 선형 모델(cross component linear model)(CCLM)을 이용한 (크로마 인트라 예측(chroma intra prediction)과 같은) 인트라 예측(intra prediction)에 관한 것이고, 더 상세하게는, 상이한 크로마 포맷들에 의한 인트라 예측을 위하여 CCLM에서 이용된 공간적 필터링(spatial filtering)에 관한 것이다.
비디오 코딩(비디오 인코딩 및 디코딩)은 광범위한 디지털 비디오 애플리케이션들, 예를 들어, 브로드캐스트 디지털 TV, 인터넷 및 이동 네트워크들 상에서의 비디오 송신, 비디오 채팅과 같은 실시간 대화 애플리케이션들, 비디오 회의, DVD 및 블루-레이(Blu-ray) 디스크들, 비디오 컨텐츠 취득 및 편집 시스템들, 및 보안 애플리케이션들의 캠코더들에서 이용된다.
심지어 상대적으로 짧은 비디오를 묘사하기 위하여 필요한 비디오 데이터의 양은 상당할 수 있고, 이것은 데이터가 제한된 대역폭 용량으로 통신 네트워크에 걸쳐 스트리밍되어야 하거나 또는 이와 다르게 통신되어야 할 때에 어려움들로 귀착될 수 있다. 이에 따라, 비디오 데이터는 일반적으로, 현대판 전기통신 네트워크들에 걸쳐 통신되기 전에 압축된다. 비디오의 크기는 또한, 메모리 자원들이 제한될 수 있으므로, 비디오가 저장 디바이스 상에서 저장될 때에 쟁점이 될 수 있다. 비디오 압축 디바이스들은 송신 또는 저장 이전에 비디오 데이터를 코딩하기 위하여 출발지(source)에서 소프트웨어 및/또는 하드웨어를 종종 이용하고, 이에 의해, 디지털 비디오 이미지들을 표현하기 위하여 필요한 데이터의 수량을 감소시킨다. 압축된 데이터는 그 다음으로, 비디오 데이터를 디코딩하는 비디오 압축해제 디바이스에 의해 목적지(destination)에서 수신된다. 제한된 네트워크 자원들 및 더 높은 비디오 품질의 점점 더 증가하는 수요들로, 픽처 품질에 있어서 희생을 거의 또는 전혀 가지지 않으면서 압축 비율을 개선시키는 개선된 압축 및 압축해제 기법들이 바람직하다.
본 출원의 실시예들은 인코딩 및 디코딩을 위한 장치들 및 방법들을 제공한다.
개시내용의 제1 양태에 따르면, 그것은 선형 모델을 이용한 인트라 예측을 위한 방법에 관한 것이고, 방법은 코딩 장치(특히, 인트라 예측을 위한 장치)에 의해 수행된다. 방법은:
- 현재의 블록이 속하는 픽처의 크로마 포맷(chroma format)에 기초하여 블록에 속하는 (각각의 루마 샘플(luma sample)과 같은) 루마 샘플(즉, 현재의 블록의 내부 샘플들)을 위한 필터를 결정하는 단계 - 특히, 상이한 루마 샘플들은 상이한 필터들에 대응할 수 있고, 기본적으로, 그것이 경계(boundary) 상에 있는지 여부에 종속됨 -;
- 현재의 블록에 속하는 (각각의 루마 샘플과 같은) 루마 샘플의 포지션(position)에서, (
Figure pct00001
과 같은) 필터링된 재구성된 루마 샘플을 획득하기 위하여, 결정된 필터를 재구성된 루마 샘플들의 영역에 적용하는 단계;
- 필터링된 재구성된 루마 샘플에 기초하여, 선형 모델 유도(linear model derivation)의 입력으로서 이용된 루마 샘플들의 세트를 획득하는 단계; 및
선형 모델 유도의 선형 모델 계수들 및 필터링된 재구성된 루마 샘플에 기초하여 (교차-컴포넌트 루마로부터의 크로마(chroma-from-luma) 예측 또는 CCLM 예측과 같은) 교차-컴포넌트 예측을 수행하는 단계를 포함한다.
본 출원의 실시예들은 CCLM의 루마 필터에 관한 것이다. 개시내용은 루마 샘플들을 위한 필터링에 대한 것이다. 개시내용은 CCLM 내부에서 수행되는 필터 선택에 관한 것이다.
CCLM은 크로마 예측에 관한 것이고, 그것은 크로마 신호를 예측하기 위하여 재구성된 루마를 이용하고,
CCLM == 루마로부터의 크로마(chroma from luma)이다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 필터를 결정하는 단계는:
현재의 블록 내에서의 루마 샘플의 포지션 및 크로마 포맷에 기초하여 필터를 결정하는 단계; 또는
현재의 블록 내에서의 루마 샘플들의 개개의 포지션들 및 크로마 포맷에 기초하여, 현재의 블록에 속하는 복수의 루마 샘플을 위한 개개의 필터들을 결정하는 단계를 포함한다. 현재의 블록에 인접한 샘플들이 이용가능할 경우에, 필터는 현재의 블록의 경계 영역을 필터링하기 위하여 그것들을 마찬가지로 이용할 수 있다는 것이 이해될 수 있다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 필터를 결정하는 단계는: 다음:
현재의 블록이 속하는 픽처의 크로마 포맷,
현재의 블록 내에서의 루마 샘플의 포지션,
현재의 블록에 속하는 루마 샘플들의 수,
현재의 블록의 폭 및 높이, 및
현재의 블록 내에서의 루마 샘플에 대한 서브샘플링된(subsampled) 크로마 샘플(chroma sample)의 포지션
중의 하나 이상에 기초하여 필터를 결정하는 단계를 포함한다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 서브샘플링된 크로마 샘플이 대응하는 루마 샘플과 공동-위치(co-locate)되지 않을 때, 복수의 필터와 현재의 블록의 폭 및 높이의 값들 사이의 (표 4와 같은) 제1 관계는 필터의 결정을 위하여 이용되고;
서브샘플링된 크로마 샘플이 대응하는 루마 샘플과 공동-위치될 때, 복수의 필터와 현재의 블록의 폭 및 높이의 값들 사이의 (표 2 또는 표 3의 어느 하나와 같은) 제2 또는 제3 관계는 필터의 결정을 위하여 이용된다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 복수의 필터와 현재의 블록의 폭 및 높이의 값들 사이의 (표 2 또는 표 3의 어느 하나와 같은) 제2 또는 제3 관계는 현재의 블록에 속하는 루마 샘플들의 수에 기초하여 결정된다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 필터는 현재의 블록의 크로마 컴포넌트가 서브샘플링되지 않을 때, 필터링된 재구성된 루마 샘플의 포지션에 수평으로 그리고 수직으로 인접한 포지션들에서 비-제로(non-zero) 계수들을 포함한다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 재구성된 루마 샘플들의 영역은 필터링된 재구성된 샘플의 포지션에 상대적인 복수의 재구성된 루마 샘플을 포함하고, 필터링된 재구성된 루마 샘플의 포지션은 현재의 블록에 속하는 루마 샘플의 포지션에 대응하고, 필터링된 재구성된 루마 샘플의 포지션은 현재의 블록의 루마 블록 내부에 있다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 재구성된 루마 샘플들의 영역은 필터링된 재구성된 루마 샘플의 포지션에 수평으로 그리고 수직으로 인접한 포지션들에서 복수의 재구성된 루마 샘플을 포함하고, 필터링된 재구성된 루마 샘플의 포지션은 현재의 블록에 속하는 루마 샘플의 포지션에 대응하고, 필터링된 재구성된 루마 샘플의 포지션은 (현재의 루마 블록 또는 현재의 블록의 루마 컴포넌트와 같은) 현재의 블록 내부에 있다. 예컨대, 필터링된 재구성된 루마 샘플의 포지션은 현재의 블록 내부에 있다(도 8의 우측 부분, 우리는 필터를 루마 샘플들에 적용함).
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 크로마 포맷은 YCbCr 4:4:4 크로마 포맷, YCbCr 4:2:0 크로마 포맷, YCbCr 4:2:2 크로마 포맷, 또는 모노크롬(Monochrome)을 포함한다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 선형 모델 유도의 입력으로서 이용된 루마 샘플들의 세트는:
(
Figure pct00002
과 같은) 필터링된 재구성된 루마 샘플들로부터 서브샘플링되는 경계 루마 재구성된 샘플들을 포함한다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 현재의 크로마 블록에 대한 예측자(predictor)는 다음에 기초하여 획득된다:
Figure pct00003
여기서,
Figure pct00004
은 크로마 샘플을 표현하고,
Figure pct00005
은 대응하는 재구성된 루마 샘플을 표현한다.
이와 같은 제1 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 선형 모델은 멀티-방향 선형 모델(multi-directional linear model)(MDLM)이고, 선형 모델 계수들은 MDLM을 획득하기 위하여 이용된다.
제2 양태에 따르면, 출원은 인코딩 디바이스에 의해 구현된 인코딩의 방법에 관한 것이고, 인코딩의 방법은:
(교차-컴포넌트 선형 모델인 CCLM 또는 멀티-방향 선형 모델인 MDLM과 같은) 선형 모델을 이용하여 인트라 예측을 수행하는 단계; 및
복수의 신택스 엘리먼트(syntax element)를 포함하는 비트스트림을 생성하는 단계 - 복수의 신택스 엘리먼트는 (CCLM의 루마 필터의 선택, 특히, sps_cclm_colocated_chroma_flag와 같은 SPS 플래그(flag)와 같은) 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함함 - 를 포함한다.
이와 같은 제2 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 신택스 엘리먼트의 값이 0 또는 거짓(false)일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되고;
신택스 엘리먼트의 값이 1 또는 참(true)일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되지 않는다.
제3 양태에 따르면, 출원은 디코딩 디바이스에 의해 구현된 디코딩의 방법에 관한 것이고, 디코딩의 방법은:
비트스트림으로부터 복수의 신택스 엘리먼트를 파싱(parsing)하는 단계 - 복수의 신택스 엘리먼트는 (CCLM의 루마 필터의 선택, 특히, sps_cclm_colocated_chroma_flag와 같은 SPS 플래그와 같은) 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함함 -; 및
(CCLM과 같은) 표시된 선형 모델을 이용하여 인트라 예측을 수행하는 단계를 포함한다.
이와 같은 제3 양태에 따른 방법의 가능한 구현예 형태에서, 여기서, 신택스 엘리먼트의 값이 0 또는 거짓일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되고;
신택스 엘리먼트의 값이 1 또는 참일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되지 않는다. 예를 들어, 공동-위치되지 않을 때, 루마 필터를 이용하지 않는다.
제4 양태에 따르면, 출원은 디코더에 관한 것이고, 디코더는:
하나 이상의 프로세서들; 및
프로세서들에 결합되고, 프로세서들에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서들에 의해 실행될 때, 제1 또는 제2 양태에 따른 방법 또는 제1 또는 제2 또는 제3 양태의 임의의 가능한 실시예를 수행하도록 디코더를 구성함 - 를 포함한다.
제5 양태에 따르면, 출원은 인코더에 관한 것이고, 인코더는:
하나 이상의 프로세서들; 및
프로세서들에 결합되고, 프로세서들에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서들에 의해 실행될 때, 제1 또는 제2 양태에 따른 방법 또는 제1 또는 제2 또는 제3 양태의 임의의 가능한 실시예를 수행하도록 인코더를 구성함 - 를 포함한다.
제6 양태에 따르면, 출원은 선형 모델을 이용한 인트라 예측을 위한 장치에 관한 것이고, 장치는:
- 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여, 블록에 속하는 (각각의 루마 샘플과 같은) 루마 샘플을 위한 필터를 결정하도록 구성된 결정 유닛;
- 현재의 블록에 속하는 (각각의 루마 샘플과 같은) 루마 샘플의 포지션에서, (
Figure pct00006
과 같은) 필터링된 재구성된 루마 샘플을 획득하기 위하여, 결정된 필터를 재구성된 루마 샘플들의 영역에 적용하도록 구성된 필터 유닛;
- 필터링된 재구성된 루마 샘플에 기초하여, 선형 모델 유도의 입력으로서 이용된 루마 샘플들의 세트를 획득하도록 구성된 획득 유닛; 및
선형 모델 유도의 선형 모델 계수들 및 필터링된 재구성된 루마 샘플에 기초하여 (교차-컴포넌트 루마로부터의 크로마 예측 또는 CCLM 예측과 같은) 교차-컴포넌트 예측을 수행하도록 구성된 예측 유닛을 포함한다.
출원의 제1 양태에 따른 방법은 출원의 제6 양태에 따른 장치에 의해 수행될 수 있다. 출원의 제6 양태에 따른 방법의 추가의 특징들 및 구현예 형태들은 출원의 제1 양태에 따른 장치의 특징들 및 구현예 형태들에 대응한다.
출원의 또 다른 양태에 따르면, 선형 모델을 이용한 인트라 예측을 위한 방법이 제공된다. 방법은 다음의 단계들:
- 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여 다운-샘플링(down-sampling) 필터들의 세트를 결정하는 단계;
- 재구성된 이웃하는 상부 루마 샘플들이 이용가능하지 않을 때, 재구성된 루마 블록으로부터 패딩(padding)함으로써 이웃하는 샘플들의 2 개의 상부 행(row)을 획득하는 단계;
- 재구성된 이웃하는 좌측 루마 샘플들이 이용가능하지 않을 때, 재구성된 루마 블록으로부터 패딩함으로써 이웃하는 샘플들의 3 개의 좌측 열(column)을 획득하는 단계;
- 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들을 획득하는 단계; 및
- 다운-샘플링 필터들의 세트 중에서의 개개의 다운-샘플링 필터를 이웃하는 샘플들의 획득된 2 개의 상부 행의 선택된 샘플들에 적용함으로써 상부 다운-샘플링된 루마 참조 샘플들을 획득하는 단계 - 선택된 샘플이 상부-좌측 포지션(1202)에 있을 때, 개개의 다운-샘플링 필터는 재구성된 및 패딩된 이웃하는 샘플들의 조합에 적용됨 -; 및
- 다운-샘플링 필터들의 세트 중에서의 개개의 다운-샘플링 필터를 이웃하는 샘플들의 획득된 3 개의 좌측 열의 선택된 샘플들에 적용함으로써 좌측 다운-샘플링된 루마 참조 샘플들을 획득하는 단계;
- 상부 및 좌측 다운-샘플링된 루마 참조 샘플들의 상부 또는 좌측 또는 조합, 및 다운-샘플링된 루마 참조 샘플들에 대응하는 크로마 참조 샘플들에 기초하여, 하나 이상의 선형 모델 계수들을 결정하는 단계; 및
선형 모델 계수들, 및 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들에 기초하여, 루마 블록에 대응하는 크로마 블록의 예측 샘플들을 획득하는 단계를 포함한다.
출원의 제1 양태에 따른 방법은 출원의 제6 양태에 따른 장치에 의해 수행될 수 있다. 출원의 제1 양태에 따른 방법의 추가의 특징들 및 구현예 형태들은 출원의 제6 양태에 따른 장치의 특징들 및 구현예 형태들에 대응한다.
또 다른 양태에 따르면, 출원은 프로세서 및 메모리를 포함하는, 비디오 스트림을 디코딩하기 위한 장치에 관한 것이다. 메모리는, 프로세서로 하여금, 제1 또는 제3 양태에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
또 다른 양태에 따르면, 출원은 프로세서 및 메모리를 포함하는, 비디오 스트림을 인코딩하기 위한 장치에 관한 것이다. 메모리는, 프로세서로 하여금, 제2 양태에 따른 방법을 수행하게 하는 명령들을 저장하고 있다.
또 다른 양태에 따르면, 실행될 때, 하나 이상의 프로세서들로 하여금, 비디오 데이터를 코딩하도록 구성되게 하는 명령들을 저장한 컴퓨터-판독가능 저장 매체가 제안된다. 명령들은, 하나 이상의 프로세서들로 하여금, 제1 또는 제2 양태에 따른 방법 또는 제1 또는 제2 또는 제3 양태의 임의의 가능한 실시예를 수행하게 한다.
또 다른 양태에 따르면, 출원은 컴퓨터 상에서 실행될 때, 제1 또는 제2 또는 제3 양태에 따른 방법 또는 제1 또는 제2 또는 제3 양태의 임의의 가능한 실시예를 수행하기 위한 프로그램 코드를 포함하는 컴퓨터 프로그램에 관한 것이다.
이전의 양태들 또는 양태들의 임의의 가능한 실시예에서, 필터를 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들 및/또는 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들에 적용하기 위하여, 필터는 다운-샘플링 필터들의 세트에 속하고, 다운-샘플링 필터들의 세트는 감소된 수의 필터들을 오직 포함한다. 대응하게도, 그것은 재구성된 루마 샘플들, 및/또는 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들에 적용된 필터들을 위한 탭(tap)들의 수를 감소시킬 수 있다.
하나 이상의 실시예들의 세부사항들은 동반 도면들 및 이하의 설명에서 기재된다. 다른 특징들, 목적들, 및 장점들은 설명 , 도면들, 및 청구항들로부터 분명할 것이다.
다음에서, 출원의 실시예들은 첨부된 그림들 및 도면들을 참조하여 더 상세하게 설명되고, 여기서:
도 1a는 출원의 실시예들을 구현하도록 구성된 비디오 코딩 시스템의 예를 도시하는 블록도이고;
도 1b는 출원의 실시예들을 구현하도록 구성된 비디오 코딩 시스템의 또 다른 예를 도시하는 블록도이고;
도 2는 출원의 실시예들을 구현하도록 구성된 비디오 인코더의 예를 도시하는 블록도이고;
도 3은 출원의 실시예들을 구현하도록 구성된 비디오 디코더의 예시적인 구조를 도시하는 블록도이고;
도 4는 개시내용의 실시예에 따른 인코딩 장치 또는 디코딩 장치의 예를 예시하는 블록도이고;
도 5는 개시내용의 예시적인 실시예에 따른 인코딩 장치 또는 디코딩 장치의 또 다른 예를 예시하는 블록도이고;
도 6은 크로마 인트라 예측을 위한 교차-컴포넌트 선형 모델의 개념을 예시하는 도면이고;
도 7은 선형 모델 파라미터 유도의 단순화된 방법을 예시하는 도면이고;
도 8은 크로마 포맷 YUV 4:2:0을 위한 루마 샘플들을 다운샘플링하는 프로세스 및 이들이 어떻게 크로마 샘플들에 대응하는지를 예시하는 도면이고;
도 9는 크로마 포맷 YUV 4:2:0의 경우에 다운샘플링 필터링을 위하여 이용되는 루마 샘플들의 공간적 포지션들을 예시하는 도면이고;
도 10a는 상이한 크로마 샘플 유형들을 예시하는 도면이고;
도 10b는 상이한 크로마 샘플 유형들을 예시하는 도면이고;
도 11은 개시내용의 예시적인 실시예에 따른 방법을 예시하는 도면이고;
도 12a는, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계가 CTU 라인 경계인 실시예를 도시하고;
도 12b는, 블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷은 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)으로서 특정되는 실시예를 도시하고;
도 12c는, 상부-좌측 샘플이 이용가능하지 않고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계가 CTU 라인 경계인 실시예를 도시하고;
도 12d는, 블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷은 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)으로서 특정되는 실시예를 도시하고;
도 13은 예시적인 3-탭 필터(1302)에 의한 재구성된 루미넌스 블록(luminance block)(1301)을 위한 필터링 동작을 도시하고;
도 14는 본 출원의 실시예에 따른 크로마 블록 예측을 위한 방법을 예시하고;
도 15는 본 출원의 실시예에 따른 디바이스를 예시하고;
도 16은 컨텐츠 전달 서비스(content delivery service)를 실현하는 컨텐츠 공급 시스템(3100)의 예시적인 구조를 도시하는 블록도이고; 그리고
도 17은 단말 디바이스의 예의 구조를 도시하는 블록도이다.
다음에서, 동일한 참조 부호들은 이와 다르게 명시적으로 특정되지 않을 경우에, 동일하거나 적어도 기능적으로 동등한 특징들을 지칭한다.
다음의 설명에서, 동반 도면들에 대해 참조가 행해지고, 동반 도면들은 개시내용의 일부를 형성하고, 예시로서, 출원의 실시예들의 특정 양태들, 또는 본 출원의 실시예들이 이용될 수 있는 특정 양태들을 도시한다. 출원의 실시예들은 다른 양태들에서 이용될 수 있고, 도면들에서 도시되지 않은 구조적 또는 논리적 변경들을 포함할 수 있다는 것이 이해된다.
다음의 약어들이 적용된다:
ABT: 비대칭적 BT(asymmetric BT)
AMVP: 진보된 모션 벡터 예측(advanced motion vector prediction)
ASIC: 애플리케이션-특정 집적 회로(application-specific integrated circuit)
AVC: 진보된 비디오 코딩(Advanced Video Coding)
B: 양방향 예측(bidirectional prediction)
BT: 2진 트리(binary tree)
CABAC: 컨텍스트-적응적 2진 산술 코딩(context-adaptive binary arithmetic coding)
CAVLC: 컨텍스트-적응적 가변-길이 코딩(context-adaptive variable-length coding)
CD: 컴팩트 디스크(compact disc)
CD-ROM: 컴팩트 디스크 판독-전용 메모리(compact disc read-only memory)
CPU: 중앙 프로세싱 유닛(central processing unit)
CRT: 음극선관(cathode-ray tube)
CTU: 코딩 트리 유닛(coding tree unit)
CU: 코딩 유닛(coding unit)
DASH: 동적 적응적 스트리밍 오버 HTTP(Dynamic Adaptive Streaming over HTTP)
DCT: 이산 코사인 변환(discrete cosine transform)
DMM: 심도 모델링 모드(depth modeling mode)
DRAM: 동적 랜덤-액세스 메모리(dynamic random-access memory)
DSL: 디지털 가입자 회선(digital subscriber line)
DSP: 디지털 신호 프로세서(digital signal processor)
DVD: 디지털 비디오 디스크(digital video disc)
EEPROM: 전기적-소거가능 프로그래밍가능 판독-전용 메모리(electrically-erasable programmable read-only memory)
EO: 전기-대-광학(electrical-to-optical)
FPGA: 필드-프로그래밍가능 게이트 어레이(field-programmable gate array)
FTP: 파일 전송 프로토콜(File Transfer Protocol)
GOP: 픽처들의 그룹(group of pictures)
GPB: 일반화된 P/B(generalized P/B)
GPU: 그래픽 프로세싱 유닛(graphics processing unit)
HD: 고-해상도(high-definition)
HEVC: 고효율 비디오 코딩(High Efficiency Video Coding)
HM: HEVC 테스트 모델(HEVC Test Model)
I: 인트라-모드(intra-mode)
IC: 집적 회로(integrated circuit)
ISO/IEC: 국제 표준화 기구/국제 전기기술 위원회(International Organization for Standardization/International Electrotechnical Commission)
ITU-T: 국제 전기통신 연합 전기통신 표준화 섹터(International Telecommunications Union Telecommunication Standardization Sector)
JVET: 공동 비디오 탐색 팀(Joint Video Exploration Team)
LCD: 액정 디스플레이(liquid-crystal display)
LCU: 최대 코딩 유닛(largest coding unit)
LED: 발광 다이오드(light-emitting diode)
MPEG: 모션 픽처 전문가 그룹(Motion Picture Expert Group)
MPEG-2: 모션 픽처 전문가 그룹 2(Motion Picture Expert Group 2)
MPEG-4: 모션 픽처 전문가 그룹 4(Motion Picture Expert Group 4)
MTT: 멀티-유형 트리(multi-type tree)
mux-demux: 멀티플렉서-디멀티플렉서(multiplexer-demultiplexer)
MV: 모션 벡터(motion vector)
NAS: 네트워크-연결형 스토리지(network-attached storage)
OE: 광학-대-전기(optical-to-electrical)
OLED: 유기 발광 다이오드(organic light-emitting diode)
PIPE: 확률 간격 분배 엔트로피(probability interval portioning entropy)
P: 단방향 예측(unidirectional prediction)
PPS: 픽처 파라미터 세트(picture parameter set)
PU: 예측 유닛(prediction unit)
QT: 쿼드트리(quadtree), 4진 트리(quaternary tree)
QTBT: 쿼드트리 플러스 2진 트리(quadtree plus binary tree)
RAM: 랜덤-액세스 메모리(random-access memory)
RDO: 레이트-왜곡 최적화(rate-distortion optimization)
RF: 라디오 주파수(radio frequency)
ROM: 판독-전용 메모리(read-only memory)
Rx: 수신기 유닛(receiver unit)
SAD: 절대 차이들의 합(sum of absolute differences)
SBAC: 신택스-기반 산술 코딩(syntax-based arithmetic coding)
SH: 슬라이스 헤더(slice header)
SPS: 시퀀스 파라미터 세트(sequence parameter set)
SRAM: 정적 랜덤-액세스 메모리(static random-access memory)
SSD: 제곱 차이들의 합(sum of squared differences)
SubCE: 서브코어 실험(SubCore Experiment)
TCAM: 3진 컨텐츠-어드레싱가능 메모리(ternary content-addressable memory)
TT: 3진 트리(ternary tree)
Tx: 송신기 유닛(transmitter unit)
TU: 변환 유닛(transform unit)
UDP: 사용자 데이터그램 프로토콜(User Datagram Protocol)
VCEG: 비디오 코딩 전문가 그룹(Video Coding Experts Group)
VTM: VVC 테스트 모델(VVC Test Model)
VVC: 다용도 비디오 코딩(Versatile Video Coding).
예를 들어, 설명된 방법과 관련된 개시내용은 또한, 방법을 수행하도록 구성된 대응하는 디바이스 또는 시스템에 대해 유효할 수 있고 그 반대도 마찬가지일 수 있다는 것이 이해된다. 예를 들어, 하나 또는 복수의 특정 방법 단계가 설명될 경우에, 이러한 하나 이상의 유닛들이 도면들에서 명시적으로 설명되거나 예시되지 않더라도, 대응하는 디바이스는 설명된 하나 또는 복수의 방법 단계를 수행하기 위한 하나 또는 복수의 유닛, 예컨대, 기능적 유닛들(예컨대, 하나 또는 복수의 단계를 수행하는 하나의 유닛, 또는 복수의 단계 중의 하나 이상의 단계를 각각 수행하는 복수의 유닛)을 포함할 수 있다. 다른 한편으로, 예를 들어, 특정 장치가 하나 또는 복수의 유닛, 예컨대, 기능적 유닛들에 기초하여 설명될 경우에, 이러한 하나 또는 복수의 단계가 도면들에서 명시적으로 설명되거나 예시되지 않더라도, 대응하는 방법은 하나 또는 복수의 유닛의 기능성을 수행하기 위한 하나의 단계(예컨대, 하나 또는 복수의 유닛의 기능성을 수행하는 하나의 단계, 또는 복수의 유닛 중의 하나 이상의 유닛의 기능성을 각각 수행하는 복수의 단계)를 포함할 수 있다. 또한, 본 명세서에서 설명된 다양한 예시적인 실시예들 및/또는 양태들의 특징들은 이와 다르게 구체적으로 언급되지 않으면, 서로 조합될 수 있다는 것이 이해된다.
비디오 코딩은 전형적으로, 비디오 또는 비디오 시퀀스(video sequence)를 형성하는 픽처들의 시퀀스의 프로세싱을 지칭한다. 용어 "픽처" 대신에, 용어 "프레임(frame)" 또는 "이미지(image)"는 비디오 코딩의 분야에서 동의어들로서 이용될 수 있다. 비디오 코딩(또는 일반적으로 코딩)은 2 개의 부분들 비디오 인코딩 및 비디오 디코딩을 포함한다. 비디오 인코딩은 출발지 측에서 수행되고, 전형적으로, (더 효율적인 저장 및/또는 송신을 위하여) 비디오 픽처들을 표현하기 위해 요구된 데이터의 양을 감소시키기 위하여 원래의 비디오 픽처들을 (예컨대, 압축에 의해) 프로세싱하는 것을 포함한다. 비디오 디코딩은 목적지 측에서 수행되고, 전형적으로, 비디오 픽처들을 재구성하기 위하여 인코더와 비교한 역 프로세싱(inverse processing)을 포함한다. 비디오 픽처들(또는 일반적으로 픽처들)의 "코딩"을 지칭하는 실시예들은 비디오 픽처들 또는 개개의 비디오 시퀀스들의 "인코딩" 또는 "디코딩"에 관련되는 것으로 이해될 것이다. 인코딩 부분 및 디코딩 부분의 조합은 또한, CODEC(코딩 및 디코딩)으로서 지칭된다.
무손실 비디오 코딩(lossless video coding)의 경우에, 원래의 비디오 픽처들은 재구성될 수 있고, 즉, (저장 또는 송신 동안에 송신 손실 또는 다른 데이터 손실이 없는 것으로 가정하면) 재구성된 비디오 픽처들은 원래의 비디오 픽처들과 동일한 품질을 가진다. 손실 비디오 코딩(lossy video coding)의 경우에, 디코더에서 완전히 재구성될 수 없는 비디오 픽처들을 표현하는 데이터의 양을 감소시키기 위하여, 예컨대, 양자화(quantization)에 의한 추가의 압축이 수행되고, 즉, 재구성된 비디오 픽처들의 품질은 원래의 비디오 픽처들의 품질과 비교하여 더 낮거나 더 열악하다.
몇몇 비디오 코딩 표준들은 "손실 하이브리드 비디오 코덱들"(즉, 샘플 도메인에서의 공간적 및 시간적 예측, 및 변환 도메인에서 양자화를 적용하기 위한 2D 변환 코딩을 조합함)에 속한다. 비디오 시퀀스의 각각의 픽처는 전형적으로, 비-중첩하는 블록들의 세트로 파티셔닝(partition)되고, 코딩은 전형적으로 블록 레벨에 대해 수행된다. 다시 말해서, 인코더에서, 비디오는 전형적으로, 예컨대, 예측 블록을 생성하기 위하여 공간적(인트라 픽처) 예측 및/또는 시간적(인터 픽처) 예측을 이용함으로써, 잔차 블록(residual block)을 획득하기 위하여 현재의 블록(현재의 프로세싱되고/프로세싱되어야 할 블록)으로부터 예측 블록을 감산(subtract)함으로써, 잔차 블록을 변환함으로써, 그리고 송신(압축)되어야 할 데이터의 양을 감소시키기 위하여 변환 도메인에서 잔차 블록을 양자화함으로써, 블록(비디오 블록) 레벨에 대해 프로세싱, 즉, 인코딩되는 반면, 디코더에서는, 인코더와 비교한 역 프로세싱이 표현을 위한 현재의 블록을 재구성하기 위하여 인코딩된 또는 압축된 블록에 적용된다. 또한, 인코더 및 디코더의 둘 모두가 후속 블록들을 프로세싱, 즉, 코딩하기 위한 동일한 예측들(예컨대, 인트라 및 인터 예측들) 및/또는 재구성들을 생성하도록, 인코더는 디코더 프로세싱 루프를 복제한다.
비디오 코딩 시스템(10)의 다음의 실시예들에서, 비디오 인코더(20) 및 비디오 디코더(30)는 도 1 내지 도 3에 기초하여 설명된다.
도 1a는 이 본 출원의 기법들을 사용할 수 있는 예시적인 코딩 시스템(10), 예컨대, 비디오 코딩 시스템(10)(또는 줄여서 코딩 시스템(10))을 예시하는 개략적인 블록도이다. 비디오 코딩 시스템(10)의 비디오 인코더(20)(또는 줄여서 인코더(20) 및 비디오 디코더(30)(또는 줄여서 디코더(30)는 본 출원에서 설명된 다양한 예들에 따라 기법들을 수행하도록 구성될 수 있는 디바이스들의 예들을 표현한다.
도 1a에서 도시된 바와 같이, 코딩 시스템(10)은 인코딩된 픽처 데이터(21)를, 예컨대, 인코딩된 픽처 데이터(13)를 디코딩하기 위한 목적지 디바이스(destination device)(14)에 제공하도록 구성된 출발지 디바이스(source device)(12)를 포함한다.
출발지 디바이스(12)는 인코더(20)를 포함하고, 추가적으로, 즉, 임의적으로, 픽처 소스(picture source)(16), 프리-프로세서(pre-processor)(또는 프리-프로세싱 유닛)(18), 예컨대, 픽처 프리-프로세서(18), 및 통신 인터페이스 또는 통신 유닛(22)을 포함할 수 있다.
픽처 소스(16)는 임의의 종류의 픽처 캡처 디바이스, 예를 들어, 실세계 픽처를 캡처하기 위한 카메라, 및/또는 임의의 종류의 픽처 생성 디바이스, 예를 들어, 컴퓨터 애니메이팅된 픽처를 생성하기 위한 컴퓨터-그래픽 프로세서, 또는 실세계 픽처, 컴퓨터 생성된 픽처(예컨대, 스크린 컨텐츠, 가상 현실(virtual reality)(VR) 픽처), 및/또는 그 임의의 조합(예컨대, 증강 현실(augmented reality)(AR) 픽처)을 획득하고 및/또는 제공하기 위한 임의의 종류의 다른 디바이스를 포함할 수 있거나 이러한 것일 수 있다. 픽처 소스는 전술한 픽처들 중의 임의의 것을 저장하는 임의의 종류의 메모리 또는 스토리지(storage)일 수 있다.
프리-프로세서(18) 및 프리-프로세싱 유닛(18)에 의해 수행된 프로세싱과 구분하여, 픽처 또는 픽처 데이터(17)는 또한, 원시 픽처(raw picture) 또는 원시 픽처 데이터(raw picture data)(17)로서 지칭될 수 있다.
프리-프로세서(18)는 (원시) 픽처 데이터(17)를 수신하고, 프리-프로세싱된 픽처(19) 또는 프리-프로세싱된 픽처 데이터(19)를 획득하기 위하여 픽처 데이터(17)에 대해 프리-프로세싱을 수행하도록 구성된다. 프리-프로세서(18)에 의해 수행된 프리-프로세싱은 예컨대, 트리밍(trimming), (예컨대, RGB로부터 YCbCr로의) 컬러 포맷 변환, 컬러 정정(color correction), 또는 잡음-제거(de-noising)를 포함할 수 있다. 프리-프로세싱 유닛(18)은 임의적인 컴포넌트일 수 있다는 것이 이해될 수 있다.
비디오 인코더(20)는 프리-프로세싱된 픽처 데이터(19)를 수신하고 인코딩된 픽처 데이터(21)를 제공하도록 구성된다(추가의 세부사항들은 이하에서, 예컨대, 도 2에 기초하여 설명될 것임).
출발지 디바이스(12)의 통신 인터페이스(22)는 인코딩된 픽처 데이터(21)를 수신하고, 저장 또는 직접적인 재구성을 위하여, 인코딩된 픽처 데이터(21)(또는 그 임의의 추가의 프로세싱된 버전(version))를 통신 채널(13) 상에서 또 다른 디바이스, 예컨대, 목적지 디바이스(14) 또는 임의의 다른 디바이스로 송신하도록 구성될 수 있다.
목적지 디바이스(14)는 디코더(30)(예컨대, 비디오 디코더(30))를 포함하고, 추가적으로, 즉, 임의적으로, 통신 인터페이스 또는 통신 유닛(28), 포스트-프로세서(post-processor)(32)(또는 포스트-프로세싱 유닛(32)), 및 디스플레이 디바이스(34)를 포함할 수 있다.
목적지 디바이스(14)의 통신 인터페이스(28)는 예컨대, 출발지 디바이스(12)로부터 직접적으로, 또는 임의의 다른 소스, 예컨대, 저장 디바이스, 예컨대, 인코딩된 픽처 데이터 저장 디바이스로부터 인코딩된 픽처 데이터(21)(또는 그 임의의 추가의 프로세싱된 버전)를 수신하고, 인코딩된 픽처 데이터(21)를 디코더(30)에 제공하도록 구성된다.
통신 인터페이스(22) 및 통신 인터페이스(28)는 출발지 디바이스(12)와 목적지 디바이스(14) 사이의 직접 통신 링크, 예컨대, 직접 유선 또는 무선 접속을 통해, 또는 임의의 종류의 네트워크, 예컨대, 유선 또는 무선 네트워크 또는 그 임의의 조합, 또는 임의의 종류의 사설 및 공공 네트워크, 또는 그 임의의 종류의 조합을 통해, 인코딩된 픽처 데이터(21) 또는 인코딩된 데이터(13)를 전송하거나 수신하도록 구성될 수 있다.
통신 인터페이스(22)는 예컨대, 인코딩된 픽처 데이터(21)를 적절한 포맷, 예컨대, 패킷(packet)들로 패키징하고, 및/또는 통신 링크 또는 통신 네트워크 상에서의 송신을 위한 임의의 종류의 송신 인코딩 또는 프로세싱을 이용하여 인코딩된 픽처 데이터를 프로세싱하도록 구성될 수 있다.
통신 인터페이스(22)의 대응부를 형성하는 통신 인터페이스(28)는 예컨대, 송신된 데이터를 수신하고, 인코딩된 픽처 데이터(21)를 획득하기 위하여 임의의 종류의 대응하는 송신 디코딩 또는 프로세싱 및/또는 디-패키징(de-packaging)을 이용하여 송신 데이터를 프로세싱하도록 구성될 수 있다.
통신 인터페이스(22) 및 통신 인터페이스(28)의 둘 모두는 출발지 디바이스(12)로부터 목적지 디바이스(14)로 지시하는 도 1a에서의 통신 채널(13)에 대한 화살표에 의해 표시된 바와 같은 단방향 통신 인터페이스들, 또는 양방향 통신 인터페이스들로서 구성될 수 있고, 통신 링크 및/또는 데이터 송신, 예컨대, 인코딩된 픽처 데이터 송신에 관련된 임의의 다른 정보를 수신확인(acknowledge)하고 교환하기 위하여, 예컨대, 메시지들을 전송하고 수신하도록, 예컨대, 접속을 셋업(set up)하도록 구성될 수 있다.
디코더(30)는 인코딩된 픽처 데이터(21)를 수신하고 디코딩된 픽처 데이터(31) 또는 디코딩된 픽처(31)를 제공하도록 구성된다(추가의 세부사항들은 이하에서, 예컨대, 도 3 또는 도 5에 기초하여 설명될 것임).
목적지 디바이스(14)의 포스트-프로세서(32)는 포스트-프로세싱된 픽처 데이터(33), 예컨대, 포스트-프로세싱된 픽처(33)를 획득하기 위하여, 디코딩된 픽처 데이터(31)(또는 재구성된 픽처 데이터로 칭해짐), 예컨대, 디코딩된 픽처(31)를 포스트-프로세싱하도록 구성된다. 포스트-프로세싱 유닛(32)에 의해 수행된 포스트-프로세싱은, 예컨대, (예컨대, YCbCr로부터 RGB로의) 컬러 포맷 변환, 컬러 정정, 트리밍, 또는 리-샘플링(re-sampling), 또는 예컨대, 디스플레이 디바이스(34)에 의한 디스플레이를 위하여, 예컨대, 디코딩된 픽처 데이터(31)를 준비하기 위한 임의의 다른 프로세싱을 포함할 수 있다.
목적지 디바이스(14)의 디스플레이 디바이스(34)는 픽처를 예컨대, 사용자 또는 뷰어(viewer)에게 디스플레이하기 위한 포스트-프로세싱된 픽처 데이터(33)를 수신하도록 구성된다. 디스플레이 디바이스(34)는 재구성된 픽처를 표현하기 위한 임의의 종류의 디스플레이, 예컨대, 통합된 또는 외부의 디스플레이 또는 모니터일 수 있거나 이러한 것을 포함할 수 있다. 디스플레이들은 예컨대, 액정 디스플레이(liquid crystal display)(LCD)들, 유기 발광 다이오드(organic light emitting diodes)(OLED) 디스플레이들, 플라즈마 디스플레이들, 프로젝터(projector)들, 마이크로 LED 디스플레이들, 실리콘 상 액정(liquid crystal on silicon)(LCoS), 디지털 광 프로세서(digital light processor)(DLP), 또는 임의의 종류의 다른 디스플레이를 포함할 수 있다.
도 1a는 출발지 디바이스(12) 및 목적지 디바이스(14)를 별도의 디바이스들로서 도시하지만, 디바이스들의 실시예들은 또한, 둘 모두 또는 둘 모두의 기능성들인, 출발지 디바이스(12) 또는 대응하는 기능성, 및 목적지 디바이스(14) 또는 대응하는 기능성을 포함할 수 있다. 이러한 실시예들에서, 출발지 디바이스(12) 또는 대응하는 기능성, 및 목적지 디바이스(14) 또는 대응하는 기능성은 동일한 하드웨어 및/또는 소프트웨어를 이용하여, 또는 별도의 하드웨어 및/또는 소프트웨어 또는 그 임의의 조합에 의해 구현될 수 있다.
설명에 기초하여 통상의 기술자에게 분명한 바와 같이, 도 1a에서 도시된 바와 같은 상이한 유닛들의 기능성들 또는 출발지 디바이스(12) 및/또는 목적지 디바이스(14) 내에서의 기능성들의 존재 및 (정확한) 분할은 실제적인 디바이스 및 애플리케이션에 따라 변동될 수 있다.
인코더(20)(예컨대, 비디오 인코더(20)) 또는 디코더(30)(예컨대, 비디오 디코더(30)) 또는 인코더(20) 및 디코더(30)의 둘 모두는 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서(digital signal processor)(DSP)들, 애플리케이션-특정 집적 회로(application-specific integrated circuit)(ASIC)들, 필드-프로그래밍가능 게이트 어레이(field-programmable gate array)(FPGA)들, 개별 로직, 하드웨어, 비디오 코딩 전용, 또는 그 임의의 조합들과 같은, 도 1b에서 도시된 바와 같은 프로세싱 회로부를 통해 구현될 수 있다. 인코더(20)는 도 2의 인코더(20)에 대하여 논의된 바와 같은 다양한 모듈들 및/또는 본 명세서에서 설명된 임의의 다른 인코더 시스템 또는 서브시스템을 구체화하기 위하여 프로세싱 회로부(46)를 통해 구현될 수 있다. 디코더(30)는 도 3의 디코더(30)에 대하여 논의된 바와 같은 다양한 모듈들 및/또는 본 명세서에서 설명된 임의의 다른 디코더 시스템 또는 서브시스템을 구체화하기 위하여 프로세싱 회로부(46)를 통해 구현될 수 있다. 프로세싱 회로부는 더 이후에 논의된 바와 같은 다양한 동작들을 수행하도록 구성될 수 있다. 도 5에서 도시된 바와 같이, 기법들이 부분적으로 소프트웨어로 구현될 경우에, 디바이스는 소프트웨어를 위한 명령들을 적당한 비-일시적(non-transitory) 컴퓨터-판독가능 저장 매체 내에 저장할 수 있고, 이 개시내용의 기법들을 수행하기 위하여 하나 이상의 프로세서들을 이용하여 명령들을 하드웨어로 실행할 수 있다. 비디오 인코더(20) 및 비디오 디코더(30)의 어느 하나는 예를 들어, 도 1b에서 도시된 바와 같이, 단일 디바이스에서의 조합된 인코더/디코더(CODEC)의 부분으로서 통합될 수 있다.
출발지 디바이스(12) 및 목적지 디바이스(14)는 임의의 종류의 핸드헬드(handheld) 또는 정지식 디바이스들, 예컨대, 노트북 또는 랩톱 컴퓨터들, 이동 전화들, 스마트 폰들, 태블릿들 또는 태블릿 컴퓨터들, 카메라들, 데스크톱 컴퓨터들, 셋톱 박스(set-top box)들, 텔레비전들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게이밍 콘솔(video gaming console)들, (컨텐츠 서비스들 서버들 또는 컨텐츠 전달 서버들과 같은) 비디오 스트리밍 디바이스들, 브로드캐스트 수신기 디바이스, 브로드캐스트 송신기 디바이스 등을 포함하는 광범위한 디바이스들 중의 임의의 것을 포함할 수 있고, 오퍼레이팅 시스템(operating system)을 이용하지 않을 수 있거나 임의의 종류의 오퍼레이팅 시스템을 이용할 수 있다. 일부의 경우들에는, 출발지 디바이스(12) 및 목적지 디바이스(14)가 무선 통신을 위해 구비될 수 있다. 이에 따라, 출발지 디바이스(12) 및 목적지 디바이스(14)는 무선 통신 디바이스들일 수 있다.
일부 경우들에는, 도 1a에서 예시된 비디오 코딩 시스템(10)이 단지 예이고, 본 출원의 기법들은 인코딩 및 디코딩 디바이스들 사이의 임의의 데이터 통신을 반드시 포함하지는 않는 비디오 코딩 설정들(예컨대, 비디오 인코딩 또는 비디오 디코딩)에 적용할 수 있다. 다른 예들에서, 데이터는 로컬 메모리로부터 취출(retrieve)되고, 네트워크 상에서 스트리밍되는 등과 같다. 비디오 인코딩 디바이스는 데이터를 인코딩하고 데이터를 메모리에 저장할 수 있고, 및/또는 비디오 디코딩 디바이스는 메모리로부터 데이터를 취출하고 데이터를 디코딩할 수 있다. 일부 예들에서, 인코딩 및 디코딩은, 서로 통신하지 않지만, 간단하게 데이터를 메모리로 인코딩하고 및/또는 메모리로부터 데이터를 취출하고 데이터를 디코딩하는 디바이스들에 의해 수행된다.
설명의 편의를 위하여, 출원의 실시예들은 예를 들어, 고효율 비디오 코딩(High-Efficiency Video Coding)(HEVC), 또는 ITU-T 비디오 코딩 전문가 그룹(Video Coding Experts Group)(VCEG) 및 ISO/IEC 모션 픽처 전문가 그룹(Motion Picture Experts Group)(MPEG)의 비디오 코딩에 대한 공동 협력 팀(Joint Collaboration Team on Video Coding)(JCT-VC)에 의해 개발된 차세대 비디오 코딩 표준인 다용도 비디오 코딩(Versatile Video coding)(VVC)의 참조 소프트웨어를 참조하여 본 명세서에서 설명된다. 본 기술분야에서의 통상의 기술자는 출원의 실시예들이 HEVC 또는 VVC로 제한되지 않는다는 것을 이해할 것이다.
인코더 및 인코딩 방법
도 2는 본 출원의 기법들을 구현하도록 구성되는 예시적인 비디오 인코더(20)의 개략적인 블록도를 도시한다. 도 2의 예에서, 비디오 인코더(20)는 입력부(201)(또는 입력 인터페이스(201)), 잔차 계산 유닛(204), 변환 프로세싱 유닛(206), 양자화 유닛(208), 역 양자화(inverse quantization) 유닛(210), 및 역 변환 프로세싱 유닛(212), 재구성 유닛(214), 루프 필터 유닛(220), 디코딩된 픽처 버퍼(decoded picture buffer)(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 decoder)"를 형성하는 것으로서 지칭된다.
픽처들 및 픽처 파티셔닝(픽처들 및 블록들)
인코더(20)는 예컨대, 입력(201)을 통해, 픽처(17)(예컨대, 픽처 데이터(17)), 예컨대, 비디오 또는 비디오 시퀀스를 형성하는 픽처들의 시퀀스의 픽처를 수신하도록 구성될 수 있다. 수신된 픽처 또는 픽처 데이터는 또한, 프리-프로세싱된 픽처(19)(또는 프리-프로세싱된 픽처 데이터(19))일 수 있다. 단순함을 위하여, 다음의 설명은 픽처(17)를 지칭한다. 픽처(17)는 또한, (특히, 비디오 코딩 시에, 다른 픽처들, 예컨대, 동일한 비디오 시퀀스, 즉, 현재의 픽처를 또한 포함하는 비디오 시퀀스의 이전에 인코딩된 및/또는 디코딩된 픽처들로부터 현재의 픽처를 구별하기 위하여) 현재의 픽처 또는 코딩되어야 할 픽처로서 지칭될 수 있다.
(디지털) 픽처는 세기 값(intensity value)들을 갖는 샘플들의 2 차원 어레이 또는 행렬(matrix)이거나 이러한 것으로서 간주될 수 있다. 어레이에서의 샘플은 또한, 픽셀(픽처 엘리먼트의 축약 형태) 또는 펠(pel)로서 지칭될 수 있다. 어레이 또는 픽처의 수평 및 수직 방향(또는 축)에서의 샘플들의 수는 픽처의 크기 및/또는 해상도를 정의한다. 컬러의 표현을 위하여, 전형적으로, 3 개의 컬러 컴포넌트가 채용되고, 즉, 픽처는 3 개의 샘플 어레이로 표현될 수 있거나 3 개의 샘플 어레이를 포함할 수 있다. RBG 포맷 또는 컬러 공간에서, 픽처는 대응하는 적색, 녹색, 및 청색 샘플 어레이를 포함한다. 그러나, 비디오 코딩 시에, 각각의 픽셀은 전형적으로, 루미넌스(luminance) 및 크로미넌스(chrominance) 포맷으로, 또는 Y(때때로, 또한, L이 그 대신에 이용됨)에 의해 표시된 루미넌스 컴포넌트 및 Cb 및 Cr에 의해 표시된 2 개의 크로미넌스 컴포넌트를 포함하는 컬러 공간, 예컨대, YCbCr에서 표현된다. 루미넌스(또는 줄여서 루마) 컴포넌트 Y는 (예컨대, 그레이-스케일(grey-scale) 픽처에서와 같은) 밝기 또는 그레이 레벨 세기를 표현하는 반면, 2 개의 크로미넌스(또는 줄여서 크로마) 컴포넌트들 Cb 및 Cr은 색도(chromaticity) 또는 컬러 정보 컴포넌트들을 표현한다. 따라서, YCbCr 포맷에서의 픽처는 루미넌스 샘플 값들(Y)의 루미넌스 샘플 어레이, 및 크로미넌스 값들(Cb 및 Cr)의 2 개의 크로미넌스 샘플 어레이를 포함한다. RGB 포맷에서의 픽처들은 YCbCr 포맷으로 전환될 수 있거나 변환될 수 있고, 그 반대도 마찬가지일 수 있고, 프로세스는 또한, 컬러 변환 또는 전환으로서 알려져 있다. 픽처가 모노크롬일 경우에, 픽처는 오직 루미넌스 샘플 어레이를 포함할 수 있다. 따라서, 픽처는 예를 들어, 모노크롬 포맷에서의 루마 샘플들의 어레이 또는 루마 샘플들의 어레이, 및 4:2:0, 4:2:2, 및 4:4:4 컬러 포맷에서의 크로마 샘플들의 2 개의 대응하는 어레이일 수 있다.
비디오 인코더(20)의 실시예들은 픽처(17)를 복수의(전형적으로, 비-중첩하는) 픽처 블록(203)으로 파티셔닝하도록 구성된 픽처 파티셔닝 유닛(도 2에서 도시되지 않음)을 포함할 수 있다. 이 블록들은 또한, 루트 블록(root block)들, 매크로 블록(macro block)들(H.264/AVC), 또는 코딩 트리 블록(coding tree block)(CTB)들, 또는 코딩 트리 유닛(coding tree unit)(CTU)들(H.265/HEVC 및 VVC)로서 지칭될 수 있다. 픽처 파티셔닝 유닛은 비디오 시퀀스의 모든 픽처들에 대한 동일한 블록 크기 및 현재의 블록 크기를 정의하는 대응하는 그리드(grid)를 이용하거나, 픽처들 또는 픽처들의 서브세트들 또는 그룹들 사이에서 현재의 블록 크기를 변경하고 각각의 픽처를 대응하는 블록들로 파티셔닝하도록 구성될 수 있다.
추가의 실시예들에서, 비디오 인코더는 픽처(17)의 블록(203), 예컨대, 픽처(17)를 형성하는 하나, 몇몇, 또는 모든 블록들을 직접적으로 수신하도록 구성될 수 있다. 픽처 블록(203)은 또한, 현재의 픽처 블록 또는 코딩되어야 할 픽처 블록으로서 지칭될 수 있다.
픽처(17)와 같이, 픽처 블록(203)은 다시, 픽처(17)보다 더 작은 차원이지만, 세기 값들(샘플 값들)을 갖는 샘플들의 2-차원 어레이 또는 행렬이거나 이러한 것으로서 간주될 수 있다. 다시 말해서, 현재의 블록(203)은 적용된 컬러 포맷에 따라, 예컨대, 하나의 샘플 어레이(예컨대, 모노크롬 픽처(17)의 경우에 루마 어레이, 또는 컬러 픽처의 경우에 루마 또는 크로마 어레이), 또는 3 개의 샘플 어레이(예컨대, 컬러 픽처(17)의 경우에 루마 및 2 개의 크로마 어레이), 또는 임의의 다른 수 및/또는 종류의 어레이들을 포함할 수 있다. 현재의 블록(203)의 수평 및 수직 방향(또는 축)에서의 샘플들의 수는 블록(203)의 크기를 정의한다. 따라서, 블록은 예를 들어, 샘플들의 MxN(M-열 대 N-행) 어레이, 또는 변환 계수들의 MxN 어레이일 수 있다.
도 2에서 도시된 바와 같은 비디오 인코더(20)의 실시예들은 픽처(17)를 블록 대 블록으로 인코딩하도록 구성될 수 있고, 예컨대, 인코딩 및 예측은 블록(203)마다 수행된다.
도 2에서 도시된 바와 같은 비디오 인코더(20)의 실시예들은 슬라이스들(또한, 비디오 슬라이스들로서 지칭됨)을 이용함으로써 픽처를 파티셔닝하고 및/또는 인코딩하도록 추가로 구성될 수 있고, 여기서, 픽처는 하나 이상의 슬라이스들(전형적으로, 비-중첩함)을 이용하여 파티셔닝될 수 있거나 인코딩될 수 있고, 각각의 슬라이스는 하나 이상의 블록들(예컨대, CTU들)을 포함할 수 있다.
도 2에서 도시된 바와 같은 비디오 인코더(20)의 실시예들은 타일 그룹들(또한, 비디오 타일 그룹들로서 지칭됨) 및/또는 타일들(또한, 비디오 타일들로서 지칭됨)을 이용함으로써 픽처를 파타셔닝하고 및/또는 인코딩하도록 추가로 구성될 수 있고, 여기서, 픽처는 하나 이상의 타일 그룹들(전형적으로, 비-중첩함)을 이용하여 파티서닝될 수 있거나 인코딩될 수 있고, 각각의 타일 그룹은 예컨대, 하나 이상의 블록들(예컨대, CTU들) 또는 하나 이상의 타일들을 포함할 수 있고, 여기서, 각각의 타일은 예컨대, 직사각형 형상일 수 있고, 하나 이상의 블록들(예컨대, CTU들), 예컨대, 완전한 또는 부분적인 블록들을 포함할 수 있다.
잔차 계산
잔차 계산 유닛(204)은 샘플 도메인에서 잔차 블록(205)을 획득하기 위하여, 예컨대, 픽처 블록(203)의 샘플 값들로부터 예측 블록(265)의 샘플 값들을 샘플 대 샘플로(픽셀 대 픽셀로) 감산함으로써, 픽처 블록(203) 및 예측 블록(265)(예측 블록(265)에 대한 추가의 세부사항들은 더 이후에 제공됨)에 기초하여 잔차 블록(205)(또한, 잔차(205)로서 지칭됨)을 계산하도록 구성될 수 있다.
변환
변환 프로세싱 유닛(206)은 변환 도메인에서 변환 계수들(207)을 획득하기 위하여, 잔차 블록(205)의 샘플 값들에 대해 변환, 예컨대, 이산 코사인 변환(discrete cosine transform)(DCT) 또는 이산 사인 변환(discrete sine transform)(DST)을 적용하도록 구성될 수 있다. 변환 계수들(207)은 또한, 변환 잔차 계수들로서 지칭될 수 있고, 변환 도메인에서 잔차 블록(205)을 표현할 수 있다.
변환 프로세싱 유닛(206)은 H.265/HEVC에 대하여 특정된 변환들과 같은 DCT/DST의 정수 근사화(integer approximation)들을 적용하도록 구성될 수 있다. 직교 DCT 변환과 비교하여, 이러한 정수 근사화는 전형적으로, 어떤 인자(factor)에 의해 스케일링된다. 순방향 및 역 변환들에 의해 프로세싱되는 잔차 블록의 놈(norm)을 보존하기 위하여, 추가적인 스케일링 인자들은 변환 프로세스의 일부로서 적용된다. 스케일링 인자들은 전형적으로, 시프트 연산들의 2의 거듭제곱, 변환 계수들의 비트 심도(bit depth), 정확도와 구현 비용들 사이의 절충 등인 스케일링 인자들과 같은 어떤 제약들에 기초하여 선택된다. 특정 스케일링 인자들은 예를 들어, 예컨대, 역 변환 프로세싱 유닛(212)에 의한 역 변환(및 예컨대, 비디오 디코더(30)에서의 역 변환 프로세싱 유닛(312)에 의한 대응하는 역 변환)에 대하여 특정되고, 예컨대, 인코더(20)에서의 변환 프로세싱 유닛(206)에 의한 순방향 변환에 대한 대응하는 스케일링 인자들이 이에 따라 특정될 수 있다.
비디오 인코더(20)(각각 변환 프로세싱 유닛(206))의 실시예들은 예컨대, 직접적으로, 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩되거나 압축된 변환 파라미터들, 예컨대, 변환 또는 변환들의 유형을 출력하도록 구성될 수 있어서, 예컨대, 비디오 디코더(30)는 디코딩을 위한 변환 파라미터들을 수신할 수 있고 이들을 이용할 수 있다.
양자화
양자화 유닛(208)은 예컨대, 스칼라 양자화(scalar quantization) 또는 벡터 양자화(vector quantization)를 적용함으로써 양자화된 계수들(209)을 획득하기 위하여 변환 계수들(207)을 양자화하도록 구성될 수 있다. 양자화된 계수들(209)은 또한, 양자화된 변환 계수들(209) 또는 양자화된 잔차 계수들(209)로서 지칭될 수 있다.
양자화 프로세스는 변환 계수들(207)의 일부 또는 전부와 연관된 비트 심도를 감소시킬 수 있다. 예를 들어, n-비트 변환 계수는 양자화 동안에 m-비트 변환 계수로 버림(round down)될 수 있고, 여기서, n은 m보다 더 크다. 양자화도는 양자화 파라미터(quantization parameter)(QP)를 조절함으로써 수정될 수 있다. 예를 들어, 스칼라 양자화를 위하여, 상이한 스케일링은 더 미세한 또는 더 대략적인 양자화를 달성하기 위해 이용될 수 있다. 더 작은 양자화 스텝 크기(quantization step size)들은 더 미세한 양자화에 대응하는 반면, 더 큰 양자화 스텝 크기들은 더 대략적인 양자화에 대응한다. 적용가능한 양자화 스텝 크기는 양자화 파라미터(QP)에 의해 표시될 수 있다. 양자화 파라미터는 예를 들어, 적용가능한 양자화 스텝 크기들의 미리 정의된 세트에 대한 인덱스(index)일 수 있다. 예를 들어, 작은 양자화 파라미터들은 미세한 양자화(작은 양자화 스텝 크기들)에 대응할 수 있고, 큰 양자화 파라미터들은 대략적인 양자화(큰 양자화 스텝 크기들)에 대응할 수 있거나, 그 반대도 마찬가지일 수 있다. 양자화는 양자화 스텝 크기에 의한 제산(division)을 포함할 수 있고, 예컨대, 역 양자화 유닛(210)에 의한 대응하는 및/또는 역 탈양자화(inverse dequantization)는 양자화 스텝 크기에 의한 승산(multiplication)을 포함할 수 있다. 일부 표준들, 예컨대, HEVC에 따른 실시예들은 양자화 스텝 크기를 결정하기 위하여 양자화 파라미터를 이용하도록 구성될 수 있다. 일반적으로, 양자화 스텝 크기는 제산을 포함하는 수학식의 고정 소수점 근사화(fixed point approximation)를 이용하여 양자화 파라미터에 기초하여 계산될 수 있다. 추가적인 스케일링 인자들은 양자화 스텝 크기 및 양자화 파라미터에 대한 수학식의 고정 소수점 근사화에서 이용된 스케일링 때문에 수정되었을 수 있는 잔차 블록의 놈을 복원하기 위한 양자화 및 탈양자화를 위하여 도입될 수 있다. 하나의 예시적인 구현예에서, 역 변환 및 탈양자화(dequantization)의 스케일링은 조합될 수 있다. 대안적으로, 맞춤화된 양자화 표들이 이용될 수 있고, 예컨대, 비트스트림에서 인코더로부터 디코더로 시그널링될 수 있다. 양자화는 손실 동작이고, 여기서, 손실은 증가하는 양자화 스텝 크기들과 함께 증가한다.
비디오 인코더(20)(각각 양자화 유닛(208))의 실시예들은 예컨대, 직접적으로, 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩된 양자화 파라미터들(QP)을 출력하도록 구성될 수 있어서, 예컨대, 비디오 디코더(30)는 디코딩을 위한 양자화 파라미터들을 수신할 수 있고 이들을 적용할 수 있다.
역 양자화
역 양자화 유닛(210)은 예컨대, 양자화 유닛(208)과 동일한 양자화 스텝 크기에 기초하여 또는 이를 이용하여 양자화 유닛(208)에 의해 적용된 양자화 방식의 역(inverse)을 적용함으로써 탈양자화된 계수들(211)을 획득하기 위하여, 양자화된 계수들에 대해 양자화 유닛(208)의 역 양자화를 적용하도록 구성된다. 탈양자화된 계수들(211)은 또한, 탈양자화된 잔차 계수들(211)로서 지칭될 수 있고, 양자화에 의한 손실로 인해 변환 계수들과 전형적으로 동일하지는 않지만, 변환 계수들(207)에 대응할 수 있다.
역 변환
역 변환 프로세싱 유닛(212)은 샘플 도메인에서 재구성된 잔차 블록(213)(또는 대응하는 탈양자화된 계수들(213))을 획득하기 위하여, 변환 프로세싱 유닛(206)에 의해 적용된 변환의 역 변환, 예컨대, 역 이산 코사인 변환(DCT) 또는 역 이산 사인 변환(DST) 또는 다른 역 변환들을 적용하도록 구성된다. 재구성된 잔차 블록(213)은 또한, 변환 블록(213)으로서 지칭될 수 있다.
재구성
재구성 유닛(214)(예컨대, 가산기 또는 합산기(214))은 예컨대, 재구성된 잔차 블록(213)의 샘플 값들 및 예측 블록(265)의 샘플 값들을 샘플 대 샘플로 가산함으로써 샘플 도메인에서 재구성된 블록(215)을 획득하기 위하여, 변환 블록(213)(즉, 재구성된 잔차 블록(213))을 예측 블록(265)에 가산하도록 구성된다.
필터링
루프 필터 유닛(220)(또는 줄여서 "루프 필터"(220))은 필터링된 블록(221)을 획득하기 위하여 재구성된 블록(215)을 필터링하도록, 또는 일반적으로, 필터링된 샘플들을 획득하기 위하여 재구성된 샘플들을 필터링하도록 구성된다. 루프 필터 유닛은 예컨대, 픽셀 전이(pixel transition)들을 평활화하거나, 또는 이와 다르게 비디오 품질을 개선시키도록 구성된다. 루프 필터 유닛(220)은 디-블록킹 필터(de-blocking filter), 샘플-적응적 오프셋(sample-adaptive offset)(SAO) 필터 또는 하나 이상의 다른 필터들, 예컨대, 양방향 필터(bilateral filter), 적응적 루프 필터(adaptive loop filter)(ALF), 선예화(sharpening) 평활 필터들 또는 협력적 필터들, 또는 그 임의의 조합과 같은 하나 이상의 루프 필터들을 포함할 수 있다. 루프 필터 유닛(220)은 인 루프 필터(in loop filter)인 것으로서 도 2에서 도시되지만, 다른 구성들에서, 루프 필터 유닛(220)은 포스트 루프 필터(post loop filter)로서 구현될 수 있다. 필터링된 블록(221)은 또한, 필터링된 재구성된 블록(221)으로서 지칭될 수 있다.
비디오 인코더(20)(각각 루프 필터 유닛(220))의 실시예들은 예컨대, 직접적으로, 또는 엔트로피 인코딩 유닛(270)을 통해 인코딩된 (샘플 적응적 오프셋 정보와 같은) 루프 필터 파라미터들을 출력하도록 구성될 수 있어서, 예컨대, 디코더(30)는 디코딩을 위한 동일한 루프 필터 파라미터들 또는 개개의 루프 필터들을 수신할 수 있고 이들을 적용할 수 있다.
디코딩된 픽처 버퍼
디코딩된 픽처 버퍼(DPB)(230)는, 비디오 인코더(20)에 의해 비디오 데이터를 인코딩하기 위한 참조 픽처들, 또는 일반적으로 참조 픽처 데이터를 저장하는 메모리일 수 있다. DPB(230)는 동기식 DRAM(synchronous DRAM)(SDRAM), 자기저항성 RAM(magnetoresistive RAM)(MRAM), 저항성 RAM(resistive RAM)(RRAM), 또는 다른 유형들의 메모리 디바이스들을 포함하는 동적 랜덤 액세스 메모리(dynamic random access memory)(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)의 실시예들은, 최상의 정합(best match) 또는 다시 말해서 최소 잔차(최소 잔차는 송신 또는 저장을 위한 더 양호한 압축을 의미함), 또는 최소 시그널링 오버헤드(signaling overhead)(최소 시그널링 오버헤드는 송신 또는 저장을 위한 더 양호한 압축을 의미함)를 제공하거나, 또는 양자를 고려하거나 이들을 균형화하는 (예컨대, 모드 선택 유닛(260)에 의해 지원되거나 모드 선택 유닛(260)을 위하여 이용가능한 것들로부터) 파티셔닝 및 예측 모드를 선택하도록 구성될 수 있다. 모드 선택 유닛(260)은 레이트 왜곡 최적화(rate distortion optimization)(RDO)에 기초하여 파티셔닝 및 예측 모드를 결정하도록, 즉, 최소 레이트 왜곡을 제공하는 예측 모드를 선택하도록 구성될 수 있다. 이 문맥에서의 "최상", "최소", "최적" 등과 같은 용어들은 반드시 전체적인 "최상", "최소", "최적" 등을 지칭하는 것이 아니라, "차선의 선택"으로 잠재적으로 이어지지만 복잡도 및 프로세싱 시간을 감소시키는 임계치 또는 다른 제약들을 초과하거나 그 미만으로 하락하는 값과 같은 종결 또는 선택 기준의 이행을 또한 지칭할 수 있다.
다시 말해서, 파티셔닝 유닛(262)은 예컨대, 쿼드-트리-파티셔닝(quad-tree-partitioning)(QT), 2진 파티셔닝(binary partitioning)(BT), 또는 3중-트리-파티셔닝(triple-tree-partitioning)(TT), 또는 그 임의의 조합을 반복적으로 이용하여, 현재의 블록(203)을 더 작은 블록 파티션들 또는 (다시 블록들을 형성하는) 서브-블록들로 파티셔닝하고, 예컨대, 현재의 블록 파티션들 또는 서브-블록들의 각각을 위한 예측을 수행하도록 구성될 수 있고, 여기서, 모드 선택은 파티셔닝된 블록(203)의 트리-구조의 선택을 포함하고, 예측 모드들은 현재의 블록 파티션들 또는 서브-블록들의 각각에 적용된다.
다음에서, 예시적인 비디오 인코더(20)에 의해 수행된 (예컨대, 파티셔닝 유닛(260)에 의한) 파티셔닝 및 (인터-예측 유닛(244) 및 인트라-예측 유닛(254)에 의한) 예측 프로세싱이 더 상세하게 설명될 것이다.
파티셔닝
파티셔닝 유닛(262)은 현재의 블록(203)을 더 작은 파티션들, 예컨대, 정사각형 또는 직사각형 크기의 더 작은 블록들로 파티셔닝(또는 분할)할 수 있다. (서브-블록들로서 또한 지칭될 수 있는) 이 더 작은 블록들은 훨씬 더 작은 파티션들로 추가로 파티셔닝될 수 있다. 이것은 또한, 트리-파티셔닝 또는 계측적 트리-파티셔닝으로 지칭되고, 여기서, 예컨대, 루트 트리-레벨 0(계층구조-레벨 0, 심도 0)에서의 루트 블록(root block)은 재귀적으로(recursively) 파티셔닝될 수 있고, 예컨대, 다음의 더 낮은 트리-레벨의 2 개 이상의 블록들, 예컨대, 트리-레벨 1(계층구조-레벨 1, 심도 1)에서의 노드들로 파티셔닝될 수 있고, 여기서, 이 블록들은 예컨대, 종결 조건이 이행되기 때문에, 예컨대, 최대 트리 심도 또는 최소 블록 크기에 도달하기 때문에, 파티셔닝이 종결될 때까지, 다음의 더 낮은 레벨, 예컨대, 트리-레벨 2(계층구조-레벨 2, 심도 2) 등의 2 개 이상의 블록들로 다시 파티셔닝될 수 있다. 추가로 파티셔닝되지 않는 블록들은 또한, 트리의 리프-블록(leaf-block)들 또는 리프 노드(leaf node)들로서 지칭된다. 2 개의 파티션으로의 파티셔닝을 이용하는 트리는 2진-트리(binary-tree)(BT)로서 지칭되고, 3 개의 파티션으로의 파티셔닝을 이용하는 트리는 3진-트리(ternary-tree)(TT)로서 지칭되고, 4 개의 파티션으로의 파타셔닝을 이용하는 트리는 쿼드-트리(quad-tree)(QT)로서 지칭된다.
이전에 언급된 바와 같이, 본 명세서에서 이용된 바와 같은 용어 "블록"은 픽처의 부분, 특히, 정사각형 또는 직사각형 부분일 수 있다. 예를 들어, HEVC 및 VVC를 참조하면, 현재의 블록은 코딩 트리 유닛(coding tree unit)(CTU), 코딩 유닛(coding unit)(CU), 예측 유닛(prediction unit)(PU), 및 변환 유닛(transform unit)(TU) 및/또는 대응하는 블록들, 예컨대, 코딩 트리 블록(coding tree block)(CTB), 코딩 블록(coding block)(CB), 변환 블록(transform block)(TB), 또는 예측 블록(prediction block)(PB)일 수 있거나 이들에 대응할 수 있다.
예를 들어, 코딩 트리 유닛(CTU)은 루마 샘플들의 CTB, 3 개의 샘플 어레이를 가지는 픽처의 크로마 샘플들의 2 개의 대응하는 CTB, 또는 모노크롬 픽처, 또는 샘플들을 코딩하기 위하여 이용된 3 개의 별도의 컬러 평면 및 신택스 구조들을 이용하여 코딩되는 픽처의 샘플들의 CTB일 수 있거나 이들을 포함할 수 있다. 대응하게도, 코딩 트리 블록(CTB)은 CTB들로의 컴포넌트의 분할이 파티셔닝이 되도록, N의 일부 값에 대한 샘플들의 NxN 블록일 수 있다. 코딩 유닛(CU)은 루마 샘플들의 코딩 블록, 3 개의 샘플 어레이를 가지는 픽처의 크로마 샘플들의 2 개의 대응하는 코딩 블록, 또는 모노크롬 픽처, 또는 샘플들을 코딩하기 위하여 이용된 3 개의 별도의 컬러 평면 및 신택스 구조들을 이용하여 코딩되는 픽처의 샘플들의 코딩 블록일 수 있거나 이들을 포함할 수 있다. 대응하게도, 코딩 블록(CB)은 코딩 블록들로의 CTB의 분할이 파티셔닝이 되도록, M 및 N의 일부 값들에 대한 샘플들의 NxN 블록일 수 있다.
실시예들에서, 예컨대, HEVC에 따르면, 코딩 트리 유닛(CTU)은 코딩 트리로서 나타내어진 쿼드-트리 구조를 이용함으로써 CU들로 분할될 수 있다. 인터-픽처(시간적) 또는 인트라-픽처(공간적) 예측을 이용하여 픽처 영역을 코딩할 것인지 여부의 판정은 CU 레벨에서 행해진다. 각각의 CU는 PU 분할 유형에 따라 1 개, 2 개, 또는 4 개의 PU로 추가로 분할될 수 있다. 하나의 PU 내부에서, 동일한 예측 프로세스가 적용되고, 관련된 정보는 PU에 기초하여 디코더로 송신된다. PU 분할 유형에 기초하여 예측 프로세스를 적용함으로써 잔차 블록을 획득한 후에, CU는 CU에 대한 코딩 트리와 유사한 또 다른 쿼드트리 구조에 따라 변환 유닛(TU)들로 파티셔닝될 수 있다.
실시예들에서, 예컨대, 다용도 비디오 코딩(VVC)으로서 지칭되는 현재 개발 중인 가장 최근의 비디오 코딩 표준에 따르면, 조합된 쿼드-트리 및 2진 트리(Quad-tree and binary tree)(QTBT) 파티셔닝은 예를 들어, 코딩 블록을 파티셔닝하기 위하여 이용된다. QTBT 블록 구조에서, CU는 정사각형 또는 직사각형 형상의 어느 하나를 가질 수 있다. 예를 들어, 코딩 트리 유닛(CTU)은 먼저, 쿼드트리 구조에 의해 파티셔닝된다. 쿼드트리 리프 노드들은 2진 트리 또는 3진(또는 3중) 트리 구조에 의해 추가로 파티셔닝된다. 파티셔닝 트리 리프 노드들은 코딩 유닛(CU)들로 칭해지고, 그 세그먼트화는 임의의 추가의 파티셔닝 없이 예측 및 변환 프로세싱을 위하여 이용된다. 이것은 CU, PU, 및 TU가 QTBT 코딩 블록 구조에서 동일한 블록 크기를 가진다는 것을 의미한다. 이와 병행하여, 다중 파티션, 예를 들어, 3중 트리 파티션은 QTBT 블록 구조와 함께 이용될 수 있다.
하나의 예에서, 비디오 인코더(20)의 모드 선택 유닛(260)은 본 명세서에서 설명된 파티셔닝 기법들의 임의의 조합을 수행하도록 구성될 수 있다.
위에서 설명된 바와 같이, 비디오 인코더(20)는 (예컨대, 미리 결정된) 예측 모드들의 세트로부터 최상 또는 최적의 예측 모드를 결정하거나 선택하도록 구성된다. 예측 모드들의 세트는 예컨대, 인트라-예측 모드들 및/또는 인터-예측 모드들을 포함할 수 있다.
인트라-예측
인트라-예측 모드들의 세트는 예컨대, HEVC에서 정의된 바와 같은, 35 개의 상이한 인트라-예측 모드, DC(또는 평균) 모드 및 평면 모드와 같은 비-방향 모드들, 또는 방향 모드들을 포함할 수 있거나, 예컨대, VVC에 대하여 정의된 바와 같은, 67 개의 상이한 인트라-예측 모드들, 예컨대, DC(또는 평균) 모드 및 평면 모드와 같은 비-방향 모드들, 또는 방향 모드들을 포함할 수 있다.
인트라-예측 유닛(254)은 인트라-예측 모드들의 세트의 인트라-예측 모드에 따라 인트라-예측 블록(265)을 생성하기 위하여 동일한 현재의 픽처의 이웃하는 블록들의 재구성된 샘플들을 이용하도록 구성된다.
인트라 예측 유닛(254)(또는 일반적으로, 모드 선택 유닛(260))은 인트라-예측 파라미터들(또는 일반적으로, 현재의 블록에 대한 선택된 인트라 예측 모드를 표시하는 정보)을, 인코딩된 픽처 데이터(21)로의 포함을 위한 신택스 엘리먼트들(266)의 형태로 엔트로피 인코딩 유닛(270)으로 출력하도록 추가로 구성되어, 예컨대, 비디오 디코더(30)는 디코딩을 위한 예측 파라미터들을 수신할 수 있고 이들을 이용할 수 있다.
인터-예측
(또는 가능한) 인터-예측 모드들의 세트는 이용가능한 참조 픽처들(즉, 예컨대, DBP(230) 내에 저장된 이전의 적어도 부분적으로 디코딩된 픽처들) 및 다른 인터-예측 파라미터들, 예컨대, 전체 참조 픽처 또는 참조 픽처의 오직 부분, 예컨대, 현재의 블록의 영역 주위의 검색 윈도우 영역이 최상의 정합 참조 블록을 검색하기 위하여 이용되는지 여부, 및/또는 예컨대, 픽셀 보간(pixel interpolatioin), 예컨대, 절반/반-펠 및/또는 쿼터-펠 보간이 적용되는지 또는 그렇지 않은지 여부에 종속된다.
위의 예측 모드들에 추가적으로, 스킵 모드 및/또는 직접 모드가 적용될 수 있다.
인터 예측 유닛(244)은 모션 추정(motion estimation)(ME) 유닛 및 모션 보상(motion compensation)(MC) 유닛(둘 모두는 도 2에서 도시되지 않음)을 포함할 수 있다. 모션 추정 유닛은 모션 추정을 위하여, 픽처 블록(203)(현재의 픽처(17)의 현재의 픽처 블록(203)) 및 디코딩된 픽처(231), 또는 적어도 하나 또는 복수의 이전에 재구성된 블록, 예컨대, 하나 또는 복수의 다른/상이한 이전에 디코딩된 픽처(231)의 재구성된 블록들을 수신하거나 획득하도록 구성될 수 있다. 예컨대, 비디오 시퀀스는 현재의 픽처 및 이전에 디코딩된 픽처들(231)을 포함할 수 있거나, 다시 말해서, 현재의 픽처 및 이전에 디코딩된 픽처들(231)은 비디오 시퀀스를 형성하는 픽처들의 시퀀스의 일부일 수 있거나, 비디오 시퀀스를 형성하는 픽처들의 시퀀스를 형성할 수 있다.
인코더(20)는 예컨대, 복수의 다른 픽처의 동일한 또는 상이한 픽처들의 복수의 참조 블록으로부터 참조 블록을 선택하고, 참조 픽처(또는 참조 픽처 인덱스), 및/또는 참조 블록의 포지션(x, y 좌표들)과 현재의 블록의 포지션 사이의 오프셋(공간적 오프셋)을 모션 추정 유닛에 대한 인터 예측 파라미터들로서 제공하도록 구성될 수 있다. 이 오프셋은 또한, 모션 벡터(motion vector)(MV)로서 칭해진다.
모션 보상 유닛은 인터 예측 파라미터를 획득하고, 예컨대, 수신하고, 인터 예측 블록(265)을 획득하기 위하여, 인터 예측 파라미터에 기초하여 또는 이를 이용하여 인터 예측을 수행하도록 구성된다. 모션 보상 유닛에 의해 수행된 모션 보상은 모션 추정에 의해 결정된 모션/블록 벡터에 기초하여 예측 블록을 페치(fetch)하거나 생성하여, 서브-픽셀 정밀도(sub-pixel precision)로의 보간들을 아마도 수행하는 것을 수반할 수 있다. 보간 필터링은 알려진 픽셀 샘플들로부터 추가적인 픽셀 샘플들을 생성할 수 있고, 이에 따라, 픽처 블록을 코딩하기 위하여 이용될 수 있는 후보 예측 블록들의 수를 잠재적으로 증가시킬 수 있다. 현재의 픽처 블록의 PU에 대한 모션 벡터를 수신할 시에, 모션 보상 유닛은 모션 벡터가 참조 픽처 리스트들 중의 하나에서 지시하는 예측 블록을 위치시킬 수 있다.
모드 선택 유닛은 또한, 비디오 슬라이스의 픽처 블록들을 디코딩할 시에, 비디오 디코더(30)에 의한 이용을 위한 현재의 블록들 및 비디오 슬라이스들과 연관된 신택스 엘리먼트들을 생성할 수 있다. 슬라이스들 및 개개의 신택스 엘리먼트들에 추가적으로 또는 이들에 대한 대안으로서, 타일 그룹들 및/또는 타일들 및 개개의 신택스 엘리먼트들이 생성될 수 있거나 이용될 수 있다.
엔트로피 코딩
엔트로피 인코딩 유닛(270)은 예를 들어, 엔트로피 인코딩 알고리즘 또는 방식(예컨대, 가변 길이 코딩(variable length coding)(VLC) 방식, 컨텍스트 적응적 VLC 방식(context adaptive VLC scheme)(CAVLC), 산술 코딩 방식, 2진화, 컨텍스트 적응적 2진 산술 코딩(context adaptive binary arithmetic coding)(CABAC), 신택스-기반 컨텍스트-적응적 2진 산술 코딩(syntax-based context-adaptive binary arithmetic coding)(SBAC), 확률 간격 파티셔닝 엔트로피(probability interval partitioning entropy)(PIPE) 코딩, 또는 또 다른 엔트로피 인코딩 방법론 또는 기법)을 적용하거나, 출력부(272)를 통해, 예컨대, 인코딩된 비트스트림(21)의 형태로 출력될 수 있어서, 예컨대, 비디오 디코더(30)가 디코딩을 위한 파라미터들을 수신할 수 있고 이들을 이용할 수 있도록 하는 인코딩된 픽처 데이터(21)를 획득하기 위하여, 양자화된 계수들(209), 인터 예측 파라미터들, 인트라 예측 파라미터들, 루프 필터 파라미터들, 및/또는 다른 신택스 엘리먼트들에 대해 우회(압축 없음)하도록 구성된다. 인코딩된 비트스트림(21)은 비디오 디코더(30)로 송신될 수 있거나, 비디오 디코더(30)에 의한 더 이후의 송신 또는 취출을 위하여 메모리 내에 저장될 수 있다.
비디오 인코더(20)의 다른 구조적 변동들은 또한, 비디오 스트림을 인코딩하기 위하여 이용될 수 있다. 예를 들어, 비-변환 기반 인코더(non-transform based encoder)(20)는 어떤 블록들 또는 프레임들을 위한 변환 프로세싱 유닛(206) 없이 직접적으로 잔차 신호를 양자화할 수 있다. 또 다른 구현예에서, 인코더(20)는 단일 유닛으로 조합된 양자화 유닛(208) 및 역 양자화 유닛(210)을 가질 수 있다.
디코더 및 디코딩 방법
도 3은 이러한 본 출원의 기법들을 구현하도록 구성되는 비디오 디코더(30)의 예를 도시한다. 비디오 디코더(30)는 디코딩된 픽처(331)를 획득하기 위하여, 예컨대, 인코더(20)에 의해 인코딩되는 인코딩된 픽처 데이터(21)(예컨대, 인코딩된 비트스트림(21))를 수신하도록 구성된다. 인코딩된 픽처 데이터 또는 비트스트림은 인코딩된 픽처 데이터, 예컨대, 인코딩된 비디오 슬라이스(및/또는 타일 그룹들 또는 타일들)의 픽처 블록들 및 연관된 신택스 엘리먼트들을 표현하는 데이터를 디코딩하기 위한 정보를 포함한다.
도 3의 예에서, 디코더(30)는 엔트로피 디코딩 유닛(304), 역 양자화 유닛(310), 역 변환 프로세싱 유닛(312), 재구성 유닛(314)(예컨대, 합산기(314)), 루프 필터(320), 디코딩된 픽처 버퍼(DBP)(330), 모드 적용 유닛(360), 인터 예측 유닛(344), 및 인트라 예측 유닛(354)을 포함한다. 인터 예측 유닛(344)은 모션 보상 유닛일 수 있거나, 모션 보상 유닛을 포함할 수 있다. 일부 예들에서, 비디오 디코더(30)는 도 2로부터의 비디오 인코더(100)에 대하여 설명된 인코딩 패스(encoding pass)와 일반적으로 상반적인 디코딩 패스(decoding pass)를 수행할 수 있다.
인코더(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))을 파싱하고, 예컨대, 양자화된 계수들(309) 및/또는 디코딩된 코딩 파라미터들(도 3에서 도시되지 않음), 예컨대, 인터 예측 파라미터들(예컨대, 참조 픽처 인덱스 및 모션 벡터), 인트라 예측 파라미터(예컨대, 인트라 예측 모드 또는 인덱스), 변환 파라미터들, 양자화 파라미터들, 루프 필터 파라미터들, 및/또는 다른 신택스 엘리먼트들 중의 임의의 것 또는 전부를 획득하기 위하여, 예를 들어, 인코딩된 픽처 데이터(21)에 대한 엔트로피 디코딩을 수행하도록 구성된다. 엔트로피 디코딩 유닛(304)은 인코더(20)의 엔트로피 인코딩 유닛(270)에 관하여 설명된 바와 같은 인코딩 방식들에 대응하는 디코딩 알고리즘들 또는 방식들을 적용하도록 구성될 수 있다. 엔트로피 디코딩 유닛(304)은 인터 예측 파라미터들, 인트라 예측 파라미터, 및/또는 다른 신택스 엘리먼트들을 모드 적용 유닛(360)에, 그리고 다른 파라미터들을 디코더(30)의 다른 유닛들에 제공하도록 추가로 구성될 수 있다. 비디오 디코더(30)는 비디오 슬라이스 레벨 및/또는 비디오 블록 레벨에서 신택스 엘리먼트들을 수신할 수 있다. 슬라이스들 및 개개의 신택스 엘리먼트들에 추가적으로 또는 이들에 대한 대안으로서, 타일 그룹들 및/또는 타일들 및 개개의 신택스 엘리먼트들이 수신될 수 있고 및/또는 이용될 수 있다.
역 양자화
역 양자화 유닛(310)은 (예컨대, 엔트로피 디코딩 유닛(304)에 의한, 예컨대, 파싱 및/또는 디코딩에 의해) 인코딩된 픽처 데이터(21)로부터 양자화 파라미터들(QP)(또는 일반적으로, 역 양자화에 관련된 정보) 및 양자화된 계수들을 수신하고, 변환 계수들(311)로서 또한 지칭될 수 있는 탈양자화된 계수들(311)을 획득하기 위하여, 양자화 파라미터들에 기초하여, 디코딩된 양자화된 계수들(309)에 대한 역 양자화를 적용하도록 구성될 수 있다. 역 양자화 프로세스는 적용되어야 하는 양자화도 및, 마찬가지로, 역 양자화도를 결정하기 위하여, 비디오 슬라이스(또는 타일 또는 타일 그룹)에서의 각각의 비디오 블록에 대하여 비디오 인코더(20)에 의해 결정된 양자화 파라미터의 이용을 포함할 수 있다.
역 변환
역 변환 프로세싱 유닛(312)은 변환 계수들(311)로서 또한 지칭된 탈양자화된 계수들(311)을 수신하고, 샘플 도메인에서 재구성된 잔차 블록들(213)을 획득하기 위하여 변환을 탈양자화된 계수들(311)에 적용하도록 구성될 수 있다. 재구성된 잔차 블록들(213)은 또한, 변환 블록들(213)로서 지칭될 수 있다. 변환은 역 변환, 예컨대, 역 DCT, 역 DST, 역 정수 변환, 또는 개념적으로 유사한 역 변환 프로세스일 수 있다. 역 변환 프로세싱 유닛(312)은 탈양자화된 계수들(311)에 적용되어야 할 변환을 결정하기 위하여 (예컨대, 엔트로피 디코딩 유닛(304)에 의한, 예컨대, 파싱 및/또는 디코딩에 의해) 인코딩된 픽처 데이터(21)로부터 변환 파라미터들 또는 대응하는 정보를 수신하도록 추가로 구성될 수 있다.
재구성
재구성 유닛(314)(예컨대, 가산기 또는 합산기(314))은 예컨대, 재구성된 잔차 블록(313)의 샘플 값들 및 예측 블록(365)의 샘플 값들을 가산함으로써 샘플 도메인에서 재구성된 블록(315)을 획득하기 위하여, 재구성된 잔차 블록(313)을 예측 블록(365)에 가산하도록 구성될 수 있다.
필터링
(코딩 루프 내 또는 코딩 루프 이후 중의 어느 하나에서의) 루프 필터 유닛(320)은 필터링된 블록(321)을 획득하거나, 예컨대, 픽셀 전이들을 평활화하거나, 또는 이와 다르게 비디오 품질을 개선시키기 위하여, 재구성된 블록(315)을 필터링하도록 구성된다. 루프 필터 유닛(320)은 디-블록킹 필터, 샘플-적응적 오프셋(SAO) 필터 또는 하나 이상의 다른 필터들, 예컨대, 양방향 필터, 적응적 루프 필터(ALF), 선예화 평활 필터들 또는 협력적 필터들, 또는 그 임의의 조합과 같은 하나 이상의 루프 필터들을 포함할 수 있다. 루프 필터 유닛(320)은 인 루프 필터인 것으로서 도 3에서 도시되지만, 다른 구성들에서, 루프 필터 유닛(320)은 포스트 루프 필터로서 구현될 수 있다.
디코딩된 픽처 버퍼
픽처의 디코딩된 비디오 블록들(321)은 그 다음으로, 다른 픽처들에 대한 후속 모션 보상을 위한 및/또는 디스플레이를 각각 출력하기 위한 참조 픽처들로서, 디코딩된 픽처들(331)을 저장하는 디코딩된 픽처 버퍼(330) 내에 저장된다.
디코더(30)는 사용자에 대한 제시 또는 관측을 위하여, 디코딩된 픽처(311)를 예컨대, 출력부(312)를 통해 출력하도록 구성된다.
예측
인터 예측 유닛(344)은 인터 예측 유닛(244)(특히, 모션 보상 유닛)과 동일할 수 있고, 인트라 예측 유닛(354)은 기능에 있어서 인터 예측 유닛(254)과 동일할 수 있고, (예컨대, 엔트로피 디코딩 유닛(304)에 의한, 예컨대, 파싱 및/또는 디코딩에 의해) 인코딩된 픽처 데이터(21)로부터 수신된 파티셔닝 및/또는 예측 파라미터들 또는 개개의 정보에 기초하여 분할 또는 파티셔닝 판정들 및 예측을 수행한다. 모드 적용 유닛(360)은 예측 블록(365)을 획득하기 위하여, (필터링 또는 비필터링된) 재구성된 픽처들, 블록들, 또는 개개의 샘플들에 기초하여 블록마다 예측(인트라 또는 인터 예측)을 수행하도록 구성될 수 있다.
비디오 슬라이스가 인트라 코딩된 (I) 슬라이스로서 코딩될 때, 모드 적용 유닛(360)의 인트라 예측 유닛(354)은 시그널링된 인트라 예측 모드 및 현재의 픽처의 이전에 디코딩된 블록들로부터의 데이터에 기초하여, 현재의 비디오 슬라이스의 픽처 블록에 대한 예측 데이터(365)를 생성하도록 구성된다. 비디오 픽처가 인터 코딩된(즉, B 또는 P) 슬라이스로서 코딩될 때, 모드 적용 유닛(360)의 인터 예측 유닛(344)(예컨대, 모션 보상 유닛)은 모션 벡터들, 및 엔트로피 디코딩 유닛(304)으로부터 수신된 다른 신택스 엘리먼트들에 기초하여, 현재의 비디오 슬라이스의 비디오 블록에 대한 예측 블록들(365)을 생성하도록 구성된다. 인터 예측을 위하여, 예측 블록들은 참조 픽처 리스트들 중의 하나 내의 참조 픽처들 중의 하나로부터 생성될 수 있다. 비디오 디코더(30)는 DPB(330) 내에 저장된 참조 픽처들에 기초한 디폴트 구성 기법들을 이용하여, 참조 프레임 리스트들, List 0 및 List 1을 구성할 수 있다. 동일한 또는 유사한 사항은 슬라이스들(예컨대, 비디오 슬라이스들)에 추가적으로 또는 이에 대안적으로 타일 그룹들(예컨대, 비디오 타일 그룹들) 및/또는 타일들(예컨대, 비디오 타일들)을 이용하여 실시예들을 위하여 또는 실시예들에 의해 적용될 수 있고, 예컨대, 비디오는 I, P, 또는 B 타일 그룹들 및/또는 타일들을 이용하여 코딩될 수 있다.
모드 적용 유닛(360)은 모션 벡터들 또는 관련된 정보 및 다른 신택스 엘리먼트들을 파싱함으로써 현재의 비디오 슬라이스의 비디오 블록에 대한 예측 정보를 결정하도록 구성되고, 디코딩되고 있는 현재의 비디오 블록에 대한 예측 블록들을 생성하기 위하여 예측 정보를 이용한다. 예를 들어, 모션 적용 유닛(360)은 비디오 슬라이스의 비디오 블록들을 코딩하기 위해 이용된 예측 모드 (예컨대, 인트라 또는 인터 예측), 인터 예측 슬라이스 유형 (예컨대, B 슬라이스, P 슬라이스, 또는 GPB 슬라이스), 슬라이스에 대한 참조 픽처 리스트들 중의 하나 이상에 대한 구성 정보, 슬라이스의 각각의 인터 인코딩된 비디오 블록에 대한 모션 벡터들, 슬라이스의 각각의 인터 코딩된 비디오 블록에 대한 인터 예측 스테이터스, 및 현재의 비디오 슬라이스에서의 비디오 블록들을 디코딩하기 위한 다른 정보를 결정하기 위하여, 수신된 신택스 엘리먼트들의 일부를 이용한다. 동일한 또는 유사한 사항은 슬라이스들(예컨대, 비디오 슬라이스들)에 추가적으로 또는 이에 대안적으로 타일 그룹들(예컨대, 비디오 타일 그룹들) 및/또는 타일들(예컨대, 비디오 타일들)을 이용하여 실시예들을 위하여 또는 실시예들에 의해 적용될 수 있고, 예컨대, 비디오는 I, P, 또는 B 타일 그룹들 및/또는 타일들을 이용하여 코딩될 수 있다.
도 3에서 도시된 바와 같은 비디오 디코더(30)의 실시예들은 슬라이스들(또한, 비디오 슬라이스들로서 지칭됨)을 이용함으로써 픽처를 파티셔닝하고 및/또는 디코딩하도록 추가로 구성될 수 있고, 여기서, 픽처는 하나 이상의 슬라이스들(전형적으로, 비-중첩함)을 이용하여 파티셔닝될 수 있거나 디코딩될 수 있고, 각각의 슬라이스는 하나 이상의 블록들(예컨대, CTU들)을 포함할 수 있다.
도 3에서 도시된 바와 같은 비디오 디코더(30)의 실시예들은 타일 그룹들(또한, 비디오 타일 그룹들로서 지칭됨) 및/또는 타일들(또한, 비디오 타일들로서 지칭됨)을 이용함으로써 픽처를 파타셔닝하고 및/또는 디코딩하도록 추가로 구성될 수 있고, 여기서, 픽처는 하나 이상의 타일 그룹들(전형적으로, 비-중첩함)을 이용하여 파티서닝될 수 있거나 디코딩될 수 있고, 각각의 타일 그룹은 예컨대, 하나 이상의 블록들(예컨대, CTU들) 또는 하나 이상의 타일들을 포함할 수 있고, 여기서, 각각의 타일은 예컨대, 직사각형 형상일 수 있고, 하나 이상의 블록들(예컨대, CTU들), 예컨대, 완전한 또는 부분적인 블록들을 포함할 수 있다.
비디오 디코더(30)의 다른 변동들은 인코딩된 픽처 데이터(21)를 디코딩하기 위하여 이용될 수 있다. 예를 들어, 디코더(30)는 루프 필터링 유닛(320) 없이 출력 비디오 스트림을 생성할 수 있다. 예를 들어, 비-변환 기반 디코더(30)는 어떤 블록들 또는 프레임들을 위한 역-변환 프로세싱 유닛(312) 없이 직접적으로 잔차 신호를 역-양자화할 수 있다. 또 다른 구현예에서, 비디오 디코더(30)는 단일 유닛으로 조합된 역-양자화 유닛(310) 및 역-변환 프로세싱 유닛(312)을 가질 수 있다.
인코더(20) 및 디코더(30)에서, 현재의 단계의 프로세싱 결과는 추가로 프로세싱될 수 있고, 그 다음으로, 다음 단계로 출력될 수 있다는 것이 이해되어야 한다. 예를 들어, 보간 필터링, 모션 벡터 유도, 또는 루프 필터링 후에, 클립(Clip) 또는 시프트(shift)와 같은 추가의 연산은 보간 필터링, 모션 벡터 유도, 또는 루프 필터링의 프로세싱 결과에 대해 수행될 수 있다.
추가의 연산들은 (아핀 모드(affine mode)의 제어 포인트 모션 벡터들, 아핀(affine), 평면, ATMVP 모드들에서의 서브-블록 모션 벡터들, 시간적 모션 벡터들 등을 포함하지만, 이것으로 제한되지는 않는) 현재의 블록의 유도된 모션 벡터들에 적용될 수 있다는 것이 주목되어야 한다. 예를 들어, 모션 벡터의 값은 그 표현 비트에 따라 미리 정의된 범위로 제약된다. 모션 벡터의 표현 비트가 bitDepth일 경우에, 범위는 -2^(bitDepth-1) ~ 2^(bitDepth-1)-1이고, 여기서, "^"는 지수화(exponentiation)를 의미한다. 예를 들어, bitDepth가 16과 동일하게 설정될 경우에, 범위는 -32768 ~ 32767이고; bitDepth가 18과 동일하게 설정될 경우에, 범위는 -131072~131071이다. 예를 들어, 유도된 모션 벡터(예컨대, 하나의 8x8 블록 내의 4 개의 4x4 서브-블록들의 MV들)의 값은, 4 개의 4x4 서브-블록 MV들의 정수 부분들 사이의 최대 차이가 1 이하의 픽셀과 같은, N 이하의 픽셀들이다. 여기서, bitDepth에 따른 모션 벡터를 제약하기 위한 2 개의 방법을 제공한다.
방법 1: 연산들을 진행시킴으로써 오버플로우(overflow) MSB(most significant bit)(최상위 비트)를 제거함
ux= ( mvx + 2bitDepth ) % 2bitDepth (1)
mvx = ( ux >= 2bitDepth-1 ) ? (ux - 2bitDepth ) : ux (2)
uy= ( mvy + 2bitDepth ) % 2bitDepth (3)
mvy = ( uy >= 2bitDepth-1 ) ? (uy - 2bitDepth ) : uy (4)
여기서, mvx는 이미지 블록 또는 서브-블록의 모션 벡터의 수평 컴포넌트이고, mvy는 이미지 블록 또는 서브-블록의 모션 벡터의 수직 컴포넌트이고, ux 및 uy는 중간 값을 표시한다;
예를 들어, mvx의 값이 -32769일 경우에, 공식 (1) 및 (2)를 적용한 후에, 결과적인 값은 32767이다. 컴퓨터 시스템에서, 10진수들은 2의 보수(complement)로서 저장된다. -32769의 2의 보수는 1,0111,1111,1111,1111(17 비트들)이고, 그 다음으로, MSB는 폐기되어, 결과적인 2의 보수는 0111,1111,1111,1111(10진수는 32767임)이고, 이것은 공식 (1) 및 (2)를 적용함으로써 출력과 동일하다.
ux= ( mvpx + mvdx + 2bitDepth ) % 2bitDepth (5)
mvx = ( ux >= 2bitDepth-1 ) ? (ux - 2bitDepth ) : ux (6)
uy= ( mvpy + mvdy + 2bitDepth ) % 2bitDepth (7)
mvy = ( uy >= 2bitDepth-1 ) ? (uy - 2bitDepth ) : uy (8)
연산들은 공식 (5) 내지 (8)에서 도시된 바와 같이, mvp 및 mvd의 합산 동안에 적용될 수 있다.
방법 2: 값을 클립핑(clipping)함으로써 오버플로우 MSB를 제거함
vx = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vx)
vy = Clip3(-2bitDepth-1, 2bitDepth-1 -1, vy)
여기서, vx는 이미지 블록 또는 서브-블록의 모션 벡터의 수평 컴포넌트이고, vy는 이미지 블록 또는 서브-블록의 모션 벡터의 수직 컴포넌트이고; x, y, 및 z는 MV 클립핑 프로세스의 3 개의 입력 값에 각각 대응하고, 함수 Clip3의 정의는 다음과 같다:
Figure pct00007
도 4는 개시내용의 실시예에 따른 비디오 코딩 디바이스(400)의 개략도이다. 비디오 코딩 디바이스(400)는 본 명세서에서 설명된 바와 같은 개시된 실시예들을 구현하기 위하여 적당하다. 실시예에서, 비디오 코딩 디바이스(400)는 도 1a의 비디오 디코더(30)와 같은 디코더, 또는 도 1a의 비디오 인코더(20)와 같은 인코더일 수 있다.
비디오 코딩 디바이스(400)는 데이터를 수신하기 위한 유입 포트들(410)(또는 입력 포트들(410)) 및 수신기 유닛들(Rx)(420); 데이터를 프로세싱하기 위한 프로세서, 로직 유닛, 또는 중앙 프로세싱 유닛(central processing unit)(CPU)(430); 데이터를 송신하기 위한 송신기 유닛들(Tx)(440) 및 유출 포트들(450)(또는 출력 포트들(450)); 및 데이터를 저장하기 위한 메모리(460)를 포함한다. 비디오 코딩 디바이스(400)는 또한, 광학 또는 전기 신호들의 유출 또는 유입을 위하여 유입 포트들(410), 수신기 유닛들(420), 송신기 유닛들(440), 및 유출 포트들(450)에 결합된 광학-대-전기(OE) 컴포넌트들 및 전기-대-광학(EO) 컴포넌트들을 포함할 수 있다.
프로세서(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), 랜덤 액세스 메모리(RAM), 3진 컨텐츠-어드레싱가능한 메모리(ternary content-addressable memory)(TCAM), 및/또는 정적 랜덤-액세스 메모리(static random-access memory)(SRAM)일 수 있다.
도 5는 예시적인 실시예에 따른 도 1로부터의 출발지 디바이스(12) 및 목적지 디바이스(14)의 어느 하나 또는 둘 모두로서 이용될 수 있는 장치(500)의 단순화된 블록도이다.
장치(500)에서의 프로세서(502)는 중앙 프로세싱 유닛일 수 있다. 대안적으로, 프로세서(502)는 지금-현존하거나 이후에 개발된, 정보를 조작할 수 있거나 프로세싱할 수 있는 임의의 다른 유형의 디바이스 또는 다수의 디바이스일 수 있다. 개시된 구현예들은 도시된 바와 같은 단일 프로세서, 예컨대, 프로세서(502)로 실시될 수 있지만, 속력 및 효율에서의 장점들은 하나 초과의 프로세서를 이용하여 달성될 수 있다.
장치(500)에서의 메모리(504)는 구현예에서 판독 전용 메모리(read only memory)(ROM) 디바이스 또는 랜덤 액세스 메모리(random access memory)(RAM) 디바이스일 수 있다. 임의의 다른 적당한 유형의 저장 디바이스가 메모리(504)로서 이용될 수 있다. 메모리(504)는 버스(512)를 이용하여 프로세서(502)에 의해 액세스되는 코드 및 데이터(506)를 포함할 수 있다. 메모리(504)는 오퍼레이팅 시스템(operating system)(508) 및 애플리케이션 프로그램들(510)을 더 포함할 수 있고, 애플리케이션 프로그램들(510)은 프로세서(502)가 여기에서 설명된 방법들을 수행하는 것을 허용하는 적어도 하나의 프로그램을 포함한다. 예를 들어, 애플리케이션 프로그램들(510)은, 여기에서 설명된 방법들을 수행하는 비디오 코딩 애플리케이션을 더 포함하는 애플리케이션들 1 내지 N을 포함할 수 있다.
장치(500)는 또한, 디스플레이(518)와 같은 하나 이상의 출력 디바이스들을 포함할 수 있다. 디스플레이(518)는 하나의 예에서, 디스플레이를, 터치 입력들을 감지하도록 동작가능한 터치 감지 엘리먼트와 조합하는 터치 감지 디스플레이일 수 있다. 디스플레이(518)는 버스(512)를 통해 프로세서(502)에 결합될 수 있다.
단일 버스로서 여기에서 도시되지만, 장치(500)의 버스(512)는 다수의 버스로 구성될 수 있다. 또한, 보조 스토리지(514)는 장치(500)의 다른 컴포넌트들에 직접적으로 결합될 수 있거나 네트워크를 통해 액세스될 수 있고, 메모리 카드와 같은 단일 통합된 유닛, 또는 다수의 메모리 카드와 같은 다수의 유닛을 포함할 수 있다. 장치(500)는 이에 따라, 널리 다양한 구성들로 구현될 수 있다.
크로마 샘플들의 인트라-예측은 재구성된 루마 블록의 샘플들을 이용하여 수행될 수 있다.
HEVC 개발 동안에, 교차-컴포넌트 선형 모델(CCLM) 크로마 인트라 예측이 제안되었다[J. Kim, S.-W. Park, J.-Y. Park, and B.-M. Jeon, Intra Chroma Prediction Using Inter Channel Correlation, document JCTVC-B021, Jul. 2010]. CCLM은 코딩 블록에서의 대응하는 포지션에서의 크로마 샘플과 루마 샘플 사이의 선형 상관성(linear correlation)을 이용한다. 크로마 블록이 CCLM을 이용하여 코딩될 때, 선형 모델은 선형 회귀(linear regression)에 의해 재구성된 이웃하는 루마 및 크로마 샘플들로부터 유도된다. 현재의 블록에서의 크로마 샘플들은 그 다음으로, (도 6에서 도시된 바와 같은) 유도된 선형 모델로 현재의 블록에서의 재구성된 루마 샘플들에 의해 예측될 수 있다:
Figure pct00008
,
여기서, C 및 L은 각각 크로마 및 루마 값들을 표시한다. 파라미터들
Figure pct00009
Figure pct00010
는 다음과 같이 최소-제곱 방법(least-squares method)에 의해 유도된다:
Figure pct00011
Figure pct00012
,
여기서, M(A)는 A의 평균을 표현하고, R(A,B)은 다음과 같이 정의된다:
Figure pct00013
.
인코딩된 또는 디코딩된 픽처가 루마 및 크로마 컴포넌트들에 대한 샘플들의 상이한 수를 특정하는 포맷(예컨대, 4:2:0 YCbCr 포맷)을 가질 경우에, 루마 샘플들은 모델링 및 예측 전에 다운-샘플링된다.
방법은 VTM2.0에서의 사용을 위하여 채택되었다. 구체적으로, 파라미터 유도는 다음과 같이 수행된다:
Figure pct00014
여기서, L(n)은 다운-샘플링된 상부 및 좌측 이웃하는 재구성된 루마 샘플들을 표현하고, C(n)은 상부 및 좌측 이웃하는 재구성된 크로마 샘플들을 표현한다.
[G. Laroche, J. Taquet, C. Gisquet, P. Onno (Canon), "CE3: Cross-component linear model simplification (Test 5.1)", Input document to 12th JVET Meeting in Macao, China, Oct. 2018]에서,
Figure pct00015
Figure pct00016
를 유도하는 상이한 방법이 제안되었다(도 7 참조). 특히, 선형 모델 파라미터들
Figure pct00017
Figure pct00018
는 다음의 수학식들에 따라 획득된다:
Figure pct00019
Figure pct00020
, 여기서,
여기서, B = argmax(L(n)) 및 A = argmin(L(n))는 루마 샘플들에서의 최대 및 최소 값들의 포지션들이다.
도 8은 좌측 및 상부 인과적 샘플들 및 YCbCr 4:4:4 크로마 포맷이 이용 중일 경우에 CCLM 모드에 관여된 현재의 블록의 샘플의 위치를 도시한다.
4:2:0 크로마 포맷에 대하여, 교차-컴포넌트 예측을 수행하기 위하여, 재구성된 루마 블록은 크로마 신호 또는 크로마 샘플들 또는 크로마 블록의 크기와 정합하도록 다운샘플링될 필요가 있다. CCLM 모드에서 이용된 디폴트 다운샘플링 필터는 다음과 같다.
Figure pct00021
이 다운샘플링은 루마 샘플들의 포지션들에 대한 크로마 샘플들의 포지션들에 대한 "유형 0" 위상 관계, 즉, 수평으로 공동위치된 샘플링 및 수직으로 간극 샘플링(interstitial sampling)을 가정한다는 것에 주목한다. 도 9에서 도시된 위의 6-탭 다운샘플링 필터는 단일 모델 CCLM 모드 및 다중 모델 CCLM 모드의 둘 모두를 위한 디폴트 필터로서 이용된다. 6-탭 다운샘플링 필터에 의해 이용된 샘플들의 공간적 포지션들은 도 9에서 제시된다. 샘플들(901, 902, 및 903)은 각각 2, 1, 및 0의 가중치들을 가진다.
루마 샘플들이 블록 경계 상에서 위치되고 인접한 상부 및 좌측 블록들이 이용불가능할 경우에, 다음의 공식들이 이용된다:
Figure pct00022
, y = 0인 행이 CTU의 1번째 행이고, x = 0일 뿐만 아니라, 좌측 및 상부 인접한 블록들이 이용불가능할 경우;
Figure pct00023
, y = 0인 행이 CTU의 1번째 행이고, 상부 인접한 블록이 이용불가능할 경우.
Figure pct00024
, x = 0일 뿐만 아니라, 좌측 및 상부 인접한 블록들이 이용불가능할 경우.
도 10a 및 도 10b는 4:2:0 샘플링 방식의 경우에 크로마 컴포넌트 위치를 예시한다. 물론, 동일사항이 다른 샘플링 방식들에 적용될 수 있다.
4:2:0 샘플링 방식에서의 루마 및 크로마 컴포넌트들의 샘플링을 고려할 때, 루마 및 크로마 컴포넌트 그리드들 사이의 시프트가 있을 수 있다는 것이 알려져 있다. 2×2 픽셀들의 블록에서, 크로마 컴포넌트들은 (도 10a에서 예시된) 루마 컴포넌트와 비교하여 수직으로 픽셀의 절반만큼 실제적으로 시프트된다. 이러한 시프트는 4:4:4로부터 다운-샘플링할 때, 또는 업-샘플링할 때, 보간 필터들에 대한 영향을 가질 수 있다. 도 10b에서는, 인터레이싱된 이미지(interlaced image)의 경우에, 다양한 샘플링 패턴들이 표현된다. 이것은 또한, 패리티(parity), 즉, 픽셀들이 인터레이싱된 이미지의 상부 또는 하부 필드들 상에 있는지 여부가 참작된다는 것을 의미한다.
[P. Hanhart, Y. He, "CE3: Modified CCLM downsampling filter for "type-2" content (Test 2.4)", Input document JVET-M0142 to the 13th JVET Meeting in Marrakech, Morocco, Jan. 2019]에서 제안되고, VVC 사양 초안(버전 4)로 포함된 바와 같이, "유형-2" 컨텐츠에 대한 CCLM에서의 크로마 샘플들과 다운샘플링된 루마 샘플들 사이의 오정렬을 회피하기 위하여, 다음의 다운샘플링 필터들은 선형 모델 결정 및 예측을 위하여 루마에 적용된다:
3-탭:
Figure pct00025
5-탭:
Figure pct00026
라인 버퍼의 수를 증가시키는 것을 회피하기 위하여, 이 수정들은 상부 CTU 경계에서 적용되지 않는다. 다운샘플링 필터 선택은 SPS 플래그 sps_cclm_colocated_chroma_flag에 의해 지배된다. sps_cclm_colocated_chroma_flag의 값이 0 또는 거짓일 때, 다운샘플링 필터는 선형 모델 결정 및 예측을 위하여 루마에 적용되고; sps_cclm_colocated_chroma_flag의 값이 1 또는 참일 때, 다운샘플링 필터는 선형 모델 결정 및 예측을 위하여 루마에 적용되지 않는다.
위에서 설명된 바와 같은 선형 모델 파라미터들을 유도하기 위하여 이용되는 경계 루마 재구성된 샘플들
Figure pct00027
은 필터링된 루마 샘플들
Figure pct00028
로부터 서브샘플링된다.
Figure pct00029
루마 샘플들 필터링 및 서브샘플링의 프로세스는 VVC 사양의 8.3.4.2.8에서 설명된다
8.3.4.2.8. INTRA_LT_CCLM, INTRA_L_CCLM, 및 INTRA_T_CCLM 인트라 예측 모드의 사양
이 프로세스에 대한 입력들은 다음과 같다:
- 인트라 예측 모드 predModeIntra,
- 현재의 픽처의 상부-좌측 샘플에 대한 현재의 변환 블록의 상부-좌측 샘플의 샘플 위치( xTbC, yTbC ),
- 변환 블록 폭을 특정하는 변수 nTbW,
- 변환 블록 높이를 특정하는 변수 nTbH,
- x = -1, y = 0..2 * nTbH - 1 및 x = 0.. 2 * nTbW - 1, y = - 1인 크로마 이웃하는 샘플들 p[ x ][ y ].
이 프로세스의 출력은 예측된 샘플들 predSamples[ x ][ y ]이고, 여기서, x = 0..nTbW - 1, y = 0..nTbH - 1이다.
현재의 루마 위치( xTbY, yTbY )는 다음과 같이 유도된다:
( xTbY, yTbY ) = ( xTbC << 1, yTbC << 1 ) (8-155)
변수들 availL, availT, 및 availTL은 다음과 같이 유도된다:
- 블록을 위한 좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC )로 소환되고, 출력은 availL에 배정된다.
- 블록을 위한 상부 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC, yTbC - 1 )로 소환되고, 출력은 availT에 배정된다.
- 블록을 위한 상부-좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC - 1 )로 소환되고, 출력은 availTL에 배정된다.
- 이용가능한 상부-우측 이웃하는 크로마 샘플들의 수 numTopRight는 다음과 같이 유도된다:
- 변수 numTopRight는 0과 동일하게 설정되고, availTR은 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_T_CCLM과 동일할 때, availTR이 FALSE와 동일하거나 x가 2 * nTbW - 1과 동일할 때까지, 다음은 x = nTbW..2 * nTbW - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC + x, yTbC - 1 )로 소환되고, 출력은 availableTR에 배정된다.
- availableTR이 TRUE와 동일할 때, numTopRight은 1씩 증분된다.
- 이용가능한 좌측-하부 이웃하는 크로마 샘플들의 수 numLeftBelow는 다음과 같이 유도된다:
- 변수 numLeftBelow는 0과 동일하게 설정되고, availLB는 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_L_CCLM과 동일할 때, availLB가 FALSE와 동일하거나 y가 2 * nTbH - 1과 동일할 때까지, 다음이 y = nTbH..2 * nTbH - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC + y )로 소환되고, 출력은 availableLB에 배정된다
- availableLB가 TRUE와 동일할 때, numLeftBelow가 1씩 증분된다.
상부 및 상부-우측 상의 이용가능한 이웃하는 크로마 샘플들의 수 numTopSamp 및 좌측 및 좌측-하부 상의 이용가능한 이웃하는 크로마 샘플들의 수 nLeftSamp는 다음과 같이 유도된다:
- predModeIntra가 INTRA_LT_CCLM과 동일할 경우에, 다음이 적용된다:
numSampT = availT ? nTbW : 0 (8-156)
numSampL = availL ? nTbH : 0 (8-157)
- 이와 다를 경우에, 다음이 적용된다:
numSampT = ( availT && predModeIntra = = INTRA_T_CCLM ) ? ( nTbW + numTopRight ) : 0 (8-158)
numSampL = ( availL && predModeIntra = = INTRA_L_CCLM ) ? ( nTbH + numLeftBelow ) : 0 (8-159)
변수 bCTUboundary는 다음과 같이 유도된다:
bCTUboundary = ( yTbC & ( 1 << ( CtbLog2SizeY - 1 ) - 1 ) = = 0 ) ? TRUE : FALSE. (8-160)
x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
- numSampL 및 numSampT의 둘 모두가 0과 동일할 경우에, 다음이 적용된다:
predSamples[ x ][ y ] = 1 << ( BitDepthC - 1 ) (8-161)
- 이와 다를 경우에, 다음의 순서화된 단계들이 적용된다:
1. x = 0..nTbW * 2 - 1, y= 0..nTbH * 2 - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0..2 * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0..2 * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( pY[ 2 * x ][ 2 * y - 1 ] +
pY[ 2 * x - 1 ][ 2 * y ] + 4 * pY[ 2 * x ][ 2 * y ] + pY[ 2 * x + 1 ][ 2 * y ] + (8-162)
pY[ 2 * x ][ 2 * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( pY[ 0 ][ 2 * y - 1 ] +
pY[ -1 ][ 2 * y ] + 4 * pY[ 0 ][ 2 * y ] + pY[ 1 ][ 2 * y ] + (8-163)
pY[ 0 ][ 2 * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( pY[ 0 ][ 2 * y - 1 ] + 2 * pY[ 0 ][ 2 * y ] + pY[ 0 ][ 2 * y + 1 ] + 2 ) >> 2 (8-164)
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] = ( pY[ 2 * x ][ -1 ] +
pY[ 2 * x - 1 ][ 0 ] + 4 * pY[ 2 * x ][ 0 ] + pY[ 2 * x + 1 ][ 0 ] + (8-165)
pY[ 2 * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] = ( pY[ 2 * x - 1 ][ 0 ] + 2 * pY[ 2 * x ][ 0 ] + pY[ 2 * x + 1 ][ 0 ] + 2 ) >> 2
(8-166)
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( pY[ 0 ][ -1 ] +
pY[ -1 ][ 0 ] + 4 * pY[ 0 ][ 0 ] + pY[ 1 ][ 0 ] + (8-167)
pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( pY[ -1 ][ 0 ] + 2 * pY[ 0 ][ 0 ] + pY[ 1 ][ 0 ] + 2 ) >> 2 (8-168)
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( pY[ 0 ][ -1 ] + 2 * pY[ 0 ][ 0 ] + pY[ 0 ][ 1 ] + 2 ) >> 2 (8-169)
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ] (8-170)
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( pY[ 2 * x - 1 ][ 2 * y ] + pY[ 2 * x - 1 ][ 2 * y + 1 ] +
2* pY[ 2 * x ][ 2 * y ] + 2*pY[ 2 * x ][ 2 * y + 1 ] + (8-171)
pY[ 2 * x + 1 ][ 2 * y ] + pY[ 2 * x + 1 ][ 2 * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( pY[ -1 ][ 2 * y ] + pY[ -1 ][ 2 * y + 1 ] +
2* pY[ 0 ][ 2 * y ] + 2*pY[ 0 ][ 2*y + 1 ] + (8-172)
pY[ 1 ][ 2 * y ] + pY[ 1 ][ 2 * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( pY[ 0 ][ 2 * y ] + pY[ 0 ][ 2 * y + 1 ] + 1 ) >> 1 (8-173)
최신 기술은 크로마 컴포넌트가 서브샘플링되지 않는 경우에 대하여 루마 필터링 프로세스를 특정하지 않는다. 루마 컴포넌트가 크로마 포맷이 4:2:0과 상이한 경우에 대하여 어떻게 프로세싱되어야 하는지는 더 이후에 개시될 것이다.
이 설명은 선형 모델의 파라미터들을 결정하기 위하여 입력 데이터로서 이용되는 루마 샘플들을 프로세싱하는 방법을 개시한다. 방법은 수직 및 수평 방향들로 조건적으로 적용되는 2 개의 필터의 결정을 포함한다.
출원의 실시예들은, 재구성된 루마 샘플들에 적용되어야 하는 필터의 계수들을 결정하기 위하여 검사되는, 크로마 샘플링 인자들을 포함하지만 이것으로 제한되지는 않는 조건들의 세트의 도입을 설명한다.
도 11에서 도시된 바와 같이, 방법은 다음과 같이 설명된다.
현재의 블록(1101)은 코딩되고 있는 픽처의 크로마 포맷에 기초하여 SubWidthC(즉, 이미지 블록의 폭) 및 SubHeightC(즉, 이미지 블록의 높이)의 값들을 결정하거나 획득하거나 얻기 위한 것이다.
현재의 블록(1102)은 값들 SubWidthC 및 SubHeightC을 위하여 이용된 필터 "F"를 정의하거나 결정하기 위한 것이다.
필터들이 표들 2 내지 5에서 도시된 바와 같은 SubWidthC 및 SubHeightC의 대응하는 값들과 어떻게 연관될 수 있는지에 대한 예시적인 실시예들. 공간적 필터 "F"는 계수들의 행렬의 형태로 정의된다. 그 계수들이 적용되는 대응하는 포지션들은 다음과 같이 필터링된 루마 샘플의 포지션(x, y)에 대하여 정의된다:
Figure pct00030
.
출력 필터링된 재구성된 샘플들의 포지션이 블록 경계 상에 있을 때, 이웃하는 포지션들의 일부는 이용가능하지 않은 이웃하는 블록들로 인해, 이용불가능하게 될 수 있다. 이 경우에, 입력 샘플들의 포지션들은 동일한 포지션들을 선택하도록 수정된다. 이 샘플링 수정은 상이한 계수들을 가지는 더 작은 차원들의 등가 필터로서 구현될 수 있다.
구체적으로, 출력 샘플의 포지션이 현재의 블록의 좌측 경계 상에 있고, 루마 블록의 좌측에 인접한 샘플들이 이용가능하지 않을 때, 필터링을 위한 포지션들은 다음과 같이 정의된다:
Figure pct00031
.
출력 샘플의 포지션이 현재의 블록의 상부 경계 상에 있고, 루마 블록의 상부 측부에 인접한 샘플들이 이용가능하지 않을 때, 필터링을 위한 포지션들은 다음과 같이 정의된다:
Figure pct00032
.
출력 샘플의 포지션이 현재의 블록의 우측 경계 상에 있을 때, 필터링을 위한 포지션들은 다음과 같이 정의된다:
Figure pct00033
.
출력 샘플의 포지션이 현재의 블록의 하부 경계 상에 있을 때, 필터링을 위한 포지션들은 다음과 같이 정의된다:
Figure pct00034
Figure pct00035
Figure pct00036
Figure pct00037
Figure pct00038
현재의 블록(1103)은 필터링된 루마 샘플 값들
Figure pct00039
을 획득하기 위하여 재구성된 루마 샘플의 필터링을 수행하기 위한 것이다. 특히, 이것은 선택된 필터 "F"를 재구성된 샘플들
Figure pct00040
에 적용함으로써 수행된다:
Figure pct00041
,
여기서, F는 필터를 표현하고, N은 필터 F의 계수들의 합이다. (x,y)는 재구성된 샘플의 포지션을 표현한다.
추가적인 실시예는 루마 샘플들에 대한 서브샘플링된 크로마 샘플들의 포지션에 따라 필터 유형들(즉, 표들 2 내지 5에서 정의된 필터 연관성들) 사이에서 스위칭하기 위한 것이다. 예로서, 서브샘플링된 크로마 샘플들이 (비트스트림에서의 플래그에 의해 시그널링된 바와 같은) 대응하는 루마 샘플들과 공동-위치되지 않을 때, 표 4가 이용된다. 이와 다를 경우에, 표 2 또는 표 3의 어느 하나가 현재의 블록을 위하여 이용된다.
표 2 또는 표 3 사이의 구분은 현재의 블록에 속하는 루마 샘플들의 수에 기초하여 수행될 수 있다. 예컨대, 64 개의 샘플 이하를 포함하는 블록들에 대하여, 크로마 서브샘플링이 수행되지 않는 경우(표 2)에는, 크로마 필터링이 적용되지 않는다. 이와 다르게, 블록 크기가 64 개의 샘플 초과일 때, 표 3은 필터 "F"를 정의하기 위하여 이용되고 있다. 64의 값은 단지 예이고, 다른 임계 값들이 적용될 수 있다.
또 다른 실시예에서, 필터 F는 표들 6 내지 10에서 도시된 바와 같은 크로마 포맷 및 크로마 유형에 따라 선택된다. 크로마 유형은 크로마 컴포넌트의 변위를 특정하고 도 10a 및 도 10b에서 도시된다. 표들 6 내지 10에서, "YUV 4:2:0" 열에서 특정된 필터는 최신 기술 VVC 초안에서 이용된다. 열들 "YUV 4:2:2" 및 "YUV 4:4:4"는 대응하는 크로마 포맷이 정의될 때, 열 "YUV 4:2:0"에서 정의된 것들을 대체하는 필터들을 정의한다.
Figure pct00042
Figure pct00043
Figure pct00044
Figure pct00045
Figure pct00046
필터
Figure pct00047
는 (즉, 출력 값을 입력 값으로 설정함으로써) 필터 우회 동작을 포함하는 상이한 방식들로 구현될 수 있다. 대안적으로, 그것은 유사한 가산 및 시프트 연산들을 이용하여 구현될 수 있고, 즉:
Figure pct00048
제안된 변경들에 따르면, 방법은 사양 텍스트로서 구현될 수 있다:
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] =
( F[1][0] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[1][0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ - 1 ][ SubHeightC * y ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ 2 ) >> 2
- 이와 다를 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( 2 * F[1][0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
( F[1][0] * pY[ SubWidthC * x ][ - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1][1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ 0 ] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
( F[1][0] * pY[ SubWidthC * x ][ - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1][1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ 0 ] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[1][0] * pY[ 0 ][ - 1 ] +
+ F[0][1] * pY[ - 1 ][ 0 ] +
+ F[1][1] * pY[ 0 ][ 0 ] +
+ F[2][1] * pY[ 1 ][ 0 ] +
+ F[1][2] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0][1] * pY[ - 1 ][ 0 ] +
+ F[1][1] * pY[ 0 ][ 0 ] +
+ F[2][1] * pY[ 1 ][ 0 ] +
+ 2 ) >> 2
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( pY[ 0 ][ -1 ] + 2 * pY[ 0 ][ 0 ] + pY[ 0 ][ 1 ] + 2 ) >> 2 (8-169)
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ] (8-170)
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] =
(F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ SubWidthC * x +1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
(F[0][1] * pY[ - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[1][2] * pY[ 0 ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[1][2] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1
위의 설명에서 언급된 필터 F[i][j]는 출원의 실시예들에 따라 특정된다.
또 다른 예시적인 실시예는 다음과 같이 VVC 사양 초안의 부분의 형태로 설명될 수 있다:
8.4.4.2.8 INTRA_LT_CCLM, INTRA_L_CCLM, 및 INTRA_T_CCLM 인트라 예측 모드의 사양
이 프로세스에 대한 입력들은 다음과 같다:
- 인트라 예측 모드 predModeIntra,
- 현재의 픽처의 상부-좌측 샘플에 대한 현재의 변환 블록의 상부-좌측 샘플의 샘플 위치( xTbC, yTbC ),
- 변환 블록 폭을 특정하는 변수 nTbW,
- 변환 블록 높이를 특정하는 변수 nTbH,
- x = -1, y = 0..2 * nTbH - 1 및 x = 0.. 2 * nTbW - 1, y = - 1인 크로마 이웃하는 샘플들 p[ x ][ y ].
이 프로세스의 출력은 예측된 샘플들 predSamples[ x ][ y ]이고, 여기서, x = 0..nTbW - 1, y = 0..nTbH - 1이다.
현재의 루마 위치( xTbY, yTbY )는 다음과 같이 유도된다:
( xTbY, yTbY ) = ( xTbC << (SubWidthC - 1), yTbC << (SubHeightC - 1) )(8-156)
변수들 availL, availT, 및 availTL은 다음과 같이 유도된다:
- 블록을 위한 좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC )로 소환되고, 출력은 availL에 배정된다.
- 블록을 위한 상부 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC, yTbC - 1 )로 소환되고, 출력은 availT에 배정된다.
- 블록을 위한 상부-좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC - 1 )로 소환되고, 출력은 availTL에 배정된다.
- 이용가능한 상부-우측 이웃하는 크로마 샘플들의 수 numTopRight는 다음과 같이 유도된다:
- 변수 numTopRight는 0과 동일하게 설정되고, availTR은 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_T_CCLM과 동일할 때, availTR이 FALSE와 동일하거나 x가 2 * nTbW - 1과 동일할 때까지, 다음은 x = nTbW..2 * nTbW - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC + x, yTbC - 1 )로 소환되고, 출력은 availableTR에 배정된다.
- availableTR이 TRUE와 동일할 때, numTopRight은 1씩 증분된다.
- 이용가능한 좌측-하부 이웃하는 크로마 샘플들의 수 numLeftBelow는 다음과 같이 유도된다:
- 변수 numLeftBelow는 0과 동일하게 설정되고, availLB는 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_L_CCLM과 동일할 때, availLB가 FALSE와 동일하거나 y가 2 * nTbH - 1과 동일할 때까지, 다음이 y = nTbH..2 * nTbH - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC + y )로 소환되고, 출력은 availableLB에 배정된다
- availableLB가 TRUE와 동일할 때, numLeftBelow가 1씩 증분된다.
상부 및 상부-우측 상의 이용가능한 이웃하는 크로마 샘플들의 수 numTopSamp 및 좌측 및 좌측-하부 상의 이용가능한 이웃하는 크로마 샘플들의 수 nLeftSamp는 다음과 같이 유도된다:
- predModeIntra가 INTRA_LT_CCLM과 동일할 경우에, 다음이 적용된다:
numSampT = availT ? nTbW : 0
numSampL = availL ? nTbH : 0
- 이와 다를 경우에, 다음이 적용된다:
numSampT = ( availT && predModeIntra = = INTRA_T_CCLM ) ? ( nTbW + numTopRight ) : 0
numSampL = ( availL && predModeIntra = = INTRA_L_CCLM ) ? ( nTbH + numLeftBelow ) : 0
변수 bCTUboundary는 다음과 같이 유도된다:
bCTUboundary = ( yTbC & ( 1 << ( CtbLog2SizeY - 1 ) - 1 ) = = 0 ) ? TRUE : FALSE.
x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
- numSampL 및 numSampT의 둘 모두가 0과 동일할 경우에, 다음이 적용된다:
predSamples[ x ][ y ] = 1 << ( BitDepthC - 1 )
- 이와 다를 경우에, 다음의 순서화된 단계들이 적용된다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0.. SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0.. SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- x=1..nTbW-1, y=1..nTbH - 1인 pDsY[x][y]는 다음과 같이 유도된다:
pDstY[x][y] = pY[x][y] // 오직 다음을 설명하기 위한 것임: YUV 4:4:4에 대하여 필터 없음//
이와 다를 경우에, 다음은 필터들의 세트 {F3, F5, F6}에 대하여 적용됨. // 여기서, 계수들을 정의함//
F3[0] = 1, F3[1] = 2, F3[2] = 1
- SubWidthC==2 및 SubHeightC==2일 경우
F5[0][1] = 1, F5[1][1] = 4, F3[2][1] = 1, F5[1][0] = 1, F5[1][2] = 1
F6[0][1] = 1, F6[1][1] = 2, F6[2][1] = 1,
F6[0][2] = 1, F6[1][2] = 2, F6[2][2] = 1,
F2[0] = 1, F2[1] = 1
- 이와 다를 경우
F5[0][1] = 0, F5[1][1] = 8, F3[2][1] = 0, F5[1][0] = 0, F5[1][2] = 0
F6[0][1] = 2, F6[1][1] = 4, F6[2][1] = 2,
F6[0][2] = 0, F6[1][2] = 0, F6[2][2] = 0,
F2[0] = 2, F2[1] = 0
- // 본 출원의 실시예들의 굵은 부분을 참조 //
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
( F[1][0] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
//오직 여기에서 다음을 설명하기 위한 것임: 결정된 필터 및 "F" 필터의 모든 다른 출현들을 적용함 //
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[1][0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[- 1][ SubHeightC * y ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 ] [ SubHeightC * y ] +
+ F[1][2] * pY[0][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2] * pY[ 0 ][ SubHeightC * y + 1 ] +
+ 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
( F[1][0] * pY[ SubWidthC * x ][ - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1][1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ 0 ] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[1][0] * pY[ 0 ][ - 1 ] +
+ F[0][1] * pY[ - 1 ][ 0 ] +
+ F[1][1] * pY[ 0 ][ 0 ] +
+ F[2][1] * pY[ 1 ][ 0 ] +
+ F[1][2] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ - 1 ][ 0 ] +
+ F[1] * pY[ 0 ][ 0 ] +
+ F[2] * pY[ 1 ][ 0 ] +
+ 2 ) >> 2
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ 0 ] ++ F[2] * pY[ 0 ][ 1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ]
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
(F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ SubWidthC * x +1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
(F[0][1] * pY[ - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[1][2] * pY[ 0 ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F2로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y ] +
+ F[1] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1
4. numSampL이 0 초과일 때, y = 0..numSampL - 1인 다운-샘플링된 이웃하는 좌측 루마 샘플들 pLeftDsY[ y ]은 다음과 같이 유도된다:
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- y=0..nTbH - 1인 pLeftDsY[y]는 다음과 같이 유도된다: pLeftDsY[y] = pY[-1][y]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- y = 1..nTbH - 1인 pLeftDsY[ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pLeftDsY[ y ] =
= F[1][0] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availTL이 TRUE와 동일할 경우에, pLeftDsY[ 0 ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pLeftDsY[ 0 ] =
= F[1][0] * pY[ - SubWidthC ][ - 1 ] +
+ F[0][1] * pY[ -1 - SubWidthC ][ 0 ] +
+ F[1][1] * pY[ - SubWidthC ][ 0 ] +
+ F[2][1] * pY[ 1 - SubWidthC ][ 0 ] +
+ F[1][2] * pY[ - SubWidthC ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pLeftDsY [ 0 ] =
( F[0] * pY[ -1 - SubWidthC ][ 0 ] +
+ F[1] * pY[ - SubWidthC ][ 0 ] +
+ F[2] * pY[ 1 - SubWidthC ][ 0 ] +
+ 2 ) >> 2
- 이와 다를 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pLeftDsY[ y ] =
= (F[0][1] * pY[ -1- SubWidthC ][ SubHeightC * y ] +
+ F[0][2] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, x = 0..numSampT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pTopDsY[ x ]은 다음과 같이 특정된다:
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- x=0..numSampT-1에 대하여, pTopDsY[x] = pY[x][-1]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..numSampT - 1인 pTopDsY[ x ]는 다음과 같이 유도된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pTopDsY[ x ] =
= ( F[1][0] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ - SubHeightC ] +
+ F[1][1] * pY[ SubWidthC * x ][ - SubHeightC] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ - SubHeightC] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pTopDsY[ x ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[1] * pY[ SubWidthC * x ][ -1 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ -1 ] +
+ 2 ) >> 2
- pTopDsY[ 0 ]는 다음과 같이 유도된다:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] =
= F[1][0] * pY[ - 1 ] [ - 1- SubHeightC ] +
+ F[0][1] * pY[ - 1 ] [ - SubHeightC ] +
+ F[1][1] * pY[ 0 ] [ - SubHeightC ] +
+ F[2][1] * pY[ 1 ] [ - SubHeightC ] + +
+ F[1][2] pY[ - 1 ] [ 1 - SubHeightC ] + + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] =
= ( F[0] * pY[ -1 ][ -1 ] +
+ F[1] * pY[ 0 ][ -1 ] +
+ F[2] * pY[ 1 ][ -1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] =
= ( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ -2 ] +
+ F[2] * pY[ 0 ][ -1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pTopDsY[ 0 ] = pY[ 0 ][ -1 ]
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..numSampT - 1인 pTopDsY[ x ]는 다음과 같이 유도된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pTopDsY[ x ] =
= (F[0][1] * pY[ SubWidthC * x - 1 ][ -2 ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ -2 ] +
+ F[1][2] * pY[ SubWidthC * x ][ -1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ -2 ] +
+ F[2][2] * pY[ SubWidthC * x + 1 ][ -1 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pTopDsY[ x ] =
= ( F[0] * pY [ SubWidthC * y - 1 ] [- 1 ] +
+ F[1] * pY[ SubWidthC * y ] [ - 1 ] +
+ F[2] * pY[ SubWidthC * y + 1] [ - 1 ] +
+ 2 ) >> 2
- pTopDsY[ 0 ]는 다음과 같이 유도된다:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] =
= (F[0][1] * pY[- 1 ][ -2 ] +
+ F[0][2] * pY[ - 1 ][ -1 ] +
+ F[1][1] * pY[ 0 ][ -2 ] +
+ F[1][2] * pY[ 0 ][ -1] +
+ F[2][1] * pY[ 1 ][ -2 ] +
+ F[2][2] * pY[ 1 ][ -1 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] =
= ( F[0] * pY [ - 1 ] [- 1 ] +
+ F[1] * pY[ 0 ] [ - 1 ] +
+ F[2] * pY[ 1] [ - 1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F2로 설정된 F에 대하여 적용된다:
pTopDsY[ 0 ] = ( F[1] * pY[ 0 ][ -2 ] + F[0] * pY[ 0 ][ -1 ] + 1 ) >> 1
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pTopDsY[ 0 ] = pY[ 0 ][ -1 ]
6. 변수들 nS, xS, yS는 다음과 같이 유도된다:
- predModeIntra가 INTRA_LT_CCLM과 동일할 경우에, 다음이 적용된다:
nS = ( ( availL && availT ) ? Min( nTbW, nTbH ) : ( availL ? nTbH : nTbW ) )
xS = 1 << ( ( ( nTbW > nTbH ) && availL && availT ) ? ( Log2( nTbW) - Log2( nTbH ) ) : 0 ) (8-192)
yS = 1 << ( ( ( nTbH > nTbW ) && availL && availT ) ? ( Log2( nTbH) - Log2( nTbW ) ) : 0 ) (8-193)
- 이와 다르게, predModeIntra가 INTRA_L_CCLM과 동일할 경우에, 다음이 적용된다:
nS = numSampL
xS = 1
yS = 1
- 이와 다를 경우에(predModeIntra가 INTRA_T_CCLM과 동일함), 다음이 적용된다:
nS = numSampT
xS = 1
yS = 1
7. 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- 변수 minY는 1 << (BitDepthY) + 1과 동일하게 설정되고, 변수 maxY는 -1과 동일하게 설정된다.
- availT가 TRUE와 동일할 경우에, x = 0..nS - 1인 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- minY가 pTopDsY[ x * xS ] 초과일 경우에, 다음이 적용된다:
minY = pTopDsY[ x * xS ]
minC = p[ x * xS ][ -1 ]
- maxY가 pTopDsY[ x * xS ] 미만일 경우에, 다음이 적용된다:
maxY = pTopDsY[ x * xS ]
maxC = p[ x * xS ][ -1 ]
- availL이 TRUE와 동일할 경우에, y = 0..nS - 1인 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- minY가 pLeftDsY[ y * yS ] 초과일 경우에, 다음이 적용된다:
minY = pLeftDsY[ y * yS ]
minC = p[ -1 ][ y * yS ]
- maxY가 pLeftDsY[ y * yS ] 미만일 경우에, 다음이 적용된다:
maxY = pLeftDsY[ y * yS ]
maxC = p[ -1 ][ y * yS ]
8. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0
a = 0
b = 1 << ( BitDepthC - 1)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC
x = Floor( Log2( diff ) )
normDiff = ( ( diff << 4 ) >> x ) & 15
x += ( normDiff != 0 ) ? 1 : 0
y = Floor( Log2( Abs ( diffC ) ) ) + 1
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a
b = minC - ( ( a * minY ) >> k )
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 }
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0
a = 0
b = minC
9. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1C( ( ( pDsY[ x ][ y ] * a ) >> k ) + b )
또 다른 실시예는 최대 4 개의 이웃하는 크로마 샘플 및 그 대응하는 다운-샘플링된 루마 샘플들로 CCLM 파라미터들을 유도하기 위한 방법을 설명한다.
현재의 크로마 블록 차원들은 W×H인 것으로 추정하고, 그 다음으로, W’ 및 H’은 다음으로서 설정된다
Figure pct00049
LM 모드가 적용될 때, W’=W, H’=H;
Figure pct00050
LM-A 모드가 적용될 때, W’=W+H;
Figure pct00051
LM-L 모드가 적용될 때, H’=H+W;
상부 이웃하는 포지션들은 S[0, -1]...S[W’-1, -1]로서 나타내어지고, 좌측 이웃하는 포지션들은 S[-1, 0]...S[-1, H’-1]로서 나타내어진다. 그 다음으로, 4 개의 샘플은 다음으로서 선택된다
Figure pct00052
LM 모드가 적용되고, 상부 및 좌측 이웃하는 샘플들이 이용가능할 때, S[W’/4, -1], S[3W’/4, -1], S[-1, H’/4], S[-1, 3H’/4];
Figure pct00053
LM-A 모드가 적용되거나, 오직 상부 이웃하는 샘플들이 이용가능할 때, S[W’/8, -1], S[3W’/8, -1], S[5W’/8, -1], S[7W’/8, -1];
Figure pct00054
LM-L 모드가 적용되거나, 오직 좌측 이웃하는 샘플들이 이용가능할 때, S[-1, H’/8], S[-1, 3H’/8], S[-1, 5H’/8], S[-1, 7H’/8];
선택된 포지션들에서의 4 개의 이웃하는 루마 샘플은 다운-샘플링되고, 2 개의 더 작은 값:
Figure pct00055
Figure pct00056
, 및 2 개의 더 큰 값:
Figure pct00057
Figure pct00058
을 구하기 위하여 4 회 비교된다. 그 대응하는 크로마 샘플 값들은
Figure pct00059
, 및
Figure pct00060
으로서 나타내어진다. 그 다음으로,
Figure pct00061
, 및
Figure pct00062
은 다음으로서 유도된다:
Figure pct00063
VVC 사양 초안의 부분의 형태인 설명은 다음과 같다:
8.4.4.2.8 INTRA_LT_CCLM, INTRA_L_CCLM, 및 INTRA_T_CCLM 인트라 예측 모드의 사양
이 프로세스에 대한 입력들은 다음과 같다:
- 인트라 예측 모드 predModeIntra,
- 현재의 픽처의 상부-좌측 샘플에 대한 현재의 변환 블록의 상부-좌측 샘플의 샘플 위치( xTbC, yTbC ),
- 변환 블록 폭을 특정하는 변수 nTbW,
- 변환 블록 높이를 특정하는 변수 nTbH,
- x = -1, y = 0..2 * nTbH - 1 및 x = 0.. 2 * nTbW - 1, y = - 1인 크로마 이웃하는 샘플들 p[ x ][ y ].
이 프로세스의 출력은 예측된 샘플들 predSamples[ x ][ y ]이고, 여기서, x = 0..nTbW - 1, y = 0..nTbH - 1이다.
현재의 루마 위치( xTbY, yTbY )는 다음과 같이 유도된다:
( xTbY, yTbY ) = ( xTbC << (SubWidthC - 1), yTbC << (SubHeightC - 1) )
변수들 availL, availT, 및 availTL은 다음과 같이 유도된다:
- 블록을 위한 좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC )로 소환되고, 출력은 availL에 배정된다.
- 블록을 위한 상부 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC, yTbC - 1 )로 소환되고, 출력은 availT에 배정된다.
- 블록을 위한 상부-좌측 이웃하는 샘플들 유도 프로세스의 이용가능성은 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC - 1 )로 소환되고, 출력은 availTL에 배정된다.
- 이용가능한 상부-우측 이웃하는 크로마 샘플들의 수 numTopRight는 다음과 같이 유도된다:
- 변수 numTopRight는 0과 동일하게 설정되고, availTR은 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_T_CCLM과 동일할 때, availTR이 FALSE와 동일하거나 x가 2 * nTbW - 1과 동일할 때까지, 다음은 x = nTbW..2 * nTbW - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC + x, yTbC - 1 )로 소환되고, 출력은 availableTR에 배정된다.
- availableTR이 TRUE와 동일할 때, numTopRight은 1씩 증분된다.
- 이용가능한 좌측-하부 이웃하는 크로마 샘플들의 수 numLeftBelow는 다음과 같이 유도된다:
- 변수 numLeftBelow는 0과 동일하게 설정되고, availLB는 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_L_CCLM과 동일할 때, availLB가 FALSE와 동일하거나 y가 2 * nTbH - 1과 동일할 때까지, 다음이 y = nTbH..2 * nTbH - 1에 대하여 적용된다:
- 블록을 위한 이용가능성 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ) 및 이웃하는 크로마 위치( xTbC - 1, yTbC + y )로 소환되고, 출력은 availableLB에 배정된다
- availableLB가 TRUE와 동일할 때, numLeftBelow가 1씩 증분된다.
상부 및 상부-우측 상의 이용가능한 이웃하는 크로마 샘플들의 수 numTopSamp 및 좌측 및 좌측-하부 상의 이용가능한 이웃하는 크로마 샘플들의 수 nLeftSamp는 다음과 같이 유도된다:
- predModeIntra가 INTRA_LT_CCLM과 동일할 경우에, 다음이 적용된다:
numSampT = availT ? nTbW : 0
numSampL = availL ? nTbH : 0
- 이와 다를 경우에, 다음이 적용된다:
numSampT = ( availT && predModeIntra = = INTRA_T_CCLM ) ?
( nTbW + Min( numTopRight, nTbH )) : 0
numSampL = ( availL && predModeIntra = = INTRA_L_CCLM ) ?
( nTbH + Min( numLeftBelow, nTbW )) : 0
변수 bCTUboundary는 다음과 같이 유도된다:
bCTUboundary = ( yTbC & ( 1 << ( CtbLog2SizeY - 1 ) - 1 ) = = 0 ) ? TRUE : FALSE.
N이 L 및 T에 의해 대체되는 변수 cntN 및 어레이 pickPosN[]은 다음과 같이 유도된다:
- 변수 numIs4N은 (( availT && availL && predModeIntra == INTRA_LT_CCLM ) ? 0 : 1)과 동일하게 설정된다.
- 변수 startPosN은 numSampN >> ( 2 + numIs4N )과 동일하게 설정된다.
- 변수 pickStepN은 Max( 1, numSampN >> ( 1 + numIs4N ))과 동일하게 설정된다.
- availN이 TRUE와 동일하고 predModeIntra가 INTRA_LT_CCLM 또는 INTRA_N_CCLM과 동일할 경우에, cntN은 Min( numSampN, ( 1 + numIs4N ) << 1 )과 동일하게 설정되고, pickPosN[ pos ]은 (startPosN + pos * pickStepN)과 동일하게 설정되고, 여기서, pos = 0..( cntN - 1 )이다.
- 이와 다를 경우에, cntN은 0과 동일하게 설정된다.
x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
- numSampL 및 numSampT의 둘 모두가 0과 동일할 경우에, 다음이 적용된다:
predSamples[ x ][ y ] = 1 << ( BitDepthC - 1 )
- 이와 다를 경우에, 다음의 순서화된 단계들이 적용된다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0.. SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0.. SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- x=1..nTbW-1, y=1..nTbH - 1인 pDsY[x][y]는 다음과 같이 유도된다:
pDstY[x][y] = pY[x][y]
- 이와 다를 경우에, 다음은 필터들의 세트 {F3, F5, F6}에 대하여 적용된다.
F3[0] = 1, F3[1] = 2, F3[2] = 1
- SubWidthC==2 및 SubHeightC==2일 경우
F5[0][1] = 1, F5[1][1] = 4, F3[2][1] = 1, F5[1][0] = 1, F5[1][2] = 1
F6[0][1] = 1, F6[1][1] = 2, F6[2][1] = 1,
F6[0][2] = 1, F6[1][2] = 2, F6[2][2] = 1,
F2[0] = 1, F2[1] = 1
- 이와 다를 경우
F5[0][1] = 0, F5[1][1] = 8, F3[2][1] = 0, F5[1][0] = 0, F5[1][2] = 0
F6[0][1] = 2, F6[1][1] = 4, F6[2][1] = 2,
F6[0][2] = 0, F6[1][2] = 0, F6[2][2] = 0,
F2[0] = 2, F2[1] = 0
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
( F[1][0] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[1][0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[- 1][ SubHeightC * y ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 ] [ SubHeightC * y ] +
+ F[1][2] * pY[0][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2] * pY[ 0 ][ SubHeightC * y + 1 ] +
+ 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
( F[1][0] * pY[ SubWidthC * x ][ - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1][1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ 0 ] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[1][0] * pY[ 0 ][ - 1 ] +
+ F[0][1] * pY[ - 1 ][ 0 ] +
+ F[1][1] * pY[ 0 ][ 0 ] +
+ F[2][1] * pY[ 1 ][ 0 ] +
+ F[1][2] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ - 1 ][ 0 ] +
+ F[1] * pY[ 0 ][ 0 ] +
+ F[2] * pY[ 1 ][ 0 ] +
+ 2 ) >> 2
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ 0 ] +
+ F[2] * pY[ 0 ][ 1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ]
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
(F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ SubWidthC * x +1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
(F[0][1] * pY[ - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[1][2] * pY[ 0 ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F2로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y ] +
+ F[1] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..(cntL - 1)인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..(cntL-1)인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY [ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- pSelDsY [i] = pY[-1][y]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- y > 0 || availTL == TRUE일 경우에, F5로 설정된 F에 대하여:
pSelDsY [ idx] =
= F[1][0] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, F3로 설정된 F에 대하여:
pSelDsY [ idx ] =
( F[0] * pY[ -1 - SubWidthC ][ 0 ] +
+ F[1] * pY[ - SubWidthC ][ 0 ] +
+ F[2] * pY[ 1 - SubWidthC ][ 0 ] +
+ 2 ) >> 2
- 이와 다를 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[ -1- SubWidthC ][ SubHeightC * y ] +
+ F[0][2] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..( cntL + cntT - 1 )인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = cntL.. cntL+ cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY [ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- pSelDsY [idx] = pY[x][-1]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x > 0일 경우에:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[1][0] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ - SubHeightC ] +
+ F[1][1] * pY[ SubWidthC * x ][ - SubHeightC] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ - SubHeightC] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[1] * pY[ SubWidthC * x ][ -1 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ -1 ] +
+ 2 ) >> 2
- 이와 다를 경우에:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= F[1][0] * pY[ - 1 ] [ - 1- SubHeightC ] +
+ F[0][1] * pY[ - 1 ] [ - SubHeightC ] +
+ F[1][1] * pY[ 0 ] [ - SubHeightC ] +
+ F[2][1] * pY[ 1 ] [ - SubHeightC ] +
+ F[1][2] pY[ - 1 ] [ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ -1 ][ -1 ] +
+ F[1] * pY[ 0 ][ -1 ] + (8-182)
+ F[2] * pY[ 1 ][ -1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ -2 ] +
+ F[2] * pY[ 0 ][ -1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY [ idx ] = pY[ 0 ][ -1 ]
- 이와 다를 경우에, 다음이 적용된다:
- x > 0일 경우에:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[ SubWidthC * x - 1 ][ -2 ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ -2 ] +
+ F[1][2] * pY[ SubWidthC * x ][ -1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ -2 ] +
+ F[2][2] * pY[ SubWidthC * x + 1 ][ -1 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY [ SubWidthC * y - 1 ] [- 1 ] +
+ F[1] * pY[ SubWidthC * y ] [ - 1 ] +
+ F[2] * pY[ SubWidthC * y + 1] [ - 1 ] +
+ 2 ) >> 2
- 이와 다를 경우에:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[- 1 ][ -2 ] +
+ F[0][2] * pY[ - 1 ][ -1 ] +
+ F[1][1] * pY[ 0 ][ -2 ] +
+ F[1][2] * pY[ 0 ][ -1] +
+ F[2][1] * pY[ 1 ][ -2 ] +
+ F[2][2] * pY[ 1 ][ -1 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY [ - 1 ] [- 1 ] +
+ F[1] * pY[ 0 ] [ - 1 ] +
+ F[2] * pY[ 1] [ - 1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F2로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] = ( F[1] * pY[ 0 ][ -2 ] + F[0] * pY[ 0 ][ -1 ] + 1 ) >> 1
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY [ idx ] = pY[ 0 ][ -1 ]
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT+cntL이 2와 동일할 때, pSelComp[3]을 pSelComp[0]과 동일하게, pSelComp[2]를 pSelComp[1]과 동일하게, pSelComp[0]을 pSelComp[1]과 동일하게, 그리고 pSelComp[1]을 pSelComp[3]와 동일하게 설정하고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx[] 및 maxGrpIdx[]는 다음으로서 설정된다: minGrpIdx[0] = 0, minGrpIdx[1] = 2, maxGrpIdx[0] = 1, maxGrpIdx[1] = 3.
- pSelDsY[minGrpIdx[0]] > pSelDsY[minGrpIdx[1]]일 경우에, Swap(minGrpIdx[0], minGrpIdx[1]).
- pSelDsY[maxGrpIdx[0]] > pSelDsY[maxGrpIdx[1]]일 경우에, Swap(maxGrpIdx[0], maxGrpIdx[1]).
- pSelDsY[minGrpIdx[0]] > pSelDsY[maxGrpIdx[1]]일 경우에, Swap(minGrpIdx, maxGrpIdx ).
- pSelDsY[minGrpIdx[1]] > pSelDsY[maxGrpIdx[0]]일 경우에, Swap(minGrpIdx[1], maxGrpIdx[0]).
- maxY = ( pSelDsY[maxGrpIdx[0]] + pSelDsY[maxGrpIdx[1]] + 1 ) >> 1.
- maxC = ( pSelC[maxGrpIdx[0]] + pSelC[maxGrpIdx[1]] + 1 ) >> 1.
- minY = ( pSelDsY[minGrpIdx[0]] + pSelDsY[minGrpIdx[1]] + 1 ) >> 1.
- minC = ( pSelC[minGrpIdx[0]] + pSelC[minGrpIdx[1]] + 1 ) >> 1.
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0
a = 0
b = 1 << ( BitDepthC - 1)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC
x = Floor( Log2( diff ) )
normDiff = ( ( diff << 4 ) >> x ) & 15
x += ( normDiff != 0 ) ? 1 : 0
y = Floor( Log2( Abs ( diffC ) ) ) + 1
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a
b = minC - ( ( a * minY ) >> k )
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 }
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0
a = 0
b = minC
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1C( ( ( pDsY[ x ][ y ] * a ) >> k ) + b )
또 다른 실시예는 블록 경계에 대한 예측된 블록의 포지션에 대하여 루마 참조 샘플들의 페치에 있어서 차이를 가진다. 구체적으로, 크로마 포맷이 YUV 4:2:2로서 특정되고, 크로마 및 루마 컴포넌트들이 공동위치될 때(도 10b에서 "크로마 샘플 유형 2" 및 "크로마 샘플 유형 4"로서 도시됨), 루마 컴포넌트로부터의 샘플링은 루마 블록의 상부 측부에 대한 상이한 오프셋들로 수행될 수 있다(도 12a 및 도 12c 참조).
포지션(1202)에서의 필터링된 루미넌스 참조 샘플을 획득하기 위하여, 계수들 [1 2 1]/4를 갖는 필터는 포지션들(1202)에서의 샘플들을 포함하는 참조 샘플들의 세트에 적용된다. 도 12a는, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계(1201)가 CTU 라인 경계인 실시예를 도시한다. 이 경우에, [1 2 1]/4 필터는 (해시표시된 직사각형들에 의해 도시된) 참조 샘플들(1202)에 적용되어, 계수 2/4는 중심 포지션에서의 계수에 적용된다.
도 12b는, 블록 경계(1201)가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷은 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)으로서 특정되는 실시예를 도시한다. 이 경우에, [1 2 1; 1 2 1] / 8 필터는 (해시표시된 직사각형들에 의해 도시된) 참조 샘플들(1202)에 적용되어, 계수들 "2/4"는 2 개의 중심 포지션에서의 계수들에 적용된다.
도 12c는, 상부-좌측 샘플이 이용가능하지 않고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계(1201)가 CTU 라인 경계인 실시예를 도시한다.
이 경우에, 우회 [1]/1 필터는 (해시표시된 직사각형에 의해 도시된) 참조 샘플(1202)에 적용된다.
도 12d는, 블록 경계(1201)가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷은 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)으로서 특정되는 실시예를 도시한다. 이 경우에, [1 1] / 2 필터는 (해시표시된 직사각형들에 의해 도시된) 참조 샘플들(1202)에 적용된다.
이하에서 주어진 VVC 사양 초안의 부분은 도 12a 내지 도 12d에서 도시된 경우들에 대응한다:
x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
- numSampL 및 numSampT의 둘 모두가 0과 동일할 경우에, 다음이 적용된다:
predSamples[ x ][ y ] = 1 << ( BitDepthC - 1 )
- 이와 다를 경우에, 다음의 순서화된 단계들이 적용된다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0.. SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0.. SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- x=1..nTbW-1, y=1..nTbH - 1인 pDsY[x][y]는 다음과 같이 유도된다:
pDstY[x][y] = pY[x][y]
- 이와 다를 경우에, 다음은 필터들의 세트 {F3, F5, F6}에 대하여 적용된다.
F3[0] = 1, F3[1] = 2, F3[2] = 1
- SubWidthC==2 및 SubHeightC==2일 경우
F5[0][1] = 1, F5[1][1] = 4, F3[2][1] = 1, F5[1][0] = 1, F5[1][2] = 1
F6[0][1] = 1, F6[1][1] = 2, F6[2][1] = 1,
F6[0][2] = 1, F6[1][2] = 2, F6[2][2] = 1,
F2[0] = 1, F2[1] = 1
- 이와 다를 경우
F5[0][1] = 0, F5[1][1] = 8, F3[2][1] = 0, F5[1][0] = 0, F5[1][2] = 0
F6[0][1] = 2, F6[1][1] = 4, F6[2][1] = 2,
F6[0][2] = 0, F6[1][2] = 0, F6[2][2] = 0,
F2[0] = 2, F2[1] = 0
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
( F[1][0] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[1][0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[- 1][ SubHeightC * y ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 ] [ SubHeightC * y ] +
+ F[1][2] * pY[0][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y - 1 ] +
+ F[1] * pY[ 0 ][ SubHeightC * y ] +
+ F[2] * pY[ 0 ][ SubHeightC * y + 1 ] +
+ 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
( F[1][0] * pY[ SubWidthC * x ][ - 1 ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1][1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ 0 ] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ 0 ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ 0 ] +
+ F[1] * pY[ SubWidthC * x ][ 0 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F5로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[1][0] * pY[ 0 ][ - 1 ] +
+ F[0][1] * pY[ - 1 ][ 0 ] +
+ F[1][1] * pY[ 0 ][ 0 ] +
+ F[2][1] * pY[ 1 ][ 0 ] +
+ F[1][2] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ - 1 ][ 0 ] +
+ F[1] * pY[ 0 ][ 0 ] +
+ F[2] * pY[ 1 ][ 0 ] +
+ 2 ) >> 2
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 F3으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] =
( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ 0 ] +
+ F[2] * pY[ 0 ][ 1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ]
- 이와 다를 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ x ][ y ] =
(F[0][1] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ SubWidthC * x ][ SubHeightC * y ] +
+ F[1][2] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ SubWidthC * x +1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F6으로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
(F[0][1] * pY[ - 1 ][ SubHeightC * y ] +
+ F[0][2] * pY[ - 1 ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ 0 ][ SubHeightC * y ] +
+ F[1][2] * pY[ 0 ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 F2로 설정된 F에 대하여 다음과 같이 유도된다:
pDsY[ 0 ][ y ] =
( F[0] * pY[ 0 ][ SubHeightC * y ] +
+ F[1] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..(cntL - 1)인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..(cntL-1)인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY [ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
- pSelDsY [i] = pY[-1][y]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- y > 0 || availTL == TRUE일 경우에, F5로 설정된 F에 대하여:
pSelDsY [ idx] =
= F[1][0] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
+ F[0][1] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에, F3로 설정된 F에 대하여:
pSelDsY [ idx ] =
( F[0] * pY[ -1 - SubWidthC ][ 0 ] +
+ F[1] * pY[ - SubWidthC ][ 0 ] +
+ F[2] * pY[ 1 - SubWidthC ][ 0 ] +
+ 2 ) >> 2
- 이와 다를 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[ -1- SubWidthC ][ SubHeightC * y ] +
+ F[0][2] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
+ F[1][1] * pY[ - SubWidthC ][ SubHeightC * y ] +
+ F[1][2] * pY[ - SubWidthC ][ SubHeightC * y + 1] +
+ F[2][1] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
+ F[2][2] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..( cntL + cntT - 1 )인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = cntL.. cntL+ cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY [ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC==1 및 SubHeightC==1일 경우에, 다음이 적용된다:
pSelDsY [idx] = pY[x][-1]
- 이와 다를 경우에, 다음이 적용된다:
- sps_cclm_colocated_chroma_flag가 1과 동일할 경우에, 다음이 적용된다:
- x > 0일 경우에:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[1][0] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
+ F[0][1] * pY[ SubWidthC * x - 1 ][ - SubHeightC ] +
+ F[1][1] * pY[ SubWidthC * x ][ - SubHeightC] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ - SubHeightC] +
+ F[1][2] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[1] * pY[ SubWidthC * x ][ -1 ] +
+ F[2] * pY[ SubWidthC * x + 1 ][ -1 ] +
+ 2 ) >> 2
- 이와 다를 경우에:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F5로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= F[1][0] * pY[ - 1 ] [ - 1- SubHeightC ] +
+ F[0][1] * pY[ - 1 ] [ - SubHeightC ] +
+ F[1][1] * pY[ 0 ] [ - SubHeightC ] +
+ F[2][1] * pY[ 1 ] [ - SubHeightC ] +
+ F[1][2] pY[ - 1 ] [ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ -1 ][ -1 ] +
+ F[1] * pY[ 0 ][ -1 ] + (8-182)
+ F[2] * pY[ 1 ][ -1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY[ 0 ][ -1 ] +
+ F[1] * pY[ 0 ][ -2 ] +
+ F[2] * pY[ 0 ][ -1 ] +
+ 2 ) >> 2
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY [ idx ] = pY[ 0 ][ -1 ]
- 이와 다를 경우에, 다음이 적용된다:
- x > 0일 경우에:
- bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[ SubWidthC * x - 1 ][ -1 ] +
+ F[0][2] * pY[ SubWidthC * x - 1 ][ -2 ] +
+ F[1][1] * pY[ SubWidthC * x ][ -1 ] +
+ F[1][2] * pY[ SubWidthC * x ][ -2] +
+ F[2][1] * pY[ SubWidthC * x + 1 ][ -1 ] +
+ F[2][2] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY [ SubWidthC * y - 1 ] [- 1 ] +
+ F[1] * pY[ SubWidthC * y ] [ - 1 ] +
+ F[2] * pY[ SubWidthC * y + 1] [ - 1 ] +
+ 2 ) >> 2
- 이와 다를 경우에:
- availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[- 1 ][ -1 ] +
+ F[0][2] * pY[ - 1 ][ -2 ] +
+ F[1][1] * pY[ 0 ][ -1 ] +
+ F[1][2] * pY[ 0 ][ -2] +
+ F[2][1] * pY[ 1 ][ -1 ] +
+ F[2][2] * pY[ 1 ][ -2 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY [ - 1 ] [- 1 ] +
+ F[1] * pY[ 0 ] [ - 1 ] +
+ F[2] * pY[ 1] [ - 1 ] +
+ 2 ) >> 2
- 이와 다르게, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F2로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] = ( F[1] * pY[ 0 ][ -2 ] + F[0] * pY[ 0 ][ -1 ] + 1 ) >> 1
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY [ idx ] = pY[ 0 ][ -1 ]
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT+cntL이 2와 동일할 때, pSelComp[3]을 pSelComp[0]과 동일하게, pSelComp[2]를 pSelComp[1]과 동일하게, pSelComp[0]을 pSelComp[1]과 동일하게, 그리고 pSelComp[1]을 pSelComp[3]와 동일하게 설정하고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx[] 및 maxGrpIdx[]는 다음으로서 설정된다: minGrpIdx[0] = 0, minGrpIdx[1] = 2, maxGrpIdx[0] = 1, maxGrpIdx[1] = 3.
- pSelDsY[minGrpIdx[0]] > pSelDsY[minGrpIdx[1]]일 경우에, Swap(minGrpIdx[0], minGrpIdx[1]).
- pSelDsY[maxGrpIdx[0]] > pSelDsY[maxGrpIdx[1]]일 경우에, Swap(maxGrpIdx[0], maxGrpIdx[1]).
- pSelDsY[minGrpIdx[0]] > pSelDsY[maxGrpIdx[1]]일 경우에, Swap(minGrpIdx, maxGrpIdx ).
- pSelDsY[minGrpIdx[1]] > pSelDsY[maxGrpIdx[0]]일 경우에, Swap(minGrpIdx[1], maxGrpIdx[0]).
- maxY = ( pSelDsY[maxGrpIdx[0]] + pSelDsY[maxGrpIdx[1]] + 1 ) >> 1.
- maxC = ( pSelC[maxGrpIdx[0]] + pSelC[maxGrpIdx[1]] + 1 ) >> 1.
- minY = ( pSelDsY[minGrpIdx[0]] + pSelDsY[minGrpIdx[1]] + 1 ) >> 1.
- minC = ( pSelC[minGrpIdx[0]] + pSelC[minGrpIdx[1]] + 1 ) >> 1.
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0
a = 0
b = 1 << ( BitDepthC - 1)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC
x = Floor( Log2( diff ) )
normDiff = ( ( diff << 4 ) >> x ) & 15
x += ( normDiff != 0 ) ? 1 : 0
y = Floor( Log2( Abs ( diffC ) ) ) + 1
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a
b = minC - ( ( a * minY ) >> k )
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 }
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0
a = 0
b = minC
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1C( ( ( pDsY[ x ][ y ] * a ) >> k ) + b )
사양의 대안적인 제형은 필터들(F1, F2, F3, 및 F4)의 순차적인 표기를 이용한다. 순차적인 필터들의 표기를 이용하는 개시내용은 다음과 같다:
이 프로세스에 대한 입력들은 다음과 같다:
- 인트라 예측 모드 predModeIntra,
- 현재의 픽처의 상부-좌측 샘플에 대한 현재의 변환 블록의 상부-좌측 샘플의 샘플 위치( xTbC, yTbC ),
- 변환 블록 폭을 특정하는 변수 nTbW,
- 변환 블록 높이를 특정하는 변수 nTbH,
- 현재의 블록의 컬러 컴포넌트를 특정하는 변수 cIdx,
- x = -1, y = 0..2 * nTbH - 1 및 x = 0.. 2 * nTbW - 1, y = - 1인 크로마 이웃하는 샘플들 p[ x ][ y ].
이 프로세스의 출력은 예측된 샘플들 predSamples[ x ][ y ]이고, 여기서, x = 0..nTbW - 1, y = 0..nTbH - 1이다.
현재의 루마 위치( xTbY, yTbY )는 다음과 같이 유도된다:
( xTbY, yTbY ) = ( xTbC << ( SubWidthC - 1 ), yTbC << ( SubHeightC - 1 ) ) (346)
변수들 availL, availT, 및 availTL은 다음과 같이 유도된다:
- 조항 6.4.4에서 특정된 바와 같은 이웃하는 블록 이용가능성을 위한 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ), 이웃하는 크로마 위치( xTbC - 1, yTbC ), FALSE와 동일하게 설정된 checkPredModeY, 및 cIdx로 소환되고, 출력은 availL에 배정된다.
- 조항 6.4.4에서 특정된 바와 같은 이웃하는 블록 이용가능성을 위한 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ), 이웃하는 크로마 위치( xTbC, yTbC - 1 ), FALSE와 동일하게 설정된 checkPredModeY, 및 cIdx로 소환되고, 출력은 availT에 배정된다.
- 변수 availTL은 다음과 같이 유도된다:
availTL = availL && availT (347)
- 이용가능한 상부-우측 이웃하는 크로마 샘플들의 수 numTopRight는 다음과 같이 유도된다:
- 변수 numTopRight는 0과 동일하게 설정되고, availTR은 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_T_CCLM과 동일할 때, availTR이 FALSE와 동일하거나 x가 2 * nTbW - 1과 동일할 때까지, 다음은 x = nTbW..2 * nTbW - 1에 대하여 적용된다:
- 조항 6.4.4에서 특정된 바와 같은 이웃하는 블록 이용가능성을 위한 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ), 이웃하는 크로마 위치( xTbC + x, yTbC - 1 ), FALSE와 동일하게 설정된 checkPredModeY, 및 cIdx로 소환되고, 출력은 availTR에 배정된다
- availTR이 TRUE와 동일할 때, numTopRight은 1씩 증분된다.
- 이용가능한 좌측-하부 이웃하는 크로마 샘플들의 수 numLeftBelow는 다음과 같이 유도된다:
- 변수 numLeftBelow는 0과 동일하게 설정되고, availLB는 TRUE와 동일하게 설정된다.
- predModeIntra가 INTRA_L_CCLM과 동일할 때, availLB가 FALSE와 동일하거나 y가 2 * nTbH - 1과 동일할 때까지, 다음이 y = nTbH..2 * nTbH - 1에 대하여 적용된다:
- 조항 6.4.4에서 특정된 바와 같은 이웃하는 블록 이용가능성을 위한 유도 프로세스는 입력들로서 ( xTbC, yTbC )와 동일하게 설정된 현재의 크로마 위치( xCurr, yCurr ), 이웃하는 크로마 위치( xTbC - 1, yTbC + y ), FALSE와 동일하게 설정된 checkPredModeY, 및 cIdx로 소환되고, 출력은 availLB에 배정된다
- availLB가 TRUE와 동일할 때, numLeftBelow가 1씩 증분된다.
상부 및 상부-우측 상의 이용가능한 이웃하는 크로마 샘플들의 수 numSampT 및 좌측 및 좌측-하부 상의 이용가능한 이웃하는 크로마 샘플들의 수 numSampL은 다음과 같이 유도된다:
- predModeIntra가 INTRA_LT_CCLM과 동일할 경우에, 다음이 적용된다:
numSampT = availT ? nTbW : 0 (348)
numSampL = availL ? nTbH : 0 (349)
- 이와 다를 경우에, 다음이 적용된다:
numSampT = ( availT && predModeIntra = = INTRA_T_CCLM ) ? ( nTbW + Min( numTopRight, nTbH ) ) : 0 (350)
numSampL = ( availL && predModeIntra = = INTRA_L_CCLM ) ? ( nTbH + Min( numLeftBelow, nTbW ) ) : 0 (351)
변수 bCTUboundary는 다음과 같이 유도된다:
bCTUboundary = ( yTbC & ( 1 << ( CtbLog2SizeY - 1 ) - 1 ) = = 0 ) ? TRUE : FALSE. (352)
N이 L 및 T에 의해 대체되는 변수 cntN 및 어레이 pickPosN은 다음과 같이 유도된다:
- 변수 numIs4N은 다음과 같이 유도된다:
numIs4N = ( ( availT && availL && predModeIntra = = INTRA_LT_CCLM ) ? 0 : 1) (353)
- 변수 startPosN은 numSampN >> ( 2 + numIs4N )과 동일하게 설정된다.
- 변수 pickStepN은 Max( 1, numSampN >> ( 1 + numIs4N ) )과 동일하게 설정된다.
- availN이 TRUE와 동일하고, predModeIntra가 INTRA_LT_CCLM 또는 INTRA_N_CCLM과 동일할 경우에, 다음 배정들이 행해진다:
- cntN은 Min( numSampN, ( 1 + numIs4N ) << 1 )과 동일하게 설정된다.
- pickPosN[ pos ]은 (startPosN + pos * pickStepN)과 동일하게 설정되고, 여기서, pos = 0.. cntN - 1이다.
- 이와 다를 경우에, cntN은 0과 동일하게 설정된다.
x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
- numSampL 및 numSampT의 둘 모두가 0과 동일할 경우에, 다음이 적용된다:
predSamples[ x ][ y ] = 1 << ( BitDepth - 1 ) (354)
- 이와 다를 경우에, 다음의 순서화된 단계들이 적용된다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDstY[ x ][ y ] = pY[ x ][ y ] (355)
- 이와 다를 경우에, 다음이 적용된다:
- 1 차원 필터 계수들 어레이 F1 및 F2, 및 2 차원 필터 계수들 어레이들 F3 및 F4는 다음과 같이 특정된다.
F1[ 0 ] = 2, F1[ 1 ] = 0 (356)
F2[ 0 ] = 1, F2[ 1 ] = 2, F2[ 2 ] = 1 (357)
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임 (358)
- SubWidthC 및 SubHeightC의 둘 모두가 2과 동일할 경우에, 다음이 적용된다:
F1[ 0 ] = 1, F1[ 1 ] = 1 (359)
F3[ 0 ][ 1 ] = 1, F3[ 1 ][ 1 ] = 4, F3[ 2 ][ 1 ] = 1, F3[ 1 ][ 0 ] = 1, F3[ 1 ][ 2 ] = 1 (360)
F4[ 0 ][ 1 ] = 1, F4[ 1 ][ 1 ] = 2, F4[ 2 ][ 1 ] = 1 (361)
F4[ 0 ][ 2 ] = 1, F4[ 1 ][ 2 ] = 2, F4[ 2 ][ 2 ] = 1 (362)
- 이와 다를 경우에, 다음이 적용된다:
F3[ 1 ][ 1 ] = 8 (363)
F4[ 0 ][ 1 ] = 2, F4[ 1 ][ 1 ] = 4, F4[ 2 ][ 1 ] = 2, (364)
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (365)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (366)
F3[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(availL은 FALSE와 동일함), y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F2[ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F2[ 1 ] * pY[ 0 ][ SubHeightC * y ] + (367)
F2[ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ 0 ] + (368)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에(availT는 FALSE와 동일함), x = 1..nTbW - 1인 pDsY[ x ][ 0 ]가 유도된다:
pDsY[ x ][ 0 ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ 0 ] + (369)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ 0 ] + (370)
F3[ 2 ][ 1 ] * pY[ 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ - 1 ][ 0 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 1 ][ 0 ] + 2 ) >> 2 (371)
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ 0 ][ - 1 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 0 ][ 1 ] + 2 ) >> 2 (372)
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ] (373)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F4[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (375)
F4[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(availL은 FALSE와 동일함), y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F1[ 0 ] * pY[ 0 ][ SubHeightC * y ] +
F1[ 1 ] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1 (376)
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..cntL - 1인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..cntL-1인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ - 1][ y ] (377)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- y가 0 초과이거나, availTL이 TRUE와 동일할 경우에, pSelDsY[ idx ]는 다음과 같이 유도된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (378)
F3[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(y는 0과 동일함), pSelDsY[ idx ]는 다음과 같이 유도된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 - SubWidthC ][ 0 ] +
F2[ 1 ] * pY[ -SubWidthC ][ 0 ] + (379)
F2[ 2 ] * pY[ 1 - SubWidthC ][ 0] + 2 ) >> 2
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (380)
F4[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..cntL + cntT - 1인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = 0..cntL + cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ x ][ - 1] (381)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x가 0 초과일 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -SubHeightC] + (382)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (383)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ -1 ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ -1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ -SubHeightC ] + (384)
F3[ 2 ][ 1 ] * pY[ 1 ][ -SubHeightC ] +
F3[ 1 ][ 2 ] * pY[ -1 ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ -1 ] + 2 ) >> 2 (385)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ 0 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -2 ] +
F2[ 2 ] * pY[ 0 ][ -1 ] + 2 ) >> 2 (386)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (387)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x가 0 초과일 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] + (388)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (389)
F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 ][ -1 ] + F4[ 0 ][ 2 ] * pY[ -1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ -1 ] + F4[ 1 ][ 2 ] * pY[ 0 ][ -2 ] + (390)
F4[ 2 ][ 1 ] * pY[ 1 ][ -1 ] + F4[ 2 ][ 2 ] * pY[ 1 ][ -2 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ - 1 ] + 2 ) >> 2 (391)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 1 ) >> 1 (392)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (393)
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT + cntL이 2와 동일할 때, pSelComp[ 3 ]는 pSelComp[ 0 ]와 동일하게 설정되고, pSelComp[ 2 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 0 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 1 ]는 pSelComp[ 3 ]와 동일하게 설정되고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 유도된다:
minGrpIdx[ 0 ] = 0 (394)
minGrpIdx[ 1 ] = 2 (395)
maxGrpIdx[ 0 ] = 1 (396)
maxGrpIdx[ 1 ] = 3 (397)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ minGrpIdx[ 1 ] ] 초과일 때, minGrpIdx[ 0 ] 및 minGrpIdx[ 1 ]는 다음과 같이 교체된다:
( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) = Swap( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) (398)
- pSelDsY[ maxGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, maxGrpIdx[ 0 ] 및 maxGrpIdx[ 1 ]는 다음과 같이 교체된다:
( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) = Swap( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) (399)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 교체된다:
( minGrpIdx, maxGrpIdx ) = Swap( minGrpIdx, maxGrpIdx ) (400)
- pSelDsY[ minGrpIdx[ 1 ] ]가 pSelDsY[ maxGrpIdx[ 0 ] ] 초과일 때, minGrpIdx[ 1 ] 및 maxGrpIdx[ 0 ]는 다음과 같이 교체된다:
( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) = Swap( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) (401)
- 변수들 maxY, maxC, minY, 및 minC는 다음과 같이 유도된다:
maxY = ( pSelDsY[ maxGrpIdx[ 0 ] ] + pSelDsY[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (402)
maxC = ( pSelC[ maxGrpIdx[ 0 ] ] + pSelC[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (403)
minY = ( pSelDsY[ minGrpIdx[ 0 ] ] + pSelDsY[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (404)
minC = ( pSelC[ minGrpIdx[ 0 ] ] + pSelC[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (405)
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0 (406)
a = 0 (407)
b = 1 << ( BitDepth - 1 ) (408)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY (409)
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC (410)
x = Floor( Log2( diff ) ) (411)
normDiff = ( ( diff << 4 ) >> x ) & 15 (412)
x += ( normDiff != 0 ) ? 1 : 0 (413)
y = Floor( Log2( Abs ( diffC ) ) ) + 1 (414)
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y (415)
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y (416)
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a (417)
b = minC - ( ( a * minY ) >> k ) (418)
여기서, divSigTable[ ]는 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 } (419)
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0 (420)
a = 0 (421)
b = minC (422)
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1( ( ( pDsY[ x ][ y ] * a ) >> k ) + b ) (423)
주목 - 이 프로세스는 sps_chroma_vertical_collocated_flag를 이용한다. 그러나, 구현예를 단순화하기 위하여, 그것은 sps_chroma_horizontal_collocated_flag를 이용하지 않는다.
또 다른 실시예에서, 패딩 동작(padding operation)은 재구성된 루마 블록의 경계 상에서 필터 선택을 구현하기 위하여 이용될 수 있다. 필터가 재구성된 샘플들의 영역에 적용될 때, 필터링 프로세스는 필터링된 영역의 포지션이 블록 경계 상에 있을 때에 조절되어야 한다.
도 13은 예시적인 3-탭 필터(1302)에 의한 재구성된 루미넌스 블록(1301)을 위한 필터링 동작을 도시한다. 필터 계수들 중의 하나가 블룸 케이스(bloome case)들의 외부에 있는 재구성된 샘플과 공동위치되는 경계 샘플들을 필터링할 때, 재구성된 루마 샘플들은 좌측 측부(1303)에 대하여 이용불가능할 수 있고, 이에 따라, 외부 포지션은 필터링 동작들에서 이용되지 않을 수 있다.
이전의 실시예들에서, 좌측 열 및 상부 행에 대하여, 재구성된 루미넌스 샘플들에 적용된 필터들을 위한 탭들의 수를 감소시키는 것이 제안되었다. 실제로, 필터 계수들은 포지션-종속적으로 되도록 정의되었다.
또 다른 실시예에서, 이 포지션 종속성은 경계 재구성된 샘플들을 위한 좌측 및 상부 패딩에 의해 처리된다. 좌측 측부가 이용가능하지 않을 때, 이용불가능한 측부의 샘플들은 재구성된 블록(1301)의 가장 좌측 재구성된 샘플들을 수평으로 복사함으로써 획득된다. 이 동작은 실제로, 좌측의 재구성된 샘플들의 제1 열의 복제이다. 상부 측부가 이용가능하지 않을 때, 이용불가능한 측부의 샘플들은 재구성된 블록(1301)의 가장 상부 재구성된 샘플들을 수직으로 복사함으로써 획득된다. 이 동작은 실제로, 블록(1301) 상부의 재구성된 샘플들의 제1 행의 복제이다.
패딩된 샘플들을 포함하는 재구성된 샘플들의 영역의 선형 필터링이 패딩 동작을 이용하지 않으면서 수행될 수 있다는 것이 주목될 수 있다. 실제로, 영역의 이 포지션에 대하여, 더 긴 탭-필터는 더 작은 차수의 등가 필터에 의해 치환될 수 있다. 필터링된 영역에서의 패딩된 샘플들의 존재는 계수들 그룹화에 의해 필터링 동작을 단순화하는 것을 가능하게 한다.
이 실시예는 VVC 사양의 다음의 부분으로서 표현될 수 있다:
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDstY[ x ][ y ] = pY[ x ][ y ] (355)
- 이와 다를 경우에, 다음이 적용된다:
- 1 차원 필터 계수들 어레이 F1 및 F2, 및 2 차원 필터 계수들 어레이들 F3 및 F4는 다음과 같이 특정된다.
F1[ 0 ] = 4, F1[ 1 ] = 0 (356)
F2[ 0 ] = 1, F2[ 1 ] = 2, F2[ 2 ] = 1 (357)
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임 (358)
- SubWidthC 및 SubHeightC의 둘 모두가 2과 동일할 경우에, 다음이 적용된다:
F1[ 0 ] = 3, F1[ 1 ] = 1 (359)
F3[ 0 ][ 1 ] = 1, F3[ 1 ][ 1 ] = 4, F3[ 2 ][ 1 ] = 1, F3[ 1 ][ 0 ] = 1, F3[ 1 ][ 2 ] = 1 (360)
F4[ 0 ][ 1 ] = 1, F4[ 1 ][ 1 ] = 2, F4[ 2 ][ 1 ] = 1 (361)
F4[ 0 ][ 2 ] = 1, F4[ 1 ][ 2 ] = 2, F4[ 2 ][ 2 ] = 1 (362)
- 이와 다를 경우에, 다음이 적용된다:
F3[ 1 ][ 1 ] = 8 (363)
F4[ 0 ][ 1 ] = 2, F4[ 1 ][ 1 ] = 4, F4[ 2 ][ 1 ] = 2, (364)
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (365)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (366)
F3[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(availL은 FALSE와 동일함), y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F2[ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F2[ 1 ] * pY[ 0 ][ SubHeightC * y ] + (367)
F2[ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 2 ) >> 2
- availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ 0 ] + (368)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
- 이와 다를 경우에(availT는 FALSE와 동일함), x = 1..nTbW - 1인 pDsY[ x ][ 0 ]가 유도된다:
pDsY[ x ][ 0 ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ 0 ] + (369)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
- availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ 0 ] + (370)
F3[ 2 ][ 1 ] * pY[ 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ 1 ] + 4 ) >> 3
- 이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ - 1 ][ 0 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 1 ][ 0 ] + 2 ) >> 2 (371)
- 이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ 0 ][ - 1 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 0 ][ 1 ] + 2 ) >> 2 (372)
- 이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ] (373)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x = 1..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1][ SubHeightC * y + 1 ] + 4 ) >> 3
- availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F4[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (375)
F4[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(availL은 FALSE와 동일함), y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F1[ 0 ] * pY[ 0 ][ SubHeightC * y ] +
F1[ 1 ] * pY[ 0 ][ SubHeightC * y + 1] + 2 ) >> 2 (376)
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..cntL - 1인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..cntL-1인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ - 1][ y ] (377)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- y가 0 초과이거나, availTL이 TRUE와 동일할 경우에, pSelDsY[ idx ]는 다음과 같이 유도된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (378)
F3[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(y는 0과 동일함), pSelDsY[ idx ]는 다음과 같이 유도된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 - SubWidthC ][ 0 ] +
F2[ 1 ] * pY[ -SubWidthC ][ 0 ] + (379)
F2[ 2 ] * pY[ 1 - SubWidthC ][ 0] + 2 ) >> 2
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (380)
F4[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..cntL + cntT - 1인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = 0..cntL + cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ x ][ - 1] (381)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x가 0 초과일 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -SubHeightC] + (382)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (383)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ -1 ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ -1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ -SubHeightC ] + (384)
F3[ 2 ][ 1 ] * pY[ 1 ][ -SubHeightC ] +
F3[ 1 ][ 2 ] * pY[ -1 ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ -1 ] + 2 ) >> 2 (385)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ 0 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -2 ] +
F2[ 2 ] * pY[ 0 ][ -1 ] + 2 ) >> 2 (386)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (387)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x가 0 초과일 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] + (388)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (389)
F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 ][ -1 ] + F4[ 0 ][ 2 ] * pY[ -1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ -1 ] + F4[ 1 ][ 2 ] * pY[ 0 ][ -2 ] + (390)
F4[ 2 ][ 1 ] * pY[ 1 ][ -1 ] + F4[ 2 ][ 2 ] * pY[ 1 ][ -2 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ - 1 ] + 2 ) >> 2 (391)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 2 ) >> 2 (392)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (393)
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT + cntL이 2와 동일할 때, pSelComp[ 3 ]는 pSelComp[ 0 ]와 동일하게 설정되고, pSelComp[ 2 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 0 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 1 ]는 pSelComp[ 3 ]와 동일하게 설정되고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 유도된다:
minGrpIdx[ 0 ] = 0 (394)
minGrpIdx[ 1 ] = 2 (395)
maxGrpIdx[ 0 ] = 1 (396)
maxGrpIdx[ 1 ] = 3 (397)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ minGrpIdx[ 1 ] ] 초과일 때, minGrpIdx[ 0 ] 및 minGrpIdx[ 1 ]는 다음과 같이 교체된다:
( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) = Swap( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) (398)
- pSelDsY[ maxGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, maxGrpIdx[ 0 ] 및 maxGrpIdx[ 1 ]는 다음과 같이 교체된다:
( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) = Swap( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) (399)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 교체된다:
( minGrpIdx, maxGrpIdx ) = Swap( minGrpIdx, maxGrpIdx ) (400)
- pSelDsY[ minGrpIdx[ 1 ] ]가 pSelDsY[ maxGrpIdx[ 0 ] ] 초과일 때, minGrpIdx[ 1 ] 및 maxGrpIdx[ 0 ]는 다음과 같이 교체된다:
( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) = Swap( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) (401)
- 변수들 maxY, maxC, minY, 및 minC는 다음과 같이 유도된다:
maxY = ( pSelDsY[ maxGrpIdx[ 0 ] ] + pSelDsY[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (402)
maxC = ( pSelC[ maxGrpIdx[ 0 ] ] + pSelC[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (403)
minY = ( pSelDsY[ minGrpIdx[ 0 ] ] + pSelDsY[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (404)
minC = ( pSelC[ minGrpIdx[ 0 ] ] + pSelC[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (405)
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0 (406)
a = 0 (407)
b = 1 << ( BitDepth - 1 ) (408)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY (409)
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC (410)
x = Floor( Log2( diff ) ) (411)
normDiff = ( ( diff << 4 ) >> x ) & 15 (412)
x += ( normDiff != 0 ) ? 1 : 0 (413)
y = Floor( Log2( Abs ( diffC ) ) ) + 1 (414)
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y (415)
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y (416)
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a (417)
b = minC - ( ( a * minY ) >> k ) (418)
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 } (419)
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0 (420)
a = 0 (421)
b = minC (422)
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1( ( ( pDsY[ x ][ y ] * a ) >> k ) + b ) (423)
주목 - 이 프로세스는 sps_chroma_vertical_collocated_flag를 이용한다. 그러나, 구현예를 단순화하기 위하여, 그것은 sps_chroma_horizontal_collocated_flag를 이용하지 않는다.
실시예의 또 다른 변형은 패딩 동작을 포함한다. 이 경우에, 필터 "F1"은 명시적으로 정의되는 것이 아니라, 그 대신에, 그것은 패딩 및 "F2" 필터를 이용하는 필터링의 조합으로서 구현된다. 이 변형에 대한 사양은 이하에서 주어진다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availT가 거짓과 동일할 때, x = -1..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 루마 샘플들 pY[ x ][ 0 ]과 동일하게 설정된다.
- availL이 거짓과 동일할 때, x = -1, -2, -3, y = -1..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]는 루마 샘플들 pY[ 0 ][ y ]과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDstY[ x ][ y ] = pY[ x ][ y ] (355)
- 이와 다를 경우에, 다음이 적용된다:
- 1 차원 필터 계수들 어레이 F1 및 F2, 및 2 차원 필터 계수들 어레이들 F3 및 F4는 다음과 같이 특정된다.
[F1[ 0 ] = 2, F1[ 1 ] = 0 (356)] ([]는 삭제된 부분을 나타냄
F2[ 0 ] = 1, F2[ 1 ] = 2, F2[ 2 ] = 1 (357)
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임 (358)
- SubWidthC 및 SubHeightC의 둘 모두가 2과 동일할 경우에, 다음이 적용된다:
[F1[ 0 ] = 1, F1[ 1 ] = 1 (359)] ([]는 삭제된 부분을 나타냄)
F3[ 0 ][ 1 ] = 1, F3[ 1 ][ 1 ] = 4, F3[ 2 ][ 1 ] = 1, F3[ 1 ][ 0 ] = 1, F3[ 1 ][ 2 ] = 1 (360)
F4[ 0 ][ 1 ] = 1, F4[ 1 ][ 1 ] = 2, F4[ 2 ][ 1 ] = 1 (361)
F4[ 0 ][ 2 ] = 1, F4[ 1 ][ 2 ] = 2, F4[ 2 ][ 2 ] = 1 (362)
- 이와 다를 경우에, 다음이 적용된다:
F3[ 1 ][ 1 ] = 8 (363)
F4[ 0 ][ 1 ] = 2, F4[ 1 ][ 1 ] = 4, F4[ 2 ][ 1 ] = 2, (364)
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 0..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (365)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
[- availL이 TRUE와 동일할 경우에, y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (366)
F3[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(availL은 FALSE와 동일함), y = 1..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F2[ 0 ] * pY[ 0 ][ SubHeightC * y - 1 ] +
F2[ 1 ] * pY[ 0 ][ SubHeightC * y ] + (367)
F2[ 2 ] * pY[ 0 ][ SubHeightC * y + 1 ] + 2 ) >> 2
availT가 TRUE와 동일할 경우에, x = 1..nTbW - 1인 pDsY[ x ][ 0 ]는 다음과 같이 유도된다:
pDsY[ x ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ 0 ] + (368)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 ] + 4 ) >> 3
이와 다를 경우에(availT는 FALSE와 동일함), x = 1..nTbW - 1인 pDsY[ x ][ 0 ]가 유도된다:
pDsY[ x ][ 0 ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ 0 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ 0 ] + (369)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ 0 ] + 2 ) >> 2
availL이 TRUE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F3[ 1 ][ 0 ] * pY[ 0 ][ - 1 ] +
F3[ 0 ][ 1 ] * pY[ - 1 ][ 0 ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ 0 ] + (370)
F3[ 2 ][ 1 ] * pY[ 1 ][ 0 ] +
F3[ 1 ][ 2 ] * pY[ 0 ][ 1 ] + 4 ) >> 3
이와 다르게, availL이 TRUE와 동일하고 availT가 FALSE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ - 1 ][ 0 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 1 ][ 0 ] + 2 ) >> 2 (371)
이와 다르게, availL이 FALSE와 동일하고 availT가 TRUE와 동일할 경우에, pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = ( F2[ 0 ] * pY[ 0 ][ - 1 ] + F2[ 1 ] * pY[ 0 ][ 0 ] +
F2[ 2 ] * pY[ 0 ][ 1 ] + 2 ) >> 2 (372)
이와 다를 경우에(availL이 FALSE와 동일하고 availT가 FALSE와 동일함), pDsY[ 0 ][ 0 ]은 다음과 같이 유도된다:
pDsY[ 0 ][ 0 ] = pY[ 0 ][ 0 ] (373)] ([]는 삭제된 부분을 나타냄)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x = 0..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1][ SubHeightC * y + 1 ] + 4 ) >> 3
[availL이 TRUE와 동일할 경우에, y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F4[ 0 ][ 1 ] * pY[ - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ SubHeightC * y ] + (375)
F4[ 1 ][ 2 ] * pY[ 0 ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 ][ SubHeightC * y + 1 ] + 4 ) >> 3
이와 다를 경우에(availL은 FALSE와 동일함), y = 0..nTbH - 1인 pDsY[ 0 ][ y ]는 다음과 같이 유도된다:
pDsY[ 0 ][ y ] = ( F1[ 0 ] * pY[ 0 ][ SubHeightC * y ] +
F1[ 1 ] * pY[ 0 ][ SubHeightC * y + 1] + 1 ) >> 1 (376)] ([]는 삭제된 부분을 나타냄)
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..cntL - 1인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..cntL-1인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ - 1][ y ] (377)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
[y가 0 초과이거나, availTL이 TRUE와 동일할 경우에, pSelDsY[ idx ]는 다음과 같이 유도된다:] ([]는 삭제된 부분을 나타냄)
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (378)
F3[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
[이와 다를 경우에(y는 0과 동일함), pSelDsY[ idx ]는 다음과 같이 유도된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 - SubWidthC ][ 0 ] +
F2[ 1 ] * pY[ -SubWidthC ][ 0 ] + (379)
F2[ 2 ] * pY[ 1 - SubWidthC ][ 0] + 2 ) >> 2] ([]는 삭제된 부분을 나타냄)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (380)
F4[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..cntL + cntT - 1인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = 0..cntL + cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ x ][ - 1] (381)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
[- x가 0 초과일 경우에, 다음이 적용된다:]([]는 삭제된 부분을 나타냄)
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -SubHeightC] + (382)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (383)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ -1 ] + 2 ) >> 2
[- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ -1 ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ -1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ 0 ][ -SubHeightC ] + (384)
F3[ 2 ][ 1 ] * pY[ 1 ][ -SubHeightC ] +
F3[ 1 ][ 2 ] * pY[ -1 ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ -1 ] + 2 ) >> 2 (385)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ 0 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -2 ] +
F2[ 2 ] * pY[ 0 ][ -1 ] + 2 ) >> 2 (386)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (387)]([]는 삭제된 부분을 나타냄)
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
[- x가 0 초과일 경우에, 다음이 적용된다:]([]는 삭제된 부분을 나타냄)
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] + (388)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (389)
F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2
[- 이와 다를 경우에(x가 0과 동일함), 다음이 적용된다:
- availTL이 TRUE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 ][ -1 ] + F4[ 0 ][ 2 ] * pY[ -1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ -1 ] + F4[ 1 ][ 2 ] * pY[ 0 ][ -2 ] + (390)
F4[ 2 ][ 1 ] * pY[ 1 ][ -1 ] + F4[ 2 ][ 2 ] * pY[ 1 ][ -2 ] + 4 ) >> 3
- 이와 다르게, availTL이 TRUE와 동일하고, bCTUboundary가 TRUE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ - 1 ] + 2 ) >> 2 (391)
- 이와 다르게, availTL이 FALSE와 동일하고, bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 1 ) >> 1 (392)
- 이와 다를 경우에(availTL이 FALSE와 동일하고 bCTUboundary는 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ] (393)] ([]는 삭제된 부분을 나타냄)
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT + cntL이 2와 동일할 때, pSelComp[ 3 ]는 pSelComp[ 0 ]와 동일하게 설정되고, pSelComp[ 2 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 0 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 1 ]는 pSelComp[ 3 ]와 동일하게 설정되고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 유도된다:
minGrpIdx[ 0 ] = 0 (394)
minGrpIdx[ 1 ] = 2 (395)
maxGrpIdx[ 0 ] = 1 (396)
maxGrpIdx[ 1 ] = 3 (397)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ minGrpIdx[ 1 ] ] 초과일 때, minGrpIdx[ 0 ] 및 minGrpIdx[ 1 ]는 다음과 같이 교체된다:
( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) = Swap( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) (398)
- pSelDsY[ maxGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, maxGrpIdx[ 0 ] 및 maxGrpIdx[ 1 ]는 다음과 같이 교체된다:
( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) = Swap( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) (399)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 교체된다:
( minGrpIdx, maxGrpIdx ) = Swap( minGrpIdx, maxGrpIdx ) (400)
- pSelDsY[ minGrpIdx[ 1 ] ]가 pSelDsY[ maxGrpIdx[ 0 ] ] 초과일 때, minGrpIdx[ 1 ] 및 maxGrpIdx[ 0 ]는 다음과 같이 교체된다:
( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) = Swap( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) (401)
- 변수들 maxY, maxC, minY, 및 minC는 다음과 같이 유도된다:
maxY = ( pSelDsY[ maxGrpIdx[ 0 ] ] + pSelDsY[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (402)
maxC = ( pSelC[ maxGrpIdx[ 0 ] ] + pSelC[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (403)
minY = ( pSelDsY[ minGrpIdx[ 0 ] ] + pSelDsY[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (404)
minC = ( pSelC[ minGrpIdx[ 0 ] ] + pSelC[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (405)
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0 (406)
a = 0 (407)
b = 1 << ( BitDepth - 1 ) (408)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY (409)
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC (410)
x = Floor( Log2( diff ) ) (411)
normDiff = ( ( diff << 4 ) >> x ) & 15 (412)
x += ( normDiff != 0 ) ? 1 : 0 (413)
y = Floor( Log2( Abs ( diffC ) ) ) + 1 (414)
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y (415)
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y (416)
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a (417)
b = minC - ( ( a * minY ) >> k ) (418)
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 } (419)
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0 (420)
a = 0 (421)
b = minC (422)
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1( ( ( pDsY[ x ][ y ] * a ) >> k ) + b ) (423)
주목 - 이 프로세스는 sps_chroma_vertical_collocated_flag를 이용한다. 그러나, 구현예를 단순화하기 위하여, 그것은 sps_chroma_horizontal_collocated_flag를 이용하지 않는다.
수정들 마크업(markup)이 없다면, 위에서 도시된 사양은 다음과 같이 표현될 수 있다:
1. x = 0..nTbW * SubWidthC - 1, y= 0..nTbH * SubHeightC - 1인 공동위치된 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY + x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
2. 이웃하는 루마 샘플들 pY[ x ][ y ]는 다음과 같이 유도된다:
- numSampL이 0 초과일 때, x = -1..-3, y = 0..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY + x , yTbY +y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- numSampT가 0 초과일 때, x = 0..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availTL이 TRUE와 동일할 때, x = -1, y = -1, -2인 이웃하는 상부-좌측 루마 샘플들 pY[ x ][ y ]는 위치들( xTbY+ x, yTbY + y )에서의 디블록킹 필터 프로세스 이전에, 재구성된 루마 샘플들과 동일하게 설정된다.
- availT가 거짓과 동일할 때, x = -1..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 루마 샘플들 pY[ x ][ 0 ]과 동일하게 설정된다.
- availL이 거짓과 동일할 때, x = -1, -2, -3, y = -1..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]는 루마 샘플들 pY[ 0 ][ y ]과 동일하게 설정된다.
3. x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
- x = 1..nTbW - 1, y = 1..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDstY[ x ][ y ] = pY[ x ][ y ] (355)
- 이와 다를 경우에, 다음이 적용된다:
- 1 차원 필터 계수들 어레이 F1 및 F2, 및 2 차원 필터 계수들 어레이들 F3 및 F4는 다음과 같이 특정된다.
F2[ 0 ] = 1, F2[ 1 ] = 2, F2[ 2 ] = 1 (357)
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임 (358)
- SubWidthC 및 SubHeightC의 둘 모두가 2과 동일할 경우에, 다음이 적용된다:
F3[ 0 ][ 1 ] = 1, F3[ 1 ][ 1 ] = 4, F3[ 2 ][ 1 ] = 1, F3[ 1 ][ 0 ] = 1, F3[ 1 ][ 2 ] = 1 (360)
F4[ 0 ][ 1 ] = 1, F4[ 1 ][ 1 ] = 2, F4[ 2 ][ 1 ] = 1 (361)
F4[ 0 ][ 2 ] = 1, F4[ 1 ][ 2 ] = 2, F4[ 2 ][ 2 ] = 1 (362)
- 이와 다를 경우에, 다음이 적용된다:
F3[ 1 ][ 1 ] = 8 (363)
F4[ 0 ][ 1 ] = 2, F4[ 1 ][ 1 ] = 4, F4[ 2 ][ 1 ] = 2, (364)
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- x = 0..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (365)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- x = 0..nTbW - 1, y = 0..nTbH - 1인 pDsY[ x ][ y ]는 다음과 같이 유도된다:
pDsY[ x ][ y ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1][ SubHeightC * y + 1 ] + 4 ) >> 3
4. numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..cntL - 1인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..cntL-1인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ - 1][ y ] (377)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (378)
F3[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] + (380)
F4[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
5. numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..cntL + cntT - 1인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = 0..cntL + cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ x ][ - 1] (381)
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -SubHeightC] + (382)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (383)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] + (388)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + (389)
F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2
6. cntT+cntL이 0과 동일하지 않을 때, 변수들 minY, maxY, minC, 및 maxC는 다음과 같이 유도된다:
- cntT + cntL이 2와 동일할 때, pSelComp[ 3 ]는 pSelComp[ 0 ]와 동일하게 설정되고, pSelComp[ 2 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 0 ]는 pSelComp[ 1 ]와 동일하게 설정되고, pSelComp[ 1 ]는 pSelComp[ 3 ]와 동일하게 설정되고, 여기서, Comp는 DsY 및 C에 의해 대체된다.
- 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 유도된다:
minGrpIdx[ 0 ] = 0 (394)
minGrpIdx[ 1 ] = 2 (395)
maxGrpIdx[ 0 ] = 1 (396)
maxGrpIdx[ 1 ] = 3 (397)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ minGrpIdx[ 1 ] ] 초과일 때, minGrpIdx[ 0 ] 및 minGrpIdx[ 1 ]는 다음과 같이 교체된다:
( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) = Swap( minGrpIdx[ 0 ], minGrpIdx[ 1 ] ) (398)
- pSelDsY[ maxGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, maxGrpIdx[ 0 ] 및 maxGrpIdx[ 1 ]는 다음과 같이 교체된다:
( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) = Swap( maxGrpIdx[ 0 ], maxGrpIdx[ 1 ] ) (399)
- pSelDsY[ minGrpIdx[ 0 ] ]가 pSelDsY[ maxGrpIdx[ 1 ] ] 초과일 때, 어레이들 minGrpIdx 및 maxGrpIdx는 다음과 같이 교체된다:
( minGrpIdx, maxGrpIdx ) = Swap( minGrpIdx, maxGrpIdx ) (400)
- pSelDsY[ minGrpIdx[ 1 ] ]가 pSelDsY[ maxGrpIdx[ 0 ] ] 초과일 때, minGrpIdx[ 1 ] 및 maxGrpIdx[ 0 ]는 다음과 같이 교체된다:
( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) = Swap( minGrpIdx[ 1 ], maxGrpIdx[ 0 ] ) (401)
- 변수들 maxY, maxC, minY, 및 minC는 다음과 같이 유도된다:
maxY = ( pSelDsY[ maxGrpIdx[ 0 ] ] + pSelDsY[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (402)
maxC = ( pSelC[ maxGrpIdx[ 0 ] ] + pSelC[ maxGrpIdx[ 1 ] ] + 1 ) >> 1 (403)
minY = ( pSelDsY[ minGrpIdx[ 0 ] ] + pSelDsY[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (404)
minC = ( pSelC[ minGrpIdx[ 0 ] ] + pSelC[ minGrpIdx[ 1 ] ] + 1 ) >> 1 (405)
7. 변수들 a, b, 및 k는 다음과 같이 유도된다:
- numSampL이 0과 동일하고, numSampT가 0과 동일할 경우에, 다음이 적용된다:
k = 0 (406)
a = 0 (407)
b = 1 << ( BitDepth - 1 ) (408)
- 이와 다를 경우에, 다음이 적용된다:
diff = maxY - minY (409)
- diff가 0과 동일하지 않을 경우에, 다음이 적용된다:
diffC = maxC - minC (410)
x = Floor( Log2( diff ) ) (411)
normDiff = ( ( diff << 4 ) >> x ) & 15 (412)
x += ( normDiff != 0 ) ? 1 : 0 (413)
y = Floor( Log2( Abs ( diffC ) ) ) + 1 (414)
a = ( diffC * ( divSigTable[ normDiff ] | 8 ) + 2y - 1 ) >> y (415)
k = ( ( 3 + x - y ) < 1 ) ? 1 : 3 + x - y (416)
a = ( ( 3 + x - y ) < 1 ) ? Sign( a ) * 15 : a (417)
b = minC - ( ( a * minY ) >> k ) (418)
여기서, divSigTable[ ]은 다음과 같이 특정된다:
divSigTable[ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 } (419)
- 이와 다를 경우에(diff가 0과 동일함), 다음이 적용된다:
k = 0 (420)
a = 0 (421)
b = minC (422)
8. x = 0..nTbW - 1, y = 0..nTbH - 1인 예측 샘플들 predSamples[ x ][ y ]는 다음과 같이 유도된다:
predSamples[ x ][ y ] = Clip1( ( ( pDsY[ x ][ y ] * a ) >> k ) + b ) (423)
주목 - 이 프로세스는 sps_chroma_vertical_collocated_flag를 이용한다. 그러나, 구현예를 단순화하기 위하여, 그것은 sps_chroma_horizontal_collocated_flag를 이용하지 않는다.
디코딩 디바이스에 의해 구현된 다음의 방법들 및 실시예들이 제공된다. 디코딩 디바이스는 도1a, 도 1b의 비디오 디코더(30), 또는 도 3의 디코더(30)일 수 있다. 해결책에 따르면, 도 14에서 예시되는 바와 같이, 본 출원의 실시예(1400)에 따른 크로마 블록 예측 방법을 위한 방법이 제공된다. 방법은 인코딩된 비디오 시퀀스를 디코딩하는 방법의 부분일 수 있다.
도 14에서 도시된 바와 같이, 단계(1401)에서, 디바이스는 비트스트림으로부터 복수의 신택스 엘리먼트를 파싱한다. 복수의 신택스 엘리먼트는 루마 샘플을 위한 필터의 선택을 표시하는 제1 신택스 엘리먼트를 포함한다. 예를 들어, 제1 신택스 엘리먼트는 SPS 파라미터인 sps_cclm_colocated_chroma_flag이다.
복수의 신택스 엘리먼트는 제2 신택스 엘리먼트를 포함하고, 제2 신택스 엘리먼트는 현재의 디코딩을 위하여 이용된 인트라 예측 모드가 CCLM 모드인 것을 표시하기 위하여 이용된다. CCLM 모드는 INTRA_LT_CCLM, INTRA_L_CCLM, 또는 INTRA_T_CCLM 인트라 예측 모드를 포함한다.
단계(1402)에서, 디바이스는 현재의 블록의 필터링된 재구성된 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 현재의 블록의 루마 컴포넌트의 재구성된 루마 샘플들에 필터를 적용한다. 필터는 필터들의 세트에 속하고, 필터들의 세트는 2 개의 필터를 오직 포함한다. 필터는 신택스 엘리먼트의 값이 제1 값일 때에 제1 필터이거나, 필터는 신택스 엘리먼트의 값이 제2 값일 때에 제2 필터이다. 예를 들어, sps_chroma_vertical_collocated_flag가 1과 동일할 때, F3 필터가 적용되거나, sps_chroma_vertical_collocated_flag가 0과 동일할 때, F4 필터가 적용된다.
특히, x = 0..nTbW - 1, y = 0..nTbH - 1인 다운-샘플링된 공동위치된 루마 샘플들 pDsY[ x ][ y ]는 다음과 같이 유도된다:
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pDstY[ x ][ y ] = pY[ x ][ y ]
- 이와 다를 경우에, 다음이 적용된다:
- 1-차원 필터 계수들 어레이 F2는 다음과 같이 특정된다.
F2[ 0 ] = 1, F2[ 1 ] = 2, F2[ 2 ] = 1
- 이와 다를 경우에, 2-차원 필터 계수들 어레이들 F3 및 F4는 다음과 같이 특정된다:
F3[ 0 ][ 1 ] = 1, F3[ 1 ][ 1 ] = 4, F3[ 2 ][ 1 ] = 1, F3[ 1 ][ 0 ] = 1, F3[ 1 ][ 2 ] = 1
F4[ 0 ][ 1 ] = 1, F4[ 1 ][ 1 ] = 2, F4[ 2 ][ 1 ] = 1
F4[ 0 ][ 2 ] = 1, F4[ 1 ][ 2 ] = 2, F4[ 2 ][ 2 ] = 1
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
pDsY[ x ][ y ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] +
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pDsY[ x ][ y ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ SubHeightC * y ] +
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1][ SubHeightC * y + 1 ] + 4 ) >> 3
단계(1403)에서, 디바이스는 다운-샘플링된 이웃하는 좌측 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 이웃하는 좌측 루마 샘플들에 필터를 적용한다. 필터는 필터들의 세트에 속하고, 필터들의 세트는 2 개의 필터를 오직 포함한다. 필터는 신택스 엘리먼트의 값이 제1 값일 때에 제1 필터이거나, 필터는 신택스 엘리먼트의 값이 제2 값일 때에 제2 필터이다. 예를 들어, sps_chroma_vertical_collocated_flag가 1과 동일할 때, F3 필터가 적용되거나, sps_chroma_vertical_collocated_flag가 0과 동일할 때, F4 필터가 적용된다.
특히, numSampL이 0 초과일 때, 선택된 이웃하는 좌측 크로마 샘플들 pSelC[idx]은 idx = 0..cntL - 1인 p[-1 ][ pickPosL[ idx ]]과 동일하게 설정되고, idx = 0..cntL-1인 선택된 다운-샘플링된 이웃하는 좌측 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 유도된다:
- 변수 y는 pickPosL[ idx ]과 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ - 1][ y ]
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ - SubWidthC ][ SubHeightC * y - 1 ] +
F3[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] +
F3[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 - SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ -1 - SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ -SubWidthC ][ SubHeightC * y ] +
F4[ 1 ][ 2 ] * pY[ -SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 - SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 - SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3
단계(1404)에서, 디바이스는 다운-샘플링된 이웃하는 상부 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 이웃하는 상부 루마 샘플들에 필터를 적용한다. 필터는 필터들의 세트에 속하고, 필터들의 세트는 2 개의 필터를 오직 포함한다. 필터는 신택스 엘리먼트의 값이 제1 값일 때에 제1 필터이거나, 필터는 신택스 엘리먼트의 값이 제2 값일 때에 제2 필터이다. 예를 들어, sps_chroma_vertical_collocated_flag가 1과 동일할 때, F3 필터가 적용되거나, sps_chroma_vertical_collocated_flag가 0과 동일할 때, F4 필터가 적용된다.
특히, numSampT가 0 초과일 때, 선택된 이웃하는 상부 크로마 샘플들 pSelC[ idx ]은 idx = cntL..cntL + cntT - 1인 p[ pickPosT[ idx - cntL ]][ -1 ]와 동일하게 설정되고, idx = 0..cntL + cntT - 1인 다운-샘플링된 이웃하는 상부 루마 샘플들 pSelDsY[ idx ]은 다음과 같이 특정된다:
- 변수 x는 pickPosT[ idx - cntL ]와 동일하게 설정된다.
- SubWidthC 및 SubHeightC의 둘 모두가 1과 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = pY[ x ][ - 1]
- 이와 다를 경우에, 다음이 적용된다:
- sps_chroma_vertical_collocated_flag가 1과 동일할 경우에, 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ - 1 - SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x - 1 ][ -SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -SubHeightC] +
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 - SubHeightC ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] +
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ -1 ] + 2 ) >> 2
- 이와 다를 경우에(sps_chroma_vertical_collocated_flag는 0과 동일함), 다음이 적용된다:
- bCTUboundary가 FALSE와 동일할 경우에, 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] +
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3
- 이와 다를 경우에(bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] + F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2.
단계들(1402, 1403, 및 1404) 사이에는 시퀀스가 없다.
1405에서, 디바이스는 필터링된 재구성된 루마 샘플들에 기초하여 선형 모델 계수들을 획득한다. 필터링된 재구성된 루마 샘플들은 단계(1402)에서의 현재의 블록의 필터링된 재구성된 루마 샘플들, 단계(1403)에서의 다운-샘플링된 이웃하는 좌측 루마 샘플들, 및/또는 단계(1404)에서의 다운-샘플링된 이웃하는 상부 루마 샘플들을 포함한다. 단계(1406)에서, 디바이스는 현재의 블록의 크로마 컴포넌트의 예측 값을 획득하기 위하여, 획득된 선형 모델 계수들 및 현재의 블록의 필터링된 재구성된 루마 샘플들에 기초하여 교차-컴포넌트 예측을 수행한다.
위에서 설명된 실시예들은 도 15에서 예시되는 바와 같이, 코딩 디바이스(1500)에서 구현될 수 있다. 코딩 디바이스(1500)는 다음을 포함한다:
- 비트스트림으로부터 제1 신택스 엘리먼트를 파싱하도록 구성된 파싱 유닛(1501). 위에서 설명된 바와 같이, 예를 들어, 제1 신택스 엘리먼트는 SPS 파라미터 내에 포함되는 sps_cclm_colocated_chroma_flag이다.
- 현재의 블록의 필터링된 재구성된 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 현재의 블록의 루마 컴포넌트의 재구성된 루마 샘플들에 필터를 적용하도록 구성된 필터링 유닛(1502) - 필터는 필터들의 세트에 속하고, 필터들의 세트는 2 개의 필터를 오직 포함하고, 필터는 신택스 엘리먼트의 값이 제1 값일 때에 제1 필터이거나, 필터는 신택스 엘리먼트의 값이 제2 값일 때에 제2 필터임 -.
예를 들어, sps_chroma_vertical_collocated_flag가 1과 동일할 때, F3 필터가 적용되거나, sps_chroma_vertical_collocated_flag가 0과 동일할 때, F4 필터가 적용된다.
필터링 유닛(1502)은 또한, 위에서 개시된 바와 같이, 다운-샘플링된 이웃하는 좌측 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 이웃하는 좌측 루마 샘플들에 필터를 적용할 수 있고, 다운-샘플링된 이웃하는 상부 루마 샘플들을 획득하기 위하여, 제1 신택스 엘리먼트에 적어도 기초하여 이웃하는 상부 루마 샘플들에 필터를 적용할 수 있다.
- 필터링된 재구성된 루마 샘플들에 기초하여 선형 모델 계수들을 획득하도록 구성된 획득 유닛(1503).
- 현재의 블록의 크로마 컴포넌트의 예측 값을 획득하기 위하여, 획득된 선형 모델 계수들 및 현재의 블록의 필터링된 재구성된 루마 샘플들에 기초하여 (교차-컴포넌트 루마로부터의 크로마 예측 또는 CCLM 예측과 같은) 교차-컴포넌트 예측을 수행하도록 구성된 예측 유닛(1504).
특히, 다음의 실시예들이 본 명세서에서 제공된다:
실시예 1. 선형 모델을 이용한 인트라 예측을 위한 방법으로서:
- 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여, 현재의 블록의 루마 컴포넌트를 위한 필터를 결정하는 단계;
- 필터링된 재구성된 루마 샘플들(예컨대, (현재의 블록의 루마 컴포넌트와 같은) 현재의 블록 내부의 필터링된 재구성된 루마 샘플)을 획득하기 위하여, 현재의 블록의 루마 컴포넌트의 재구성된 루마 샘플들, 및 현재의 블록에 이웃하는 선택된 포지션(현재의 블록의 좌측 또는 상부 측부에 인접한 하나 또는 몇몇 행들/열들)에서의 루마 샘플들의 영역에 결정된 필터를 적용하는 단계;
선형 모델 유도의 입력으로서의 필터링된 재구성된 루마 샘플들(예컨대, 루마 샘플들의 세트는 현재의 블록 내부의 필터링된 재구성된 루마 샘플들 및 현재의 블록 외부의 필터링된 이웃하는 루마 샘플들을 포함하고, 예를 들어, 결정된 필터는 또한, 현재의 블록 외부의 이웃하는 루마 샘플들에 적용될 수 있음)에 기초하여, 선형 모델 계수들을 획득하는 단계; 및
현재의 크로마 블록의 예측자를 획득하기 위하여, 획득된 선형 모델 계수들 및 현재의 블록의 필터링된 재구성된 루마 샘플들(예컨대, (현재의 블록의 루마 컴포넌트와 같은) 현재의 블록 내부의 필터링된 재구성된 루마 샘플들)에 기초하여 교차-컴포넌트 예측을 수행하는 단계를 포함한다.
실시예 2. 실시예 1의 방법에 있어서, 필터를 결정하는 단계는:
현재의 블록 내에서의 루마 샘플의 포지션 및 크로마 포맷에 기초하여 필터를 결정하는 단계; 또는
현재의 블록 내에서의 루마 샘플들의 개개의 포지션들 및 크로마 포맷에 기초하여, 현재의 블록에 속하는 복수의 루마 샘플을 위한 개개의 필터들을 결정하는 단계를 포함한다.
실시예 3. 실시예 1의 방법에 있어서, 필터를 결정하는 단계는, 다음:
(현재의 블록이 속하는 픽처의 크로마 포맷에 따른 표로부터 획득될 수 있는 SubWidthC 및 SubHeightC와 같은) 서브샘플링 비율 정보,
(크로마 포맷이 (SubWidthC 및 SubHeightC와 같은) 서브샘플링 비율 정보를 획득하기 위하여 이용되는 것과 같은) 현재의 블록이 속하는 픽처의 크로마 포맷,
현재의 블록 내에서의 루마 샘플의 포지션,
현재의 블록에 속하는 루마 샘플들의 수,
현재의 블록의 폭 및 높이, 및/또는
현재의 블록 내에서의 루마 샘플에 대한 서브샘플링된 크로마 샘플의 포지션
중의 하나 이상에 기초하여 필터를 결정하는 단계를 포함한다.
실시예 4. 실시예 3의 방법에 있어서, 서브샘플링된 크로마 샘플이 대응하는 루마 샘플과 공동-위치되지 않을 때, 복수의 필터와 (SubWidthC 및 SubHeightC와 같은, 또는 현재의 블록의 폭 및 높이의 값들과 같은) 서브샘플링 비율 정보 사이의 (표 4와 같은) 제1 사전설정된 관계는 필터의 결정을 위하여 이용되고; 및/또는,
서브샘플링된 크로마 샘플이 대응하는 루마 샘플과 공동-위치될 때, 복수의 필터와 (SubWidthC 및 SubHeightC와 같은, 또는 현재의 블록의 폭 및 높이의 값들과 같은) 서브샘플링 비율 정보 사이의 (표 2 또는 표 3의 어느 하나와 같은) 사전설정된 제2 또는 제3 사전설정된 관계는 필터의 결정을 위하여 이용된다.
실시예 5. 실시예 4의 방법에 있어서, 복수의 필터와 (SubWidthC 및 SubHeightC와 같은, 또는 현재의 블록의 폭 및 높이의 값들과 같은) 서브샘플링 비율 정보 사이의 (표 2 또는 표 3의 어느 하나와 같은) 제2 또는 제3 관계는 현재의 블록에 속하는 (이용가능한 루마 샘플과 같은) 어떤 루마 샘플들의 수에 기초하여 결정된다.
실시예 6. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터는 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1과 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에, 다음은 필터들의 세트 {F3, F5, F6}에 대하여 적용되고;
F3[0] = 1, F3[1] = 2, F3[2] = 1
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F5[0][1] = 1, F5[1][1] = 4, F3[2][1] = 1, F5[1][0] = 1, F5[1][2] = 1
F6[0][1] = 1, F6[1][1] = 2, F6[2][1] = 1,
F6[0][2] = 1, F6[1][2] = 2, F6[2][2] = 1,
F2[0] = 1, F2[1] = 1
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F5[0][1] = 0, F5[1][1] = 8, F3[2][1] = 0, F5[1][0] = 0, F5[1][2] = 0
F6[0][1] = 2, F6[1][1] = 4, F6[2][1] = 2,
F6[0][2] = 0, F6[1][2] = 0, F6[2][2] = 0,
F2[0] = 2, F2[1] = 0.
실시예 7. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터는 순차적인 필터들의 표기를 이용하여 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1과 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에, 다음은 필터들의 세트 {F1, F2, F3}에 대하여 적용되고:
F1[ 0 ] = 2, F1[ 1 ] = 0
F2[0] = 1, F2[1] = 2, F2[2] = 1;
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F1[0] = 1, F1[1] = 1,
F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F3[0][1] = 0, F3[1][1] = 8, F3[2][1] = 0, F3[1][0] = 0, F3[1][2] = 0
F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2,
F4[0][2] = 0, F4[1][2] = 0, F4[2][2] = 0.
실시예 7a. 실시예들 1 내지 6의 방법에 있어서, 필터는 순차적인 필터들의 표기를 이용하여 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1과 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에, 다음은 필터들의 세트 {F1, F2, F3}에 대하여 적용되고:
F1[ 0 ] = 4, F1[ 1 ] = 0
F2[0] = 1, F2[1] = 2, F2[2] = 1;
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F1[0] = 3, F1[1] = 1,
F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F3[0][1] = 0, F3[1][1] = 8, F3[2][1] = 0, F3[1][0] = 0, F3[1][2] = 0
F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2,
F4[0][2] = 0, F4[1][2] = 0, F4[2][2] = 0
실시예 7b. 실시예 7의 방법에 있어서, 필터들 Fa∈{F1 ... F4} 중의 하나에 의한 필터링은 패딩 동작, 및 필터 Fa보다 더 많은 비-제로 계수들을 가지는 필터 Fb를 이용하여 수행된다.
실시예 7c. 실시예 7b의 방법에 있어서, Fa는 F1이고, Fb는 F2이고, 필터는 순차적인 필터들의 표기를 이용하여 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1와 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에:
F2[0] = 1, F2[1] = 2, F2[2] = 1;
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F3[0][1] = 0, F3[1][1] = 8, F3[2][1] = 0, F3[1][0] = 0, F3[1][2] = 0
F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2,
F4[0][2] = 0, F4[1][2] = 0, F4[2][2] = 0
실시예 8. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터는 현재의 블록의 크로마 컴포넌트가 서브샘플링되지 않을 때, 필터링된 재구성된 루마 샘플의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서 비-제로 계수들을 포함한다.
(
Figure pct00064
과 같이, 계수 "4"의 중심 포지션은 필터링된 재구성된 루마 샘플의 포지션에 대응함)
실시예 9. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 크로마 포맷은 YCbCr 4:4:4 크로마 포맷, YCbCr 4:2:0 크로마 포맷, YCbCr 4:2:2 크로마 포맷, 또는 모노크롬을 포함한다.
실시예 10. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 선형 모델 유도의 입력으로서 이용된 루마 샘플들의 세트는:
(
Figure pct00065
과 같은) 필터링된 재구성된 루마 샘플들로부터 서브샘플링되는 경계 루마 재구성된 샘플들을 포함한다.
실시예 11. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 현재의 크로마 블록에 대한 예측자는 다음에 기초하여 획득되고:
Figure pct00066
여기서,
Figure pct00067
은 크로마 샘플을 표현하고,
Figure pct00068
은 (대응하는 재구성된 루마 샘플의 포지션이 현재의 블록 내부에 있는 것과 같은) 대응하는 재구성된 루마 샘플을 표현한다.
실시예 12. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 선형 모델은 멀티-방향 선형 모델(MDLM)이고, 선형 모델 계수들은 MDLM을 획득하기 위하여 이용된다.
실시예 13. 인코딩 디바이스에 의해 구현된 인코딩의 방법으로서:
(교차-컴포넌트 선형 모델인 CCLM 또는 멀티-방향 선형 모델인 MDLM과 같은) 선형 모델을 이용하여 인트라 예측을 수행하는 단계; 및
복수의 신택스 엘리먼트를 포함하는 비트스트림을 생성하는 단계 - 복수의 신택스 엘리먼트는 (CCLM의 루마 필터의 선택, 특히, sps_cclm_colocated_chroma_flag와 같은 SPS 플래그와 같은) 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함함 - 를 포함한다.
실시예 14. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 신택스 엘리먼트의 값이 1 또는 참일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되지 않고;
신택스 엘리먼트의 값이 0 또는 거짓일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용된다.
실시예 15. 디코딩 디바이스에 의해 구현된 디코딩의 방법으로서:
비트스트림으로부터 복수의 신택스 엘리먼트를 파싱(parsing)하는 단계 - 복수의 신택스 엘리먼트는 (CCLM의 루마 필터의 선택, 특히, sps_cclm_colocated_chroma_flag와 같은 SPS 플래그와 같은) 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함함 -; 및
(CCLM과 같은) 표시된 선형 모델을 이용하여 인트라 예측을 수행하는 단계를 포함한다.
실시예 16. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 신택스 엘리먼트의 값이 0 또는 거짓일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되고;
신택스 엘리먼트의 값이 1 또는 참일 때, 필터는 선형 모델 결정 및 예측을 위하여 루마 샘플에 적용되지 않는다.
실시예 17. 선형 모델을 이용하여 인트라 예측을 수행하기 위한 방법으로서:
크로마 포맷 정보에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계 - 크로마 포맷 정보는 현재의 블록이 속하는 픽처의 크로마 포맷을 표시함 -;
다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계;
선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들, 및 다운-샘플링된 루마 참조 샘플들에 대응하는 크로마 참조 샘플들에 기초하여, 하나 이상의 선형 모델 계수들을 결정하는 단계; 및
선형 모델 계수들, 및 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들에 기초하여, 루마 블록에 대응하는 크로마 블록의 예측 샘플들을 획득하는 단계를 포함한다.
실시예 18. 실시예 17의 방법에 있어서, 크로마 포맷 정보에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계는:
크로마 포맷 정보에 기초하여 (SubWidthC 및 SubHeightC와 같은) 서브샘플링 비율 정보를 결정하는 단계; 및
(SubWidthC 및 SubHeightC와 같은) 서브샘플링 비율 정보에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계를 포함한다.
실시예 19. 실시예 17의 방법에 있어서, 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계는 다음:
크로마 포맷이 4:2:0 컬러 포맷일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제1 세트를 결정하는 단계;
크로마 포맷이 4:2:2 컬러 포맷일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제2 세트를 결정하는 단계; 또는
크로마 포맷이 4:4:4 컬러 포맷일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제3 세트를 결정하는 단계 중의 하나 이상을 포함한다.
실시예 20. 실시예 18의 방법에 있어서, (SubWidthC 및 SubHeightC와 같은) 서브샘플링 비율 정보에 기초하여 다운-샘플링 필터들의 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계는 다음:
SubWidthC=2 및 SubHeightC=2일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제1 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계;
SubWidthC=2 및 SubHeightC=1일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제2 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계; 또는
SubWidthC=1 및 SubHeightC=1일 때, 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제3 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계 중의 하나 이상을 포함한다.
실시예 21. 실시예들 17 내지 20 중의 어느 하나의 실시예의 방법에 있어서, 서브샘플링된 크로마 샘플이 현재의 블록 내에서의 대응하는 루마 샘플과 공동-위치될 경우에,
다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계는:
제1 다운-샘플링 필터를 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 루마 블록에서의 재구성된 루마 샘플의 다운-샘플링된 루마 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 공간적 영역은: 재구성된 루마 샘플(다운-샘플링된 루마 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 -; 및
제1 다운-샘플링 필터들을 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 선택된 이웃하는 루마 샘플의 다운-샘플링된 참조 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 공간적 영역은: 선택된 이웃하는 루마 샘플(다운-샘플링된 루마 참조 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 - 을 포함하고;
제1 다운-샘플링 필터는 다운-샘플링 필터들의 세트 중에 있다.
실시예 22. 실시예 21의 방법에 있어서, 4:2:2 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=1), 제1 다운-샘플링 필터는 1D 비-분리가능한 필터이거나; 또는
4:2:0 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=2), 제1 다운-샘플링 필터는 2D 비-분리가능한 필터이다.
실시예 23. 실시예 21의 방법에 있어서, 4:2:2 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=1), 제1 다운-샘플링 필터(표준에서 인용된 1D 비-분리가능한 필터 F2)는 [1, 2, 1] 또는
Figure pct00069
에 의해 표현되고, 비-제로 계수들은 필터링된 재구성된 루마 샘플의 포지션에 수평으로 인접한 포지션들에 있고, 계수 "2"를 갖는 중심 포지션은 필터링된 재구성된 루마 샘플의 포지션에 대응한다.
실시예 24. 실시예 21의 방법에 있어서, 4:2:0 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=2), 제1 다운-샘플링 필터(VVC 표준에서 인용된 2D 비-분리가능한 필터 F3)는
Figure pct00070
에 의해 표현되고, 비-제로 계수들은 필터링된 재구성된 루마 샘플의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에 있고, 계수 "4"를 갖는 중심 포지션은 필터링된 재구성된 루마 샘플의 포지션에 대응한다.
실시예 25. 실시예들 17 내지 20 중의 어느 하나의 실시예의 방법에 있어서, 서브샘플링된 크로마 샘플이 현재의 블록 내에서의 대응하는 루마 샘플과 공동-위치되지 않을 경우에,
다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계는:
제2 다운-샘플링 필터를 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 루마 블록에서의 재구성된 루마 샘플의 다운-샘플링된 루마 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 공간적 영역은: 재구성된 루마 샘플(다운-샘플링된 루마 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 -; 및
제2 다운-샘플링 필터들을 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 선택된 이웃하는 루마 샘플의 다운-샘플링된 참조 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 공간적 영역은: 선택된 이웃하는 루마 샘플(다운-샘플링된 루마 참조 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 - 을 포함하고;
제2 다운-샘플링 필터는 다운-샘플링 필터들의 세트 중에 있다.
실시예 26. 실시예 25의 방법에 있어서, 4:2:2 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=1), 제2 다운-샘플링 필터는 1D 비-분리가능한 필터이거나; 또는
4:2:0 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=2), 제2 다운-샘플링 필터는 2D 비-분리가능한 필터이다.
실시예 27. 실시예 25의 방법에 있어서, 4:2:2 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=1), 제2 다운-샘플링 필터(표준에서 인용된 1D 비-분리가능한 필터 F1, F2)는 [2, 0] 또는 [1, 2, 1] 또는
Figure pct00071
에 의해 표현되고, 비-제로 계수들은 필터링된 재구성된 루마 샘플의 포지션에 수평으로 인접한 포지션들에 있고, 계수 "2"를 갖는 중심 포지션은 필터링된 재구성된 루마 샘플의 포지션에 대응한다.
실시예 28. 실시예 25의 방법에 있어서, 4:2:0 컬러 포맷이 이용될 경우에(SubWidthC=2 및 SubHeightC=2), 제2 다운-샘플링 필터(VVC 표준에서 인용된 2D 비-분리가능한 필터 F4)는
Figure pct00072
에 의해 표현되고, 비-제로 계수들은 필터링된 재구성된 루마 샘플의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에 있고, 계수 "2"를 갖는 중심 포지션은 필터링된 재구성된 루마 샘플의 포지션에 대응한다.
실시예 29. 실시예들 21 내지 24 중의 어느 하나의 실시예의 방법에 있어서, 서브샘플링된 크로마 샘플이 현재의 블록 내에서의 대응하는 루마 샘플과 공동-위치되는 것은 다음:
크로마 샘플 유형 2, 또는
크로마 샘플 유형 4 중의 임의의 하나에 의해 표현된다.
실시예 30. 실시예들 25 내지 28 중의 어느 하나의 실시예의 방법에 있어서, 서브샘플링된 크로마 샘플이 현재의 블록 내에서의 대응하는 루마 샘플과 공동-위치되지 않는 것은 다음:
크로마 샘플 유형 0,
크로마 샘플 유형 1,
크로마 샘플 유형 3, 또는
크로마 샘플 유형 5 중의 임의의 하나에 의해 표현된다.
실시예 31. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터는 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1과 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에, 다음은 필터들의 세트 {F3, F5, F6}에 대하여 적용되고;
F3[0] = 1, F3[1] = 2, F3[2] = 1
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F5[0][1] = 1, F5[1][1] = 4, F3[2][1] = 1, F5[1][0] = 1, F5[1][2] = 1
F6[0][1] = 1, F6[1][1] = 2, F6[2][1] = 1,
F6[0][2] = 1, F6[1][2] = 2, F6[2][2] = 1,
F2[0] = 1, F2[1] = 1
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F5[0][1] = 0, F5[1][1] = 8, F3[2][1] = 0, F5[1][0] = 0, F5[1][2] = 0
F6[0][1] = 2, F6[1][1] = 4, F6[2][1] = 2,
F6[0][2] = 0, F6[1][2] = 0, F6[2][2] = 0,
F2[0] = 2, F2[1] = 0.
실시예 32. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터는 순차적인 필터들의 표기를 이용하여 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1과 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에, 다음은 필터들의 세트 {F1, F2, F3}에 대하여 적용되고:
F1[ 0 ] = 2 또는 4, F1[ 1 ] = 0
F2[0] = 1, F2[1] = 2, F2[2] = 1;
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F1[0] = 1 또는 3, F1[1] = 1,
F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F3[0][1] = 0, F3[1][1] = 8, F3[2][1] = 0, F3[1][0] = 0, F3[1][2] = 0
F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2,
F4[0][2] = 0, F4[1][2] = 0, F4[2][2] = 0
실시예 33. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 크로마 포맷이 YUV 4:2:2로서 특정될 때, 또는 크로마 및 루마 컴포넌트들이 공동위치될 때(도 10b에서 "크로마 샘플 유형 2" 및 "크로마 샘플 유형 4"로서 도시됨), 루마 컴포넌트로부터의 샘플링은 루마 블록의 상부 측부에 대한 오프셋으로 수행된다.
실시예 34. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계가 CTU 라인 경계일 때, [1 2 1]/4 필터는 참조 샘플들에 적용된다.
실시예 35. 실시예 34의 방법에 있어서, availTL이 TRUE와 동일하고 bCTUboundary가 TRUE와 동일할 경우에, 다음은 F3으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= ( F[0] * pY [ - 1 ] [- 1 ] +
+ F[1] * pY[ 0 ] [ - 1 ] +
+ F[2] * pY[ 1] [ - 1 ] +
+ 2 ) >> 2.
실시예 36. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)으로서 특정될 때, [1 2 1 ; 1 2 1] / 8 필터가 참조 샘플들에 적용된다.
실시예 37. 실시예 36의 방법에 있어서, availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 때, 다음은 F6으로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] =
= (F[0][1] * pY[- 1 ][ -1 ] +
+ F[0][2] * pY[ - 1 ][ -2 ] +
+ F[1][1] * pY[ 0 ][ -1 ] +
+ F[1][2] * pY[ 0 ][ -2] +
+ F[2][1] * pY[ 1 ][ -1 ] +
+ F[2][2] * pY[ 1 ][ -2 ] + 4 ) >> 3.
실시예 38. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서,
상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계가 CTU 라인 경계일 때, [1 2 1]/4 필터가 참조 샘플들에 적용된다.
실시예 39. 실시예 38의 방법에 있어서, availTL이 FALSE와 동일하고 bCTUboundary가 TRUE와 동일할 때, 다음이 적용된다:
pSelDsY [ idx ] = pY[ 0 ][ -1 ].
실시예 40. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:0(또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷)일 때, [1 1] / 2 필터가 참조 샘플들에 적용된다.
실시예 41. 실시예 40의 방법에 있어서, availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 때, 다음은 F2로 설정된 F에 대하여 적용된다:
pSelDsY [ idx ] = ( F[1] * pY[ 0 ][ -2 ] + F[0] * pY[ 0 ][ -1 ] + 1 ) >> 1
실시예 42. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족되지 않을 때(예를 들어, bCTUboundary가 FALSE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] +
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3.
실시예 43. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족될 때(예를 들어, bCTUboundary가 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] +
F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2.
실시예 44. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족되지 않고, 제2 조건이 충족될 때(예를 들어, bCTUboundary가 FALSE와 동일하고, availTL이 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 ][ -1 ] + F4[ 0 ][ 2 ] * pY[ -1 ][ -2 ] +
F4[ 1 ][ 1 ] * pY[ 0 ][ -1 ] + F4[ 1 ][ 2 ] * pY[ 0 ][ -2 ] +
F4[ 2 ][ 1 ] * pY[ 1 ][ -1 ] + F4[ 2 ][ 2 ] * pY[ 1 ][ -2 ] + 4 ) >> 3.
실시예 45. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족되고, 제2 조건이 충족될 때(예를 들어, bCTUboundary가 TRUE와 동일하고, availTL이 TRUE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
F2[ 2 ] * pY[ 1 ][ - 1 ] + 2 ) >> 2.
실시예 46. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족되지 않고, 제2 조건이 충족되지 않을 때(bCTUboundary가 FALSE와 동일하고, availTL이 FALSE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 1 ) >> 1; 또는
pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 2 ) >> 2.
실시예 47. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 적어도 제1 조건이 충족되고, 제2 조건이 충족되지 않을 때(bCTUboundary가 TRUE와 동일하고, availTL이 FALSE와 동일함), 다음이 적용된다:
pSelDsY[ idx ] = pY[ 0 ][ -1 ].
실시예 48. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 제2 조건이 충족될 경우에(예를 들어, availTL이 TRUE와 동일함), 다음이 적용된다:
pDsY[ 0 ][ y ] = ( F1[ 0 ] * pY[ 0 ][ SubHeightC * y ] +
F1[ 1 ] * pY[ 0 ][ SubHeightC * y + 1] + 2 ) >> 2.
실시예 49. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 패딩 동작은 재구성된 루마 블록의 경계 상에서 필터 선택을 구현하기 위하여 이용된다.
실시예 50. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 방법은:
필터링된 영역의 포지션이 블록 경계 상에 있을 때, 필터링 프로세스를 조절하는 단계를 더 포함한다.
실시예 51. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터 계수들은 포지션-종속적이다.
실시예 52. 실시예 51의 방법에 있어서, 좌측 측부가 이용가능하지 않을 때, 좌측 측부의 샘플들은 재구성된 블록의 가장 좌측 재구성된 샘플들을 수평으로 복사함으로써 획득된다.
실시예 53. 실시예 51의 방법에 있어서, 상부 측부가 이용가능하지 않을 때, 상부 측부의 샘플들은 재구성된 블록의 가장 상부 재구성된 샘플들을 수직으로 복사함으로써 획득된다.
실시예 54. 선행 실시예들 중의 어느 하나의 실시예의 방법에 있어서, 필터들 Fa∈{F1 ... F4} 중의 하나에 의한 필터링은 패딩 동작 및 필터 Fb를 이용함으로써 수행되고, 필터 Fb는 필터 Fa보다 더 많은 비-제로 계수들을 가진다.
실시예 55. 실시예 54의 방법에 있어서, Fa가 F1이고 Fb가 F2일 때, 필터 F1은 패딩 및 필터 F2를 이용하는 필터링의 조합으로서 구현된다.
실시예 56. 실시예들 49 내지 55 중의 어느 하나의 실시예의 방법에 있어서, 필터는 다음과 같이 조건적으로 결정된다:
(SubWidthC==1 및 SubHeightC==1와 같은, 사양에서 정의된 표로부터 획득된 서브샘플링 비율 정보와 같은) 제1 조건이 충족되지 않을 경우에:
F2[0] = 1, F2[1] = 2, F2[2] = 1;
F3[ i ][ j ] = F4[ i ][ j ] = 0, 여기서, i = 0..2, j = 0..2임
(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보와 같은) 제2 조건이 충족될 경우에,
F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
이와 다를 경우에(예컨대, 제2 조건(SubWidthC==2 및 SubHeightC==2와 같은, 표로부터 획득된 서브샘플링 비율 정보)이 충족되지 않을 경우),
F3[0][1] = 0, F3[1][1] = 8, F3[2][1] = 0, F3[1][0] = 0, F3[1][2] = 0
F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2,
F4[0][2] = 0, F4[1][2] = 0, F4[2][2] = 0.
실시예 57. 실시예들 49 내지 56 중의 어느 하나의 실시예의 방법에 있어서, 패딩 동작은:
availT가 거짓과 동일할 때, x = -1..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 루마 샘플들 pY[ x ][ 0 ]과 동일하게 설정되는 것; 또는
availL이 거짓과 동일할 때, x = -1, -2, -3, y = -1..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]는 루마 샘플들 pY[ 0 ][ y ]과 동일하게 설정되는 것을 포함한다.
이전의 양태들 또는 양태들의 임의의 가능한 실시예에서, 필터를 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들 및/또는 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들에 적용하기 위하여, 필터는 다운-샘플링 필터들의 세트에 속하고, 필터들의 세트는 감소된 수의 필터들을 오직 포함한다. 그것은 다운-샘플링 필터들의 세트 내에서의 필터들의 수가 감소된다는 것을 의미한다. 예를 들어, (sps_chroma_vertical_collocated_flag와 같은) 신택스 엘리먼트의 값에 따라, 필터들의 세트는 F3 및 F4 필터들을 오직 포함하고, 그것은 오직 F3 및 F4가 선택될 수 있다는 것을 의미한다. 대응하게도, 그것은 재구성된 루마 샘플들, 및/또는 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들에 적용된 필터들을 위한 탭(tap)들의 수를 감소시킬 수 있다.
도 16은 컨텐츠 분배 서비스를 실현하기 위한 컨텐츠 공급 시스템(3100)을 도시하는 블록도이다. 이 컨텐츠 공급 시스템(3100)은 캡처 디바이스(3102), 단말 디바이스(3106)를 포함하고, 임의적으로, 디스플레이(3126)를 포함한다. 캡처 디바이스(3102)는 통신 링크(3104) 상에서 단말 디바이스(3106)와 통신한다. 통신 링크는 위에서 설명된 통신 채널(13)을 포함할 수 있다. 통신 링크(3104)는 WIFI, 이더넷(Ethernet), 케이블(Cable), 무선 (3G/4G/5G), USB, 또는 그 임의의 종류의 조합 등을 포함하지만, 이것으로 제한되지는 않는다.
캡처 디바이스(3102)는 데이터를 생성하고, 위의 실시예들에서 도시된 바와 같은 인코딩 방법에 의해 데이터를 인코딩할 수 있다. 대안적으로, 캡처 디바이스(3102)는 데이터를 스트리밍 서버(도면들에서 도시되지 않음)로 분배할 수 있고, 서버는 데이터를 인코딩하고 인코딩된 데이터를 단말로 송신한다. 캡처 디바이스(3102)는 카메라, 스마트 폰 또는 패드, 컴퓨터 또는 랩톱, 비디오 회의 시스템, PDA, 차량 장착형 디바이스, 또는 이들 중의 임의의 것의 조합 등을 포함하지만, 이것으로 제한되지는 않는다. 예를 들어, 캡처 디바이스(3102)는 위에서 설명된 바와 같은 출발지 디바이스(12)를 포함할 수 있다. 데이터가 비디오를 포함할 때, 캡처 디바이스(3102) 내에 포함된 비디오 인코더(20)는 실제적으로, 비디오 인코딩 프로세싱을 수행할 수 있다. 데이터가 오디오(즉, 음성)를 포함할 때, 캡처 디바이스(3102) 내에 포함된 오디오 인코더는 실제적으로, 오디오 인코딩 프로세싱을 수행할 수 있다. 일부 실제적인 시나리오들에 대하여, 캡처 디바이스(3102)는 인코딩된 비디오 및 오디오 데이터를 함께 멀티플렉싱함으로써 인코딩된 비디오 및 오디오 데이터를 분배한다. 다른 실제적인 시나리오들에 대하여, 예를 들어, 비디오 회의 시스템에서는, 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터가 멀티플렉싱되지 않는다. 캡처 디바이스(3102)는 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터를 별도로 단말 디바이스(3106)로 분배한다.
컨텐츠 공급 시스템(3100)에서, 단말 디바이스(3100)는 인코딩된 데이터를 수신하고 이를 재생한다. 단말 디바이스(3106)는 전술한 인코딩된 데이터를 디코딩할 수 있는 스마트 폰 또는 패드(3108), 컴퓨터 또는 랩톱(3110), 네트워크 비디오 레코더(network video recorder)(NVR)/디지털 비디오 레코더(digital video recorder)(DVR)(3112), TV(3114), 셋톱 박스(set top box)(STB)(3116), 비디오 회의 시스템(3118), 비디오 감시 시스템(3120), 개인 정보 단말(personal digital assistant)(PDA)(3122), 차량 장착형 디바이스(3124), 또는 이들 중의 임의의 것의 조합 등과 같은, 데이터 수신 및 복원 능력을 가지는 디바이스일 수 있다. 예를 들어, 단말 디바이스(3106)는 위에서 설명된 바와 같은 목적지 디바이스(14)를 포함할 수 있다. 인코딩된 데이터가 비디오를 포함할 때, 단말 디바이스 내에 포함된 비디오 디코더(30)는 비디오 디코딩을 수행하도록 우선순위화된다. 인코딩된 데이터가 오디오를 포함할 때, 단말 디바이스 내에 포함된 오디오 디코더는 오디오 디코딩 프로세싱을 수행하도록 우선순위화된다.
그 디스플레이를 갖는 단말 디바이스, 예를 들어, 스마트 폰 또는 패드(3108), 컴퓨터 또는 랩톱(3110), 네트워크 비디오 레코더(NVR)/디지털 비디오 레코더(DVR)(3112), TV(3114), 개인 정보 단말(PDA)(3122), 또는 차량 장착형 디바이스(3124)에 대하여, 단말 디바이스는 디코딩된 데이터를 그 디스플레이로 이송할 수 있다. 디스플레이를 구비하지 않은 단말 디바이스, 예를 들어, STB(3116), 비디오 회의 시스템(3118), 또는 비디오 감시 시스템(3120)에 대하여, 외부 디스플레이(3126)는 디코딩된 데이터를 수신하고 도시하기 위하여 그 안에 연결된다.
이 시스템에서의 각각의 디바이스가 인코딩 또는 디코딩을 수행할 때, 전술한 실시예들에서 도시된 바와 같은 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스가 이용될 수 있다.
도 17은 단말 디바이스(3106)의 예의 구조를 도시하는 도면이다. 단말 디바이스(3106)가 캡처 디바이스(3102)로부터 스트림을 수신한 후에, 프로토콜 진행 유닛(3202)은 스트림의 송신 프로토콜을 분석한다. 프로토콜은 실시간 스트리밍 프로토콜(Real Time Streaming Protocol)(RTSP), 하이퍼 텍스트 전송 프로토콜(Hyper Text Transfer Protocol)(HTTP), HTTP 라이브 스트리밍 프로토콜(HTTP Live streaming protocol)(HLS), MPEG-DASH, 실시간 전송 프로토콜(Real-time Transport protocol)(RTP), 실시간 메시징 프로토콜(Real Time Messaging Protocol)(RTMP), 또는 그 임의의 종류의 조합 등을 포함하지만, 이것으로 제한되지는 않는다.
프로토콜 진행 유닛(3202)이 스트림을 프로세싱한 후에, 스트림 파일이 생성된다. 파일은 디멀티플렉싱 유닛(3204)으로 출력된다. 디멀티플렉싱 유닛(3204)은 멀티플렉싱된 데이터를 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터로 분리할 수 있다. 위에서 설명된 바와 같이, 일부 실제적인 시나리오들에 대하여, 예를 들어, 비디오 회의 시스템에서는, 인코딩된 오디오 데이터 및 인코딩된 비디오 데이터가 멀티플렉싱되지 않는다. 이 상황에서, 인코딩된 데이터는 디멀티플렉싱 유닛(3204)을 통하지 않고, 비디오 디코더(3206) 및 오디오 디코더(3208)로 송신된다.
디멀티플렉싱 프로세싱을 통해, 비디오 기본 스트림(elementary steam)(ES), 오디오 ES, 및 임의적으로 서브타이틀(subtitle)이 생성된다. 전술한 실시예들에서 설명된 바와 같은 비디오 디코더(30)를 포함하는 비디오 디코더(3206)는 비디오 프레임을 생성하기 위하여 전술한 실시예들에서 도시된 바와 같은 디코딩 방법에 의해 비디오 ES를 디코딩하고, 이 데이터를 동기 유닛(3212)으로 이송한다. 오디오 디코더(3208)는 오디오 프레임을 생성하기 위하여 오디오 ES를 디코딩하고, 이 데이터를 동기 유닛(3212)으로 이송한다. 대안적으로, 비디오 프레임을 동기 유닛(3212)으로 이송하기 전에, 비디오 프레임은 버퍼(도 17에서 도시되지 않음) 내에 저장될 수 있다. 유사하게, 오디오 프레임을 동기 유닛(3212)으로 이송하기 전에, 오디오 프레임은 버퍼(도 17에서 도시되지 않음) 내에 저장될 수 있다.
동기 유닛(3212)은 비디오 프레임 및 오디오 프레임을 동기화하고, 비디오/오디오를 비디오/오디오 디스플레이(3214)로 공급한다. 예를 들어, 동기 유닛(3212)은 비디오 및 오디오 정보의 제시를 동기화한다. 정보는 코딩된 오디오 및 시각적 데이터의 제시에 관한 시간 스탬프(time stamp)들 및 데이터 스트림 자체의 전달에 관한 시간 스탬프들을 이용하여 신택스에서 코딩될 수 있다.
서브타이틀이 스트림 내에 포함될 경우에, 서브타이틀 디코더(3210)는 서브타이틀을 디코딩하고, 서브타이틀을 비디오 프레임 및 오디오 프레임과 동기화하고, 비디오/오디오/서브타이틀을 비디오/오디오/서브타이틀 디스플레이(3216)로 공급한다.
본 출원은 전술한 시스템으로 제한되지는 않고, 전술한 실시예들에서의 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스의 어느 하나가 다른 시스템, 예를 들어, 자동차 시스템 내로 편입될 수 있다.
수학적 연산자들
이 출원에서 이용된 수학적 연산자들은 C 프로그래밍 언어에서 이용된 것들과 유사하다. 그러나, 정수 제산 및 산술 시프트 연산들의 결과들은 더 정밀하게 정의되고, 지수화 및 실수값 제산과 같은 추가적인 연산들이 정의된다. 번호부여 및 카운팅 규정들은 일반적으로, 0으로부터 시작하고, 예컨대, "제1"은 0-번째와 동등하고, "제2"는 1-번째와 동등한 등과 같다.
산술 연산자들
다음의 산술 연산자들은 다음과 같이 정의된다:
+ 가산
- (2-인수 연산자로서의) 감산 또는 (단항 접두사 연산자로서의) 부정(negation)
* 행렬 승산을 포함하는 승산
xy 지수화. x를 y의 거듭제곱으로 특정함. 다른 문맥들에서, 이러한 표기는 지수화로서의 해독을 위해 의도되지 않은 윗첨자법(superscripting)을 위하여 이용된다.
/ 제로를 향한 결과의 버림(truncation)을 갖는 정수 제산. 예를 들어, 7 / 4 및 -7 / -4는 1로 버림되고, -7 / 4 및 7 / -4는 -1로 버림된다.
÷ 버림 또는 올림(rounding)이 의도되지 않는 수학적 수학식들에서의 제산을 나타내기 위하여 이용됨.
Figure pct00073
버림 또는 올림이 의도되지 않는 수학적 수학식들에서의 제산을 나타내기 위하여 이용됨.
Figure pct00074
i가 x로부터 y까지 그리고 y를 포함하는 모든 정수 값들을 취하는 f( i )의 합산.
x % y 모듈러스(Modulus). x >= 0 및 y > 0인 정수들에 대하여 오직 정의된, y에 의해 제산된 x의 나머지.
논리적 연산자들
다음의 논리적 연산자들은 다음과 같이 정의된다:
x && y x 및 y의 불리언 논리적 "and"
x | | y x 및 y의 불리언 논리적 "or"
! 불리언 논리적 "not"
x ? y : z x가 TRUE이거나 0과 동일하지 않을 경우에, y의 값으로 구해지고; 이와 다를 경우에, z의 값으로 구해짐.
관계 연산자들
다음의 관계 연산자들은 다음과 같이 정의된다:
> 초과
>= 이상
< 미만
<= 이하
= = 동일
!= 동일하지 않음
관계 연산자가 값 "na"(적용가능하지 않음)가 배정된 신택스 엘리먼트 또는 변수에 적용될 때, 값 "na"는 신택스 엘리먼트 또는 변수를 위한 구분 값으로서 취급된다. 값 "na"는 임의의 다른 값과 동일하지 않은 것으로 고려된다.
비트별 연산자들
다음의 비트별 연산자들은 다음과 같이 정의된다:
& 비트별 "and". 정수 인수들에 대해 연산할 때, 정수 값의 2의 보수 표현에 대해 연산함. 또 다른 인수보다 더 적은 비트들을 포함하는 2진 인수에 대해 연산할 때, 더 짧은 인수는 0과 동일한 더 많은 상위 비트들을 추가함으로써 확장된다.
| 비트별 "or". 정수 인수들에 대해 연산할 때, 정수 값의 2의 보수 표현에 대해 연산함. 또 다른 인수보다 더 적은 비트들을 포함하는 2진 인수에 대해 연산할 때, 더 짧은 인수는 0과 동일한 더 많은 상위 비트들을 추가함으로써 확장된다.
^ 비트별 "배타적 or". 정수 인수들에 대해 연산할 때, 정수 값의 2의 보수 표현에 대해 연산함. 또 다른 인수보다 더 적은 비트들을 포함하는 2진 인수에 대해 연산할 때, 더 짧은 인수는 0과 동일한 더 많은 상위 비트들을 추가함으로써 확장된다.
x >> y x 대 y 2진 디지트들의 2의 보수 정수 표현의 산술적 우측 시프트. 이 함수는 y의 비-음수 정수 값들에 대하여 오직 정의된다. 우측 시프트의 결과로서 최상위 비트(MSB)들로 시프트된 비트들은 시프트 연산 이전에, x의 MSB와 동일한 값을 가진다.
x << y x 대 y 2진 디지트들의 2의 보수 정수 표현의 산술적 좌측 시프트. 이 함수는 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까지의 정수 값들을 취하고, 여기서, x, y, 및 z는 정수 숫자들이고, z은 y 초과이다.
수학적 함수들
다음의 수학적 함수들이 정의된다:
Figure pct00075
Asin( x ) -1.0 내지 1.0의 범위에 있는 인수 x에 대해 연산하는 삼각법 역 사인 함수, 여기서, 출력 값은 라디안(radian)의 단위인, -π÷2 내지 π÷2까지의 범위임
Atan( x ) 인수 x에 대해 연산하는 삼각법 역 탄젠트 함수, 여기서, 출력 값은 라디안의 단위인, -π÷2 내지 π÷2의 범위임
Figure pct00076
Ceil( x ) x 이상인 가장 작은 정수.
Clip1Y( x ) = Clip3( 0, ( 1 << BitDepthY ) - 1, x )
Clip1C( x ) = Clip3( 0, ( 1 << BitDepthC ) - 1, x )
Clip3( x, y, z ) =
Figure pct00077
Cos( x ) 라디안의 단위인 인수 x에 대해 연산하는 삼각법 코사인 함수.
Floor( x ) x 이하인 가장 큰 정수.
Figure pct00078
Ln( x ) x의 자연 로그(밑-e 로그, 여기서, e는 자연 로그 밑 상수 2.718 281 828...).
Log2( x ) x의 밑-2 로그.
Log10( x ) x의 밑-10 로그.
Figure pct00079
Figure pct00080
Round( x ) = Sign( x ) * Floor( Abs( x ) + 0.5 )
Figure pct00081
Sin( x ) 라디안의 단위인 인수 x에 대해 연산하는 삼각법 사인 함수
Sqrt( x ) =
Figure pct00082
Swap( x, y ) = ( y, x )
Tan( x ) 라디안의 단위인 인수 x에 대해 연산하는 삼각법 탄젠트 함수
연산 선행(operation precedence)의 순서
표현식에서의 선행의 순서가 괄호들의 이용에 의해 명시적으로 표시되지 않을 때, 다음의 규칙들이 적용된다:
- 더 높은 선행의 연산들은 더 낮은 선행의 임의의 연산 전에 구해진다.
- 동일한 선행의 연산들은 좌측으로부터 우측으로 순차적으로 구해진다.
이하의 표는 최고로부터 최저로의 연산들의 선행을 특정하고; 표에서의 더 높은 포지션은 더 높은 선행을 표시한다.
C 프로그래밍 언어에서 또한 이용되는 그 연산자들에 대하여, 이 명세서에서 이용된 선행의 순서는 C 프로그래밍 언어에서 이용된 것과 동일하다.
Figure pct00083
논리적 연산들의 텍스트 설명
텍스트에서, 다음의 형태로 수학적으로 설명되는 바와 같은 논리적 연산들의 명령문(statement)은:
if( 조건 0 )
명령문 0
else if( 조건 1 )
명령문 1
...
else /* 나머지 조건에 대한 유익한 언급 */
명령문 n
다음의 방식으로 설명될 수 있다:
... 다음과 같이 / ... 다음이 적용된다:
- 조건 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, ..."와 정합함으로써 식별될 수 있다.
텍스트에서, 다음의 형태로 수학적으로 설명되는 바와 같은 논리적 연산들의 명령문은:
if( 조건 0a && 조건 0b )
명령문 0
else if( 조건 1a | | 조건 1b )
명령문 1
...
else
명령문 n
다음의 방식으로 설명될 수 있다:
... 다음과 같이 / ... 다음이 적용된다:
- 다음의 조건들의 전부가 참일 경우에, 명령문 0:
- 조건 0a
- 조건 0b
- 이와 다르게, 다음의 조건들 중의 하나 이상이 참일 경우에, 명령문 1:
- 조건 1a
- 조건 1b
- ...
- 이와 다를 경우에, 명령문 n
텍스트에서, 다음의 형태로 수학적으로 설명되는 바와 같은 논리적 연산들의 명령문은:
if( 조건 0 )
명령문 0
if( 조건 1 )
명령문 1
다음의 방식으로 설명될 수 있다:
조건 0일 때, 명령문 0
조건 1일 때, 명령문 1.
출원의 실시예들은 비디오 코딩에 기초하여 주로 설명되었지만, 코딩 시스템(10), 인코더(20), 및 디코더(30)(그리고 대응하게도, 시스템(10))의 실시예들 및 본 명세서에서 설명된 다른 실시예들은 또한, 스틸 픽처 프로세싱 또는 코딩, 즉, 비디오 코딩에서와 같은 임의의 선행 또는 연속 픽처에 독립적인 개별적인 픽처의 프로세싱 또는 코딩을 위하여 구성될 수 있다는 것이 주목되어야 한다. 일반적으로, 픽처 프로세싱 코딩이 단일 픽처(17)로 제한될 경우에, 오직 인터-예측 유닛들(244(인코더) 및 344(디코더))이 이용가능하지 않을 수 있다. 비디오 인코더(20) 및 비디오 디코더(30)의 모든 다른 기능성들(또한, 툴들 또는 기술들로서 지칭됨)은 스틸 픽처 프로세싱, 예컨대, 잔차 계산(204/304), 변환(206), 양자화(208), 역 양자화(210/310), (역) 변환(212/312), 파티셔닝(262/362), 인트라-예측(254/354), 및/또는 루프 필터링(220, 320), 및 엔트로피 코딩(270) 및 엔트로피 디코딩(304)을 위하여 동일하게 이용될 수 있다.
인코더(20) 및 디코더(30)의 예컨대, 실시예들, 및 예컨대, 인코더(20) 및 디코더(30)를 참조하여 본 명세서에서 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수 있다. 소프트웨어로 구현될 경우에, 기능들은 컴퓨터-판독가능 매체 상에서 저장될 수 있거나, 하나 이상의 명령들 또는 코드로서 통신 매체들 상에서 송신될 수 있고 하드웨어-기반 프로세싱 유닛에 의해 실행될 수 있다. 컴퓨터-판독가능 매체들은 데이터 저장 매체들과 같은 유형의 매체에 대응하는 컴퓨터-판독가능 저장 매체들, 또는 예컨대, 통신 프로토콜에 따라 하나의 장소로부터 또 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들을 포함할 수 있다. 이러한 방식으로, 컴퓨터-판독가능 매체들은 일반적으로 (1) 비-일시적 유형의 컴퓨터-판독가능 저장 매체들, 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체들은 이 개시내용에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 매체를 포함할 수 있다.
제한하는 것이 아니라, 예로서, 이러한 컴퓨터-판독가능 저장 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 저장하기 위하여 이용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속은 컴퓨터-판독가능 매체로 적절하게 칭해진다. 예를 들어, 동축 케이블, 광섬유 케이블, 트위스트 페어 (twisted pair), 디지털 가입자 회선(digital subscriber line)(DSL), 또는 무선 기술들 예컨대, 적외선, 라디오(radio), 및 마이크로파(microwave)를 이용하여 웹사이트, 서버, 또는 다른 원격 소스로부터 명령들이 송신될 경우, 동축 케이블, 광섬유 케이블, 트위스트 페어, DSL, 또는 무선 기술들 예컨대, 적외선, 라디오, 및 마이크로파는 매체의 정의 내에 포함된다. 그러나, 컴퓨터-판독가능 저장 매체들 및 데이터 저장 매체들은 접속들, 반송파들, 신호들, 또는 다른 일시적 매체들을 포함하는 것이 아니라, 그 대신에, 비-일시적, 유형의 저장 매체들에 관한 것이라는 것을 이해해야 한다. 본 명세서에서 이용된 바와 같은 디스크(disk) 및 디스크(disc)는 컴팩트 디스크(compact disc)(CD), 레이저 디스크(laser disc), 광학 디스크(optical disc), 디지털 다용도 디스크(digital versatile disc)(DVD), 플로피 디스크(floppy disk) 및 블루레이 디스크(Blu-ray disc)를 포함하고, 여기서 디스크(disk)들은 통상 데이터를 자기적으로 재생하는 반면, 디스크(disc)들은 데이터를 레이저들로 광학적으로 재생한다. 상기의 조합들은 컴퓨터-판독가능 매체들의 범위 내에 또한 포함되어야 한다.
명령들은 하나 이상의 디지털 신호 프로세서(digital signal processor)(DSP)들, 범용 마이크로프로세서들, 애플리케이션 특정 집적 회로(application specific integrated circuit)(ASIC)들, 필드 프로그래밍가능한 로직 어레이(field programmable logic array)(FPGA)들, 또는 다른 등가의 통합된 또는 개별 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수 있다. 따라서, 본 명세서에서 이용된 바와 같은 용어 "프로세서"는 상기한 구조 또는 본 명세서에서 설명된 기법들의 구현을 위해 적당한 임의의 다른 구조 중의 임의의 것을 지칭할 수 있다. 추가적으로, 일부 양태들에서, 본 명세서에서 설명된 기능은 인코딩 및 디코딩을 위해 구성되고 결합된 코덱에서 통합된 전용 하드웨어 모듈 및/또는 소프트웨어 모듈들 내에 제공될 수 있다. 또한, 기술들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
이 개시내용의 기법들은 무선 핸드셋(wireless handset), 집적 회로(integrated circuit)(IC) 또는 IC들의 세트(예컨대, 칩셋)를 포함하는 널리 다양한 디바이스들 또는 장치들에서 구현될 수 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위하여 이 개시내용에서 설명되어 있지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 요구하지는 않는다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛들은 코덱 하드웨어 유닛 내에 조합될 수 있거나, 적당한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서들을 포함하는 상호동작하는 하드웨어 유닛들의 집합에 의해 제공될 수 있다.

Claims (48)

  1. 크로마 블록 예측 방법으로서,
    비트스트림으로부터 제1 신택스 엘리먼트를 파싱하는 단계,
    현재의 블록의 필터링된 재구성된 루마 샘플들을 획득하기 위하여, 상기 제1 신택스 엘리먼트에 적어도 기초하여 상기 현재의 블록의 루마 컴포넌트의 재구성된 루마 샘플들에 필터를 적용하는 단계 - 상기 필터들은 필터들의 세트에 속하고, 상기 필터들의 세트는 2 개의 필터를 오직 포함하고, 상기 필터는 상기 신택스 엘리먼트의 값이 제1 값일 때에 제1 필터이고, 상기 필터는 상기 신택스 엘리먼트의 값이 제2 값일 때에 제2 필터임 -;
    상기 필터링된 재구성된 루마 샘플들에 기초하여, 선형 모델 계수들을 획득하는 단계; 및
    상기 현재의 블록의 크로마 컴포넌트의 예측 값을 획득하기 위하여, 상기 획득된 선형 모델 계수들 및 상기 현재의 블록의 상기 필터링된 재구성된 루마 샘플들에 기초하여 교차-컴포넌트 예측을 수행하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 필터들의 세트는 F3 및 F4 필터들을 오직 포함하고, 상기 F3 필터의 계수들은 [1, 1, 4, 1, 1]이고, 상기 F4 필터의 계수들은 [1, 1, 2, 2, 1, 1]인, 방법.
  3. 제2항에 있어서,
    상기 제 1 신택스 엘리먼트는 sps_chroma_vertical_collocated_flag인, 방법.
  4. 제3항에 있어서,
    sps_chroma_vertical_collocated_flag가 1과 동일할 때, 상기 F3 필터가 결정되거나, sps_chroma_vertical_collocated_flag가 0과 동일할 때, 상기 F4 필터가 결정되는, 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    제2 신택스 엘리먼트를 획득하기 위하여 상기 비트스트림을 파싱하는 단계 - 상기 제2 신택스 엘리먼트는 현재의 디코딩을 위하여 이용된 인트라 예측 모드가 선형 모델 LM 모드인 것을 표시하기 위하여 이용됨 - 를 더 포함하는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 방법은 비디오 시퀀스에서의 현재의 이미지 블록을 디코딩하기 위하여 이용되고, 상기 현재의 이미지 블록은 상기 제1 루마 블록 및 상기 현재의 크로마 블록을 포함하고, 상기 비디오 시퀀스에서의 이미지는 4:2:0 포맷 또는 4:2:2 포맷인, 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    비트스트림으로부터 제1 신택스 엘리먼트를 파싱하는 단계는:
    상기 제1 신택스 엘리먼트를 획득하기 위하여, 상기 비트스트림에서의 시퀀스 파라미터 세트(sequence parameter set)(SPS) 파라미터를 파싱하는 단계를 포함하는, 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 방법은:
    상기 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들에 상기 결정된 필터를 적용하는 단계 - 상기 현재의 블록에 이웃하는 선택된 포지션에서의 상기 루마 샘플들은 상기 현재의 블록의 좌측 측부에 인접한 하나 또는 몇몇 열(column)들의 샘플들 및/또는 상기 현재의 블록의 상부 측부에 인접한 하나 또는 몇몇 행(row)들의 샘플들임 - 를 더 포함하는, 방법.
  9. 선형 모델을 이용한 인트라 예측을 위한 방법으로서,
    - 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여, 상기 현재의 블록의 루마 컴포넌트를 위한 필터를 결정하는 단계;
    - 필터링된 재구성된 루마 샘플들을 획득하기 위하여, 상기 현재의 블록의 상기 루마 컴포넌트의 재구성된 루마 샘플들 및/또는 상기 현재의 블록에 이웃하는 선택된 포지션에서의 루마 샘플들의 영역에 상기 결정된 필터를 적용하는 단계;
    상기 필터링된 재구성된 루마 샘플들에 기초하여, 선형 모델 계수들을 획득하는 단계; 및
    상기 현재의 블록의 크로마 컴포넌트의 예측 값을 획득하기 위하여, 상기 획득된 선형 모델 계수들 및 상기 현재의 블록의 상기 필터링된 재구성된 루마 샘플들에 기초하여 교차-컴포넌트 예측을 수행하는 단계를 포함하는, 방법.
  10. 제9항에 있어서,
    상기 필터는 다음과 같이 조건적으로 결정되고:
    제1 조건이 충족되지 않을 때, 상기 제1 조건은 SubWidthC==1 및 SubHeightC==1을 포함하고, 상기 필터는 필터들의 세트 {F2, F3}에 속하고:
    F2[0] = 1, F2[1] = 2, F2[2] = 1;
    F3[ i ][ j ] = F4[ i ][ j ] = 0, i = 0..2, j = 0..2이고,
    제2 조건이 충족될 때, 상기 제2 조건은 SubWidthC==1 및 SubHeightC==1을 포함하고, 상기 필터는 필터들의 세트 {F3, F4}에 속하고:
    F3[0][1] = 1, F3[1][1] = 4, F3[2][1] = 1, F3[1][0] = 1, F3[1][2] = 1,
    F4[0][1] = 1, F4[1][1] = 2, F4[2][1] = 1,
    F4[0][2] = 1, F4[1][2] = 2, F4[2][2] = 1;
    이와 다르게, 제2 조건이 충족되지 않을 때, 상기 제2 조건은 SubWidthC==2 및 SubHeightC==2를 포함하고, 상기 필터는:
    F4[0][1] = 2, F4[1][1] = 4, F4[2][1] = 2으로서 정의되는, 방법.
  11. 제9항 또는 제10항에 있어서,
    상기 크로마 포맷은 YCbCr 4:4:4 크로마 포맷, YCbCr 4:2:0 크로마 포맷, YCbCr 4:2:2 크로마 포맷, 또는 모노크롬을 포함하는, 방법.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서,
    신택스 엘리먼트를 비트스트림으로 인코딩하고, 상기 신택스 엘리먼트는 상기 현재의 블록에 속하는 루마 샘플들을 위한 필터의 선택을 표시하는, 방법.
  13. 제12항에 있어서,
    상기 신택스 엘리먼트는 sps_chroma_vertical_collocated_flag이고, 상기 비트스트림에서의 시퀀스 파라미터 세트(SPS) 파라미터 내에 포함되는, 방법.
  14. 선형 모델을 이용한 인트라 예측을 위한 방법으로서,
    - 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계;
    - 재구성된 이웃하는 상부 루마 샘플들이 이용가능하지 않을 때, 재구성된 루마 블록으로부터 패딩(padding)함으로써 이웃하는 샘플들의 2 개의 상부 행을 획득하는 단계;
    - 상기 재구성된 이웃하는 좌측 루마 샘플들이 이용가능하지 않을 때, 재구성된 루마 블록으로부터 패딩함으로써 이웃하는 샘플들의 3 개의 좌측 열을 획득하는 단계;
    - 상기 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들을 획득하는 단계; 및
    - 상기 다운-샘플링 필터들의 세트 중에서의 개개의 다운-샘플링 필터를 이웃하는 샘플들의 상기 획득된 2 개의 상부 행의 선택된 샘플들에 적용함으로써 상부 다운-샘플링된 루마 참조 샘플들을 획득하는 단계 - 선택된 샘플이 상부-좌측 포지션(1202)에 있을 때, 상기 개개의 다운-샘플링 필터는 재구성된 및 패딩된 이웃하는 샘플들의 조합에 적용됨 -; 및
    - 상기 다운-샘플링 필터들의 세트 중에서의 개개의 다운-샘플링 필터를 이웃하는 샘플들의 상기 획득된 3 개의 좌측 열의 선택된 샘플들에 적용함으로써 좌측 다운-샘플링된 루마 참조 샘플들을 획득하는 단계;
    - 상부 및 좌측 다운-샘플링된 루마 참조 샘플들의 상부 또는 좌측 또는 조합, 및 상기 다운-샘플링된 루마 참조 샘플들에 대응하는 크로마 참조 샘플들에 기초하여, 하나 이상의 선형 모델 계수들을 결정하는 단계; 및
    상기 선형 모델 계수들, 및 상기 루마 블록에서의 상기 재구성된 루마 샘플들의 상기 다운-샘플링된 루마 샘플들에 기초하여, 상기 루마 블록에 대응하는 크로마 블록의 예측 샘플들을 획득하는 단계를 포함하는, 방법.
  15. 제14항에 있어서,
    상기 선형 모델은 멀티-방향 선형 모델(multi-directional linear model)(MDLM)이고, 상기 선형 모델 계수들은 상기 MDLM을 획득하기 위하여 이용되는, 방법.
  16. 인코딩 디바이스에 의해 구현된 인코딩의 방법으로서,
    선형 모델을 이용하여 인트라 예측을 수행하는 단계; 및
    복수의 신택스 엘리먼트를 포함하는 비트스트림을 생성하는 단계 - 상기 복수의 신택스 엘리먼트는 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함하고, 상기 신택스 엘리먼트는 sps_cclm_colocated_chroma_flag임 - 를 포함하는, 방법.
  17. 제16항에 있어서,
    상기 신택스 엘리먼트의 값이 1 또는 참(true)일 때, 상기 필터는 선형 모델 결정 및 상기 예측을 위하여 루마 샘플에 적용되지 않고;
    상기 신택스 엘리먼트의 상기 값이 0 또는 거짓(false)일 때, 상기 필터는 상기 선형 모델 결정 및 상기 예측을 위하여 루마 샘플에 적용되는, 방법.
  18. 디코딩 디바이스에 의해 구현된 디코딩의 방법으로서,
    비트스트림으로부터 복수의 신택스 엘리먼트를 파싱하는 단계 - 상기 복수의 신택스 엘리먼트는 블록에 속하는 루마 샘플을 위한 필터의 선택을 표시하는 신택스 엘리먼트를 포함하고, 상기 신택스 엘리먼트는 sps_cclm_colocated_chroma_flag임 -; 및
    상기 신택스 엘리먼트에 기초하여 인트라 예측을 수행하는 단계를 포함하는, 방법.
  19. 제18항에 있어서,
    상기 신택스 엘리먼트의 상기 값이 0 또는 거짓일 때, 상기 필터는 상기 선형 모델 결정 및 상기 예측을 위하여 루마 샘플에 적용되고;
    신택스 엘리먼트의 값이 1 또는 참일 때, 상기 필터는 상기 선형 모델 결정 및 상기 예측을 위하여 루마 샘플에 적용되지 않는, 방법.
  20. 선형 모델을 이용하여 인트라 예측을 수행하기 위한 방법으로서,
    크로마 포맷 정보에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계 - 상기 크로마 포맷 정보는 현재의 블록이 속하는 픽처의 크로마 포맷을 표시함 -;
    상기 다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 상기 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 상기 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계;
    상기 선택된 이웃하는 루마 샘플들의 상기 다운-샘플링된 루마 참조 샘플들, 및 상기 다운-샘플링된 루마 참조 샘플들에 대응하는 크로마 참조 샘플들에 기초하여, 하나 이상의 선형 모델 계수들을 결정하는 단계; 및
    상기 선형 모델 계수들, 및 상기 루마 블록에서의 상기 재구성된 루마 샘플들의 상기 다운-샘플링된 루마 샘플들에 기초하여, 상기 루마 블록에 대응하는 크로마 블록의 예측 샘플들을 획득하는 단계를 포함하는, 방법.
  21. 제20항에 있어서,
    상기 크로마 포맷 정보에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계는:
    상기 크로마 포맷 정보에 기초하여 서브샘플링 비율 정보(SubWidthC 및 SubHeightC)를 결정하는 단계; 및
    상기 서브샘플링 비율 정보(SubWidthC 및 SubHeightC)에 기초하여 상기 다운-샘플링 필터들의 세트를 결정하는 단계를 포함하는, 방법.
  22. 제21항에 있어서,
    상기 현재의 블록이 속하는 픽처의 크로마 포맷에 기초하여 다운-샘플링 필터들의 세트를 결정하는 단계는 다음:
    상기 크로마 포맷이 4:2:0 컬러 포맷일 때, 상기 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제1 세트를 결정하는 단계;
    상기 크로마 포맷이 4:2:2 컬러 포맷일 때, 상기 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제2 세트를 결정하는 단계; 또는
    상기 크로마 포맷이 4:4:4 컬러 포맷일 때, 상기 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제3 세트를 결정하는 단계
    중의 하나 이상을 포함하는, 방법.
  23. 제21항에 있어서,
    상기 서브샘플링 비율 정보(SubWidthC 및 SubHeightC)에 기초하여 상기 다운-샘플링 필터들의 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계는 다음:
    SubWidthC=2 및 SubHeightC=2일 때, 상기 현재의 블록의 상기 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제1 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계;
    SubWidthC=2 및 SubHeightC=1일 때, 상기 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제2 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계; 또는
    SubWidthC=1 및 SubHeightC=1일 때, 상기 현재의 블록의 루마 블록을 위하여 이용되는 다운-샘플링 필터들의 제3 세트(다운-샘플링 필터 계수들의 세트)를 결정하는 단계
    중의 하나 이상을 포함하는, 방법.
  24. 제20항 내지 제23항 중 어느 한 항에 있어서,
    상기 서브샘플링된 크로마 샘플이 상기 현재의 블록 내에서의 대응하는 루마 샘플과 공동-위치될 경우에,
    상기 다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 상기 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 상기 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계는:
    제1 다운-샘플링 필터를 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 상기 루마 블록에서의 재구성된 루마 샘플의 다운-샘플링된 루마 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 상기 공간적 영역은: 상기 재구성된 루마 샘플(상기 다운-샘플링된 루마 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 -; 및
    상기 제1 다운-샘플링 필터들을 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 선택된 이웃하는 루마 샘플의 다운-샘플링된 참조 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 상기 공간적 영역은: 상기 선택된 이웃하는 루마 샘플(상기 다운-샘플링된 루마 참조 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 - 를 포함하고;
    상기 제1 다운-샘플링 필터는 상기 다운-샘플링 필터들의 세트 중에 있는, 방법.
  25. 제20항 내지 제23항 중 어느 한 항에 있어서,
    상기 서브샘플링된 크로마 샘플이 상기 현재의 블록 내에서의 상기 대응하는 루마 샘플과 공동-위치되지 않을 경우에,
    상기 다운-샘플링 필터들의 세트 중에서 개개의 다운-샘플링 필터를 적용함으로써, 상기 현재의 블록의 루마 블록에서의 재구성된 루마 샘플들의 다운-샘플링된 루마 샘플들 및 상기 루마 블록 외부의 선택된 이웃하는 루마 샘플들의 다운-샘플링된 루마 참조 샘플들을 획득하는 단계는:
    제2 다운-샘플링 필터를 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 상기 루마 블록에서의 재구성된 루마 샘플의 다운-샘플링된 루마 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 상기 공간적 영역은: 상기 재구성된 루마 샘플(상기 다운-샘플링된 루마 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 -; 및
    상기 제2 다운-샘플링 필터들을 재구성된 루마 샘플들의 공간적 영역에 적용함으로써 선택된 이웃하는 루마 샘플의 다운-샘플링된 참조 샘플을 획득하는 단계 - 재구성된 루마 샘플들의 상기 공간적 영역은: 상기 선택된 이웃하는 루마 샘플(상기 다운-샘플링된 루마 참조 샘플)의 포지션에 수평으로 및/또는 수직으로 인접한 포지션들에서의 재구성된 루마 샘플들을 포함함 - 를 포함하고;
    상기 제2 다운-샘플링 필터는 상기 다운-샘플링 필터들의 세트 중에 있는, 방법.
  26. 제20항 내지 제24항 중 어느 한 항에 있어서,
    상기 크로마 포맷이 YUV 4:2:2로서 특정될 때, 또는 크로마 및 루마 컴포넌트들이 공동위치될 때, 루마 컴포넌트로부터의 샘플링은 상기 루마 블록의 상부 측부에 대한 오프셋으로 수행되는, 방법.
  27. 제20항 내지 제26항 중 어느 한 항에 있어서,
    상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:2로서 특정되거나 블록 경계가 CTU 라인 경계일 때, [1 2 1]/4 필터가 상기 참조 샘플들에 적용되는, 방법.
  28. 제20항 내지 제26항 중 어느 한 항에 있어서,
    블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:0 또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷으로서 특정될 때, [1 2 1 ; 1 2 1] / 8 필터가 상기 참조 샘플들에 적용되는, 방법.
  29. 제28항에 있어서,
    - availTL이 TRUE와 동일하고 bCTUboundary가 FALSE와 동일할 경우에, 다음은 F6으로 설정된 F에 대하여 적용되는:
    pSelDsY [ idx ] =
    = (F[0][1] * pY[- 1 ][ -1 ] +
    + F[0][2] * pY[ - 1 ][ -2 ] +
    + F[1][1] * pY[ 0 ][ -1 ] +
    + F[1][2] * pY[ 0 ][ -2] +
    + F[2][1] * pY[ 1 ][ -1 ] +
    + F[2][2] * pY[ 1 ][ -2 ] + 4 ) >> 3, 방법.
  30. 제20항 내지 제26항 중 어느 한 항에 있어서,
    블록 경계가 CTU 라인 경계가 아니고, 상부-좌측 샘플이 이용가능하고, 크로마 포맷이 YUV 4:2:0 또는 수직 크로마 서브샘플링을 이용하는 임의의 다른 크로마 포맷으로서 특정될 때, [1 1] / 2 필터가 상기 참조 샘플들에 적용되는, 방법.
  31. 제30항에 있어서,
    - availTL이 FALSE와 동일하고 bCTUboundary가 FALSE와 동일할 때, 다음은 F2로 설정된 F에 대하여 적용되는:
    pSelDsY [ idx ] = ( F[1] * pY[ 0 ][ -2 ] + F[0] * pY[ 0 ][ -1 ] + 1 ) >> 1, 방법.
  32. 제20항 내지 제26항 중 어느 한 항에 있어서,
    적어도 bCTUboundary가 FALSE와 동일할 때, 다음이 적용되는:
    pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x - 1 ][ -1 ] +
    F4[ 0 ][ 2 ] * pY[ SubWidthC * x - 1 ][ -2 ] +
    F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ -1 ] +
    F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ -2] +
    F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ -1] +
    F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ -2 ] + 4 ) >> 3, 방법.
  33. 제20항 내지 제26항 중 어느 한 항에 있어서,
    적어도 bCTUboundary가 TRUE와 동일할 때, 다음이 적용되는:
    pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x - 1 ][ -1 ] +
    F2[ 1 ] * pY[ SubWidthC * x ][ -1 ] +
    F2[ 2 ] * pY[ SubWidthC * x + 1][ -1 ] + 2 ) >> 2, 방법.
  34. 제20항 내지 제26항 중 어느 한 항에 있어서,
    적어도 bCTUboundary가 FALSE와 동일하고 availTL이 TRUE와 동일할 때, 다음이 적용되는:
    pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ -1 ][ -1 ] + F4[ 0 ][ 2 ] * pY[ -1 ][ -2 ] +
    F4[ 1 ][ 1 ] * pY[ 0 ][ -1 ] + F4[ 1 ][ 2 ] * pY[ 0 ][ -2 ] +
    F4[ 2 ][ 1 ] * pY[ 1 ][ -1 ] + F4[ 2 ][ 2 ] * pY[ 1 ][ -2 ] + 4 ) >> 3, 방법.
  35. 제20항 내지 제26항 중 어느 한 항에 있어서,
    적어도 bCTUboundary가 TRUE와 동일하고 availTL이 TRUE와 동일할 때, 다음이 적용되는:
    pSelDsY[ idx ] = ( F2[ 0 ] * pY[ -1 ][ -1 ] + F2[ 1 ] * pY[ 0 ][ -1 ] +
    F2[ 2 ] * pY[ 1 ][ - 1 ] + 2 ) >> 2, 방법.
  36. 제20항 내지 제26항 중 어느 한 항에 있어서,
    적어도 bCTUboundary가 FALSE와 동일하고 availTL이 FALSE와 동일할 때, 다음이 적용되는:
    pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 1 ) >> 1; 또는
    pSelDsY[ idx ] = ( F1[ 1 ] * pY[ 0 ][ -2 ] + F1[ 0 ] * pY[ 0 ][ -1 ] + 2 ) >> 2, 방법.
  37. 제20항 내지 제36항 중 어느 한 항에 있어서,
    패딩 동작은 재구성된 루마 블록의 경계 상에서 필터 선택을 구현하기 위하여 이용되는, 방법.
  38. 제20항 내지 제37항 중 어느 한 항에 있어서,
    상기 필터링된 영역의 포지션이 상기 블록 경계 상에 있을 때, 상기 필터링 프로세스를 조절하는 단계를 더 포함하는, 방법.
  39. 제20항 내지 제38항 중 어느 한 항에 있어서,
    필터 계수들은 포지션-종속적인, 방법.
  40. 제39항에 있어서,
    좌측 측부가 이용가능하지 않을 때, 상기 좌측 측부의 샘플들은 상기 재구성된 블록의 가장 좌측 재구성된 샘플들을 수평으로 복사함으로써 획득되는, 방법.
  41. 제39항에 있어서,
    상부 측부가 이용가능하지 않을 때, 상기 상부 측부의 샘플들은 상기 재구성된 블록의 가장 상부 재구성된 샘플들을 수직으로 복사함으로써 획득되는, 방법.
  42. 제37항에 있어서,
    상기 패딩 동작은:
    availT가 거짓과 동일할 때, x = -1..SubWidthC * numSampT - 1, y = -1, -2인 이웃하는 상부 루마 샘플들 pY[ x ][ y ]은 상기 루마 샘플들 pY[ x ][ 0 ]과 동일하게 설정되는 것; 또는
    availL이 거짓과 동일할 때, x = -1, -2, -3, y = -1..SubHeightC * numSampL - 1인 이웃하는 좌측 루마 샘플들 pY[ x ][ y ]는 상기 루마 샘플들 pY[ 0 ][ y ]과 동일하게 설정되는 것을 포함하는, 방법.
  43. 제9항 내지 제15항, 제16항 내지 제17항, 및 제20항 내지 제42항 중 어느 한 항에 따른 상기 방법을 수행하기 위한 프로세싱 회로부를 포함하는 인코더(20).
  44. 제1항 내지 제15항, 제18항 내지 제19항, 및 제20항 내지 제42항 중 어느 한 항에 따른 상기 방법을 수행하기 위한 프로세싱 회로부를 포함하는 디코더(30).
  45. 제1항 내지 제42항 중 어느 한 항의 상기 방법을 수행하기 위한 컴퓨터 코드를 포함하는 컴퓨터 프로그램 제품.
  46. 컴퓨터 디바이스에 의해 실행될 때, 상기 컴퓨터 디바이스로 하여금, 제1항 내지 제42항 중 어느 한 항의 상기 방법을 수행하게 하는 프로그램 코드를 반송하는 비-일시적 컴퓨터-판독가능 매체.
  47. 디코더로서,
    하나 이상의 프로세서들; 및
    상기 프로세서들에 결합되고, 상기 프로세서들에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 상기 프로그래밍은, 상기 프로세서들에 의해 실행될 때, 제1항 내지 제15항, 제18항 내지 제19항, 및 제20항 내지 제42항 중 어느 한 항의 상기 방법을 수행하도록 상기 디코더를 구성함 - 를 포함하는, 디코더.
  48. 인코더로서,
    하나 이상의 프로세서들; 및
    상기 프로세서들에 결합되고, 상기 프로세서들에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 상기 프로그래밍은, 상기 프로세서들에 의해 실행될 때, 제9항 내지 제15항, 제16항 내지 제17항, 및 제20항 내지 제42항 중 어느 한 항에 따른 상기 방법을 수행하도록 상기 인코더를 구성함 - 를 포함하는, 인코더.
KR1020227023204A 2019-12-30 2020-12-30 교차-컴포넌트 선형 모델 예측을 위한 필터링의 방법 및 장치 KR20220104059A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201962955405P 2019-12-30 2019-12-30
US62/955,405 2019-12-30
US202062958293P 2020-01-07 2020-01-07
US62/958,293 2020-01-07
PCT/RU2020/050403 WO2021045654A2 (en) 2019-12-30 2020-12-30 Method and apparatus of filtering for cross-component linear model prediction

Publications (1)

Publication Number Publication Date
KR20220104059A true KR20220104059A (ko) 2022-07-25

Family

ID=74853460

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227023204A KR20220104059A (ko) 2019-12-30 2020-12-30 교차-컴포넌트 선형 모델 예측을 위한 필터링의 방법 및 장치

Country Status (7)

Country Link
US (1) US20220345711A1 (ko)
EP (1) EP4062637A4 (ko)
JP (1) JP7469475B2 (ko)
KR (1) KR20220104059A (ko)
CN (2) CN114902661A (ko)
BR (1) BR112022012484A2 (ko)
WO (1) WO2021045654A2 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024111834A1 (ko) * 2022-11-21 2024-05-30 현대자동차주식회사 복원 참조샘플 기반 성분간 예측을 이용하는 비디오 코딩을 위한 방법 및 장치
WO2024111820A1 (ko) * 2022-11-21 2024-05-30 현대자동차주식회사 기하학적 분할에 기반하여 크로마 블록을 인트라 예측하는 비디오 코딩을 위한 방법 및 장치

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230002433A (ko) * 2020-04-18 2023-01-05 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 교차 성분 비디오 코딩 시그널링 신택스
WO2023230152A1 (en) * 2022-05-26 2023-11-30 Beijing Dajia Internet Information Technology Co., Ltd Method and apparatus for cross-component prediction for video coding
WO2024027566A1 (en) * 2022-08-02 2024-02-08 Mediatek Inc. Constraining convolution model coefficient
WO2024114701A1 (en) * 2022-11-30 2024-06-06 Douyin Vision Co., Ltd. Method, apparatus, and medium for video processing
CN115834897B (zh) * 2023-01-28 2023-07-25 深圳传音控股股份有限公司 处理方法、处理设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10455249B2 (en) * 2015-03-20 2019-10-22 Qualcomm Incorporated Downsampling process for linear model prediction mode
US20170150156A1 (en) * 2015-11-25 2017-05-25 Qualcomm Incorporated Illumination compensation with non-square predictive blocks in video coding
US10652575B2 (en) * 2016-09-15 2020-05-12 Qualcomm Incorporated Linear model chroma intra prediction for video coding
CN109274969B (zh) * 2017-07-17 2020-12-22 华为技术有限公司 色度预测的方法和设备
JP2021005741A (ja) * 2017-09-14 2021-01-14 シャープ株式会社 画像符号化装置及び画像復号装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024111834A1 (ko) * 2022-11-21 2024-05-30 현대자동차주식회사 복원 참조샘플 기반 성분간 예측을 이용하는 비디오 코딩을 위한 방법 및 장치
WO2024111820A1 (ko) * 2022-11-21 2024-05-30 현대자동차주식회사 기하학적 분할에 기반하여 크로마 블록을 인트라 예측하는 비디오 코딩을 위한 방법 및 장치

Also Published As

Publication number Publication date
WO2021045654A2 (en) 2021-03-11
JP7469475B2 (ja) 2024-04-16
CN115665408B (zh) 2024-01-05
WO2021045654A3 (en) 2021-07-15
WO2021045654A9 (en) 2021-06-17
JP2023508571A (ja) 2023-03-02
CN114902661A (zh) 2022-08-12
EP4062637A4 (en) 2023-01-11
CN115665408A (zh) 2023-01-31
EP4062637A2 (en) 2022-09-28
US20220345711A1 (en) 2022-10-27
BR112022012484A2 (pt) 2022-09-06

Similar Documents

Publication Publication Date Title
KR102431537B1 (ko) 루마 및 크로마 성분에 대한 ibc 전용 버퍼 및 디폴트 값 리프레싱을 사용하는 인코더, 디코더 및 대응하는 방법들
US20220078484A1 (en) Method and apparatus of cross-component prediction
JP7469475B2 (ja) 交差成分線形モデル予測のためのフィルタリングの方法及び装置
JP7366149B2 (ja) 行列ベースのイントラ予測と二次変換コア選択を調和させるエンコーダ、デコーダ、および対応する方法
US11895292B2 (en) Encoder, decoder and corresponding methods of boundary strength derivation of deblocking filter
WO2020169113A1 (en) Method and apparatus for intra prediction using linear model
US11388422B2 (en) Encoder, a decoder and corresponding methods related to intra prediction mode
US20230050376A1 (en) Method and Apparatus of Sample Fetching and Padding for Downsampling Filtering for Cross-Component Linear Model Prediction
US20240121433A1 (en) Method and apparatus for chroma intra prediction in video coding
KR20220143943A (ko) 슬라이스 헤더 신택스 엘리먼트의 시그널링을 단순화하는 인코더, 디코더, 및 대응하는 방법
KR20220065880A (ko) 아핀 모션 보상에서 dct 기반 보간 필터 및 향상된 쌍선형 보간 필터의 사용
KR20210103562A (ko) 인트라 예측을 위한 교차-성분 선형 모델링의 방법 및 장치
WO2021063389A1 (en) Encoder, decoder and corresponding methods using interpolation filtering
RU2809841C2 (ru) Способ и устройство для внутрикадрового предсказания с использованием линейной модели

Legal Events

Date Code Title Description
A201 Request for examination