KR20220063177A - 상이한 비디오 유닛들 간의 적응적 루프 필터링 - Google Patents

상이한 비디오 유닛들 간의 적응적 루프 필터링 Download PDF

Info

Publication number
KR20220063177A
KR20220063177A KR1020227008762A KR20227008762A KR20220063177A KR 20220063177 A KR20220063177 A KR 20220063177A KR 1020227008762 A KR1020227008762 A KR 1020227008762A KR 20227008762 A KR20227008762 A KR 20227008762A KR 20220063177 A KR20220063177 A KR 20220063177A
Authority
KR
South Korea
Prior art keywords
samples
region
boundary
equal
neighboring region
Prior art date
Application number
KR1020227008762A
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 KR20220063177A publication Critical patent/KR20220063177A/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/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/174Methods 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 slice, e.g. a line of blocks or a group of blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • 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/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)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

예시적인 비디오 프로세싱 방법은, 비디오의 현재 비디오 유닛과 비디오의 비트스트림 표현 사이의 변환을 위해, 현재 블록의 제2 이웃 영역의 정보와 독립적으로 변환의 코딩 프로세스를 위한 현재 블록의 제1 이웃 영역 내의 하나 이상의 샘플의 이용 가능성을 결정하는 단계를 포함한다. 제2 이웃 영역은 제1 이웃 영역에 인접하고, 하나 이상의 샘플은 이용 불가능한 것으로 결정되는 경우에 패딩된다. 이 방법은 결정에 기초하여 변환을 수행하는 단계를 포함한다.

Description

