KR20220127314A - 적응적 루프 필터링을 위한 인코더, 디코더, 및 대응하는 방법 - Google Patents

적응적 루프 필터링을 위한 인코더, 디코더, 및 대응하는 방법 Download PDF

Info

Publication number
KR20220127314A
KR20220127314A KR1020227028861A KR20227028861A KR20220127314A KR 20220127314 A KR20220127314 A KR 20220127314A KR 1020227028861 A KR1020227028861 A KR 1020227028861A KR 20227028861 A KR20227028861 A KR 20227028861A KR 20220127314 A KR20220127314 A KR 20220127314A
Authority
KR
South Korea
Prior art keywords
sample
block
picture
filter
value
Prior art date
Application number
KR1020227028861A
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 KR20220127314A publication Critical patent/KR20220127314A/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/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

픽처의 샘플 값을 필터링하는 방법 및 비디오 디코딩 장치가 개시되고, 방법은: 픽처의 블록에 대한 재구성된 샘플 값을 획득하는 단계; 비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하는 단계; 필터 계수 및 블록에 대한 재구성된 샘플 값에 따라 합 값을 획득하는 단계; 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림하는 단계; 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하는 단계를 포함한다.

Description

적응적 루프 필터링을 위한 인코더, 디코더, 및 대응하는 방법
관련된 출원에 대한 교차-참조
이 특허 출원은 2020년 1월 24일자로 출원된 PCT/EP2020/051788에 대한 우선권을 주장한다. 전술한 특허 출원의 개시내용은 이로써 그 전체적으로 참조로 통합된다.
본 출원(개시내용)의 실시예는 일반적으로, 픽처 프로세싱의 분야에 관한 것으로, 더 상세하게는, 적응적 루프 필터링(adaptive loop filtering)에 관한 것이다.
비디오 코딩(비디오 인코딩 및 디코딩)은 광범위한 디지털 비디오 애플리케이션, 예를 들어, 브로드캐스트 디지털 TV, 인터넷 및 이동 네트워크 상에서의 비디오 송신, 비디오 채팅과 같은 실시간 대화 애플리케이션, 비디오 회의, DVD 및 블루-레이(Blu-ray) 디스크, 비디오 컨텐츠 취득 및 편집 시스템, 및 보안 애플리케이션의 캠코더에서 이용된다.
심지어 상대적으로 짧은 비디오를 묘사하기 위하여 필요한 비디오 데이터의 양은 상당할 수 있고, 이것은 데이터가 제한된 대역폭 용량으로 통신 네트워크에 걸쳐 스트리밍되어야 하거나 또는 이와 다르게 통신되어야 할 때에 어려움으로 귀착될 수 있다. 이에 따라, 비디오 데이터는 일반적으로, 현대판 전기통신 네트워크에 걸쳐 통신되기 전에 압축된다. 메모리 자원이 제한될 수 있으므로, 비디오의 크기는 또한, 비디오가 저장 디바이스 상에서 저장될 때에 쟁점이 될 수 있다. 비디오 압축 디바이스는 송신 또는 저장 이전에 비디오 데이터를 코딩하기 위하여 출발지(source)에서 소프트웨어 및/또는 하드웨어를 종종 이용하고, 이에 의해, 디지털 비디오 이미지를 표현하기 위하여 필요한 데이터의 수량을 감소시킨다. 압축된 데이터는 그 다음으로, 비디오 데이터를 디코딩하는 비디오 압축해제 디바이스에 의해 목적지(destination)에서 수신된다. 제한된 네트워크 자원 및 더 높은 비디오 품질의 점점 더 증가하는 수요로, 픽처 품질에 있어서 희생을 거의 또는 전혀 가지지 않으면서 압축 비율을 개선시키는 개선된 압축 및 압축해제 기법이 바람직하다.
본 출원의 실시예는 독립항에 따른, 인코딩 및 디코딩을 위한 장치 및 방법을 제공한다.
상기한 그리고 다른 목적은 독립항의 발명 요지에 의해 달성된다. 추가의 구현 형태는 종속항, 설명, 및 도면으로부터 분명하다.
특정한 실시예는 첨부된 독립항에서 개략적으로 서술되고, 다른 실시예는 종속항에서 개략적으로 서술된다.
본 발명의 제1 측면은 픽처의 샘플 값을 필터링하는 방법을 제공하고, 여기서, 이 방법은, 픽처의 블록에 대한 재구성된 샘플 값을 획득하는 단계; 비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하는 단계; 필터 계수 및 블록에 대한 재구성된 샘플 값에 따라 합 값(sum value)을 획득하는 단계; 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션(position)에 따라 합 값을 반올림(rounding)하는 단계; 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하는 단계를 포함한다.
본 발명의 실시예에 따르면, ALF 필터링 프로세스 동안의 우측 시프트 값에 대응하는 반올림 값이 이용된다. 이 해결책은 ALF 필터링이 다른 필터링 스테이지(filtering stage)와 비교할 때에 정밀하고 일관적이라는 장점을 제공한다.
하나의 구현예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(coding tree block)(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, y가 0일 때, alfShiftY는 10이다.
하나의 구현예에서, y가 0이 아닐 때, alfShiftY는 7이다.
하나의 구현예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션(chroma sample position) 또는 루마 샘플 포지션(luma sample position)이다.
하나의 구현예에서, 반올림 프로세스는, 가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하는 단계, 및 수직 포지션에 기초하여 가산된 합 값을 시프팅하는 단계를 포함한다.
하나의 구현예에서, 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하는 단계는, 반올림된 합 값 및 블록에 대한 재구성된 샘플 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하는 단계를 포함한다.
하나의 구현예에서, 블록은 코딩 트리 블록이다.
본 발명의 제2 측면은 비디오 디코딩 장치를 제공하고, 이 비디오 디코딩 장치는, 픽처의 블록에 대한 재구성된 샘플 값을 획득하도록 구성되는 재구성 모듈; 비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하도록 구성되는 파싱 모듈; 필터 계수 및 블록에 대한 재구성된 샘플 값에 따라 합 값을 획득하도록 구성되는 계산 모듈; 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림하도록 구성되는 반올림 모듈; 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하도록 구성되는 필터링 모듈을 포함한다.
본 발명의 실시예에 따르면, ALF 필터링 프로세스 동안의 우측 시프트 값에 대응하는 반올림 값이 이용된다. 이 해결책은 ALF 필터링이 다른 필터링 스테이지와 비교할 때에 정밀하고 일관적이라는 장점을 제공한다.
하나의 구현예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, y가 0일 때, alfShiftY는 10이다.
하나의 구현예에서, y가 0이 아닐 때, alfShiftY는 7이다.
하나의 구현예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션이다.
하나의 구현예에서, 반올림 모듈은
가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하고, 반올림된 합 값을 획득하기 위하여 수직 포지션에 기초하여 가산된 합 값을 시프팅하도록 구성된다.
본 발명의 제3 측면은 제1 측면 및 제1 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하기 위한 프로세싱 회로부를 포함하는 디코더를 제공한다.
본 발명의 제4 측면은 컴퓨터 또는 프로세서 상에서 실행될 때, 제1 측면, 제3 측면, 및 제1 측면, 제3 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하기 위한 프로그램 코드를 포함하는 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제5 측면은 디코더를 제공하고, 이 디코더는, 하나 이상의 프로세서; 및 프로세서에 결합되고, 프로세서에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서에 의해 실행될 때, 제1 측면, 제3 측면 중의 임의의 하나, 및 제1 측면, 제3 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하도록 디코더를 구성함 - 를 포함한다.
본 발명의 제6 측면은, 컴퓨터 디바이스에 의해 실행될 때, 컴퓨터 디바이스로 하여금, 제1 측면, 제3 측면 중의 임의의 하나, 및 제1 측면, 제3 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하게 하는 프로그램 코드를 운반하는 비-일시적 컴퓨터-판독가능 매체를 제공한다.
본 발명의 제7 측면은 위의 실시예 중의 임의의 하나의 실시예의 방법에 의해 인코딩/디코딩된 비트스트림을 포함하는 비-일시적 저장 매체를 제공한다.
본 발명의 제8 측면은 복수의 신택스 엘리먼트(syntax element)를 포함함으로써 비디오 신호에 대한 인코딩된 비트스트림을 제공하고, 여기서, 복수의 신택스 엘리먼트는 신택스 엘리먼트의 값에 적어도 기초하여 조건적으로 시그널링되는, 크로마 컴포넌트에 대한 디블록킹 제어 파라미터를 포함하고, 여기서, 신택스 엘리먼트의 값은 코딩된 픽처의 슬라이스의 크로마 컴포넌트에 대한 디블록킹 제어 파라미터에 관련된다.
발명의 제1 측면에 따른 방법은 발명의 제2 측면에 따른 장치에 의해 수행될 수 있다. 발명의 제1 측면에 따른 방법의 추가의 특징 및 구현 형태는 발명의 제2 측면에 따른 장치의 특징 및 구현 형태에 대응한다.
하나 이상의 실시예의 세부사항은 첨부 도면 및 이하의 설명에서 기재된다. 다른 특징, 목적, 및 장점은 설명, 도면, 및 청구항으로부터 분명할 것이다.
본 발명의 제9 측면은 픽처의 샘플 값을 필터링하는 방법을 제공하고, 여기서, 이 방법은, 픽처의 블록에 대한 샘플 값을 획득하는 단계; 적응적 루프 필터링을 위한 필터 계수를 획득하는 단계; 필터 계수 및 블록에 대한 샘플 값에 따라 합 값을 획득하는 단계; 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림하는 단계; 반올림된 합 값에 따라 블록에 대한 필터 샘플 값을 획득하는 단계; 비트스트림을 획득하기 위하여 블록에 대한 필터 샘플 값을 인코딩하는 단계를 포함한다.
본 발명의 실시예에 따르면, ALF 필터링 프로세스 동안의 우측 시프트 값에 대응하는 반올림 값이 이용된다. 이 해결책은 ALF 필터링이 다른 필터링 스테이지와 비교할 때에 정밀하고 일관적이라는 장점을 제공한다.
하나의 구현예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, y가 0일 때, alfShiftY는 10이다.
하나의 구현예에서, y가 0이 아닐 때, alfShiftY는 7이다.
하나의 구현예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션이다.
하나의 구현예에서, 반올림 프로세스는, 가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하는 단계, 및 수직 포지션에 기초하여 가산된 합 값을 시프팅하는 단계를 포함한다.
하나의 구현예에서, 반올림된 합 값에 따라 블록에 대한 필터 샘플 값을 획득하는 단계는, 반올림된 합 값 및 블록에 대한 샘플 값에 따라 블록에 대한 필터 샘플 값을 획득하는 단계를 포함한다.
하나의 구현예에서, 블록은 코딩 트리 블록이다.
본 발명의 제10 측면은 비디오 인코딩 장치를 제공하고, 이 비디오 인코딩 장치는, 픽처의 블록에 대한 샘플 값을 획득하도록 구성되는 획득 모듈 - 획득 모듈은 적응적 루프 필터링을 위한 필터 계수를 획득하도록 구성됨 -; 필터 계수 및 블록에 대한 샘플 값에 따라 합 값을 획득하도록 구성되는 계산 모듈; 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림하도록 구성되는 반올림 모듈; 반올림된 합 값에 따라 블록에 대한 필터 샘플 값을 획득하도록 구성되는 필터링 모듈; 비트스트림을 획득하기 위하여 필터 샘플 값을 인코딩하도록 구성되는 비트스트림 생성 모듈을 포함한다.
본 발명의 실시예에 따르면, ALF 필터링 프로세스 동안의 우측 시프트 값에 대응하는 반올림 값이 이용된다. 이 해결책은 ALF 필터링이 다른 필터링 스테이지와 비교할 때에 정밀하고 일관적이라는 장점을 제공한다.
하나의 구현예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
하나의 구현예에서, y가 0일 때, alfShiftY는 10이다.
하나의 구현예에서, y가 0이 아닐 때, alfShiftY는 7이다.
하나의 구현예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션이다.
하나의 구현예에서, 반올림 모듈은 가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하고, 반올림된 합 값을 획득하기 위하여 수직 포지션에 기초하여 가산된 합 값을 시프팅하도록 구성된다.
본 발명의 제11 측면은 제9 측면 및 제9 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하기 위한 프로세싱 회로부를 포함하는 인코더를 제공한다.
본 발명의 제12 측면은 컴퓨터 또는 프로세서 상에서 실행될 때, 제9 측면, 제3 측면, 및 제9 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하기 위한 프로그램 코드를 포함하는 컴퓨터 프로그램 제품을 제공한다.
본 발명의 제13 측면은 인코더를 제공하고, 이 인코더는, 하나 이상의 프로세서; 및 프로세서에 결합되고, 프로세서에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서에 의해 실행될 때, 제9 측면, 제3 측면 중의 임의의 하나, 및 제9 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하도록 디코더를 구성함 - 를 포함한다.
본 발명의 제14 측면은, 컴퓨터 디바이스에 의해 실행될 때, 컴퓨터 디바이스로 하여금, 제9 측면 중의 임의의 하나, 및 제9 측면의 구현예 중의 임의의 하나에 따른 방법을 수행하게 하는 프로그램 코드를 운반하는 비-일시적 컴퓨터-판독가능 매체를 제공한다.
본 발명의 제15 측면은 위의 실시예 중의 임의의 하나의 실시예의 방법에 의해 인코딩/디코딩된 비트스트림을 포함하는 비-일시적 저장 매체를 제공한다.
이하에서, 발명의 실시예는 첨부 그림 및 도면을 참조하여 더 상세하게 설명된다.
도 1a는 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 예를 도시하는 블록도이다.
도 1b는 발명의 실시예를 구현하도록 구성된 비디오 코딩 시스템의 또 다른 예를 도시하는 블록도이다.
도 2는 발명의 실시예를 구현하도록 구성된 비디오 인코더의 예를 도시하는 블록도이다.
도 3은 발명의 실시예를 구현하도록 구성된 비디오 디코더의 예시적인 구조를 도시하는 블록도이다.
도 4는 인코딩 장치 또는 디코딩 장치의 예를 예시하는 블록도이다.
도 5는 인코딩 장치 또는 디코딩 장치의 또 다른 예를 예시하는 블록도이다.
도 6 내지 도 22는 발명의 실시예의 예를 개략적으로 예시한다.
도 23은 컨텐츠 전달 서비스를 실현하는 컨텐츠 공급 시스템(3100)의 예시적인 구조를 도시하는 블록도이다.
도 24는 단말 디바이스의 예의 구조를 도시하는 블록도이다.
도 25는 본 발명에 따른 방법 실시예를 도시하는 흐름도이다.
도 26은 본 발명에 따른 장치 실시예를 도시하는 블록도이다.
이하에서, 동일한 참조 부호는 이와 다르게 명시적으로 특정되지 않을 경우에, 동일하거나 적어도 기능적으로 같은 특징을 지칭한다.
다음의 설명에서, 첨부 도면에 대해 참조가 행해지고, 첨부 도면은 개시내용의 일부를 형성하고, 예시로서, 발명의 실시예의 구체적인 측면, 또는 본 발명의 실시예가 이용될 수 있는 구체적인 측면을 도시한다. 발명의 실시예는 다른 측면에서 이용될 수 있고, 도면에서 도시되지 않은 구조적 또는 논리적 변경을 포함할 수 있다는 것이 이해된다. 그러므로, 다음의 상세한 설명은 제한적인 의미로 취해지지 않아야 되고, 본 발명의 범위는 첨부된 청구항에 의해 정의된다.
예를 들어, 설명된 방법과 관련된 개시내용은 또한, 방법을 수행하도록 구성된 대응하는 디바이스 또는 시스템에 대해 유효할 수 있고 그 반대도 마찬가지일 수 있다는 것이 이해된다. 예를 들어, 하나 또는 복수의 구체적인 방법 단계가 설명될 경우에, 이러한 하나 이상의 유닛이 도면에서 명시적으로 설명되거나 예시되지 않더라도, 대응하는 디바이스는 설명된 하나 또는 복수의 방법 단계를 수행하기 위한 하나 또는 복수의 유닛, 예컨대, 기능적 유닛(예컨대, 하나 또는 복수의 단계를 수행하는 하나의 유닛, 또는 복수의 단계 중의 하나 이상의 단계를 각각 수행하는 복수의 유닛)을 포함할 수 있다. 다른 한편으로, 예를 들어, 구체적인 장치가 하나 또는 복수의 유닛, 예컨대, 기능적 유닛에 기초하여 설명될 경우에, 이러한 하나 또는 복수의 단계가 도면에서 명시적으로 설명되거나 예시되지 않더라도, 대응하는 방법은 하나 또는 복수의 유닛의 기능성을 수행하기 위한 하나의 단계(예컨대, 하나 또는 복수의 유닛의 기능성을 수행하는 하나의 단계, 또는 복수의 유닛 중의 하나 이상의 유닛의 기능성을 각각 수행하는 복수의 단계)를 포함할 수 있다. 또한, 본 명세서에서 설명된 다양한 예시적인 실시예 및/또는 측면의 특징은 이와 다르게 구체적으로 언급되지 않으면, 서로 조합될 수 있다는 것이 이해된다.
비디오 코딩은 전형적으로, 비디오 또는 비디오 시퀀스(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)이거나 이러한 2 차원 어레이 또는 행렬로서 간주될 수 있다. 어레이에서의 샘플은 또한, 픽셀(픽처 엘리먼트의 축약 형태) 또는 펠(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 차원 어레이 또는 행렬이거나 이러한 2 차원 어레이 또는 행렬로서 간주될 수 있다. 다시 말해서, 블록(203)은 적용된 컬러 포맷에 따라, 예컨대, 하나의 샘플 어레이(예컨대, 모노크롬 픽처(17)의 경우에 루마 어레이, 또는 컬러 픽처의 경우에 루마 또는 크로마 어레이), 또는 3개의 샘플 어레이(예컨대, 컬러 픽처(17)의 경우에 루마 및 2개의 크로마 어레이), 또는 임의의 다른 수 및/또는 종류의 어레이를 포함할 수 있다. 블록(203)의 수평 및 수직 방향(또는 축)에서의 샘플의 수는 블록(203)의 크기를 정의한다. 따라서, 블록은 예를 들어, 샘플의 MxN(M-열 대 N-행) 어레이, 또는 변환 계수의 MxN 어레이일 수 있다.
도 2에서 도시된 바와 같은 비디오 인코더(20)의 실시예는 픽처(17)를 블록 대 블록으로 인코딩하도록 구성될 수 있고, 예컨대, 인코딩 및 예측은 블록(203)마다 수행된다.
잔차 계산
잔차 계산 유닛(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)은 N의 일부 값에 대한 샘플의 NxN 블록일 수 있어서, 이로써 CTB로의 컴포넌트의 분할이 파티셔닝이 된다. 코딩 유닛(CU)은 루마 샘플의 코딩 블록, 3개의 샘플 어레이를 가지는 픽처의 크로마 샘플의 2개의 대응하는 코딩 블록, 또는 모노크롬 픽처, 또는 샘플을 코딩하기 위하여 이용된 3개의 별도의 컬러 평면 및 신택스 구조를 이용하여 코딩되는 픽처의 샘플의 코딩 블록일 수 있거나 이들을 포함할 수 있다. 이에 따라, 코딩 블록(CB)은 M 및 N의 일부 값에 대한 샘플의 NxN 블록일 수 있어서, 이로써 코딩 블록으로의 CTB의 분할이 파티셔닝이 된다.
실시예에서, 예컨대, 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), 인터 예측 유닛(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)은 인 루프 필터(in loop filter)인 것으로서 도 3에서 도시되지만, 다른 구성에서, 루프 필터 유닛(320)은 포스트 루프 필터(post loop filter)로서 구현될 수 있다.
디코딩된 픽처 버퍼
픽처의 디코딩된 비디오 블록(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을 구성할 수 있다.
모드 선택 유닛(360)은 모션 벡터 및 다른 신택스 엘리먼트를 파싱함으로써 현재의 비디오 슬라이스의 비디오 블록에 대한 예측 정보를 결정하도록 구성되고, 디코딩되고 있는 현재의 비디오 블록에 대한 예측 블록을 생성하기 위하여 예측 정보를 이용한다. 예를 들어, 모션 선택 유닛(360)은 비디오 슬라이스의 비디오 블록을 코딩하기 위해 이용된 예측 모드 (예컨대, 인트라 또는 인터 예측), 인터 예측 슬라이스 유형 (예컨대, B 슬라이스, P 슬라이스, 또는 GPB 슬라이스), 슬라이스에 대한 참조 픽처 리스트 중의 하나 이상에 대한 구성 정보, 슬라이스의 각각의 인터 인코딩된 비디오 블록에 대한 모션 벡터, 슬라이스의 각각의 인터 코딩된 비디오 블록에 대한 인터 예측 스테이터스(inter prediction status), 및 현재의 비디오 슬라이스 내의 비디오 블록을 디코딩하기 위한 다른 정보를 결정하기 위하여, 수신된 신택스 엘리먼트의 일부를 이용한다.
비디오 디코더(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)(최상위 비트)를 제거함
Figure pct00001
(1)
Figure pct00002
(2)
Figure pct00003
(3)
Figure pct00004
(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)를 적용함으로써 출력과 동일하다.
Figure pct00005
(5)
Figure pct00006
(6)
Figure pct00007
(7)
Figure pct00008
(8)
연산은 공식 (5) 내지 (8)에서 도시된 바와 같이, mvp 및 mvd의 합산 동안에 적용될 수 있다.
방법 2: 값을 클립핑(clipping)함으로써 오버플로우 MSB를 제거함
Figure pct00009
Figure pct00010
여기서, vx는 이미지 블록 또는 서브-블록의 모션 벡터의 수평 컴포넌트이고, vy는 이미지 블록 또는 서브-블록의 모션 벡터의 수직 컴포넌트이고; x, y, 및 z는 MV 클립핑 프로세스의 3개의 입력 값에 각각 대응하고, 함수 Clip3의 정의는 다음과 같다:
Clip3( x, y, z ) =
Figure pct00011
도 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)는 이에 따라, 널리 다양한 구성으로 구현될 수 있다.
인-루프 필터 배경
VTM3에는 총 3개의 유형의 인 루프 필터가 있다. 디블록킹 필터 및 SAO(HEVC에서의 2개의 루프 필터) 외에, 적응적 루프 필터(ALF)가 VTM3에서 적용된다. VTM3에서의 필터링 프로세스의 순서는 디블록킹 필터, SAO, 및 ALF이다.
ALF 배경
VTM3에서는, 블록-기반 필터 적응을 갖는 적응적 루프 필터(ALF)가 적용된다. 루마 컴포넌트에 대하여, 25개의 필터 중의 하나는 국소적 경사(local gradient)의 방향 및 활성에 기초하여 각각의 4x4 블록에 대해 선택된다.
필터 형상:
JEM에서는, (도 6에서 도시된 바와 같은) 2개의 다이아몬드 필터 형상이 루마 컴포넌트를 위하여 이용된다. 7×7 다이아몬드 형상은 루마 컴포넌트에 대하여 적용되고, 5x5 다이아몬드 형상은 크로마 컴포넌트에 대하여 적용된다.
블록 분류:
루마 컴포넌트에 대하여, 각각의
Figure pct00012
블록은 25개의 클래스 중에서 하나로 범주화된다. 분류 인덱스
Figure pct00013
는 차원성
Figure pct00014
및 활성
Figure pct00015
의 양자화된 값에 기초하여 다음과 같이 유도된다:
Figure pct00016
(9)
Figure pct00017
Figure pct00018
를 계산하기 위하여, 수평, 수직, 및 2개의 대각선 방향의 경사는 1-D 라플라시안(Laplacian)을 이용하여 먼저 계산된다:
Figure pct00019
(10)
Figure pct00020
(11)
Figure pct00021
(12)
Figure pct00022
(13)
여기서, 인덱스
Figure pct00023
Figure pct00024
Figure pct00025
블록 내에서의 상부 좌측 샘플의 좌표를 지칭하고,
Figure pct00026
는 좌표
Figure pct00027
에서의 재구성된 샘플을 지시한다.
블록 분류의 복잡도를 감소시키기 위하여, 서브샘플링된 1-D 라플라시안 계산이 적용된다. 도 7에서 도시된 바와 같이, 동일한 서브샘프링된 포지션은 모든 방향의 경사 계산을 위하여 이용된다.
그 다음으로, 수평 및 수직 방향의 경사의 최대 및 최소 값은 다음으로서 설정된다:
Figure pct00028
(14)
2개의 대각선 방향의 경사의 최대 및 최소 값은 다음으로서 설정된다:
Figure pct00029
(15)
차원성
Figure pct00030
의 값을 유도하기 위하여, 이 값은 서로에 대하여 그리고 2개의 임계치
Figure pct00031
Figure pct00032
와 비교된다:
단계 1.
Figure pct00033
Figure pct00034
의 둘 모두가 참(true)일 경우에,
Figure pct00035
는 0으로 설정된다.
단계 2.
Figure pct00036
일 경우에, 단계 3으로 계속되고; 이와 다를 경우에, 단계 4로 계속된다.
단계 3.
Figure pct00037
일 경우에,
Figure pct00038
는 2로 설정되고; 이와 다를 경우에, 는 1로 설정된다.
단계 4.
Figure pct00039
일 경우에,
Figure pct00040
는 4로 설정되고; 이와 다를 경우에,
Figure pct00041
는 3으로 설정된다.
활성 값
Figure pct00042
는 다음으로서 계산된다:
Figure pct00043
(16)
Figure pct00044
는 0 내지 4까지의 범위로 추가로 양자화되고, 양자화된 값은
Figure pct00045
로서 나타내어진다.
픽처 내의 크로마 컴포넌트에 대하여, 분류 방법이 적용되지 않고, ALF 계수들의 단일 세트는 각각의 크로마 컴포넌트에 대하여 적용된다.
필터 계수의 기하학적 변환
각각의 4x4 루마 블록을 필터링하기 전에, 회전, 또는 대각선 및 수직 플립핑과 같은 기하학적 변환은 그 블록에 대하여 계산된 경사 값에 따라, 필터 계수
Figure pct00046
에 적용된다. 이것은 이 변환을 필터 지원 영역 내의 샘플에 적용하는 것과 같다. 그 사상은 그 차원성을 정렬함으로써, ALF가 적용되는 상이한 블록을 더 유사하게 하는 것이다.
대각선, 수직 플립, 및 회전을 포함하는 3개의 기하학적 변환이 도입된다:
대각선:
Figure pct00047
(17)
수직 플립:
Figure pct00048
(18)
회전:
Figure pct00049
(19)
여기서,
Figure pct00050
는 필터의 크기이고,
Figure pct00051
은 계수 좌표이어서, 이로써 위치 (0, 0)은 상부 좌측 코너에 있고, 위치
Figure pct00052
은 하부 우측 코너에 있다. 변환은 그 블록에 대하여 계산된 경사 값에 따라 필터 계수
Figure pct00053
에 적용된다. 변환과 4개의 방향의 4개의 경사 사이의 관계는 다음의 표에서 요약된다.
Figure pct00054
필터 파라미터 시그널링
VTM3에서는, ALF 필터 파라미터가 슬라이스 헤더에서 시그널링된다. 루마 필터 계수의 최대 25개이 세트가 시그널링될 수 있다. 비트 오버헤드(bit overhead)를 감소시키기 위하여, 상이한 분류의 필터 계수가 병합될 수 있다.
필터링 프로세스는 CTB 레벨에서 제어될 수 있다. 플래그는 ALF가 루마 CTB에 적용되는지 여부를 지시하기 위하여 시그널링된다. 각각의 크로마 CTB에 대하여, 플래그는 alf_chroma_ctb_present_flag의 값에 따라, ALF가 크로마 CTB에 적용되는지 여부를 지시하기 위하여 시그널링될 수 있다.
필터 계수는 128인 놈으로 양자화된다. 승산 복잡도를 추가로 한정하기 위하여, 중심 포지션의 계수 값이 0 내지 28의 범위에 있을 것이고 잔여 포지션의 계수 값이 -27 내지 27 - 1까지의 범위에 있을 것이라는 비트스트림 적합성(bitstream conformance)이 적용된다.
필터링 프로세스
디코더 측에서, ALF가 CTB에 대하여 이네이블될 때, CU 내의 각각의 샘플
Figure pct00055
이 필터링되어, 이하에서 도시된 바와 같은 샘플 값
Figure pct00056
으로 귀착되고, 여기서,
Figure pct00057
은 필터 길이를 나타내고,
Figure pct00058
는 필터 계수를 표현하고,
Figure pct00059
는 디코딩된 필터 계수를 나타낸다.
Figure pct00060
VVC 사양에 따른 ALF 신택스 사양
적응적 루프 필터 프로세스
1.1 일반
이 프로세스의 입력은 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, recPictureCb, 및 recPictureCr이다.
이 프로세스의 출력은 적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, alfPictureCb, 및 alfPictureCr이다.
적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, alfPictureCb, 및 alfPictureCr에서의 샘플 값은 각각 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, recPictureCb, 및 recPictureCr에서의 샘플 값인 것으로 초기에 설정된다.
tile_group_alf_enabled_flag의 값이 1일 때, rx = 0..PicWidthInCtbs - 1 및 ry = 0..PicHeightInCtbs - 1인 루마 코딩 트리 블록 위치 ( rx, ry )를 갖는 모든 코딩 트리 유닛에 대하여, 다음의 프로세스가 적용된다:
alf_ctb_flag[ 0 ][ rx ][ ry ]의 값이 1일 때, 조항 1.2에서 특정된 바와 같은 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureL, alfPictureL, 및 ( rx << CtbLog2SizeY, ry << CtbLog2SizeY )인 것으로 설정된 루마 코딩 트리 블록 위치 ( xCtb, yCtb )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureL이다.
alf_ctb_flag[ 1 ][ rx ][ ry ]의 값이 1일 때, 조항 1.1에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCb, alfPictureCb인 것으로 설정된 alfPicture, 및 ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) )인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCb이다.
alf_ctb_flag[ 2 ][ rx ][ ry ]의 값이 1일 때, 조항 1.4에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCr, alfPictureCr인 것으로 설정된 alfPicture, 및 ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) ) 인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCr이다.
1.2 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
필터 인덱스에 대한 유도 프로세스 조항 1.3은 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력으로 하여, 그리고 x, y = 0..CtbSizeY - 1인 filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ]를 출력으로 하여 호출된다.
필터링된 재구성된 루마 샘플 alfPictureL[ x ][ y ]의 유도를 위하여, 현재의 루마 코딩 트리 블록 내부의 각각의 재구성된 루마 샘플 recPictureL[ x ][ y ]는 x, y = 0..CtbSizeY - 1로 다음과 같이 필터링된다:
filtIdx[ x ][ y ]에 의해 특정된 필터에 대응하는 루마 필터 계수의 어레이 f[ j ]는 j = 0..12로 다음과 같이 유도된다:
Figure pct00061
.
루마 필터 계수 filterCoeff는 transposeIdx[ x ][ y ]에 따라 다음과 같이 유도된다:
transposeIndex[ x ][ y ] = = 1일 경우에,
filterCoeff[ ] = { f[9], f[4], f[10], f[8], f[1], f[5], f[11], f[7], f[3], f[0], f[2], f[6], f[12] }
이와 다르게, transposeIndex[ x ][ y ] = = 2일 경우에,
filterCoeff[ ] = { f[0], f[3], f[2], f[1], f[8], f[7], f[6], f[5], f[4], f[9], f[10], f[11], f[12] }
이와 다르게, transposeIndex[ x ][ y ] = = 3일 경우에,
filterCoeff[ ] = { f[9], f[8], f[10], f[4], f[3], f[7], f[11], f[5], f[1], f[0], f[2], f[6], f[12] }
이와 다를 경우에,
filterCoeff[ ] = { f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8], f[9], f[10], f[11], f[12] }
루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
hx = Clip3( 0, pic_width_in_luma_samples - 1, xCtb + x )
vy = Clip3( 0, pic_height_in_luma_samples - 1, yCtb + y )
변수 sum은 다음과 같이 유도된다:
Figure pct00062
Figure pct00063
수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 유도된다:
Figure pct00064
.
1.3 루마 샘플에 대한 ALF 전치 및 필터 인덱스에 대한 유도 프로세스
이 프로세스의 입력은 다음과 같다:
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ),
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력은 다음과 같다
x, y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ],
x, y = 0..CtbSizeY - 1인 전치 인덱스 어레이 transposeIdx[ x ][ y ].
루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
Figure pct00065
Figure pct00066
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음의 순서화된 단계에 의해 유도된다:
x, y = - 2..CtbSizeY + 1인 변수 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ], 및 filtD1[ x ][ y ]는 다음과 같이 유도된다:
x 및 y의 둘 모두가 짝수이거나 x 및 y의 둘 모두가 홀수일 경우에, 다음이 적용된다:
Figure pct00067
Figure pct00068
Figure pct00069
Figure pct00070
이와 다를 경우에, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ], 및 filtD1[ x ][ y ]는 0인 것으로 설정된다.
x, y = 0..( CtbSizeY - 1 ) >> 2인 변수 varTempH1[ x ][ y ], varTempV1[ x ][ y ], varTempD01[ x ][ y ], varTempD11[ x ][ y ], 및 varTemp[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00071
, i, j = -2..5임
Figure pct00072
, i, j = -2..5임
Figure pct00073
, i, j = -2..5임
Figure pct00074
, i, j = -2..5임
Figure pct00075
x, y = 0..CtbSizeY - 1인 변수 dir1[ x ][ y ], dir2[ x ][ y ], 및 dirS[ x ][ y ]는 다음과 같이 유도된다:
변수 hv1, hv0, 및 dirHV는 다음과 같이 유도된다:
sumV[ x >> 2 ][ y >> 2 ]이 sumH[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00076
Figure pct00077
Figure pct00078
이와 다를 경우에, 다음이 적용된다:
Figure pct00079
변수 d1, d0, 및 dirD는 다음과 같이 유도된다:
sumD0[ x >> 2 ][ y >> 2 ]이 sumD1[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00080
이와 다를 경우에, 다음이 적용된다:
Figure pct00081
변수 hvd1, hvd0는 다음과 같이 유도된다:
Figure pct00082
변수 dirS[ x ][ y ], dir1[ x ][ y ], 및 dir2[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00083
x, y = 0..CtbSizeY - 1인 변수 avgVar[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00084
x = y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00085
dirS[ x ][ y ]가 1이 아닐 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00086
.
1.4 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 크로마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재의 크로마 코딩 트리 블록의 크기 ctbSizeC는 다음과 같이 유도된다:
Figure pct00087
필터링된 재구성된 크로마 샘플 alfPicture[ x ][ y ]의 유도를 위하여, 현재의 크로마 코딩 트리 블록 내부의 각각의 재구성된 크로마 샘플 recPicture[ x ][ y ]는 x, y = 0..ctbSizeC - 1로 다음과 같이 필터링된다:
크로마 샘플의 주어진 어레이 recPicture 내부의 대응하는 크로마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
Figure pct00088
변수 sum은 다음과 같이 유도된다:
Figure pct00089
Figure pct00090
수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 유도된다:
Figure pct00091
.
루마 컴포넌트에 대한 VTM-3.0의 3개의 캐스케이딩된 루프 필터(디블록킹, SAO, ALF)의 현재의 라인 버퍼 요건은 11.25 라인인 것으로 유도되고, 크로마 컴포넌트에 대해서는, 그것이 6.25 라인인 것으로 유도된다(도 8 참조). 라인 버퍼는 "온-칩(on-chip)" 메모리 상에서 저장될 필요가 있고, 이에 의해, 하드웨어 칩 면적을 증가시키므로, 하드웨어 칩에 대한 증가된 라인 버퍼 요건을 수용하는 것은 우려사항인 것으로 알려져 있다.
VTM-3.0의 라인 버퍼 요건을 감소시키기 위하여,
ALF 블록 분류 는 ALF 블록 분류가 가상적 경계(virtual boundary)(VB) 상부 또는 하부에서 임의의 픽셀을 필요로 하지 않는다는 것을 보장하도록 적응된다. 가상적 경계(VB)는 "N"개의 픽셀만큼 상향 시프팅된 수평 CTU 경계이다. 각각의 CTU에 대하여, SAO 및 ALF는 하부 CTU가 나오기 전에 VB 상부의 샘플을 프로세싱할 수 있지만, 하부 CTU가 나올 때까지 VB 하부의 프로세싱할 수 없고, 이것은 수직 디블록킹 필터링에서의 지연 때문에 주로 야기된다.
VTM-3.0에서, N은 4 이상, 예컨대, N=4 또는 N=6인 양의 정수 값을 취할 수 있다.
라인 버퍼 요건을 감소시키기 위하여, 블록 분류에서 원래 이용되는 샘플들의 서브세트가 추가로 이용되는 그러한 방식으로, 일부 예는 ALF 블록 분류를 주로 적응시킨다.
"그리드 시프팅(grid shifting)" 접근법은 ALF 블록 분류 윈도우 크기 (P x P)가 N의 정수배가 아닌 경우에 대하여 이용된다. 현재의 VTM-3.0에서, ALF 블록 분류는 4 x 4 블록에 대하여 수행된다. 그러므로, P는 VTM-3.0에 대하여 4로 설정된다. 그리드 시프팅 접근법은 ALF 블록 분류 윈도우를 정수 개의 샘플만큼 주로 시프팅하여, 이로써 주어진 P x P 블록 분류 윈도우가 가상적 경계를 교차하지 않을 것이다. 그러므로, "P-N"과 같은 픽처 내의 초기 샘플에 대하여, ALF 블록 분류는 2 x 2 블록 윈도우를 오직 이용함으로써 행해지거나, 첫 번째 "P-N" 라인은 ("P-N" + 1)에서 즉시 시작하는 4x4 블록의 블록 분류 판정을 재이용한다.
ALF 필터링 은 패딩(padding)을 이용함으로써, 또는 재이용된 필터 계수를 중심 계수에 가산함으로써, 루마 및 크로마 컴포넌트의 둘 모두에 대한 필터의 왜곡된 버전을 이용하도록 적응된다. 이러한 방식으로, 추가적인 라인 버퍼는 ALF 필터링을 위하여 요구되지 않는다.
원래의 ALF 블록 분류의 수정된 버전을 이용하여, 이로써 블록 분류는 임의의 추가적인 라인 버퍼를 요구하지 않을 것이다. 또한, ALF 필터링은 그것이 임의의 추가적인 버퍼를 필요로 하지 않는 그러한 방식으로 수정된다. 블록 분류의 수정된 버전은 원래의 블록 분류에서 원래 이용되는 샘플들의 서브세트를 오직 이용한다.
도 8에서 도시된 바와 같이, 가정적 경계가 CTU 경계 상부의 4개의 라인으로 간주될 때, VVC를 위한 루마 라인 버퍼 요건은 11.25 루마 라인이다.
라인 버퍼 요건의 설명은 다음과 같다: 판정 및 필터링이 제1 CTU로부터의 라인 K, L, M, M 및 하부 CTU로부터의 라인 O, P..를 요구하므로, CTU 에지와 중첩하는 수평 에지의 디블록킹은 수행될 수 없다. 그러므로, CTU 경계와 중첩하는 수평 에지의 디블록킹은 하부 CTU까지 연기된다. 그러므로, 재구성된 루마 샘플인 라인 K, L, M, N은 라인 버퍼(4개의 라인) 상에서 저장되어야 한다. 그 다음으로, SAO 필터링은 라인 A 내지 J에 대하여 수행될 수 있다. 디블록킹은 라인 K 내의 샘플을 변경하지 않으므로, 라인 J는 SAO 필터링될 수 있다. 라인 K의 SAO 필터링을 위하여, 에지 오프셋 분류 판정은 (0.25 루마 라인인) 라인 버퍼에서 오직 저장된다. ALF 필터링은 라인 A 내지 F에 대하여 오직 수행될 수 있다. 예에서, ALF 분류는 각각의 4 x 4 블록에 대하여 수행된다. 각각의 4 x 4 블록 분류는, 1d 라플라시안을 연산하여 경사를 결정하기 위하여 9 x 9 윈도우를 궁극적으로 필요로 하는 크기 8 x 8의 활성 윈도우를 필요로 한다.
그러므로, 라인 G, H, I, J의 블록 분류를 위하여, 가상적 경계 하부의 SAO 필터링된 샘플이 필요하다. 또한, 라인 D, E, F에 대하여, SAO 필터링된 샘플은 샘플 분류를 위하여 요구된다. 또한, 라인 G의 ALF 필터링은 상부로부터의 3개의 SAO 필터링된 라인 D, E, F를 필요로 한다. 그러므로, 총 라인 버퍼 요건은 다음과 같다:
Figure pct00092
라인 K-N(수평 DF 픽셀) - 4
Figure pct00093
라인 D-J(SAO 필터링된 픽셀) - 7
Figure pct00094
라인 J와 라인 K 사이의 SAO 에지 오프셋 분류자 값 - 0.25
Figure pct00095
그러므로, 루마 라인의 총 수는 7 + 4 + 0.25 = 11.25임
가상적 경계가 4개의 라인일 때의 수정된 블록 분류
도 9는 ALF 블록 분류가 가상적 경계 상부 및 하부의 라인에 대하여 어떻게 수행되는지를 도시한다.
해결책 1(비대칭적 절단된 ALF 블록 분류)
도 9는 ALF 루마 라인 버퍼를 회피하기 위하여 수정된 ALF 분류를 참조하는 예를 개시한다(비대칭적 변형).
도 9a 및 도 18a에서 도시된 바와 같이, 가상적 경계 바로 상부의 4 x 4 블록에 대하여, 블록 경계 상부에 있는 샘플만이 블록 분류를 위하여 이용된다.
하나의 구현예에서, VB 바로 상부의 4 x 4 블록의 블록 분류(4a)를 위하여:
Figure pct00096
분류에서의 VB 상부의 샘플(라인 E 내지 I 내의 샘플)을 오직 이용함
VB 바로 하부의 4 x 4 블록의 블록 분류(4b)를 위하여:
Figure pct00097
분류에서의 VB 하부의 샘플(라인 P 내지 L 내의 샘플)을 오직 이용함
하나의 구현예에서, VB 바로 상부의 4 x 4 블록의 블록 분류(4a)를 위하여:
라인 J를 라인 K, L, M에 패딩함
VB 바로 하부의 4 x 4 블록의 블록 분류(4b)를 위하여:
라인 K를 라인 J, I, H에 패딩함
도 9b에서 도시된 바와 같이, 가상적 경계 바로 하부의 4 x 4 블록의 블록 분류를 위하여, 가상적 경계 하부에 있는 샘플만이 이용된다.
도 9a, 도 22a에서(4x4 블록이 VB 상부에 있는 경우), 라인 G에서 시작하는 블록에 대한 블록 분류는 라인 D, E, F, F, H, J, J를 이용한다. 라인 J 라인에 속하는 샘플의 경사 계산이 하부에서 라인을 하나 더 필요로 하므로, 그러므로, 라인 J는 라인 K에 패딩된다.
하나의 구현예에서,
Figure pct00098
VB 상부의 4 x 4 블록에 대하여:
Figure pct00099
VB 상부의 샘플만이 ALF 블록 분류에서 기여하고 그 반대도 마찬가지임
Figure pct00100
라인 J 내의 샘플의 경사 계산을 위하여, 라인 K는 라인 J로 패딩됨
Figure pct00101
VB 하부의 4 x 4 블록에 대하여:
Figure pct00102
VB 하부의 샘플만이 ALF 블록 분류에서 기여하고 그 반대도 마찬가지임
Figure pct00103
라인 J 내의 샘플의 경사 계산을 위하여, 라인 K는 라인 J로 패딩됨
Figure pct00104
더 적은 샘플이 블록 분류를 위하여 이용되므로, 활성 계산은 상이한 정규화(normalization)를 이용한다.
Figure pct00105
그러므로, 다음의 수학식은 활성을 계산할 시에 이용된다:
Figure pct00106
avgVar[ x ][ y ] = varTab[ Clip3( 0, 15, ( sumOfHV[ x >> 2 ][ y >> 2 ] * Ac ) >> ( 3 + BitDepthY ) ) ], 여기서, Ac 값은 가상적 경계 근처의 블록에 대하여 96이고 다른 블록에 대하여 64이다.
이용되는 활성 계산은 다음과 같이 수정된다: avgVar[ x ][ y ] = varTab[ Clip3( 0, 15, ( sumOfHV[ x >> 2 ][ y >>2 ] * Ac ) >> ( 3 + BitDepthY ) ) ], 여기서, Ac 값은 가상적 경계 근처의 블록에 대하여 96이고 다른 블록에 대하여 64이다.
대안적으로, 라인 G에서 시작하는 블록의 블록 분류를 위하여, 라인 D, E, F, G만이 이용된다. 라인 I는 분류를 위하여 추가로 이용될 수 있고, 예에서, 2개의 라인들의 모든 세트에 대하여 경사를 계산하고, 이것은 분류에서 라인 I를 포함하는 것을 번거롭게 한다.
제2 해결책은 간단한 패딩을 이용하는 것이다. 라인 J는 라인 K, L, M에 패딩되고, 그 다음으로, D로부터 시작하여 M까지의 라인은 블록 분류를 위하여 이용될 수 있다.
도 9b, 도 22b, 및 도 18b에서(4 x 4 블록이 VB 하부에 있는 경우), 라인 K에서 시작하는 블록에 대한 블록 분류는 라인 K, L, M, N, O, P, Q를 이용한다. 라인 K 라인에 속하는 샘플의 경사 계산이 상부에서 라인을 하나 더 필요로 하므로, 그러므로, 라인 K는 라인 J에 패딩된다. 이용되는 활성 계산은 다음과 같이 수정된다: avgVar[ x ][ y ] = varTab[ Clip3( 0, 15, ( sumOfHV[ x >> 2 ][ y >>2 ] * Ac ) >> ( 3 + BitDepthY ) ) ], 여기서, Ac 값은 가상적 경계 근처의 블록에 대하여 96이고 다른 블록에 대하여 64이다.
하나의 구현예에서,
VB 바로 상부의 4 x 4 블록의 블록 분류(도 18a)를 위하여:
Figure pct00107
분류에서의 VB 상부의 샘플(라인 E 내지 H 내의 샘플)을 오직 이용함
Figure pct00108
라인 I 및 J는 VTM-3.0에서 함께 고려되고, 그러므로, 오직 라인 H까지 이용된다.
Figure pct00109
분류에서 라인 I 및 J를 또한 이용하기 위하여 라인 J를 라인 K에 패딩함
VB 바로 하부의 4 x 4 블록의 블록 분류(도 18b)를 위하여:
Figure pct00110
분류에서의 VB 하부의 샘플(라인 P 내지 M 내의 샘플)을 오직 이용함
Figure pct00111
라인 K 및 L은 VTM-3.0에서 함께 고려되고, 그러므로, 오직 라인 M까지 이용된다.
Figure pct00112
분류에서 라인 I 및 J를 또한 이용하기 위하여 라인 K를 라인 J에 패딩함
대안적으로, 라인 K에서 시작하는 블록의 블록 분류를 위하여, 라인 M, N, O, P, Q만이 이용된다. 라인 L은 분류를 위하여 추가로 이용될 수 있고, 예에서, 2개의 라인들의 모든 세트에 대하여 경사를 계산하고, 이것은 분류에서 라인 L을 포함하는 것을 번거롭게 한다.
제2 해결책은 간단한 패딩을 이용하는 것이다. 라인 K는 라인 J, I, H에 패딩되고, 그 다음으로, H로부터 시작하여 Q까지의 라인은 블록 분류를 위하여 이용될 수 있다.
해결책 2(대칭적 절단된 ALF 블록 분류)
도 10에서 도시된 바와 같이, ALF 루마 라인 버퍼를 회피하기 위하여 수정된 ALF 분류를 참조하는 구현예(대칭적 변형)가 개시되고, 대칭적 절단된 ALF 블록 분류는 주어진 블록을 분류하기 위하여 내부 4개의 샘플(a, b, c, d)을 오직 이용한다.
예에서,
해결책 1:
VB 바로 상부의 4 x 4 블록의 블록 분류(도 10a)를 위하여:
분류에서 VB 상부의 샘플을 오직 이용한다. 주로 샘플 a, b, c, d가 이용된다.
VB 바로 하부의 4 x 4 블록의 블록 분류(도 10b)를 위하여:
분류에서 VB 하부의 샘플을 오직 이용한다. 주로 샘플 a, b, c, d가 이용된다.
도 10a에서, 라인 G에서 시작하는 블록에 대하여, 라인 G 및 I에 속하는 샘플(샘플 a, b, c, d)만이 경사 연산에서 이용된다. 추가적인 패딩은 이 경우에 요구되지 않는다. 유사하게, 도 10b에서, 라인 K에서 시작하는 블록에 대하여, 라인 L 및 M에 속하는 샘플(샘플 a, b, c, d)만이 경사 연산에서 이용된다. 추가적인 패딩은 이 경우에 요구되지 않는다. 이 해결책은 특히, 픽처 내용이 주어진 국소적 윈도우 내부에서 빈번하게 변경될 때, 주관적인 픽처 품질을 위하여 유리할 수 있는 대칭적 블록 형상을 이용하여 경사가 연산된다는 장점을 가진다. 또한, 해결책은 4개의 샘플(a, b, c, d)만을 이용하여 경사를 연산하기 때문에 연산적으로 덜 복잡하다.
도 11은 6개의 라인(2개의 추가적인 라인은 ALF 블록 분류를 위하여 이용될 수 있음)을 갖는 ALF 루마 라인 버퍼를 회피하기 위하여 수정된 ALF 분류를 참조하는 구현예를 개시하고, ALF 블록 분류가 SAO 필터링된 샘플을 저장할 수 있는 라인 버퍼의 2개의 여분의 라인을 이용할 수 있는 특수한 경우를 도시한다. 이 경우에, ALF 블록 분류는 각각 라인 G 및 라인 K에서 시작하는 블록에 대한 가상적 경계의 상부 및 하부 둘 모두의 2개의 추가적인 라인을 이용할 수 있다.
예에서,
해결책 1:
VB 바로 상부의 4 x 4 블록의 블록 분류(도 11의 좌측 하위도면)를 위하여:
VB 하부의 SAO 필터링된 라인 K, L이 추가로 이용될 수 있음
VB 바로 하부의 4 x 4 블록의 블록 분류(도 11의 우측 하위도면)를 위하여:
VB 상부의 SAO 필터링된 라인 I, J가 추가로 이용될 수 있음
또 다른 예에서,
해결책 2:
VB 바로 상부의 4 x 4 블록의 블록 분류(도 11의 좌측 하위도면)를 위하여:
라인 L을 라인 M에 패딩함
VB 바로 하부의 4 x 4 블록의 블록 분류(도 11의 우측 하위도면)를 위하여:
라인 I를 라인 H에 패딩함
가상적 경계가 4개의 라인일 때의 수정된 ALF 필터링
도 12a 및 도 12b는 ALF 루마 라인 버퍼를 회피하기 위하여 수정된 ALF 필터링을 참조하는 구현예를 개시한다. (가상적 경계 상부의) 라인 H, J, I 및 (가상적 경계 하부의) 라인 K, L, M의 필터링을 위하여, 7 x 7 루마 필터의 왜곡된 버전이 이용된다.
필터는 대칭적 방식으로 가상적 경계 상부 및 하부에 있는 계수를 폐기한다. 예컨대, 라인 M의 필터링을 위하여, 계수 c0은 가상적 경계 상부에 있고, 라인 H 필터링을 위하여 그 반대도 마찬가지이다. 그러므로, 이 경우에, 해결책 1에 대하여, 폐기된 계수 c0은 바로 수직인 이웃하는 계수에 가산된다. 그러므로,
Figure pct00113
이다. 해결책 2에서, 폐기된 계수는 중심 계수에 가산되어,
Figure pct00114
으로 귀착된다
유사하게, 라인 L 및 라인 I 필터링을 위하여, 수정된 계수 값은 해결책 1을 위한 것이다:
Figure pct00115
해결책 2에 대하여:
Figure pct00116
유사하게, 라인 J 및 라인 K 필터링을 위하여, 수정된 계수 값은 해결책 1을 위한 것이다:
Figure pct00117
이 해결책은 또한, 도 21에서 도시된 바와 같은 대칭적 패딩으로서 취급될 수 있다. 도 21a에서 도시된 바와 같이, 라인 M의 필터링을 위하여, 라인 K는 라인 J에 패딩되고, 라인 J는 라인 K에 패딩된다.
도 21b에서 도시된 바와 같이, 라인 L의 필터링을 위하여, 라인 K는 라인 J 및 라인 I에 패딩된다. 유사하게, 라인 I의 필터링을 위하여, 라인 J는 라인 K 및 라인 L에 패딩된다.
도 21c에서 도시된 바와 같이, 라인 K의 필터링을 위하여, 라인 K는 라인 J, I, 및 H에 패딩된다. 유사하게, 라인 J의 필터링을 위하여, 라인 J는 라인 K, L, 및 M에 패딩된다.
위에서 설명된 것과 유사한 프로세스가 또한, 크로마 ALF 필터링을 위하여 수행된다.
해결책 1에 대한 신택스 사양 변경은 이하에서 주어진다:
2.1 일반
이 프로세스의 입력은 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, recPictureCb, 및 recPictureCr이다.
이 프로세스의 출력은 적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, alfPictureCb, 및 alfPictureCr이다.
적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, alfPictureCb, 및 alfPictureCr에서의 샘플 값은 각각 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, recPictureCb, 및 recPictureCr에서의 샘플 값인 것으로 초기에 설정된다.
tile_group_alf_enabled_flag의 값이 1일 때, rx = 0..PicWidthInCtbs - 1 및 ry = 0..PicHeightInCtbs - 1인 루마 코딩 트리 블록 위치 ( rx, ry )를 갖는 모든 코딩 트리 유닛에 대하여, 다음이 적용된다:
alf_ctb_flag[ 0 ][ rx ][ ry ]의 값이 1일 때, 조항 2.2에서 특정된 바와 같은 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureL, alfPictureL, 및 ( rx << CtbLog2SizeY, ry << CtbLog2SizeY )인 것으로 설정된 루마 코딩 트리 블록 위치 ( xCtb, yCtb )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureL이다.
alf_ctb_flag[ 1 ][ rx ][ ry ]의 값이 1일 때, 조항 2.4에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCb, alfPictureCb인 것으로 설정된 alfPicture, 및 ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) )인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCb이다.
alf_ctb_flag[ 2 ][ rx ][ ry ]의 값이 1일 때, 조항 2.4에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCr, alfPictureCr인 것으로 설정된 alfPicture, 및 ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) ) 인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCr이다.
2.2 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
필터 인덱스에 대한 유도 프로세스 조항 2.3은 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력으로 하여, 그리고 x, y = 0..CtbSizeY - 1인 filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ]를 출력으로 하여 호출된다.
필터링된 재구성된 루마 샘플 alfPictureL[ x ][ y ]의 유도를 위하여, 현재의 루마 코딩 트리 블록 내부의 각각의 재구성된 루마 샘플 recPictureL[ x ][ y ]는 x, y = 0..CtbSizeY - 1로 다음과 같이 필터링된다:
filtIdx[ x ][ y ]에 의해 특정된 필터에 대응하는 루마 필터 계수의 어레이 f[ j ]는 j = 0..12로 다음과 같이 유도된다:
Figure pct00118
루마 필터 계수 filterCoeff는 transposeIdx[ x ][ y ]에 따라 다음과 같이 유도된다:
transposeIndex[ x ][ y ] = = 1일 경우에,
Figure pct00119
이와 다르게, transposeIndex[ x ][ y ] = = 2일 경우에,
Figure pct00120
이와 다르게, transposeIndex[ x ][ y ] = = 3일 경우에,
Figure pct00121
이와 다를 경우,
Figure pct00122
루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
Figure pct00123
필터 입력 샘플 포지션 오프셋 r = 0...6은 이하의 표 2-2a에서 도시된 바와 같은 루마 샘플 포지션 y에 따라 유도된다
Figure pct00124
변수 sum은 다음과 같이 유도된다:
Figure pct00125
수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 유도된다:
Figure pct00126
.
2.3 루마 샘플에 대한 ALF 전치 및 필터 인덱스에 대한 유도 프로세스
이 프로세스의 입력은 다음과 같다:
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ),
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력은 다음과 같다
x, y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ],
x, y = 0..CtbSizeY - 1인 전치 인덱스 어레이 transposeIdx[ x ][ y ].
루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
Figure pct00127
yCtb + CtbSizeY >= pic_height_in_luma_samples일 경우
Figure pct00128
이와 다르게, y < (CtbSizeY - 4)일 경우,
Figure pct00129
이와 다를 경우,
Figure pct00130
.
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음의 순서화된 단계에 의해 유도된다:
x, y = - 2..CtbSizeY + 1인 변수 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ], 및 filtD1[ x ][ y ]는 다음과 같이 유도된다:
x 및 y의 둘 모두가 짝수이거나 x 및 y의 둘 모두가 홀수일 경우에, 다음이 적용된다:
Figure pct00131
이와 다를 경우에, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ], 및 filtD1[ x ][ y ]는 0인 것으로 설정된다.
x, y = 0..( CtbSizeY - 1 ) >> 2인 변수 varTempH1[ x ][ y ], varTempV1[ x ][ y ], varTempD01[ x ][ y ], varTempD11[ x ][ y ], 및 varTemp[ x ][ y ]는 다음과 같이 유도된다:
(y << 2) == CtbSizeY - 8 및 yCtb + CtbSizeY < pic_height_in_luma_samples - 1일 경우
Figure pct00132
, i = -2..5 및 j = -2..3임
Figure pct00133
, i = -2..5 및 j = -2..3임
Figure pct00134
, i = -2..5 및 j = -2..3임
Figure pct00135
, i = -2..5 및 j = -2..3임
변수 Ac는 96으로서 설정됨
이와 다르게, ( y << 2) == CtbSizeY - 4 및 yCtb + CtbSizeY < pic_height_in_luma_samples - 1일 경우
Figure pct00136
, i = -2..5 및 j = 0..5임
Figure pct00137
, i = -2..5 및 j = 0..5임
Figure pct00138
, i = -2..5 및 j = 0..5임
Figure pct00139
, i = -2..5 및 j = 0..5임
변수 Ac는 96으로서 설정됨
이와 다를 경우,
Figure pct00140
, i, j = -2..5임
Figure pct00141
, i, j = -2..5임
Figure pct00142
, i, j = -2..5임
Figure pct00143
, i, j = -2..5임
Figure pct00144
(8-1168)
변수 Ac는 64로서 설정됨
x, y = 0..CtbSizeY - 1인 변수 dir1[ x ][ y ], dir2[ x ][ y ], 및 dirS[ x ][ y ]는 다음과 같이 유도된다:
변수 hv1, hv0, 및 dirHV는 다음과 같이 유도된다:
sumV[ x >> 2 ][ y >> 2 ]이 sumH[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00145
이와 다를 경우에, 다음이 적용된다:
Figure pct00146
변수 d1, d0, 및 dirD는 다음과 같이 유도된다:
sumD0[ x >> 2 ][ y >> 2 ]이 sumD1[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00147
이와 다를 경우에, 다음이 적용된다:
Figure pct00148
변수 hvd1, hvd0는 다음과 같이 유도된다:
Figure pct00149
변수 dirS[ x ][ y ], dir1[ x ][ y ], 및 dir2[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00150
x, y = 0..CtbSizeY - 1인 변수 avgVar[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00151
x = y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00152
dirS[ x ][ y ]가 1이 아닐 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00153
2.4 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 크로마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재의 크로마 코딩 트리 블록의 크기 ctbSizeC는 다음과 같이 유도된다:
Figure pct00154
.
필터링된 재구성된 크로마 샘플 alfPicture[ x ][ y ]의 유도를 위하여, 현재의 크로마 코딩 트리 블록 내부의 각각의 재구성된 크로마 샘플 recPicture[ x ][ y ]는 x, y = 0..ctbSizeC - 1로 다음과 같이 필터링된다:
크로마 샘플의 주어진 어레이 recPicture 내부의 대응하는 크로마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx, vy )는 다음과 같이 유도된다:
Figure pct00155
필터 입력 샘플 포지션 오프셋 r = 0...4는 이하의 표 2.4에서 도시된 바와 같은 크로마 샘플 포지션 y에 따라 유도된다.
Figure pct00156
변수 sum은 다음과 같이 유도된다:
Figure pct00157
수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 유도된다:
Figure pct00158
.
해결책 2에 대하여:
Figure pct00159
ITU JVET-Q0044에 따른 ALF 필터링 프로세스는 다음과 같다:
8.8.5 적응적 루프 필터 프로세스
8.8.5.1 일반
이 프로세스의 입력은 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, 및 ChromaArrayType이 0이 아닐 때, 어레이 recPictureCb 및 recPictureCr이다.
이 프로세스의 출력은 적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, 및 ChromaArrayType이 0이 아닐 때, 어레이 alfPictureCb 및 alfPictureCr이다.
적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, 및 ChromaArrayType이 0이 아닐 때, 어레이 alfPictureCb 및 alfPictureCr에서의 샘플 값은 각각, 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, 및 ChromaArrayType이 0이 아닐 때, 어레이 recPictureCb 및 recPictureCr에서의 샘플 값인 것으로 초기에 설정된다.
rx = 0..PicWidthInCtbsY - 1 및 ry = 0..PicHeightInCtbsY - 1인 루마 코딩 트리 블록 위치 ( rx, ry )를 갖는 모든 코딩 트리 유닛에 대하여, 다음이 적용된다:
alf_ctb_flag[ 0 ][ rx ][ ry ]가 1일 때, 조항 8.8.5.2에서 특정된 바와 같은 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureL, alfPictureL, 및 ( rx << CtbLog2SizeY, ry << CtbLog2SizeY )인 것으로 설정된 루마 코딩 트리 블록 위치 ( xCtb, yCtb )를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureL이다.
ChromaArrayType이 0이 아니고 alf_ctb_flag[ 1 ][ rx ][ ry ]가 1일 때, 조항 8.8.5.4에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCb인 것으로 설정된 recPicture, alfPictureCb인 것으로 설정된 alfPicture, ( ( rx << CtbLog2SizeY ) / SubWidthC, ( ry << CtbLog2SizeY ) / SubHeightC )인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC ), 및 alf_ctb_filter_alt_idx[ 0 ][ rx ][ ry ]인 것으로 설정된 대안적인 크로마 필터 인덱스 altIdx를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCb이다.
ChromaArrayType이 0이 아니고 alf_ctb_flag[ 2 ][ rx ][ ry ]가 1일 때, 조항 8.8.5.4에서 특정된 바와 같은 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스는 recPictureCr인 것으로 설정된 recPicture, alfPictureCr인 것으로 설정된 alfPicture, ( ( rx << CtbLog2SizeY ) / SubWidthC, ( ry << CtbLog2SizeY ) / SubHeightC )인 것으로 설정된 크로마 코딩 트리 블록 위치 ( xCtbC, yCtbC ), 및 alf_ctb_filter_alt_idx[ 0 ][ rx ][ ry ]인 것으로 설정된 대안적인 크로마 필터 인덱스 altIdx를 입력으로 하여 호출되고, 출력은 수정된 필터링된 픽처 alfPictureCr이다.
8.8.5.2 루마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPicture.
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
필터 인덱스에 대한 유도 프로세스 조항 8.8.5.3은 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPicture를 입력으로 하여, 그리고 x, y = 0..CtbSizeY - 1인 filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ]를 출력으로 하여 호출된다.
필터링된 재구성된 루마 샘플 alfPictureL[ x ][ y ]의 유도를 위하여, 현재의 루마 코딩 트리 블록 내부의 각각의 재구성된 루마 샘플 recPicture[ x ][ y ]는 x, y = 0..CtbSizeY - 1로 다음과 같이 필터링된다:
filtIdx[ x ][ y ]에 의해 특정된 필터에 대응하는 루마 필터 계수의 어레이 f[ j ] 및 루마 클립핑 값의 어레이 c[ j ]는 j = 0..11로 다음과 같이 유도된다:
AlfCtbFiltSetIdxY[ xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]가 16 미만일 경우에, 다음이 적용된다:
Figure pct00160
(1411)
Figure pct00161
(1412)
Figure pct00162
(1413)
이와 다르게, (AlfCtbFiltSetIdxY[ xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]가 16 이상일 경우에, 다음이 적용된다:
Figure pct00163
(1414)
Figure pct00164
(1415)
Figure pct00165
(1416)
루마 필터 계수 및 클립핑 값 인덱스 idx는 transposeIdx[ x ][ y ]에 따라 다음과 같이 유도된다:
transposeIndex[ x ][ y ]가 1일 경우에, 다음이 적용된다:
Figure pct00166
(1417)
이와 다르게, transposeIndex[ x ][ y ]가 2일 경우에, 다음이 적용된다:
Figure pct00167
(1418)
이와 다르게, transposeIndex[ x ][ y ]가 3일 경우에, 다음이 적용된다:
Figure pct00168
(1419)
이와 다를 경우에, 다음이 적용된다:
Figure pct00169
(1420)
i, j = -3..3인 루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx + i, vy + j )는 다음과 같이 유도된다.
Figure pct00170
(1421)
Figure pct00171
(1422)
변수 clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag는 ( xCtb, yCtb ) 및 ( x, y )를 입력으로 하여 조항 8.8.5.5에서 특정된 바와 같은 ALF 경계 포지션 유도 프로세스를 호출함으로써 유도된다.
변수 hx + i 및 vy + j는 ( xCtb, yCtb ), ( hx + i, vy + j ), 0, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag를 입력으로 하여 조항 8.8.5.6에서 특정된 바와 같은 ALF 샘플 패딩 프로세스를 호출함으로써 수정된다.
변수 applyAlfLineBufBoundaryis는 다음과 같이 유도된다:
현재의 코딩 트리 블록의 하부 경계가 현재의 픽처의 하부 경계이고, pic_height_in_luma_samples - yCtb <= CtbSizeY - 4일 경우에, applyAlfLineBufBoundary는 0인 것으로 설정된다:
이와 다를 경우에, applyAlfLineBufBoundary는 1인 것으로 설정된다.
수직 샘플 포지션 오프셋 y1, y2, 및 y3은 수직 루마 샘플 포지션 y 및 applyAlfLineBufBoundary에 따라 표 43에서 특정된다.
변수 curr은 다음과 같이 유도된다:
Figure pct00172
(1423)
변수 sum은 다음과 같이 유도된다:
Figure pct00173
(1424)
Figure pct00174
(1425)
수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 유도된다:
Figure pct00175
(1426)
Figure pct00176
8.8.5.3 루마 샘플에 대한 ALF 전치 및 필터 인덱스에 대한 유도 프로세스
이 프로세스의 입력은 다음과 같다:
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ),
적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPicture.
이 프로세스의 출력은 다음과 같다
x, y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ],
- x, y = 0..CtbSizeY - 1인 전치 인덱스 어레이 transposeIdx[ x ][ y ].
x, y = 0..( CtbSizeY - 1 ) >> 2인 변수 ac[ x ][ y ], sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ], 및 sumOfHV[ x ][ y ]는 다음과 같이 유도된다:
변수 x4 및 y4는 각각 ( x << 2 ) 및 ( y << 2 )로서 설정된다.
변수 minY, maxY, 및 ac[ x ][ y ]는 다음과 같이 유도된다:
y4가 ( CtbSizeY - 8 )이고, 다음의 조건 중의 하나가 참일 경우에, minY는 -2인 것으로 설정되고, maxY는 3인 것으로 설정되고, ac[ x ][ y ]는 3인 것으로 설정된다.
현재의 코딩 트리 블록의 하부 경계는 픽처의 하부 경계이고, pic_height_in_luma_samples - yCtb > CtbSizeY - 4이다.
현재의 코딩 트리 블록의 하부 경계는 픽처의 하부 경계가 아니다.
이와 다르게, y4가 ( CtbSizeY - 4 )이고, 다음의 조건 중의 하나가 참일 경우에, minY는 0인 것으로 설정되고, maxY는 5인 것으로 설정되고, ac[ x ][ y ]는 3인 것으로 설정된다.
현재의 코딩 트리 블록의 하부 경계는 픽처의 하부 경계이고, pic_height_in_luma_samples - yCtb > CtbSizeY - 4이다.
현재의 코딩 트리 블록의 하부 경계는 픽처의 하부 경계가 아니다
- 이와 다를 경우에, minY는 -2인 것으로 설정되고, maxY는 5인 것으로 설정되고, ac[ x ][ y ]는 2인 것으로 설정된다.
- 변수 clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag는 ( xCtb, yCtb ) 및 ( x4, y4 )를 입력으로 하여 조항 8.8.5.5에서 특정된 바와 같은 ALF 경계 포지션 유도 프로세스를 호출함으로써 유도된다.
- i, j = -3..6인 루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플의 각각의 루마 샘플에 대한 위치 ( hx4 + i, vy4 + j )는 다음과 같이 유도된다:
Figure pct00177
(1427)
Figure pct00178
(1428)
변수 hx4 + i 및 vy4 + j는 ( xCtb, yCtb ), ( hx4 + i, vy4 + j ), 0인 것으로 설정된 변수 isChroma, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag를 입력으로 하여 조항 8.8.5.6에서 특정된 바와 같은 ALF 샘플 패딩 프로세스를 호출함으로써 수정된다.
i, j = -2..5인 변수 filtH[ i ][ j ], filtV[ i ][ j ], filtD0[ i ][ j ], 및 filtD1[ i ][ j ]는 다음과 같이 유도된다:
i 및 j의 둘 모두가 짝수이거나 i 및 j의 둘 모두가 짝수가 아닐 경우에, 다음이 적용된다.
Figure pct00179
(1429)
Figure pct00180
(1430)
Figure pct00181
(1431)
Figure pct00182
(1432)
이와 다를 경우에, filtH[ i ][ j ], filtV[ i ][ j ], filtD0[ i ][ j ], 및 filtD1[ i ][ j ]는 0인 것으로 설정된다.
변수 sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ], 및 sumOfHV[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00183
, i = -2..5, j = minY..maxY임 (1433)
Figure pct00184
, i = -2..5, j = minY..maxY임 (1434)
Figure pct00185
, i = -2..5, j = minY..maxY임 (1435)
Figure pct00186
, i = -2..5, j = minY..maxY임 (1436)
Figure pct00187
(1437)
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음의 단계에 의해 유도된다:
1. x, y = 0..CtbSizeY - 1인 변수 dir1[ x ][ y ], dir2[ x ][ y ], 및 dirS[ x ][ y ]는 다음과 같이 유도된다:
- 변수 hv1, hv0, 및 dirHV는 다음과 같이 유도된다:
- sumV[ x >> 2 ][ y >> 2 ]이 sumH[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00188
(1438)
Figure pct00189
(1439)
Figure pct00190
(1440)
- 이와 다를 경우에, 다음이 적용된다:
Figure pct00191
(1441)
Figure pct00192
(1442)
Figure pct00193
(1443)
- 변수 d1, d0, 및 dirD는 다음과 같이 유도된다:
- sumD0[ x >> 2 ][ y >> 2 ]이 sumD1[ x >> 2 ][ y >> 2 ] 초과일 경우에, 다음이 적용된다:
Figure pct00194
(1444)
Figure pct00195
(1445)
Figure pct00196
(1446)
- 이와 다를 경우에, 다음이 적용된다:
Figure pct00197
(1447)
Figure pct00198
(1448)
Figure pct00199
(1449)
- 변수 hvd1, hvd0는 다음과 같이 유도된다:
Figure pct00200
(1450)
Figure pct00201
(1451)
- 변수 dirS[ x ][ y ], dir1[ x ][ y ], 및 dir2[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00202
(1452)
Figure pct00203
(1453)
Figure pct00204
(1454)
x, y = 0..CtbSizeY - 1인 변수 avgVar[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00205
(1455)
Figure pct00206
(1456)
x = y = 0..CtbSizeY - 1인 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ]는 다음과 같이 유도된다:
Figure pct00207
dirS[ x ][ y ]가 1이 아닐 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00208
(1457)
8.8.5.4 크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재의 픽처의 상부 좌측 샘플에 대하여 현재의 크로마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 크로마 위치 ( xCtbC, yCtbC ),
- 대안적인 크로마 필터 인덱스 altIdx.
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재의 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 유도된다:
Figure pct00209
(1458)
Figure pct00210
(1459)
필터링된 재구성된 크로마 샘플 alfPicture[ x ][ y ]의 유도를 위하여, 현재의 크로마 코딩 트리 블록 내부의 각각의 재구성된 크로마 샘플 recPicture[ x ][ y ]는 x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1로 다음과 같이 필터링된다:
- i, j = -2..2인 크로마 샘플의 주어진 어레이 recPicture 내부의 대응하는 크로마 샘플 ( x, y )의 각각의 크로마 샘플에 대한 위치 ( hx + i, vy + j )는 다음과 같이 유도된다.
Figure pct00211
(1460)
Figure pct00212
(1461)
- 변수 clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag는 ( xCtbC * SubWidthC, yCtbC * SubHeightC ) 및 ( x * SubWidthC, y *SubHeightC )를 입력으로 하여 조항 8.8.5.5에서 특정된 바와 같은 ALF 경계 포지션 유도 프로세스를 호출함으로써 유도된다.
- 변수 hx + i 및 vy + j는 ( xCtb, yCtb ), ( hx + i, vy + j ), 1인 것으로 설정된 변수 isChroma, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag를 입력으로 하여 조항 8.8.5.6에서 특정된 바와 같은 ALF 샘플 패딩 프로세스를 호출함으로써 수정된다.
- 변수 applyAlfLineBufBoundary는 다음과 같이 유도된다:
- 현재의 코딩 트리 블록의 하부 경계가 픽처의 하부 경계이고, pic_height_in_luma_samples - ( yCtbC * SubHeightC ) < CtbSizeY - 4일 경우에, applyAlfLineBufBoundary는 0인 것으로 설정된다:
- 이와 다를 경우에, applyAlfLineBufBoundary는 1인 것으로 설정된다.
- 수직 샘플 포지션 오프셋 y1 및 y2는 수직 크로마 샘플 포지션 y 및 applyAlfLineBufBoundary에 따라 표 43에서 특정된다.
- 변수 curr은 다음과 같이 유도된다:
Figure pct00213
(1462)
- 크로마 필터 계수의 어레이 f[ j ] 및 크로마 클립핑 값의 어레이 c[ j ]는 j = 0..5로 다음과 같이 유도된다:
Figure pct00214
(1463)
Figure pct00215
(1464)
- 변수 sum은 다음과 같이 유도된다:
Figure pct00216
(1465)
Figure pct00217
(1466)
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 유도된다:
Figure pct00218
(1467)
Figure pct00219
8.8.5.5 ALF 경계 포지션 유도 프로세스
이 프로세스의 입력은 다음과 같다:
- 현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ),
- 현재의 루마 코딩 트리 블록의 상부-좌측 샘플에 대하여 현재의 샘플을 특정하는 루마 위치 ( x, y ).
이 프로세스의 출력은 다음과 같다:
- 좌측 수직 경계 포지션 clipLeftPos,
- 우측 수직 경계 포지션 clipRightPos,
- 상부 수평 경계 포지션 clipTopPos,
- 하부 수평 경계 포지션 clipBottomPos,
- 상부 좌측 경계 플래그 clipTopLeftFlag,
- 하부 우측 경계 플래그 clipBotRightFlag.
변수 clipLeftPos, clipRightPos, clipTopPos, 및 clipBottomPos는 -128인 것으로 설정된다.
변수 clipTopLeftFlag 및 clipBotRightFlag는 둘 모두 0인 것으로 설정된다.
변수 clipTopPos는 다음과 같이 수정된다:
- y - ( CtbSizeY - 4 )가 0 이상일 경우에, 변수 clipTopPos는 yCtb + CtbSizeY - 4인 것으로 설정된다.
- 이와 다르게, VirtualBoundariesDisabledFlag가 1이고, yCtb + y - VirtualBoundariesPosY[ n ]이 임의의 n = 0..VirtualBoundariesNumHor - 1에 대하여 0 이상이고 3 미만일 경우에, 다음이 적용된다:
Figure pct00220
(1468)
- 이와 다르게, y가 3 미만이고 다음의 조건 중의 하나 이상이 참일 경우에, 변수 clipTopPos는 yCtb인 것으로 설정된다:
- 현재의 코딩 트리 블록의 상부 경계는 타일의 상부 경계이고, loop_filter_across_tiles_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 상부 경계는 슬라이스의 상부 경계이고, loop_filter_across_slices_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 상부 경계는 서브픽처의 상부 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]는 0이다.
변수 clipBottomPos는 다음과 같이 수정된다:
- VirtualBoundariesDisabledFlag가 1이고, VirtualBoundariesPosY[ n ]이 pic_height_in_luma_samples - 1 또는 0이 아니고, VirtualBoundariesPosY[ n ] - yCtb - y가 임의의 n = 0..VirtualBoundariesNumHor - 1에 대하여 0 초과이고 5 미만일 경우에, 다음이 적용된다:
Figure pct00221
(1469)
- 이와 다르게, CtbSizeY - 4 - y가 0 초과이고 5 미만일 경우에, 변수 clipBottomPos는 yCtb + CtbSizeY - 4인 것으로 설정된다.
- 이와 다르게, CtbSizeY - y가 5 미만이고 다음의 조건 중의 하나 이상이 참일 경우에, 변수 clipBottomPos는 yCtb + CtbSizeY인 것으로 설정된다:
- 현재의 코딩 트리 블록의 하부 경계는 타일의 하부 경계이고, loop_filter_across_tiles_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 하부 경계는 슬라이스의 하부 경계이고, loop_filter_across_slices_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 하부 경계는 서브픽처의 하부 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]는 0이다.
변수 clipLeftPos는 다음과 같이 수정된다:
- VirtualBoundariesDisabledFlag가 1이고, xCtb + x - VirtualBoundariesPosX[ n ]이 임의의 n = 0..VirtualBoundariesNumVer - 1에 대하여 0 이상이고 3 미만일 경우에, 다음이 적용된다:
Figure pct00222
(1470)
- 이와 다르게, x가 3 미만이고, 다음의 조건 중의 하나 이상이 참일 경우에, 변수 clipLeftPos는 xCtb인 것으로 설정된다:
- 현재의 코딩 트리 블록의 좌측 경계는 타일의 좌측 경계이고, loop_filter_across_tiles_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 좌측 경계는 슬라이스의 좌측 경계이고, loop_filter_across_slices_enabled_flag는 0이다.
- 현재의 코딩 트리 블록의 좌측 경계는 서브픽처의 좌측 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]는 0이다.
변수 clipRightPos는 다음과 같이 수정된다:
VirtualBoundariesDisabledFlag가 1이고, VirtualBoundariesPosX[ n ]- xCtb - x가 임의의 n = 0..VirtualBoundariesNumVer - 1에 대하여 0 초과이고 5 미만일 경우에, 다음이 적용된다:
Figure pct00223
(1471)
이와 다르게, CtbSizeY - x가 5 미만이고, 다음의 조건 중의 하나 이상이 참일 경우에, 변수 clipRightPos는 xCtb + CtbSizeY인 것으로 설정된다:
현재의 코딩 트리 블록의 우측 경계는 타일의 우측 경계이고, loop_filter_across_tiless_enabled_flag는 0이다.
현재의 코딩 트리 블록의 우측 경계는 슬라이스의 우측 경계이고, loop_filter_across_slices_enabled_flag는 0이다.
현재의 코딩 트리 블록의 우측 경계는 서브픽처의 우측 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]는 0이다.
변수 clipTopLeftFlag 및 clipBotRightFlag는 다음과 같이 수정된다:
루마 포지션 ( xCtb, yCtb )를 커버하는 코딩 트리 블록 및 루마 포지션 ( xCtb - CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스에 속하고, loop_filter_across_slices_enabled_flag가 0일 경우에, clipTopLeftFlag는 1인 것으로 설정된다.
루마 포지션 ( xCtb, yCtb )를 커버하는 코딩 트리 블록 및 루마 포지션 ( xCtb + CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스에 속하고, loop_filter_across_slices_enabled_flag가 0일 경우에, clipBotRightFlag는 1인 것으로 설정된다.
8.8.5.6 ALF 샘플 패딩 프로세스
이 프로세스의 입력은 다음과 같다:
현재의 픽처의 상부 좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ),
현재의 픽처의 상부-좌측 샘플에 대하여 이웃하는 샘플을 특정하는 루마 위치 ( x, y ),
컬러 컴포넌트가 크로마 컴포넌트인지 또는 그렇지 않은지 여부를 특정하는 플래그 isChroma,
좌측 수직 경계 포지션 clipLeftPos,
우측 수직 경계 포지션 clipRightPos,
상부 수평 경계 포지션 clipTopPos,
하부 수평 경계 포지션 clipBottomPos,
상부 좌측 경계 플래그 clipTopLeftFlag,
하부 우측 경계 플래그 clipBotRightFlag.
이 프로세스의 출력은 다음과 같다:
현재의 픽처의 상부-좌측 샘플에 대하여 이웃하는 샘플을 특정하는 수정된 루마 위치 ( x, y ),
변수 picWidth, picHeight, xCtbCur, yCtbCur, CtbSizeHor, CtbSizeVer, topBry, botBry, leftBry, 및 rightBry는 다음과 같이 유도된다:
Figure pct00224
(1472)
Figure pct00225
(1473)
Figure pct00226
(1474)
Figure pct00227
(1475)
Figure pct00228
(1476)
Figure pct00229
(1477)
Figure pct00230
(1478)
Figure pct00231
(1479)
Figure pct00232
(1480)
Figure pct00233
(1481)
변수 ( x , y )는 다음과 같이 수정된다:
topBryPos가 0 미만이 아닐 때, 다음이 적용된다:
Figure pct00234
(1482)
botBryPos가 0 미만이 아닐 때, 다음이 적용된다:
Figure pct00235
(1483)
leftBryPos가 0 미만이 아닐 때, 다음이 적용된다:
Figure pct00236
(1484)
rightBryPos가 0 미만이 아닐 때, 다음이 적용된다:
Figure pct00237
(1485)
다음의 조건의 전부가 참일 경우에, ( x, y )는 ( xCtbCur, y )인 것으로 설정된다:
clipTopLeftFlag는 참이다
topBryPos는 0 미만이고 leftBryPos는 0 미만이다
x는 xCtbCur 미만이고 y는 yCtbCur 미만이다
다음의 조건의 전부가 참일 경우에, ( x, y )는 ( xCtbCur + CtbSizeHor - 1, y )인 것으로 설정된다:
clipBotRightFlag는 참이다
botBryPos는 0 미만이고 rightBryPos는 0 미만이다
x는 xCtbCur + CtbSizeHor - 1 초과이고 y는 yCtbCur + CtbSizeVer - 1 초과이다.
예에서, ITU JVET-Q0150은 특히, CTU 경계에서 ALF 필터링 프로세스를 수정하도록 제안한다.
주요 변경들은 수학식 1425, 1467(위의 수학식 참조) 및 표 43 및 44(위의 표 참조)에 대한 변경이다.
JVET-Q0150에서 개시된 바와 같이, ALF 가상적 경계 프로세싱은 다음과 같이 특정된다:
Figure pct00238
(1425)
일반적으로, Curr은 현재 필터링되고 있는 중심 픽셀 값을 의미한다. y1, y2, 및 y3은 ALF 필터링에서 이용된 수직 루마 샘플 포지션 (y)이다. CtbSizey는 CTB 크기이다.
Figure pct00239
Figure pct00240
(1466)
Figure pct00241
수학식 1425 및 1466에서, ALF 필터 프로세스 동안의 필터링된 값은 (값 y에 의해 특정된) 현재의 중심 픽셀이 ALF 가상적 경계로부터 얼마나 떨어져 있는지에 종속되는 값(alfShiftY 또는 alfShiftC)에 의해 제산된다(또는 우측 시프팅됨). 일반적으로, alfShiftY는 루마에 대하여 이용되고, alfShiftC는 크로마 컴포넌트에 대하여 이용된다. 그러므로, alfShiftY 또는 alfShiftC의 값은 각각 루마 및 크로마 ALF 필터링을 위한 표 43, 표 44에 따른 y의 값에 따라 10 또는 7일 수 있다.
그러나, 위의 2개의 수학식에 따르면, ALF 필터링 프로세스에서 이용되는 반올림 값은 우측 시프트 값이 7 또는 10이더라도 항상 동일하다(64).
본 발명의 실시예는 ALF 필터링 프로세스 동안에 우측 시프트 값에 대응하는 반오림 값을 이용하도록 제안하였다. 이 해결책은 ALF 필터링이 다른 필터링 스테이지와 비교할 때에 정밀하고 일관적이라는 장점을 제공한다.
사양 변경은 다음과 같다:
Figure pct00242
(1425)
Figure pct00243
Figure pct00244
(1466)
Figure pct00245
일부 실시예에서, 샘플은 CTB의 단위로 프로세싱된다. 폭 및 높이의 둘 모두에 있어서의 각각의 루마 CTB에 대한 어레이 크기는 샘플의 단위로 CtbSizeY이다. 각각의 크로마 CTB에 대한 어레이의 폭 및 높이는 각각 샘플의 단위로 CtbWidthC 및 CtbHeightC이다.
2개의 새로운 변수 roundY 및 roundC는 각각 수학식 1425 및 1466에서 이용된다. 값은 각각 표 43 및 44에서 특정된다.
도 25에서 도시된 바와 같은 구현예에서, 픽처의 샘플 값을 필터링하는 방법은 개시되고, 방법은 다음을 포함한다:
S2501: 픽처의 블록에 대한 재구성된 샘플 값을 획득함.
예에서, 적응적 루프 필터 프로세스의 입력은 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, 및 sps_chroma_format_idc가 0이 아닐 때, 어레이 recPictureCb 및 recPictureCr이다.
적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, 및 sps_chroma_format_idc가 0이 아닐 때, 어레이 alfPictureCb 및 alfPictureCr에서의 샘플 값은 각각, 적응적 루프 필터 이전의 재구성된 픽처 샘플 어레이 recPictureL, 및 sps_chroma_format_idc가 0이 아닐 때, 어레이 recPictureCb 및 recPictureCr에서의 샘플 값인 것으로 초기에 설정된다.
sps_chroma_format_idc는 루마 샘플링에 대하여 클로마 샘플링을 특정한다.
Figure pct00246
S2502: 비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득함.
적응적 루프 필터(adaptive loop filter)(ALF)는 디코딩 프로세스의 일부로서 적용되고 APS에서 우반된 파라미터에 의해 제어되는 필터링 프로세스이다.
적응 파라미터 세트(adaptation parameter set)(APS)는 슬라이스 헤더에서 발견된 제로 이상의 신택스 엘리먼트에 의해 결정된 바와 같은 제로 이상의 슬라이스에 적용되는 신택스 엘리먼트를 포함하는 신택스 구조이다.
필터 인덱스에 대한 유도 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPicture를 입력으로 하여, 그리고 x, y = 0..CtbSizeY - 1인 filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ]를 출력으로 하여 호출된다.
비트스트림은 무선 네트워크 또는 유선 네트워크에 따라 획득될 수 있다. 비트스트림은 동축 케이블, 광섬유 케이블, 연선(twisted pair), 디지털 가입자 선로(digital subscriber line)(DSL), 또는 적외선, 무선(radio), 마이크로파, WIFI, 블루투스, LTE, 또는 5G와 같은 무선 기술을 이용하여 웹사이트, 서버, 또는 다른 원격 소스로부터 송신될 수 있다.
실시예에서, 비트스트림은 하나 이상의 코딩된 비디오 시퀀스(CVS)를 형성하는 액세스 유닛(AU)의 시퀀스의 표현을 형성하는, 네트워크 추상화 계층(NAL) 유닛 스트림 또는 바이트 스트림의 형태인 비트의 시퀀스이다.
일부 실시예에서는, 디코딩 프로세스를 위하여, 디코더 측이 비트스트림을 판독하고, 비트스트림으로부터 디코딩된 픽처를 유도하고; 인코딩 프로세스를 위하여, 인코더 측은 비트스트림을 생성한다.
일반적으로, 비트스트림은 신택스 구조에 의해 형성되는 신택스 엘리먼트를 포함할 것이다. 신택스 엘리먼트: 비트스트림에서 표현된 데이터의 엘리먼트.
신택스 구조: 특정된 순서로 비트스트림 내에 함께 존재하는 제로 이상의 신택스 엘리먼트.
구체적인 예에서, 비트스트림 포맷은 네트워크 추상화 계층(NAL) 유닛 스트림과 바이트 스트림 사이의 관계를 특정하고, 네트워크 추상화 계층(NAL) 유닛 스트림과 바이트 스트림의 어느 하나는 비트스트림으로 지칭된다.
비트스트림은 2개의 포맷: NAL 유닛 스트림 포맷 또는 바이트 스트림 포맷 중의 하나일 수 있다. NAL 유닛 스트림 포맷은 개념적으로 더욱 "기본적인" 유형이다. NAL 유닛 스트림 포맷은 NAL 유닛으로 칭해진 신택스 구조의 시퀀스를 포함한다. 이 시퀀스는 디코딩 순서로 순서화된다. NAL 유닛 스트림 내의 NAL 유닛의 디코딩 순서(및 컨텐츠)에 부과된 제약이 있다.
바이트 스트림 포맷은 NAL 유닛을 디코딩 순서로 순서화함으로써, 그리고 바이트의 스트림을 형성하기 위하여 시작 코드 프리픽스 및 제로 이상의 제로-값 바이트로 각각의 NAL 유닛을 프리픽스(prefix)함으로써 NAL 유닛 스트림 포맷으로부터 구성될 수 있다. NAL 유닛 스트림 포맷은 이러한 바이트의 스트림 내에서 고유한 시작 코드 프리픽스 패턴의 위치를 검색함으로써 바이트 스트림 포맷으로부터 추출될 수 있다.
이 조항은 비트스트림을 통해 주어지는, 소스와 디코딩된 픽처 사이의 관계를 특정한다.
비트스트림에 의해 표현되는 비디오 소스는 디코딩 순서에서의 픽처의 시퀀스이다.
소스 및 디코딩된 픽처는 하나 이상의 샘플 어레이로 각각 이루어진다:
- 루마 (Y) 단독(모노크롬).
- 루마 및 2개의 크로마(YCbCr 또는 YCgCo).
- 녹색, 청색, 및 적색(RGB로서 또한 알려진 GBR).
- 다른 비특정된 모노크롬 또는 3-자극치(tri-stimulus) 컬러 샘플링(예를 들어, XYZ로서 또한 알려진 YZX)을 표현하는 어레이.
이 어레이와 연관된 변수 및 용어는 루마(또는 L 또는 Y) 및 크로마로 지칭되고, 여기서, 2개의 크로마 어레이는 이용 중인 실제적인 컬러 표현 방법에 관계없이 Cb 및 Cr로 지칭된다. 이용 중인 실제적인 컬러 표현 방법은 ITU-T H.SEI|ISO/IEC 23002-7에서 특정된 바와 같은 VUI 파라미터에서 특정되는 신택스로 지시될 수 있다.
S2503: 필터 계수 및 블록에 대한 재구성된 샘플 값에 따라 합 값을 획득함.
예에서,
- 변수 curr은 다음과 같이 유도된다:
Figure pct00247
변수 sum은 다음과 같이 유도된다:
Figure pct00248
또 다른 예에서,
- 변수 curr은 다음과 같이 유도된다:
Figure pct00249
- 크로마 필터 계수의 어레이 f[ j ] 및 크로마 클립핑 값의 어레이 c[ j ]는 j = 0..5로 다음과 같이 유도된다:
Figure pct00250
- 변수 sum은 다음과 같이 유도된다:
Figure pct00251
S2504: 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림함.
예에서, 반올림 프로세스는, 가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하는 것, 및 수직 포지션에 기초하여 가산된 합 값을 시프팅하는 것을 포함한다.
예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftC - 1 ) ) ) >> alfShiftC이고, 여기서, sum은 합 값이고, alfShiftC는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
alfShiftC는 크로마 샘플 포지션에 대한 변수이고, alfShiftY는 루마 샘플 포지션에 대한 변수이고, 본 개시내용에서, 이 2개의 변수는 상호 교환가능하게 이용될 수 있다는 것이 이해될 수 있다.
예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다. 일부 예에서, t는 2, 3, 4, 5, 6 등이다.
예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
예에서, y가 0일 때, alfShiftY는 10이다.
예에서, y가 0이 아닐 때, alfShiftY는 7이다.
예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션이다.
Figure pct00252
또는
Figure pct00253
S2605: 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득함.
ALF 프로세스의 출력은 적응적 루프 필터 이후의 수정된 재구성된 픽처 샘플 어레이 alfPictureL, 및 sps_chroma_format_idc가 0이 아닐 때, 어레이 ccAlfPictureCb 및 ccAlfPictureCr이다.
예에서,
루마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재의 픽처의 상부-좌측 샘플에 대하여 현재의 루마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
필터 인덱스에 대한 유도 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPicture를 입력으로 하여, 그리고 x, y = 0..CtbSizeY - 1인 filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ]를 출력으로 하여 호출된다.
필터링된 재구성된 루마 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]의 유도를 위하여, 현재의 루마 코딩 트리 블록 내부의 각각의 재구성된 루마 샘플 recPicture[ xCtb + x ][ yCtb + y ]는 x, y = 0..CtbSizeY - 1로 다음과 같이 필터링된다:
- filtIdx[ x ][ y ]에 의해 특정된 필터에 대응하는 루마 필터 계수의 어레이 f[ j ] 및 루마 클립핑 값의 어레이 c[ j ]는 j = 0..11로 다음과 같이 유도된다:
- AlfCtbFiltSetIdxY[ xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]가 16 미만일 경우에, 다음이 적용된다:
Figure pct00254
- 이와 다르게, (AlfCtbFiltSetIdxY[ xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]가 16 이상일 경우에, 다음이 적용된다:
Figure pct00255
- 루마 필터 계수 및 클립핑 값 인덱스 idx는 transposeIdx[ x ][ y ]에 따라 다음과 같이 유도된다:
- transposeIdx[ x ][ y ]가 1일 경우에, 다음이 적용된다:
Figure pct00256
- 이와 다르게, transposeIdx[ x ][ y ]가 2일 경우에, 다음이 적용된다:
Figure pct00257
- 이와 다르게, transposeIdx[ x ][ y ]가 3일 경우에, 다음이 적용된다:
Figure pct00258
- 이와 다를 경우에, 다음이 적용된다:
Figure pct00259
- i, j = -3..3인 루마 샘플의 주어진 어레이 recPicture 내부의 대응하는 루마 샘플 ( x, y )의 각각의 루마 샘플에 대한 위치 ( hx + i, vy + j )는 다음과 같이 유도된다.
Figure pct00260
- 변수 clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag는 ( xCtb, yCtb ), ( x, y ), 및 4인 것으로 설정된 변수 vbOffset를 입력으로 하여 ALF 경계 포지션 유도 프로세스를 호출함으로써 유도된다.
- 변수 hx + i 및 vy + j는 ( xCtb, yCtb ), ( hx + i, vy + j ), 0인 것으로 설정된 변수 isChroma, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag를 입력으로 하여 ALF 샘플 패딩 프로세스를 호출함으로써 수정된다.
- 변수 applyAlfLineBufBoundaryis는 다음과 같이 유도된다:
- 현재의 코딩 트리 블록의 하부 경계가 현재의 픽처의 하부 경계이고, pps_pic_height_in_luma_samples - yCtb <= CtbSizeY - 4일 경우에, applyAlfLineBufBoundary는 0인 것으로 설정된다:
- 이와 다를 경우에, applyAlfLineBufBoundary는 1인 것으로 설정된다.
- 수직 샘플 포지션 오프셋 y1, y2, y3, 및 변수 alfShiftY는 수직 루마 샘플 포지션 y 및 applyAlfLineBufBoundary에 따라 표 45에서 특정된다.
- 변수 curr은 다음과 같이 유도된다:
Figure pct00261
- 변수 sum은 다음과 같이 유도된다:
Figure pct00262
Figure pct00263
Figure pct00264
Figure pct00265
- 수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 유도된다:
Figure pct00266
Figure pct00267
또 다른 예에서,
크로마 샘플에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재의 픽처의 상부-좌측 샘플에 대하여 현재의 크로마 코딩 트리 블록의 상부-좌측 샘플을 특정하는 크로마 위치 ( xCtbC, yCtbC ),
- 대안적인 크로마 필터 인덱스 altIdx.
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재의 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 유도된다:
Figure pct00268
필터링된 재구성된 크로마 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]의 유도를 위하여, 현재의 크로마 코딩 트리 블록 내부의 각각의 재구성된 크로마 샘플 recPicture[ xCtbC + x ][ yCtbC + y ]는 x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1로 다음과 같이 필터링된다:
- i, j = -2..2인 크로마 샘플의 주어진 어레이 recPicture 내부의 대응하는 크로마 샘플 ( x, y )의 각각의 크로마 샘플에 대한 위치 ( hx + i, vy + j )는 다음과 같이 유도된다.
Figure pct00269
- 변수 clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag는 ( xCtbC * SubWidthC, yCtbC * SubHeightC ), ( x * SubWidthC, y *SubHeightC ), 및 2 * SubHeightC인 것으로 설정된 변수 vbOffset를 입력으로 하여 ALF 경계 포지션 유도 프로세스를 호출함으로써 유도된다.
- 변수 hx + i 및 vy + j는 ( xCtbC * SubWidthC, yCtbC * SubHeightC ), ( hx + i, vy + j ), 1인 것으로 설정된 변수 isChroma, clipLeftPos, clipRightPos, clipTopPos, clipBottomPos, clipTopLeftFlag, 및 clipBotRightFlag를 입력으로 하여 ALF 샘플 패딩 프로세스를 호출함으로써 수정된다.
- 변수 applyAlfLineBufBoundary는 다음과 같이 유도된다:
- 현재의 코딩 트리 블록의 하부 경계가 픽처의 하부 경계이고, pps_pic_height_in_luma_samples - ( yCtbC * SubHeightC ) < CtbSizeY - 4일 경우에, applyAlfLineBufBoundary는 0인 것으로 설정된다:
- 이와 다를 경우에, applyAlfLineBufBoundary는 1인 것으로 설정된다.
- 수직 샘플 포지션 오프셋 y1, y2, 및 변수 alfShiftC는 수직 크로마 샘플 포지션 y 및 applyAlfLineBufBoundary에 따라 표 46에서 특정된다.
- 변수 curr은 다음과 같이 유도된다:
Figure pct00270
- 크로마 필터 계수의 어레이 f[ j ] 및 크로마 클립핑 값의 어레이 c[ j ]는 j = 0..5로 다음과 같이 유도된다:
Figure pct00271
- 변수 sum은 다음과 같이 유도된다:
Figure pct00272
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 유도된다:
Figure pct00273
Figure pct00274
도 26에서 도시된 바와 같은 구현예에서, 비디오 디코딩 장치(2600)가 개시되고, 장치(2600)는: 픽처의 블록에 대한 재구성된 샘플 값을 획득하도록 구성되는 재구성 모듈(2601); 비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하도록 구성되는 파싱 모듈(2602); 필터 계수 및 블록에 대한 재구성된 샘플 값에 따라 합 값을 획득하도록 구성되는 계산 모듈(2603); 반올림된 합 값을 획득하기 위하여, 블록 내의 샘플의 수직 포지션에 따라 합 값을 반올림하도록 구성되는 반올림 모듈(2604); 반올림된 합 값에 따라 블록에 대한 필터 재구성된 샘플 값을 획득하도록 구성되는 필터링 모듈(2605)을 포함한다.
예에서, 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, 여기서, sum은 합 값이고, alfShiftY는 샘플의 수직 포지션에 기초하여 결정되는 변수이다.
예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족될 때, alfShiftY는 10이고, 여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
예에서, 샘플의 수직 포지션이 이하의 조건: y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1 중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
여기서, y는 샘플의 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 CTB의 높이이고, t는 정수 값이다.
예에서, y가 0일 때, alfShiftY는 10이다.
예에서, y가 0이 아닐 때, alfShiftY는 7이다.
예에서, 블록 내의 샘플의 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션이다.
예에서, 반올림 모듈은
가산된 합 값을 획득하기 위하여 수직 포지션에 기초하여 결정되는 값을 합 값에 가산하고, 반올림된 합 값을 획득하기 위하여 수직 포지션에 기초하여 가산된 합 값을 시프팅하도록 구성된다.
비디오 디코딩 장치에서의 모듈에 대한 추가의 세부사항은 위의 방법 예 및 구현예를 참조한다.
도 12c에서 도시되는 추가적인 해결책(해결책 3)은 또한, (가상적 경계 상부의) 라인 H, J, I 및 (가상적 경계 하부의) 라인 K, L, M의 필터링을 수행하기 위하여 이용될 수 있다. 주어진 블록에 대한 지배적인 에지 방향에 기초하여, ALF 필터가 수정된다.
주어진 블록에 대한 지배적인 에지 방향을 유도할 수 있는 임의의 알고리즘이 이용될 수 있고, 이하에서 설명된 알고리즘으로 제한되지 않는다는 것이 주목되어야 한다. 주어진 블록에 대한 지배적인 에지 방향은 경사 값
Figure pct00275
, 및
Figure pct00276
을 이용하여 주어진 블록에 대하여 연산된 경사 값, 및 ALF 블록 분류 동안에 연산된 차원성 값 D를 이용하여 연산될 수 있다. 차원성 값 D가 0, 1, 2일 경우에, 도 12c 하위 도면 c에서 도시된 바와 같이, 해결책 1(계수를 수직으로 가산함)이 선택된다. 차원성 값 D가 3 또는 4일 경우(블록의 차원성이 강력한 "대각선" 에지를 가지는 경우), 다음의 추가의 조건 g d1 이 g d2 이상인지가 체크된다. 참일 경우에, 135도 경사가 지배적인 에지 경사로서 선택되고, 그러므로, 도 12c 하위도면 b에서 도시된 바와 같이, 수정된 필터링은 다음과 같이 수행된다:
라인 M 및 H에 대하여,
Figure pct00277
라인 L 및 I에 대하여,
Figure pct00278
Figure pct00279
라인 J 및 K에 대하여:
Figure pct00280
다른 한편으로, g d2 가 g d1 초과일 경우, 도 12c 하위도면 a에서 도시된 바와 같이, 수정된 필터링은 다음과 같이 수행된다:
라인 M 및 H에 대하여,
Figure pct00281
라인 L 및 I에 대하여,
Figure pct00282
Figure pct00283
라인 J 및 K에 대하여:
Figure pct00284
주어진 필터가 표 1에서 주어진 바와 같이 변환될 경우에, 위의 모든 해결책이 여전히 이용될 수 있다. 위의 해결책에서의 수학식은 변환이 적용되지 않는 경우에 대하여 주어진다. 변환된 필터에 대하여, 수학식에서의 계수는 각각 수학식 17, 18, 19에 기초하여 대체될 수 있다.
도 19a 및 도 19b에서 도시되는 추가적인 해결책(해결책 4)은 패딩된 계수의 절대 합이 임계치(T) 곱하기 비 패딩된 계수의 절대 합 초과일 때에 필터링을 디세이블한다. 예를 들어,
라인 M 및 H에 대하여, (2*abs(c0) > (T*(2*(abs(c1) + abs(c2) + abs(c3) + abs(c4) + abs(c5) + abs(c6) + abs(c7) + abs(c8) + abs(c9) + abs(c10) + abs(c11)) + abs(c12))) 일 경우에, ALF 필터링은 라인 M 및 H에 대하여 디세이블된다.
유사하게, 라인 L 및 I에 대하여, (2*(abs(c0) + abs(c1) + abs(c2) + abs(c3)) > (T*(2*(abs(c4) + abs(c5) + abs(c6) + abs(c7) + abs(c8) + abs(c9) + abs(c10) + abs(c11)) + abs(c12))) 일 경우에, ALF 필터링은 라인 L 및 I에 대하여 디세이블된다.
유사하게, 라인 J 및 K에 대하여, (2*(abs(c0) + abs(c1) + abs(c2) + abs(c3) + abs(c4) + abs(c5) + abs(c6) + abs(c7) + abs(c8)) > (T*(2*(abs(c9) + abs(c10) + abs(c11)) + abs(c12))) 일 경우에, ALF 필터링은 라인 J 및 K에 대하여 디세이블된다.
여기서, T는 일반적으로 0 내지 1 사이의 범위인 분수 값을 취할 수 있는 임계치이다. 예를 들어, T 값은 0.5, 0.6, 또는 0.7일 수 있다
유사하게, 크로마에 대하여, 도 20에서 도시된 바와 같이, 라인 N 및 K에 대하여, (2*abs(c0) > (T*(2*(abs(c1) + abs(c2) + abs(c3) + abs(c4) + abs(c5)) + abs(c6)))) 일 경우에, ALF 필터링은 라인 N 및 K에 대하여 디세이블된다.
라인 M 및 L에 대하여, ((2*(abs(c0) + abs(c1) + abs(c2) + abs(c3)) > (T*(2*(abs(c4) + abs(c5)) + abs(c6))))일 경우에, ALF 필터링은 라인 M 및 L에 대하여 디세이블된다.
함수 abs(x)는 다음과 같이 정의된다:
Figure pct00285
대안적인 해결책에 따르면, 필터링 동작은 결정된 기하학적 변환 및 가상적 경계에 대한 필터링된 픽셀 샘플의 수평 인접성에 기초하여 디세이블된다. 다시 말해서, 필터링되어야 할 픽셀 샘플은 가상적 경계 상부 또는 하부의 N개의 샘플(수평 거리는 수평 경계까지 N임)이고, 결정된 기하학적 필터 변환은 transformation_X인 것으로 가정한다. 필터링 동작은 다음의 경우에 픽셀 샘플에 대하여 디세이블된다;
1. N이 미리 결정된 임계치, 즉, thr보다 작을 경우,
2. 그리고 transformation_X가 비트스트림에서 미리 결정되거나 지시되는 변환들의 세트 사이에 있을 경우.
하나의 구체적인 예에 따르면, thr은 1이다(가상적 경계의 1개 라인 상부 및 1개 라인 하부에 있는 샘플의 행(row)을 지시함). 또 다른 예에 따르면, 변환들의 세트는 '변환 없음', '대각선', '수직 플립', '회전' 중의 적어도 하나를 포함한다. 또 다른 예에 따르면, thr은 1이고, 변환들의 세트는 '변환 없음', '대각선', '수직 플립', '회전' 중의 적어도 하나를 포함한다. 또 다른 예에서, 변환들의 세트는 대각선 및 회전을 포함한다.
변환들의 세트는 모든 가능한 필터 변환들의 서브세트인 것이 주목된다. 문서 JVET1001_v7 "다용도 비디오 코딩(초안 3)[Versatile Video Coding (Draft 3)]" 문서(http://phenix.it-sudparis.eu/jvet/에서 공개적으로 접근가능함)에 따르면, 4개의 가능한 필터 변환이 있다. 문서에서, 필터 변환은 서브섹션 "8.5.4.3 루마 샘플에 대한 ALF 전치 및 필터 인덱스에 대한 유도 프로세스(Derivation process for ALF transpose and filter index for luma samples)"에 따라 결정되고, 결정된 변환은 변수 transposeIdx에 의해 지시된다. transposeIdx에 의해 가정될 수 있는 값은 0, 1, 2, 및 3이다.
하나의 예에 따르면, 필터링 동작은 transposeIdx가 미리 결정된 값인 것으로 결정될 경우에 픽셀 샘플에 대하여 디세이블된다. 미리 결정된 값들의 세트는 0 내지 3 사이의 적어도 하나의 값을 포함한다는 것이 주목된다. 미리 결정된 값들의 세트는 가능한 값들의 전부(0, 1, 2, 및 3의 전부)를 포함하지는 않는다는 것이 추가로 주목된다.
또 다른 예에서, 필터링 동작은 필터링되어야 할 픽셀이 가상적 경계 1개 샘플 상부 또는 하부에 있고 결정된 필터 변환이 미리 결정된 값들의 세트 사이에 있을 경우에 디세이블된다.
크로마 샘플에 대한 라인 버퍼 요건:
도 13은 크로마 샘플에 대한 라인 버퍼 요건을 도시한다. 디블록킹이 오직 2개의 샘플을 이용하고 최대 1개의 샘플을 수정하므로, 크로마 ALF 라인 버퍼 요건은 6.25 라인으로 내려간다. 명시적 블록 분류가 크로마 샘플에 대하여 수행되지 않으므로, 필터링만이 가상적 경계(VB)에서 수정되어야 한다. 도 14는 크로마에 대한 수정된 ALF 필터를 참조하고, 패딩(해결책 1)을 이용하거나 폐기된 계수를 중심 계수에 가산(해결책 2)함으로써 생성된 필터의 왜곡된 버전을 도시한다.
가상적 경계가 6개의 라인일 때의 수정된 블록 분류
도 15는 디블록킹 필터가 라인 버퍼의 6개의 라인을 이용할 때의 ALF 라인 버퍼 요건을 도시한다. 그러므로, 가상적 경계는 CTU 경계의 6개 라인 상부에 있다. 이 경우에 대하여, 총 루프 필터 라인 버퍼 요건은 15.25 라인으로 증가한다.
라인 버퍼 요건을 감소시키기 위하여, 도 16은 가상적 경계에서 블록 분류 판정을 재이용하는 것 및 필터링을 위한 절단된 버전(truncated version)을 이용하는 것을 개시하고, 도 16은 이하에서 설명되는 하나의 해결책을 도시한다:
라인 C에서 시작하는 4 x 4 블록의 블록 분류는 라인 H를 라인 I에 패딩함으로서 달성되어, 블록 분류가 가상적 경계 하부의 임의의 라인을 요구하지 않는다는 것이 보장된다. 도 16에서, 라인 H는 라인 I에 패딩되어, 라인 C에서 시작하는 4 x 4 블록의 블록 분류 판정이 용이하게 된다.
라인 G, H는 블록 C, D, E, F로부터의 블록 분류 판정을 재이용한다
라인 I, J는 블록 K, L, M, N으로부터의 블록 분류 판정을 이용한다
필터의 절단된 버전(슬라이드 8 및 9)은 라인 F, G, H, I, J, K를 필터링하기 위하여 이용된다.
라인 G, H는 블록 C, D, E, F로부터의 블록 분류 판정을 재이용한다. 라인 I, J는 라인 K, L, M, N으로부터의 블록 분류 판정을 재이용하고 (또는) 라인 I, J, K, L은 하나의 4 x 4 블록 세그먼트로서 간주될 수 있고 분류는 이 4개의 라인에 대하여 수행되고, 그 다음으로, 라인 M, N은 블록 K, L, M, N으로부터의 블록 분류 판정을 재이용한다.
도 17은 상부 픽처 경계에서의 첫 번째 2개의 라인 및 하부 픽처 경계에서의 마지막 2개의 라인이 별도로 분류 및 필터링되고 ALF 분류 및 필터링 그리드(grid)는 Y 축에서 아래로 2개 샘플만큼 이동되는 그리드-시프팅(grid-shifting) 접근법을 이용한다. 이 해결책은 주어진 4 x 4 블록이 결코 가상적 경계를 가로질러서 중첩하거나 교차하지 않는다는 장점을 가진다. 일반적으로, 가상적 경계 크기가 4의 배수(ALF 블록 분류 크기)가 아닐 때, ALF 필터링 그리드는 다음의 공식을 이용함으로써 시프팅될 수 있다:
((가상적 경계 크기) / 4) - 4. 실제적인 필터링 자체를 위하여, 도 12a, 도 12b, 및 도 12c에서 설명된 필터의 왜곡된 버전이 이용될 수 있다. 가상적 경계가 CTU 경계의 6개 라인 상부에 있을 때, 도 17을 참조하고, 해결책은 "그리드 시프팅" 접근법을 이용한다.
ALF 필터 그리드는 Y-축에서 2개 라인만큼 시프팅되어, 주어진 4 x 4 블록 분류 윈도우가 주어진 가상적 경계를 교차하지 않는다는 것이 보장된다.
일반적으로, 가상적 경계 크기가 4의 배수(ALF 블록 분류 크기)가 아닐 때, 그리드는 Y-축 상에서 다음의 값만큼 시프팅될 수 있다:
(((가상적 경계 크기) / 4) - 4 ).
프레임 경계에서,
상부 프레임 경계에서, 라인 A', B'는 세 번째 라인에서 시작하는 4x4 블록으로부터의 블록 분류 판정을 재이용한다.
유사하게, 하부 프레임 경계에서의 마지막 2개 라인에 대하여, 블록 분류는 4 x 4 블록 분류 윈도우 바로 상부로부터의 판정을 재이용한다.
발명의 실시예는 비디오 코딩에 기초하여 주로 설명되었지만, 코딩 시스템(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)을 위하여 동일하게 이용될 수 있다.
다음은 인코딩 방법의 응용예 뿐만 아니라, 전술한 실시예에서 도시된 바와 같은 인코딩 방법 뿐만 아니라 디코딩 방법, 및 이들을 이용하는 시스템의 설명이다.
도 23은 컨텐츠 분배 서비스를 실현하기 위한 컨텐츠 공급 시스템(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)는 디코딩된 데이터를 수신하고 도시하기 위하여 그 안에 연결된다.
이 시스템에서의 각각의 디바이스가 인코딩 또는 디코딩을 수행할 때, 전술한 실시예에서 도시된 바와 같은 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스가 이용될 수 있다.
도 24는 단말 디바이스(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)으로 이송하기 전에, 비디오 프레임은 버퍼(도 24에서 도시되지 않음) 내에 저장될 수 있다. 유사하게, 오디오 프레임을 동기 유닛(3212)으로 이송하기 전에, 오디오 프레임은 버퍼(도 24에서 도시되지 않음) 내에 저장될 수 있다.
동기 유닛(3212)은 비디오 프레임 및 오디오 프레임을 동기화하고, 비디오/오디오를 비디오/오디오 디스플레이(3214)로 공급한다. 예를 들어, 동기 유닛(3212)은 비디오 및 오디오 정보의 제시를 동기화한다. 정보는 코딩된 오디오 및 시각적 데이터의 제시에 관한 타임 스탬프(time stamp) 및 데이터 스트림 자체의 전달에 관한 타임 스탬프를 이용하여 신택스에서 코딩될 수 있다.
서브타이틀이 스트림 내에 포함될 경우에, 서브타이틀 디코더(3210)는 서브타이틀을 디코딩하고, 서브타이틀을 비디오 프레임 및 오디오 프레임과 동기화하고, 비디오/오디오/서브타이틀을 비디오/오디오/서브타이틀 디스플레이(3216)로 공급한다.
본 출원은 전술한 시스템으로 제한되지는 않고, 전술한 실시예에서의 픽처 인코딩 디바이스 또는 픽처 디코딩 디바이스의 어느 하나가 다른 시스템, 예를 들어, 자동차 시스템 내로 편입될 수 있다.
예컨대, 인코더(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들의 세트(예컨대, 칩셋)를 포함하는 널리 다양한 디바이스 또는 장치에서 구현될 수 있다. 다양한 컴포넌트, 모듈, 또는 유닛은 개시된 기법을 수행하도록 구성된 디바이스의 기능적 측면을 강조하기 위하여 이 개시내용에서 설명되어 있지만, 상이한 하드웨어 유닛에 의한 실현을 반드시 요구하지는 않는다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛은 코덱 하드웨어 유닛 내에 조합될 수 있거나, 적당한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서를 포함하는 상호동작하는 하드웨어 유닛의 집합에 의해 제공될 수 있다.
본 개시내용은 다음의 추가의 측면을 개시한다:
예 1. 픽처의 샘플 값을 필터링하는 방법으로서, 픽처는 제1 블록 및 제2 블록을 포함하고, 제1 블록 및 제2 블록은 블록 경계에서 서로 인접하고, 여기서, 픽처는 n개의 행 및 m개의 열로 배열된 적어도 nxm 샘플 p(i,j)을 포함하고, 여기서, i는 1로부터 n까지 이어지는 행 인덱스이고, j는 1로부터 m까지 이어지는 열 인덱스이고, 여기서, i가 1부터 k까지인 샘플 p(i,j)는 제1 블록에 속하고, i가 k+1부터 n까지인 샘플은 제2 블록에 속하고, 여기서, k는 n 미만인 정수이고,
여기서 방법은, k 미만인 정수 t 및 1 내지 m의 범위인 정수 j로:
1 내지 k-t-1의 범위인 정수 i로, 필터를 샘플 p(i,j)의 값에 적용함으로써 필터링된 샘플 값을 생성하는 단계 - 필터는 필터 지원 샘플들의 세트에 의해 지원되고, 필터 지원 샘플들의 세트는 샘플 p(i,j) 및 하나 이상의 추가의 샘플을 포함하고, 필터 지원 샘플들의 세트는 k-t-1 초과인 행 인덱스 i'을 갖는 임의의 샘플 p(i',j')을 포함하지 않음 -, 및/또는
k-t 내지 k의 범위인 정수 i로, 필터를 샘플 p(i,j)의 값에 적용함으로써 필터링된 샘플 값을 생성하는 단계 - 필터는 필터 지원 샘플들의 세트에 의해 지원되고, 필터 지원 샘플들의 세트는 샘플 p(i,j) 및 하나 이상의 추가의 샘플을 포함하고, 필터 지원 샘플들의 세트는 k-t 미만인 행 인덱스 i'을 갖는 임의의 샘플 p(i',j')을 포함하지 않음 - 를 포함한다.
예 2. 픽처의 샘플 값을 필터링하는 방법으로서, 픽처는 제1 블록 및 제2 블록을 포함하고, 제1 블록 및 제2 블록은 블록 경계에서 서로 인접하고,
여기서, 픽처는 n개의 행 및 m개의 열로 배열된 적어도 nxm 샘플 p(i,j)을 포함하고, 여기서, i는 1로부터 n까지 이어지는 행 인덱스이고, j는 1로부터 m까지 이어지는 열 인덱스이고, 여기서, i가 1부터 k까지인 샘플 p(i,j)는 제1 블록에 속하고, i가 k+1부터 n까지인 샘플은 제2 블록에 속하고, 여기서, k는 n 미만인 정수이고,
여기서 방법은, k 미만인 정수 t로, 그리고 1로부터 k까지인 각각의 i 및 1로부터 m까지의 각각의 j에 대하여:
필터를 샘플 p(i,j)의 값에 적용함으로써 필터링된 샘플 값을 생성하는 단계 - 필터는 필터 지원 샘플들의 세트에 의해 지원되고, 필터 지원 샘플들의 세트는 샘플 p(i,j) 및 하나 이상의 추가의 샘플을 포함하고, i가 1 내지 k-t-1의 범위에 있을 경우에, 필터 지원 샘플들의 세트는 k-t-1 초과인 행 인덱스 i'을 갖는 임의의 샘플 p(i',j')을 포함하지 않고, i가 k-t 내지 k의 범위에 있을 경우에, 필터 지원 샘플들의 세트는 행 인덱스 i'이 k-t 미만인 임의의 샘플 p(i',j')를 포함하지 않음 - 를 포함한다.
예 3. 예 1 또는 2의 방법에 있어서, 제1 블록은 제1 코딩 트리 유닛(coding tree unit)(CTU)이고, 제2 블록은 제2 CTU이다.
예 4. 예 1 내지 3 중 어느 하나의 예의 방법에 있어서, t는 2, 3, 4, 5, 또는 6이다.
예 5. 예 1 내지 4 중 어느 하나의 예의 방법에 있어서,
1 내지 k-t-1의 범위인 각각의 i에 대하여, 그리고 1로부터 m까지의 각각의 j에 대하여, 필터 지원 샘플들의 세트는 i'이 1 내지 k-t-1의 범위인 다수의 샘플 p(i',j')를 포함하고;
k-t 내지 k의 범위인 각각의 i에 대하여, 그리고 1로부터 m까지의 각각의 j에 대하여, 필터 지원 샘플들의 세트는 i'이 k-t 이상인 다수의 샘플 p(i',j')를 포함한다.
예 6. 예 5의 방법에 있어서, k-t 내지 k의 범위인 각각의 i에 대하여, 그리고 1로부터 m까지의 각각의 j에 대하여, 필터 지원 샘플들의 세트는 i'이 k 초과인 하나 이상의 샘플 p(i',j')를 더 포함한다.
예 7. 예 1 내지 6 중 어느 하나의 예의 방법에 있어서, 필터는 인-루프 필터(in-loop filter)이다.
예 8. 예 1 내지 7 중 어느 하나의 예의 방법에 있어서, 필터는 디블록킹 필터를 포함한다.
예 9. 예 1 내지 8 중 어느 하나의 예의 방법에 있어서, 필터는 디블록킹 필터, 샘플 적응적 오프셋 필터(sample adaptive offset filter)(SAO), 적응적 루프 필터(adaptive loop filter)(ALF), 또는 교차 컴포넌트 적응적 루프 필터(cross component adaptive loop filter)(CCALF)를 포함한다.
예 10. 예 1 내지 9 중 어느 하나의 예의 방법에 있어서,
제1 블록의 샘플 값을 결정하는 단계;
필터를 행 1 내지 k-t-1 내의 제1 블록의 샘플 값에 적용하는 단계;
행 k-t로부터 k까지의 제1 블록의 샘플 값을 버퍼 내에 저장하는 단계;
제2 블록의 샘플 값을 결정하는 단계; 및
버퍼에 저장된 행 k-t 내의 제1 블록의 샘플 값에 필터를 적용하는 단계를 포함한다.
예 11. 예 1 내지 10 중 어느 하나의 예의 방법에 있어서, 필터는 적응적 루프 필터 또는 교차 컴포넌트 적응적 루프 필터이거나, 적응적 필터는 현재의 블록의 샘플 및 블록을 포함하는 샘플도 액세스하는 분류 단계를 이용함으로써 결정된다.
예 12. 예 11의 방법에 있어서, 블록을 포위하는 샘플이 이용가능하지 않을 때, 적응적 필터는 정규화 값을 이용함으로써 결정되고, 정규화 값은 양의 정수 값이고, 주어진 블록을 포위하는 액세스가능한 샘플의 수에 종속적이다.
예 13. 예 11 또는 12의 방법에 있어서, 정규화 값은 액세스가능한 샘플의 수와 역 관계를 가진다.
예 14. 예 10 내지 13 중 어느 하나의 예의 방법에 있어서, 블록을 포위하는 모든 샘플이 이용가능하지 않을 때, 정규화 값은 96이다.
예 15. 예 10 내지 14 중 어느 하나의 예의 방법에 있어서, 블록을 포위하는 모든 샘플이 이용가능할 때, 정규화 값은 64이다.
예 16. 예 1 내지 10 중 어느 하나의 예의 방법에 있어서, 필터는 적응적 루프 필터이다.
예 17. 예 1 내지 10 중 어느 하나의 예의 방법에 있어서, 요구된 샘플이 주어진 샘플을 필터링하기 위하여 액세스가능하지 않을 때, 대칭적 패딩 동작이 적용된다.
예 18. 예 17의 방법에 있어서, 대칭적 패딩 동작은 이용불가능한 샘플을, 필터링 동작을 위하여 이용가능한 바로 이웃하는 샘플에 의해 대체하는 것으로서 정의된다.
예 19. 예 17 또는 18 중 어느 하나의 예의 방법에 있어서, 대칭적 패딩 동작은, 하나의 측부 상에서, 필터 샘플이 여전히 액세스가능할 수 있더라도, 필터의 양쪽 측부 상에서 패딩 동작을 적용함으로써 필터가 대칭적으로 되도록 하는 방법으로서 정의된다.
예 20. 예 1 내지 19 중 어느 하나의 예의 방법에 있어서, 픽처는 비디오 시퀀스의 프레임 내에 포함된다.
예 21. 예 1 내지 20 중 어느 하나의 예의 방법에 있어서, 방법은 픽처를 인코딩하거나 디코딩하기 위하여 수행되거나, 픽처를 포함하는 비디오 시퀀스를 인코딩하거나 디코딩하기 위하여 수행된다.
예 22. 예 1 내지 21 중 어느 하나의 예의 방법에 있어서, 필터링 프로세스에서 이용된 반올림 값은 샘플 p(i,j)의 수직 포지션(y 좌표)에 종속적이다.
예 23. 예 1 내지 22 중 어느 하나의 예의 방법에 있어서, 필터 프로세스에서 이용된 반올림 값은 샘플 p(i,j)의 수직 포지션(y 좌표) 및 필터링 프로세스에서 이용된 양자화 값(예컨대, >> 우측 시프트 값)에 종속적이다.
예 24. 예 23의 방법에 있어서, 양자화 값이 변수 Q에 의해 지시될 때, 반올림 값은 pow (2, Q-1)이고, 변수는 샘플 p(i,j)의 수직 포지션(y 좌표)에 따라 획득된다.
예 25. 예 22 내지 24 중 어느 하나의 예의 방법에 있어서, 샘플 p(i,j)의 수직 포지션(y 좌표)이 이하의 조건 중의 임의의 하나로 만족될 때, 반올림 값은 512이다:
y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1(일부 예에서, 크로마에 대하여, t는 2이고; 루마에 대하여, t는 4임).
예 26. 예 22 내지 25 중 어느 하나의 예의 방법에 있어서, 샘플 p(i,j)의 수직 포지션(y 좌표)이 이하의 조건 중의 임의의 하나로 만족되지 않을 때, 반올림 값은 64이다:
y = = CtbSizeY - t-1, 또는 y = = CtbSizeY - t, 또는 y = = ctbHeightC - t, 또는 y = = ctbHeightC - t-1.
예 27. 예 1 내지 26 중 어느 하나의 예에 따른 방법을 수행하기 위한 프로세싱 회로부를 포함하는 인코더(20).
예 28. 예 1 내지 26 중 어느 하나의 예에 따른 방법을 수행하기 위한 프로세싱 회로부를 포함하는 디코더(30).
예 29. 예 1 내지 26 중 어느 하나의 예에 따른 방법을 수행하기 위한 프로그램 코드를 포함하는 컴퓨터 프포그램.
예 30. 디코더로서,
하나 이상의 프로세서; 및
프로세서에 결합되고, 프로세서에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서에 의해 실행될 때, 예 1 내지 26 중 어느 하나의 예에 따른 방법을 수행하도록 디코더를 구성함 - 를 포함한다.
예 31. 인코더로서,
하나 이상의 프로세서; 및
프로세서에 결합되고, 프로세서에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 프로그래밍은, 프로세서에 의해 실행될 때, 예 1 내지 26 중 어느 하나의 예에 따른 방법을 수행하도록 인코더를 구성함 - 를 포함한다.

Claims (18)

  1. 픽처의 샘플 값을 필터링하는 방법으로서,
    상기 픽처의 블록에 대한 재구성된 샘플 값을 획득하는 단계;
    비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하는 단계;
    상기 필터 계수 및 상기 블록에 대한 상기 재구성된 샘플 값에 따라 합 값을 획득하는 단계;
    반올림된 합 값을 획득하기 위하여, 상기 블록 내의 샘플의 수직 포지션에 따라 상기 합 값을 반올림하는 단계;
    상기 반올림된 합 값에 따라 상기 블록에 대한 필터 재구성된 샘플 값을 획득하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, sum은 상기 합 값이고, alfShiftY는 상기 샘플의 상기 수직 포지션에 기초하여 결정되는 변수인, 방법.
  3. 제2항에 있어서,
    상기 샘플의 상기 수직 포지션이 이하의 조건:
    y = = CtbSizeY - t-1, 또는
    y = = CtbSizeY - t, 또는
    y = = ctbHeightC - t, 또는
    y = = ctbHeightC - t-1
    중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
    y는 상기 샘플의 상기 수직 포지션이고, CtbSizeY는 코딩 트리 블록(coding tree block)(CTB) 크기이고, ctbHeightC는 상기 CTB의 높이이고, t는 정수 값인, 방법.
  4. 제2항 또는 제3항에 있어서,
    상기 샘플의 상기 수직 포지션이 이하의 조건:
    y = = CtbSizeY - t-1, 또는
    y = = CtbSizeY - t, 또는
    y = = ctbHeightC - t, 또는
    y = = ctbHeightC - t-1
    중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
    y는 상기 샘플의 상기 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 상기 CTB의 높이이고, t는 정수 값인, 방법.
  5. 제2항 내지 제4항 중 어느 한 항에 있어서,
    y가 0일 때, alfShiftY는 10인, 방법.
  6. 제2항 내지 제5항 중 어느 한 항에 있어서,
    y가 0이 아닐 때, alfShiftY는 7인, 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 블록 내의 상기 샘플의 상기 수직 포지션은 크로마 샘플 포지션(chroma sample position) 또는 루마 샘플 포지션(luma sample position)인, 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 반올림하는 프로세스는,
    가산된 합 값을 획득하기 위하여, 상기 수직 포지션에 기초하여 결정되는 값을 상기 합 값에 가산하는 단계, 및
    상기 수직 포지션에 기초하여 상기 가산된 합 값을 시프팅하는 단계
    를 포함하는, 방법.
  9. 비디오 디코딩 장치로서,
    픽처의 블록에 대한 재구성된 샘플 값을 획득하도록 구성되는 재구성 모듈;
    비트스트림에 따라 적응적 루프 필터링을 위한 필터 계수를 획득하도록 구성되는 파싱 모듈;
    상기 필터 계수 및 상기 블록에 대한 상기 재구성된 샘플 값에 따라 합 값을 획득하도록 구성되는 계산 모듈;
    반올림된 합 값을 획득하기 위하여, 상기 블록 내의 샘플의 수직 포지션에 따라 상기 합 값을 반올림하도록 구성되는 반올림 모듈;
    상기 반올림된 합 값에 따라 상기 블록에 대한 필터 재구성된 샘플 값을 획득하도록 구성되는 필터링 모듈
    을 포함하는 비디오 디코딩 장치.
  10. 제9항에 있어서,
    상기 반올림된 합 값은 (sum + ( 1 << ( alfShiftY - 1 ) ) ) >> alfShiftY이고, sum은 상기 합 값이고, alfShiftY는 상기 샘플의 상기 수직 포지션에 기초하여 결정되는 변수인, 비디오 디코딩 장치.
  11. 제10항에 있어서,
    상기 샘플의 상기 수직 포지션이 이하의 조건:
    y = = CtbSizeY - t-1, 또는
    y = = CtbSizeY - t, 또는
    y = = ctbHeightC - t, 또는
    y = = ctbHeightC - t-1
    중의 임의의 하나로 만족될 때, alfShiftY는 10이고,
    y는 상기 샘플의 상기 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 상기 CTB의 높이이고, t는 정수 값인, 비디오 디코딩 장치.
  12. 제10항 또는 제11항에 있어서,
    상기 샘플의 상기 수직 포지션이 이하의 조건:
    y = = CtbSizeY - t-1, 또는
    y = = CtbSizeY - t, 또는
    y = = ctbHeightC - t, 또는
    y = = ctbHeightC - t-1
    중의 임의의 하나로 만족되지 않을 때, alfShiftY는 7이고,
    y는 상기 샘플의 상기 수직 포지션이고, CtbSizeY는 코딩 트리 블록(CTB) 크기이고, ctbHeightC는 상기 CTB의 높이이고, t는 정수 값인, 비디오 디코딩 장치.
  13. 제10항 내지 제12항 중 어느 한 항에 있어서,
    y가 0일 때, alfShiftY는 10인, 비디오 디코딩 장치.
  14. 제10항 내지 제14항 중 어느 한 항에 있어서,
    y가 0이 아닐 때, alfShiftY는 7인, 비디오 디코딩 장치.
  15. 제9항 내지 제14항 중 어느 한 항에 있어서,
    상기 블록 내의 상기 샘플의 상기 수직 포지션은 크로마 샘플 포지션 또는 루마 샘플 포지션인, 비디오 디코딩 장치.
  16. 제9항 내지 제15항 중 어느 한 항에 있어서,
    상기 반올림 모듈은,
    가산된 합 값을 획득하기 위하여, 상기 수직 포지션에 기초하여 결정되는 값을 상기 합 값에 가산하고, 상기 반올림된 합 값을 획득하기 위하여, 상기 수직 포지션에 기초하여 상기 가산된 합 값을 시프팅하도록 구성된, 비디오 디코딩 장치.
  17. 디코더로서,
    하나 이상의 프로세서; 및
    상기 프로세서에 결합되고, 상기 프로세서에 의한 실행을 위한 프로그래밍을 저장하는 비-일시적 컴퓨터-판독가능 저장 매체 - 상기 프로그래밍은, 상기 프로세서에 의해 실행될 때, 제1항 내지 제8항 중 어느 한 항에 따른 상기 방법을 수행하도록 상기 디코더를 구성함 -
    를 포함하는 디코더.
  18. 컴퓨터 디바이스에 의해 실행될 때, 상기 컴퓨터 디바이스로 하여금 제1항 내지 제8항 중 어느 한 항에 따른 상기 방법을 수행하게 하는 프로그램 코드를 운반하는 비-일시적 컴퓨터-판독가능 매체.
KR1020227028861A 2020-01-24 2021-01-22 적응적 루프 필터링을 위한 인코더, 디코더, 및 대응하는 방법 KR20220127314A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EPPCT/EP2020/051788 2020-01-24
EP2020051788 2020-01-24
PCT/CN2021/073233 WO2021147981A1 (en) 2020-01-24 2021-01-22 An encoder, a decoder and corresponding methods for adaptive loop filtering

Publications (1)

Publication Number Publication Date
KR20220127314A true KR20220127314A (ko) 2022-09-19

Family

ID=76993179

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227028861A KR20220127314A (ko) 2020-01-24 2021-01-22 적응적 루프 필터링을 위한 인코더, 디코더, 및 대응하는 방법

Country Status (13)

Country Link
US (1) US20220377326A1 (ko)
EP (1) EP4085639A4 (ko)
JP (1) JP2023511206A (ko)
KR (1) KR20220127314A (ko)
CN (2) CN115836527A (ko)
AU (1) AU2021210471A1 (ko)
BR (1) BR112022014636A2 (ko)
CA (1) CA3165820A1 (ko)
CL (1) CL2022001991A1 (ko)
IL (1) IL295013A (ko)
MX (1) MX2022009122A (ko)
WO (1) WO2021147981A1 (ko)
ZA (1) ZA202208537B (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7393550B2 (ja) 2019-12-11 2023-12-06 北京字節跳動網絡技術有限公司 クロス成分適応ループフィルタリングのためのサンプルパディング
US11394967B2 (en) 2020-04-26 2022-07-19 Tencent America LLC Geometric cross-component filtering
EP4173290A4 (en) * 2020-06-30 2024-01-10 Beijing Bytedance Network Technology Co., Ltd. BOUNDARY LOCATION FOR ADAPTIVE LOOP FILTERING

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10694214B2 (en) * 2012-12-21 2020-06-23 Qualcomm Incorporated Multi-type parallelized sample adaptive offset in video coding
GB2516424A (en) * 2013-07-15 2015-01-28 Nokia Corp A method, an apparatus and a computer program product for video coding and decoding
CN116527887A (zh) * 2016-08-01 2023-08-01 韩国电子通信研究院 图像编码/解码方法和设备以及存储比特流的记录介质
EP3750307B1 (en) * 2018-03-09 2023-10-04 Huawei Technologies Co., Ltd. Method and apparatus for image filtering with adaptive multiplier coefficients
US11451773B2 (en) * 2018-06-01 2022-09-20 Qualcomm Incorporated Block-based adaptive loop filter (ALF) design and signaling
WO2020007489A1 (en) * 2018-07-06 2020-01-09 Huawei Technologies Co., Ltd. A picture encoder, a picture decoder and corresponding methods
GB2582029A (en) * 2019-03-08 2020-09-09 Canon Kk An adaptive loop filter
CN113475070B (zh) * 2019-12-24 2024-06-25 瑞典爱立信有限公司 针对自适应环路滤波的虚拟边界处理
US11303892B2 (en) * 2020-01-23 2022-04-12 Qualcomm Incorporated Adaptive rounding for loop filters

Also Published As

Publication number Publication date
WO2021147981A1 (en) 2021-07-29
AU2021210471A1 (en) 2022-08-25
JP2023511206A (ja) 2023-03-16
CL2022001991A1 (es) 2023-01-27
IL295013A (en) 2022-09-01
BR112022014636A2 (pt) 2022-10-11
US20220377326A1 (en) 2022-11-24
CN116208773B (zh) 2024-07-05
CN116208773A (zh) 2023-06-02
CN115836527A (zh) 2023-03-21
MX2022009122A (es) 2022-10-27
EP4085639A1 (en) 2022-11-09
CA3165820A1 (en) 2021-07-29
EP4085639A4 (en) 2023-03-22
ZA202208537B (en) 2023-05-31

Similar Documents

Publication Publication Date Title
KR102431537B1 (ko) 루마 및 크로마 성분에 대한 ibc 전용 버퍼 및 디폴트 값 리프레싱을 사용하는 인코더, 디코더 및 대응하는 방법들
US11870986B2 (en) Encoder, a decoder and corresponding methods using an adaptive loop filter
US11895292B2 (en) Encoder, decoder and corresponding methods of boundary strength derivation of deblocking filter
US11856228B2 (en) Deblocking filter for sub-partition boundaries caused by intra sub-partition coding tool
KR20210126771A (ko) 인트라 예측 모드에 관련된 인코더, 디코더 및 대응하는 방법들
US20220377326A1 (en) Encoder, decoder and corresponding methods for adaptive loop filtering
WO2020108640A1 (en) Encoder, decoder and corresponding methods of most probable mode list construction for blocks with multi-hypothesis prediction
KR20210151248A (ko) 적응 루프 필터를 사용하는 인코더, 디코더 및 대응하는 방법들
KR20220143943A (ko) 슬라이스 헤더 신택스 엘리먼트의 시그널링을 단순화하는 인코더, 디코더, 및 대응하는 방법
KR20220024900A (ko) 비선형 적응 루프 필터의 클리핑 레벨
KR20210103562A (ko) 인트라 예측을 위한 교차-성분 선형 모델링의 방법 및 장치
KR20220140858A (ko) 슬라이스에 대한 픽처 파티셔닝 정보를 시그널링하기 위한 디코더 및 대응하는 방법
EP3895418A1 (en) An encoder, a decoder and corresponding methods for local illumination compensation