상이한 비디오 유닛들 간의 적응적 루프 필터링
관련 출원들의 상호 참조
파리 협약에 따른 적용 가능한 특허법 및/또는 규칙들에 따라, 본 출원은 2019년 9월 27일에 출원된 국제 특허 출원 제PCT/CN2019/108763호에 대한 우선권 및 그 이익을 적시에 주장하기 위해 이루어졌다. 법에 따른 모든 목적들을 위해, 앞서 언급된 출원의 전체 개시는 본 출원의 개시의 일부로서 참고로 포함된다.
기술 분야
이 특허 문서는 일반적으로 비디오 코딩 및 디코딩 기술들에 관한 것이다.
비디오 코딩 표준들은 주로 잘 알려진 ITU-T 및 ISO/IEC 표준들의 개발을 통해 발전해 왔다. ITU-T는 H.261 및 H.263 표준들을 만들었고, ISO/IEC는 MPEG-1 및 MPEG-4 Visual 표준들을 만들었으며, 두 조직은 공동으로 H.262/MPEG-2 Video 및 H.264/MPEG-4 AVC(Advanced Video Coding) 및 H.265/HEVC(High Efficiency Video Coding) 표준들을 만들었다. H.262 이후로, 비디오 코딩 표준들은 시간 예측과 변환 코딩이 활용되는 하이브리드 비디오 코딩 구조를 기반으로 한다. HEVC 이후의 미래 비디오 코딩 기술들을 탐구하기 위해, 2015년에 VCEG와 MPEG에 의해 공동으로 JVET(Joint Video Exploration Team)가 설립되었다. 그 이후로, 많은 새로운 방법들이 JVET에 의해 채택되었고 JEM(Joint Exploration Model)이라는 참조 소프트웨어에 추가되었다. 2018년 4월에, HEVC에 비해 50% 비트레이트 감소를 목표로 하는 차세대 VVC(Versatile Video Coding) 표준에 대해 연구하기 위해 VCEG(Q6/16)와 ISO/IEC JTC1 SC29/WG11(MPEG) 간의 협력 하에 JVET가 만들어졌다.
개시된 비디오 코딩, 트랜스코딩 또는 디코딩 기술들을 사용하여, 비디오 인코더들 또는 디코더들의 실시예들은 코딩 또는 디코딩 툴들의 보다 나은 압축 효율 및 보다 간단한 구현들을 제공하기 위해 코딩 트리 블록들의 가상 경계들을 처리할 수 있다.
일 예시적인 양태에서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 비디오 유닛과 비디오의 비트스트림 표현 사이의 변환을 위해, 현재 블록의 제2 이웃 영역의 정보와 독립적으로 변환의 코딩 프로세스를 위한 현재 블록의 제1 이웃 영역 내의 하나 이상의 샘플의 이용 가능성을 결정하는 단계를 포함한다. 제2 이웃 영역은 제1 이웃 영역에 인접하고, 하나 이상의 샘플은 이용 불가능한 것으로 결정되는 경우에 패딩된다. 코딩 프로세스는 적응적 루프 필터(ALF) 툴을 포함하고, ALF 툴은 ALF 분류 프로세스 및/또는 ALF 필터링 프로세스를 포함한다. 이 방법은 결정에 기초하여 변환을 수행하는 단계를 또한 포함한다.
다른 예시적인 양태에서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 비디오 유닛과 비디오의 비트스트림 표현 사이의 변환을 위해, (1) K 개의 영역 내의 K 개의 대표 샘플 중 M 개가 현재 비디오 유닛과 상이한 비디오 유닛들에 있고, (2) 필터링 동작이 비디오의 다수의 비디오 유닛들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는 경우에, K 개의 영역 내의 적어도 하나의 샘플이 필터링 동작에 이용 불가능하다고 결정하는 단계를 포함하고, 여기서 M 및 K는 정수들이다. 이 방법은 결정에 기초하여 변환을 수행하는 단계를 또한 포함한다.
다른 예시적인 양태에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오 유닛을 포함하는 비디오 픽처들을 포함하는 비디오와 비디오의 비트스트림 표현 사이의 변환을 수행하는 단계를 포함한다. 제1 신택스 요소 세트는 비디오 유닛의 경계들에 걸쳐 있는 샘플들이 비디오 유닛의 경계들에 적용 가능한 필터링 프로세스에서 액세스 가능한지 여부를 나타내기 위해 비트스트림 표현에 포함되고, 제1 신택스 요소 세트는 상이한 레벨들에 포함된다.
다른 예시적인 양태에서, 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오의 현재 블록과 비디오의 비트스트림 표현 사이의 변환을 위해, 현재 블록의 이웃 블록 내의 샘플이 현재 블록과 동일한 비디오 영역에 있는지 여부에 관한 제1 결정을 내리는 단계를 포함한다. 이웃 블록은 (1) 현재 블록의 좌측 위쪽, (2) 현재 블록의 우측 위쪽, (3) 현재 블록의 우측 아래쪽, 또는 (4) 현재 블록의 우측 아래쪽에 위치한다. 이 방법은 제1 결정을 사용하여 현재 블록의 변환에 대한 현재 블록 외부의 샘플들을 사용하는 코딩 툴의 적용 가능성에 관한 제2 결정을 내리는 단계 및 제1 결정 및 제2 결정에 따라 변환을 수행하는 단계를 또한 포함한다.
다른 예시적인 양태에서, 비디오 프로세싱 방법이 개시된다. 이 방법은 비디오 픽처의 비디오 블록들과 그의 비트스트림 표현 간의 변환을 수행하는 단계를 포함한다. 여기서, 비디오 블록들은 코딩 트리 블록들의 논리적 그룹화들을 사용하여 프로세싱되고, 코딩 트리 블록들은 하단 코딩 트리 블록의 하단 경계가 비디오 픽처의 하단 경계 외부에 있는지 여부에 기초하여 프로세싱된다.
다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 현재 비디오 블록의 코딩 트리 블록의 조건에 기초하여, 인루프 필터링 동안 가상 샘플들의 사용 상태를 결정하는 단계 및 가상 샘플들의 사용 상태에 따라 비디오 블록과 비디오 블록의 비트스트림 표현 간의 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 하나 이상의 비디오 슬라이스 또는 비디오 브릭으로 논리적으로 그룹화되는 비디오 픽처와 비디오 픽처의 비트스트림 표현 간의 변환 동안, 적응적 루프 필터 프로세스에서 다른 슬라이스 또는 브릭 내의 샘플들의 사용을 디스에이블시키기로 결정하는 단계 및 결정하는 단계에 따라 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오 픽처의 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안, 현재 비디오 블록이 비디오 픽처의 비디오 유닛의 경계에 위치하는 샘플들을 포함한다고 결정하는 단계 및 결정하는 단계에 기초하여 변환을 수행하는 단계를 포함하며, 여기서 변환을 수행하는 단계는 비디오 픽처 내의 모든 경계 유형들에 대해 동일한 통합된 방법을 사용하여 인루프 필터링 프로세스를 위한 가상 샘플들을 생성하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 비디오 픽처의 현재 비디오 블록과 그의 비트스트림 표현 간의 변환 동안, 변환 동안 비디오 픽처에 대해 이용 가능한 다수의 적응적 루프 필터(ALF) 샘플 선택 방법들 중 하나를 적용하기로 결정하는 단계 및 다수의 ALF 샘플 선택 방법들 중 하나를 적용하는 것에 의해 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은 비디오 픽처의 가상 파이프라인 데이터 유닛(VPDU)에 걸쳐 있는 샘플들을 사용하는 것을 디스에이블시킴 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 비디오 유닛 경계에 걸쳐 있는 현재 비디오 블록의 위치들에 대해, 패딩을 사용하지 않고 생성되는 샘플들을 사용하도록 지정함 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 인루프 필터링 동작을 위해, 인루프 필터링 동안 사용되는 현재 비디오 블록의 샘플들이 비디오 픽처의 비디오 유닛의 경계에 걸쳐 있지 않도록 하는 치수들을 갖는 필터를 선택하는 것을 지정함 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 인루프 필터링 동작을 위해, 패딩된 샘플들이 인루프 필터링에 필요한지 여부에 기초하여 클리핑 파라미터들 또는 필터 계수들을 선택하는 것을 지정함 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 다른 비디오 프로세싱 방법이 개시된다. 이 방법은, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은 현재 비디오 블록의 색상 성분 아이덴티티에 의존함 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함한다.
또 다른 예시적인 양태에서, 위에서 설명된 방법을 수행하도록 구성된 비디오 인코딩 장치가 개시된다.
또 다른 예시적인 양태에서, 위에서 설명된 방법을 수행하도록 구성된 비디오 디코더가 개시된다.
또 다른 예시적인 양태에서, 머신 판독 가능 매체가 개시된다. 매체는, 실행 시에, 프로세서로 하여금 위에서 설명된 방법들 중 하나 이상을 구현하게 하는 코드를 저장한다.
개시된 기술의 상기 및 다른 양태들 및 특징들은 도면들, 설명 및 청구항들에서 보다 상세히 설명된다.
도 1은 12 개의 타일과 3 개의 래스터 스캔 슬라이스로 분할되는 18 x 12 루마 코딩 트리 유닛들(CTU들)을 갖는 픽처의 예를 도시한다.
도 2는 24 개의 타일과 9 개의 직사각형 슬라이스로 분할되는 18 x 12 루마 CTU들을 갖는 픽처의 예를 도시한다.
도 3은 4 개의 타일, 11 개의 브릭 및 4 개의 직사각형 슬라이스로 분할되는 픽처의 예를 도시한다.
도 4a는 K = M, L < N일 때 픽처 경계들에 걸쳐 있는 코딩 트리 블록들(CTB들)의 예를 도시한다.
도 4b는 K < M, L = N일 때 픽처 경계들에 걸쳐 있는 코딩 트리 블록들(CTB들)의 예를 도시한다.
도 4c는 K < M, L < N일 때 픽처 경계들에 걸쳐 있는 코딩 트리 블록들(CTB들)의 예를 도시한다.
도 5는 인코더 블록 다이어그램의 예를 도시한다.
도 6은 병렬로 디블로킹될 수 있는, 8×8 그리드 상의 픽처 샘플들과 수평 및 수직 블록 경계들, 및 8×8 샘플들의 비중첩 블록들의 예시이다.
도 7은 필터 온/오프 결정 및 강한/약한 필터 선택에 관여된 픽셀들의 예들을 도시한다.
도 8은 4 개의 1-D 방향성 패턴들을 도시한다.
도 9는 GALF(geometric adaptive loop filtering) 필터 형상들(좌측: 5×5 다이아몬드, 중간: 7×7 다이아몬드, 우측: 9×9 다이아몬드)의 예들을 도시한다.
도 10은 5×5 다이아몬드 필터 서포트에 대한 상대 좌표들을 도시한다.
도 11은 5×5 다이아몬드 필터 서포트에 대한 상대 좌표들의 예들을 도시한다.
도 12a는 서브샘플링된 라플라시안 계산들을 위한 예시적인 배열을 도시한다.
도 12b는 서브샘플링된 라플라시안 계산들을 위한 다른 예시적인 배열을 도시한다.
도 12c는 서브샘플링된 라플라시안 계산들을 위한 또 다른 예시적인 배열을 도시한다.
도 12d는 서브샘플링된 라플라시안 계산들을 위한 또 다른 예시적인 배열을 도시한다.
도 13은 루마 성분에 대한 VTM-4.0에서의 루프 필터 라인 버퍼 요구사항의 예를 도시한다.
도 14는 크로마 성분에 대한 VTM-4.0에서의 루프 필터 라인 버퍼 요구사항의 예를 도시한다.
도 15a는 N = 4일 때 가상 경계에서의 ALF 블록 분류의 예를 도시한다.
도 15b는 N = 4일 때 가상 경계에서의 ALF 블록 분류의 다른 예를 도시한다.
도 16a는 가상 경계에서의 수정된 루마 ALF 필터링의 예를 예시한다.
도 16b는 가상 경계에서의 수정된 루마 ALF 필터링의 다른 예를 예시한다.
도 16c는 가상 경계에서의 수정된 루마 ALF 필터링의 또 다른 예를 예시한다.
도 17a는 가상 경계에서의 수정된 크로마 ALF 필터링의 예를 도시한다.
도 17b는 가상 경계에서의 수정된 크로마 ALF 필터링의 다른 예를 도시한다.
도 18a는 수평 랩 어라운드 모션 보상의 예를 도시한다.
도 18b는 수평 랩 어라운드 모션 보상의 다른 예를 도시한다.
도 19는 수정된 적응적 루프 필터의 예를 예시한다.
도 20은 비디오 픽처에서의 CTU들을 프로세싱하는 예를 도시한다.
도 21은 수정된 적응적 루프 필터 경계의 예를 도시한다.
도 22는 비디오 프로세싱 장치의 예의 블록 다이어그램이다.
도 23은 예시적인 비디오 프로세싱 방법에 대한 플로차트이다.
도 24는 3x2 레이아웃의 HEC의 이미지의 예를 도시한다.
도 25는 두 종류의 경계들의 샘플들에 대한 패딩된 라인들의 수의 예를 도시한다.
도 26은 픽처에서의 CTU들의 프로세싱의 예를 도시한다.
도 27은 픽처에서의 CTU들의 프로세싱의 다른 예를 도시한다.
도 28은 현재 샘플 및 액세스될 필요가 있는 샘플들의 다른 예를 도시한다.
도 29는 "이용 불가능한" 이웃 샘플들의 패딩의 다른 예를 도시한다.
도 30은 ALF 분류 프로세스에서 활용될 필요가 있는 샘플들의 예를 도시한다.
도 31은 개시된 기술들이 구현될 수 있는 예시적인 비디오 프로세싱 시스템의 블록 다이어그램이다.
도 32는 본 기술에 따른 비디오 프로세싱 방법의 플로차트 표현이다.
도 33은 본 기술에 따른 다른 비디오 프로세싱 방법의 플로차트 표현이다.
도 34는 예시적인 비디오 코딩 시스템을 예시하는 블록 다이어그램이다.
도 35는 본 개시의 일부 실시예들에 따른 인코더를 예시하는 블록 다이어그램이다.
도 36은 본 개시의 일부 실시예들에 따른 디코더를 예시하는 블록 다이어그램이다.
섹션 표제들은 이해의 편의를 용이하게 하기 위해 본 문서에서 사용되며 한 섹션에 개시된 실시예들을 단지 해당 섹션으로 제한하지 않는다. 게다가, 특정 실시예들이 다목적 비디오 코딩(Versatile Video Coding) 또는 다른 특정 비디오 코덱들을 참조하여 설명되지만, 개시된 기술들은 다른 비디오 코딩 기술들에도 적용 가능하다. 게다가, 일부 실시예들은 비디오 코딩 단계들을 상세히 설명하지만, 코딩을 실행취소하는 대응하는 디코딩 단계들은 디코더에 의해 구현될 것임이 이해될 것이다. 게다가, 비디오 프로세싱이라는 용어는 비디오 코딩 또는 압축, 비디오 디코딩 또는 압축 해제, 및 비디오 픽셀들이 하나의 압축된 포맷으로부터 다른 압축된 포맷으로 또는 상이한 압축된 비트레이트로 표현되는 비디오 트랜스코딩을 포괄한다.
1. 간략한 요약
이 문서는 비디오 코딩 기술들에 관한 것이다. 구체적으로, 이는 특히 비선형 적응적 루프 필터에 대한 픽처/슬라이스/타일/브릭 경계 및 가상 경계 코딩에 관련되어 있다. 이는 HEVC와 같은 기존의 비디오 코딩 표준, 또는 완성될 표준(다목적 비디오 코딩)에 적용될 수 있다. 이는 또한 미래의 비디오 코딩 표준들 또는 비디오 코덱에 적용 가능할 수 있다.
2. 초기 논의
비디오 코딩 표준들은 주로 잘 알려진 ITU-T 및 ISO/IEC 표준들의 개발을 통해 발전해 왔다. ITU-T는 H.261 및 H.263 표준들을 만들었고, ISO/IEC는 MPEG-1 및 MPEG-4 Visual 표준들을 만들었으며, 두 조직은 공동으로 H.262/MPEG-2 Video 및 H.264/MPEG-4 AVC(Advanced Video Coding) 및 H.265/HEVC 표준들을 만들었다. H.262 이후로, 비디오 코딩 표준들은 시간 예측과 변환 코딩이 활용되는 하이브리드 비디오 코딩 구조를 기반으로 한다. HEVC 이후의 미래 비디오 코딩 기술들을 탐구하기 위해, 2015년에 VCEG와 MPEG에 의해 공동으로 JVET(Joint Video Exploration Team)가 설립되었다. 그 이후로, 많은 새로운 방법들이 JVET에 의해 채택되었고 JEM(Joint Exploration Model)이라는 참조 소프트웨어에 추가되었다. 2018년 4월에, HEVC에 비해 50% 비트레이트 감소를 목표로 하는 VVC 표준에 대해 연구하기 위해 VCEG(Q6/16)와 ISO/IEC JTC1 SC29/WG11(MPEG) 간의 협력 하에 JVET가 만들어졌다.
2.1 색상 공간 및 크로마 서브샘플링
색상 모델(또는 색상 시스템)이라고도 하는, 색상 공간은 색상들의 범위를 숫자들의 튜플들로서, 전형적으로 3 개 또는 4 개의 값 또는 색상 성분(예를 들면, RGB)으로서 간단히 설명하는 추상 수학적 모델이다. 기본적으로 말하면, 색상 공간은 좌표계와 서브 공간의 정교화이다.
비디오 압축의 경우, 가장 자주 사용되는 색상 공간들은 YCbCr 및 RGB이다.
YCBCR 또는 Y'CBCR이라고도 기술되는, YCbCr, Y'CbCr 또는 Y Pb/Cb Pr/Cr은 비디오 및 디지털 사진 시스템들에서 컬러 이미지 파이프라인의 일부로서 사용되는 색상 공간들의 계열이다. Y'은 루마 성분이고, CB와 CR은 청색 차이 및 적색 차이 크로마 성분들이다. Y'(프라임을 가짐)은 루미넌스인 Y와 구별되며, 감마 보정된 RGB 원색들에 기초하여 광 강도가 비선형적으로 인코딩된다는 것을 의미한다.
크로마 서브샘플링은, 루미넌스에 대해서보다 색상 차이들에 대한 인간 시각 시스템의 더 낮은 예민성을 이용하여, 루마 정보에 대해서보다 크로마 정보에 대해 더 낮은 분해능을 구현하는 것에 의해 이미지들을 인코딩하는 관례이다.
2.1.1 색상 포맷 4:4:4
3 개의 Y'CbCr 성분 각각은 동일한 샘플 레이트를 가지며, 따라서 크로마 서브샘플링이 없다. 이 방식은 때때로 고급 필름 스캐너들 및 영화 포스트 프로덕션에서 사용된다.
2.1.2 색상 포맷 4:2:2
2 개의 크로마 성분은 루마의 샘플 레이트의 절반으로 샘플링된다: 수평 크로마 분해능이 반으로 준다. 이것은 시각적 차이가 거의 또는 전혀 없이 압축되지 않은 비디오 신호의 대역폭을 1/3만큼 감소시킨다.
2.1.3 색상 포맷 4:2:0
4:2:0에서는, 수평 샘플링이 4:1:1에 비해 2배이지만, Cb 및 Cr 채널들이 이 방식에서 각각의 교호 라인에서만 샘플링되므로, 수직 분해능이 반으로 준다. 따라서 데이터 레이트는 동일하다. Cb와 Cr은 각각 수평으로 및 수직으로 둘 모두에서 2의 인자로 서브샘플링된다. 상이한 수평 및 수직 위치(siting)를 갖는, 4:2:0 방식들의 세 가지 변형이 있다.
MPEG-2에서, Cb와 Cr은 수평으로 함께 배치된다(cosited). Cb 및 Cr은 수직 방향으로 픽셀들 사이에 배치된다(중간에 배치됨).
JPEG/JFIF, H.261 및 MPEG-1에서, Cb와 Cr은 중간에, 즉 교호 루마 샘플들 사이의 중간에 배치된다.
4:2:0 DV에서, Cb와 Cr은 수평 방향으로 함께 배치된다. 수직 방향에서, 이들은 교호 라인들에 함께 배치된다.
2.2 다양한 비디오 유닛들
픽처는 하나 이상의 타일 행과 하나 이상의 타일 열로 나누어진다. 타일은 픽처의 직사각형 영역을 커버하는 CTU들의 시퀀스이다.
타일은 하나 이상의 브릭으로 나누어지며, 브릭들 각각은 타일 내의 다수의 CTU 행들로 구성된다.
다수의 브릭들로 분할되지 않는 타일은 브릭이라고도 지칭된다. 그렇지만, 타일의 진정한 서브세트인 브릭은 타일이라고 지칭되지 않는다.
슬라이스는 픽처의 다수의 타일들 또는 타일의 다수의 브릭들을 포함한다.
두 가지 슬라이스 모드, 즉 래스터 스캔 슬라이스 모드와 직사각형 슬라이스 모드가 지원된다. 래스터 스캔 슬라이스 모드에서, 슬라이스는 픽처의 타일 래스터 스캔에서 타일들의 시퀀스를 포함한다. 직사각형 슬라이스 모드에서, 슬라이스는 픽처의 직사각형 영역을 집합적으로 형성하는 픽처의 다수의 브릭들을 포함한다. 직사각형 슬라이스 내의 브릭들은 슬라이스의 브릭 래스터 스캔의 순서로 있다.
도 1은 픽처의 래스터 스캔 슬라이스 분할의 예를 도시하며, 여기서 픽처는 12 개의 타일과 3 개의 래스터 스캔 슬라이스로 나누어진다.
도 2는 픽처의 직사각형 슬라이스 분할의 예를 도시하며, 여기서 픽처는 24 개의 타일(6 개의 타일 열과 4 개의 타일 행)과 9 개의 직사각형 슬라이스로 나누어진다.
도 3은 타일들, 브릭들 및 직사각형 슬라이스들로 분할되는 픽처의 예를 도시하며, 여기서 픽처는 4 개의 타일(2 개의 타일 열과 2 개의 타일 행), 11 개의 브릭(좌측 상단 타일은 1 개의 브릭을 포함하고, 우측 상단 타일은 5 개의 브릭을 포함하며, 좌측 하단 타일은 2 개의 브릭을 포함하고, 우측 하단 타일은 3 개의 브릭을 포함함), 및 4 개의 직사각형 슬라이스로 나눠진다.
2.2.1 CTU/CTB 크기들
VVC에서, 신택스 요소 log2_ctu_size_minus2에 의해 SPS에서 시그널링되는 CTU 크기는 4x4만큼 작을 수 있다.
7.3.2.3 시퀀스 파라미터 세트 RBSP 신택스
Figure pct00001
Figure pct00002
Figure pct00003
log2_ctu_size_minus2 + 2는 각각의 CTU의 루마 코딩 트리 블록 크기를 지정한다.
log2_min_luma_coding_block_size_minus2 + 2는 최소 루마 코딩 블록 크기를 지정한다.
변수들 CtbLog2SizeY, CtbSizeY, MinCbLog2SizeY, MinCbSizeY, MinTbLog2SizeY, MaxTbLog2SizeY, MinTbSizeY, MaxTbSizeY, PicWidthInCtbsY, PicHeightInCtbsY, PicSizeInCtbsY, PicWidthInMinCbsY, PicHeightInMinCbsY, PicSizeInMinCbsY, PicSizeInSamplesY, PicWidthInSamplesC 및 PicHeightInSamplesC는 다음과 같이 도출된다:
Figure pct00004
2.2.2 픽처에서의 CTU들
M x N으로 표시되는 CTB/LCU 크기(HEVC/VVC에 정의된 바와 같이, 전형적으로 M은 N과 동일함)를 가정하고, 픽처(또는 타일, 슬라이스 또는 다른 종류들의 유형들, 픽처 경계는 예로서 취해짐) 경계에 위치하는 CTB의 경우, K x L 개의 샘플들이 픽처 경계 내에 있으며 여기서 K < M이거나 L < N이다. 도 4a 내지 도 4c에 묘사된 바와 같은 해당 CTB들에 대해, CTB 크기는 여전히 MxN과 동일하지만, CTB의 하단 경계/우측 경계는 픽처 외부에 있다.
도 4a는 하단 픽처 경계에 걸쳐 있는 CTB들을 도시한다. 도 4b는 우측 픽처 경계에 걸쳐 있는 CTB들을 도시한다. 도 4c는 우측 하단 픽처 경계에 걸쳐 있는 CTB들을 도시한다.
도 4a 내지 도 4c는 픽처 경계들에 걸쳐 있는 CTB들의 예들을 도시하며, (a) K=M, L<N; (b) K<M, L=N; (c) K<M, L<N
2.3 전형적인 비디오 코덱의 코딩 흐름
도 5는 3 개의 인루프 필터링 블록, 즉 디블로킹 필터(DF), 샘플 적응적 오프셋(SAO) 및 ALF를 포함하는 VVC의 인코더 블록 다이어그램의 예를 도시한다. 미리 정의된 필터들을 사용하는 DF와 달리, SAO 및 ALF는 오프셋을 가산하는 것 및 유한 임펄스 응답(FIR) 필터를 적용하는 것에 의해 원래 샘플들과 재구성된 샘플들 간의 평균 제곱 오차들을 감소시키기 위해 현재 픽처의 원래 샘플들을 활용하며, 코딩된 부가 정보는 오프셋들 및 필터 계수들을 시그널링한다. ALF는 각각의 픽처의 마지막 프로세싱 스테이지에 위치하며, 이전 스테이지들에서 생성되는 아티팩트들을 잡아내어 수정하려고 하는 툴이라고 볼 수 있다.
2.4 디블로킹 필터(DB)
DB의 입력은 인루프 필터들 이전의 재구성된 샘플들이다.
픽처에서의 수직 에지들이 먼저 필터링된다. 이어서 픽처에서의 수평 에지들이 수직 에지 필터링 프로세스에 의해 수정된 샘플들을 입력으로 하여 필터링된다. 각각의 CTU의 CTB들에서의 수직 및 수평 에지들은 코딩 유닛 기반으로 별도로 프로세싱된다. 코딩 유닛에서의 코딩 블록들의 수직 에지들은 그들의 기하학적 순서에서 코딩 블록들의 좌측에 있는 에지에서 시작하여 에지들을 통해 코딩 블록들의 우측을 향해 진행하면서 필터링된다. 코딩 유닛에서의 코딩 블록들의 수평 에지들은 그들의 기하학적 순서에서 코딩 블록들의 상단에 있는 에지에서 시작하여 에지들을 통해 코딩 블록들의 하단을 향해 진행하면서 필터링된다.
도 6은 병렬로 디블로킹될 수 있는, 8×8 그리드 상의 픽처 샘플들과 수평 및 수직 블록 경계들, 및 8×8 샘플들의 비중첩 블록들의 예시이다.
2.4.1. 경계 결정
필터링이 8x8 블록 경계들에 적용된다. 추가적으로, 이는 (예를 들면, 아핀 모션 예측, ATMVP의 사용으로 인해) 변환 블록 경계 또는 코딩 서브블록 경계여야 한다. 그러한 경계들이 아닌 것들에 대해, 필터가 디스에이블된다.
2.4.1 경계 강도 계산
변환 블록 경계/코딩 서브블록 경계에 대해, 이는, 8x8 그리드 내에 위치하는 경우, 필터링될 수 있으며, 이 에지에 대한 bS[ xDi ][ yDj ](여기서 [ xDi ][ yDj ]는 좌표를 나타냄)의 설정은, 제각기, 표 1 및 표 2에 정의되어 있다.
Figure pct00005
Figure pct00006
2.4.3 루마 성분에 대한 디블로킹 결정
디블로킹 결정 프로세스는 이 하위 섹션에 설명되어 있다.
도 7은 필터 온/오프 결정 및 강한/약한 필터 선택에 관여된 픽셀들의 예들을 도시한다.
보다 넓고 보다 강한 루마 필터들은 Condition1, Condition2 및 Condition3 모두가 TRUE인 경우에만 사용되는 필터들이다.
조건 1은 "큰 블록 조건"이다. 이 조건은 P 측과 Q 측에 있는 샘플들이, 제각기, 변수 bSidePisLargeBlk 및 bSideQisLargeBlk에 의해 표현되는, 큰 블록들에 속하는지 여부를 검출한다. bSidePisLargeBlk 및 bSideQisLargeBlk는 다음과 같이 정의된다.
bSidePisLargeBlk = ((에지 유형이 수직이고 p0이 폭 >= 32를 갖는 CU에 속함) | | (에지 유형이 수평이고 p0이 높이 >= 32를 갖는 CU에 속함))? TRUE: FALSE
bSideQisLargeBlk = ((에지 유형이 수직이고 q0이 폭 >= 32를 갖는 CU에 속함) | | (에지 유형이 수평이고 q0이 높이 >= 32를 갖는 CU에 속함))? TRUE: FALSE
bSidePisLargeBlk 및 bSideQisLargeBlk에 기초하여, 조건 1은 다음과 같이 정의된다.
Condition1 = (bSidePisLargeBlk || bSidePisLargeBlk) ? TRUE: FALSE
다음으로, Condition 1이 참인 경우, 조건 2가 더 검사될 것이다. 먼저, 다음 변수들이 도출된다:
- dp0, dp3, dq0, dq3이 HEVC에서와 같이 먼저 도출된다
- if(p 측이 32보다 크거나 같음)
dp0 = ( dp0 + Abs( p50 - 2 * p40 + p30 ) + 1 ) >> 1
dp3 = ( dp3 + Abs( p53 - 2 * p43 + p33 ) + 1 ) >> 1
- if(q 측이 32보다 크거나 같음)
dq0 = ( dq0 + Abs( q50 - 2 * q40 + q30 ) + 1 ) >> 1
dq3 = ( dq3 + Abs( q53 - 2 * q43 + q33 ) + 1 ) >> 1
Condition2 = (d < β) ? TRUE: FALSE
여기서 d= dp0 + dq0 + dp3 + dq3이다.
Condition1 및 Condition2가 유효한 경우, 블록들 중 임의의 것이 서브블록들을 사용하는지 여부가 더 검사된다:
Figure pct00007
마지막으로, Condition 1 및 Condition 2 둘 모두가 유효한 경우, 제안된 디블로킹 방법은 다음과 같이 정의되는 조건 3(큰 블록 강한 필터 조건)을 검사할 것이다.
Condition3 StrongFilterCondition에서, 다음 변수들이 도출된다:
dpq는 HEVC에서와 같이 도출된다.
sp3 = Abs( p3 - p0 ), HEVC에서와 같이 도출됨
if(p 측이 32보다 크거나 같음)
if(Sp==5)
sp3 = ( sp3 + Abs( p5 - p3 ) + 1) >> 1
else
sp3 = ( sp3 + Abs( p7 - p3 ) + 1) >> 1
sq3 = Abs( q0 - q3 ), HEVC에서와 같이 도출됨
if(q 측이 32보다 크거나 같음)
If(Sq==5)
sq3 = ( sq3 + Abs( q5 - q3 ) + 1) >> 1
else
sq3 = ( sq3 + Abs( q7 - q3 ) + 1) >> 1
HEVC에서와 같이, StrongFilterCondition = (dpq가 ( β  >>  2 )보다 작고, sp3 + sq3이 ( 3*β  >>  5 )보다 작으며, Abs( p0 - q0 )이 ( 5 * tC + 1 )  >>  1보다 작음) ? TRUE : FALSE.
2.4.4 루마에 대한 보다 강한 디블로킹 필터(보다 큰 블록들을 위해 설계됨)
경계의 어느 한쪽 측면에 있는 샘플들이 큰 블록에 속할 때 이중선형 필터가 사용된다. 큰 블록에 속하는 샘플은 수직 에지의 경우 폭 >= 32일 때와 같이 정의되고, 수평 에지의 경우 높이 >= 32일 때와 같이 정의된다.
이중선형 필터는 아래에서 열거된다.
블록 경계 샘플들 pi(단, i=0 내지 Sp-1) 및 qi(단, j=0 내지 Sq-1)(pi 및 qi는 위에서 설명된 HEVC 디블로킹에서 수직 에지를 필터링하기 위한 한 행 내에서의 i 번째 샘플 또는 수평 에지를 필터링하기 위한 한 열 내에서의 i 번째 샘플임)는 이어서 다음과 같이 선형 보간으로 대체되고:
Figure pct00008
,
Figure pct00009
로 클리핑됨
Figure pct00010
,
Figure pct00011
로 클리핑됨
여기서 tcPDi 및 tcPDj 항은 섹션 2.4.7에서 설명된 위치 의존적 클리핑이고, gj, fi, Middles,t, Ps 및 Qs는 아래에서 주어진다:
2.4.5 크로마에 대한 디블로킹 제어
크로마 강한 필터들은 블록 경계의 양쪽 측면들에서 사용된다. 여기서, 크로마 필터는 크로마 에지의 양쪽 측면들이 8(크로마 위치) 이상이고, 세 가지 조건에 대한 다음 결정이 충족될 때 선택되고: 첫 번째 조건은 경계 강도는 물론 큰 블록의 결정을 위한 것이다. 크로마 샘플 도메인에서 블록 에지와 직교하는 블록 폭 또는 높이가 8 이상일 때 제안된 필터가 적용될 수 있다. 두 번째 조건 및 세 번째 조건은 HEVC 루마 디블로킹 결정에 대해서와 기본적으로 동일하며, 제각기, 온/오프 결정 및 강한 필터 결정이다.
첫 번째 결정에서, 경계 강도(bS)는 크로마 필터링을 위해 수정되고 조건들이 순차적으로 검사된다. 조건이 충족되는 경우, 보다 낮은 우선순위들을 갖는 나머지 조건들은 스킵된다.
bS가 2와 동일할 때, 또는 큰 블록 경계가 검출되는 경우 bS가 1과 동일할 때 크로마 디블로킹이 수행된다.
두 번째 조건 및 세 번째 조건은 다음과 같이 HEVC 루마 강한 필터 결정과 기본적으로 동일하다.
두 번째 조건에서:
d는 이어서 HEVC 루마 디블로킹에서와 같이 도출된다.
두 번째 조건은 d가 β보다 작을 때 TRUE일 것이다.
세 번째 조건에서, StrongFilterCondition은 다음과 같이 도출된다:
dpq는 HEVC에서와 같이 도출된다.
sp3 = Abs( p3 - p0 ), HEVC에서와 같이 도출됨
sq3 = Abs( q0 - q3 ), HEVC에서와 같이 도출됨
HEVC 설계에서와 같이, StrongFilterCondition = (dpq가 ( β >> 2 )보다 작고, sp3 + sq3이 ( β >> 3 )보다 작으며, Abs( p0 - q0 )이 ( 5 * tC + 1 ) >> 1보다 작음)
2.4.6 크로마를 위한 강한 디블로킹 필터
크로마에 대한 이하의 강한 디블로킹 필터가 정의된다:
p2'= (3*p3+2*p2+p1+p0+q0+4) >> 3
p1'= (2*p3+p2+2*p1+p0+q0+q1+4) >> 3
p0'= (p3+p2+p1+2*p0+q0+q1+q2+4) >> 3
제안된 크로마 필터는 4x4 크로마 샘플 그리드에 대해 디블로킹을 수행한다.
2.4.7 위치 의존적 클리핑
위치 의존적 클리핑 tcPD는 경계에서 7 개, 5 개 및 3 개의 샘플을 수정하는 강하고 긴 필터들을 수반하는 루마 필터링 프로세스의 출력 샘플들에 적용된다. 양자화 오차 분포를 가정할 때, 보다 높은 양자화 잡음을 가질 것으로 예상되고, 따라서 재구성된 샘플 값과 실제 샘플 값 간의 보다 높은 편차를 가질 것으로 예상되는 샘플들에 대해 클리핑 값을 증가시키는 것이 제안된다.
섹션 2.4.2에서의 의사결정 프로세스의 결과에 따라, 비대칭 필터로 필터링되는 각각의 P 또는 Q 경계에 대해, 위치 의존적 임계치 테이블이 디코더에 부가 정보로서 제공되는 2 개의 테이블(예를 들면, 아래에 표로 작성된 Tc7 및 Tc3)로부터 선택된다.
Tc7 = { 6, 5, 4, 3, 2, 1, 1}; Tc3 = { 6, 4, 2 };
tcPD = (Sp == 3) ? Tc3 : Tc7;
tcQD = (Sq == 3) ? Tc3 : Tc7;
짧은 대칭 필터로 필터링되는 P 또는 Q 경계들에 대해, 보다 낮은 크기의 위치 의존적 임계치가 적용된다:
Tc3 = { 3, 2, 1 };
임계치를 정의한 후에, 필터링된 p'i 및 q'i 샘플 값들이 tcP 및 tcQ 클리핑 값들에 따라 클리핑되며:
p'' i = Clip3(p' i + tcP i , p' i - tcP i , p' i );
q'' j = Clip3(q' j + tcQ j , q' j - tcQ j , q' j );
여기서 p'i 및 q'i는 필터링된 샘플 값들이고, p"i 및 q"j는 클리핑 이후의 출력 샘플 값이며, tcPi 및 tcPi는 VVC tc 파라미터 및 tcPD 및 tcQD로부터 도출되는 클리핑 임계치들이다. 함수 Clip3은 VVC에 지정된 바와 같이 클리핑 함수이다.
2.4.8 서브블록 디블로킹 조정
긴 필터들 및 서브블록 디블로킹 둘 모두를 사용하여 병렬 친화적인 디블로킹을 가능하게 하기 위해, 긴 필터들에 대한 루마 제어에 나와 있는 바와 같이 서브블록 디블로킹(AFFINE 또는 ATMVP 또는 DMVR)을 사용하는 측면에서 최대 5 개의 샘플을 수정하도록 긴 필터들이 제한된다. 추가적으로, CU에 가까운 8x8 그리드 상의 서브블록 경계들 또는 암시적 TU 경계가 각각의 측면에서 최대 2 개의 샘플을 수정하게 제한되도록 서브블록 디블로킹이 조정된다.
이하는 CU 경계와 정렬되지 않은 서브블록 경계들에 적용된다.
Figure pct00012
Figure pct00013
0과 동일한 에지가 CU 경계에 대응하는 경우, 2와 동일하거나 orthogonalLength-2와 동일한 에지는 CU 경계 등으로부터 8 개 샘플 떨어져 있는 서브블록 경계에 대응한다. 여기서 TU의 암시적 분할이 사용되는 경우 암시적 TU는 참이다.
2.5 SAO
SAO의 입력은 DB 이후의 재구성된 샘플들이다. SAO의 개념은 먼저 선택된 분류기로 영역 샘플들을 다수의 카테고리들로 분류하는 것, 각각의 카테고리에 대한 오프셋을 획득하는 것, 및 이어서 카테고리의 각각의 샘플에 오프셋을 가산하는 것에 의해 영역의 평균 샘플 왜곡을 감소시키는 것이며, 여기서 분류기 인덱스 및 영역의 오프셋들은 비트스트림에 코딩된다. HEVC 및 VVC에서, 영역(SAO 파라미터 시그널링을 위한 유닛)은 CTU이도록 정의된다.
낮은 복잡도의 요구사항들을 충족시킬 수 있는 두 가지 SAO 유형이 HEVC에서 채택된다. 이러한 두 가지 유형은 에지 오프셋(EO) 및 밴드 오프셋(BO)이며, 이에 대해서는 아래에서 더 상세히 논의된다. SAO 유형의 인덱스가 코딩된다(이는 [0, 2]의 범위에 있음). EO의 경우, 샘플 분류는 1-D 방향성 패턴들, 즉 수평, 수직, 135° 대각선 및 45° 대각선에 따라 현재 샘플들과 이웃 샘플들 간의 비교에 기초한다.
도 8은 EO 샘플 분류를 위한 4 개의 1-D 방향성 패턴, 즉 수평(EO 클래스 = 0), 수직(EO 클래스 = 1), 135° 대각선(EO 클래스 = 2), 및 45° 대각선(EO 클래스 = 3)을 도시한다.
주어진 EO 클래스에 대해, CTB 내부의 각각의 샘플은 5 가지 카테고리 중 하나로 분류된다. "c"로 라벨링된 현재 샘플 값은 선택된 1-D 패턴을 따라 그의 2 개의 이웃과 비교된다. 각각의 샘플에 대한 분류 규칙들은 표 I에 요약되어 있다. 카테고리 1 및 카테고리 4는, 제각기, 선택된 1-D 패턴을 따라 국소적 밸리(local valley) 및 국소적 피크(local peak)와 연관된다. 카테고리 2와 카테고리 3은, 제각기, 선택된 1-D 패턴을 따라 오목 코너 및 볼록 코너와 연관된다. 현재 샘플이 EO 카테고리 1 내지 EO 카테고리 4에 속하지 않는 경우, 이는 카테고리 0이며 SAO가 적용되지 않는다.
Figure pct00014
2.6 기하 변환 기반 적응적 루프 필터
DB의 입력은 DB 및 SAO 이후의 재구성된 샘플들이다. 샘플 분류 및 필터링 프로세스는 DB 및 SAO 이후의 재구성된 샘플들에 기초한다.
일부 실시예들에서, 블록 기반 필터 적응을 갖는 기하 변환 기반 적응적 루프 필터(GALF)가 적용된다. 루마 성분의 경우, 국소적 구배들의 방향 및 활성도(activity)에 기초하여, 각각의 2x2 블록에 대해 25 개의 필터 중 하나가 선택된다.
2.6.1 필터 형상
일부 실시예들에서, 루마 성분에 대해 최대 3 개의 다이아몬드 필터 형상(도 9에 도시됨)이 선택될 수 있다. 루마 성분에 사용되는 필터 형상을 나타내기 위해 픽처 레벨에서 인덱스가 시그널링된다. 각각의 사각형은 샘플을 나타내며, Ci(i는 0 내지 6(좌측), 0 내지 12(가운데), 0 내지 20(우측))는 샘플에 적용될 계수를 나타낸다. 픽처 내의 크로마 성분들에 대해, 항상 5×5 다이아몬드 형상이 사용된다.
2.6.1.1 블록 분류
각각의 2x2 블록은 25 개의 클래스 중 하나로 분류된다. 분류 인덱스 C는 다음과 같이 그의 방향성 D 및 활성도
Figure pct00015
의 양자화된 값에 기초하여 도출된다:
Figure pct00016
D 및
Figure pct00017
를 계산하기 위해, 수평 방향, 수직 방향 및 2 개의 대각선 방향의 구배들이 먼저 1-D 라플라시안을 사용하여 계산된다:
Figure pct00018
인덱스들 i 및 j는 2x2 블록에서의 좌측 상부 샘플의 좌표를 지칭하고, R(i,j)는 좌표 (i,j)에 있는 재구성된 샘플을 나타낸다.
이어서, 수평 방향 및 수직 방향의 구배들의 D 최댓값 및 최솟값이 다음과 같이 설정되고:
Figure pct00019
2 개의 대각선 방향의 구배의 최댓값과 최솟값은 다음과 같이 설정된다:
Figure pct00020
방향성 D의 값을 도출하기 위해, 이러한 값들은 서로 비교되며 2 개의 임계치 t1 및 t2와 비교된다:
단계 1.
Figure pct00021
Figure pct00022
둘 모두가 참인 경우, D는 0으로 설정된다.
단계 2.
Figure pct00023
인 경우, 단계 3으로부터 계속되고; 그렇지 않은 경우, 단계 4로부터 계속된다.
단계 3.
Figure pct00024
인 경우, D는 2로 설정되고; 그렇지 않은 경우, D는 1로 설정된다.
단계 4.
Figure pct00025
인 경우, D는 4로 설정되고; 그렇지 않은 경우 D는 3으로 설정된다.
활성도 값 A는 다음과 같이 계산된다:
Figure pct00026
A는 0 내지 4(경계 포함)의 범위로 더 양자화되고, 양자화된 값은
Figure pct00027
로서 표시된다. 픽처 내의 양쪽 크로마 성분들에 대해, 분류 방법이 적용되지 않으며, 예를 들면, 각각의 크로마 성분에 대해 단일 ALF 계수 세트가 적용된다.
2.6.1.2 필터 계수들의 기하학적 변환들
도 10은 5×5 다이아몬드 필터 서포트에 대한 상대 좌표, 즉, 좌측: 대각선 중심: 수직 뒤집기, 우측: 회전을 도시한다.
각각의 2×2 블록을 필터링하기 전에, 회전 또는 대각선 및 수직 뒤집기와 같은 기하학적 변환들이 해당 블록에 대해 계산된 구배 값들에 따라, 좌표 (k, l)과 연관되는, 필터 계수들 f(k,l)에 적용된다. 이는 필터 서포트 영역 내의 샘플들에 이러한 변환들을 적용하는 것과 동등하다. 착안점은 ALF가 적용되는 상이한 블록들을 그들의 방향성을 정렬하는 것에 의해 보다 유사하게 만드는 것이다.
대각선, 수직 뒤집기 및 회전을 포함한 세 가지 기하학적 변환이 도입되며:
대각선:
Figure pct00028
수직 뒤집기:
Figure pct00029
회전:
Figure pct00030
여기서 K는 필터의 크기이고, 위치 (0, 0)이 좌측 상부 코너에 있고 위치 (K-1, K-1)이 우측 하부 코너에 있도록, 0 ≤ k, l ≤ K-1은 계수 좌표이다. 변환은 해당 블록에 대해 계산된 구배 값들에 따라 필터 계수들 f(k, l)에 적용된다. 변환과 4 개의 방향의 4 개의 구배 사이의 관계는 표 4에 요약되어 있다. 도 9는 5x5 다이아몬드에 기초한 각각의 위치에 대한 변환된 계수들을 도시한다.
Figure pct00031
2.6.1.3 필터 파라미터들 시그널링
일부 실시예들에서, GALF 필터 파라미터들은 제1 CTU에 대해, 예를 들면, 슬라이스 헤더 이후 및 제1 CTU의 SAO 파라미터들 이전에 시그널링된다. 최대 25 개의 루마 필터 계수 세트가 시그널링될 수 있다. 비트 오버헤드를 감소시키기 위해, 상이한 분류의 필터 계수들은 병합될 수 있다. 또한, 참조 픽처들의 GALF 계수들은 저장되고 현재 픽처의 GALF 계수들로서 재사용되도록 허용된다. 현재 픽처는 참조 픽처들에 대해 저장된 GALF 계수들을 사용하고 GALF 계수들 시그널링을 바이패스하도록 선택할 수 있다. 이 경우에, 참조 픽처들 중 하나에 대한 인덱스만이 시그널링되고, 표시된 참조 픽처의 저장된 GALF 계수들이 현재 픽처를 위해 상속된다.
GALF 시간 예측을 지원하기 위해, GALF 필터 세트들의 후보 리스트가 유지된다. 새로운 시퀀스를 디코딩하기 시작할 때, 후보 리스트는 비어 있다. 하나의 픽처를 디코딩한 후에, 대응하는 필터 세트가 후보 리스트에 추가될 수 있다. 후보 리스트의 크기가 최대 허용 값(예를 들면, 6)에 일단 도달하면, 새로운 필터 세트가 디코딩 순서에서 가장 오래된 세트를 덮어쓰며, 즉, 후보 리스트를 업데이트하기 위해 FIFO(first-in-first-out) 규칙이 적용된다. 중복을 피하기 위해, 대응하는 픽처가 GALF 시간 예측을 사용하지 않을 때에만 세트가 리스트에 추가될 수 있다. 시간 확장성을 지원하기 위해, 필터 세트들의 다수의 후보 리스트들이 있으며, 각각의 후보 리스트는 시간 계층과 연관되어 있다. 보다 구체적으로, 시간 계층 인덱스(TempIdx)에 의해 할당되는 각각의 어레이는 보다 낮은 TempIdx와 동일한 이전에 디코딩된 픽처들의 필터 세트들을 구성할 수 있다. 예를 들어, 제k 어레이는 k와 동일한 TempIdx와 연관되도록 할당되며, 이는 k보다 작거나 같은 TempIdx를 갖는 픽처들로부터의 필터 세트들만을 포함한다. 특정 픽처를 코딩한 후에, 픽처와 연관된 필터 세트들은 동일하거나 더 높은 TempIdx와 연관된 해당 어레이들을 업데이트하는 데 사용될 것이다.
GALF 계수들의 시간 예측은 시그널링 오버헤드를 최소화하기 위해 인터 코딩된 프레임들에 사용된다. 인트라 프레임들의 경우, 시간 예측이 이용 가능하지 않으며, 16 개의 고정된 필터들의 세트가 각각의 클래스에 할당된다. 고정된 필터의 사용을 나타내기 위해, 각각의 클래스에 대한 플래그가 시그널링되고, 필요한 경우, 선택된 고정된 필터의 인덱스가 시그널링된다. 주어진 클래스에 대해 고정된 필터가 선택될 때에도, 이 클래스에 대해 적응적 필터 f(k,l)의 계수들이 여전히 송신될 수 있으며 이 경우에 재구성된 이미지에 적용될 필터의 계수들은 양쪽 계수 세트들의 합이다.
루마 성분의 필터링 프로세스는 CU 레벨에서 제어될 수 있다. GALF가 CU의 루마 성분에 적용되는지 여부를 나타내기 위해 플래그가 시그널링된다. 크로마 성분의 경우, GALF가 적용되는지 여부는 픽처 레벨에서만 표시된다.
2.6.1.4 필터링 프로세스
디코더 측에서, 블록에 대해 GALF가 인에이블될 때, 블록 내의 각각의 샘플 R(i,j)는 필터링되어, 아래에 나타낸 바와 같이 샘플 값 R'(i,j)를 결과하며, 여기서 L은 필터 길이를 나타내고, fm,n은 필터 계수를 나타내며, f(k,l)은 디코딩된 필터 계수들을 나타낸다.
Figure pct00032
도 11은 현재 샘플의 좌표 (i, j)가 (0, 0)이라고 가정할 때 5x5 다이아몬드 필터 서포트에 사용되는 상대 좌표들의 예를 도시한다. 동일한 색상으로 채워진 상이한 좌표들에 있는 샘플들은 동일한 필터 계수들과 곱해진다.
2.7 기하 변환 기반 적응적 루프 필터(GALF)
2.7.1 예시적인 GALF
일부 실시예들에서, 적응적 루프 필터의 필터링 프로세스는 다음과 같이 수행되며:
Figure pct00033
여기서 샘플들 I(x+i,y+j)는 입력 샘플들이고, O(x,y)는 필터링된 출력 샘플(예를 들면, 필터 결과)이며, w(i,j)는 필터 계수들을 나타낸다. 실제로, VTM4.0에서, 이는 고정 소수점 정밀도 계산들을 위해 정수 산술을 사용하여 구현되며:
Figure pct00034
여기서 L은 필터 길이를 나타내고, 여기서 w(i,j)는 고정 소수점 정밀도의 필터 계수들이다.
VVC에서의 GALF의 현재 설계는 다음과 같은 주요 변경들을 갖는다:
(1) 적응적 필터 형상이 제거된다. 루마 성분에 대해 7x7 필터 형상만이 허용되고 크로마 성분에 대해 5x5 필터 형상이 허용된다.
(2) ALF 파라미터들의 시그널링이 슬라이스/픽처 레벨로부터 CTU 레벨로 이동된다.
(3) 클래스 인덱스의 계산은 2x2 대신에 4x4 레벨로 수행된다. 추가적으로, 일부 실시예들에서, ALF 분류를 위한 서브샘플링된 라플라시안 계산 방법이 활용된다. 보다 구체적으로, 하나의 블록 내의 각각의 샘플에 대해 수평/수직/45 대각선/135도 구배들을 계산할 필요가 없다. 그 대신에, 1:2 서브샘플링이 활용된다.
도 12a 내지 도 12d는 CE2.6.2에 대한 서브샘플링된 라플라시안 계산을 도시한다. 도 12a는 수직 구배에 대한 서브샘플링된 위치들을 예시하고, 도 12b는 수평 구배에 대한 서브샘플링된 위치들을 예시하며, 도 12c는 대각선 구배에 대한 서브샘플링된 위치들을 예시하고, 도 12d는 대각선 구배에 대한 서브샘플링된 위치들을 예시한다.
2.8 비선형 ALF
2.8.1 필터링 재수식화
방정식 (11)은 코딩 효율에 영향을 미치지 않고 다음 수식으로 재수식화될 수 있으며:
Figure pct00035
여기서 w(i,j)는 방정식 (11)에서와 동일한 필터 계수들이다[방정식 (13)에서는 1과 동일하지만 방정식 (11)에서는
Figure pct00036
와 동일한 w(0,0)을 제외함].
방정식 (13)의 이러한 상기 필터 공식을 사용하여, VVC는 이웃 샘플 값들 (I(x+i, y+j))이 필터링되고 있는 현재 샘플 값(I(x,y))와 너무 상이할 때 그들의 영향을 감소시키기 위해 간단한 클리핑 함수를 사용하여 ALF를 보다 효율적이도록 만들기 위해 비선형을 도입한다.
보다 구체적으로, ALF 필터는 다음과 같이 수정되며:
Figure pct00037
여기서 K(d,b) = min(b, max(-b,d))는 클리핑 함수이고, k(i,j)는 (i,j) 필터 계수에 의존하는 클리핑 파라미터들이다. 인코더는 최상의 k(i,j)를 찾기 위해 최적화를 수행한다.
일부 실시예들에서, 각각의 ALF 필터에 대해 클리핑 파라미터들 k(i,j)가 지정되며, 필터 계수당 하나의 클리핑 값이 시그널링된다. 이는 루마 필터당 최대 12 개의 클리핑 값이 비트스트림에서 시그널링될 수 있고 크로마 필터에 대해 최대 6 개의 클리핑 값이 시그널링될 수 있음을 의미한다.
시그널링 비용과 인코더 복잡도를 제한하기 위해, INTER 및 INTRA 슬라이스들에 대해 동일한 4 개의 고정된 값만이 사용된다.
국소적 차이들의 분산이 크로마에 대해서보다 루마에 대해 종종 더 높기 때문에, 루마 및 크로마 필터들에 대한 2 개의 상이한 세트가 적용된다. 클리핑이 필요하지 않은 경우 클리핑이 디스에이블될 수 있도록, 각각의 세트에서의 최대 샘플 값(여기서 10-비트 비트 깊이의 경우 1024)이 또한 도입된다.
일부 실시예들에서 사용되는 클리핑 값들의 세트들은 표 5에서 제공된다. 4 개의 값은 루마의 경우 샘플 값들의 전체 범위(10 비트로 코딩됨) 및 크로마의 경우 4 내지 1024의 범위를, 로그 도메인에서, 대략 균등하게 분할하는 것에 의해 선택되었다.
보다 정확하게는, 클리핑 값들의 루마 테이블은 다음 수식에 의해 획득되었다:
Figure pct00038
유사하게, 클리핑 값들의 크로마 테이블들은 다음 수식에 따라 획득된다:
Figure pct00039
Figure pct00040
선택된 클리핑 값들은 위의 표 5에서의 클리핑 값의 인덱스에 대응하는 골롬 인코딩 방식을 사용하여 "alf_data" 신택스 요소에 코딩된다. 이러한 인코딩 방식은 필터 인덱스에 대한 인코딩 방식과 동일하다.
2.9 가상 경계
하드웨어 및 임베디드 소프트웨어에서, 픽처 기반 프로세싱은 그의 높은 픽처 버퍼 요구사항으로 인해 실제로 용인 가능하지 않다. 온칩 픽처 버퍼들을 사용하는 것은 매우 비싸고 오프칩 픽처 버퍼들을 사용하는 것은 외부 메모리 액세스, 전력 소비 및 데이터 액세스 지연시간을 상당히 증가시킨다. 따라서, 실제 제품들에서는 DF, SAO 및 ALF가 픽처 기반 디코딩으로부터 LCU 기반 디코딩으로 변경될 것이다. LCU 기반 프로세싱이 DF, SAO 및 ALF에 사용될 때, 전체 디코딩 프로세스는 다수의 LCU들의 병렬 프로세싱을 위한 LCU 파이프라이닝 방식으로 래스터 스캔에서 LCU별로 행해질 수 있다. 이 경우에, 하나의 LCU 행을 프로세싱하는 것이 위쪽 LCU 행으로부터의 픽셀들을 필요로 하기 때문에 DF, SAO 및 ALF에 대해 라인 버퍼들이 필요하다. 오프칩 라인 버퍼들(예를 들면, DRAM)이 사용되는 경우, 외부 메모리 대역폭과 전력 소비가 증가될 것이며; 온칩 라인 버퍼들(예를 들면, SRAM)이 사용되는 경우, 칩 면적이 증가될 것이다. 따라서, 라인 버퍼들이 이미 픽처 버퍼들보다 훨씬 더 작더라도, 라인 버퍼들을 감소시키는 것이 여전히 바람직하다.
일부 실시예들에서, 도 13에 도시된 바와 같이, 필요한 라인 버퍼들의 총수는 루마 성분의 경우 11.25 라인이다. 라인 버퍼 요구사항에 대한 설명은 다음과 같다: 결정 및 필터링이 첫 번째 CTU로부터의 라인들 K, L, M, M 및 하단 CTU로부터의 라인들 O, P를 필요로 하기 때문에 CTU 에지와 중첩하는 수평 에지의 디블로킹이 수행될 수 없다. 따라서, CTU 경계와 중첩하는 수평 에지들의 디블로킹은 하위 CTU가 올 때까지 연기된다. 따라서, 라인들 K, L, M, N에 대해, 재구성된 루마 샘플들은 라인 버퍼(4 개의 라인)에 저장되어야 한다. 이어서 라인들 A 내지 J에 대해 SAO 필터링이 수행될 수 있다. 디블로킹이 라인 K에 있는 샘플들을 변경하지 않기 때문에 라인 J는 SAO 필터링될 수 있다. 라인 K의 SAO 필터링의 경우, 에지 오프셋 분류 결정은 (0.25 루마 라인인) 라인 버퍼에만 저장된다. ALF 필터링은 라인들 A 내지 F에 대해서만 수행할 수 있다. 도 13에 도시된 바와 같이, 각각의 4x4 블록에 대해 ALF 분류가 수행된다. 각각의 4x4 블록 분류는 8x8 크기의 활성도 창을 필요로 하며, 이는 차례로 구배를 결정하기 위해 1d 라플라시안을 계산하기 위해 9x9 창을 필요로 한다.
따라서, 라인들 G, H, I, J와 중첩하는 4x4 블록의 블록 분류를 위해, 가상 경계 아래의 SAO 필터링된 샘플들이 필요하다. 추가적으로, ALF 분류를 위해 라인들 D, E, F의 SAO 필터링된 샘플들이 필요하다. 더욱이, 라인 G의 ALF 필터링은 위쪽 라인들로부터의 3 개의 SAO 필터링된 라인 D, E, F를 필요로 한다. 따라서, 총 라인 버퍼 요구사항은 다음과 같다:
- 라인들 K 내지 N(수평 DF 픽셀들): 4 개의 라인
- 라인들 D 내지 J(SAO 필터링된 픽셀들): 7 개의 라인
- 라인 J와 라인 K 사이의 SAO 에지 오프셋 분류기 값들: 0.25 라인
따라서, 필요한 루마 라인들의 총수는 7 + 4 + 0.25 = 11.25이다.
유사하게, 크로마 성분의 라인 버퍼 요구사항은 도 14에 예시되어 있다. 크로마 성분에 대한 라인 버퍼 요구사항은 6.25 개의 라인인 것으로 평가된다.
SAO 및 ALF의 라인 버퍼 요구사항들을 제거하기 위해, 최신 VVC에서 가상 경계(VB)의 개념이 도입된다. 도 13에 도시된 바와 같이, VB들은 N 개의 픽셀만큼 상향 시프트된 수평 LCU 경계들이다. 각각의 LCU에 대해, SAO 및 ALF는 하위 LCU가 오기 전에 VB 위쪽의 픽셀들을 프로세싱할 수 있지만, 하위 LCU가 올 때까지 VB 아래의 픽셀들을 프로세싱할 수 없으며, 이는 DF에 의해 야기된다. 하드웨어 구현 비용을 고려하여, 제안된 VB와 수평 LCU 경계 사이의 공간은 루마의 경우 4 개의 픽셀로서 설정되고(예를 들면, 도 13에서의 N=4) 크로마의 경우 2 개의 픽셀로서 설정된다(예를 들면, 도 9에서의 N=2).
2.9.1 VB 크기 N이 4일 때 수정된 ALF 블록 분류
도 15a 및 도 15b는 가상 경계가 CTU 경계보다 4 개의 라인 위쪽에 있는 경우(N=4인 경우)에 대한 수정된 블록 분류를 묘사한다. 도 15a에 묘사된 바와 같이, 라인 G에서 시작하는 4x4 블록의 경우, 블록 분류는 라인들 E 내지 J만을 사용한다. 그렇지만, 라인 J에 속하는 샘플들에 대한 라플라시안 구배 계산은 아래쪽의 하나의 추가 라인(라인 K)을 필요로 한다. 따라서, 라인 K는 라인 J로 패딩된다.
유사하게, 도 15b에 묘사된 바와 같이, 라인 K에서 시작하는 4x4 블록의 경우, 블록 분류는 라인들 K 내지 P만을 사용한다. 그렇지만, 라인 K에 속하는 샘플들에 대한 라플라시안 구배 계산은 위쪽의 하나의 추가 라인(라인 J)을 필요로 한다. 따라서, 라인 J는 라인 K로 패딩된다.
2.9.2 가상 경계들에 걸쳐 있는 샘플들에 대한 양측 패딩(two-side padding)
도 16a 내지 도 16c에 묘사된 바와 같이, 가상 경계들에 가까운 라인들에 속하는 루마 샘플들의 필터링을 위해 필터들의 절단된 버전이 사용된다. 도 16a를 예로 들면, 도 13에 표시된 바와 같이 라인 M을 필터링할 때, 예를 들면, 7x7 다이아몬드 서포트의 중앙 샘플이 라인 M에 있을 때, 이는 VB 위쪽의 하나의 라인(굵은 라인으로 표시됨)에 액세스할 필요가 있다. 이 경우에, VB 위쪽의 샘플들은 VB 아래쪽에 있는 우측 아래 샘플로부터 복사되며, 예컨대, 실선 라인에 있는 P0 샘플은 위쪽의 파선 위치에 복사된다. 대칭적으로, 실선 라인에 있는 P3 샘플은 또한 해당 위치에 대한 샘플이 이용 가능하더라도 우측 아래 파선 위치에 복사된다. 복사된 샘플들은 루마 필터링 프로세스에서만 사용된다.
ALF 가상 경계들에 사용되는 패딩 방법은 '양측 패딩'으로 표시될 수 있으며, 여기서, 도 16a 내지 도 16c, 도 17a 및 도 17b에 묘사된 바와 같이, (i, j)에 위치하는 하나의 샘플(예를 들면, 도 16b에서 파선 라인을 갖는 P0A)이 패딩되는 경우, 샘플이 이용 가능하더라도 동일한 필터 계수를 공유하는 (m, n)에 위치하는 대응하는 샘플(예를 들면, 도 16b에서의 파선 라인을 갖는 P3B)이 또한 패딩된다. 도 16a 내지 도 16c에서, 7x7 다이아몬드 필터 서포트의 중앙은 필터링될 현재 샘플이다. 도 16a는 VB 위쪽에/아래쪽에 있는 하나의 요구된 라인이 패딩될 필요가 있다는 것을 도시한다. 도 16b는 VB 위쪽에/아래쪽에 있는 2 개의 요구된 라인이 패딩될 필요가 있다는 것을 도시한다. 도 16c는 VB 위쪽에/아래쪽에 있는 3 개의 요구된 라인이 패딩될 필요가 있다는 것을 도시한다.
유사하게, 도 17a 및 도 17b에 묘사된 바와 같이, 양측 패딩 방법이 또한 크로마 ALF 필터링에 사용된다. 도 17a 및 도 17b는 가상 경계에서의 수정된 크로마 ALF 필터링을 도시한다(5x5 다이아몬드 필터 서포트의 중앙은 필터링될 현재 샘플임). 도 17a는 VB 위쪽에/아래쪽에 있는 1 개의 요구된 라인이 패딩될 필요가 있다는 것을 도시한다. 도 17b는 VB 위쪽에/아래쪽에 있는 2 개의 요구된 라인이 패딩될 필요가 있다는 것을 도시한다.
2.9.3 비선형 ALF가 디스에이블될 때 양측 패딩의 구현을 위한 대안적인 방법
CTB에 대해 비선형 ALF가 디스에이블될 때, 예를 들면, 방정식 (14)에서의 클리핑 파라미터들 k(i,j)가 (1<< Bitdepth)와 동일할 때, 패딩 프로세스는 필터 계수들을 수정하는 것(수정된 계수 기반 ALF, MALF라고도 함)으로 대체될 수 있다. 예를 들어, 라인 L/I에 있는 샘플들을 필터링할 때, 필터 계수 c5는 c5'로 수정되고, 이 경우에, 실선 P0A로부터 파선 P0A로 그리고 실선 P3B로부터 파선 P3B(도 18a)로 루마 샘플들을 복사할 필요가 없다. 이 경우에, 필터링될 현재 샘플이 (x, y)에 위치한다고 가정하면, 양측 패딩 및 MALF는 동일한 결과들을 생성할 것이다. K(d, b) = d이고 패딩으로 인해 I(x-1,y-1)=I(x-1,y-2)이기 때문에,
Figure pct00041
그렇지만, 비선형 ALF가 인에이블될 때, MALF 및 양측 패딩은 다른 필터링된 결과들을 생성할 수 있고, 비선형 파라미터들이, 필터 계수들 c5 및 c1에 대해서와 같이, 각각의 계수와 연관되기 때문에, 클리핑 파라미터들이 상이하다. 따라서, 패딩으로 인해 I(x-1,y-1)=I(x-1,y-2)이더라도, K(d, b) != d이기 때문에,
Figure pct00042
2.10 ALF 필터링에 대한 사양
새로 추가된 부분들은 굵은 기울임꼴 밑줄친 텍스트로 표시된다. 삭제된 부분들은 [[]]를 사용하여 표시된다.
7.3.2.4 픽처 파라미터 세트 RBSP 신택스
Figure pct00043
Figure pct00044
Figure pct00045
Figure pct00046
loop_filter_across_bricks_enabled_flag가 1과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 브릭 경계들에 걸쳐 수행될 수 있다는 것을 지정한다. loop_filter_across_bricks_enabled_flag가 0과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 브릭 경계들에 걸쳐 수행되지 않는다는 것을 지정한다. 인루프 필터링 동작들은 디블로킹 필터, 샘플 적응적 오프셋 필터 및 적응적 루프 필터 동작들을 포함한다. 존재하지 않을 때, loop_filter_across_bricks_enabled_flag의 값은 1과 동일한 것으로 추론된다.
loop_filter_across_slices_enabled_flag가 1과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 슬라이스 경계들에 걸쳐 수행될 수 있다는 것을 지정한다. loop_filter_across_slice_enabled_flag가 0과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 슬라이스 경계들에 걸쳐 수행되지 않는다는 것을 지정한다. 인루프 필터링 동작들은 디블로킹 필터, 샘플 적응적 오프셋 필터 및 적응적 루프 필터 동작들을 포함한다. 존재하지 않을 때, loop_filter_across_slices_enabled_flag의 값은 0과 동일한 것으로 추론된다.
pps _loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 가상 경계들에 걸쳐 디스에이블된다는 것을 지정한다. pps_loop_filter_across_virtual_boundaries_disabled_flag가 0과 동일한 것은 인루프 필터링 동작들의 그러한 디스에이블이 PPS를 참조하는 픽처들에서 적용되지 않는다는 것을 지정한다. 인루프 필터링 동작들은 디블로킹 필터, 샘플 적응적 오프셋 필터 및 적응적 루프 필터 동작들을 포함한다. 존재하지 않을 때, pps_loop_filter_across_virtual_boundaries_disabled_flag의 값은 0과 동일한 것으로 추론된다.
pps _ num _ ver _virtual_boundaries는 PPS에 존재하는 pps_virtual_boundaries_pos_x[ i ] 신택스 요소들의 수를 지정한다. pps_num_ver_virtual_boundaries가 존재하지 않을 때, 이는 0과 동일한 것으로 추론된다.
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플에 상대적인 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ], 단 x, y = 0..CtbSizeY - 1을 출력들로 하여 호출된다.
필터링된 재구성된 루마 샘플들 alfPictureL[ x ][ y ]의 도출을 위해, 현재 루마 코딩 트리 블록 recPictureL[ x ][ y ] 내의 각각의 재구성된 루마 샘플은 다음과 같이 필터링되며, 단, x, y = 0..CtbSizeY - 1이다:
- 루마 필터 계수들의 어레이 f[ j ] 및 filtIdx[ x ][ y ]에 의해 명시되는 필터에 대응하는 루마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되며, 단, j = 0..11이다:
- AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 작은 경우, 다음이 적용된다:
Figure pct00047
- 그렇지 않은 경우(AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 크거나 같은 경우), 다음이 적용된다:
Figure pct00048
- 루마 필터 계수들 및 클리핑 값 인덱스 idx는 다음과 같이 transposeIdx[ x ][ y ]에 따라 도출된다:
- transposeIndex[ x ][ y ]가 1과 동일한 경우, 다음이 적용된다:
Figure pct00049
- 그렇지 않고, transposeIndex[ x ][ y ]가 2와 동일한 경우, 다음이 적용된다:
Figure pct00050
- 그렇지 않고, transposeIndex[ x ][ y ]가 3과 동일한 경우, 다음이 적용된다:
Figure pct00051
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00052
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx + i, vy + j )(단, i, j = 3..3임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00053
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ]- xCtb - x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00054
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00055
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00056
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] - yCtb - y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00057
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00058
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우 , applyVirtualBoundary가 1과 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 applyVirtualBoundary에 따른 재구성된 샘플 오프셋들 r1, r2 및 r3은 표 8-22에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00059
- 변수 sum은 다음과 같이 도출된다:
Figure pct00060
수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ xCtb+ x ][ yCtb + y ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00061
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00062
Figure pct00063
8.8.5.4 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플에 상대적인 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00064
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1이다:
크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00065
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] / SubWidthC - xCtbC - x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00066
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00067
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtbC + y - PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00068
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] / SubHeightC - yCtbC - y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00069
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00070
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우 , applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우 , applyVirtualBoundary가 1과 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 applyVirtualBoundary에 따른 재구성된 샘플 오프셋들 r1 및 r2는 표 8-22에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00071
- 크로마 필터 계수들의 어레이 f[ j ] 및 크로마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되고, 단, j = 0..5이다:
Figure pct00072
- 변수 sum은 다음과 같이 도출된다:
Figure pct00073
Figure pct00074
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ ( xCtbC + x ) * SubWidthC ][ ( yCtbC + y ) * SubHeightC ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00075
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00076
2.11 CTU 프로세싱의 예들
현재 VVC 설계에 따르면, 하나의 CTB의 하단 경계가 슬라이스/브릭의 하단 경계인 경우, ALF 가상 경계 처리 방법이 디스에이블된다. 예를 들어, 하나의 픽처는 도 19에 묘사된 바와 같이 다수의 CTU들과 2 개의 슬라이스로 분할된다.
CTU 크기가 MxM(예를 들면, M = 64)이라고 가정하면, 가상 경계 정의에 따라, CTB 내의 마지막 4 개의 라인은 가상 경계 아래에서 처리된다. 하드웨어 구현에서, 다음이 적용된다:
- CTB의 하단 경계가 픽처(예를 들면, CTU-D)의 하단 경계인 경우, CTU 행 위쪽으로부터의 4 개의 라인 및 현재 CTU에서의 모든 라인들을 포함하는 (M+4) × M 블록을 프로세싱한다.
- 그렇지 않고, CTB의 하단 경계가 슬라이스(또는 브릭)(예를 들면, CTU-C)의 하단 경계이고 loop_filter_across_slice_enabled_flag(또는 loop_filter_across_bricks_enabled_flag)가 0과 동일한 경우, CTU 행 위쪽으로부터의 4 개의 라인 및 현재 CTU에서의 모든 라인들을 포함하는 (M+4) × M 블록을 프로세싱한다.
- 그렇지 않고, CTU/CTB가 슬라이스/브릭/타일(예를 들면, CTU-A)에서의 첫 번째 CTU 행에 있는 경우, 마지막 4 개의 라인을 제외한 M × (M-4) 블록을 프로세싱한다.
- 그렇지 않고, CTU/CTB가 슬라이스/브릭/타일(예를 들면, CTU-B)의 첫 번째 CTU 행에 있지 않고 슬라이스/브릭/타일의 마지막 CTU 행에 있지 않은 경우, CTU 행 위쪽으로부터의 4 개의 라인을 포함하고 현재 CTU에서의 마지막 4 개의 라인을 제외한 M × M 블록을 프로세싱한다.
도 19은 픽처에서의 CTU들의 프로세싱의 예를 도시한다.
2.12 360도 비디오 코딩
VTM5에서의 수평 랩 어라운드 모션 보상은 ERP(equi-rectangular) 투영 포맷의 재구성된 360도 비디오의 시각적 품질을 개선시키도록 설계된 360 전용 코딩 툴이다. 종래의 모션 보상에서는, 모션 벡터가 참조 픽처의 픽처 경계들 너머의 샘플들을 참조할 때, 대응하는 픽처 경계 상의 해당 최근접 이웃들로부터 복사하는 것에 의해 범위 밖의(out-of-bounds) 샘플들의 값들을 도출하기 위해 반복적인 패딩이 적용된다. 360도 비디오의 경우, 이 반복적인 패딩 방법은 적합하지 않으며, 재구성된 뷰포트 비디오에서 "이음매 아티팩트(seam artefact)"라는 시각적 아티팩트를 야기할 수 있다. 360도 비디오는 구면 상에서 캡처되고 본질적으로 "경계"를 갖지 않기 때문에, 투영된 도메인에서 참조 픽처 경계들을 벗어난 참조 샘플들은 항상 구면 도메인에서 이웃 샘플들로부터 획득될 수 있다. 일반적인 투영 포맷의 경우, 2D 대 3D 및 3D 대 2D 좌표 변환은 물론 분수 샘플 위치들에 대한 샘플 보간을 수반하기 때문에, 구면 도메인에서 대응하는 이웃 샘플들을 도출하기 어려울 수 있다. 이 문제는 ERP 투영 포맷의 좌측 및 우측 경계들에 대해 훨씬 더 간단한데, 그 이유는 좌측 픽처 경계 외부의 구면 이웃들이 우측 픽처 경계 내부의 샘플들로부터 획득될 수 있고 그 반대도 마찬가지이기 때문이다.
도 20은 VVC에서의 수평 랩 어라운드 모션 보상의 예를 도시한다.
수평 랩 어라운드 모션 보상 프로세스는 도 20에 묘사된 바와 같다. 참조 블록의 일부가 투영된 도메인에서 참조 픽처의 좌측(또는 우측) 경계 외부에 있을 때, 반복적인 패딩 대신에, "경계 외부" 부분이 투영된 도메인에서 우측(또는 좌측) 경계 쪽에 있는 참조 픽처의 대응하는 구면 이웃들로부터 취해진다. 반복적인 패딩은 상단 및 하단 픽처 경계들에 대해서만 사용된다. 도 20에 묘사된 바와 같이, 수평 랩 어라운드 모션 보상은 360도 비디오 코딩에서 종종 사용되는 비규범적(non-normative) 패딩 방법과 결합될 수 있다. VVC에서, 이것은 패딩 이전에 ERP 픽처 폭으로 설정되어야 하는 랩 어라운드 오프셋을 나타내기 위해 상위 레벨 신택스 요소를 시그널링하는 것에 의해 달성되며; 이 신택스는 그에 따라 수평 랩 어라운드의 위치를 조정하는 데 사용된다. 이 신택스는 좌측 및 우측 픽처 경계들에서의 특정 패딩 양에 의해 영향을 받지 않으며, 따라서, 예를 들면, 좌측 및 우측 패딩이 상이할 때, ERP 픽처의 비대칭 패딩을 자연스럽게 지원한다. 수평 랩 어라운드 모션 보상은 참조 샘플들이 참조 픽처의 좌측 및 우측 경계들 외부에 있을 때 모션 보상에 대한 보다 의미 있는 정보를 제공한다.
복수의 면들로 구성된 투영 포맷들의 경우, 어떤 종류의 콤팩트한 프레임 패킹 배열이 사용되더라도, 프레임 패킹된 픽처에서 2 개 이상의 인접한 면 사이에 불연속부들이 나타난다. 예를 들어, 도 24에 묘사된 3x2 프레임 패킹 구성을 고려할 때, 상반부에 있는 3 개의 면은 3D 지오메트리에서 연속적이고, 하반부에 있는 3 개의 면은 3D 지오메트리에서 연속적이지만, 프레임 패킹된 픽처의 상반부 및 하반부는 3D 지오메트리에서 불연속적이다. 인루프 필터링 동작들이 이러한 불연속부에 걸쳐 수행되는 경우, 재구성된 비디오에서 면 이음매 아티팩트들이 보일 수 있다.
면 이음매 아티팩트들을 완화시키기 위해, 프레임 패킹된 픽처에서의 불연속부들에 걸쳐 인루프 필터링 동작들이 디스에이블될 수 있다. 인루프 필터링 동작들이 디스에이블되는 수직 및/또는 수평 가상 경계들을 시그널링하기 위해 신택스가 제안되었다. 연속적인 면들의 각각의 세트에 대해 하나씩, 2 개의 타일을 사용하는 것과 비교하여 그리고 타일들에 걸친 인루프 필터링 동작들을 디스에이블시키기 위해, 제안된 시그널링 방법은, 면 크기가 CTU 크기의 배수일 것을 요구하지 않기 때문에, 더 유연하다.
2.13 예시적인 서브픽처 기반 모션 제약된 독립적인 영역들
일부 실시예들에서, 다음 특징들이 포함된다:
1) 픽처들이 서브픽처들로 나누어질 수 있다.
2) 서브픽처들의 존재의 표시는, 서브픽처들의 다른 시퀀스 레벨 정보와 함께, SPS에서 표시된다.
3) (인루프 필터링 동작들을 제외한) 디코딩 프로세스에서 서브픽처가 픽처로서 취급되는지 여부는 비트스트림에 의해 제어될 수 있다.
4) 서브픽처 경계들에 걸친 인루프 필터링이 디스에이블되는지 여부는 각각의 서브픽처에 대한 비트스트림에 의해 제어될 수 있다. DBF, SAO 및 ALF 프로세스들은 서브픽처 경계들에 걸친 인루프 필터링 동작들의 제어를 위해 업데이트된다.
5) 간단함을 위해, 시작점으로서, 서브픽처 폭, 높이, 수평 오프셋, 및 수직 오프셋이 SPS에서 루마 샘플 단위로 시그널링된다. 서브픽처 경계들은 슬라이스 경계들로 제약된다.
6) (인루프 필터링 동작들을 제외한) 디코딩 프로세스에서 서브픽처를 픽처로서 취급하는 것은 coding_tree_unit() 신택스를 약간 업데이트하는 것 및 이하의 디코딩 프로세스들에 대한 업데이트들에 의해 지정된다:
o (진보된) 시간 루마 모션 벡터 예측을 위한 도출 프로세스
o 루마 샘플 이중선형 보간 프로세스
o 루마 샘플 8-탭 보간 필터링 프로세스
o 크로마 샘플 보간 프로세스
7) VCL NAL 유닛들을 변경할 필요 없이 서브픽처 시퀀스들의 추출을 가능하게 하기 위해 서브픽처 ID들이 SPS에 명시적으로 지정되고 타일 그룹 헤더들에 포함된다.
출력 서브픽처 세트들(OSPS)은 서브픽처들 및 그의 세트들에 대한 규범적 추출 및 적합성 포인트들을 지정하기 위해 제안된다.
3. 본 문서에서 제공되는 해결책들에 의해 해결되는 기술적 문제들
현재 VVC 설계는 다음과 같은 문제점들을 갖는다:
1. ALF 가상 경계를 인에이블시키는 것의 현재 설정은 CTB의 하단 경계가 픽처의 하단 경계인지 여부에 의존한다. 참인 경우, 도 19에서의 CTU-D와 같이, ALF 가상 경계가 디스에이블된다. 그렇지만, CTB의 하단 경계가 픽처의 하단 경계 외부에 있는 것, 예컨대, 256x240 픽처가 4 개의 128x128 CTU로 분할되는 것이 가능할 수 있으며, 이 경우에, ALF 가상 경계는 하단 픽처 경계 외부에 샘플들을 갖는 마지막 2 개의 CTU에 대해 참으로 잘못 설정될 것이다.
2. ALF 가상 경계를 처리하는 방식은 하단 픽처 경계 및 슬라이스/타일/브릭 경계에 대해 디스에이블된다. 슬라이스/브릭 경계를 따라 VB를 디스에이블시키는 것은 파이프라인 버블을 야기할 수 있거나 LCU 크기가 64x64라고 가정할 때 가상 파이프라인 데이터 유닛(VPDU, VVC에서 64x64)당 68 개의 라인을 프로세싱하는 것을 필요로 할 수 있다. 예를 들어:
a. 디코더들이 슬라이스/브릭/타일 경계들을 미리 알지 못하는 경우(예를 들면, 저지연 응용 분야들의 경우), ALF 라인 버퍼들이 복원될 필요가 있다. 라인 버퍼들에 있는 내용이 ALF 필터링에 사용되는지 여부는 현재 CTU가 또한 슬라이스/브릭/타일 경계 CTU인지 여부에 의존하지만, 이 정보는 다음 슬라이스/브릭/타일이 디코딩될 때까지 알 수 없다.
b. 디코더들이 슬라이스/브릭/타일 경계를 미리 알고 있는 경우, ALF 라인 버퍼들을 사용하는 것을 피하기 위해, 디코더들은 파이프라인 버블들을 감수할 필요가 있거나(매우 가능성 없음) ALF를 항상 64x64 VDPU당 68 라인의 속도로 실행(오버프로비저닝)할 필요가 있다.
3. 가상 경계 및 비디오 유닛 경계를 처리하는 상이한 방식들, 예를 들면, 상이한 패딩 방법들이 존재한다. 한편, 라인이 다수의 경계들에 있을 때 라인에 대해 둘 이상의 패딩 방법이 수행될 수 있다.
a. 일 예에서, 블록의 하단 경계가 360도 가상 경계이고 ALF 가상 경계가 또한 이 블록에 적용되는 경우, 이 경우에, 360도 가상 경계 아래쪽에 가상 샘플들을 생성하기 위해 360도 가상 경계에 대한 패딩 방법이 먼저 적용될 수 있다. 그 후에, 360도 가상 경계 아래에 위치하는 이러한 가상 샘플들은 이용 가능한 것으로 취급된다. 그리고 ALF 양측 패딩 방법이 도 16a 내지 도 16c에 따라 더 적용될 수 있다. 예가 도 25에 묘사되어 있다.
4. 가상 경계를 처리하는 방식은, 덜 효율적일 수 있는 패딩된 샘플들이 활용되기 때문에, 차선책일 수 있다.
5. 비선형 ALF가 디스에이블될 때, MALF 및 양측 패딩 방법들은 가상 경계에 걸쳐 있는 샘플들에 액세스할 것을 필요로 하는 샘플의 필터링에 대해 동일한 결과들을 생성할 수 있을 것이다. 그렇지만, 비선형 ALF가 인에이블될 때, 2 개의 방법은 상이한 결과들을 가져올 것이다. 이 두 경우를 정렬시키는 것이 유익할 것이다.
6. 슬라이스는, 도 28에 묘사된 것과 같이, 직사각형 슬라이스이거나 비직사각형 슬라이스일 수 있다. 이 경우에, CTU의 경우, 이는 어떠한 경계들(예를 들면, 픽처/슬라이스/타일/브릭)과도 일치하지 않을 수 있다. 그렇지만, 이는 현재 슬라이스 외부의 샘플들에 액세스할 필요가 있을 수 있다. 슬라이스 경계에 걸친 필터링이 디스에이블되는 경우(예를 들면, loop_filter_across_slices_enabled_flag가 거짓인 경우), ALF 분류 및 필터링 프로세스를 어떻게 수행할지가 알려져 있지 않다.
7. 서브픽처는 한 픽처 내의 하나 이상의 슬라이스의 직사각형 영역이다. 서브픽처는 픽처의 직사각형 영역을 집합적으로 커버하는 하나 이상의 슬라이스를 포함한다. 신택스 테이블은 서브픽처들의 개념을 포함하도록 다음과 같이 수정된다(굵은 기울임꼴로 밑줄이 그어져 있음).
7.3.2.3 시퀀스 파라미터 세트 RBSP 신택스
Figure pct00077
Figure pct00078
서브픽처들에 걸친 필터링을 인에이블시키는 것이 각각의 서브픽처에 대해 제어된다는 점에 유의한다. 그렇지만, 하나의 픽처 내의 모든 슬라이스들/타일들/브릭들을 제어하기 위해 한 번 시그널링되는 슬라이스/타일/브릭에 걸친 필터링을 인에이블시키는 것의 제어는 픽처 레벨에서 제어된다.
8. ALF 분류는 4x4 단위로 수행된다, 즉, 하나의 4x4 단위 내의 모든 샘플들이 동일한 분류 결과들을 공유한다. 그렇지만, 보다 정확하게 말하면, 현재 4x4 블록을 포함하는 8x8 창 내의 샘플들이 그들의 구배들을 계산할 필요가 있다. 이 경우에, 도 30에 묘사된 바와 같이, 10x10 샘플들이 액세스될 필요가 있다. 샘플들 중 일부가 상이한 비디오 유닛(예를 들면, 상이한 슬라이스/타일/브릭/서브픽처/위쪽 또는 좌측 또는 우측 또는 하단 "360 가상 경계"/위쪽 또는 아래쪽 "ALF 가상 경계")에 위치하는 경우, 분류를 어떻게 계산할지가 정의될 필요가 있다.
9. VVC 설계에서, 4 개의 경계 위치(예를 들면, 좌측 수직/우측 수직/위쪽 수평/아래쪽 수평)가 식별된다. 샘플이 4 개의 경계 위치 내에 위치하는 경우, 샘플은 이용 가능한 것으로 표시된다. 그렇지만, VVC에서, 도 28에 도시된 바와 같이, 슬라이스는 비직사각형 영역을 커버하고 있을 수 있다. 이 4 개의 경계 위치를 검사하는 것에 의해, 잘못된 이용 가능성 결과를 표시할 수 있다. 예를 들어, 도 28에서의 청색 위치(좌측 상단 지점)의 경우, 이는 현재 블록(예를 들면, 적색 위치(우측 하단 지점)를 커버하는 블록)과 상이한 슬라이스에 있으며 loop_filter_across_slices_enabled_flag가 거짓인 경우(예를 들면, 슬라이스들에 걸쳐 있는 샘플들이 ALF에서 사용되도록 허용되지 않는 경우) "이용 불가능한" 것으로 표시되어야 한다. 그렇지만, 현재 블록의 좌측 수직/우측 수직/위쪽 수평/아래쪽 수평 경계들만을 검사하는 것에 의해, 청색 위치가 "이용 가능한" 것으로 잘못 표시될 것이다.
4. 기술들 및 실시예들의 예들
아래의 목록은 일반 개념들을 설명하기 위한 예들로서 간주되어야 한다. 열거된 기술들이 좁은 의미로 해석되어서는 안된다. 게다가, 이러한 기술들은 임의의 방식으로 조합될 수 있다.
ALF 가상 경계들에 사용되는 패딩 방법은 '양측 패딩'이라고 표기될 수 있으며, 여기서, 도 12 및 도 13에 묘사된 바와 같이, (i, j)에 위치하는 하나의 샘플이 패딩되는 경우, 샘플이 이용 가능하더라도 동일한 필터 계수를 공유하는 (m, n)에 위치하는 대응하는 샘플이 또한 패딩된다.
픽처 경계들/360도 비디오 가상 경계들, 일반 경계들(예를 들면, 상단 및 하단 경계들)에 사용되는 패딩 방법은 '일측 패딩(One-side Padding)'이라고 표기될 수 있으며, 여기서 사용될 하나의 샘플이 경계들 외부에 있는 경우, 이는 픽처 내부의 이용 가능한 샘플로부터 복사된다.
360도 비디오 좌측 및 우측 경계들에 사용되는 패딩 방법은 '래핑 기반 패딩(wrapping-base Padding)'이라고 표기될 수 있으며, 여기서 사용될 하나의 샘플이 경계들 외부에 있는 경우, 이는 모션 보상된 결과들을 사용하여 복사된다.
이하의 논의에서, 샘플이 "비디오 유닛의 경계에 있다"는 것은 샘플과 비디오 유닛의 경계 사이의 거리가 임계치보다 작거나 크지 않다는 것을 의미할 수 있다. "라인"은 하나의 동일한 수평 위치에 있는 샘플들 또는 하나의 동일한 수직 위치에 있는 샘플들(예를 들면, 동일한 행에 있는 샘플들 및/또는 동일한 열에 있는 샘플들)을 지칭할 수 있다. 함수 Abs(x)는 다음과 같이 정의된다:
Figure pct00079
이하의 논의에서 "가상 샘플"은 재구성된 샘플과 상이할 수 있는(디블로킹 및/또는 SAO에 의해 프로세싱될 수 있는) 생성된 샘플을 지칭한다. 가상 샘플은 다른 샘플에 대한 ALF를 수행하는 데 사용될 수 있다. 가상 샘플은 패딩에 의해 생성될 수 있다.
'하나의 블록에 대해 ALF 가상 경계 처리 방법이 인에이블된다'는 사양에서의 applyVirtualBoundary가 참으로 설정된다는 것을 나타낼 수 있다. '가상 경계를 인에이블시키는 것'은 현재 블록이 가상 경계에 의해 적어도 2 개의 부분으로 분할되고 한 부분에 위치하는 샘플들이 필터링 프로세스(예를 들면, ALF)에서 다른 부분에 있는 샘플들을 활용하도록 허용되지 않는다는 것을 나타낼 수 있다. 가상 경계는 하나의 블록의 하단 경계 위쪽의 K 개의 행일 수 있다.
이하의 설명에서, 이웃 샘플들은 필터 분류 및/또는 필터링 프로세스에 필요한 것들일 수 있다.
본 개시에서, 이웃 샘플은 현재 픽처, 또는 현재 서브픽처, 또는 현재 타일, 또는 현재 슬라이스, 또는 현재 브릭, 또는 현재 CTU, 또는 현재 프로세싱 유닛(예컨대, ALF 프로세싱 유닛 또는 좁은 ALF 프로세싱 유닛) 또는 임의의 다른 현재 비디오 유닛 외부에 있는 경우 "이용 가능하지 않다".
1. '현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계라는' 결정은 '현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계이거나 픽처 외부에 있다는' 것으로 대체된다.
a. 대안적으로, 게다가 이 경우에, ALF 가상 경계 처리 방식이 디스에이블될 수 있다.
2. 인루프 필터링 프로세스에서 가상 샘플들의 사용을 인에이블시킬지 여부(예를 들면, 가상 경계를 인에이블시키는지 여부(예를 들면, applyVirtualBoundary를 참 또는 거짓으로 설정하는지))는 CTB 크기에 의존할 수 있다.
a. 일 예에서, applyVirtualBoundary는 주어진 CTU/CTB 크기에 대해, 예를 들면, KxL(예를 들면, K=L=4)과 동일한 CTU/CTB 크기에 대해 항상 거짓으로 설정된다.
b. 일 예에서, applyVirtualBoundary는 KxL(예를 들면, K=L=8)보다 크지 않거나 그보다 작은 특정 CTU/CTB 크기들에 대해 항상 거짓으로 설정된다.
c. 대안적으로, ALF는, 4x4, 8x8과 같은, 특정 CTU/CTB 크기들에 대해 디스에이블된다.
3. 인루프 필터링 프로세스들(예를 들면, ALF)에서 (예를 들면, 재구성된 샘플들로부터 패딩된) 가상 샘플들의 사용을 인에이블시킬지 여부는 블록의 하단 경계가 픽처(예를 들면, 슬라이스/타일/브릭)에 비해 더 미세한 입도로 되어 있는 비디오 유닛의 하단 경계 또는 가상 경계인지 여부에 의존할 수 있다.
a. 일 예에서, ALF 가상 경계 처리 방법은 CTB의 하단 경계가 비디오 유닛의 경계 또는 가상 경계인 경우 코딩 트리 블록(CTB)에 대해 인에이블될 수 있다(예를 들면, applyVirtualBoundary가 참으로 설정됨).
i. 대안적으로, 게다가, 하단 경계가 하단 픽처 경계가 아닌 경우 또는 하단 경계가 픽처 외부에 있는 경우, 위의 방법이 인에이블된다.
b. 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 가상 경계들 중 하나이고 pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일한 경우, ALF 가상 경계 처리 방법은 여전히 인에이블될 수 있다(예를 들면, applyVirtualBoundary가 참으로 설정됨).
c. 일 예에서, CTB에 대한 ALF 가상 경계 처리 방법을 인에이블시킬지 여부(예를 들면, applyVirtualBoundary의 값)는 CTB의 하단 경계와 픽처의 하단 경계 사이의 관계에만 의존할 수 있다.
i. 일 예에서, CTB의 하단 경계가 CTB를 포함하는 픽처의 하단 경계인 경우 또는 하단 경계가 픽처 외부에 있는 경우에만 applyVirtualBoundary가 거짓으로 설정된다.
ii. 일 예에서, CTB의 하단 경계가 CTB를 포함하는 픽처의 하단 경계가 아닐 때 applyVirtualBoundary가 참으로 설정된다.
d. 일 예에서, 도 18a 내지 도 18c에서 CTU-C를 디코딩할 때, M × M 샘플들은 가상 경계 아래쪽의 K 개의 라인을 제외한 CTU 위쪽으로부터의 K 개의 라인으로 필터링될 수 있다.
4. 브릭/슬라이스 경계들에 걸쳐 있는 루프 필터들에 대한 시그널링된 사용 제어 플래그들(예를 들면, loop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flag)이 참일 때에도 필터링 프로세스(예를 들면, ALF)에서 브릭/슬라이스 경계들에 걸친 샘플들의 사용을 디스에이블시키는 것에 제안된다.
a. 대안적으로, 게다가, 시그널링된 loop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flag는 ALF를 제외한 디블로킹 필터 및 SAO의 필터링 프로세스만을 제어할 수 있다.
b. 일 예에서, 다른 샘플에 대한 ALF를 수행하기 위해 대응하는 위치에 있는 재구성된 샘플 대신에 가상 샘플이 사용될 수 있다.
5. 하나의 블록(예를 들면, CTB)이 비디오 유닛의 경계(예컨대, 슬라이스/브릭/타일/360도 비디오 가상 또는 일반 경계들/픽처 경계)에 위치하는 샘플을 포함할 때, 상이한 종류들의 경계들에 대해 ALF와 같은 인루프 필터링을 위한 비디오 유닛 내부 또는 외부의 가상 샘플을 생성하는 방법(예를 들면, 패딩 방법들)은 통합될 수 있다.
a. 대안적으로, 게다가, 가상 경계들의 방법(예를 들면, 양측 패딩 방법)은 인루프 필터링을 위해 경계에 있는 샘플을 처리하기 위해 블록에 적용될 수 있다.
b. 대안적으로, 게다가, 블록이 비디오 유닛의 하단 경계에 위치하는 샘플을 포함할 때 위의 방법들이 적용될 수 있다.
c. 일 예에서, 한 블록의 K 개의 라인을 디코딩할 때, K 개의 라인이 블록의 가상 경계 아래쪽에 있고(예를 들면, 도 17a 및 도 17b의 CTU-B에서의 마지막 K 개의 라인이고) 블록의 하단 경계가 비디오 유닛의 하단 경계인 경우, 가상 샘플들은 이러한 K 개의 라인 외부의 다른 샘플들의 사용을 피하기 위해 ALF 분류/필터링 프로세스에서 생성될 수 있으며, 예를 들면, 양측 패딩 방법이 적용될 수 있다.
i. 대안적으로, ALF가 해당 마지막 K 개의 라인에 대해 디스에이블될 수 있다.
d. 일 예에서, 하나의 블록이 다수의 경계들에 있을 때, ALF 분류에 사용되는 픽셀들/샘플들은 이러한 다수의 경계들 중 어느 것에도 걸쳐 있지 않도록 제한될 수 있다.
i. 일 예에서, 한 샘플에 대해, 그의 특정 이웃 샘플이 (예를 들면, 다수의 경계들 중 어느 것에 걸쳐서도) "이용 불가능한" 경우, 그 샘플에 대해 단독으로 또는 모든 종류의 구배들/방향성이 계산되지 않을 수 있다.
1. 일 예에서, 샘플의 구배들은 0으로서 취급될 수 있다.
2. 일 예에서, 샘플의 구배들은 "이용 불가능한" 것으로 취급될 수 있으며 (예를 들면, ALF 분류 프로세스에서 도출되는 섹션 2.6.1.1의 방정식 (8)에 정의된) 활성도에 가산되지 않을 수 있다.
ii. 일 예에서, ALF 분류 프로세스에서 사용되는 일부 샘플들만이 "이용 가능할"(예를 들면, 이러한 경계들 중 어느 것에도 걸쳐 있지 않을) 때 ALF 분류 프로세스에서 도출되는 활성도/방향성이 어떤 인자에 의해 스케일링될 수 있다.
iii. 일 예에서, 경계 블록에 대해, ALF 분류 프로세스에서 N 개의 샘플에 대해 구배들/방향성이 계산될 필요가 있고, 구배들이 M 개의 샘플에 대해서만 계산될 수 있다고 가정하면(예를 들면, 샘플의 특정 이웃 샘플이 "이용 가능하지" 않은 경우, 그에 대해 구배가 계산될 수 없음), 활성도가 N/M과 곱해질 수 있다.
1. 대안적으로, 활성도가 N/M에 의존하는 인자와 곱해질 수 있다. 예를 들면, 그 숫자는 MN (N은 정수)일 수 있고, 예를 들어, M = 2이다.
e. 일 예에서, MxN(예를 들면, 현재 설계에서 M=N=8, M 개의 열 및 N 개의 행) 창에서의 부분 샘플들의 구배들이 분류를 위해 사용될 수 있다.
i. 예를 들어, 현재 N1*N2(현재 설계에서 N1=N2=4) 블록의 경우, M*N은 N1*N2 블록에 중심이 있다.
ii. 일 예에서, 임의의 경계들에 걸쳐 있는 샘플들에 액세스할 필요가 없는 샘플들의 구배들이 사용될 수 있다.
1. 대안적으로, 게다가, 하나 또는 다수의 경계에 위치하는 샘플의 구배를 계산할 때, 현재 샘플의 일부 이웃 샘플들이 "이용 불가능한" 경우 패딩(예를 들면, 일측 패딩)이 수행될 수 있다.
2. 대안적으로, 게다가, 현재 샘플이 (슬라이스/브릭/타일/360도 비디오 가상 경계들 또는 ALF 가상 경계들과 같은) 비디오 유닛의 상단 경계에 위치하는 경우 위쪽 K(예를 들면, K = 1, 2) 개의 이용 불가능한 라인들이 패딩될 수 있다.
3. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 좌측 경계에 위치하는 경우 좌측 K(예를 들면, K = 1, 2) 개의 이용 불가능한 열들이 패딩될 수 있다.
4. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 우측 경계에 위치하는 경우 우측 K(예를 들면, K = 1, 2) 개의 이용 불가능한 열들이 패딩될 수 있다.
5. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 하단 경계에 위치하는 경우 하단 K(예를 들면, K = 1, 2) 개의 이용 불가능한 라인들이 패딩될 수 있다.
6. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 상단 경계 및 좌측 경계에 위치하는 경우, 위쪽 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 먼저 패딩되어 M*(N + K1) 창을 생성할 수 있고, 이어서 좌측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
a. 대안적으로, 좌측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 먼저 패딩되어 (M+K2)*N 창을 생성할 수 있고, 이어서 위쪽 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
7. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 상단 경계 및 우측 경계에 위치하는 경우, 위쪽 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 먼저 패딩되어 M*(N + K1) 창을 생성할 수 있고, 이어서 우측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
a. 대안적으로, 우측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 먼저 패딩되어 (M+K2)*N 창을 생성할 수 있고, 이어서 위쪽 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
8. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 하단 경계 및 우측 경계에 위치하는 경우, 하단 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 먼저 패딩되어 M*(N + K1) 창을 생성할 수 있고, 이어서 우측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
a. 대안적으로, 우측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 먼저 패딩되어 (M+K2)*N 창을 생성할 수 있고, 이어서 하단 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
9. 대안적으로, 게다가, 현재 샘플이 비디오 유닛의 하단 경계 및 좌측 경계에 위치하는 경우, 하단 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 먼저 패딩되어 M*(N + K1) 창을 생성할 수 있고, 이어서 좌측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
a. 대안적으로, 좌측 K2(예를 들면, K2 = 1, 2) 개의 이용 불가능한 열들이 먼저 패딩되어 (M+K2)*N 창을 생성할 수 있고, 이어서 하단 K1(예를 들면, K1 = 1, 2) 개의 이용 불가능한 라인들이 패딩되어 (M + K2)*(N + K1) 창을 생성할 수 있다.
10. 대안적으로, 게다가, 패딩된 샘플들은 구배들을 계산하는 데 사용될 수 있다.
iii. 일 예에서, (슬라이스/브릭/타일/360도 비디오 가상 경계들 또는 ALF 가상 경계들과 같은) 비디오 유닛의 상단/하단 경계에 있는 블록에 대해, M*(N - C1) 창 내의 샘플들의 구배들이 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단/하단 C1 개의 라인들의 구배들은 분류에 사용되지 않는다.
iv. 일 예에서, 비디오 유닛의 좌측/우측 경계에 있는 블록에 대해, (M - C1)*N 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 좌측/우측 C1 개의 열들의 구배들은 분류에 사용되지 않는다.
v. 일 예에서, 비디오 유닛의 상단 경계 및 하단 경계에 있는 블록에 대해, M*(N - C1 - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단 C1 개의 라인들 및 하단 C2 개의 라인들의 구배들은 분류에 사용되지 않는다.
vi. 일 예에서, 비디오 유닛의 상단 경계 및 좌측 경계에 있는 블록에 대해, (M - C1)*(N - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단 C1 개의 라인들 및 좌측 C2 개의 열들의 구배들은 분류에 사용되지 않는다.
vii. 일 예에서, 비디오 유닛의 상단 경계 및 우측 경계에 있는 블록에 대해, (M - C1)*(N - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단 C1 개의 라인들 및 우측 C2 개의 열들의 구배들은 분류에 사용되지 않는다.
viii. 일 예에서, 비디오 유닛의 하단 경계 및 좌측 경계에 있는 블록에 대해, (M - C1)*(N - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 하단 C1 개의 라인들 및 좌측 C2 개의 열들의 구배들은 분류에 사용되지 않는다.
ix. 일 예에서, 비디오 유닛의 하단 경계 및 우측 경계에 있는 블록에 대해, (M - C1)*(N - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 하단 C1 개의 라인들 및 우측 C2 개의 열들의 구배들은 분류에 사용되지 않는다.
x. 일 예에서, 비디오 유닛의 좌측 경계 및 우측 경계에 있는 블록에 대해, (M - C1 - C2)*N 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 좌측 C1 개의 열들 및 우측 C2 개의 열들의 구배들은 분류에 사용되지 않는다.
xi. 일 예에서, 비디오 유닛의 상단 경계, 하단 경계 및 좌측 경계에 있는 블록에 대해, (M - C3)*(N - C1 - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단 C1 개의 라인들, 및 하단 C2 개의 라인들 및 좌측 C3 개의 열들의 구배들은 분류에 사용되지 않는다.
xii. 일 예에서, 비디오 유닛의 상단 경계, 하단 경계 및 우측 경계에 있는 블록에 대해, (M - C3)*(N - C1 - C2) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 상단 C1 개의 라인들, 및 하단 C2 개의 라인들 및 우측 C3 개의 열들의 구배들은 분류에 사용되지 않는다.
xiii. 일 예에서, 비디오 유닛의 좌측 경계, 우측 경계 및 상단 경계에 있는 블록에 대해, (M - C1 - C2)*(N - C3) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 좌측 C1 개의 열들, 및 우측 C2 개의 열들 및 상단 C3 개의 라인들의 구배들은 분류에 사용되지 않는다.
xiv. 일 예에서, 비디오 유닛의 좌측 경계, 우측 경계 및 하단 경계에 있는 블록에 대해, (M - C1 - C2)*(N - C3) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 좌측 C1 개의 열들, 및 우측 C2 개의 열들 및 하단 C3 개의 라인들의 구배들은 분류에 사용되지 않는다.
xv. 일 예에서, 비디오 유닛의 좌측 경계, 우측 경계, 상단 경계 및 하단 경계에 있는 블록에 대해, (M - C1 - C2)*(N - C3 - C4) 창 내의 샘플들의 구배들은 블록의 분류에 사용될 수 있다.
1. 대안적으로, 게다가, M*N 창의 좌측 C1 개의 열들 및 우측 C2 개의 열들, 상단 C3 개의 라인들 및 하단 C4 개의 라인들의 구배들은 분류에 사용되지 않는다.
xvi. 일 예에서 C1, C2, C3 및 C4는 2와 동일하다.
xvii. 일 예에서, 구배 계산에 필요한 임의의 "이용 불가능한" 이웃 샘플들을 갖지 않는 샘플들의 구배들이 사용될 수 있다.
f. 일 예에서, 하나의 라인이 다수의 경계들에 있는 경우(예를 들면, 라인과 경계 사이의 거리가 임계치보다 작은 경우), 그 라인이 몇 개의 경계들에 속할 수 있는지에 관계없이 패딩 프로세스는 한 번만 수행된다.
i. 대안적으로, 게다가, 몇 개의 이웃 라인들이 패딩되어야 하는지는 모든 경계들에 대한 현재 라인의 위치에 의존할 수 있다.
ii. 예를 들어, 몇 개의 이웃 라인들이 패딩되어야 하는지는, 예컨대, 현재 라인이 2 개의 경계 - 2 개의 경계는 위쪽와 아래쪽에 있음 - 내에 있을 때, 현재 라인과 2 개의 경계 사이의 거리들에 의해 결정될 수 있다.
iii. 예를 들어, 몇 개의 이웃 라인들이 패딩되어야 하는지는, 예컨대, 현재 라인이 2 개의 경계 - 2 개의 경계는 위쪽와 아래쪽에 있음 - 내에 있을 때, 현재 라인과 최근접 경계 사이의 거리에 의해 결정될 수 있다.
iv. 예를 들어, 몇 개의 이웃 라인들이 패딩되어야 하는지는 각각의 경계에 대해 독립적으로 계산될 수 있으며, 최대 1이 최종 패딩된 라인 번호로서 선택된다.
v. 일 예에서, 몇 개의 이웃 라인들이 패딩되어야 하는지는 라인의 각각의 측면(예를 들면, 위쪽 측면 및 아래쪽 측면)에 대해 결정될 수 있다.
vi. 일 예에서, 양측 패딩 방법의 경우, 몇 개의 이웃 라인들이 패딩되어야 하는지는 2 개의 측면에 대해 공동으로 결정될 수 있다.
vii. 대안적으로, 게다가, ALF에 의해 사용되는 양측 패딩 방법이 적용된다.
g. 일 예에서, 하나의 라인이 다수의 경계들에 있고 라인의 각각의 측면(예를 들면, 위쪽 측면 및 아래쪽 측면)에 적어도 하나의 경계가 있을 때, ALF가 그에 대해 디스에이블될 수 있다.
h. 일 예에서, 현재 라인이 필요로 하는 패딩된 라인들의 수가 임계치보다 클 때, ALF가 현재 라인에 대해 디스에이블될 수 있다.
i. 일 예에서, 임의의 측면에 있는 패딩된 라인들의 수가 임계치보다 클 때, ALF가 현재 라인에 대해 디스에이블될 수 있다.
ii. 일 예에서, 양쪽 측면들에 있는 패딩된 라인들의 총수가 임계치보다 클 때, ALF가 현재 라인에 대해 디스에이블될 수 있다.
i. 대안적으로, 게다가, 블록이 비디오 유닛의 하단 경계에 위치하는 샘플을 포함하고 ALF와 같은 인루프 필터링이 블록에 대해 인에이블될 때 위의 방법들이 적용될 수 있다.
j. 대안적으로, 게다가, 위의 방법들이 특정 조건들 하에서, 예컨대, 블록이 비디오 유닛의 하단 경계에 위치하는 샘플을 포함하고 경계들에 걸쳐 있는 필터링이 허용되지 않을 때(예를 들면, pps_loop_filter_across_virtual_boundaries_disabled_flag/loop_filter_across_slices_enabled_flag/loop_filter_across_slices_enabled_flag가 참일 때), 적용될 수 있다.
k. 제안된 방법은 또한 수직 경계들에 위치하는 샘플들/블록들에 적용 가능하다.
6. 샘플이 하나의 블록의 적어도 2 개의 경계를 가질 때(예를 들면, 현재 라인 위쪽에 있는 적어도 하나의 경계는 ALF 가상 경계이고, 아래쪽에 다른 경계가 있을 때), 몇 개의 라인들이 패딩되어야 하는지가 순전히 현재 라인과 ALF 가상 경계 사이의 거리에 의해서만 결정되지는 않는다. 그 대신에, 이는 현재 라인과 2 개의 경계 사이의 거리들에 의해 결정된다.
a. 일 예에서, 측면별 패딩에 대한 라인들의 수는 (M - min(D0, D1))로 설정된다.
b. 일 예에서, 측면별 패딩에 대한 라인들의 수는 (M - max(D0, D1))로 설정된다.
c. 위의 예에서, D0, D1은 현재 라인과 위쪽/아래쪽 경계들 사이의 거리를 나타낸다.
d. 위의 예에서, M은 ALF 가상 경계가 하나의 CTU의 하단으로부터 오는 라인들의 수를 나타낸다.
7. ALF 분류 및/또는 ALF 선형 또는 비선형 필터링 프로세스에서 샘플들을 선택하는 적어도 두 가지 방식이 정의될 수 있으며, 그 중 하나는 임의의 인루프 필터링 방법이 적용되기 전에 샘플들을 선택하고; 다른 하나는 하나 또는 다수의 인루프 필터링 방법이 적용된 후에 그러나 ALF가 적용되기 전에 샘플들을 선택한다.
a. 일 예에서, 상이한 방식들의 선택은 필터링될 샘플들의 위치에 의존할 수 있다.
b. 일 예에서, (CTB와 같은) 비디오 유닛의 하단 경계에 있는 샘플은 그것이 다른 샘플에 대한 ALF에서 사용될 때 첫 번째 방법으로 선택될 수 있다. 그렇지 않은 경우(그것이 경계에 있지 않은 경우), 두 번째 방법이 선택된다.
8. 필터링 프로세스에서 VPDU 경계(예를 들면, 64x64 영역)에 걸쳐 있는 샘플들의 사용을 디스에이블하는 것이 제안된다.
a. 일 예에서, ALF 분류 프로세스에 의해 요구되는 샘플이 VPDU 경계 외부에 또는 가상 경계 아래쪽에 있을 때, 이는 가상 샘플로 대체될 수 있거나 또는 샘플에 대한 분류 결과들이 다른 샘플들과 연관된 것들로부터 복사될 수 있으며, 예컨대, 이용 가능한 것들로부터 패딩될 수 있다.
b. 일 예에서, 필터링 프로세스에 의해 요구되는 샘플이 VPDU 경계 외부에 있거나 가상 경계 아래쪽에 있을 때, 그것이 가상 샘플로 대체될 수 있으며, 예컨대, 이용 가능한 것들로부터 패딩될 수 있다.
c. 일 예에서, ALF 가상 경계 처리 방법은 블록이 VPDU의 경계에 위치하는 샘플들을 포함하는 경우 블록에 대해 인에이블될 수 있다(예를 들면, applyVirtualBoundary가 참으로 설정됨).
d. 대안적으로, 수평 VPDU 경계에 걸쳐 있는 샘플들의 사용은 필터링 프로세스에서 디스에이블될 수 있다.
i. 일 예에서, 필터링 프로세스에 의해 요구되는 샘플이 수평 VPDU 경계 아래쪽에 있거나 가상 경계 아래쪽에 있을 때, 그것이 가상 샘플로 대체될 수 있으며, 예컨대, 이용 가능한 것들로부터 패딩될 수 있다.
e. 대안적으로, 수직 VPDU 경계에 걸쳐 있는 샘플들의 사용은 필터링 프로세스에서 디스에이블될 수 있다.
i. 일 예에서, 필터링 프로세스에 의해 요구되는 샘플이 수직 VPDU 경계 외부에 있거나 가상 경계 아래쪽에 있을 때, 그것이 가상 샘플로 대체될 수 있으며, 예컨대, 이용 가능한 것들로부터 패딩될 수 있다.
9. ALF 분류/필터링 프로세스에서 (예를 들면, 이용 불가능하지 않은, 가상 경계들 위쪽/아래쪽에 있는, 비디오 유닛의 경계들 위쪽/아래쪽에 있는) 패딩된 샘플들을 사용하지 않고, 모든 인루프 필터들 이전의 재구성된 샘플들을 사용하는 것이 제안된다.
a. 대안적으로, 게다가, 양측 패딩의 개념은 모든 인루프 필터들 이전의 재구성된 샘플들로부터의 패딩 샘플들을 통해 적용된다.
i. 일 예에서, 필터 서포트에서의 샘플이 모든 인루프 필터들 이전의 재구성된 샘플들로부터 온 것인 경우, 필터 서포트에서의 대칭적인(예를 들면, 원점, 예를 들면, 현재 샘플에 대해 대칭적인) 샘플은 또한 모든 인루프 필터들 이전의 재구성된 샘플을 사용해야 한다.
1. 필터링될 현재 샘플의 좌표가 (0, 0)이고 (i, j)에 위치하는 샘플이 모든 인루프 필터들 이전의 재구성된 샘플이라고 가정하면, (-i, -j)에 위치하는 샘플은 모든 인루프 필터들 이전의 재구성된 샘플이다.
2. 필터링될 현재 샘플의 좌표가 (x, y)이고 (x + i, y + j)에 위치하는 샘플이 모든 인루프 필터들 이전의 재구성된 샘플이라고 가정하면, (x - i, y - j)에 위치하는 샘플은 모든 인루프 필터들 이전의 재구성된 샘플이다.
b. 대안적으로, 게다가, 인루프 리셰이핑(LMCS라고도 함)이 인에이블될 때, 모든 인루프 필터들 이전의 재구성된 샘플들은 리셰이핑된 도메인으로부터 변환되는 원래 도메인에서의 샘플들이다.
10. ALF 필터링 프로세스에서 (예를 들면, 이용 불가능하지 않은, 가상 경계들 위쪽/아래쪽에 있는, 비디오 유닛의 경계들 위쪽/아래쪽에 있는) 패딩된 샘플들을 사용하지 않고, 상이한 ALF 필터 서포트들을 이용하는 것이 제안된다.
a. 일 예에서, 위의 방법에서 샘플이 패딩될 필요가 있다고 가정하면, 패딩을 수행하는 대신에, 샘플과 연관된 필터 계수가 0으로 설정된다.
i. 이 경우에, 패딩될 필요가 있는 샘플들을 제외하는 것에 의해 필터 서포트가 수정된다.
ii. 대안적으로, 게다가, 현재 샘플을 제외한 다른 샘플들에 적용되는 필터 계수들은 변경되지 않은 채로 유지되지만, 현재 샘플에 적용되는 필터 계수는, ((1<< C_BD) - 패딩될 필요가 없는 샘플들에 적용되는 모든 필터 계수들의 합)과 같이,수정될 수 있으며 여기서 C_BD는 필터 계수의 비트 깊이를 나타낸다.
1. 도 18a 및 도 18b를 예로 들면, 라인들 L 및 I를 필터링할 때, 현재 샘플에 적용되는 필터 계수 c12는 ((1<< C_BD) - 2*(c4+c5+c6+c7+c8+c9+c10+c11))로 수정된다.
b. 일 예에서, 위의 방법에서 샘플 (x1, y1)이 (x2, y2)로부터 패딩된다고 가정하면, 패딩을 수행하는 대신에, 비선형 필터가 인에이블되는지 디스에이블되는지에 관계없이 (x1, y1)과 연관된 필터 계수가 위치 (x2, y2)의 필터 계수에 가산된다.
i. 대안적으로, 게다가, (x2, y2)에 대한 클리핑 파라미터는 즉시 도출될 수 있다.
1. 일 예에서, 이는 (x2, y2)에 대한 디코딩된 클리핑 파라미터와 동일하게 설정될 수 있다.
2. 대안적으로, 이는 (x1, y1) 및 (x2, y2)에 대한 디코딩된 클리핑 파라미터들을 입력들로 갖는 함수의 반환된 값, 예컨대, 보다 큰 값 또는 보다 작은 값으로 설정될 수 있다.
11. 클리핑 파라미터들/필터 계수들/필터 서포트들의 선택은 샘플을 필터링하는 것이 (예를 들면, 이용 불가능하지 않은, 가상 경계들 위쪽/아래쪽에 있는, 비디오 유닛의 경계들 위쪽/아래쪽에 있는) 패딩된 샘플들에 액세스할 필요가 있는지 여부에 의존할 수 있다.
a. 일 예에서, 상이한 클리핑 파라미터들/필터 계수들/필터 서포트들은 동일한 클래스 인덱스를 가진 샘플들에 대해 활용될 수 있지만, 그 중 일부에 대해서는 패딩된 샘플들에 액세스하는 것을 필요로 하고 다른 것들은 그렇지 않다.
b. 일 예에서, 패딩된 샘플들에 액세스하는 것을 필요로 하는 샘플들의 필터링을 위한 클리핑 파라미터들/필터 계수들/필터 서포트들은 CTU/영역/슬라이스/타일 레벨에서 시그널링될 수 있다.
c. 일 예에서, 패딩된 샘플들에 액세스하는 것을 필요로 하는 샘플들의 필터링을 위한 클리핑 파라미터들/필터 계수들/필터 서포트들은 패딩된 샘플들에 액세스하는 것을 필요로 하지 않는 샘플들의 필터링에 사용되는 것으로부터 도출될 수 있다.
i. 일 예에서, 글머리 기호 9a 또는 글머리 기호 9b가 적용될 수 있다.
12. 인루프 필터링(예컨대, ALF)을 위해 경계에 있는 샘플을 어떻게 처리할지는 색상 성분 및/또는 색상 포맷에 의존할 수 있다.
a. 예를 들어, "경계에 있는"에 대한 정의는 상이한 색상 성분들에 대해 상이할 수 있다. 일 예에서, 루마 샘플과 하단 경계 사이의 거리가 T1보다 작은 경우 루마 샘플은 하단 경계에 있고; 크로마 샘플과 하단 경계 사이의 거리가 T2보다 작은 경우 크로마 샘플은 하단 경계에 있다. T1과 T2는 상이할 수 있다.
i. 일 예에서, 색상 포맷이 4:4:4가 아닌 경우 T1과 T2는 상이할 수 있다.
13. 하나의 CTU/VPDU의 하단/상단/좌측/우측 경계가 또한 독립적인 코딩을 갖는 슬라이스/타일/브릭/서브영역의 경계일 때, 고정된 순서의 다수의 패딩 프로세스들이 적용된다.
a. 일 예에서, 제1 단계에서, 슬라이스/타일/브릭의 패딩 방법(예를 들면, 일측 패딩)이 먼저 적용된다. 그 후에, 제2 단계 동안 ALF 가상 경계들을 처리하기 위한 패딩 방법(예를 들면, 양측 패딩 방법)이 더 적용된다. 이 경우에, 제1 단계 이후의 패딩된 샘플들은 이용 가능한 것으로 마킹되며, ALF 가상 경계 프로세스에서 몇 개의 라인들이 패딩되어야 하는지를 결정하는 데 사용될 수 있다. 해당 경계들에 위치하지 않는 CTU들을 처리하기 위한 동일한 규칙(예를 들면, 도 16a 내지 도 16c)이 활용된다.
14. 제안된 방법들은 2 개의 서브픽처 사이의 하나 또는 다수의 경계에 적용될 수 있다.
a. 제안된 방법들을 적용하는 경계는 수평 경계일 수 있다.
b. 제안된 방법들을 적용하는 경계는 수직 경계일 수 있다.
15. 위에서 제안된 방법들은 수직 경계들에 있는 샘플들/블록들에 적용될 수 있다.
16. 제안된 방법이 "360 가상 경계"에서 적용되는지 여부 및/또는 어떻게 적용되는지는 "360 가상 경계"의 위치에 의존할 수 있다.
a. 일 예에서, "360 가상 경계"가 CTU 경계와 일치할 때, 제안된 방법이 적용될 수 있다. 예를 들면, "360 가상 경계"에 있는 샘플들에 대해 ALF에서 양측 패딩만이 적용될 수 있다.
b. 일 예에서, "360 가상 경계"가 CTU 경계와 일치하지 않을 때, 제안된 방법이 적용되지 않을 수 있다. 예를 들면, "360 가상 경계"에 있는 샘플들에 대해 ALF에서 일측 패딩만이 적용될 수 있다.
c. 일 예에서, "360 가상 경계"의 위치에 관계없이 "360 가상 경계"에 있는 샘플들에 대해 ALF에서 동일한 패딩 방법이 적용될 수 있다.
i. 예를 들어, "360 가상 경계"에 있는 샘플들에 대해 ALF에서 일측 패딩이 적용될 수 있다.
ii. 예를 들어, "360 가상 경계"에 있는 샘플들에 대해 ALF에서 양측 패딩이 적용될 수 있다.
d. 일 예에서, 적어도 하나의 경계가 "360 가상 경계"이고 "360 가상 경계" 중 적어도 하나가 CTU 경계와 일치하지 않는 다수의 경계들에 있는 샘플들에 대해, 제안된 방법이 적용되지 않을 수 있다.
i. 예를 들어, 이러한 다수의 경계들 중 임의의 것에 걸쳐 있는 샘플들은 일측 패딩에 의해 패딩될 수 있다.
1. 대안적으로, 게다가, "가상 경계"가 있는 경우, 일측 패딩 이후에 ALF에서 양측 패딩이 적용될 수 있다.
e. 일 예에서, 두 가지 종류의 경계들 사이에 위치하는 샘플들에 대해, 그 중 하나가 "360 가상 경계"이고 다른 하나가 그렇지 않은 경우, ALF 프로세스에서 패딩이 한 번만 호출된다.
i. 일 예에서, ALF 가상 경계들을 처리하기 위한 패딩 방법(예를 들면, 양측 패딩 패딩 방법)이 호출될 수 있다.
1. 대안적으로, 픽처(또는 슬라이스/타일/브릭/서브픽처) 경계들을 처리하기 위한 패딩 방법(예를 들면, 일측 패딩)이 호출될 수 있다.
ii. 대안적으로, 2 개 또는 다수의 패딩 프로세스가 순서대로 적용될 수 있다.
1. 일 예에서, 픽처(또는 슬라이스/타일/브릭/서브픽처) 경계들을 처리하기 위한 패딩 방법(예를 들면, 일측 패딩)이 먼저 적용되고, 그 후에, ALF 가상 경계들을 처리하기 위한 패딩 방법(예를 들면, 양측 패딩 방법)이 더 호출될 수 있다.
a. 대안적으로, 게다가, 제1 패딩 이후의 패딩된 샘플들은 제2 패딩 프로세스에서 이용가능한 것으로 취급된다.
iii. 일 예에서, 둘 이상의 종류의 경계들(예를 들어, 슬라이스 경계/타일 경계/브릭 경계/"360 가상 경계"/”ALF 가상 경계”/서브픽처 경계) 사이에 위치하는 샘플들에 대해, 경계들 중 하나만이 "360 가상 경계"인 경우(예를 들면, 도 24에 도시된 바와 같이, 제1 경계는 "360 가상 경계"이고, 제2 경계는 "ALF 가상 경계" 또는 슬라이스/브릭/타일 경계/서브픽처 경계이거나; 또는 그 반대인 경우), 제안된 방법이 적용될 수 있다. 예를 들면, 이러한 샘플들에 대해 ALF에서 양측 패딩만이 적용될 수 있다.
1. 대안적으로, 이러한 다수의 종류의 경계들이 "360 가상 경계" 또는 픽처 경계인 경우, 제안된 방법이 적용되지 않을 수 있다. 예를 들면, 이러한 샘플들에 대해 ALF에서 일측 패딩만이 적용될 수 있다.
f. 일 예에서, 둘 이상의 종류의 경계들 사이에 위치하는 샘플들에 대해, 경계들 중 적어도 하나가 "360 가상 경계"이고 그것이 CTU 경계와 일치하지 않는 경우, 제안된 방법이 적용되지 않을 수 있다.
i. 이 경우에, "360 가상 경계"에서만 샘플들을 처리하고 다른 종류의 경계들에서는 그렇지 않은 것은 선행 기술로서 취급될 수 있다.
ii. 일 예에서, 이러한 샘플들에 대해 ALF에서 일측 패딩만이 적용될 수 있다.
g. 일 예에서, 둘 이상의 종류의 경계들 사이에 위치하는 샘플들에 대해, 경계들 중 적어도 하나가 "360 가상 경계"인 경우, 제안된 방법이 적용되지 않을 수 있다.
i. 이 경우에, "360 가상 경계"에서만 샘플들을 처리하고 다른 종류의 경계들에서는 그렇지 않은 것은 선행 기술로서 취급될 수 있다.
ii. 일 예에서, 이러한 샘플들에 대해 ALF에서 일측 패딩만이 적용될 수 있다.
17. 예를 들면, 샘플이 현재 샘플과 상이한 비디오 유닛(예를 들면, 슬라이스/브릭/타일/서브픽처)에 위치하고 비디오 유닛(예를 들면, 슬라이스/브릭/타일/서브픽처 경계들)에 걸쳐 있는 샘플들을 사용하여 필터링하는 것이 허용되지 않는 것으로 인해, ALF 필터링 프로세스에서 필요한 참조 샘플(예를 들면, 현재 샘플 P0을 필터링할 때 도 16c에서 i가 A/B/C/D인 P0i) 및/또는 ALF 분류 프로세스에서 필요한 참조 샘플이 "이용 불가능할" 때, "이용 불가능한" 샘플은 "이용 가능한" 샘플들(예를 들면, 현재 샘플과 동일한 슬라이스/브릭/타일/서브픽처 내의 샘플들)로 패딩될 수 있다.
a. 일 예에서, "이용 불가능한" 참조 샘플은 그의 가장 가까운 "이용 가능한" 수평 위치로 먼저 클리핑될 수 있으며, 이어서 "이용 불가능한" 참조 샘플은 필요한 경우 그의 가장 가까운 "이용 가능한" 수직 위치로 클리핑된다.
b. 일 예에서, "이용 불가능한" 참조 샘플은 그의 가장 가까운 "이용 가능한" 수직 위치로 먼저 클리핑될 수 있으며, 이어서 "이용 불가능한" 샘플은 필요한 경우 그의 가장 가까운 "이용 가능한" 수평 위치로 클리핑된다.
c. 일 예에서, "이용 불가능한" 참조 샘플의 좌표는 수평 방향에서 그의 가장 가까운 "이용 가능한" 샘플의 좌표(예를 들면, 가장 작은 거리)로 클리핑된다.
i. 일 예에서, 좌표들 (x1, y1) 및 (x2, y2)를 갖는 2 개의 샘플의 경우, 이들 사이의 수평 거리는 Abs(x1 - x2)로서 계산될 수 있다.
d. 일 예에서, "이용 불가능한" 참조 샘플의 좌표는 수직 방향에서 그의 가장 가까운 "이용 가능한" 샘플의 좌표(예를 들면, 가장 작은 거리)로 클리핑된다.
i. 일 예에서, 좌표들 (x1, y1) 및 (x2, y2)를 갖는 2 개의 샘플의 경우, 이들 사이의 수직 거리는 Abs(y1 - y2)로서 계산될 수 있다.
e. 일 예에서, "이용 불가능한" 샘플은 그의 가장 가까운 "이용 가능한" 샘플(예를 들면, 가장 작은 거리)로 클리핑된다.
i. 일 예에서, 좌표들 (x1, y1) 및 (x2, y2)를 갖는 2 개의 샘플의 경우, 이들 사이의 거리는 (x1 - x2)* (x1 - x2) + (y1 - y2)*(y1 - y2)로서 계산될 수 있다.
ii. 대안적으로, 2 개의 픽셀 사이의 거리는 Abs(x1 - x2) + Abs(y1 - y2)로서 계산될 수 있다.
f. 일 예에서, "이용 가능한" 샘플이 발견될 때까지 "이용 불가능한" 샘플은 미리 정의된 순서로 패딩될 수 있다. 예가 도 31에 도시되어 있으며, 여기서 Cur은 현재 블록/CU/PU/CTU이다.
i. 예를 들어, 수직 "이용 가능" 샘플이 먼저 검사될 수 있고, 이어서 수평 "이용 가능" 샘플이 검사될 수 있다.
ii. 예를 들어, 수평 "이용 가능" 샘플이 먼저 검사될 수 있고, 이어서 수직 "이용 가능" 샘플이 검사될 수 있다.
iii. 예를 들어, (예를 들면, 영역 "1"에 있는) "이용 불가능한" 좌측 위쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 (예를 들면, 영역 "4"에 있는) 좌측 이웃 샘플들이 검사되고, "이용 가능한" 샘플들이 없는 경우, (예를 들면, 영역 "2"에 있는) 위쪽 이웃 샘플들이 이어서 검사된다. 좌측 이웃 샘플들에도 위쪽 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 좌측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
1. 대안적으로, "이용 불가능한" 좌측 위쪽 이웃 샘플들에 대해, 현재 블록/CU/PU/CTU의 위쪽 이웃 샘플들이 검사되고, "이용 가능한" 샘플들이 없는 경우, 좌측 이웃 샘플들이 이어서 검사된다. 위쪽 이웃 샘플들에도 좌측 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 좌측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
iv. 예를 들어, (예를 들면, 영역 "3"에 있는) "이용 불가능한" 우측 위쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 (예를 들면, 영역 "5"에 있는) 우측 이웃 샘플들이 검사되고, "이용 가능한" 샘플들이 없는 경우, (예를 들면, 영역 "2"에 있는) 위쪽 이웃 샘플들이 이어서 검사된다. 우측 이웃 샘플들에도 위쪽 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 우측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
1. 대안적으로, "이용 불가능한" 우측 위쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 위쪽 이웃 샘플들이 검사되고, "이용 가능한" 샘플이 없는 경우, 우측 이웃 샘플들이 이어서 검사된다. 위쪽 이웃 샘플들에도 우측 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 우측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
v. 예를 들어, (예를 들면, 영역 "6"에 있는) "이용 불가능한" 좌측 아래쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 (예를 들면, 영역 "4"에 있는) 좌측 이웃 샘플들이 검사되고, "이용 가능한" 샘플이 없는 경우, (예를 들면, 영역 "7"에 있는) 아래쪽 이웃 샘플들이 이어서 검사된다. 좌측 이웃 샘플들에도 아래쪽 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 좌측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
1. 대안적으로, "이용 불가능한" 좌측 아래쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 아래쪽 이웃 샘플들이 검사되고, "이용 가능한" 샘플이 없는 경우, 좌측 이웃 샘플들이 이어서 검사된다. 아래쪽 이웃 샘플들에도 좌측 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 좌측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
vi. 예를 들어, "이용 불가능한" 우측 아래쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 (예를 들면, 영역 "5"에 있는) 우측 이웃 샘플들이 검사되고, "이용 가능한" 샘플이 없는 경우, (예를 들면, 영역 "7"에 있는) 아래쪽 이웃 샘플들이 이어서 검사된다. 우측 이웃 샘플들에도 아래쪽 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 우측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
1. 예를 들어, "이용 불가능한" 우측 아래쪽 이웃 샘플들에 대해, 먼저, 현재 블록/CU/PU/CTU의 아래쪽 이웃 샘플들이 검사되고, "이용 가능한" 샘플이 없는 경우, 우측 이웃 샘플들이 이어서 검사된다. 아래쪽 이웃 샘플들에도 우측 이웃 샘플들에도 "이용 가능한" 샘플들이 없는 경우, 현재 블록/CU/PU/CTU의 우측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
vii. 일 예에서, 각각의 이웃 영역에 대해, 하나 또는 다수의 샘플이 순서대로 검사될 수 있다. 대안적으로, 하나만이 검사될 수 있다.
ⅷ. 대안적으로, 게다가, 검사 중 어느 것도 이용 가능한 샘플을 발견할 수 없는 경우, 필터링될 현재 샘플의 값이 그 대신에 사용될 수 있다.
ix. 일 예에서, "이용 불가능한" 좌측 위쪽/우측 위쪽/좌측 아래쪽/우측 아래쪽 이웃 샘플들에 대해, 이들은 현재 블록/CU/PU/CTU 내의 샘플들에 의해 항상 패딩될 수 있다.
1. 일 예에서, (예를 들면, 도 31에서 영역 "1"에 있는) "이용 불가능한" 좌측 위쪽 이웃 샘플들에 대해, 현재 블록/CU/PU/CTU의 좌측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
2. 일 예에서, (예를 들면, 도 31에서 영역 "3"에 있는) "이용 불가능한" 우측 위쪽 이웃 샘플들에 대해, 현재 블록/CU/PU/CTU의 우측 상단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
3. 일 예에서, (예를 들면, 도 31에서 영역 "6"에 있는) "이용 불가능한" 좌측 아래쪽 이웃 샘플들에 대해, 현재 블록/CU/PU/CTU의 좌측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
4. 일 예에서, (예를 들면, 도 31에서 영역 "8"에 있는) "이용 불가능한" 우측 아래쪽 이웃 샘플들에 대해, 현재 블록/CU/PU/CTU의 우측 하단 샘플이 "이용 불가능한" 샘플을 패딩하는 데 사용된다.
g. 대안적으로, 현재 샘플에 대해 필터링 프로세스가 디스에이블된다.
h. 대안적으로, ALF에서의 분류 프로세스(예를 들면, 현재 샘플에 대한 구배 계산)는 이용 불가능한 참조 샘플들을 사용하도록 허용되지 않을 수 있다.
18. 이용 불가능한 참조 샘플들의 패딩된 샘플을 어떻게 도출할지는 CTU가 임의의 경계들과 일치하는지 여부에 의존할 수 있다.
a. 일 예에서, 현재 CTU가 어떤 종류의 경계들과도 일치하지 않지만 현재 샘플에 대한 필터링 프로세스(예를 들면, ALF 분류/ALF 필터링 프로세스)가 상이한 비디오 유닛(예를 들면, 슬라이스)에서의 참조 샘플에 액세스할 필요가 있을 때, 글머리 기호 16에 기술된 방법들이 적용될 수 있다.
i. 대안적으로, 게다가, 현재 CTU가 어떤 종류의 경계들과도 일치하지 않지만, 현재 샘플에 대한 필터링 프로세스(예를 들면, ALF 분류/ALF 필터링 프로세스)가 상이한 비디오 유닛(예를 들면, 슬라이스)에서의 참조 샘플에 액세스할 필요가 있고 슬라이스 경계에 걸친 필터링이 허용되지 않을 때, 글머리 기호 16에 기술된 방법들이 적용될 수 있다.
ii. 대안적으로, 게다가, 현재 CTU가 어떤 종류의 경계들과도 일치하지 않지만, 현재 샘플에 대한 필터링 프로세스(예를 들면, ALF 분류/ALF 필터링 프로세스)가 상이한 비디오 유닛(예를 들면, 슬라이스)에서의 참조 샘플 및 동일한 비디오 유닛에서의 참조 샘플에 액세스할 필요가 있고 슬라이스 경계에 걸친 필터링이 허용되지 않을 때, 글머리 기호 16에 기술된 방법들이 적용될 수 있다.
b. 일 예에서, 현재 CTU가 적어도 하나의 종류의 경계와 일치할 때, 통일된 패딩 방법들(예를 들면, 양측 패딩 또는 일측 패딩)이 적용될 수 있다.
i. 대안적으로, 현재 CTU가 다수의 종류의 경계들과 일치하고 해당 경계들에 걸친 필터링이 허용되지 않을 때, 통일된 패딩 방법들(예를 들면, 양측 또는 일측 패딩)이 적용될 수 있다.
c. 일 예에서, 양측 패딩 및/또는 일측 패딩에 의해 패딩될 수 없는 "이용 불가능한" 샘플들만이 글머리 기호 16에 설명된 방법들을 사용하여 패딩될 수 있다.
19. 필터링 프로세스(예를 들면, 디블로킹, SAO, ALF, 양방향 필터링, 하다마드(Hadamard) 변환 필터링 등)가 비디오 유닛의 경계들(예를 들면, 슬라이스/브릭/타일/서브픽처 경계)에 걸쳐 있는 샘플들에 액세스할 수 있는지 여부가, 시퀀스/픽처 내의 모든 비디오 유닛들에 대해 제어되지 않고, 그 자체에 의해 제어되는 것과 같이, 상이한 레벨들에서 제어될 수 있다.
a. 대안적으로, 슬라이스에 대한 슬라이스 경계에 걸쳐 필터링 프로세스가 수행될 수 있는지 여부를 나타내기 위해 PPS/슬라이스 헤더에서 슬라이스에 대한 하나의 신택스 요소가 시그널링될 수 있다.
b. 대안적으로, 브릭/타일에 대한 브릭/타일 경계에 걸쳐 필터링 프로세스가 수행될 수 있는지 여부를 나타내기 위해 PPS에서 브릭/타일에 대한 하나의 신택스 요소가 시그널링될 수 있다.
c. 일 예에서, 비디오/픽처에 대한 브릭 경계 및/또는 타일 경계 및/또는 슬라이스 경계 및/또는 "360도 가상 경계"에 걸쳐 필터링 프로세스가 수행될 수 있는지 여부를 나타내기 위해 SPS/PPS에서 신택스 요소들이 시그널링될 수 있다.
i. 일 예에서, 상이한 종류들의 경계들에 대해 별개의 신택스 요소들이 시그널링될 수 있다.
ii. 일 예에서, 모든 종류들의 경계들에 대해 하나의 신택스 요소가 시그널링될 수 있다.
iii. 일 예에서, 여러 종류들의 경계들에 대해 하나의 신택스 요소가 시그널링될 수 있다.
1. 예를 들어, 브릭 경계와 타일 경계 둘 모두에 대해 하나의 신택스 요소가 시그널링될 수 있다.
d. 일 예에서, 필터링 프로세스에 대한 PPS/슬라이스 레벨 표시들이 있는지 여부를 나타내기 위해 SPS에서 신택스 요소가 시그널링될 수 있다.
i. 일 예에서, 상이한 종류들의 경계들에 대해 별개의 신택스 요소들이 시그널링될 수 있다.
ii. 일 예에서, 모든 종류들의 경계들에 대해 하나의 신택스 요소가 시그널링될 수 있다.
iii. 일 예에서, 여러 종류들의 경계들에 대해 하나의 신택스 요소가 시그널링될 수 있다.
1. 예를 들어, 브릭 경계와 타일 경계 둘 모두에 대해 하나의 신택스 요소가 시그널링될 수 있다.
iv. 슬라이스/브릭/타일/서브픽처 경계에 걸쳐 필터링 프로세스가 수행될 수 있는지 여부에 대한 표시들은 SPS에서의 대응하는 신택스 요소가 특정 값과 동일할 때에만 PPS/슬라이스 헤더에서 시그널링될 수 있다.
1. 대안적으로, 슬라이스/브릭/타일/서브픽처 경계에 걸쳐 필터링 프로세스가 수행될 수 있는지 여부에 대한 표시들은 SPS에서의 대응하는 신택스 요소가 특정 값들과 동일할 때 PPS/슬라이스 헤더에서 시그널링되지 않을 수 있다.
a. 이 경우에, SPS에서의 표시가 특정 값과 동일한 경우 필터링 프로세스가 슬라이스/브릭/타일/서브픽처 경계에 걸쳐 수행되도록 허용되지 않을 수 있다.
b. 이 경우에, SPS에서의 표시가 특정 값과 동일한 경우 필터링 프로세스가 슬라이스/브릭/타일/서브픽처 경계에 걸쳐 수행될 수 있다.
20. ALF 프로세스들(예를 들면, 분류 및/또는 필터링 프로세스들)에서 현재 블록의 좌측 위쪽/우측 위쪽/좌측 아래쪽/우측 아래쪽 이웃 영역들에 위치하는 샘플들이 현재 블록과 동일한 비디오 유닛(예를 들면, 슬라이스/브릭/타일/서브픽처/360 가상 경계들)에 있는지 여부를 검사하는 것이 제안된다. 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 (x0, y0)으로 표기하고, ctbXSize 및 ctbYSize를, 제각기, CTU 폭 및 높이로서 표기한다.
a. 일 예에서, (x0 - offsetX0, y0 - offsetY0)과 같은 좌측 위쪽 영역에 위치하는 대표 샘플이 검사될 수 있다.
i. 일 예에서, (offsetX0, offsetY0)은 (1, 1), (2, 1) 또는 (1, 2)와 동일할 수 있다.
b. 일 예에서, (x0 + offsetX1, y0 - offsetY1)과 같은 우측 위쪽 영역에 위치하는 대표 샘플이 검사될 수 있다.
i. 일 예에서, (offsetX1, offsetY1)은 (ctbXSize, 1), (ctbXSize + 1, 1) 또는 (ctbXSize, 2)와 동일할 수 있다.
c. 일 예에서, (x0 - offsetX2, y0 + offsetY2)와 같은 좌측 아래쪽 영역에 위치하는 대표 샘플이 검사될 수 있다.
i. 일 예에서, (offsetX2, offsetY2)는 (1, ctbYSize), (2, ctbYSize) 또는 (1, ctbYSize+1)과 동일할 수 있다.
d. 일 예에서, (x0 + offsetX3, y0 + offsetY3)과 같은 우측 아래쪽 영역에 위치하는 대표 샘플이 검사될 수 있다.
i. 일 예에서, (offsetX2, offsetY2)는 (ctbXSize, ctbYSize), (ctbXSize+1, ctbYSize) 또는 (ctbXSize, ctbYSize+1)과 동일할 수 있다.
e. 일 예에서, 한 영역 내의 대표 샘플이 상이한 비디오 유닛에 있고, 상이한 비디오 유닛에 걸친 필터링이 허용되지 않는 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다.
i. 일 예에서, 한 영역 내의 대표 샘플이 상이한 슬라이스에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다.
ii. 일 예에서, 한 영역 내의 대표 샘플이 상이한 브릭에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다.
iii. 일 예에서, 한 영역 내의 대표 샘플이 상이한 서브픽처에 있고, loop_filter_across_subpic_enabled_flag[SubPicIdx]가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다. 일 예에서, SubPicIdx는 현재 블록을 포함하는 현재 서브픽처의 인덱스이다.
f. 일 예에서, K 개의 영역 내의 K 개의 대표 샘플 중 M 개가 현재 CTU와 상이한 비디오 유닛들에 있고, 상이한 비디오 유닛에 걸친 필터링이 허용되지 않는 경우, K 개의 영역 내의 액세스될 샘플은 모두 이용 불가능한 것으로 표시된다.
i. 일 예에서, M은 1과 동일하고 K는 2와 동일하다.
1. 예를 들어, K 개의 영역은 좌측 위쪽 이웃 영역 및 우측 위쪽 이웃 영역을 포함할 수 있다.
2. 예를 들어, K 개의 영역은 좌측 위쪽 이웃 영역 및 좌측 아래쪽 이웃 영역을 포함할 수 있다.
3. 예를 들어, K 개의 영역은 우측 위쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함할 수 있다.
4. 예를 들어, K 개의 영역은 좌측 아래쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함할 수 있다.
5. 대안적으로, M은 2와 동일할 수 있다.
ii. 일 예에서, M은 1과 동일하고 K는 3과 동일하다.
1. 예를 들어, K 개의 영역은 좌측 위쪽, 우측 위쪽 및 좌측 아래쪽 이웃 영역들을 포함할 수 있다.
2. 예를 들어, K 개의 영역은 좌측 위쪽, 우측 위쪽 및 우측 아래쪽 이웃 영역들을 포함할 수 있다.
3. 예를 들어, K 개의 영역은 우측 위쪽, 좌측 아래쪽 및 우측 아래쪽 이웃 영역들을 포함할 수 있다.
4. 예를 들어, K 개의 영역은 좌측 위쪽, 좌측 아래쪽 및 우측 아래쪽 이웃 영역들을 포함할 수 있다.
5. 대안적으로, M은 2 또는 3과 동일할 수 있다.
iii. 일 예에서, M은 1과 동일하고 K는 4와 동일하다. 예를 들면, K 개의 영역은 좌측 위쪽, 우측 위쪽, 좌측 아래쪽 및 우측 아래쪽 이웃 영역들을 포함할 수 있다.
1. 대안적으로, M은 1 또는 2 또는 3과 동일할 수 있다.
iv. 일 예에서, 현재 CTU와 상이한 비디오 유닛들에 N 개의 대표 샘플 중 M 개의 대표 샘플이 있는지 여부를 결정하기 위해 K 개의 대표 샘플 중 N(M<=N<=K) 개가 검사된다.
1. 일 예에서, N은 M과 동일하고 M 개의 미리 정의된 대표 샘플만이 검사된다.
2. 예를 들어, M이 1과 동일하고 K가 2와 동일할 때, K 개의 영역은 좌측 위쪽 및 우측 위쪽 이웃 영역을 포함할 수 있으며, 좌측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
a. 대안적으로, 우측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
3. 예를 들어, M이 1과 동일하고 K가 2와 동일할 때, K 개의 영역은 좌측 아래쪽 및 우측 아래쪽 이웃 영역을 포함할 수 있으며, 좌측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
a. 대안적으로, 우측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
4. 예를 들어, M이 1과 동일하고 K가 2와 동일할 때, K 개의 영역은 좌측 위쪽 및 좌측 아래쪽 이웃 영역이고, 좌측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
a. 대안적으로, 좌측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
5. 예를 들어, M이 1과 동일하고 K가 2와 동일할 때, K 개의 영역은 우측 위쪽 및 우측 아래쪽 이웃 영역이고, 우측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
a. 대안적으로, 우측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
6. 예를 들어, M이 1과 동일하고 K가 4와 동일할 때, K 개의 영역은 좌측 위쪽, 우측 위쪽, 좌측 아래쪽 및 우측 아래쪽 이웃 영역이고, 좌측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
a. 대안적으로, 우측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
b. 대안적으로, 좌측 아래쪽 이웃 영역의 대표 샘플만이 검사된다.
c. 대안적으로, 우측 위쪽 이웃 영역의 대표 샘플만이 검사된다.
v. 일 예에서, 한 영역 내의 대표 샘플이 상이한 슬라이스에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다.
vi. 일 예에서, 한 영역 내의 대표 샘플이 상이한 브릭에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다.
vii. 일 예에서, 한 영역 내의 대표 샘플이 상이한 서브픽처에 있고, loop_filter_across_subpic_enabled_flag[SubPicIdx]가 0과 동일한 경우, 해당 영역 내의 액세스될 샘플은 이용 불가능한 것으로 표시된다. 일 예에서, SubPicIdx는 현재 블록을 포함하는 현재 서브픽처의 인덱스이다.
g. 위의 예들에서, offsetXi/offsetYi(단, i는 0...3임)는 정수들이다.
i. 대안적으로, 게다가, offsetXi/offsetYi(단, i는 0...3임)는 CTU 폭/높이와 동일하게 설정될 수 있다.
21. CTU의 좌측 위쪽/우측 위쪽/좌측 아래쪽/우측 아래쪽 이웃 영역들의 "이용 가능성"의 결정은 CTU의 위쪽/좌측/우측/아래쪽 이웃 영역들과 독립적일 수 있다.
a. ALF 필터링 또는/및 분류 프로세스에서, 좌측 위쪽 이웃 영역에 대해 패딩을 수행할지 여부와 위쪽 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
i. 일 예에서, 위쪽 이웃 영역이 "이용 불가능한" 것으로 표시되고 좌측 위쪽 이웃 영역이 "이용 가능한" 것으로 표시되는 경우, 패딩이 위쪽 이웃 영역에 대해서는 수행되지만 좌측 위쪽 이웃 영역에 대해서는 수행되지 않는다.
ii. 일 예에서, 좌측 위쪽 이웃 영역이 "이용 불가능한" 것으로 표시되고 위쪽 이웃 영역이 "이용 가능한" 것으로 표시되는 경우, 패딩이 좌측 위쪽 이웃 영역에 대해서는 수행되지만 위쪽 이웃 영역에 대해서는 수행되지 않는다.
b. ALF 필터링 또는/및 분류 프로세스에서, 우측 위쪽 이웃 영역에 대해 패딩을 수행할지 여부와 위쪽 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
c. ALF 필터링 또는/및 분류 프로세스에서, 좌측 위쪽 이웃 영역에 대해 패딩을 수행할지 여부와 좌측 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
d. ALF 필터링 또는/및 분류 프로세스에서, 좌측 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부와 좌측 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
e. ALF 필터링 또는/및 분류 프로세스에서, 우측 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부와 우측 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
f. ALF 필터링 또는/및 분류 프로세스에서, 우측 위쪽 이웃 영역에 대해 패딩을 수행할지 여부와 우측 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
g. ALF 필터링 또는/및 분류 프로세스에서, 우측 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부와 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
h. ALF 필터링 또는/및 분류 프로세스에서, 좌측 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부와 아래쪽 이웃 영역에 대해 패딩을 수행할지 여부는 상이하게 결정될 수 있다.
i. 일 예에서, 좌측 위쪽 또는/및 우측 위쪽 이웃 영역들 내의 샘플들이 "이용 불가능한" 것으로 결정될 때, 위쪽 이웃 영역 내의 샘플들은 (예를 들면, 현재 CTU와 동일한 비디오 유닛에 있는 경우에) 여전히 "이용 가능한" 것으로 결정될 수 있다. 예를 들면, ALF 필터링 및/또는 분류 프로세스에서 위쪽 이웃 영역에 대해서는 샘플 패딩이 수행되지 않을 수 있다.
j. 일 예에서, 좌측 아래쪽 또는/및 우측 아래쪽 이웃 영역들 내의 샘플들이 "이용 불가능한" 것으로 결정될 때, 아래쪽 이웃 영역 내의 샘플들은 (예를 들면, 현재 CTU와 동일한 비디오 유닛에 있는 경우에) 여전히 "이용 가능한" 것으로 결정될 수 있다. 예를 들면, ALF 필터링 및/또는 분류 프로세스에서 아래쪽 이웃 영역에 대해서는 샘플 패딩이 수행되지 않을 수 있다.
k. 일 예에서, 좌측 위쪽 또는/및 좌측 아래쪽 이웃 영역들 내의 샘플들이 "이용 불가능한" 것으로 결정될 때, 좌측 이웃 영역 내의 샘플들은 (예를 들면, 현재 CTU와 동일한 비디오 유닛에 있는 경우에) 여전히 "이용 가능한" 것으로 결정될 수 있다. 예를 들면, ALF 필터링 및/또는 분류 프로세스에서 좌측 이웃 영역에 대해서는 샘플 패딩이 수행되지 않을 수 있다.
l. 일 예에서, 우측 위쪽 또는/및 우측 아래쪽 이웃 영역들 내의 샘플들이 "이용 불가능한" 것으로 결정될 때, 우측 이웃 영역 내의 샘플들은 (예를 들면, 현재 CTU와 동일한 비디오 유닛에 있는 경우에) 여전히 "이용 가능한" 것으로 결정될 수 있다. 예를 들면, ALF 필터링 및/또는 분류 프로세스에서 우측 이웃 영역에 대해서는 샘플 패딩이 수행되지 않을 수 있다.
22. 위의 제안된 방법들은 ALF뿐만 아니라 현재 블록 외부의 샘플들에 액세스할 필요가 있는 다른 종류들의 필터링 방법들에도 적용될 수 있다.
a. 대안적으로, 위의 제안된 방법들은 현재 블록 외부의 샘플들에 액세스할 필요가 있는 다른 코딩 툴들(비필터링 방법들)에 적용될 수 있다.
23. 위의 방법들을 적용할지 여부 및/또는 어떻게 적용할지는 이하에 의해 결정될 수 있다:
a. DPS/SPS/VPS/PPS/APS/픽처 헤더/슬라이스 헤더/타일 그룹 헤더/최대 코딩 유닛(LCU/코딩 유닛(CU/LCU 행/LCU들의 그룹/TU/PU 블록/비디오 코딩 유닛에서 시그널링되는 메시지
b. CU/PU/TU/블록/비디오 코딩 유닛들의 위치
c. 현재 블록 및/또는 그의 이웃 블록들의 블록 치수
d. 현재 블록 및/또는 그의 이웃 블록들의 블록 형상
e. 현재 블록 및/또는 그의 이웃 블록들의 코딩된 정보
f. 색상 포맷(예컨대,, 4:2:0, 4:4:4)의 표시
g. 코딩 트리 구조
h. 슬라이스/타일 그룹 유형 및/또는 픽처 유형
i. 색상 성분(예를 들면, 크로마 성분들 또는 루마 성분에만 적용할 수 있음)
j. 시간 계층 ID
k. 표준의 프로필들/레벨들/티어들
5. 실시예들
아래의 섹션들에서, VVC 표준의 현재 버전이 개시된 기술의 일부 실시예들을 수용하도록 어떻게 수정되는지의 일부 예들이 설명된다. 새로 추가된 부분들은 굵은 기울임꼴 밑줄친 텍스트로 표시된다. 삭제된 부분들은 [[]]를 사용하여 표시된다.
5.1 실시예 #1
loop_filter_across_bricks_enabled_flag가 1과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 브릭 경계들에 걸쳐 수행될 수 있다는 것을 지정한다. loop_filter_across_bricks_enabled_flag가 0과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 브릭 경계들에 걸쳐 수행되지 않는다는 것을 지정한다. 인루프 필터링 동작들은 디블로킹 필터, 샘플 적응적 오프셋 필터[[ 및 적응적 루프 필터]] 동작들을 포함한다. 존재하지 않을 때, loop_filter_across_bricks_enabled_flag의 값은 1과 동일한 것으로 추론된다.
loop_filter_across_slices_enabled_flag가 1과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 슬라이스 경계들에 걸쳐 수행될 수 있다는 것을 지정한다. loop_filter_across_slice_enabled_flag가 0과 동일한 것은 인루프 필터링 동작들이 PPS를 참조하는 픽처들에서 슬라이스 경계들에 걸쳐 수행되지 않는다는 것을 지정한다. 인루프 필터링 동작들은 디블로킹 필터, 샘플 적응적 오프셋 필터[[ 및 적응적 루프 필터]] 동작들을 포함한다. 존재하지 않을 때, loop_filter_across_slices_enabled_flag의 값은 0과 동일한 것으로 추론된다.
5.2 실시예 #2
도 21은 픽처에서의 CTU들의 프로세싱을 도시한다. 도 19와 비교한 차이점들이 파선 라인들로 강조 표시되어 있다.
5.3 실시예 #3
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플에 상대적인 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ], 단 x, y = 0..CtbSizeY - 1을 출력들로 하여 호출된다.
필터링된 재구성된 루마 샘플들 alfPictureL[ x ][ y ]의 도출을 위해, 현재 루마 코딩 트리 블록 recPictureL[ x ][ y ] 내의 각각의 재구성된 루마 샘플은 다음과 같이 필터링되며, 단, x, y = 0..CtbSizeY - 1이다:
- 루마 필터 계수들의 어레이 f[ j ] 및 filtIdx[ x ][ y ]에 의해 명시되는 필터에 대응하는 루마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되며, 단, j = 0..11이다:
- ...
- 루마 필터 계수들 및 클리핑 값 인덱스 idx는 다음과 같이 transposeIdx[ x ][ y ]에 따라 도출된다:
- ...
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -3..3임)은 다음과 같이 도출된다:
- ...
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들[[ 중 하나 이상]]이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
[[- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.]]
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 applyVirtualBoundary에 따른 재구성된 샘플 오프셋들 r1, r2 및 r3은 표 8-22에 명시되어 있다.
- ...
8.8.5.4 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플에 상대적인 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00080
Figure pct00081
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1이다:
크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00082
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] / SubWidthC - xCtbC - x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00083
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00084
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtbC + y  PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00085
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] / SubHeightC  yCtbC  y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00086
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00087
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들[[ 중 하나 이상]]이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
[[- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.]]
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 applyVirtualBoundary에 따른 재구성된 샘플 오프셋들 r1 및 r2는 표 8-22에 명시되어 있다.
...
대안적으로, '현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계라는' 조건은 '현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계이거나 픽처 외부에 있다는' 것으로 대체된다.
5.4 실시예 #4
이 실시예는 ALF 분류 프로세스(섹션 4에서의 글머리 기호 7에 대응함)에서 VPDU 영역 아래쪽의 샘플들을 사용하는 것을 허용하지 않는 예를 보여준다.
8.8.5.3 루마 샘플들에 대한 ALF 전치 및 필터 인덱스에 대한 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플에 상대적인 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 적응적 루프 필터링 프로세스 이전에 재구성된 루마 픽처 샘플 어레이 recPictureL,
이 프로세스의 출력들은 다음과 같다.
- 분류 필터 인덱스 어레이 filtIdx[ x ][ y ], 단, x, y = 0..CtbSizeY - 1,
- 전치 인덱스 어레이 transposeIdx[ x ][ y ], 단, x, y = 0..CtbSizeY - 1.
루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..5임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00088
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ]- xCtb - x가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00089
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00090
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtb + y - PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00091
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] - yCtb - y가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00092
- 그렇지 않은 경우, 다음이 적용된다:
- yCtb + CtbSizeY가 pic_height_in_luma_samples보다 크거나 같은 경우, 다음이 적용된다:
Figure pct00093
- 그렇지 않고, y가 CtbSizeY - 4보다 작은 경우, 다음이 적용된다:
Figure pct00094
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00095
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음과 같은 순서의 단계들에 의해 도출된다:
1. 변수들 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ], 단, x, y =  2..CtbSizeY + 1이 다음과 같이 도출된다:
- x와 y 둘 모두가 짝수이거나 또는 x와 y 둘 모두가 홀수인 경우, 다음이 적용된다:
Figure pct00096
- 그렇지 않은 경우, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ]가 0과 동일하도록 설정된다.
2. 변수들 minY, maxY 및 ac는 다음과 같이 도출된다:
- ( y << 2 )가 ( min(CtbSizeY, 64)-8) [[( CtbSizeY - 8 )]]과 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- 그렇지 않고, ( y << 2 )가 ( min(CtbSizeY, 64)-4) [[( CtbSizeY - 4 )]]과 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 0와 동일하게 설정되고, maxY는 5와 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- 그렇지 않은 경우, minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되며 ac는 64와 동일하게 설정된다.
3. 변수들 varTempH1[ x ][ y ], varTempV1[ x ][ y ], varTempD01[ x ][ y ], varTempD11[ x ][ y ] 및 varTemp[ x ][ y ], 단, x, y = 0..( CtbSizeY - 1 ) >> 2가 다음과 같이 도출된다:
Figure pct00097
Figure pct00098
4. 변수들 dir1[ x ][ y ], dir2[ x ][ y ] 및 dirS[ x ][ y ], 단, x, y = 0..CtbSizeY - 1은 다음과 같이 도출된다:
- 변수들 hv1, hv0 및 dirHV는 다음과 같이 도출된다:
...
- 변수들 d1, d0 및 dirD는 다음과 같이 도출된다:
...
5. 변수들 avgVar[ x ][ y ], 단, x, y = 0..CtbSizeY - 1은 다음과 같이 도출된다:
Figure pct00099
6. 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ], 단, x = y = 0..CtbSizeY - 1은 다음과 같이 도출된다:
Figure pct00100
dirS[ x ][ y ]가 0과 동일하지 않을 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00101
5.5 실시예 #5
다수의 종류들의 경계들(예를 들면, 슬라이스/브릭 경계, 360도 가상 경계)에 위치하는 샘플들의 경우, 패딩 프로세스는 한 번만 호출된다. 그리고 측면별로 몇 개의 라인들이 패딩되어야 하는지는 경계들에 대한 현재 샘플의 위치에 의존한다.
일 예에서, ALF 양측 패딩 방법이 적용된다. 대안적으로, 게다가, 대칭적인 양측 패딩 방법에서, 샘플이 2 개의 경계, 예를 들면, 위쪽 측면에 있는 하나의 경계 및 아래쪽 측면에 있는 하나의 경계에 있을 때, 도 27에 도시된 바와 같이, 몇 개의 샘플들이 패딩되는지는 보다 가까운 경계에 의해 결정된다. 한편, 분류 정보를 도출할 때, 도 27에서의 2 개의 경계 사이의 4 개의 라인만이 사용된다.
도 26은 4 개의 샘플 라인이 2 개의 경계를 갖는 경우 패딩 방법들의 예를 도시한다. 일 예에서, 도 26에서의 제1 경계는 ALF 가상 경계일 수 있고; 도 25에서의 제2 경계는 슬라이스/타일/브릭 경계 또는 360도 가상 경계일 수 있다.
5.6 실시예 #6
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1)를 출력들로 하여 호출된다.
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -3..3임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00102
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosX[ n ]- xCtb - x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00103
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00104
- [[ pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00105
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00106
- [[그렇지 않은 경우]], 다음이 적용된다:
Figure pct00107
- [[변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- yCtb가 yCtb와 동일하고 y가 y와 동일한 상태에서 8.8.5.5에 명시된 바와 같이 루마 샘플들에 대한 수직 경계 위치 도출 프로세스를 호출하는 것에 의해 변수 boundaryPos1 및 boundaryPos2가 도출된다.
Figure pct00108
Figure pct00109
8.8.5.3 루마 샘플들에 대한 ALF 전치 및 필터 인덱스에 대한 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력들은 다음과 같다.
- 분류 필터 인덱스 어레이 filtIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1),
- 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1).
루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..5임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00110
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ]- xCtb - x가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00111
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00112
-[[ pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00113
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00114
- 그렇지 않은 경우, 다음이 적용된다:
- yCtb + CtbSizeY가 pic_height_in_luma_samples보다 크거나 같은 경우, 다음이 적용된다:
Figure pct00115
- 그렇지 않고, y가 CtbSizeY - 4보다 작은 경우, 다음이 적용된다:
Figure pct00116
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00117
- yCtb가 yCtb와 동일하고 y가 y와 동일한 상태에서 8.8.5.5에 명시된 바와 같이 루마 샘플들에 대한 수직 경계 위치 도출 프로세스를 호출하는 것에 의해 변수 boundaryPos1 및 boundaryPos2가 도출된다.
- boundaryPos1이 -1과 동일하고 boundaryPos2가 -1과 동일한 경우, 다음이 적용된다:
Figure pct00118
- 그렇지 않고, boundaryPos1이 -1과 동일하지 않고 boundaryPos2가 -1과 동일한 경우, 다음이 적용된다:
- y가 boundaryPos1보다 작은 경우, 다음이 적용된다 :
Figure pct00119
- 그렇지 않고, y가 boundaryPos1보다 크거나 같은 경우, 다음이 적용된다 :
Figure pct00120
- 그렇지 않은 경우(boundaryPos1이 -1과 동일하지 않고 boundaryPos2가 -1과 동일하지 않은 경우), 다음이 적용된다 :
- y가 boundaryPos1보다 작은 경우, 다음이 적용된다 :
Figure pct00121
- 그렇지 않고, y가 boundaryPos2보다 크거나 같은 경우, 다음이 적용된다 :
Figure pct00122
- 그렇지 않은 경우(y가 boundaryPos1보다 크고 boundaryPos2보다 작거나 같은 경우), 다음이 적용된다 :
Figure pct00123
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음과 같은 순서의 단계들에 의해 도출된다:
1. 변수들 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ](단, x, y =  2..CtbSizeY + 1)가 다음과 같이 도출된다:
- x와 y 둘 모두가 짝수인 경우 또는 x와 y 둘 모두가 홀수인 경우, 다음이 적용된다:
Figure pct00124
- 그렇지 않은 경우, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ]가 0과 동일하도록 설정된다.
2. 변수들 minY, maxY 및 ac는 다음과 같이 도출된다:
- ( y << 2 )가 ( CtbSizeY - 8 )과 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- 그렇지 않고, ( y << 2 )가 ( CtbSizeY - 4 )와 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 0와 동일하게 설정되고, maxY는 5와 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- yCtb가 yCtb와 동일하고 y가 y와 동일한 상태에서 8.8.5.5에 명시된 바와 같이 루마 샘플들에 대한 수직 경계 위치 도출 프로세스를 호출하는 것에 의해 변수 boundaryPos1 및 boundaryPos2가 도출된다.
- boundaryPos1이 -1과 동일하지 않고 boundaryPos2가 -1과 동일한 경우, 다음이 적용된다 :
- y가 boundaryPos1 - 4와 동일한 경우, minY는 -2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않고, y가 boundaryPos1와 동일한 경우, minY는 0과 동일하게 설정되고, maxY는 5와 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않은 경우, minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되며 ac는 64와 동일하게 설정된다 .
- 그렇지 않고, boundaryPos1이 -1과 동일하지 않고 boundaryPos2가 -1과 동일하지 않은 경우, 다음이 적용된다 :
- y가 boundaryPos1 - 4와 동일한 경우, minY는 -2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않고, y가 boundaryPos2와 동일한 경우, minY는 0과 동일하게 설정되고, maxY는 5와 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않고, y가 boundaryPos1과 동일하고 boundaryPos2가 boundaryPos2 + 8보다 크거나 같은 경우, minY는 0과 동일하게 설정되고, maxY는 5와 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않고, y가 boundaryPos1과 동일하고 boundaryPos2가 boundaryPos2 + 4와 동일한 경우, minY는 0과 동일하게 설정되고, maxY는 3과 동일하게 설정되며, ac는 128과 동일하게 설정된다 .
- 그렇지 않고, y가 boundaryPos2 - 4와 동일하고 boundaryPos2가 boundaryPos2 + 8보다 크거나 같은 경우, minY는 -2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며, ac는 96과 동일하게 설정된다 .
- 그렇지 않은 경우, minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되며 ac는 64와 동일하게 설정된다 .
- 그렇지 않은 경우(boundaryPos1이 -1과 동일하고 boundaryPos2가 -1과 동일한 경우), minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되며 ac는 64와 동일하게 설정된다 .
- [[그렇지 않은 경우, minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되며 ac는 64와 동일하게 설정된다.]]
3. 변수들 sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ] 및 sumOfHV[ x ][ y ](단, x, y = 0..( CtbSizeY - 1 ) >> 2)는 다음과 같이 도출된다:
Figure pct00125
...
8.8.5.4 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00126
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1이다:
- 크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00127
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] / SubWidthC - xCtbC - x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00128
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00129
- [[pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 yCtbC + y  PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00130
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] / SubHeightC  yCtbC  y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00131
- 그렇지 않은 경우]], 다음이 적용된다:
Figure pct00132
- [[변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- yCtb가 yCtb와 동일하고 y가 y와 동일한 상태에서 8.8.5.5에 명시된 바와 같이 루마 샘플들에 대한 수직 경계 위치 도출 프로세스를 호출하는 것에 의해 변수 boundaryPos1 및 boundaryPos2가 도출된다.
- 변수 boundaryPos1은 boundaryPos1 / SubWidthC와 동일하게 설정된다.
- 변수 boundaryPos2는 boundaryPos2 / SubWidthC와 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 applyVirtualBoundary에 따른 재구성된 샘플 오프셋들 r1 및 r2는 표 8-24에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00133
- 크로마 필터 계수들의 어레이 f[ j ] 및 크로마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되고, 단, j = 0..5이다:
Figure pct00134
- 변수 sum은 다음과 같이 도출된다
Figure pct00135
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ ( xCtbC + x ) * SubWidthC ][ ( yCtbC + y ) * SubHeightC ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00136
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00137
Figure pct00138
Figure pct00139
8.8.5.5 루마 샘플들에 대한 수직 경계 위치 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플의 수직 위치를 지정하는 루마 위치 yCtb .
- 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 기준으로 현재 픽셀의 수직 위치를 지정하는 루마 위치 y .
이 프로세스의 출력은 다음과 같다.
- 위쪽 수직 경계 위치 boundaryPos1 .
- 아래쪽 수직 경계 위치 boundaryPos2 .
- 변수 boundaryPos1는 다음과 같이 도출된다 :
- 변수 boundaryPos1는 -1과 동일하게 설정된다 .
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다 :
Figure pct00140
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00141
- 변수 boundaryPos2는 다음과 같이 도출된다 :
- 변수 boundaryPos2는 -1과 동일하게 설정된다 .
- 현재 코딩 트리 블록의 하단 경계가 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag가 0과 동일한 경우, 다음이 적용된다 :
- CtbSizeY - y가 4보다 작은 경우, 변수 boundaryPos2는 CtbSizeY와 동일하게 설정된다 .
- 그렇지 않고, 현재 코딩 트리 블록의 하단 경계가 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag가 0과 동일한 경우, 다음이 적용된다:
- CtbSizeY - y가 4보다 작은 경우, 변수 boundaryPos2는 CtbSizeY와 동일하게 설정된다 .
- 그렇지 않고, 현재 코딩 트리 블록의 상단 경계가 브릭의 상단 경계이고 loop_filter_across_bricks_enabled_flag가 0과 동일한 경우, 다음이 적용된다 :
- y가 3보다 작은 경우, 변수 boundaryPos2는 0과 동일하게 설정된다 .
- 그렇지 않고, 현재 코딩 트리 블록의 상단 경계가 슬라이스의 상단 경계이고 loop_filter_across_slices_enabled_flag가 0과 동일한 경우, 다음이 적용된다 :
- y가 3보다 작은 경우, 변수 boundaryPos2는 0과 동일하게 설정된다 .
- 변수 boundaryPos1이 -1과 동일한 경우, 다음이 적용된다 :
- 변수 boundaryPos1은 boundaryPos2와 동일하다 .
- 변수 boundaryPos2는 -1과 동일하다 .
- 변수 applyVirtualBoundary는 다음과 같이 도출된다 :
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다 :
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다 .
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다 .
- applyVirtualBoundary가 1과 동일한 경우, 다음이 적용된다 :
- boundaryPos1이 -1과 동일한 경우, boundaryPos1은 CtbSizeY - 4와 동일하게 설정된다 .
- 그렇지 않고, boundaryPos2가 -1과 동일한 경우, boundaryPos2는 CtbSizeY - 4와 동일하게 설정된다 .
- boundaryPos1이 -1과 동일하지 않고 boundaryPos1이가 -1과 동일하지 않은 경우 , 다음이 적용된다 :
- boundaryPos1이 boundaryPos2와 동일한 경우, boundaryPos2는 -1과 동일하게 설정된다 .
- 그렇지 않고, boundaryPos1이 boundaryPos2보다 큰 경우, 다음이 적용된다 :
- 변수 tmpPos는 boundaryPos2와 동일하게 설정된다 .
- 변수 boundaryPos2는 boundaryPos1과 동일하게 설정된다 .
- 변수 boundaryPos1은 tmpPos와 동일하게 설정된다 .
5.7 실시예 #7
CTU의 경우, 이는 어떠한 경계들(예를 들면, 픽처/슬라이스/타일/브릭/서브픽처 경계)과도 일치하지 않을 수 있다. 그렇지만, 이는 현재 유닛(예를 들면, 픽처/슬라이스/타일/브릭/서브픽처) 외부의 샘플들에 액세스할 필요가 있을 수 있다. 슬라이스 경계에 걸친 필터링이 디스에이블된 경우(예를 들면, loop_filter_across_slices_enabled_flag가 거짓인 경우), 현재 유닛 외부에 샘플을 패딩할 필요가 있다.
예를 들어, 도 28에서의 샘플(2801)(루마 샘플을 예로 듦)의 경우, ALF 필터링 프로세스에서 사용되는 샘플들은 도 29에서와 같이 패딩될 수 있다.
5.8 실시예 #8
이 실시예에서는, 다음과 같은 주요 아이디어들이 적용된다:
ALF 가상 경계들을 인에이블시키는 것에 대해:
- 픽처에서 마지막 CTU 행에 위치하지 않는 CTU들(예를 들면, CTU들의 하단 경계가 픽처의 하단 경계가 아니거나 픽처의 하단 경계를 초과함)에 대해, ALF 가상 경계가 인에이블된다, 즉, 하나의 CTU가 2 개 이상의 부분으로 분할될 수 있고, 하나의 부분에 있는 샘플들이 다른 부분에 있는 샘플들을 사용하도록 허용되지 않는다.
- 픽처에서 마지막 CTU 행에 위치하는 CTU들(예를 들면, CTU들의 하단 경계가 픽처의 하단 경계이거나 픽처의 하단 경계를 초과함)에 대해, ALF 가상 경계가 인에이블된다, 즉, 하나의 CTU가 2 개 이상의 부분으로 분할될 수 있고, 하나의 부분에 있는 샘플들이 다른 부분에 있는 샘플들을 사용하도록 허용되지 않는다.
분류 프로세스에서 (ALF 가상 경계들, 슬라이스/타일/브릭/서브픽처 경계들, "360 가상 경계들"을 포함한) 경계들의 패딩에 대해:
하나의(또는 다수의 종류들의) 경계들에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 일측 패딩이 수행된다.
ALF 필터링 프로세스에서 (ALF 가상 경계들, 슬라이스/타일/브릭/서브픽처 경계들, "360 가상 경계들"을 포함한) 경계들의 패딩에 대해:
- CTU 경계와 일치하는 슬라이스/타일/브릭/서브픽처 경계 또는 "360 가상 경계"인 하나의(또는 다수의 종류들의) 경계에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 양측 패딩이 수행된다.
- CTU 경계와 일치하지 않는 픽처 경계 또는 "360 가상 경계"인 하나의(또는 다수의 종류들의) 경계에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 일측 패딩이 수행된다.
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1)를 출력들로 하여 호출된다.
필터링된 재구성된 루마 샘플들 alfPictureL[ x ][ y ]의 도출을 위해, 현재 루마 코딩 트리 블록 recPictureL[ x ][ y ] 내의 각각의 재구성된 루마 샘플은 다음과 같이 필터링되며, 단, x, y = 0..CtbSizeY - 1이다:
- 루마 필터 계수들의 어레이 f[ j ] 및 filtIdx[ x ][ y ]에 의해 명시되는 필터에 대응하는 루마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되며, 단, j = 0..11이다:
- AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 작은 경우, 다음이 적용된다:
Figure pct00142
- 그렇지 않은 경우(AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 크거나 같은 경우), 다음이 적용된다:
Figure pct00143
- 루마 필터 계수들 및 클리핑 값 인덱스 idx는 다음과 같이 transposeIdx[ x ][ y ]에 따라 도출된다:
- transposeIndex[ x ][ y ]가 1과 동일한 경우, 다음이 적용된다:
Figure pct00144
- 그렇지 않고, transposeIndex[ x ][ y ]가 2과 동일한 경우, 다음이 적용된다:
Figure pct00145
- 그렇지 않고, transposeIndex[ x ][ y ]가 3과 동일한 경우, 다음이 적용된다:
Figure pct00146
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00147
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -3..3임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00148
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00149
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00150
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00151
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00152
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ]  yCtb - y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00153
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00154
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00155
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 서브픽처의 하단 경계이며 위치 ( hx, vy )에서 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- 변수 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 (xCtb, yCtb) 및 (x, y)를 입력들로 하여 8.8.5.5 절에 명시된 바와 같이 루마 샘플들에 대한 수평 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- 수평 루마 샘플 위치 y 및 clipTopPos 및 clipBottomPos [[applyVirtualBoundary]]에 따른 재구성된 샘플 오프셋들 r1, r2 및 r3은 표 8-24에 명시되어 있다.
- 수직 루마 샘플 위치 x 및 clipLeftPos 및 clipRightPos에 따른 재구성된 샘플 오프셋들 c1, c2 및 c3은 표 8-25에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00156
- 변수 sum은 다음과 같이 도출된다:
Figure pct00157
- 수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ xCtb+ x ][ yCtb + y ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00158
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00159
Figure pct00160
8.8.5.3 루마 샘플들에 대한 ALF 전치 및 필터 인덱스에 대한 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력들은 다음과 같다.
- 분류 필터 인덱스 어레이 filtIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1),
- 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1).
루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..5임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00161
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00162
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00163
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00164
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00165
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00166
- 그렇지 않은 경우, 다음이 적용된다:
- yCtb + CtbSizeY가 pic_height_in_luma_samples보다 크거나 같은 경우, 다음이 적용된다:
Figure pct00167
- [[그렇지 않고, y가 CtbSizeY - 4보다 작은 경우, 이하가 적용된다:
Figure pct00168
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00169
- 위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00170
- 변수 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 (xCtb, yCtb) 및 (x, y)를 사용하여 8.8.5.5 절에 명시된 바와 같이 루마 샘플들에 대한 수평 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- clipTopPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00171
- clipBottomPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00172
- clipLeftPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00173
- clipRightPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00174
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음과 같은 순서의 단계들에 의해 도출된다:
1. 변수들 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ](단, x, y =  2..CtbSizeY + 1)가 다음과 같이 도출된다:
- x와 y 둘 모두가 짝수인 경우 또는 x와 y 둘 모두가 홀수인 경우, 다음이 적용된다:
Figure pct00175
- 그렇지 않은 경우, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ]가 0과 동일하도록 설정된다.
2. [[변수들 minY, maxY 및 ac는 다음과 같이 도출된다:
- ( y << 2 )가 ( CtbSizeY - 8 )과 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- 그렇지 않고, ( y << 2 )가 ( CtbSizeY - 4 )와 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 0와 동일하게 설정되고, maxY는 5와 동일하게 설정되며 ac는 96과 동일하게 설정된다.]]
3. 변수들 sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ] 및 sumOfHV[ x ][ y ](단, x, y = 0..( CtbSizeY - 1 ) >> 2)는 다음과 같이 도출된다:
변수들 minY, maxY 및 ac는 다음과 같이 도출된다:
- clipTopPos가 -128과 동일하지 않고 clipBottomPos가 -128과 동일한 경우, 다음이 적용된다:
- ( y << 2 )가 clipTopPos와 동일한 경우, minY는 0과 동일하게 설정되고, maxY는 5와 동일하게 설정된다.
- 그렇지 않고, clipTopPos가 -128과 동일하고 clipBottomPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
- ( y << 2 )가 ( clipBottomPos - 4 )와 동일한 경우, minY는 -2와 동일하게 설정되고, maxY는 3과 동일하게 설정된다.
- 그렇지 않고, clipTopPos가 -128과 동일하지 않고 clipBottomPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
- minY는 0과 동일하게 설정되고, maxY는 3과 동일하게 설정된다.
- 그렇지 않은 경우 , minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정되고 ac는 64와 동일하게 설정된다.
변수들 minX, maxX 및 ac는 다음과 같이 도출된다:
- clipLeftPos가 128과 동일하지 않은 경우, 다음이 적용된다:
- ( x << 2 )가 clipLeftPos와 동일하지 않은 경우, minX는 0과 동일하게 설정되고, maxX는 5와 동일하게 설정된다.
- 그렇지 않고, clipRightPos가 128과 동일하지 않은 경우, 다음이 적용된다:
- ( x << 2 )가 ( clipRightPos - 4 )와 동일한 경우, minX는 -2와 동일하게 설정되고, maxX는 3과 동일하게 설정된다.
- 그렇지 않은 경우, minX는 -2와 동일하게 설정되고 maxX는 5와 동일하게 설정된다.
변수 ac는 표 8-24에 따라 도출된다.
Figure pct00176
Figure pct00177
4. 변수들 dir1[ x ][ y ], dir2[ x ][ y ] 및 dirS[ x ][ y ](단, x, y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
- 변수들 hv1, hv0 및 dirHV는 다음과 같이 도출된다:
- sumV[ x >> 2 ][ y >> 2 ]가 sumH[ x >> 2 ][ y >> 2 ]보다 큰 경우, 다음이 적용된다:
Figure pct00178
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00179
- 변수들 d1, d0 및 dirD는 다음과 같이 도출된다:
- sumD0[ x >> 2 ][ y >> 2 ]가 sumD1[ x >> 2 ][ y >> 2 ]보다 큰 경우, 다음이 적용된다:
Figure pct00180
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00181
Figure pct00182
- 변수들 hvd1, hvd0은 다음과 같이 도출된다:
Figure pct00183
- 변수들 dirS[ x ][ y ], dir1[ x ][ y ] 및 dir2[ x ][ y ]는 다음과 같이 도출된다:
Figure pct00184
5. 변수들 avgVar[ x ][ y ](단, x, y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
Figure pct00185
6. 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x = y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
Figure pct00186
dirS[ x ][ y ]가 0과 동일하지 않을 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00187
8.8.5.4 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00188
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1이다:
- 크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00189
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ] / SubWidthC - xCtbC - x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00190
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00191
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00192
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtbC + y  PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00193
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ] / SubHeightC  yCtbC  y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00194
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00195
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00196
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 서브픽처의 하단 경계이며 위치 ( hx, vy )에서 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- 변수 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 (xCtbC* SubWidthC, yCtbC * SubWidthC ) 및 (x* SubWidthC , y* SubWidthC )를 입력들로 하여 8.8.5.5 절에 명시된 바와 같이 루마 샘플들에 대한 수평 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- 변수 clipTopPos는 clipLeftPos / SubWidthC와 동일하게 설정된다.
- 변수 clipBottomPos는 clipRightPos / SubWidthC와 동일하게 설정된다.
- 변수 clipTopPos는 clipTopPos / SubWidthC와 동일하게 설정된다.
- 변수 clipBottomPos는 clipBottomPos / SubWidthC와 동일하게 설정된다.
- 수평 루마 샘플 위치 y 및 clipTopPos 및 clipBottomPos [[및 applyVirtualBoundary]]에 따른 재구성된 샘플 오프셋들 r1 및 r2는 표 8-27에 명시되어 있다.
- 수직 루마 샘플 위치 x, clipLeftPos 및 clipRightPos에 따른 재구성된 샘플 오프셋들 c1 및 c2는 표 8-28에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00197
- 크로마 필터 계수들의 어레이 f[ j ] 및 크로마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되고, 단, j = 0..5이다:
Figure pct00198
- 변수 sum은 다음과 같이 도출된다
Figure pct00199
Figure pct00200
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ ( xCtbC + x ) * SubWidthC ][ ( yCtbC + y ) * SubHeightC ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00201
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00202
Figure pct00203
8.8.5.5 샘플들에 대한 ALF 경계 위치 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb , yCtb ) .
- 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 기준으로 현재 샘플을 지정하는 루마 위치 (x, y).
이 프로세스의 출력은 다음과 같다.
- 좌측 수직 경계 위치 clipLeftPos.
- 우측 수직 경계 위치 clipRightPos.
- 위쪽 수평 경계 위치 clipTopPos.
- 아래쪽 수평 경계 위치 clipBottomPos.
변수 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 -128과 동일하게 설정된다.
변수 clipTopPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 y - ( CtbSizeY - 4 )가 0보다 크거나 같은 경우, 변수 clipTopPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n =  0..pps _ num _ hor _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosY[ n ]이 pic _height_in_ luma _samples - 1 또는 0과 동일하지 않고, yCtb  + y   PpsVirtualBoundariesPosY [ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00204
- 그렇지 않고, y가 3보다 작고, 현재 코딩 트리 블록의 상단 경계가 픽처의 상단 경계가 아니며, 다음 조건들 중 하나가 참인 경우, 변수 clipTopPos는 yCtb와 동일하게 설정된다:
- 현재 코딩 트리 블록의 상단 경계가 브릭의 상단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우 .
- 현재 코딩 트리 블록의 상단 경계가 슬라이스의 상단 경계이고, loop_filter_across_slices_enabled_flag는 0과 동일한 경우 .
- 현재 코딩 트리 블록의 상단 경계가 서브픽처의 상단 경계이고, loop_filter_across_sub_pic_enabled_flag는 0과 동일한 경우 .
변수 clipBottomPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 CtbSizeY - 4 - y가 0보다 크고 4보다 작은 경우, 변수 clipBottomPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosY[ n ]이 pic_height_in_luma_samples - 1 또는 0과 동일하지 않고, PpsVirtualBoundariesPosY[ n ]  yCtb  y이 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00205
- 그렇지 않고, CtbSizeY - y가 4보다 작고, 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니며, 다음 조건들 중 하나가 참인 경우, 변수 clipBottomPos는 yCtb + CtbSizeY와 동일하게 설정된다.
- 현재 코딩 트리 블록의 하단 경계가 브릭의 하단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 하단 경계가 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag가 0과 동일한 경우 .
- 현재 코딩 트리 블록의 하단 경계가 서브픽처의 하단 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
변수 clipLeftPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n =  0..pps _ num _ ver _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosX[ n ]이 pic_width_in_luma_samples - 1 또는 0과 동일하지 않고, xCtb + x  PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00206
- 그렇지 않고, x가 3보다 작고, 현재 코딩 트리 블록의 좌측 경계가 픽처의 좌측 경계가 아니며, 다음 조건들 중 하나가 참인 경우, 변수 clipLeftPos는 xCtb와 동일하게 설정된다
- 현재 코딩 트리 블록의 좌측 경계가 브릭의 좌측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 슬라이스의 좌측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 서브픽처의 좌측 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
변수 clipRightPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n =  0..pps _ num _ ver _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosX[ n ]이 pic_width_in_luma_samples - 1 또는 0과 동일하지 않고, PpsVirtualBoundariesPosX[ n ] xCtb  x이 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00207
- 그렇지 않고, CtbSizeY - x가 4보다 작고, 현재 코딩 트리 블록의 우측 경계가 픽처의 우측 경계가 아니며, 다음 조건들 중 하나가 참인 경우, 변수 clipRightPos는 xCtb + CtbSizeY와 동일하게 설정된다.
- 현재 코딩 트리 블록의 우측 경계가 브릭의 우측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 슬라이스의 우측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 서브픽처의 우측 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
위의 실시예에서 사용되는 특정 값 -128은, -K와 같은, 다른 값들로 대체될 수 있으며, 여기서, 예를 들어, K는 CTU 하단 경계로부터 시프트된 라인들의 수 초과 또는 이상이다(예를 들면, K = -5).
대안적으로, PpsVirtualBoundariesPosY[ n ]가 1 내지 Ceil( pic_height_in_luma_samples ÷ 8 )  1(경계 포함)의 범위에 있는 것에 기초하여 "PpsVirtualBoundariesPosY[ n ]이 pic_height_in_luma_samples - 1 또는 0과 동일하지 않은 것"의 조건부 검사가 더 제거될 수 있다.
대안적으로, 하나의 플래그는 각각의 샘플이 비디오 유닛 경계들에 위치하는 경우 상이한 방식으로 처리될 필요가 있는지 여부를 표시하는 데 사용될 수 있다.
5.9 실시예 #9
이 실시예에서는, 다음과 같은 주요 아이디어들이 적용된다:
ALF 가상 경계들을 인에이블시키는 것에 대해:
- 픽처에서 마지막 CTU 행에 위치하지 않는 CTU들(예를 들면, CTU들의 하단 경계가 픽처의 하단 경계가 아니거나 픽처의 하단 경계를 초과함)에 대해, ALF 가상 경계가 인에이블된다, 즉, 하나의 CTU가 2 개 이상의 부분으로 분할될 수 있고, 하나의 부분에 있는 샘플들이 다른 부분에 있는 샘플들을 사용하도록 허용되지 않는다.
- 픽처에서 마지막 CTU 행에 위치하는 CTU들(예를 들면, CTU들의 하단 경계가 픽처의 하단 경계이거나 픽처의 하단 경계를 초과함)에 대해, ALF 가상 경계가 인에이블된다, 즉, 하나의 CTU가 2 개 이상의 부분으로 분할될 수 있고, 하나의 부분에 있는 샘플들이 다른 부분에 있는 샘플들을 사용하도록 허용되지 않는다.
분류 프로세스에서 (ALF 가상 경계들, 슬라이스/타일/브릭/서브픽처 경계들, "360 가상 경계들"을 포함한) 경계들의 패딩에 대해:
하나의(또는 다수의 종류들의) 경계들에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 일측 패딩이 수행된다.
ALF 필터링 프로세스에서 (ALF 가상 경계들, 슬라이스/타일/브릭/서브픽처 경계들, "360 가상 경계들"을 포함한) 경계들의 패딩에 대해:
- CTU 경계와 일치하는 슬라이스/타일/브릭/서브픽처 경계 또는 "360 가상 경계"인 하나의(또는 다수의 종류들의) 경계에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 양측 패딩이 수행된다.
- CTU 경계와 일치하지 않는 픽처 경계 또는 "360 가상 경계"인 하나의(또는 다수의 종류들의) 경계에 있는 샘플에 대해, 경계에 걸쳐 있는 이웃 샘플들이 사용되도록 허용되지 않을 때, 그러한 이웃 샘플들을 패딩하기 위해 일측 패딩이 수행된다.
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1)를 출력들로 하여 호출된다.
필터링된 재구성된 루마 샘플들 alfPictureL[ x ][ y ]의 도출을 위해, 현재 루마 코딩 트리 블록 recPictureL[ x ][ y ] 내의 각각의 재구성된 루마 샘플은 다음과 같이 필터링되며, 단, x, y = 0..CtbSizeY - 1이다:
- 루마 필터 계수들의 어레이 f[ j ] 및 filtIdx[ x ][ y ]에 의해 명시되는 필터에 대응하는 루마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되며, 단, j = 0..11이다:
- AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 작은 경우, 다음이 적용된다:
Figure pct00208
- 그렇지 않은 경우(AlfCtbFiltSetIdxY[ xCtb >> Log2CtbSize ][ yCtb >> Log2CtbSize ]가 16보다 크거나 같은 경우), 다음이 적용된다:
Figure pct00209
- 루마 필터 계수들 및 클리핑 값 인덱스 idx는 다음과 같이 transposeIdx[ x ][ y ]에 따라 도출된다:
- transposeIndex[ x ][ y ]가 1과 동일한 경우, 다음이 적용된다:
Figure pct00210
- 그렇지 않고, transposeIndex[ x ][ y ]가 2과 동일한 경우, 다음이 적용된다:
Figure pct00211
- 그렇지 않고, transposeIndex[ x ][ y ]가 3과 동일한 경우, 다음이 적용된다:
Figure pct00212
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00213
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -3..3임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00214
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00215
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00216
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00217
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00218
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00219
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00220
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00221
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 서브픽처의 하단 경계이며 위치 ( hx, vy )에서 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- 변수들 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 (xCtb, yCtb) 및 (x, y)를 입력들로 하여 8.8.5.5 절에 명시된 바와 같이 ALF 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- [[수평]] 수직 루마 샘플 위치 y, clipTopPos clipBottomPos [[applyVirtualBoundary]]에 따른 재구성된 샘플 오프셋들 r1, r2 및 r3은 표 8-24에 명시되어 있다.
- 수평 루마 샘플 위치 x, clipLeftPos 및 clipRightPos에 따른 샘플 위치 오프셋들 c1, c2 및 c3은 표 8-25에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00222
- 변수 sum은 다음과 같이 도출된다:
Figure pct00223
- 수정된 필터링된 재구성된 루마 픽처 샘플 alfPictureL[ xCtb + x ][ yCtb + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ xCtb+ x ][ yCtb + y ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00224
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00225
Figure pct00226
8.8.5.3 루마 샘플들에 대한 ALF 전치 및 필터 인덱스에 대한 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력들은 다음과 같다.
- 분류 필터 인덱스 어레이 filtIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1),
- 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY - 1).
루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..5임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00227
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00228
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00229
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00230
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00231
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00232
- 그렇지 않은 경우, 다음이 적용된다:
- [[yCtb + CtbSizeY가 pic_height_in_luma_samples보다 크거나 같은 경우, 다음이 적용된다:]]
Figure pct00233
- [[그렇지 않고, y가 CtbSizeY - 4보다 작은 경우, 다음이 적용된다:
Figure pct00234
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00235
- 위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우, 다음이 적용된다:
Figure pct00236
- 변수들 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 (xCtb, yCtb) 및 (x, y)를 사용하여 8.8.5.5 절에 명시된 바와 같은 ALF 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- clipTopPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00237
- clipBottomPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00238
- clipLeftPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00239
- clipRightPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00240
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음과 같은 순서의 단계들에 의해 도출된다:
1. 변수들 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ](단, x, y =  2..CtbSizeY + 1)가 다음과 같이 도출된다:
- x와 y 둘 모두가 짝수인 경우 또는 x와 y 둘 모두가 홀수인 경우, 다음이 적용된다:
Figure pct00241
- 그렇지 않은 경우, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ]가 0과 동일하도록 설정된다.
2. [[변수들 minY, maxY 및 ac는 다음과 같이 도출된다:
- ( y << 2 )가 ( CtbSizeY - 8 )과 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 2와 동일하게 설정되고, maxY는 3과 동일하게 설정되며 ac는 96과 동일하게 설정된다.
- 그렇지 않고, ( y << 2 )가 ( CtbSizeY - 4 )와 동일하고 ( yCtb + CtbSizeY )가 pic_height_in_luma_samples - 1보다 작은 경우, minY는 0와 동일하게 설정되고, maxY는 5와 동일하게 설정되며 ac는 96과 동일하게 설정된다.]]
3. 변수들 sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ] 및 sumOfHV[ x ][ y ](단, x, y = 0..( CtbSizeY  1 ) >> 2)는 다음과 같이 도출된다:
- 변수들 minY 및 maxY는 다음과 같이 도출된다:
- clipTopPos가 -128과 동일하지 않고 clipBottomPos가 -128과 동일한 경우, 다음이 적용된다:
Figure pct00242
( y << 2 )가 clipTopPos와 동일한 경우, minY는 0과 동일하게 설정되고, maxY는 5와 동일하게 설정된다.
- 그렇지 않고, clipTopPos가 -128과 동일하고 clipBottomPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00243
( y << 2 )가 ( clipBottomPos - 4 )와 동일한 경우, minY는 -2와 동일하게 설정되고, maxY는 3과 동일하게 설정된다.
- 그렇지 않고, clipTopPos가 -128과 동일하지 않고 clipBottomPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00244
minY는 0과 동일하게 설정되고, maxY는 3과 동일하게 설정된다.
- 그렇지 않은 경우, minY는 -2와 동일하게 설정되고 maxY는 5와 동일하게 설정된다[[ac는 64와 동일하게 설정된다]].
- 변수들 minX, maxX 및 ac는 다음과 같이 도출된다 :
- clipLeftPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00245
( x << 2 )가 clipLeftPos와 동일하지 않은 경우, minX는 0과 동일하게 설정되고, maxX는 5와 동일하게 설정된다.
- 그렇지 않고, clipRightPos가 -128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00246
( x << 2 )가 ( clipRightPos - 4 )와 동일한 경우, minX는 -2와 동일하게 설정되고, maxX는 3과 동일하게 설정된다.
- 그렇지 않은 경우, minX는 -2와 동일하게 설정되고 maxX는 5와 동일하게 설정된다.
- 변수 ac는 표 8-26에 따라 도출된다:
Figure pct00247
- [[변수들 sumH[ x ][ y ], sumV[ x ][ y ], sumD0[ x ][ y ], sumD1[ x ][ y ] 및 sumOfHV[ x ][ y ](단, x, y = 0..( CtbSizeY - 1 ) >> 2)는 다음과 같이 도출된다:]]
Figure pct00248
4. 변수들 dir1[ x ][ y ], dir2[ x ][ y ] 및 dirS[ x ][ y ](단, x, y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
- 변수들 hv1, hv0 및 dirHV는 다음과 같이 도출된다:
- sumV[ x >> 2 ][ y >> 2 ]가 sumH[ x >> 2 ][ y >> 2 ]보다 큰 경우, 다음이 적용된다:
Figure pct00249
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00250
- 변수들 d1, d0 및 dirD는 다음과 같이 도출된다:
- sumD0[ x >> 2 ][ y >> 2 ]가 sumD1[ x >> 2 ][ y >> 2 ]보다 큰 경우, 다음이 적용된다:
Figure pct00251
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00252
- 변수들 hvd1, hvd0은 다음과 같이 도출된다:
Figure pct00253
- 변수들 dirS[ x ][ y ], dir1[ x ][ y ] 및 dir2[ x ][ y ]는 다음과 같이 도출된다:
Figure pct00254
5. 변수들 avgVar[ x ][ y ](단, x, y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
Figure pct00255
6. 분류 필터 인덱스 어레이 filtIdx[ x ][ y ] 및 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x = y = 0..CtbSizeY - 1)는 다음과 같이 도출된다:
Figure pct00256
dirS[ x ][ y ]가 0과 동일하지 않을 때, filtIdx[ x ][ y ]는 다음과 같이 수정된다:
Figure pct00257
8.8.5.4 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00258
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC - 1, y = 0..ctbHeightC - 1이다:
- 크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx  + i, vy  + j )(단, i, j = -2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00259
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosX[ n ] / SubWidthC  xCtbC  x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00260
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00261
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00262
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , yCtbC + y  PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00263
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며 , PpsVirtualBoundariesPosY[ n ] / SubHeightC  yCtbC  y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00264
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00265
- [[위치 ( hx, vy )에 있는 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]가 0과 동일할 때, 다음이 적용된다:
Figure pct00266
- 변수 applyVirtualBoundary는 다음과 같이 도출된다:
- 다음 조건들 중 하나 이상이 참인 경우, applyVirtualBoundary는 0과 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 경계이다.
- 현재 코딩 트리 블록의 하단 경계는 브릭의 하단 경계이고 loop_filter_across_bricks_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 서브픽처의 하단 경계이며 위치 ( hx, vy )에서 루마 샘플을 포함하는 서브픽처에 대한 loop_filter_across_sub_pic_enabled_flag[ SubPicIdx ]는 0과 동일하다.
- 현재 코딩 트리 블록의 하단 경계는 픽처의 하단 가상 경계들 중 하나이며 pps_loop_filter_across_virtual_boundaries_disabled_flag는 1과 동일하다.
- 그렇지 않은 경우, applyVirtualBoundary가 1과 동일하게 설정된다.]]
- 변수들 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 ( xCtbC * SubWidthC, yCtbC * SubHeightC ) 및 ( x * SubWidthC, y *SubHeightC )를 입력들로 하여 8.8.5.5 절에 명시된 바와 같은 루마 샘플들에 대한 수평 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- 변수 clipLeftPos는 clipLeftPos / SubWidthC와 동일하게 설정된다.
- 변수 clipRightPos는 clipRightPos / SubWidthC와 동일하게 설정된다.
- 변수 clipTopPos는 clipTopPos / SubHeightC와 동일하게 설정된다.
- 변수 clipBottomPos는 clipBottomPos / SubHeightC와 동일하게 설정된다.
- [[수평 루마]] 수직 크로마 샘플 위치 y, clipTopPos clipBottomPos [[ [[및 applyVirtualBoundary]]에 따른 재구성된 샘플 오프셋들 r1 및 r2는 표 8-27에 명시되어 있다.
- 수평 크로마 샘플 위치 x, clipLeftPos 및 clipRightPos에 따른 샘플 위치 오프셋들 c1 및 c2는 표 8-28에 명시되어 있다.
- 변수 curr은 다음과 같이 도출된다:
Figure pct00267
- 크로마 필터 계수들의 어레이 f[ j ] 및 크로마 클리핑 값들의 어레이 c[ j ]는 다음과 같이 도출되고, 단, j = 0..5이다:
Figure pct00268
- 변수 sum은 다음과 같이 도출된다
Figure pct00269
Figure pct00270
- 수정된 필터링된 재구성된 크로마 픽처 샘플 alfPicture[ xCtbC + x ][ yCtbC + y ]는 다음과 같이 도출된다:
- pcm_loop_filter_disabled_flag 및 pcm_flag[ ( xCtbC + x ) * SubWidthC ][ ( yCtbC + y ) * SubHeightC ] 둘 모두가 1과 동일한 경우, 다음이 적용된다:
Figure pct00271
- 그렇지 않은 경우(pcm_loop_filter_disabled_flag가 0과 동일하거나 pcm_flag[ x ][ y ]가 0과 동일한 경우), 다음이 적용된다:
Figure pct00272
Figure pct00273
Figure pct00274
8.8.5.5 ALF 경계 위치 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ) .
- 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 기준으로 현재 샘플을 지정하는 루마 위치 (x, y).
이 프로세스의 출력은 다음과 같다.
- 좌측 수직 경계 위치 clipLeftPos.
- 우측 수직 경계 위치 clipRightPos.
- 위쪽 수평 경계 위치 clipTopPos.
- 아래쪽 수평 경계 위치 clipBottomPos.
변수들 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 -128과 동일하게 설정된다.
변수 clipTopPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 y - ( CtbSizeY - 4 )가 0보다 크거나 같은 경우, 변수 clipTopPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n =  0..pps _ num _ hor _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하며, yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다 :
Figure pct00275
- 그렇지 않고, y가 3보다 작고, 현재 코딩 트리 블록의 상단 경계가 픽처의 상단 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipTopPos는 yCtb와 동일하게 설정된다:
- 현재 코딩 트리 블록의 상단 경계가 브릭의 상단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우 .
- 현재 코딩 트리 블록의 상단 경계가 슬라이스의 상단 경계이고, loop_filter_across_slices_enabled_flag는 0과 동일한 경우 .
- 현재 코딩 트리 블록의 상단 경계가 서브픽처의 상단 경계이고, loop_filter_across_sub_pic_enabled_flag는 0과 동일한 경우 .
변수 clipBottomPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 CtbSizeY - 4 - y가 0보다 크고 4보다 작은 경우, 변수 clipBottomPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n =  0..pps _ num _ hor _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00276
- 그렇지 않고, CtbSizeY - y가 4보다 작고, 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipBottomPos는 yCtb + CtbSizeY와 동일하게 설정된다.
- 현재 코딩 트리 블록의 하단 경계가 브릭의 하단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 하단 경계가 슬라이스의 하단 경계이고 loop_filter_across_slices_enabled_flag가 0과 동일한 경우 .
- 현재 코딩 트리 블록의 하단 경계가 서브픽처의 하단 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
변수 clipLeftPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps _ num _ ver _virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다 :
Figure pct00277
- 그렇지 않고, x가 3보다 작고, 현재 코딩 트리 블록의 좌측 경계가 픽처의 좌측 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipLeftPos는 xCtb와 동일하게 설정된다
- 현재 코딩 트리 블록의 좌측 경계가 브릭의 좌측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 슬라이스의 좌측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 서브픽처의 좌측 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
변수 clipRightPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00278
- 그렇지 않고, CtbSizeY - x가 4보다 작고, 현재 코딩 트리 블록의 우측 경계가 픽처의 우측 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipRightPos는 xCtb + CtbSizeY와 동일하게 설정된다.
- 현재 코딩 트리 블록의 우측 경계가 브릭의 우측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 슬라이스의 우측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 서브픽처의 우측 경계이고 loop_filter_across_sub_pic_enabled_flag가 0과 동일한 경우 .
위의 실시예에서 사용되는 특정 값 -128은, -K와 같은, 다른 값들로 대체될 수 있으며, 여기서, 예를 들어, K는 CTU 하단 경계로부터 시프트된 라인들의 수 초과 또는 이상이다(예를 들면, K = -5).
대안적으로, 하나의 플래그는 각각의 샘플이 비디오 유닛 경계들에 위치하는 경우 상이한 방식으로 처리될 필요가 있는지 여부를 표시하는 데 사용될 수 있다.
5.10 실시예 #10
8.8.5.2 루마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL,
- 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
이 프로세스의 출력은 수정된 필터링된 재구성된 루마 픽처 샘플 어레이 alfPictureL이다.
8.8.5.3 절에서의 필터 인덱스에 대한 도출 프로세스는 위치 ( xCtb, yCtb ) 및 재구성된 루마 픽처 샘플 어레이 recPictureL을 입력들로 하고, filtIdx[ x ][ y ] 및 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY  1)를 출력들로 하여 호출된다.
필터링된 재구성된 루마 샘플들 alfPictureL[ x ][ y ]의 도출을 위해, 현재 루마 코딩 트리 블록 recPictureL[ x ][ y ] 내의 각각의 재구성된 루마 샘플은 다음과 같이 필터링되며, 단, x, y = 0..CtbSizeY  1이다:
...
- 루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx + i, vy + j )(단, i, j = 3..3임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00279
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00280
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00281
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00282
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00283
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00284
- 변수들 clipLeftPos, clipRightPos, clipTopPos , [[및]] clipBottomPos , clipTopLeftFlag, clipTopRightFlag , clipBottomLeftFlag clipBottomRightFlag 는 ( xCtb, yCtb ) 및 ( x, y )를 입력들로 하여 8.8.5.5 절에 명시된 바와 같은 ALF 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- clipTopLeftFlag가 참과 동일한 경우, (h x + i < xCtb) && (v y + j < yCtb)이면 다음이 적용된다:
Figure pct00285
- clipTopRightFlag가 참과 동일한 경우, (h x + i >= xCtb + CtbLog2SizeY) && (v y + j < yCtb)이면 다음이 적용된다:
Figure pct00286
- clipBottomLeftFlag가 참과 동일한 경우, (h x + i < xCtb) && (v y + j >= yCtb + CtbLog2SizeY)이면 다음이 적용된다:
Figure pct00287
- clipBottomRightFlag가 참과 동일한 경우, (h x + i >= xCtb + CtbLog2SizeY) && (v y + j >= yCtb + CtbLog2SizeY)이면 다음이 적용된다:
Figure pct00288
- 수직 루마 샘플 위치 y, clipLeftPos 및 clipRightPos에 따른 수직 샘플 위치 오프셋들 y1, y2 및 y3은 표 8-20에 명시되어 있다.
- 수평 루마 샘플 위치 x, clipLeftPos 및 clipRightPos에 따른 수평 샘플 위치 오프셋들 x1, x2 및 x3은 표 8-21에 명시되어 있다.
...
8.8.5.3 루마 샘플들에 대한 ALF 전치 및 필터 인덱스에 대한 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 적응적 루프 필터링 프로세스 이전의 재구성된 루마 픽처 샘플 어레이 recPictureL.
이 프로세스의 출력들은 다음과 같다.
- 분류 필터 인덱스 어레이 filtIdx[ x ][ y ](단, x, y = 0..CtbSizeY  1),
- 전치 인덱스 어레이 transposeIdx[ x ][ y ](단, x, y = 0..CtbSizeY  1).
루마 샘플들의 주어진 어레이 recPicture 내의 대응하는 루마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx + i, vy + j )(단, i, j = 2..5임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00289
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00290
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00291
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00292
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 6보다 작은 경우, 다음이 적용된다:
Figure pct00293
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00294
- 변수들 clipLeftPos, clipRightPos, clipTopPos , [[및]] clipBottomPos , clipTopLeftFlag , clipTopRightFlag , clipBottomLeftFlag 및 clipBottomRightFlag 는 ( xCtb, yCtb ) 및 ( x, y )를 입력들로 하여 8.8.5.5 절에 명시된 바와 같은 ALF 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- clipTopPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00295
- clipBottomPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00296
- clipLeftPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00297
- clipRightPos가 128과 동일하지 않은 경우, 다음이 적용된다:
Figure pct00298
- clipTopLeftFlag가 참과 동일한 경우, (h x + i < xCtb) && (v y + j < yCtb)이면 다음이 적용된다:
Figure pct00299
- clipTopRightFlag가 참과 동일한 경우, (h x + i >= xCtb + CtbLog2SizeY) && (v y + j < yCtb)이면 다음이 적용된다:
Figure pct00300
- clipBottomLeftFlag가 참과 동일한 경우, (h x + i < xCtb) && (v y + j >= yCtb + CtbLog2SizeY)이면 다음이 적용된다:
Figure pct00301
- clipBottomRightFlag가 참과 동일한 경우, (h x + i >= xCtb + CtbLog2SizeY) && (v y + j >= yCtb + CtbLog2SizeY)이면 다음이 적용된다:
Figure pct00302
분류 필터 인덱스 어레이 filtIdx 및 전치 인덱스 어레이 transposeIdx는 다음과 같은 순서의 단계들에 의해 도출된다:
1. 변수들 filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ](단, x, y =  2..CtbSizeY + 1)가 다음과 같이 도출된다:
- x와 y 양쪽 모두가 짝수인 경우 또는 x와 y 양쪽 모두가 짝수가 아닌 경우, 다음이 적용된다:
Figure pct00303
- 그렇지 않은 경우, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] 및 filtD1[ x ][ y ]가 0과 동일하도록 설정된다.
...
8.8.5.3 크로마 샘플들에 대한 코딩 트리 블록 필터링 프로세스
이 프로세스의 입력들은 다음과 같다:
- 적응적 루프 필터링 프로세스 이전의 재구성된 크로마 픽처 샘플 어레이 recPicture,
- 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture,
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 크로마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 크로마 위치 ( xCtbC, yCtbC ).
- 대안 크로마 필터 인덱스 altIdx.
이 프로세스의 출력은 수정된 필터링된 재구성된 크로마 픽처 샘플 어레이 alfPicture이다.
현재 크로마 코딩 트리 블록의 폭 및 높이 ctbWidthC 및 ctbHeightC는 다음과 같이 도출된다:
Figure pct00304
필터링된 재구성된 크로마 샘플들 alfPicture[ x ][ y ]의 도출을 위해, 현재 크로마 코딩 트리 블록 recPicture[ x ][ y ] 내의 각각의 재구성된 크로마 샘플은 다음과 같이 필터링되며, 단, x = 0..ctbWidthC  1, y = 0..ctbHeightC  1이다:
- 크로마 샘플들의 주어진 어레이 recPicture 내의 대응하는 크로마 샘플들 ( x, y ) 각각에 대한 위치들 ( hx + i, vy + j )(단, i, j = 2..2임)은 다음과 같이 도출된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, xCtbC + x  PpsVirtualBoundariesPosX[ n ] / SubWidthC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00305
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosX[ n ] / SubWidthC  xCtbC  x가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00306
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00307
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, yCtbC + y  PpsVirtualBoundariesPosY[ n ] / SubHeightC가 0보다 크거나 같고 2보다 작은 경우, 다음이 적용된다:
Figure pct00308
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하지 않으며, PpsVirtualBoundariesPosY[ n ] / SubHeightC  yCtbC  y가 0보다 크고 3보다 작은 경우, 다음이 적용된다:
Figure pct00309
- 그렇지 않은 경우, 다음이 적용된다:
Figure pct00310
- 변수들 clipLeftPos, clipRightPos, clipTopPos , [[및]] clipBottomPos , clipTopLeftFlag , clipTopRightFlag , clipBottomLeftFlag 및 clipBottomRightFlag 는 ( xCtbC * SubWidthC, yCtbC * SubHeightC ) 및 ( x * SubWidthC, y *SubHeightC )를 입력들로 하여 8.8.5.5 절에 명시된 바와 같은 ALF 경계 위치 도출 프로세스를 호출하는 것에 의해 도출된다.
- clipTopLeftFlag가 참과 동일한 경우, (h x + i < xCtbC) && (v y + j < yCtbC)이면 다음이 적용된다:
Figure pct00311
- clipTopRightFlag가 참과 동일한 경우, (h x + i >= xCtbC + CtbLog2SizeY / SubWidthC) && (v y + j < yCtbC)이면 다음이 적용된다:
Figure pct00312
- clipBottomLeftFlag가 참과 동일한 경우, (h x + i < xCtbC) && (v y + j >= yCtbC + CtbLog2SizeY / SubHeightC)이면 다음이 적용된다:
Figure pct00313
- clipBottomRightFlag가 참과 동일한 경우, (h x + i >= xCtbC + CtbLog2SizeY / SubWidthC) && (v y + j >= yCtbC + CtbLog2SizeY / SubHeightC)이면 다음이 적용된다:
Figure pct00314
- 변수 clipLeftPos는 clipLeftPos / SubWidthC와 동일하게 설정된다.
- 변수 clipRightPos는 clipRightPos / SubWidthC와 동일하게 설정된다.
- 변수 clipTopPos는 clipTopPos / SubHeightC와 동일하게 설정된다.
- 변수 clipBottomPos는 clipBottomPos / SubHeightC와 동일하게 설정된다.
...
8.5.5.5 ALF 경계 위치 도출 프로세스
이 프로세스의 입력들은 다음과 같다:
- 현재 픽처의 좌측 상단 샘플을 기준으로 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 지정하는 루마 위치 ( xCtb, yCtb ).
- 현재 루마 코딩 트리 블록의 좌측 상단 샘플을 기준으로 현재 샘플을 지정하는 루마 위치 (x, y).
이 프로세스의 출력은 다음과 같다:
- 좌측 수직 경계 위치 clipLeftPos,
- 우측 수직 경계 위치 clipRightPos,
- 위쪽 수평 경계 위치 clipTopPos,
- 아래쪽 수평 경계 위치 clipBottomPos,
- 좌측 상단 경계 플래그 clipTopLeftFlag.
- 우측 상단 경계 플래그 clipTopRightFlag.
- 좌측 하단 경계 플래그 clipBottomLeftFlag.
- 우측 하단 경계 플래그 clipBottomRightFlag.
변수들 clipLeftPos, clipRightPos, clipTopPos 및 clipBottomPos는 -128과 동일하게 설정된다.
변수들 clipTopLeftFlag, clipTopRightFlag, clipBottomLeftFlag 및 clipBottomRightFlag는 거짓과 동일하게 설정된다.
변수 clipTopPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 y  ( CtbSizeY  4 )가 0보다 크거나 같은 경우, 변수 clipTopPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하며, yCtb + y  PpsVirtualBoundariesPosY[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00315
- 그렇지 않고, y가 3보다 작고, 현재 코딩 트리 블록의 상단 경계가 픽처의 상단 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipTopPos는 yCtb와 동일하게 설정된다:
- 현재 코딩 트리 블록의 상단 경계가 브릭의 상단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 상단 경계가 슬라이스의 상단 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 상단 경계가 서브픽처의 상단 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipBottomPos는 다음과 같이 수정된다:
- 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니고 CtbSizeY - 4 - y가 0보다 크고 4보다 작은 경우, 변수 clipBottomPos는 yCtb + CtbSizeY - 4와 동일하게 설정된다.
- 그렇지 않고, pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_hor_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosY[ n ] % CtbSizeY가 0과 동일하고, PpsVirtualBoundariesPosY[ n ]이 pic_height_in_luma_samples  1 또는 0과 동일하지 않으며, PpsVirtualBoundariesPosY[ n ]  yCtb  y가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00316
- 그렇지 않고, CtbSizeY - y가 4보다 작고, 현재 코딩 트리 블록의 하단 경계가 픽처의 하단 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipBottomPos는 yCtb + CtbSizeY와 동일하게 설정된다:
- 현재 코딩 트리 블록의 하단 경계가 브릭의 하단 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 하단 경계가 슬라이스의 하단 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 하단 경계가 서브픽처의 하단 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipLeftPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries - 1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, xCtb + x - PpsVirtualBoundariesPosX[ n ]이 0보다 크거나 같고 3보다 작은 경우, 다음이 적용된다:
Figure pct00317
- 그렇지 않고, x가 3보다 작고, 현재 코딩 트리 블록의 좌측 경계가 픽처의 좌측 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipLeftPos는 xCtb와 동일하게 설정된다:
- 현재 코딩 트리 블록의 좌측 경계가 브릭의 좌측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 슬라이스의 좌측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 좌측 경계가 서브픽처의 좌측 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipRightPos는 다음과 같이 수정된다:
- pps_loop_filter_across_virtual_boundaries_disabled_flag가 1과 동일하고, 임의의 n = 0..pps_num_ver_virtual_boundaries  1에 대해 PpsVirtualBoundariesPosX[ n ] % CtbSizeY가 0과 동일하며, PpsVirtualBoundariesPosX[ n ]  xCtb  x가 0보다 크고 4보다 작은 경우, 다음이 적용된다:
Figure pct00318
- 그렇지 않고, CtbSizeY - x가 4보다 작고, 현재 코딩 트리 블록의 우측 경계가 픽처의 우측 경계가 아니며, 다음 조건들 중 하나 이상이 참인 경우, 변수 clipRightPos는 xCtb + CtbSizeY와 동일하게 설정된다:
- 현재 코딩 트리 블록의 우측 경계가 브릭의 우측 경계이고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 슬라이스의 우측 경계이고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 현재 코딩 트리 블록의 우측 경계가 서브픽처의 우측 경계이고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipTopLeftFlag는 다음과 같이 수정된다:
- 다음 조건들 중 하나 이상이 참인 경우, 변수 clipTopLeftFlag는 참과 동일하게 설정된다:
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 브릭들에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스들에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 서브픽처들에 있고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipTopRightFlag는 다음과 같이 수정된다:
- 다음 조건들 중 하나 이상이 참인 경우, 변수 clipTopRightFlag는 참과 동일하게 설정된다:
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 브릭들에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스들에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb - CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 서브픽처들에 있고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipBottomLeftFlag는 다음과 같이 수정된다:
- 다음 조건들 중 하나 이상이 참인 경우, 변수 clipBottomLeftFlag는 참과 동일하게 설정된다:
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 브릭들에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스들에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb - CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 서브픽처들에 있고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
변수 clipBottomRightFlag는 다음과 같이 수정된다:
- 다음 조건들 중 하나 이상이 참인 경우, 변수 clipBottomRightFlag는 참과 동일하게 설정된다:
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 브릭들에 있고, loop_filter_across_bricks_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 슬라이스들에 있고, loop_filter_across_slices_enabled_flag가 0과 동일한 경우.
- 위치 (xCtb, yCtb)를 커버하는 코딩 트리 블록과 위치 (xCtb + CtbSizeY, yCtb + CtbSizeY)를 커버하는 코딩 트리 블록이 상이한 서브픽처들에 있고, loop_filter_across_subpic_enabled_flag[ SubPicIdx ]가 0과 동일한 경우.
도 22는 비디오 프로세싱 장치(2200)의 블록 다이어그램이다. 장치(2200)는 본 명세서에 설명된 방법들 중 하나 이상을 구현하는 데 사용될 수 있다. 장치(2200)는 스마트폰, 태블릿, 컴퓨터, IoT(Internet of Things) 수신기 등에 구체화될 수 있다. 장치(2200)는 하나 이상의 프로세서(2202), 하나 이상의 메모리(2204) 및 비디오 프로세싱 하드웨어(2206)를 포함할 수 있다. 프로세서(들)(2202)는 본 문서에 설명된 하나 이상의 방법을 구현하도록 구성될 수 있다. 메모리(메모리들)(2204)는 본 명세서에 설명된 방법들 및 기술들을 구현하는 데 사용되는 데이터 및 코드를 저장하는 데 사용될 수 있다. 비디오 프로세싱 하드웨어(2206)는, 하드웨어 회로로, 본 문서에 설명된 일부 기술들을 구현하는 데 사용될 수 있다. 일부 실시예들에서, 비디오 프로세싱 하드웨어(2206)는 프로세서(2202)(예를 들면, 그래픽 프로세서 유닛) 내부에 있거나 부분적으로 내부에 있을 수 있다.
일부 실시예들에서, 비디오 코딩 방법들은 도 22와 관련하여 설명된 바와 같이 하드웨어 플랫폼 상에서 구현되는 장치를 사용하여 구현될 수 있다.
도 23은 예시적인 비디오 프로세싱 방법(2300)의 플로차트이다. 이 방법은, 비디오의 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환을 위해, 변환 동안 사용할 하나 이상의 보간 필터를 결정하는 단계(2302) - 하나 이상의 보간 필터는 비디오에 대한 다수의 보간 필터들로부터의 것임 - 및 하나 이상의 보간 필터를 사용하여 변환을 수행하는 단계(2304)를 포함한다.
본 문서에 설명된 다양한 해결책들 및 실시예들은 해결책들의 리스트를 사용하여 더 설명된다.
섹션 4, 항목 1은 이하의 해결책들의 추가적인 예들을 제공한다.
1. 비디오 프로세싱 방법으로서, 비디오 픽처의 비디오 블록들과 그의 비트스트림 표현 간의 변환을 수행하는 단계를 포함하며, 비디오 블록들은 코딩 트리 블록들의 논리적 그룹화들을 사용하여 프로세싱되고, 코딩 트리 블록들은 하단 코딩 트리 블록의 하단 경계가 비디오 픽처의 하단 경계 외부에 있는지 여부에 기초하여 프로세싱되는, 방법.
2. 해결책 1의 방법으로서, 코딩 트리 블록을 프로세싱하는 단계는 코딩 트리 블록 내의 샘플들을 사용하여 코딩 트리 블록의 샘플 값들의 적응적 루프 필터링을 수행하는 단계를 포함하는, 방법.
3. 해결책 1의 방법으로서, 코딩 트리 블록을 프로세싱하는 단계는 가상 경계들에 따라 코딩 트리 블록을 2 개의 부분으로 분할하는 것을 디스에이블시키는 것에 의해 코딩 트리 블록의 샘플 값들의 적응적 루프 필터링을 수행하는 단계를 포함하는, 방법.
섹션 4, 항목 2는 이하의 해결책들의 추가적인 예들을 제공한다.
4. 비디오 프로세싱 방법으로서, 현재 비디오 블록의 코딩 트리 블록의 조건에 기초하여, 인루프 필터링 동안 가상 샘플들의 사용 상태를 결정하는 단계; 및 가상 샘플들의 사용 상태에 따라 비디오 블록과 비디오 블록의 비트스트림 표현 간의 변환을 수행하는 단계를 포함하는, 방법.
5. 해결책 4의 방법으로서, 사용 상태의 논리적 참 값은 현재 비디오 블록이 가상 경계에 의해 적어도 2 개의 부분으로 분할되고 한 부분에서의 샘플들을 필터링하는 것이 다른 부분으로부터의 정보를 활용하도록 허용되지 않는다는 것을 나타내는, 방법.
6. 해결책 4의 방법으로서, 사용 상태의 논리적 참 값은 가상 샘플들이 인루프 필터링 동안 사용된다는 것을 나타내고, 인루프 필터링은 현재 비디오 블록의 재구성된 샘플들의 수정된 값들을 사용하여 수행되는, 방법.
7. 해결책 4의 방법으로서, 사용 상태의 논리적 거짓 값은 블록에서의 샘플들을 필터링하는 것이 동일한 블록에서의 정보를 활용하도록 허용된다는 것을 나타내는, 방법.
8. 해결책 4의 방법으로서, 사용 상태의 논리적 참 값은 인루프 필터링이 재구성된 샘플들을 더 수정하지 않고 현재 비디오 블록의 재구성된 샘플들에 대해 수행된다는 것을 나타내는, 방법.
9. 해결책 4 내지 해결책 8 중 어느 하나의 방법으로서, 조건은 코딩 트리 블록이 특정 크기를 갖는 것으로 인해 사용 상태를 논리적 거짓 값으로 설정하도록 지정하는, 방법.
10. 해결책 4 내지 해결책 8 중 어느 하나의 방법으로서, 조건은 코딩 트리 블록이 특정 크기보다 큰 크기를 갖는 것으로 인해 사용 상태를 논리적 거짓 값으로 설정하도록 지정하는, 방법.
11. 해결책 4 내지 해결책 8 중 어느 하나의 방법으로서, 트리 블록이 특정 크기보다 작은 크기를 갖는
섹션 4, 항목 3은 이하의 해결책들의 추가적인 예들을 제공한다.
12. 해결책 5의 방법으로서, 조건은 현재 비디오 블록의 하단 경계가 비디오 픽처보다 작은 비디오 유닛의 하단 경계인지 또는 현재 비디오 블록의 하단 경계가 가상 경계인지에 의존하는, 방법.
13. 해결책 12의 방법으로서, 조건은 현재 비디오 블록의 하단 경계가 슬라이스 또는 타일 또는 브릭 경계의 하단 경계인지 여부에 의존하는, 방법.
14. 해결책 12의 방법으로서, 조건은 현재 비디오 블록의 하단 경계가 슬라이스 또는 타일 또는 브릭 경계의 하단 경계일 때 사용 상태를 논리적 참 값으로 설정하도록 지정하는, 방법.
15. 해결책 4 내지 해결책 12 중 어느 하나의 방법으로서, 조건은 현재 비디오 블록의 하단 경계가 픽처 경계의 하단 경계이거나 픽처 경계의 하단 경계 외부에 있을 때 사용 상태를 논리적 거짓 값으로 설정하도록 지정하는, 방법.
섹션 4, 항목 4는 이하의 해결책들의 추가적인 예들을 제공한다.
16. 비디오 프로세싱 방법으로서, 하나 이상의 비디오 슬라이스 또는 비디오 브릭으로 논리적으로 그룹화되는 비디오 픽처와 비디오 픽처의 비트스트림 표현 간의 변환 동안, 적응적 루프 필터 프로세스에서 다른 슬라이스 또는 브릭 내의 샘플들의 사용을 디스에이블시키기로 결정하는 단계; 및 결정하는 단계에 따라 변환을 수행하는 단계를 포함하는, 방법.
섹션 4, 항목 5는 이하의 해결책들의 추가적인 예들을 제공한다.
17. 비디오 프로세싱 방법으로서, 비디오 픽처의 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안, 현재 비디오 블록이 비디오 픽처의 비디오 유닛의 경계에 위치하는 샘플들을 포함한다고 결정하는 단계; 및 결정하는 단계에 기초하여 변환을 수행하는 단계를 포함하며, 변환을 수행하는 단계는 비디오 픽처 내의 모든 경계 유형들에 대해 동일한 통합된 방법을 사용하여 인루프 필터링 프로세스를 위한 가상 샘플들을 생성하는 단계를 포함하는, 방법.
18. 해결책 17의 방법으로서, 비디오 유닛은 슬라이스 또는 타일 또는 360도 비디오인, 방법.
19. 해결책 17의 방법으로서, 인루프 필터링은 적응적 루프 필터링을 포함하는, 방법.
20. 해결책 17 내지 해결책 19 중 어느 하나의 방법으로서, 통합된 방법은 양측 패딩 방법인, 방법.
21. 해결책 17 내지 해결책 20 중 어느 하나의 방법으로서, 통합된 방법은 제1 라인 아래의 샘플들에 액세스하는 것이 허용되지 않고 패딩이 제1 라인 아래의 샘플들에 대한 가상 샘플들을 생성하는 데 활용될 때, 제2 라인 위의 샘플들에 액세스하는 것이 또한 허용되지 않도록 설정되고 패딩이 제2 라인 위의 샘플들에 대한 가상 샘플들을 생성하는 데 활용되는 것인, 방법.
22. 해결책 17 내지 해결책 20 중 어느 하나의 방법으로서, 통합된 방법은 제1 라인 위의 샘플들에 액세스하는 것이 허용되지 않고 패딩이 제1 라인 위의 샘플들에 대한 가상 샘플들을 생성하는 데 활용될 때, 제2 라인 아래의 샘플들에 액세스하는 것이 또한 허용되지 않도록 설정되고 패딩이 제2 라인 아래의 샘플들에 대한 가상 샘플들을 생성하는 데 활용되는 것인, 방법.
23. 해결책 21 또는 해결책 22의 방법으로서, 제1 라인과 필터링될 현재 샘플이 위치하는 현재 라인 사이의 거리와 제2 라인과 제1 라인 사이의 거리는 동일한, 방법.
섹션 4, 항목 6은 이하의 해결책들의 추가적인 예들을 제공한다.
24. 비디오 프로세싱 방법으로서, 비디오 픽처의 현재 비디오 블록과 그의 비트스트림 표현 간의 변환 동안, 변환 동안 비디오 픽처에 대해 이용 가능한 다수의 적응적 루프 필터(ALF) 샘플 선택 방법들 중 하나를 적용하기로 결정하는 단계; 및 다수의 ALF 샘플 선택 방법들 중 하나를 적용하는 것에 의해 변환을 수행하는 단계를 포함하는, 방법.
25. 해결책 24의 방법으로서, 다수의 ALF 샘플 선택 방법들은 변환 동안 인루프 필터가 현재 비디오 블록에 적용되기 전에 샘플들이 선택되는 제1 방법 및 변환 동안 인루프 필터가 현재 비디오 블록에 적용된 후에 샘플들이 선택되는 제2 방법을 포함하는, 방법.
섹션 4, 항목 7은 이하의 해결책들의 추가적인 예들을 제공한다.
26. 비디오 프로세싱 방법으로서, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은 비디오 픽처의 가상 파이프라인 데이터 유닛(VPDU)에 걸쳐 있는 샘플들을 사용하는 것을 디스에이블시킴 -, 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함하는, 방법.
27. 해결책 26의 방법으로서, VPDU는 고정된 크기를 갖는 비디오 픽처의 영역에 대응하는, 방법.
28. 해결책 26 또는 해결책 27의 방법으로서, 경계 규칙은 디스에이블된 샘플들 대신에 인루프 필터링을 위해 가상 샘플들을 사용하도록 더 지정하는, 방법.
29. 해결책 28의 방법으로서, 가상 샘플들은 패딩에 의해 생성되는, 방법.
섹션 4, 항목 8은 이하의 해결책들의 추가적인 예들을 제공한다.
30. 비디오 프로세싱 방법으로서, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 비디오 유닛 경계에 걸쳐 있는 현재 비디오 블록의 위치들에 대해, 패딩을 사용하지 않고 생성되는 샘플들을 사용하도록 지정함 -; 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함하는, 방법.
31. 해결책 30의 방법으로서, 샘플들이 양측 패딩 기술을 사용하여 생성되는, 방법.
32. 해결책 30의 방법으로서, 인루프 필터링 동작은 인루프 필터링 동작 동안 대칭적으로 위치한 샘플들에 대해 동일한 가상 샘플 생성 기술을 사용하는 것을 포함하는, 방법.
33. 해결책 30 내지 해결책 32 중 어느 하나의 방법으로서, 현재 비디오 블록의 샘플들에 대한 인루프 필터링 동작은 인루프 필터링을 적용하기 전에 현재 비디오 블록의 샘플들의 리셰이핑을 수행하는 것을 포함하는, 방법.
섹션 4, 항목 9는 이하의 해결책들의 추가적인 예들을 제공한다.
34. 비디오 프로세싱 방법으로서, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 인루프 필터링 동작을 위해, 인루프 필터링 동안 사용되는 현재 비디오 블록의 샘플들이 비디오 픽처의 비디오 유닛의 경계에 걸쳐 있지 않도록 하는 치수들을 갖는 필터를 선택하는 것을 지정함 -; 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함하는, 방법.
섹션 4, 항목 10은 이하의 해결책들의 추가적인 예들을 제공한다.
35. 비디오 프로세싱 방법으로서, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은, 인루프 필터링 동작을 위해, 패딩된 샘플들이 인루프 필터링에 필요한지 여부에 기초하여 클리핑 파라미터들 또는 필터 계수들을 선택하는 것을 지정함 -; 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함하는, 방법.
36. 해결책 35의 방법으로서, 클리핑 파라미터들 또는 필터 계수들은 비트스트림 표현에 포함되는, 방법.
섹션 4, 항목 11은 이하의 해결책들의 추가적인 예들을 제공한다.
37. 비디오 프로세싱 방법으로서, 경계 규칙에 기초하여, 현재 비디오 블록과 현재 비디오 블록의 비트스트림 표현 간의 변환 동안 비디오 픽처의 현재 비디오 블록의 샘플들에 대해 인루프 필터링 동작을 수행하는 단계 - 경계 규칙은 현재 비디오 블록의 색상 성분 아이덴티티에 의존함 -; 및 인루프 필터링 동작의 결과를 사용하여 변환을 수행하는 단계를 포함하는, 방법.
38. 해결책 37의 방법으로서, 경계 규칙이 루마 및/또는 상이한 색상 성분들에 대해 상이한, 방법.
39. 해결책 1 내지 해결책 38 중 어느 하나의 방법으로서, 변환은 현재 비디오 블록을 비트스트림 표현으로 인코딩하는 것을 포함하는, 방법.
40. 해결책 1 내지 해결책 38 중 어느 하나의 방법으로서, 변환은 현재 비디오 블록의 샘플 값들을 생성하기 위해 비트스트림 표현을 디코딩하는 것을 포함하는, 방법.
41. 해결책 1 내지 해결책 38 중 어느 하나 이상에 기재된 방법을 구현하도록 구성된 프로세서를 포함하는 비디오 인코딩 장치.
42. 해결책 1 내지 해결책 38 중 어느 하나 이상에 기재된 방법을 구현하도록 구성된 프로세서를 포함하는 비디오 디코딩 장치.
43. 코드가 저장된 컴퓨터 판독 가능 매체로서, 코드는, 프로세서에 의한 실행 시에, 프로세서로 하여금 해결책 1 내지 해결책 38 중 어느 하나 이상에 기재된 방법을 구현하게 하는, 컴퓨터 판독 가능 매체.
도 31은 본 명세서에 개시된 다양한 기술들이 구현될 수 있는 예시적인 비디오 프로세싱 시스템(3100)을 도시하는 블록 다이어그램이다. 다양한 구현들은 시스템(3100)의 컴포넌트들의 일부 또는 전부를 포함할 수 있다. 시스템(3100)은 비디오 콘텐츠를 수신하기 위한 입력(3102)을 포함할 수 있다. 비디오 콘텐츠는 원시 또는 압축되지 않은 포맷, 예를 들면, 8 또는 10 비트 다중 성분 픽셀 값들로 수신될 수 있거나, 또는 압축된 또는 인코딩된 포맷으로 되어 있을 수 있다. 입력(3102)은 네트워크 인터페이스, 주변기기 버스 인터페이스, 또는 스토리지 인터페이스를 나타낼 수 있다. 네트워크 인터페이스의 예들은 이더넷, PON(passive optical network) 등과 같은 유선 인터페이스들 및 Wi-Fi 또는 셀룰러 인터페이스들과 같은 무선 인터페이스들을 포함한다.
시스템(3100)은 본 문서에 설명된 다양한 코딩 또는 인코딩 방법들을 구현할 수 있는 코딩 컴포넌트(3104)를 포함할 수 있다. 코딩 컴포넌트(3104)는 비디오의 코딩된 표현을 생성하기 위해 입력(3102)으로부터 코딩 컴포넌트(3104)의 출력으로의 비디오의 평균 비트레이트를 감소시킬 수 있다. 따라서 코딩 기술들은 때때로 비디오 압축 또는 비디오 트랜스코딩 기술들이라고 불린다. 코딩 컴포넌트(3104)의 출력은 저장되거나, 컴포넌트(3106)에 의해 표현된 바와 같은, 연결된 통신을 통해 전송될 수 있다. 입력(3102)에 수신되는 비디오의 저장된 또는 통신된 비트스트림(또는 코딩된) 표현은 디스플레이 인터페이스(3110)로 송신되는 픽셀 값들 또는 디스플레이 가능한 비디오를 생성하기 위해 컴포넌트(3108)에 의해 사용될 수 있다. 비트스트림 표현으로부터 사용자가 볼 수 있는 비디오를 생성하는 프로세스는 때때로 비디오 압축 해제라고 불린다. 게다가, 특정 비디오 프로세싱 동작들이 "코딩" 동작들 또는 툴들이라고 지칭되지만, 코딩 툴들 또는 동작들이 인코더에서 사용되고 코딩의 결과들을 반대로 하는 대응하는 디코딩 툴들 또는 동작들은 디코더에 의해 수행될 것임이 이해될 것이다.
주변기기 버스 인터페이스 또는 디스플레이 인터페이스의 예들은 USB(universal serial bus) 또는 HDMI(high definition multimedia interface) 또는 Displayport 등을 포함할 수 있다. 스토리지 인터페이스들의 예들은 SATA(serial advanced technology attachment), PCI, IDE 인터페이스 등을 포함한다. 본 문서에서 설명되는 기술들은 디지털 데이터 프로세싱 및/또는 비디오 디스플레이를 수행할 수 있는 모바일 폰들, 랩톱들, 스마트폰들 또는 다른 디바이스들과 같은 다양한 전자 디바이스들에서 구체화될 수 있다.
도 32는 본 기술에 따른 비디오 프로세싱 방법(3200)의 플로차트 표현이다. 방법(3200)은, 동작(3210)에서, 비디오의 현재 비디오 유닛과 비디오의 비트스트림 표현 사이의 변환을 위해, 현재 블록의 제2 이웃 영역의 정보와 독립적으로 변환의 코딩 프로세스를 위한 현재 블록의 제1 이웃 영역 내의 하나 이상의 샘플의 이용 가능성을 결정하는 단계를 포함한다. 제2 이웃 영역은 제1 이웃 영역에 인접해 있다. 하나 이상의 샘플은 이용 불가능한 것으로 결정되는 경우에 패딩된다. 코딩 프로세스는 적응적 루프 필터(ALF) 툴을 포함하고 ALF 툴은 ALF 분류 프로세스 및/또는 ALF 필터링 프로세스를 포함한다. 방법(3200)은, 동작(3220)에서, 결정에 기초하여 변환을 수행하는 단계를 또한 포함한다.
일부 실시예들에서, 제1 이웃 영역은 현재 블록의 좌측 위쪽 영역을 포함하고, 여기서 제2 이웃 영역은 현재 블록 위쪽의 영역 또는 현재 블록의 좌측에 위치되는 영역을 포함한다. 일부 실시예들에서, 좌측 위쪽 영역 내의 하나 이상의 샘플은 코딩 프로세스에 이용 불가능한 것으로 인해 패딩되고, 현재 블록 위쪽의 영역 내의 샘플들은 코딩 프로세스에 이용 가능한 것으로 결정된다. 일부 실시예들에서, 좌측 위쪽 영역 내의 하나 이상의 샘플은 코딩 프로세스에 이용 가능하고, 현재 블록 위쪽의 영역 내의 샘플들은 코딩 프로세스에 이용 불가능한 것으로 인해 패딩된다.
일부 실시예들에서, 제1 이웃 영역은 현재 블록의 우측 아래쪽 영역을 포함하고, 제2 이웃 영역은 현재 블록 아래쪽의 영역 또는 현재 블록의 우측에 위치되는 영역을 포함한다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 우측 위쪽 영역을 포함하고, 제2 이웃 영역은 현재 비디오 유닛 위쪽의 영역 또는 현재 블록의 우측에 위치되는 영역을 포함한다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 좌측 아래쪽 영역을 포함하고, 제2 이웃 영역은 현재 블록 아래쪽의 영역 또는 현재 블록의 좌측에 위치되는 영역을 포함한다.
일부 실시예들에서, 제1 이웃 영역 내의 하나 이상의 샘플은 이용 불가능한 것으로 결정되고, 제2 이웃 영역과 현재 블록이 동일한 비디오 유닛에 있는 경우에 제2 이웃 영역 내의 하나 이상의 샘플은 이용 가능한 것으로 결정된다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 좌측 위쪽 또는 우측 위쪽 영역이고, 제2 이웃 영역은 현재 블록 위쪽의 영역이다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 좌측 아래쪽 또는 우측 아래쪽 영역이고, 제2 이웃 영역은 현재 블록 아래쪽의 영역이다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 좌측 위쪽 또는 좌측 아래쪽 영역이고, 제2 이웃 영역은 현재 블록 좌측의 영역이다. 일부 실시예들에서, 제1 이웃 영역은 현재 블록의 우측 위쪽 또는 우측 아래쪽 영역이고, 제2 이웃 영역은 현재 블록 우측의 영역이다. 일부 실시예들에서, 현재 블록은 코딩 트리 유닛을 포함한다.
도 33은 본 기술에 따른 비디오 프로세싱 방법(3300)의 플로차트 표현이다. 방법(3300)은, 동작(3310)에서, 비디오의 현재 비디오 유닛과 비디오의 비트스트림 표현 사이의 변환을 위해, (1) K 개의 영역 내의 K 개의 대표 샘플 중 M 개가 현재 비디오 유닛과 상이한 비디오 유닛들에 있고, (2) 필터링 동작이 비디오의 다수의 비디오 유닛들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는 경우에, K 개의 영역 내의 적어도 하나의 샘플이 필터링 동작에 이용 불가능하다고 결정하는 단계를 포함하며, 여기서 M 및 K는 정수들이다. 방법(3300)은, 동작(3330)에서, 결정에 기초하여 변환을 수행하는 단계를 또한 포함한다.
일부 실시예들에서, M = 1이고 K = 2이다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역 및 우측 위쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역 및 좌측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 우측 위쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 아래쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함한다.
일부 실시예들에서,M = 1, 2, 또는 3이고, 여기서 K = 3이다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 및 좌측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함한다.
일부 실시예들에서,M = 1, 2, 또는 3이고, 여기서 K = 4이다. 일부 실시예들에서, K 개의 이웃 영역은 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함한다.
일부 실시예들에서, M 개의 대표 샘플은 K 개의 대표 샘플 중 N 개를 검사하는 것에 기초하여 현재 비디오 유닛과 상이한 비디오 유닛들에 있는 것으로 결정되며, 여기서 M ≤ N ≤ K이다. 일부 실시예들에서, N = M이고, K 개의 대표 샘플 중 M 개의 대표 샘플만이 검사된다. 일부 실시예들에서, M = 1이고 K = 2인 경우에, K 개의 영역은 현재 비디오 유닛의 좌측 위쪽 이웃 영역 및 우측 위쪽 이웃 영역을 포함한다. 일부 실시예들에서, 좌측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 우측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, M = 1이고 K = 2인 경우에, K 개의 영역은 현재 비디오 유닛의 좌측 아래쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 우측 아래쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, M = 1이고 K = 2인 경우에, K 개의 영역은 현재 비디오 유닛의 좌측 위쪽 이웃 영역 및 좌측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, 좌측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, M = 1이고 K = 2인 경우에, K 개의 영역은 현재 비디오 유닛의 우측 위쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, 우측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 우측 아래쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, M = 1이고 K = 4인 경우에, K 개의 영역은 현재 비디오 유닛의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함한다. 일부 실시예들에서, 좌측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 우측 위쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사된다. 일부 실시예들에서, 우측 아래쪽 이웃 영역 내의 샘플들만이 검사된다.
일부 실시예들에서, 한 영역이 현재 비디오 유닛과 상이한 슬라이스에 위치하고 신택스 요소가 필터링 동작이 상이한 슬라이스들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 해당 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주된다. 일부 실시예들에서, 한 영역이 현재 비디오 유닛과 상이한 브릭에 위치하고 신택스 요소가 필터링 동작이 상이한 브릭들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 해당 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주된다. 일부 실시예들에서, 한 영역이 현재 비디오 유닛과 상이한 서브픽처에 위치하고 신택스 요소가 필터링 동작이 상이한 서브픽처들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 해당 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주된다.
일부 실시예들에서, 변환은 비디오를 비트스트림 표현으로 인코딩하는 것을 포함한다. 일부 실시예들에서, 변환은 비트스트림 표현을 비디오로 디코딩하는 것을 포함한다.
도 34는 본 개시의 기술들을 활용할 수 있는 예시적인 비디오 코딩 시스템(100)을 예시하는 블록 다이어그램이다.
도 34에 도시된 바와 같이, 비디오 코딩 시스템(100)은 소스 디바이스(110) 및 목적지 디바이스(120)를 포함할 수 있다. 비디오 인코딩 디바이스라고 지칭될 수 있는 소스 디바이스(110)는 인코딩된 비디오 데이터를 생성한다. 비디오 디코딩 디바이스라고 지칭될 수 있는 목적지 디바이스(120)는 소스 디바이스(110)에 의해 생성되는 인코딩된 비디오 데이터를 디코딩할 수 있다.
소스 디바이스(110)는 비디오 소스(112), 비디오 인코더(114), 및 입출력(I/O) 인터페이스(116)를 포함할 수 있다.
비디오 소스(112)는 비디오 캡처 디바이스와 같은 소스, 비디오 콘텐츠 제공자로부터 비디오 데이터를 수신하기 위한 인터페이스, 및/또는 비디오 데이터를 생성하기 위한 컴퓨터 그래픽 시스템, 또는 그러한 소스들의 조합을 포함할 수 있다. 비디오 데이터는 하나 이상의 픽처를 포함할 수 있다. 비디오 인코더(114)는 비디오 소스(112)로부터의 비디오 데이터를 인코딩하여 비트스트림을 생성한다. 비트스트림은 비디오 데이터의 코딩된 표현을 형성하는 비트 시퀀스를 포함할 수 있다. 비트스트림은 코딩된 픽처들 및 관련 데이터를 포함할 수 있다. 코딩된 픽처는 픽처의 코딩된 표현이다. 관련 데이터는 시퀀스 파라미터 세트들, 픽처 파라미터 세트들, 및 다른 신택스 구조들을 포함할 수 있다. I/O 인터페이스(116)는 변조기/복조기(모뎀) 및/또는 송신기를 포함할 수 있다. 인코딩된 비디오 데이터는 I/O 인터페이스(116)를 통해 네트워크(130a)를 거쳐 목적지 디바이스(120)로 직접 전송될 수 있다. 인코딩된 비디오 데이터는 또한 목적지 디바이스(120)에 의한 액세스를 위해 저장 매체/서버(130b)에 저장될 수 있다.
목적지 디바이스(120)는 I/O 인터페이스(126), 비디오 디코더(124), 및 디스플레이 디바이스(122)를 포함할 수 있다.
I/O 인터페이스(126)는 수신기 및/또는 모뎀을 포함할 수 있다. I/O 인터페이스(126)는 소스 디바이스(110) 또는 저장 매체/서버(130b)로부터 인코딩된 비디오 데이터를 취득할 수 있다. 비디오 디코더(124)는 인코딩된 비디오 데이터를 디코딩할 수 있다. 디스플레이 디바이스(122)는 디코딩된 비디오 데이터를 사용자에게 디스플레이할 수 있다. 디스플레이 디바이스(122)는 목적지 디바이스(120)와 통합될 수 있거나, 또는 외부 디스플레이 디바이스와 인터페이싱하도록 구성된 목적지 디바이스(120)의 외부에 있을 수 있다.
비디오 인코더(114) 및 비디오 디코더(124)는, HEVC(High Efficiency Video Coding) 표준, VVC(Versatile Video Coding) 표준 및 다른 현재 및/또는 추가 표준들과 같은, 비디오 압축 표준에 따라 작동할 수 있다.
도 35는 도 34에 예시된 시스템(100) 내의 비디오 인코더(114)일 수 있는, 비디오 인코더(200)의 예를 예시하는 블록 다이어그램이다.
비디오 인코더(200)는 본 개시의 기술들의 일부 또는 전부를 수행하도록 구성될 수 있다. 도 35의 예에서, 비디오 인코더(200)는 복수의 기능 컴포넌트들을 포함한다. 본 개시에 설명된 기술들은 비디오 인코더(200)의 다양한 컴포넌트들 사이에서 공유될 수 있다. 일부 예들에서, 프로세서는 본 개시에 설명된 기술들의 일부 또는 전부를 수행하도록 구성될 수 있다.
비디오 인코더(200)의 기능 컴포넌트들은 분할 유닛(201), 모드 선택 유닛(203), 모션 추정 유닛(204), 모션 보상 유닛(205) 및 인트라 예측 유닛(206)을 포함할 수 있는 예측 유닛(202), 잔차 생성 유닛(207), 변환 유닛(208), 양자화 유닛(209), 역양자화 유닛(210), 역변환 유닛(211), 재구성 유닛(212), 버퍼(213), 및 엔트로피 인코딩 유닛(214)을 포함할 수 있다.
다른 예들에서, 비디오 인코더(200)는 보다 많은, 보다 적은 또는 상이한 기능 컴포넌트들을 포함할 수 있다. 예에서, 예측 유닛(202)은 인트라 블록 복사(intra block copy, IBC) 유닛을 포함할 수 있다. IBC 유닛은 적어도 하나의 참조 픽처가 현재 비디오 블록이 위치하는 픽처인 IBC 모드에서 예측을 수행할 수 있다.
게다가, 모션 추정 유닛(204) 및 모션 보상 유닛(205)과 같은 일부 컴포넌트들은 고도로 통합될 수 있지만, 설명의 목적을 위해 도 35의 예에서 개별적으로 표현되어 있다.
분할 유닛(201)은 픽처를 하나 이상의 비디오 블록으로 분할할 수 있다. 비디오 인코더(200) 및 비디오 디코더(300)는 다양한 비디오 블록 크기들을 지원할 수 있다.
모드 선택 유닛(203)은, 예를 들어, 오차 결과들에 기초하여, 코딩 모드들, 즉 인트라(intra) 또는 인터(inter) 중 하나를 선택할 수 있고, 결과적인 인트라 코딩된 또는 인터 코딩된 블록을 잔차 생성 유닛(207)에 제공하여 잔차 블록 데이터를 생성하도록 하고 재구성 유닛(212)에 제공하여 참조 픽처로서 사용하기 위한 인코딩된 블록을 재구성하도록 할 수 있다. 일부 예에서, 모드 선택 유닛(203)은 예측이 인터 예측 신호 및 인트라 예측 신호에 기초하는 CIIP(combination of intra and inter predication) 모드를 선택할 수 있다. 모드 선택 유닛(203)은 또한 인터 예측의 경우에 블록에 대한 모션 벡터의 분해능(예를 들면, 서브픽셀 또는 정수 픽셀 정밀도)을 선택할 수 있다.
현재 비디오 블록에 대한 인터 예측을 수행하기 위해, 모션 추정 유닛(204)은 버퍼(213)로부터의 하나 이상의 참조 프레임을 현재 비디오 블록과 비교하는 것에 의해 현재 비디오 블록에 대한 모션 정보를 생성할 수 있다. 모션 보상 유닛(205)은 현재 비디오 블록과 연관된 픽처 이외의 버퍼(213)로부터의 픽처들의 디코딩된 샘플들 및 모션 정보에 기초하여 현재 비디오 블록에 대한 예측된 비디오 블록을 결정할 수 있다.
모션 추정 유닛(204) 및 모션 보상 유닛(205)은, 예를 들어, 현재 비디오 블록이 I 슬라이스, P 슬라이스, 또는 B 슬라이스에 있는지에 따라, 현재 비디오 블록에 대해 상이한 동작들을 수행할 수 있다.
일부 예들에서, 모션 추정 유닛(204)은 현재 비디오 블록에 대한 단방향 예측을 수행할 수 있고, 모션 추정 유닛(204)은 현재 비디오 블록에 대한 참조 비디오 블록에 대해 리스트 0 또는 리스트 1의 참조 픽처들을 탐색할 수 있다. 모션 추정 유닛(204)은 이어서 참조 비디오 블록을 포함하는 리스트 0 또는 리스트 1 내의 참조 픽처를 나타내는 참조 인덱스 및 현재 비디오 블록과 참조 비디오 블록 사이의 공간적 변위를 나타내는 모션 벡터를 생성할 수 있다. 모션 추정 유닛(204)은 참조 인덱스, 예측 방향 지시자, 및 모션 벡터를 현재 비디오 블록의 모션 정보로서 출력할 수 있다. 모션 보상 유닛(205)은 현재 비디오 블록의 모션 정보가 나타내는 참조 비디오 블록에 기초하여 현재 블록의 예측된 비디오 블록을 생성할 수 있다.
다른 예들에서, 모션 추정 유닛(204)은 현재 비디오 블록에 대해 양방향 예측을 수행할 수 있고, 모션 추정 유닛(204)은 현재 비디오 블록에 대한 참조 비디오 블록에 대해 리스트 0 내의 참조 픽처들을 탐색할 수 있으며, 또한 현재 비디오 블록에 대한 다른 참조 비디오 블록에 대해 리스트 1 내의 참조 픽처들을 탐색할 수 있다. 모션 추정 유닛(204)은 이어서 참조 비디오 블록들을 포함하는 리스트 0 및 리스트 1 내의 참조 픽처들을 나타내는 참조 인덱스들 및 참조 비디오 블록들과 현재 비디오 블록 사이의 공간적 변위들을 나타내는 모션 벡터들을 생성할 수 있다. 모션 추정 유닛(204)은 현재 비디오 블록의 모션 정보로서 참조 인덱스들 및 현재 비디오 블록의 모션 벡터들을 출력할 수 있다. 모션 보상 유닛(205)은 현재 비디오 블록의 모션 정보가 나타내는 참조 비디오 블록들에 기초하여 현재 비디오 블록의 예측된 비디오 블록을 생성할 수 있다.
일부 예들에서, 모션 추정 유닛(204)은 디코더의 디코딩 프로세싱을 위한 모션 정보의 전체 세트를 출력할 수 있다.
일부 예들에서, 모션 추정 유닛(204)은 현재 비디오에 대한 모션 정보의 전체 세트를 출력하지 않을 수 있다. 오히려, 모션 추정 유닛(204)은 다른 비디오 블록의 모션 정보를 참조하여 현재 비디오 블록의 모션 정보를 시그널링할 수 있다. 예를 들어, 모션 추정 유닛(204)은 현재 비디오 블록의 모션 정보가 이웃 비디오 블록의 모션 정보와 충분히 유사하다고 결정할 수 있다.
일 예에서, 모션 추정 유닛(204)은, 현재 비디오 블록과 연관된 신택스 구조에, 현재 비디오 블록이 다른 비디오 블록과 동일한 모션 정보를 갖는다는 것을 비디오 디코더(300)에 알려주는 값을 표시할 수 있다.
다른 예에서, 모션 추정 유닛(204)은, 현재 비디오 블록과 연관된 신택스 구조에서, 다른 비디오 블록 및 모션 벡터 차이(MVD)를 식별할 수 있다. 모션 벡터 차이는 현재 비디오 블록의 모션 벡터와 표시된 비디오 블록의 모션 벡터 간의 차이를 나타낸다. 비디오 디코더(300)는 표시된 비디오 블록의 모션 벡터 및 모션 벡터 차이를 이용하여 현재 비디오 블록의 모션 벡터를 결정할 수 있다.
위에서 논의된 바와 같이, 비디오 인코더(200)는 모션 벡터를 예측적으로 시그널링할 수 있다. 비디오 인코더(200)에 의해 구현될 수 있는 예측적 시그널링 기술의 두 가지 예는 AMVP(advanced motion vector predication) 및 병합 모드 시그널링을 포함한다.
인트라 예측 유닛(206)은 현재 비디오 블록에 대해 인트라 예측을 수행할 수 있다. 인트라 예측 유닛(206)이 현재 비디오 블록에 대해 인트라 예측을 수행할 때, 인트라 예측 유닛(206)은 동일한 픽처 내의 다른 비디오 블록들의 디코딩된 샘플들에 기초하여 현재 비디오 블록에 대한 예측 데이터를 생성할 수 있다. 현재 비디오 블록에 대한 예측 데이터는 예측된 비디오 블록 및 다양한 신택스 요소들을 포함할 수 있다.
잔차 생성 유닛(207)은 현재 비디오 블록으로부터 현재 비디오 블록의 예측된 비디오 블록(들)을 차감(예를 들면, 마이너스 부호로 표시됨)하는 것에 의해 현재 비디오 블록에 대한 잔차 데이터를 생성할 수 있다. 현재 비디오 블록의 잔차 데이터는 현재 비디오 블록 내의 샘플들의 상이한 샘플 성분들에 대응하는 잔차 비디오 블록들을 포함할 수 있다.
다른 예들에서, 예를 들어, 스킵 모드에서 현재 비디오 블록에 대한 현재 비디오 블록의 잔차 데이터가 없을 수 있고, 잔차 생성 유닛(207)은 차감 동작을 수행하지 않을 수 있다.
변환 프로세싱 유닛(208)은 현재 비디오 블록과 연관된 잔차 비디오 블록에 하나 이상의 변환을 적용하는 것에 의해 현재 비디오 블록에 대한 하나 이상의 변환 계수 비디오 블록을 생성할 수 있다.
변환 프로세싱 유닛(208)이 현재 비디오 블록과 연관된 변환 계수 비디오 블록을 생성한 후에, 양자화 유닛(209)은 현재 비디오 블록과 연관된 하나 이상의 양자화 파라미터(QP) 값에 기초하여 현재 비디오 블록과 연관된 변환 계수 비디오 블록을 양자화할 수 있다.
역양자화 유닛(210) 및 역변환 유닛(211)은, 제각기, 변환 계수 비디오 블록에 역양자화 및 역변환을 적용하여 변환 계수 비디오 블록으로부터 잔차 비디오 블록을 재구성할 수 있다. 재구성 유닛(212)은 버퍼(213)에 저장할 현재 블록과 연관된 재구성된 비디오 블록을 생성하기 위해 예측 유닛(202)에 의해 생성되는 하나 이상의 예측된 비디오 블록으로부터의 대응하는 샘플들에 재구성된 잔차 비디오 블록을 가산할 수 있다.
재구성 유닛(212)이 비디오 블록을 재구성한 후에, 비디오 블록에서의 비디오 블로킹 아티팩트를 감소시키기 위해 루프 필터링 동작이 수행될 수 있다.
엔트로피 인코딩 유닛(214)은 비디오 인코더(200)의 다른 기능 컴포넌트들로부터 데이터를 수신할 수 있다. 엔트로피 인코딩 유닛(214)이 데이터를 수신할 때, 엔트로피 인코딩 유닛(214)은 엔트로피 인코딩된 데이터를 생성하고 엔트로피 인코딩된 데이터를 포함하는 비트스트림을 출력하기 위해 하나 이상의 엔트로피 인코딩 동작을 수행할 수 있다.
도 36은 도 34에 예시된 시스템(100) 내의 비디오 디코더(114)일 수 있는 비디오 디코더(300)의 예를 예시하는 블록 다이어그램이다.
비디오 디코더(300)는 본 개시의 기술들의 일부 또는 전부를 수행하도록 구성될 수 있다. 도 36의 예에서, 비디오 디코더(300)는 복수의 기능 컴포넌트들을 포함한다. 본 개시에 설명된 기술들은 비디오 디코더(300)의 다양한 컴포넌트들 사이에서 공유될 수 있다. 일부 예들에서, 프로세서는 본 개시에 설명된 기술들의 일부 또는 전부를 수행하도록 구성될 수 있다.
도 36의 예에서, 비디오 디코더(300)는 엔트로피 디코딩 유닛(301), 모션 보상 유닛(302), 인트라 예측 유닛(303), 역양자화 유닛(304), 역변환 유닛(305), 및 재구성 유닛(306) 및 버퍼(307)를 포함한다. 비디오 디코더(300)는, 일부 예들에서, 비디오 인코더(200)(예를 들면, 도 35)와 관련하여 설명된 인코딩 패스(encoding pass)와 일반적으로 반대인 디코딩 패스(decoding pass)를 수행할 수 있다.
엔트로피 디코딩 유닛(301)은 인코딩된 비트스트림을 검색할 수 있다. 인코딩된 비트스트림은 엔트로피 코딩된 비디오 데이터(예를 들면, 비디오 데이터의 인코딩된 블록들)를 포함할 수 있다. 엔트로피 디코딩 유닛(301)은 엔트로피 코딩된 비디오 데이터를 디코딩할 수 있고, 엔트로피 디코딩된 비디오 데이터로부터, 모션 보상 유닛(302)은 모션 벡터, 모션 벡터 정밀도, 참조 픽처 리스트 인덱스, 및 다른 모션 정보를 포함하는 모션 정보를 결정할 수 있다. 모션 보상 유닛(302)은, 예를 들어, AMVP 및 병합 모드를 수행하는 것에 의해 그러한 정보를 결정할 수 있다.
모션 보상 유닛(302)은 모션 보상된 블록들을 생성할 수 있으며, 어쩌면 보간 필터들에 기초하여 보간을 수행할 수 있다. 사용될 보간 필터들에 대한 식별자들이 서브픽셀 정밀도와 함께 신택스 요소들에 포함될 수 있다.
모션 보상 유닛(302)은 참조 블록의 서브-정수 픽셀들에 대한 보간된 값들을 계산하기 위해 비디오 블록의 인코딩 동안 비디오 인코더(20)에 의해 사용되는 바와 같이 보간 필터들을 사용할 수 있다. 모션 보상 유닛(302)은 수신된 신택스 정보에 따라 비디오 인코더(200)에 의해 사용되는 보간 필터들을 결정할 수 있고 예측 블록들을 생성하기 위해 보간 필터들을 사용할 수 있다.
모션 보상 유닛(302)은 인코딩된 비디오 시퀀스의 프레임(들) 및/또는 슬라이스(들)를 인코딩하는 데 사용되는 블록들의 크기들, 인코딩된 비디오 시퀀스의 픽처의 각각의 매크로블록이 어떻게 분할되는지를 기술하는 분할 정보, 각각의 분할이 어떻게 인코딩되는지를 나타내는 모드들, 각각의 인터 인코딩된 블록에 대한 하나 이상의 참조 프레임(및 참조 프레임 리스트), 및 인코딩된 비디오 시퀀스를 디코딩하기 위한 다른 정보를 결정하기 위해 신택스 정보의 일부를 사용할 수 있다.
인트라 예측 유닛(303)은 공간적으로 인접한 블록들로부터 예측 블록을 형성하기 위해, 예를 들어, 비트스트림에서 수신되는 인트라 예측 모드들을 사용할 수 있다. 역양자화 유닛(303)은 비트스트림에서 제공되고 엔트로피 디코딩 유닛(301)에 의해 디코딩되는 양자화된 비디오 블록 계수들을 역양자화(inverse quantize), 즉 양자화 해제(de-quantize)한다. 역변환 유닛(303)은 역변환을 적용한다.
재구성 유닛(306)은 디코딩된 블록들을 형성하기 위해 모션 보상 유닛(202) 또는 인트라 예측 유닛(303)에 의해 생성되는 대응하는 예측 블록들과 잔차 블록들을 합산할 수 있다. 원하는 경우, 디코딩된 블록들을 필터링하여 블록성 아티팩트(blockiness artifact)를 제거하기 위해 디블로킹 필터가 또한 적용될 수 있다. 디코딩된 비디오 블록들은 이어서 버퍼(307)에 저장되고, 버퍼(307)는 후속하는 모션 보상/인트라 예측을 위한 참조 블록들을 제공하고 또한 디스플레이 디바이스 상에 제시할 디코딩된 비디오를 생성한다.
전술한 내용으로부터, 현재 개시된 기술의 특정 실시예들이 예시 목적으로 본 명세서에 설명되었지만, 본 발명의 범위를 벗어나지 않고 다양한 수정들이 이루어질 수 있다는 것이 이해될 것이다. 그에 따라, 현재 개시된 기술은 첨부된 청구항들에 의한 경우를 제외하고는 제한되지 않는다.
개시된 기술의 일부 실시예들은 비디오 프로세싱 툴 또는 모드를 인에이블시키기로 의사 결정 또는 결정하는 것을 포함한다. 예에서, 비디오 프로세싱 툴 또는 모드가 인에이블될 때, 인코더는 비디오 블록의 프로세싱에서 툴 또는 모드를 사용하거나 구현할 것이지만, 툴 또는 모드의 사용에 기초하여 결과적인 비트스트림을 반드시 수정하는 것은 아닐 수 있다. 즉, 비디오 블록으로부터 비디오의 비트스트림 표현으로의 변환은 의사 결정 또는 결정에 기초하여 비디오 프로세싱 툴 또는 모드가 인에이블될 때 이를 사용할 것이다. 다른 예에서, 비디오 프로세싱 툴 또는 모드가 인에이블될 때, 디코더는 비디오 프로세싱 툴 또는 모드에 기초하여 비트스트림이 수정되었다는 지식을 사용하여 비트스트림을 프로세싱할 것이다. 즉, 비디오의 비트스트림 표현으로부터 비디오 블록으로의 변환은 의사 결정 또는 결정에 기초하여 인에이블된 비디오 프로세싱 툴 또는 모드를 사용하여 수행될 것이다.
개시된 기술의 일부 실시예들은 비디오 프로세싱 툴 또는 모드를 디스에이블시키기로 의사 결정 또는 결정하는 것을 포함한다. 예에서, 비디오 프로세싱 툴 또는 모드가 디스에이블될 때, 인코더는 비디오 블록을 비디오의 비트스트림 표현으로 변환하는 데 툴 또는 모드를 사용하지 않을 것이다. 다른 예에서, 비디오 프로세싱 툴 또는 모드가 디스에이블될 때, 디코더는 의사 결정 또는 결정에 기초하여 인에이블된 비디오 프로세싱 툴 또는 모드를 사용하여 비트스트림이 수정되지 않았다는 지식을 사용하여 비트스트림을 프로세싱할 것이다.
본 특허 문서에 설명된 주제 및 기능적 동작들의 구현들은, 본 명세서에 개시된 구조들 및 이들의 구조적 등가물들을 포함한, 다양한 시스템들, 디지털 전자 회로로, 또는 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나 이상의 조합들로 구현될 수 있다. 본 명세서에 설명된 주제의 구현들은 하나 이상의 컴퓨터 프로그램 제품, 예를 들면, 데이터 프로세싱 장치에 의해 실행하기 위한 또는 데이터 프로세싱 장치의 동작을 제어하기 위한, 유형적(tangible)이고 비일시적인 컴퓨터 판독 가능 매체 상에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터 판독 가능 매체는 머신 판독 가능 저장 디바이스, 머신 판독 가능 저장 기판, 메모리 디바이스, 머신 판독 가능 전파 신호를 실현하는 조성물(composition of matter), 또는 이들 중 하나 이상의 조합일 수 있다. "데이터 프로세싱 유닛" 또는 “데이터 프로세싱 장치"라는 용어는, 예로서, 프로그래밍 가능 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함한, 데이터를 프로세싱하기 위한 모든 장치들, 디바이스들, 및 머신들을 포괄한다. 장치는, 하드웨어 외에도, 문제의 컴퓨터 프로그램을 위한 실행 환경을 생성하는 코드, 예를 들면, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트 또는 코드라고도 함)은, 컴파일되는(compiled) 또는 인터프리트되는(interpreted) 언어들을 포함한, 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 독립형 프로그램(stand-alone program)으로서 또는 모듈, 컴포넌트, 서브루틴 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛으로서를 포함한, 임의의 형태로 배포(deploy)될 수 있다. 컴퓨터 프로그램이 파일 시스템에서의 파일에 반드시 대응하는 것은 아니다. 프로그램은 다른 프로그램들 또는 데이터(예를 들면, 마크업 언어 문서에 저장된 하나 이상의 스크립트)를 보유하는 파일의 일 부분에, 문제의 프로그램에 전용된 단일 파일에, 또는 다수의 통합 파일들(coordinated files)(예를 들면, 하나 이상의 모듈, 서브 프로그램(sub program), 또는 코드 부분(portion of code)을 저장하는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터에서 또는 하나의 사이트에 위치하거나 다수의 사이트들에 걸쳐 분산되고 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들에서 실행되도록 배포될 수 있다.
본 명세서에 설명된 프로세스들 및 논리 흐름들은 입력 데이터에 대해 작동하여 출력을 생성하는 것에 의해 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능 프로세서에 의해 수행될 수 있다. 프로세스들 및 논리 흐름들이 또한 특수 목적 로직 회로, 예를 들면, FPGA(field programmable gate array) 또는 ASIC(application specific integrated circuit)에 의해 수행될 수 있고, 장치가 또한 이들로서 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 프로세서는, 예로서, 범용 및 특수 목적 마이크로프로세서들 둘 모두, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서를 포함한다. 일반적으로, 프로세서는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은 명령어들을 수행하기 위한 프로세서 및 명령어들과 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들면, 자기, 자기 광학 디스크, 또는 광학 디스크를 포함할 것이거나, 또는 이들로부터 데이터를 수신하거나 이들로 데이터를 전송하도록 동작 가능하게 결합될 수 있거나, 또는 둘 모두일 것이다. 그렇지만, 컴퓨터가 그러한 디바이스들을 가질 필요는 없다. 컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는 모든 형태들의 비휘발성 메모리, 매체 및, 예로서, 반도체 메모리 디바이스들, 예를 들면, EPROM, EEPROM 및 플래시 메모리 디바이스들을 포함한, 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 그에 통합될 수 있다.
본 명세서가, 도면과 함께, 단지 예시적인 것으로 간주되어야 하며, 여기서 예시적인은 예를 의미하는 것으로 의도된다. 본 명세서에서 사용되는 바와 같이, "또는"의 사용은, 문맥이 명확하게 달리 나타내지 않는 한, "및/또는"을 포함하는 것으로 의도된다.
본 특허 문서가 많은 구체적 사항들을 포함하지만, 이들은 임의의 발명의 범위 또는 청구될 수 있는 것의 범위에 대한 제한으로서 해석되어서는 안되며, 오히려 특정 발명들의 특정 실시예들에 특정적일 수 있는 특징들에 대한 설명으로서 해석되어야 한다. 개별 실시예들의 맥락에서 본 특허 문서에 설명되는 특정 특징들이 또한 단일 실시예에서 조합하여 구현될 수 있다. 이와 달리, 단일 실시예의 맥락에서 설명되는 다양한 특징들이 또한 다수의 실시예들에서 개별적으로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 더욱이, 특징들이 특정 조합들로 기능하는 것으로 위에서 설명되고 심지어 처음에 그 자체로서 청구될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징이 일부 경우에 그 조합으로부터 제거될 수 있고, 청구된 조합은 하위 조합 또는 하위 조합의 변형에 관한 것일 수 있다.
유사하게, 동작들이 도면에서 특정의 순서로 묘사되지만, 이것은, 바람직한 결과를 달성하기 위해, 그러한 동작들이 도시된 특정의 순서로 또는 순차적 순서로 수행되어야 하거나, 모든 예시된 동작들이 수행되어야 하는 것을 요구하는 것으로 이해되어서는 안된다. 더욱이, 본 특허 문서에 설명된 실시예들에서 다양한 시스템 컴포넌트들의 분리가 모든 실시예들에서 그러한 분리를 요구하는 것으로서 이해되어서는 안된다.
단지 몇 가지 구현들 및 예들이 설명되고 다른 구현들, 향상들 및 변형들이 이 특허 문서에 설명되고 예시된 것에 기초하여 이루어질 수 있다.

Claims (53)

  1. 비디오 프로세싱 방법으로서,
    비디오의 현재 비디오 유닛과 상기 비디오의 비트스트림 표현 사이의 변환을 위해, 상기 현재 블록의 제2 이웃 영역의 정보와 독립적으로 상기 변환의 코딩 프로세스를 위한 상기 현재 블록의 제1 이웃 영역 내의 하나 이상의 샘플의 이용 가능성을 결정하는 단계 - 상기 제2 이웃 영역은 상기 제1 이웃 영역에 인접하고, 상기 하나 이상의 샘플은 이용 불가능한 것으로 결정되는 경우에 패딩되며, 상기 코딩 프로세스는 적응적 루프 필터(ALF) 툴을 포함하고 상기 ALF 툴은 ALF 분류 프로세스 및/또는 ALF 필터링 프로세스를 포함함 -; 및
    상기 결정에 기초하여 상기 변환을 수행하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 좌측 위쪽 영역을 포함하고, 상기 제2 이웃 영역은 상기 현재 블록 위쪽의 영역 또는 상기 현재 블록의 좌측에 위치되는 영역을 포함하는, 방법.
  3. 제2항에 있어서, 상기 좌측 위쪽 영역 내의 상기 하나 이상의 샘플은 상기 코딩 프로세스에 이용 불가능한 것으로 인해 패딩되고, 상기 현재 블록 위쪽의 상기 영역 내의 샘플들은 상기 코딩 프로세스에 이용 가능한 것으로 결정되는, 방법.
  4. 제2항에 있어서, 상기 좌측 위쪽 영역 내의 상기 하나 이상의 샘플은 상기 코딩 프로세스에 이용 가능하고, 상기 현재 블록 위쪽의 상기 영역 내의 샘플들은 상기 코딩 프로세스에 이용 불가능한 것으로 인해 패딩되는, 방법.
  5. 제1항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 우측 아래쪽 영역을 포함하고, 상기 제2 이웃 영역은 상기 현재 블록 아래쪽의 영역 또는 상기 현재 블록의 우측에 위치되는 영역을 포함하는, 방법.
  6. 제1항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 우측 위쪽 영역을 포함하고, 상기 제2 이웃 영역은 상기 현재 비디오 유닛 위쪽의 영역 또는 상기 현재 블록의 우측에 위치되는 영역을 포함하는, 방법.
  7. 제1항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 좌측 아래쪽 영역을 포함하고, 상기 제2 이웃 영역은 상기 현재 블록 아래쪽의 영역 또는 상기 현재 블록의 좌측에 위치되는 영역을 포함하는, 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 제1 이웃 영역 내의 상기 하나 이상의 샘플은 이용 불가능한 것으로 결정되고, 상기 제2 이웃 영역과 상기 현재 블록이 동일한 비디오 유닛에 있는 경우에 상기 제2 이웃 영역 내의 하나 이상의 샘플은 이용 가능한 것으로 결정되는, 방법.
  9. 제8항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 좌측 위쪽 또는 우측 위쪽 영역이고, 상기 제2 이웃 영역은 상기 현재 블록 위쪽의 영역인, 방법.
  10. 제8항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 좌측 아래쪽 또는 우측 아래쪽 영역이고, 상기 제2 이웃 영역은 상기 현재 블록 아래쪽의 영역인, 방법.
  11. 제8항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 좌측 위쪽 또는 좌측 아래쪽 영역이고, 상기 제2 이웃 영역은 상기 현재 블록 좌측의 영역인, 방법.
  12. 제8항에 있어서, 상기 제1 이웃 영역은 상기 현재 블록의 우측 위쪽 또는 우측 아래쪽 영역이고, 상기 제2 이웃 영역은 상기 현재 블록 우측의 영역인, 방법.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 상기 현재 블록은 코딩 트리 유닛을 포함하는, 방법.
  14. 비디오 프로세싱 방법으로서,
    비디오의 현재 비디오 유닛과 상기 비디오의 비트스트림 표현 사이의 변환을 위해, (1) K 개의 영역 내의 K 개의 대표 샘플 중 M 개가 상기 현재 비디오 유닛과 상이한 비디오 유닛들에 있고, (2) 필터링 동작이 상기 비디오의 다수의 비디오 유닛들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는 경우에, 상기 K 개의 영역 내의 적어도 하나의 샘플이 상기 필터링 동작에 이용 불가능하다고 결정하는 단계 - M 및 K는 정수들임 -; 및
    상기 결정에 기초하여 상기 변환을 수행하는 단계
    를 포함하는, 방법.
  15. 제14항에 있어서, M = 1이고 K = 2인, 방법.
  16. 제15항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역 및 우측 위쪽 이웃 영역을 포함하는, 방법.
  17. 제15항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역 및 좌측 아래쪽 이웃 영역을 포함하는, 방법.
  18. 제15항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 우측 위쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  19. 제15항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 아래쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  20. 제14항에 있어서, M = 1, 2 또는 3이고, K = 3인, 방법.
  21. 제19항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 및 좌측 아래쪽 이웃 영역을 포함하는, 방법.
  22. 제20항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  23. 제20항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  24. 제20항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  25. 제14항에 있어서, M = 1, 2 또는 3이고, K = 4인, 방법.
  26. 제25항에 있어서, 상기 K 개의 이웃 영역은 상기 현재 블록의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  27. 제14항 내지 제26항 중 어느 한 항에 있어서, 상기 M 개의 대표 샘플은 상기 K 개의 대표 샘플 중 N 개를 검사하는 것에 기초하여 상기 현재 비디오 유닛과 상이한 상기 비디오 유닛들에 있는 것으로 결정되며, M ≤ N ≤ K인, 방법.
  28. 제27항에 있어서, N = M이고, 상기 K 개의 대표 샘플 중 상기 M 개의 대표 샘플만이 검사되는, 방법.
  29. 제27항 또는 제28항에 있어서, M = 1이고 K = 2인 경우에, 상기 K 개의 영역은 상기 현재 비디오 유닛의 좌측 위쪽 이웃 영역 및 우측 위쪽 이웃 영역을 포함하는, 방법.
  30. 제29항에 있어서, 상기 좌측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  31. 제29항에 있어서, 상기 우측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  32. 제27항 또는 제28항에 있어서, M = 1이고 K = 2인 경우에, 상기 K 개의 영역은 상기 현재 비디오 유닛의 좌측 아래쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  33. 제32항에 있어서, 상기 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  34. 제32항에 있어서, 상기 우측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  35. 제27항 또는 제28항에 있어서, M = 1이고 K = 2인 경우에, 상기 K 개의 영역은 상기 현재 비디오 유닛의 좌측 위쪽 이웃 영역 및 좌측 아래쪽 이웃 영역을 포함하는, 방법.
  36. 제35항에 있어서, 상기 좌측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  37. 제35항에 있어서, 상기 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  38. 제27항 또는 제28항에 있어서, M = 1이고 K = 2인 경우에, 상기 K 개의 영역은 상기 현재 비디오 유닛의 우측 위쪽 이웃 영역 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  39. 제38항에 있어서, 상기 우측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  40. 제38항에 있어서, 상기 우측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  41. 제27항 또는 제28항에 있어서, M = 1이고 K = 4인 경우에, 상기 K 개의 영역은 상기 현재 비디오 유닛의 좌측 위쪽 이웃 영역, 우측 위쪽 이웃 영역, 좌측 아래쪽 이웃 영역, 및 우측 아래쪽 이웃 영역을 포함하는, 방법.
  42. 제41항에 있어서, 상기 좌측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  43. 제41항에 있어서, 상기 우측 위쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  44. 제41항에 있어서, 상기 좌측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  45. 제41항에 있어서, 상기 우측 아래쪽 이웃 영역 내의 샘플들만이 검사되는, 방법.
  46. 제14항 내지 제45항 중 어느 한 항에 있어서, 한 영역이 상기 현재 비디오 유닛과 상이한 슬라이스에 위치하고 신택스 요소가 상기 필터링 동작이 상이한 슬라이스들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 상기 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주되는, 방법.
  47. 제14항 내지 제45항 중 어느 한 항에 있어서, 한 영역이 상기 현재 비디오 유닛과 상이한 브릭에 위치하고 신택스 요소가 상기 필터링 동작이 상이한 브릭들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 상기 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주되는, 방법.
  48. 제14항 내지 제45항 중 어느 한 항에 있어서, 한 영역이 상기 현재 비디오 유닛과 상이한 서브픽처에 위치하고 신택스 요소가 상기 필터링 동작이 상이한 서브픽처들에 걸쳐 있는 샘플들에 액세스하도록 허용되지 않는다는 것을 나타내는 경우에 상기 영역 내의 대표 샘플들은 이용 불가능한 것으로 간주되는, 방법.
  49. 제1항 내지 제48항 중 어느 한 항에 있어서, 상기 변환은 상기 비디오를 상기 비트스트림 표현으로 인코딩하는 것을 포함하는, 방법.
  50. 제1항 내지 제48항 중 어느 한 항에 있어서, 상기 변환은 상기 비트스트림 표현을 상기 비디오로 디코딩하는 것을 포함하는, 방법.
  51. 제1항 내지 제50항 중 어느 한 항에 기재된 방법을 구현하도록 구성된 프로세서를 포함하는 비디오 프로세싱 장치.
  52. 코드가 저장된 컴퓨터 판독 가능 매체로서, 상기 코드는, 프로세서에 의한 실행 시에, 상기 프로세서로 하여금 제1항 내지 제50항 중 어느 한 항에 기재된 방법을 구현하게 하는, 컴퓨터 판독 가능 매체.
  53. 컴퓨터 판독 가능 매체로서, 제1항 내지 제50항 중 어느 한 항에 따라 생성되는 코딩된 표현을 저장하는, 컴퓨터 판독 가능 매체.
KR1020227008762A 2019-09-27 2020-09-27 상이한 비디오 유닛들 간의 적응적 루프 필터링 KR20220063177A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CNPCT/CN2019/108763 2019-09-27
CN2019108763 2019-09-27
PCT/CN2020/118029 WO2021057946A1 (en) 2019-09-27 2020-09-27 Adaptive loop filtering between different video units

Publications (1)

Publication Number Publication Date
KR20220063177A true KR20220063177A (ko) 2022-05-17

Family

ID=75165594

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227008762A KR20220063177A (ko) 2019-09-27 2020-09-27 상이한 비디오 유닛들 간의 적응적 루프 필터링

Country Status (6)

Country Link
US (2) US11683488B2 (ko)
EP (1) EP4022910A4 (ko)
JP (2) JP7326600B2 (ko)
KR (1) KR20220063177A (ko)
CN (2) CN114450954A (ko)
WO (1) WO2021057946A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220394309A1 (en) * 2021-05-20 2022-12-08 Lemon Inc. On Padding Methods For Neural Network-Based In-Loop Filter
US20230179763A1 (en) * 2021-12-06 2023-06-08 Tencent America LLC Interpolation Filters for Adaptive Motion Vector Difference Resolution
US20230300328A1 (en) * 2022-03-11 2023-09-21 Qualcomm Incorporated Adaptive loop filter with samples before deblocking filter and samples before sample adaptive offsets

Family Cites Families (117)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7558320B2 (en) 2003-06-13 2009-07-07 Microsoft Corporation Quality control in frame interpolation with motion analysis
CN101207812B (zh) 2007-12-10 2010-04-07 海信集团有限公司 一种视频环路滤波方法
EP2396966B1 (en) 2009-02-10 2018-09-05 Lattice Semiconductor Corporation Block noise detection and filtering
US9094658B2 (en) * 2010-05-10 2015-07-28 Mediatek Inc. Method and apparatus of adaptive loop filtering
KR101772459B1 (ko) 2010-05-17 2017-08-30 엘지전자 주식회사 신규한 인트라 예측 모드
SG189076A1 (en) 2010-09-30 2013-05-31 Mitsubishi Electric Corp Moving image encoding device, moving image decoding device, moving image coding method, and moving image decoding method
EP2625859A4 (en) * 2010-10-05 2016-03-02 Mediatek Inc METHOD AND DEVICE FOR ADAPTIVE LOOP FILTRATION ON REGION BASE
US8861617B2 (en) 2010-10-05 2014-10-14 Mediatek Inc Method and apparatus of region-based adaptive loop filtering
US9525884B2 (en) 2010-11-02 2016-12-20 Hfi Innovation Inc. Method and apparatus of slice boundary filtering for high efficiency video coding
CN103503456B (zh) 2011-05-10 2017-03-22 联发科技股份有限公司 用于重建视频的环内处理方法及其装置
KR101956284B1 (ko) 2011-06-30 2019-03-08 엘지전자 주식회사 보간 방법 및 이를 이용한 예측 방법
US9641866B2 (en) 2011-08-18 2017-05-02 Qualcomm Incorporated Applying partition-based filters
US9357235B2 (en) * 2011-10-13 2016-05-31 Qualcomm Incorporated Sample adaptive offset merged with adaptive loop filter in video coding
WO2013060250A1 (en) 2011-10-24 2013-05-02 Mediatek Inc. Method and apparatus for non-cross-tile loop filtering
US9247258B2 (en) 2011-10-26 2016-01-26 Qualcomm Incorporated Unified design for picture partitioning schemes
US20130107973A1 (en) 2011-10-28 2013-05-02 Qualcomm Incorporated Loop filtering control over tile boundaries
US9077998B2 (en) 2011-11-04 2015-07-07 Qualcomm Incorporated Padding of segments in coded slice NAL units
US20130128986A1 (en) 2011-11-23 2013-05-23 Mediatek Inc. Method and Apparatus of Slice Boundary Padding for Loop Filtering
US9591331B2 (en) * 2012-03-28 2017-03-07 Qualcomm Incorporated Merge signaling and loop filter on/off signaling
US8983218B2 (en) 2012-04-11 2015-03-17 Texas Instruments Incorporated Virtual boundary processing simplification for adaptive loop filtering (ALF) in video coding
SI2697973T1 (sl) * 2012-04-16 2017-11-30 Hfi Innovation Inc. Postopek in naprava za zančno filtriranje preko meja rezine ali ploščice
US20130343447A1 (en) * 2012-06-25 2013-12-26 Broadcom Corporation Adaptive loop filter (ALF) padding in accordance with video coding
KR102070622B1 (ko) 2012-11-23 2020-01-29 삼성전자주식회사 동영상을 위한 양자화 테이블 추정 방법 및 장치
US9596461B2 (en) 2012-11-26 2017-03-14 Qualcomm Incorporated Loop filtering across constrained intra block boundaries in video coding
WO2014107709A2 (en) 2013-01-07 2014-07-10 Vid Scale, Inc. Enhanced deblocking filters for video coding
US9467707B2 (en) 2013-03-05 2016-10-11 Qualcomm Incorporated Parallel processing for video coding
US9648335B2 (en) 2013-07-12 2017-05-09 Qualcomm Incorporated Bitstream restrictions on picture partitions across layers
US9628792B2 (en) 2013-07-15 2017-04-18 Qualcomm Incorporated Cross-layer parallel processing and offset delay parameters for video coding
GB2516824A (en) * 2013-07-23 2015-02-11 Nokia Corp An apparatus, a method and a computer program for video coding and decoding
KR102135997B1 (ko) 2013-09-27 2020-07-20 퀄컴 인코포레이티드 심도 인트라 예측 모드들에 대한 잔차 코딩
US10567806B2 (en) * 2013-11-15 2020-02-18 Mediatek Inc. Method of block-based adaptive loop filtering
US9807406B2 (en) 2014-03-17 2017-10-31 Qualcomm Incorporated Picture flushing and decoded picture buffer parameter inference for multi-layer bitstreams
US9591325B2 (en) 2015-01-27 2017-03-07 Microsoft Technology Licensing, Llc Special case handling for merged chroma blocks in intra block copy prediction mode
US20160227222A1 (en) 2015-02-02 2016-08-04 Mediatek Inc. Multi-Standard Video Decoder with Novel Intra Prediction Decoding
US10057574B2 (en) * 2015-02-11 2018-08-21 Qualcomm Incorporated Coding tree unit (CTU) level adaptive loop filter (ALF)
US20160241881A1 (en) * 2015-02-13 2016-08-18 Mediatek Inc. Method and Apparatus of Loop Filters for Efficient Hardware Implementation
EP3304907B1 (en) 2015-06-08 2022-03-23 VID SCALE, Inc. Intra block copy mode for screen content coding
US10887597B2 (en) * 2015-06-09 2021-01-05 Qualcomm Incorporated Systems and methods of determining illumination compensation parameters for video coding
WO2017045101A1 (en) 2015-09-14 2017-03-23 Mediatek Singapore Pte. Ltd. Advanced deblocking filter in video coding
JP6559337B2 (ja) 2015-09-23 2019-08-14 ノキア テクノロジーズ オーユー 360度パノラマビデオの符号化方法、符号化装置、及びコンピュータプログラム
US10531111B2 (en) 2015-11-06 2020-01-07 Microsoft Technology Licensing, Llc Flexible reference picture management for video encoding and decoding
EP3395073A4 (en) 2016-02-04 2019-04-10 Mediatek Inc. VIDEO ENCODING METHOD AND APPARATUS USING NON-LOCAL ADAPTIVE LOOP FILTERS
US11064195B2 (en) 2016-02-15 2021-07-13 Qualcomm Incorporated Merging filters for multiple classes of blocks for video coding
US10419755B2 (en) * 2016-05-16 2019-09-17 Qualcomm Incorporated Confusion of multiple filters in adaptive loop filtering in video coding
US10264282B2 (en) 2016-06-27 2019-04-16 Mediatek Inc. Method and apparatus of inter coding for VR video using virtual reference frames
CN109417632B (zh) 2016-07-08 2023-08-04 Vid拓展公司 使用几何图形投影的360度视频编码
US10841581B2 (en) 2016-07-14 2020-11-17 Arris Enterprises Llc Region specific encoding and SAO-sensitive-slice-width-adaptation for improved-quality HEVC encoding
US20180041778A1 (en) * 2016-08-02 2018-02-08 Qualcomm Incorporated Geometry transformation-based adaptive loop filtering
US11438582B2 (en) 2016-08-03 2022-09-06 Kt Corporation Video signal processing method and device for performing intra-prediction for an encoding/decoding target block
US20180054613A1 (en) 2016-08-22 2018-02-22 Mediatek Inc. Video encoding method and apparatus with in-loop filtering process not applied to reconstructed blocks located at image content discontinuity edge and associated video decoding method and apparatus
US10419757B2 (en) 2016-08-31 2019-09-17 Qualcomm Incorporated Cross-component filter
US10848758B2 (en) 2016-11-22 2020-11-24 Electronics And Telecommunications Research Institute Image encoding/decoding image method and device, and recording medium storing bit stream
CN108111851B (zh) 2016-11-25 2020-12-22 华为技术有限公司 一种去块滤波方法及终端
US20180184127A1 (en) 2016-12-22 2018-06-28 Qualcomm Incorporated Determining neighboring samples for bilateral filtering in video coding
US10555006B2 (en) 2016-12-22 2020-02-04 Qualcomm Incorporated Deriving bilateral filter information based on a prediction mode in video coding
US10506230B2 (en) 2017-01-04 2019-12-10 Qualcomm Incorporated Modified adaptive loop filter temporal prediction for temporal scalability support
US11277635B2 (en) 2017-03-17 2022-03-15 Vid Scale, Inc. Predictive coding for 360-degree video based on geometry padding
WO2018174593A1 (ko) 2017-03-22 2018-09-27 김기백 적응적인 화소 분류 기준에 따른 인루프 필터링 방법
US11212497B2 (en) 2017-03-30 2021-12-28 Samsung Electronics Co., Ltd. Method and apparatus for producing 360 degree image content on rectangular projection by selectively applying in-loop filter
SG11201909450WA (en) 2017-04-11 2019-11-28 Vid Scale Inc 360-degree video coding using face continuities
US10778974B2 (en) 2017-07-05 2020-09-15 Qualcomm Incorporated Adaptive loop filter with enhanced classification methods
EP3454556A1 (en) 2017-09-08 2019-03-13 Thomson Licensing Method and apparatus for video encoding and decoding using pattern-based block filtering
US10728573B2 (en) 2017-09-08 2020-07-28 Qualcomm Incorporated Motion compensated boundary pixel padding
JP7343487B2 (ja) 2017-09-20 2023-09-12 ヴィド スケール インコーポレイテッド 360度ビデオ符号化におけるフェイス不連続の処理
US10965941B2 (en) 2017-10-09 2021-03-30 Qualcomm Incorporated Position-dependent prediction combinations in video coding
CN114979636B (zh) 2017-10-09 2023-10-27 佳能株式会社 用于对样本块进行滤波的方法、装置和存储介质
JP2021016016A (ja) 2017-10-20 2021-02-12 シャープ株式会社 動画像符号化装置及び動画像復号装置
US11641488B2 (en) 2017-11-01 2023-05-02 Vid Scale, Inc. Methods for simplifying adaptive loop filter in video coding
WO2019089864A1 (en) 2017-11-01 2019-05-09 Vid Scale, Inc. Overlapped block motion compensation
US10728549B2 (en) 2017-11-06 2020-07-28 Dolby Laboratories Licensing Corporation Adaptive loop filtering for high-dynamic range video
CN107801024B (zh) 2017-11-09 2019-07-12 北京大学深圳研究生院 一种用于帧内预测的边界滤波方法
US10721469B2 (en) 2017-11-28 2020-07-21 Qualcomm Incorporated Line buffer reduction for adaptive loop filtering in video coding
KR102643115B1 (ko) 2017-11-29 2024-03-04 한국전자통신연구원 루프내 필터링을 이용한 영상 부호화/복호화 방법 및 장치
US11432010B2 (en) 2017-12-19 2022-08-30 Vid Scale, Inc. Face discontinuity filtering for 360-degree video coding
WO2019131400A1 (ja) 2017-12-26 2019-07-04 シャープ株式会社 画像フィルタ装置、画像復号装置、および画像符号化装置
CN111527751A (zh) 2017-12-29 2020-08-11 夏普株式会社 用于在用于视频编码的图片的边界处划分视频块的系统和方法
CN109996069B (zh) 2018-01-03 2021-12-10 华为技术有限公司 视频图像编解码方法及设备
US10972729B2 (en) 2018-01-20 2021-04-06 Qualcomm Incorporated Deblocking filter selection and application in video coding
US20190238845A1 (en) 2018-01-26 2019-08-01 Qualcomm Incorporated Adaptive loop filtering on deblocking filter results in video coding
CN110337811A (zh) 2018-02-14 2019-10-15 北京大学 运动补偿的方法、装置和计算机系统
US11212438B2 (en) 2018-02-14 2021-12-28 Qualcomm Incorporated Loop filter padding for 360-degree video coding
US20190281273A1 (en) 2018-03-08 2019-09-12 Mediatek Inc. Adaptive loop filtering method for reconstructed projection-based frame that employs projection layout of 360-degree virtual reality projection
US11470359B2 (en) 2018-03-30 2022-10-11 Sharp Kabushiki Kaisha Systems and methods for partitioning video blocks at a boundary of a picture for video coding
US20190306502A1 (en) 2018-04-02 2019-10-03 Qualcomm Incorporated System and method for improved adaptive loop filtering
US10708592B2 (en) 2018-04-02 2020-07-07 Qualcomm Incorporated Deblocking filter for video coding and processing
US10904576B2 (en) 2018-04-27 2021-01-26 Panasonic Intellectual Property Corporation Of America Encoder, decoder, encoding method, and decoding method for generating a prediction image using a plurality of pixels generated outside of a boundary of a reference picture on which smoothing has been performed
US20210314630A1 (en) 2018-05-31 2021-10-07 Sharp Kabushiki Kaisha Systems and methods for partitioning video blocks in an inter prediction slice of video data
US11368677B2 (en) 2018-06-18 2022-06-21 Interdigital Vc Holdings, Inc. Boundary filtering for planar and DC modes in intra prediction
PL3721623T3 (pl) 2018-06-21 2021-09-27 Telefonaktiebolaget Lm Ericsson (Publ) Deblokowanie granic obrazu wideo
US20210274223A1 (en) 2018-06-28 2021-09-02 Electronics And Telecommunications Research Institute Video encoding/decoding method and device, and recording medium for storing bitstream
KR20200005480A (ko) 2018-07-06 2020-01-15 한국전자통신연구원 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
US11094088B2 (en) 2018-08-31 2021-08-17 Mediatek Inc. Method and apparatus of in-loop filtering for virtual boundaries in video coding
CN112703742B (zh) 2018-09-14 2023-03-31 华为技术有限公司 视频译码中的分块指示
WO2020083108A1 (en) 2018-10-23 2020-04-30 Mediatek Inc. Method and apparatus for reduction of in-loop filter buffer
CN116939198A (zh) 2018-10-23 2023-10-24 北京字节跳动网络技术有限公司 并置的局部照明补偿和修改的帧间预测编解码
CN109600611B (zh) 2018-11-09 2021-07-13 北京达佳互联信息技术有限公司 环路滤波方法、环路滤波装置、电子设备和可读介质
CN109660797A (zh) 2018-11-09 2019-04-19 北京达佳互联信息技术有限公司 自适应滤波方法、装置、电子设备及计算机可读介质
US11044473B2 (en) 2018-12-21 2021-06-22 Qualcomm Incorporated Adaptive loop filtering classification in video coding
KR20210100737A (ko) 2018-12-23 2021-08-17 후아웨이 테크놀러지 컴퍼니 리미티드 인코더, 디코더 및 적응 루프 필터를 사용한 대응 방법들
WO2020146616A1 (en) 2019-01-09 2020-07-16 Futurewei Technologies, Inc. Sub-picture sizing in video coding
WO2020143824A1 (en) 2019-01-13 2020-07-16 Beijing Bytedance Network Technology Co., Ltd. Interaction between lut and shared merge list
KR102661416B1 (ko) 2019-02-27 2024-04-25 후아웨이 테크놀러지 컴퍼니 리미티드 인코더, 디코더 및 대응하는 방법
CN113519164A (zh) 2019-03-02 2021-10-19 北京字节跳动网络技术有限公司 对分割结构的限制
US11910024B2 (en) * 2019-03-11 2024-02-20 Qualcomm Incorporated Boundary handling for adaptive loop filtering
JP7485689B2 (ja) 2019-03-11 2024-05-16 華為技術有限公司 エンコーダ、デコーダ及び対応する方法
CN113574889B (zh) 2019-03-14 2024-01-12 北京字节跳动网络技术有限公司 环路整形信息的信令和语法
CA3134075A1 (en) 2019-03-24 2020-10-01 Beijing Bytedance Network Technology Co., Ltd. Nonlinear adaptive loop filtering in video processing
TWI739386B (zh) 2019-04-11 2021-09-11 聯發科技股份有限公司 具有適應性參數集之適應性迴路濾波器
WO2020211770A1 (en) 2019-04-15 2020-10-22 Beijing Bytedance Network Technology Co., Ltd. Temporal prediction of parameters in non-linear adaptive loop filter
KR20210145749A (ko) 2019-04-16 2021-12-02 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 비디오 코딩을 위한 적응형 루프 필터링
CN113994671B (zh) 2019-06-14 2024-05-10 北京字节跳动网络技术有限公司 基于颜色格式处理视频单元边界和虚拟边界
BR112021024638A2 (pt) 2019-06-14 2022-01-18 Beijing Bytedance Network Tech Co Ltd Método de processamento de dados de vídeo, aparelho para processamento de dados de vídeo, meio de armazenamento e meio de gravação não transitórios legíveis por computador
EP3981150A4 (en) 2019-07-09 2022-08-03 Beijing Bytedance Network Technology Co., Ltd. SAMPLE DETERMINATION FOR ADAPTIVE LOOP FILTERING
CN114128278B (zh) 2019-07-11 2023-12-05 北京字节跳动网络技术有限公司 自适应环路滤波中的样点填充
EP3998772A4 (en) * 2019-07-11 2023-06-07 Samsung Electronics Co., Ltd. VIDEO DECODING METHOD AND APPARATUS, AND VIDEO CODING METHOD AND APPARATUS
EP4022914A4 (en) * 2019-09-05 2023-09-06 HFI Innovation Inc. METHOD AND APPARATUS FOR ADAPTIVE LOOP FILTERING AT PICTURE AND SUB-PICTURE BOUNDARY IN VIDEO CODING
US11303890B2 (en) 2019-09-05 2022-04-12 Qualcomm Incorporated Reusing adaptive loop filter (ALF) sub-picture boundary processing for raster-scan slice boundaries

Also Published As

Publication number Publication date
JP7326600B2 (ja) 2023-08-15
US20230091813A1 (en) 2023-03-23
US11683488B2 (en) 2023-06-20
JP2022550337A (ja) 2022-12-01
WO2021057946A1 (en) 2021-04-01
EP4022910A4 (en) 2022-11-16
CN117834924A (zh) 2024-04-05
JP2023145666A (ja) 2023-10-11
EP4022910A1 (en) 2022-07-06
CN114450954A (zh) 2022-05-06
US20230199182A1 (en) 2023-06-22

Similar Documents

Publication Publication Date Title
KR102648121B1 (ko) 적응적 루프 필터링에서의 샘플 패딩
WO2020249123A1 (en) Handling video unit boundaries and virtual boundaries
WO2021004491A1 (en) Sample determination for adaptive loop filtering
CN113994671B (zh) 基于颜色格式处理视频单元边界和虚拟边界
WO2021052508A1 (en) Padding process in adaptive loop filtering
US11683488B2 (en) Adaptive loop filtering between different video units
US11706462B2 (en) Padding process at unavailable sample locations in adaptive loop filtering
WO2021008546A1 (en) Accessing samples across video unit boundaries in adaptive loop filtering
KR20230029670A (ko) 적응적 루프 필터링을 위한 경계 위치
KR102669852B1 (ko) 적응적 루프 필터링을 위한 샘플 결정

Legal Events

Date Code Title Description
E902 Notification of reason for refusal