KR20210135621A - 비디오 코딩에서 슬라이스 엔트리 포인트 - Google Patents

비디오 코딩에서 슬라이스 엔트리 포인트 Download PDF

Info

Publication number
KR20210135621A
KR20210135621A KR1020217035498A KR20217035498A KR20210135621A KR 20210135621 A KR20210135621 A KR 20210135621A KR 1020217035498 A KR1020217035498 A KR 1020217035498A KR 20217035498 A KR20217035498 A KR 20217035498A KR 20210135621 A KR20210135621 A KR 20210135621A
Authority
KR
South Korea
Prior art keywords
slice
numentrypoints
flag
picture
coded
Prior art date
Application number
KR1020217035498A
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 KR20210135621A publication Critical patent/KR20210135621A/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/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/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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/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

Abstract

비디오 코딩 메커니즘이 개시된다. 메커니즘은 슬라이스를 포함하는 비트스트림을 수신하는 단계를 포함한다. 슬라이스에서 엔트리(NumEntryPoints)의 수가 도출된다. 0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋이 결정된다. 슬라이스는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 디코딩된다. 슬라이스는 디코딩된 비디오 시퀀스의 일부로서 표시하기 위해 포워딩된다.

Description

비디오 코딩에서 슬라이스 엔트리 포인트
본 특허 출원은 2019년 4월 10일에 Ye-Kui Wang에 의해 출원되고 발명의 명칭이 "비디오 코딩 개선(Video Coding Improvements)"인 미국 가특허 출원 번호 62/832,128의 이익을 주장하며, 이는 여기에 참조로 포함된다.
본 개시는 일반적으로 비디오 코딩에 관한 것이고, 특히 비디오 코딩에서 픽처의 슬라이스에서 코딩된 데이터에 대한 엔트리 포인트를 결정하는 것과 관련된다.
비교적 짧은 비디오라도 묘사하는 데 필요한 비디오 데이터의 양은 상당할 수 있으며, 이는 데이터가 스트리밍되거나 제한된 대역폭 용량으로 통신 네트워크를 통해 통신될 때 어려움을 초래할 수 있다. 따라서 비디오 데이터는 일반적으로 현대의 통신 네트워크를 통해 통신되기 전에 압축된다. 메모리 리소스가 제한될 수 있기 때문에 비디오가 저장 장치에 저장될 때 비디오의 크기도 문제가 될 수 있다. 비디오 압축 장치는 전송 또는 저장 전에 비디오 데이터를 코딩하기 위해 소스에서 소프트웨어 및/또는 하드웨어를 사용하여 디지털 비디오 이미지를 나타내는 데 필요한 데이터의 양을 줄이는 경우가 많다.
압축된 데이터는 비디오 데이터를 디코딩하는 비디오 압축 해제 장치에 의해 목적지에서 수신된다. 제한된 네트워크 리소스와 더 높은 비디오 품질에 대한 요구가 계속 증가함에 따라 이미지 품질을 거의 또는 전혀 희생하지 않으면서 압축 비율을 개선하는 개선된 압축 및 압축 해제 기술이 바람직하다.
일 실시예에서, 본 개시는 디코더에서 구현되는 방법을 포함하고, 상기 방법은: 상기 디코더의 수신기가 슬라이스를 포함하는 비트스트림을 수신하는 단계; 상기 디코더의 프로세서가 상기 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하는 단계; 상기 프로세서가 0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정하는 단계; 및 상기 프로세서가 상기 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 상기 슬라이스를 디코딩하는 단계를 포함한다. 일부 비디오 코딩 시스템에서 인코더는 각 슬라이스에 대한 num_entry_point_offsets 값을 시그널링한다. 그런 다음 디코더는 비트스트림을 기반으로 NumEntryPoints 값을 설정한다. 이 값은 슬라이스에서 코딩된 데이터의 각 그룹에 대한 오프셋을 결정하는 데 사용된다. 그런 다음 오프셋을 사용하여 이러한 그룹을 디코딩할 수 있다. 본 예는 비트스트림의 값을 시그널링하지 않고 NumEntryPoints 값을 결정하기 위한 메커니즘을 사용한다. 그런 다음 NumEntryPoints를 사용하여 서브세트 및 이에 따른 슬라이스를 재구성하기 전에 코딩 트리 단위(coding tree units, CTU) 행과 같은 슬라이스 서브세트에 대한 오프셋을 얻을 수 있다. 예를 들어, 슬라이스가 파면 병렬 처리(wavefront parallel processing, WPP)에 따라 코딩될 때 슬라이스에 대한 NumEntryPoints를 도출하기 위해 이 메커니즘이 사용될 수 있다. NumEntryPoints는 WPP/CTU 행의 크기, WPP/CTU 열의 크기에 기초해서, 슬라이스 내의 CTU의 수에 기초해서, 및/또는 CTU 및/또는 슬라이스 주소에 기초해서 도출될 수 있다. 이 접근 방식은 각 슬라이스 헤더 및 비디오 스트림의 각 슬라이스에 대해 시그널링된 값을 제거한다. 픽처는 복수의 슬라이스를 포함할 수 있다. 또한, 비디오 시퀀스는 수천 개의 픽처를 포함할 수 있다. 따라서 비트스트림에서 num_entry_point_offsets를 제거하면 비디오 스트림 크기가 크게 줄어들고 코딩 효율성이 증가하며 인코더와 디코더 모두에서 메모리 및 네트워크 리소스 사용량이 줄어든다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스가 파면 병렬 처리(wavefront parallel processing, WPP)에 따라 코딩될 때 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 비트스트림은 슬라이스 헤더를 포함하고, 슬라이스 헤더는 슬라이스 내의 엔트리 포인트 오프셋의 수에 대응하는 값을 포함하지 않는다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스 내의 행의 크기에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스 내의 열의 크기에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스 내의 코딩 트리 유닛(CTU)의 수에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스 내의 주소에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 슬라이스의 크기에 기초하여 도출된다.
일 실시예에서, 본 개시는 인코더에서 구현되는 방법을 포함하고, 상기 방법은: 상기 인코더의 프로세서가 코딩된 참조 픽처의 참조 슬라이스를 획득하는 단계; 상기 프로세서가 상기 참조 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하는 단계; 상기 프로세서가 상기 NumEntryPoints에 기초하여 상기 참조 슬라이스에서 코딩된 데이터의 서브세트에 대한 오프셋을 결정하는 단계; 상기 프로세서가 상기 참조 슬라이스 내의 상기 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 상기 코딩된 참조 픽처의 참조 슬라이스를 디코딩하는 단계; 상기 프로세서가 상기 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩하는 단계; 및 상기 프로세서에 연결된 메모리가 디코더를 향한 통신을 위해 상기 비트스트림을 저장하는 단계를 포함한다. 일부 비디오 코딩 시스템에서 인코더는 각 슬라이스에 대한 num_entry_point_offsets 값을 시그널링한다. 그런 다음 디코더는 비트스트림을 기반으로 NumEntryPoints 값을 설정한다. 이 값은 슬라이스에서 코딩된 데이터의 각 그룹에 대한 오프셋을 결정하는 데 사용된다. 그런 다음 오프셋을 사용하여 이러한 그룹을 디코딩할 수 있다. 본 예는 비트스트림의 값을 시그널링하지 않고 NumEntryPoints 값을 결정하기 위한 메커니즘을 사용한다. 그런 다음 NumEntryPoints를 사용하여 서브세트 및 이에 따른 슬라이스를 재구성하기 전에 코딩 트리 단위(CTU) 행과 같은 슬라이스 서브세트에 대한 오프셋을 얻을 수 있다. 예를 들어, 슬라이스가 파면 병렬 처리(wavefront parallel processing, WPP)에 따라 코딩될 때 슬라이스에 대한 NumEntryPoints를 도출하기 위해 이 메커니즘이 사용될 수 있다. NumEntryPoints는 WPP/CTU 행의 크기, WPP/CTU 열의 크기에 기초해서, 슬라이스의 CTU 수에 기초해서, 및/또는 CTU 및/또는 슬라이스 주소에 기초해서 도출될 수 있다. 이 접근 방식은 각 슬라이스 헤더 및 비디오 스트림의 각 슬라이스에 대해 시그널링된 값을 제거한다. 픽처는 복수의 슬라이스를 포함할 수 있다. 또한, 비디오 시퀀스는 수천 개의 픽처를 포함할 수 있다. 따라서 비트스트림에서 num_entry_point_offsets를 제거하면 비디오 스트림 크기가 크게 줄어들고 코딩 효율성이 증가하며 인코더와 디코더 모두에서 메모리 및 네트워크 리소스 사용량이 줄어든다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스가 WPP에 따라 코딩될 때 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 비트스트림은 슬라이스 헤더를 포함하고, 슬라이스 헤더는 참조 슬라이스의 엔트리 포인트 오프셋의 수에 대응하는 값을 포함하지 않는다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스 내의 행의 크기에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스 내의 열의 크기에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스의 CTU의 수에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스 내의 주소에 기초하여 도출된다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 NumEntryPoints는 참조 슬라이스의 크기에 기초하여 도출된다.
일 실시예에서, 본 개시는 프로세서, 프로세서에 결합된 수신기, 프로세서에 결합된 메모리, 및 프로세서에 결합된 송신기를 포함하는 비디오 코딩 디바이스를 포함하며, 여기서 프로세서, 수신기, 메모리, 및 송신기는 이전 관점 중 임의의 관점의 방법을 수행하도록 구성된다.
일 실시예에서, 본 개시는 비디오 코딩 디바이스에 의해 사용하기 위한 컴퓨터 프로그램 제품을 포함하는 비일시적 컴퓨터 판독가능 매체를 포함하고, 컴퓨터 프로그램 제품은 비일시적 컴퓨터 판독가능 매체 상에 저장된 컴퓨터 실행 가능형 명령을 포함하여, 프로세서에 의해 실행되는 것은 비디오 코딩 디바이스로 하여금 선행 관점 중 임의의 관점의 방법을 수행하게 한다.
일 실시예에서, 본 개시는 슬라이스를 포함하는 비트스트림을 수신하기 위한 수신 수단; 슬라이스에서 NumEntryPoints를 도출하기 위한 도출 수단; 0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 수단; 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 슬라이스를 디코딩하기 위한 디코딩 수단; 및 디코딩된 비디오 시퀀스의 일부로서 표시를 위해 슬라이스를 포워딩하기 위한 포워딩 수단을 포함한다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 디코더는 선행 관점 중 임의의 관점의 방법을 수행하도록 추가로 구성된다.
일 실시예에서, 본 개시는 코딩된 참조 픽처의 참조 슬라이스를 획득하기 위한 획득 수단; 참조 슬라이스에서 NumEntryPoints를 도출하기 위한 도출 수단; NumEntryPoints에 기초하여 참조 슬라이스 내의 코딩된 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 수단; 참조 슬라이스 내의 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 코딩된 참조 픽처의 참조 슬라이스를 디코딩하고, 상기 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩하기 위한 코딩 수단; 및 디코더로의 통신을 위한 비트스트림을 저장하기 위한 저장 수단을 포함한다.
선택적으로, 선행 관점 중 임의의 관점에서, 관점의 다른 구현이 제공되며, 여기서 인코더는 선행 관점 중 임의의 관점의 방법을 수행하도록 추가로 구성된다.
명료함을 위해, 전술한 실시예 중 임의의 하나는 본 개시의 범위 내에서 새로운 실시예를 생성하기 위해 다른 전술한 실시예 중 임의의 하나 이상과 조합될 수 있다.
이들 및 다른 특징은 첨부 도면 및 청구범위와 관련하여 취해진 다음의 상세한 설명으로부터 더 명확하게 이해될 것이다.
본 개시의 보다 완전한 이해를 위해, 유사한 참조 번호가 유사한 부분을 나타내는 첨부 도면 및 상세한 설명과 관련하여 취해진 다음의 간략한 설명을 이제 참조한다.
도 1은 비디오 신호를 코딩하는 예시적인 방법의 흐름도이다.
도 2는 비디오 코딩을 위한 예시적인 코딩 및 디코딩(코덱) 시스템의 개략도이다.
도 3은 예시적인 비디오 인코더를 예시하는 개략도이다.
도 4는 예시적인 비디오 디코더를 예시하는 개략도이다.
도 5는 파면 병렬 처리(WPP)의 예시적인 메커니즘을 도시하는 개략도이다.
도 6은 예시적인 비트스트림을 예시하는 개략도이다.
도 7은 예시적인 비디오 코딩 디바이스의 개략도이다.
도 8은 슬라이스에 대한 엔트리 포인트의 수(NumEntryPoints)를 시그널링하지 않고 비디오 시퀀스를 비트스트림으로 인코딩하는 예시적인 방법의 흐름도이다.
도 9는 NumEntryPoints가 비트스트림에 포함되지 않을 때 비디오 시퀀스를 디코딩하기 위해 NumEntryPoints를 도출하는 예시적인 방법의 흐름도이다.
도 10은 NumEntryPoints를 시그널링하지 않고 비디오 시퀀스를 비트스트림으로 코딩하기 위한 예시적인 시스템의 개략도이다.
하나 이상의 실시예의 예시적인 구현이 아래에 제공되지만, 개시된 시스템 및/또는 방법은 현재 알려져 있거나 존재하는 임의의 수의 기술을 사용하여 구현될 수 있다는 것이 처음부터 이해되어야 한다. 본 개시는 여기에 예시되고 설명된 예시적인 설계 및 구현을 포함하여 아래에 예시된 예시적인 구현, 도면 및 기술에 결코 제한되어서는 안 되며, 등가물의 전체 범위와 함께 첨부된 청구의 범위 내에서 수정될 수 있다.
하기 용어들은 본 명세서에서 상반되는 맥락에서 사용되지 않는 한 다음과 같이 정의된다. 구체적으로, 하기 정의는 본 개시에 추가적인 명확성을 제공하기 위한 것이다. 그러나 용어는 상황에 따라 다르게 설명될 수 있다. 따라서 다음 정의는 보충으로 간주되어야 하며 여기에서 이러한 용어에 대해 제공된 설명의 다른 정의를 제한하는 것으로 간주되어서는 안 된다.
비트스트림은 인코더와 디코더 사이의 전송을 위해 압축된 비디오 데이터를 포함하는 시퀀스 비트이다. 인코더는 비디오 데이터를 비트스트림으로 압축하기 위해 인코딩 프로세스를 사용하도록 구성된 장치이다. 디코더는 표시를 위해 비트스트림으로부터 비디오 데이터를 재구성하기 위해 디코딩 프로세스를 사용하도록 구성된 장치이다. 픽처는 비디오 시퀀스의 해당 순간에 사용자에게 전체 또는 부분적으로 표시하기 위한 완전한 이미지이다. 참조 픽처는 인터 예측에 따라 다른 픽처를 참조로 코딩할 때 사용할 수 있는 참조 샘플을 포함하는 픽처이다. 코딩된 픽처는 인터 예측 또는 인트라 예측에 따라 코딩되고 비트스트림의 단일 액세스 단위에 포함되고 픽처의 코딩 트리 단위(CTU)의 완전한 세트를 포함하는 픽처의 표현이다. 슬라이스는 전체 타일의 정수 또는 한 타일 내의 연속적인 완전한 CTU 행의 정수를 포함하는 픽처의 파티션이며, 여기서 슬라이스와 모든 하위 분할은 단일 네트워크 추상화 계층(network abstraction layer, NAL) 단위에 독점적으로 포함된다. 참조 슬라이스는 참조 샘플을 포함하거나 인터 예측에 따라 다른 슬라이스를 참조로 코딩할 때 사용되는 참조 픽처의 슬라이스이다. 슬라이스 헤더는 슬라이스에 표시된 타일 내의 모든 타일 또는 CTU 행과 관련된 데이터 요소를 포함하는 코딩된 슬라이스의 일부이다. 엔트리 포인트는 코딩된 슬라이스의 대응하는 서브세트에 대한 비디오 데이터의 첫 번째 비트를 포함하는 비트스트림의 비트 위치이다. 오프셋은 알려진 비트 위치와 엔트리 포인트 사이의 거리(비트)이다. 서브세트는 집합의 하위 부분이다. 예를 들어, 슬라이스가 세트인 경우 타일, CTU/CTB(Coding Tree Block) 행 또는 CTU/CTB는 집합의 서브세트이다. 코딩 트리 단위(CTU)는 코딩 트리로 분할될 수 있는 미리 정의된 크기의 샘플 그룹이다. CTU 행은 왼쪽 슬라이스 경계와 오른쪽 슬라이스 경계 사이에서 수평으로 확장되는 CTU 그룹이다. CTU 열은 상단 슬라이스 경계와 하단 슬라이스 경계 사이에서 수직으로 확장되는 CTU 그룹이다. CTB는 루마 샘플, 적색 차이 크로마 샘플 또는 청색 차이 크로마 샘플만 포함하는 CTU의 일부이다. CTB 행/CTB 열은 루마 샘플, 적색 차이 크로마 샘플만 또는 청색 차이 크로마 샘플만 포함하는 CTU 행/열이다. CTU와 CTB는 많은 상황에서 상호 교환 가능하게 사용될 수 있다는 점에 유의해야 한다. 파면 병렬 처리(Wavefront Parallel Processing, WPP)는 각 행이 다른 스레드에 의해 병렬로 디코딩될 수 있도록 지연을 사용하여 슬라이스의 CTU/CTB 행을 코딩하는 메커니즘이다. 슬라이스 주소는 슬라이스 또는 그 하위 부분의 식별 가능한 위치이다.
하기 약어들이 여기에서 사용된다: 코딩된 비디오 시퀀스(Coded Video Sequence, CVS), 디코딩된 픽처 버퍼(Decoded Picture Buffer, DPB), 순간적인 디코딩 리프레시(Instantaneous Decoding Refresh, IDR), 인트라 랜덤 액세스 포인트(Intra Random Access Point, IRAP), 공동 비디오 전문가 팀(Joint Video Experts Team, JVET), 최하위 비트(Least Significant Bit, LSB), 최상위 비트(Most Significant Bit, MSB), 네트워크 추상화 계층(Network Abstraction Layer, NAL), 픽처 순서 카운트(Picture Order Count, POC), 원시 바이트 시퀀스 페이로드(Raw Byte Sequence Payload, RBSP), 실시간 전송 프로토콜(Real-Time Transport Protocol, RTP), 시퀀스 파라미터 세트(Sequence Parameter Set, SPS), 다목적 비디오 코딩(Versatile Video Coding, VVC), 작업 초안(Working Draft, WD) 및 파면 병렬 처리(Wavefront Parallel Processing, WPP).
데이터 손실을 최소화하면서 비디오 파일의 크기를 줄이기 위해 많은 비디오 압축 기술이 사용될 수 있다. 예를 들어, 비디오 압축 기술은 비디오 시퀀스에서 데이터 중복성을 감소 또는 제거하기 위해 공간적(예를 들어, 인트라 픽처) 예측 및/또는 시간적(예를 들어, 인터-픽처) 예측을 수행하는 것을 포함할 수 있다. 블록 기반 비디오 코딩의 경우, 비디오 슬라이스(예를 들어, 비디오 픽처 또는 비디오 픽처의 일부)는 트리블록, 코딩 트리 블록(CTB), 코딩 트리 단위(CTU), 코딩 단위(CU), 및/또는 코딩 노드로도 지칭될 수 있는 비디오 블록으로 분할될 수 있다. 픽처의 인트라 코딩된 (I) 슬라이스의 비디오 블록은 동일한 픽처의 이웃 블록에 있는 참조 샘플에 대한 공간 예측을 사용하여 코딩된다. 픽처의 인터 코딩된 단방향 예측 (P) 또는 양방향 예측 (B) 슬라이스에서의 비디오 블록은 동일한 픽처의 이웃 블록에 있는 참조 샘플에 대한 공간적 예측 또는 다른 참조 픽처에 있는 참조 샘플에 대한 시간적 예측을 사용하여 코딩될 수 있다. 픽처는 프레임 및/또는 이미지로 지칭될 수 있고, 참조 픽처는 참조 프레임 및/또는 참조 이미지로 지칭될 수 있다. 공간적 또는 시간적 예측은 이미지 블록을 나타내는 예측 블록을 생성한다. 잔여 데이터는 원본 이미지 블록과 예측 블록 간의 픽셀 차이를 나타낸다. 따라서, 인터-코딩된 블록은 예측 블록을 형성하는 참조 샘플들의 블록을 가리키는 모션 벡터 및 코딩된 블록과 예측 블록 간의 차이를 나타내는 잔차 데이터에 따라 인코딩된다. 인트라 코딩된 블록은 인트라 코딩 모드 및 잔차 데이터에 따라 인코딩된다. 추가 압축을 위해, 잔여 데이터는 픽셀 도메인에서 변환 도메인으로 변환될 수 있다. 이는 양자화될 수 있는 잔여 변환 계수를 초래한다. 양자화된 변환 계수는 초기에 2차원 어레이로 배열될 수 있다. 양자화된 변환 계수는 변환 계수의 1차원 벡터를 생성하기 위해 스캔될 수 있다. 더 많은 압축을 달성하기 위해 엔트로피 코딩이 적용될 수 있다. 이러한 비디오 압축 기술은 아래에서 더 자세히 논의된다.
인코딩된 비디오가 정확하게 디코딩될 수 있도록 보장하기 위해, 비디오는 해당 비디오 코딩 표준에 따라 인코딩 및 디코딩된다. 비디오 코딩 표준에는 ITU(International Telecommunication Union) Standardization Sector(ITU-T) H.261, International Organization for Standardization/International Electrotechnical Commission(ISO/IEC) MPEG(Motion Picture Experts Group)-1 Part 2, ITU-T H.262 또는 ISO/IEC MPEG-2 Part 2, ITU-T H.263, ISO/IEC MPEG-4 Part 2, AVC(Advanced Video Coding)(ITU-T H.264 또는 ISO/IEC MPEG-라고도 함) 4 파트 10 및 고효율 비디오 코딩(HEVC)(ITU-T H.265 또는 MPEG-H 파트 2라고도 함)가 포함된다. AVC에는 SVC(Scalable Video Coding), MVC(Multiview Video Coding) 및 Multiview Video Coding plus Depth(MVC+D) 및 3차원(3D) AVC(3D-AVC)와 같은 확장이 포함된다. HEVC는 Scalable HEVC(SHVC), Multiview HEVC(MV-HEVC) 및 3D HEVC(3D-HEVC)와 같은 확장을 포함한다. ITU-T와 ISO/IEC의 공동 비디오 전문가 팀(JVET)은 VVC(Versatile Video Coding)라고 하는 비디오 코딩 표준을 개발하기 시작하였다. VVC는 JVET-N1001-v1을 포함하는 작업 초안(WD)에 포함되어 있다.
비디오 코딩 시스템은 비디오를 인코딩하기 위해 많은 상이한 메커니즘을 사용할 수 있다. 예를 들어, 비디오 코딩 시스템은 픽처를 슬라이스로 분할할 수 있다. 일부 예에서 슬라이스는 타일로 분할된다. 그런 다음 예제에 따라 슬라이스의 슬라이스 및/또는 타일을 CTU 행으로 분할할 수 있다. 그런 다음 CTU는 코딩 트리에 따라 예측 메커니즘에 따라 코딩되는 코딩 블록으로 세분된다. 그런 다음, 코딩된 코딩 블록은 비트스트림에 포함된다. WPP에서 CTU의 행과 파티션은 병렬로 코딩된다. 예를 들어, WPP는 예에 따라 제1 스레드를 사용하여 첫 번째 행에서 하나 또는 두 개의 CTU를 코딩하고, 그런 다음 제2 스레드를 사용하여 두 번째 행에서 CTU 코딩을 시작할 수 있다. 두 번째 행의 하나/두 개의 CTU가 코딩되면, 제3 스레드는 세 번째 행의 CTU 코딩을 시작할 수 있다. 일부 예측 방식은 현재 블록의 위 또는 왼쪽에 위치한 블록을 참조하여 코딩한다. 다음 행의 코딩 시작 사이에 CTU 지연을 배치함으로써 WPP는 현재 블록이 코딩되기 전에 현재 블록의 위 또는 왼쪽에 위치한 블록이 코딩되도록 할 수 있다. 이것은 인코더가 현재 블록을 코딩하기 시작할 때 그러한 데이터가 잠재적으로 사용 불가능하다는 문제를 완화한다.
따라서, 비트스트림에는 많은 비트가 포함된다. 또한, 이들 비트 각각은 대응하는 슬라이스 또는 그 하위 부분과 연관되어 있다. 디코더가 비트스트림을 해석하고 관련 데이터를 찾는 것을 돕기 위해 오프셋 어레이가 비트스트림에 포함될 수 있다. 오프셋은 각각 비트스트림에서 해당 데이터의 위치를 나타낸다. 코딩된 슬라이스의 대응하는 서브세트에 대한 비디오 데이터의 첫 번째 비트의 오프셋은 엔트리 포인트로 알려져 있다. WPP의 경우 서브세트는 CTU 행이다. 따라서 WPP에서는 슬라이스의 CTU 행 수만큼 슬라이스의 엔트리 포인트가 있을 수 있다. 일부 비디오 코딩 시스템에서 num_entry_point_offsets는 슬라이스 헤더에 포함된다. num_entry_point_offsets는 슬라이스에 포함된 엔트리 포인트 오프셋의 수를 알려주는 파라미터이며, 따라서 오프셋의 배열에서 얻어야 하는 오프셋의 수를 디코더에 표시한다. 디코더는 슬라이스 헤더의 num_entry_point_offsets를 사용하여 관련 오프셋을 얻고 해당 CTU의 디코딩을 시작할 수 있다. 이 접근 방식이 효과적이지만 num_entry_point_offsets는 여러 비트를 포함하고 모든 슬라이스 헤더에서 시그널링된다. 각 픽처는 여러 슬라이스를 포함할 수 있고 비디오 시퀀스는 수천 개의 픽처를 포함할 수 있으므로 num_entry_point_offsets는 여러 번 시그널링되고 비디오 시퀀스의 데이터 양에 상당한 총체적 영향을 미칠 수 있다.
디코더에서 엔트리 포인트의 수(NumEntryPoints) 값을 도출하기 위한 메커니즘이 여기에 개시된다. 그런 다음 NumEntryPoints를 사용하여 서브세트 및 그에 따른 슬라이스를 재구성하기 전에 슬라이스 서브세트(예를 들어, CTU 행)에 대한 오프셋을 얻을 수 있다. 이를 통해 비트스트림의 각 슬라이스 헤더에서 num_entry_point_offsets를 제거할 수 있다. 이들 메커니즘은 디코더 및/또는 인코더 상의 가상 기준 디코더(hypothetical reference decoder, HRD)에서 사용될 수 있다. 픽처가 다수의 슬라이스를 포함할 수 있고 비디오가 수천의 픽처를 포함할 수 있기 때문에 비트스트림에서 이 값을 제거하면 비디오 스트림 크기가 크게 감소하고 코딩 효율성이 증가하며 인코더와 디코더 모두에서 메모리 및 네트워크 리소스 사용량이 감소한다. 예를 들어, 슬라이스가 WPP에 따라 코딩될 때 슬라이스에 대한 NumEntryPoints를 도출하기 위해 메커니즘이 사용될 수 있다. NumEntryPoints는 WPP/CTU 행의 크기, WPP/CTU 열의 크기, 슬라이스의 CTU 수 및/또는 CTU 및/또는 슬라이스 주소에 기초해서 도출될 수 있다.
도 1은 비디오 신호를 코딩하는 예시적인 동작 방법(100)의 흐름도이다. 구체적으로, 비디오 신호는 인코더에서 인코딩된다. 인코딩 프로세스는 비디오 파일 크기를 줄이기 위해 다양한 메커니즘을 사용하여 비디오 신호를 압축한다. 파일 크기가 작을수록 압축된 비디오 파일이 사용자에게 전송되는 동시에 관련 대역폭 오버헤드가 줄어든다. 그런 다음 디코더는 압축된 비디오 파일을 디코딩하여 최종 사용자에게 표시할 원본 비디오 신호를 재구성한다. 디코딩 프로세스는 일반적으로 디코더가 비디오 신호를 일관되게 재구성할 수 있도록 인코딩 프로세스를 미러링한다.
단계 101에서, 비디오 신호는 인코더에 입력된다. 예를 들어, 비디오 신호는 메모리에 저장된 비압축 비디오 파일일 수 있다. 다른 예로서, 비디오 파일은 비디오 카메라와 같은 비디오 캡처 장치에 의해 캡처되고 비디오의 라이브 스트리밍을 지원하도록 인코딩될 수 있다. 비디오 파일은 오디오 컴포넌트와 비디오 컴포넌트를 모두 포함할 수 있다. 비디오 구성 요소에는 일련의 이미지 프레임이 포함되어 있어 순차적으로 볼 때 모션에 대한 시각적 인상을 준다. 프레임은 여기에서 루마 성분(또는 루마 샘플)이라고 하는 광과 크로마 성분(또는 컬러 샘플)이라고 하는 색상으로 표현되는 픽셀을 포함한다. 일부 예에서, 프레임은 또한 3차원 보기를 지원하는 깊이 값을 포함할 수 있다.
단계 103에서, 비디오는 블록으로 분할된다. 분할에는 압축을 위해 각 프레임의 픽셀을 정사각형 및/또는 직사각형 블록으로 세분화하는 작업이 포함된다. 예를 들어, 고효율 비디오 코딩(HEVC)(H.265 및 MPEG-H 파트 2라고도 함)에서 프레임은 먼저 미리 정의된 크기(예를 들어, 64픽셀 x 64픽셀)의 블록인 코딩 트리 단위(CTU)로 나눌 수 있다. CTU에는 루마 및 크로마 샘플이 모두 포함되어 있다. 코딩 트리를 사용하여 CTU를 블록으로 분할하고 그런 다음 추가 인코딩을 지원하는 구성이 달성될 때까지 블록을 재귀적으로 세분화할 수 있다. 예를 들어, 프레임의 루마 성분은 개별 블록이 상대적으로 균일한 조명 값을 포함할 때까지 세분화될 수 있다. 또한, 프레임의 크로마 성분은 개별 블록이 비교적 균일한 색상 값을 포함할 때까지 세분화될 수 있다. 따라서 비디오 프레임의 내용에 따라 분할 메커니즘이 달라진다.
단계(105)에서, 단계(103)에서 분할된 이미지 블록을 압축하기 위해 다양한 압축 메커니즘이 사용된다. 예를 들어, 인터-예측 및/또는 인트라-예측이 사용될 수 있다. 상호 예측은 공통 장면의 객체가 연속 프레임에 나타나는 경향이 있다는 사실을 이용하도록 설계되었다. 따라서, 참조 프레임에서 객체를 나타내는 블록은 인접 프레임에서 반복적으로 기술될 필요가 없다. 특히, 테이블과 같은 객체는 여러 프레임에 걸쳐 일정한 위치에 남아 있을 수 있다. 따라서 테이블은 한 번 설명되고 인접 프레임은 참조 프레임을 다시 참조할 수 있다. 패턴 일치 메커니즘을 사용하여 여러 프레임에 걸쳐 객체를 일치시킬 수 있다. 또한, 움직이는 객체는 예를 들어 물체의 모션이나 카메라의 모션으로 인해 여러 프레임에 걸쳐 표현될 수 있다. 특정 예로서, 비디오는 여러 프레임에 걸쳐 화면을 가로질러 움직이는 자동차를 보여줄 수 있다. 모션 벡터는 이러한 모션을 설명하는 데 사용할 수 있다. 모션 벡터는 프레임의 객체 좌표에서 참조 프레임의 객체 좌표까지 오프셋을 제공하는 2차원 벡터이다. 이와 같이 인터 예측은 현재 프레임의 이미지 블록을 참조 프레임의 해당 블록으로부터의 오프셋을 나타내는 모션 벡터의 집합으로 인코딩할 수 있다.
인트라 예측은 공통 프레임의 블록을 인코딩한다. 인트라 예측은 루마와 크로마 성분이 한 프레임에 모여 있는 경향이 있다는 사실을 이용한다. 예를 들어, 나무의 일부에 있는 녹색 패치는 유사한 녹색 패치에 인접하게 배치되는 경향이 있다. 인트라 예측은 다중 방향 예측 모드(예를 들어, HEVC에서 33개), 평면 모드 및 직류(DC) 모드를 사용한다. 방향성 모드는 현재 블록이 해당 방향에서 이웃 블록의 샘플과 유사/동일함을 나타낸다. 평면 모드는 행/열(예를 들어, 평면)을 따라 일련의 블록이 행 가장자리에 있는 인접 블록을 기반으로 보간될 수 있음을 나타낸다. 실제로 평면 모드는 값을 변경할 때 상대적으로 일정한 기울기를 사용하여 행/열에 걸쳐 빛/색상의 부드러운 전환을 나타낸다. DC 모드는 경계 평활화를 위해 사용되며 방향 예측 모드의 각도 방향과 관련된 모든 이웃 블록의 샘플과 관련된 평균값과 유사/동일한 블록을 나타낸다. 따라서 인트라 예측 블록은 실제 값이 아닌 다양한 관계형 예측 모드 값으로 이미지 블록을 표현할 수 있다. 또한, 인터 예측 블록은 실제 값이 아닌 모션 벡터 값으로 이미지 블록을 나타낼 수 있다. 어느 경우든 예측 블록은 일부 경우에 이미지 블록을 정확히 나타내지 않을 수 있다. 모든 차이는 잔여 블록에 저장된다. 파일을 추가로 압축하기 위해 나머지 블록에 변환을 적용할 수 있다.
단계(107)에서, 다양한 필터링 기술이 적용될 수 있다. HEVC에서 필터는 인-루프 필터링 방식에 따라 적용된다. 위에서 논의된 블록 기반 예측은 디코더에서 블록 이미지의 생성을 초래할 수 있다. 또한, 블록 기반 예측 방식은 블록을 인코딩하고 그런 다음 나중에 참조 블록으로 사용하기 위해 인코딩된 블록을 복원할 수 있다. 인-루프 필터링 방식은 노이즈 억제 필터, 디블로킹 필터, 적응 루프 필터 및 샘플 적응 오프셋(sample adaptive offset, SAO) 필터를 블록/프레임에 반복적으로 적용한다. 이러한 필터는 인코딩된 파일이 정확하게 재구성될 수 있도록 이러한 블로킹 아티팩트(blocking artifact)를 완화한다. 또한, 이들 필터는 재구성된 참조 블록에서 아티팩트를 완화하여 아티팩트가 재구성된 참조 블록에 기초하여 인코딩된 후속 블록에서 추가 아티팩트를 생성할 가능성이 적다.
비디오 신호가 분할되고, 압축되고, 필터링되면, 결과 데이터는 단계 109에서 비트스트림으로 인코딩된다. 비트스트림은 위에서 논의된 데이터뿐만 아니라 디코더에서 적절한 비디오 신호 재구성을 지원하기 위해 원하는 임의의 시그널링 데이터를 포함한다. 예를 들어, 그러한 데이터는 파티션 데이터, 예측 데이터, 잔차 블록, 및 디코더에 코딩 명령을 제공하는 다양한 플래그를 포함할 수 있다. 비트스트림은 요청 시 디코더를 향한 전송을 위해 메모리에 저장될 수 있다. 비트스트림은 또한 복수의 디코더를 향해 브로드캐스트 및/또는 멀티캐스트될 수 있다. 비트스트림 생성은 반복적인 프로세스이다. 따라서, 단계 101, 103, 105, 107 및 109는 많은 프레임 및 블록에 걸쳐 연속적으로 및/또는 동시에 발생할 수 있다. 도 1에 도시된 순서는 명확성과 논의의 용이함을 위해 제시되며, 비디오 코딩 프로세스를 특정 순서로 제한하기 위한 것이 아니다.
디코더는 비트스트림을 수신하고 단계 111에서 디코딩 프로세스를 시작한다. 구체적으로, 디코더는 비트스트림을 대응하는 신택스 및 비디오 데이터로 변환하기 위해 엔트로피 디코딩 방식을 사용한다. 디코더는 단계 111에서 프레임에 대한 파티션을 결정하기 위해 비트스트림으로부터의 신택스 데이터를 사용한다. 파티셔닝은 단계 103에서 블록 파티셔닝의 결과와 일치해야 한다. 단계 111에서 사용된 엔트로피 인코딩/디코딩이 설명된다. 인코더는 입력 이미지에서 값의 공간적 위치를 기반으로 여러 가능한 선택 중에서 블록 분할 방식을 선택하는 것과 같이 압축 프로세스 동안 많은 선택을 한다. 정확한 선택을 시그널링하는 것은 많은 수의 빈(bin)을 사용할 수 있다. 본 명세서에서 사용되는 바와 같이, 빈은 변수로 취급되는 이진 값(예를 들어, 컨텍스트에 따라 변할 수 있는 비트 값)이다. 엔트로피 코딩을 사용하면 인코더가 특정 경우에 분명히 실행 가능하지 않은 옵션을 버리고 허용 가능한 옵션 집합을 남길 수 있다. 그런 다음 각각의 허용 옵션에 코드 단어가 할당된다. 코드 워드의 길이는 허용 가능한 옵션의 수에 기초한다(예를 들어, 2개의 옵션에 대한 1개의 빈, 3~4개의 옵션에 대한 2개의 빈 등). 그런 다음 인코더는 선택한 옵션에 대한 코드 워드를 인코딩한다. 이 체계는 가능한 모든 옵션의 잠재적으로 큰 세트로부터의 선택을 고유하게 표시하는 것과는 대조적으로 허용 가능한 옵션의 작은 하위 세트로부터의 선택을 고유하게 나타내기 위해 코드 워드가 원하는 만큼 클수록 코드 워드의 크기를 줄인다. 그런 다음 디코더는 인코더와 유사한 방식으로 허용 가능한 옵션 세트를 결정하여 선택을 디코딩한다. 허용 가능한 옵션 세트를 결정함으로써 디코더는 코드 워드를 읽고 인코더에 의해 만들어진 선택을 결정할 수 있다.
단계 113에서 디코더는 블록 디코딩을 수행한다. 특히, 디코더는 역변환을 사용하여 잔차 블록을 생성한다. 그런 다음 디코더는 잔차 블록 및 대응하는 예측 블록을 사용하여 분할에 따라 이미지 블록을 재구성한다. 예측 블록은 단계 105에서 인코더에서 생성된 바와 같이 인트라 예측 블록 및 인터 예측 블록 모두를 포함할 수 있다. 이어서 재구성된 이미지 블록은 단계 111에서 결정된 분할 데이터에 따라 재구성된 비디오 신호의 프레임에 위치된다. 단계(113)는 또한 위에서 논의된 바와 같이 엔트로피 코딩을 통해 비트스트림에서 시그널링될 수 있다.
단계 115에서, 인코더에서 단계 107과와 유사한 방식으로 재구성된 비디오 신호의 프레임에 대해 필터링이 수행된다. 예를 들어, 노이즈 억제 필터, 디블로킹 필터, 적응 루프 필터 및 SAO 필터를 프레임에 적용하여 블로킹 아티팩트를 제거할 수 있다. 프레임이 필터링되면, 비디오 신호는 최종 사용자가 보기 위해 단계 117에서 디스플레이로 출력될 수 있다.
도 2는 비디오 코딩을 위한 예시적인 코딩 및 디코딩(코덱) 시스템(200)의 개략도이다. 구체적으로, 코덱 시스템(200)은 동작 방법(100)의 구현을 지원하는 기능을 제공한다. 코덱 시스템(200)은 인코더와 디코더 모두에 사용되는 컴포넌트를 묘사하도록 일반화된다. 코덱 시스템(200)은 동작 방법(100)의 단계 101 및 단계 103과 관련하여 논의된 바와 같이 비디오 신호를 수신하고 분할하며, 이는 분할된 비디오 신호(201)를 생성한다. 코덱 시스템(200)은 그런 다음 방법(100)의 단계 105, 단계 107 및 단계 109와 관련해서 논의된 바와 같이 인코더로서 동작할 때 분할된 비디오 신호(201)를 코딩된 비트스트림으로 압축한다. 디코더로서 동작할 때, 코덱 시스템(200)은 동작 방법(100)의 단계 111, 단계 113, 단계 115, 및 단계 117과 관련하여 논의된 바와 같이 비트스트림으로부터 출력 비디오 신호를 생성한다. 코덱 시스템(200)은 일반 코더 제어 컴포넌트(211), 변환 스케일링 및 양자화 컴포넌트(213), 인트라-픽처 추정 컴포넌트(215), 인트라-픽처 예측 컴포넌트(217), 모션 보상 컴포넌트(219), 모션 추정 컴포넌트(221), 스케일링 및 역변환 컴포넌트(229), 필터 제어 분석 컴포넌트(227), 인-루프 필터 컴포넌트(225), 디코딩된 픽처 버퍼 컴포넌트(223), 및 헤더 포맷팅 및 컨텍스트 적응 이진 산술 코딩(header formatting and context adaptive binary arithmetic coding, CABAC) 컴포넌트(231)를 포함한다. 이러한 컴포넌트는 도시된 바와 같이 결합된다. 도 2에서 흑색선은 인코딩/디코딩될 데이터의 이동을 나타내고, 점선은 다른 컴포넌트의 동작을 제어하는 제어 데이터의 이동을 나타낸다. 코덱 시스템(200)의 컴포넌트는 모두 인코더에 존재할 수 있다. 디코더는 코덱 시스템(200)의 컴포넌트들의 서브세트를 포함할 수 있다. 예를 들어, 디코더는 인트라 픽처 예측 컴포넌트(217), 모션 보상 컴포넌트(219), 스케일링 및 역변환 컴포넌트(229), 인-루프 필터 컴포넌트(225) 및 디코딩된 픽처 버퍼 컴포넌트(223)를 포함한다. 이들 컴포넌트가 설명된다.
분할된 비디오 신호(201)는 코딩 트리에 의해 픽셀 블록으로 분할된 캡처된 비디오 시퀀스이다. 코딩 트리는 픽셀 블록을 더 작은 픽셀 블록으로 세분화하기 위해 다양한 분할 모드를 사용한다. 그런 다음 이러한 블록을 더 작은 블록으로 세분화할 수 있다. 블록은 코딩 트리 상의 노드로 지칭될 수 있다. 더 큰 부모 노드는 더 작은 자식 노드로 분할된다. 노드가 세분화되는 횟수를 노드/코딩 트리의 깊이라고 한다. 분할된 블록은 일부의 경우 CU(Coding Unit)에 포함될 수 있다. 예를 들어, CU는 CU에 대한 해당 신택스 명령과 함께 루마 블록, 적색 차이 크로마(Cr) 블록 및 청색 차이 크로마(Cb) 블록을 포함하는 CTU의 하위 부분일 수 있다. 분할 모드는 적용된 분할 모드에 따라 다양한 모양의 노드를 각각 2, 3 또는 4개의 자식 노드로 분할하는 데 사용되는 이진 트리(BT), 삼중 트리(TT) 및 쿼드 트리(QT)를 포함할 수 있다. 분할된 비디오 신호(201)는 일반 코더 제어 컴포넌트(211), 변환 스케일링 및 양자화 컴포넌트(213), 인트라 픽처 추정 컴포넌트(215), 필터 제어 분석 컴포넌트(227) 및 압축을 위한 모션 추정 컴포넌트(221)로 포워딩된다.
일반 코더 제어 컴포넌트(211)는 애플리케이션 제약에 따라 비디오 시퀀스의 이미지를 비트스트림으로 코딩하는 것과 관련된 결정을 내리도록 구성된다. 예를 들어, 일반 코더 제어 컴포넌트(211)는 비트레이트/비트스트림 크기 대 재구성 품질의 최적화를 관리한다. 이러한 결정은 저장 공간/대역폭 가용성 및 이미지 해상도 요청을 기반으로 할 수 있다. 일반 코더 제어 컴포넌트(211)는 또한 버퍼 언더런 및 오버런 문제를 완화하기 위해 전송 속도에 비추어 버퍼 활용을 관리한다. 이러한 문제를 관리하기 위해 일반 코더 제어 컴포넌트(211)는 다른 컴포넌트에 의한 분할, 예측 및 필터링을 관리한다. 예를 들어, 일반 코더 제어 컴포넌트(211)는 해상도를 증가시키고 대역폭 사용을 증가시키기 위해 압축 복잡도를 동적으로 증가시키거나 해상도 및 대역폭 사용을 감소시키기 위해 압축 복잡도를 감소시킬 수 있다. 따라서, 일반 코더 제어 컴포넌트(211)는 코덱 시스템(200)의 다른 컴포넌트를 제어하여 비디오 신호 재구성 품질과 비트 레이트 문제의 균형을 맞춘다. 일반 코더 제어 컴포넌트(211)는 다른 컴포넌트의 동작을 제어하는 제어 데이터를 생성한다. 제어 데이터는 또한 디코더에서 디코딩하기 위한 신호 파라미터로 비트스트림에서 인코딩되도록 헤더 포맷팅 및 CABAC 컴포넌트(231)로 포워딩된다.
분할된 비디오 신호(201)는 또한 인터 예측을 위해 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)로 전송된다. 분할된 비디오 신호(201)의 프레임 또는 슬라이스는 다수의 비디오 블록으로 분할될 수 있다. 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)는 시간 예측을 제공하기 위해 하나 이상의 참조 프레임에서 하나 이상의 블록에 대해 수신된 비디오 블록의 예측간 코딩을 수행한다. 코덱 시스템(200)은 예를 들어 비디오 데이터의 각 블록에 대한 적절한 코딩 모드를 선택하기 위해 다중 코딩 패스를 수행할 수 있다.
모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)는 고도로 통합될 수 있지만, 개념적 목적을 위해 별도로 예시된다. 모션 추정 컴포넌트(221)에 의해 수행되는 모션 추정은 비디오 블록에 대한 모션을 추정하는 모션 벡터를 생성하는 프로세스이다. 예를 들어, 모션 벡터는 예측 블록에 대한 코딩된 객체의 변위를 나타낼 수 있다. 예측 블록은 픽셀 차이 측면에서 코딩할 블록과 밀접하게 일치하는 것으로 발견되는 블록이다. 예측 블록은 참조 블록이라고도 할 수 있다. 그러한 픽셀 차이는 절대 차이의 합(sum of absolute difference, SAD), 차이 제곱의 합(sum of square difference, SSD), 또는 다른 차이 메트릭에 의해 결정될 수 있다. HEVC는 CTU, 코딩 트리 블록(CTB) 및 CU를 비롯한 여러 코딩된 객체를 사용한다. 예를 들어, CTU는 CTB로 분할될 수 있으며, 그런 다음 CU에 포함하기 위해 CB로 분할될 수 있다. CU는 예측 데이터를 포함하는 예측 단위(PU) 및/또는 CU에 대한 변환된 잔차 데이터를 포함하는 변환 단위(TU)로서 인코딩될 수 있다. 모션 추정 컴포넌트(221)는 레이트 왜곡 최적화 프로세스의 일부로서 레이트 왜곡 분석을 사용함으로써 모션 벡터, PU, 및 TU를 생성한다. 예를 들어, 모션 추정 컴포넌트(221)는 현재 블록/프레임에 대한 다중 참조 블록, 다중 모션 벡터 등을 결정할 수 있고, 최상의 레이트 왜곡 특성을 갖는 참조 블록, 모션 벡터 등을 선택할 수 있다. 최고의 레이트 왜곡 특성은 비디오 재구성의 품질(예를 들어, 압축에 의한 데이터 손실의 양)과 코딩 효율성(예를 들어, 최종 인코딩의 크기)의 균형을 유지한다.
일부 예에서, 코덱 시스템(200)은 디코딩된 픽처 버퍼 컴포넌트(223)에 저장된 참조 픽처의 정수 이하 픽셀 위치에 대한 값을 계산할 수 있다. 예를 들어, 비디오 코덱 시스템(200)은 1/4 픽셀 위치, 1/8 픽셀 위치, 또는 참조 픽처의 기타 분수 픽셀 위치의 값을 보간할 수 있다. 따라서, 모션 추정 컴포넌트(221)는 전체 픽셀 위치 및 분수 픽셀 위치에 대한 모션 검색을 수행하고 분수 픽셀 정밀도를 갖는 모션 벡터를 출력할 수 있다. 모션 추정 컴포넌트(221)는 PU의 위치를 참조 픽처의 예측 블록의 위치와 비교함으로써 인터 코딩된 슬라이스에서 비디오 블록의 PU에 대한 모션 벡터를 계산한다. 모션 추정 컴포넌트(221)는 계산된 모션 벡터를 모션 데이터로서 헤더 포맷팅에 출력하고 모션을 인코딩하기 위한 CABAC 컴포넌트(231)를 모션 보상 컴포넌트(219)에 출력한다.
모션 보상 컴포넌트(219)에 의해 수행되는 모션 보상은 모션 추정 컴포넌트(221)에 의해 결정된 모션 벡터에 기초하여 예측 블록을 페치하거나 생성하는 것을 수반할 수 있다. 다시, 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)는 몇 가지 예에서 기능적으로 통합될 수 있다. 현재 비디오 블록의 PU에 대한 모션 벡터를 수신하면, 모션 보상 컴포넌트(219)는 모션 벡터가 가리키는 예측 블록을 찾을 수도 있다. 그런 다음, 코딩되고 있는 현재 비디오 블록의 픽셀 값으로부터 예측 블록의 픽셀 값을 빼서 픽셀 차이 값을 형성함으로써 잔차 비디오 블록이 형성된다. 일반적으로, 모션 추정 컴포넌트(221)는 루마 컴포넌트에 대한 모션 추정을 수행하고, 모션 보상 컴포넌트(219)는 크로마 컴포넌트 및 루마 컴포넌트 모두에 대한 루마 컴포넌트에 기초하여 계산된 모션 벡터를 사용한다. 예측 블록 및 잔차 블록은 변환 스케일링 및 양자화 컴포넌트(213)로 포워딩된다.
분할된 비디오 신호(201)는 또한 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)로 전송된다. 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)와 같이, 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)는 고도로 통합될 수 있지만, 개념적 목적을 위해 별도로 예시된다. 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)는 위에서 설명한 대로 프레임 간의 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)에 의해 수행되는 인터 예측에 대한 대안으로서 현재 프레임의 블록에 대한 현재 블록을 인트라 예측한다. 특히, 인트라 픽처 추정 컴포넌트(215)는 현재 블록을 인코딩하기 위해 사용할 인트라 예측 모드를 결정한다. 일부 예들에서, 인트라 픽처 추정 컴포넌트(215)는 다수의 테스트된 인트라 예측 모드들로부터 현재 블록을 인코딩하기 위해 적절한 인트라 예측 모드를 선택한다. 선택된 인트라 예측 모드는 그런 다음 인코딩을 위해 헤더 포맷팅 및 CABAC 컴포넌트(231)로 포워딩된다.
예를 들어, 인트라 픽처 추정 컴포넌트(215)는 다양한 테스트된 인트라 예측 모드에 대한 레이트-왜곡 분석을 사용하여 레이트-왜곡 값을 계산하고, 테스트된 인트라 예측 모드 중에서 가장 좋은 레이트-왜곡 특성을 갖는 인트라 예측 모드를 선택한다. 레이트-왜곡 분석은 일반적으로 인코딩된 블록과 인코딩된 블록을 생성하기 위해 인코딩된 원래의 비인코딩된 블록 사이의 왜곡(또는 오류)의 양과 인코딩된 블록을 생성하는 데 사용된 비트 전송률(예를 들어, 비트 수)을 결정한다. 인트라-픽처 추정 컴포넌트(215)는 블록에 대한 최상의 레이트-왜곡 값을 나타내는 인트라 예측 모드를 결정하기 위해 다양한 인코딩된 블록에 대한 왜곡 및 레이트로부터 비율을 계산한다. 또한, 인트라-픽처 추정 컴포넌트(215)는 레이트-왜곡 최적화(RDO)에 기초한 깊이 모델링 모드(DMM)를 사용하여 깊이 맵의 깊이 블록을 코딩하도록 구성될 수 있다.
인트라 픽처 예측 컴포넌트(217)는 인코더 상에서 구현될 때 인트라 픽처 추정 컴포넌트(215)에 의해 결정된 선택된 인트라 예측 모드에 기초하여 예측 블록으로부터 잔차 블록을 생성하거나 디코더에서 구현될 때 비트스트림으로부터 잔차 블록을 판독할 수 있다. 잔차 블록은 예측 블록과 원본 블록 간의 값의 차이를 포함하며 행렬로 표현된다. 그런 다음, 잔차 블록은 변환 스케일링 및 양자화 컴포넌트(213)로 포워딩된다. 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)는 루마 및 크로마 성분 모두에 대해 동작할 수 있다.
변환 스케일링 및 양자화 컴포넌트(213)는 잔차 블록을 추가로 압축하도록 구성된다. 변환 스케일링 및 양자화 컴포넌트(213)는 이산 코사인 변환(discrete cosine transform, DCT), 이산 사인 변환(discrete sine transform, DST) 또는 개념적으로 유사한 변환과 같은 변환을 잔차 블록에 적용하여 잔차 변환 계수 값을 포함하는 비디오 블록을 생성한다. 웨이블릿 변환, 정수 변환, 부분대역 변환 또는 다른 유형의 변환도 사용할 수 있다. 변환은 잔여 정보를 픽셀 값 도메인으로부터 주파수 도메인과 같은 변환 도메인으로 변환할 수 있다. 변환 스케일링 및 양자화 컴포넌트(213)는 또한 예를 들어 주파수에 기초하여 변환된 잔차 정보를 스케일링하도록 구성된다. 그러한 스케일링은 상이한 주파수 정보가 상이한 입도에서 양자화되도록 잔여 정보에 스케일 팩터를 적용하는 것을 포함하며, 이는 재구성된 비디오의 최종 시각적 품질에 영향을 미칠 수 있다. 변환 스케일링 및 양자화 컴포넌트(213)는 또한 비트 레이트를 추가로 감소시키기 위해 변환 계수를 양자화하도록 구성된다. 양자화 프로세스는 계수들의 일부 또는 전부와 연관된 비트 깊이를 감소시킬 수 있다. 양자화의 정도는 양자화 파라미터를 조정함으로써 수정될 수 있다. 일부 예들에서, 변환 스케일링 및 양자화 컴포넌트(213)는 그런 다음 양자화된 변환 계수들을 포함하는 행렬의 스캔을 수행할 수 있다. 양자화된 변환 계수는 헤더 포맷팅 및 CABAC 컴포넌트(231)로 전송되어 비트스트림에서 인코딩된다.
스케일링 및 역변환 컴포넌트(229)는 모션 추정을 지원하기 위해 변환 스케일링 및 양자화 컴포넌트(213)의 역 연산을 적용한다. 스케일링 및 역변환 컴포넌트(229)는 예를 들어 다른 현재 블록에 대한 예측 블록이 될 수 있는 참조 블록으로서 나중에 사용하기 위해, 역 스케일링, 변환, 및/또는 양자화를 적용하여 픽셀 도메인에서 잔여 블록을 재구성한다. 모션 추정 컴포넌트(221) 및/또는 모션 보상 컴포넌트(219)는 나중 블록/프레임의 모션 추정에 사용하기 위해 대응하는 예측 블록에 잔차 블록을 다시 추가함으로써 참조 블록을 계산할 수도 있다. 스케일링, 양자화 및 변환 중에 생성된 아티팩트를 완화하기 위해 재구성된 참조 블록에 필터가 적용된다. 그렇지 않으면 후속 블록이 예측될 때 이러한 아티팩트가 부정확한 예측을 야기하고 추가 아티팩트를 생성할 수 있다.
필터 제어 분석 컴포넌트(227) 및 인-루프 필터 컴포넌트(225)는 필터를 잔차 블록 및/또는 재구성된 이미지 블록에 적용한다. 예를 들어, 스케일링 및 역변환 컴포넌트(229)로부터의 변환된 잔차 블록은 인트라 픽처 예측 컴포넌트(217) 및/또는 모션 보상 컴포넌트(219)로부터의 대응하는 예측 블록과 결합되어 원래의 이미지 블록을 재구성할 수 있다. 그런 다음 필터가 재구성된 이미지 블록에 적용될 수 있다. 일부 예들에서, 필터들은 그 대신에 잔차 블록들에 적용될 수 있다. 도 2의 다른 컴포넌트와 마찬가지로, 필터 제어 분석 컴포넌트(227) 및 인-루프 필터 컴포넌트(225)는 고도로 통합되어 함께 구현될 수 있지만, 개념적 목적을 위해 별도로 도시된다. 재구성된 참조 블록에 적용된 필터는 특정 공간 영역에 적용되며 이러한 필터가 적용되는 방식을 조정하기 위해 여러 파라미터를 포함한다. 필터 제어 분석 컴포넌트(227)는 재구성된 참조 블록을 분석하여 그러한 필터가 적용되어야 하는 위치를 결정하고 대응하는 파라미터를 설정한다. 이러한 데이터는 인코딩을 위한 필터 제어 데이터로서 헤더 포맷팅 및 CABAC 컴포넌트(231)로 포워딩된다. 인-루프 필터 컴포넌트(225)는 필터 제어 데이터에 기초하여 이러한 필터를 적용한다. 필터는 디블로킹 필터, 잡음 억제 필터, SAO 필터 및 적응 루프 필터를 포함할 수 있다. 그러한 필터는 예에 따라 공간/픽셀 도메인(예를 들어, 재구성된 픽셀 블록) 또는 주파수 도메인에서 적용될 수 있다.
인코더로서 동작할 때, 필터링된 재구성된 이미지 블록, 잔차 블록, 및/또는 예측 블록은 위에서 논의된 바와 같이 모션 추정에서 나중에 사용하기 위해 디코딩된 픽처 버퍼 컴포넌트(223)에 저장된다. 디코더로서 동작할 때, 디코딩된 픽처 버퍼 컴포넌트(223)는 재구성되고 필터링된 블록을 저장하고 출력 비디오 신호의 일부로서 디스플레이를 향해 포워딩한다. 디코딩된 픽처 버퍼 컴포넌트(223)는 예측 블록, 잔차 블록, 및/또는 재구성된 이미지 블록을 저장할 수 있는 임의의 메모리 장치일 수 있다.
헤더 포맷팅 및 CABAC 컴포넌트(231)는 코덱 시스템(200)의 다양한 컴포넌트로부터 데이터를 수신하고 이러한 데이터를 디코더로의 전송을 위해 코딩된 비트스트림으로 인코딩한다. 구체적으로, 헤더 포맷팅 및 CABAC 컴포넌트(231)는 일반 제어 데이터 및 필터 제어 데이터와 같은 제어 데이터를 인코딩하기 위한 다양한 헤더를 생성한다. 또한, 인트라 예측 및 모션 데이터를 포함하는 예측 데이터와 양자화된 변환 계수 데이터 형태의 잔차 데이터가 모두 비트스트림에서 인코딩된다. 최종 비트스트림은 원래의 분할된 비디오 신호(201)를 재구성하기 위해 디코더가 원하는 모든 정보를 포함한다. 이러한 정보는 또한 인트라 예측 모드 인덱스 테이블(코드워드 매핑 테이블이라고도 함), 다양한 블록에 대한 인코딩 컨텍스트의 정의, 가장 가능성 있는 인트라 예측 모드, 파티션 정보의 표시 등을 포함할 수 있다. 이러한 데이터는 엔트로피 코딩을 사용하여 인코딩될 수 있다. 예를 들어, 정보는 컨텍스트 적응 가변 길이 코딩(context adaptive variable length coding, CAVLC), CABAC, 신택스 기반 컨텍스트 적응 이진 산술 코딩(syntax-based context-adaptive binary arithmetic coding, SBAC), 확률 간격 분할 엔트로피(probability interval partitioning entropy, PIPE) 코딩, 또는 다른 엔트로피 코딩 기술을 사용하여 인코딩될 수 있다. 엔트로피 코딩에 이어, 코딩된 비트스트림은 다른 디바이스(예를 들어, 비디오 디코더)로 전송되거나 나중의 전송 또는 검색을 위해 보관될 수 있다.
도 3은 예시적인 비디오 인코더(300)를 예시하는 블록도이다. 비디오 인코더(300)는 코덱 시스템(200)의 인코딩 기능을 구현하고 및/또는 동작 방법(100)의 단계 101, 단계 103, 단계 105, 단계 107, 및/또는 단계 109를 구현하기 위해 사용될 수 있다. 인코더(300)는 입력 비디오 신호를 분할하여 분할된 비디오 신호(301)를 생성하며, 이는 분할된 비디오 신호(201)와 실질적으로 유사하다. 분할된 비디오 신호(301)는 그런 다음 인코더(300)의 컴포넌트에 의해 압축되고 비트스트림으로 인코딩된다.
구체적으로, 분할된 비디오 신호(301)는 인트라 예측을 위해 인트라 픽처 예측 컴포넌트(317)로 포워딩된다. 인트라 픽처 예측 컴포넌트(317)는 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)와 실질적으로 유사할 수 있다. 분할된 비디오 신호(301)는 또한 디코딩된 픽처 버퍼 컴포넌트(323) 내의 참조 블록에 기초해서 인터-예측을 위해 모선 보상 컴포넌트(321)로 포워딩된다. 모션 보상 컴포넌트(321)는 모션 추정 컴포넌트(221) 및 모션 보상 컴포넌트(219)와 실질적으로 유사할 수 있다. 인트라 픽처 예측 컴포넌트(317) 및 모션 보상 컴포넌트(321)로부터의 예측 블록 및 잔차 블록은 잔차 블록의 변환 및 양자화를 위한 변환 및 양자화 컴포넌트(313)에 포워딩된다. 변환 및 양자화 컴포넌트(313)는 변환 스케일링 및 양자화 컴포넌트(213)와 실질적으로 유사할 수 있다. 변환 및 양자화된 잔여 블록 및 대응하는 예측 블록(관련 제어 데이터와 함께)은 비트스트림으로 코딩하기 위해 엔트로피 코딩 컴포넌트(331)로 포워딩된다. 엔트로피 코딩 컴포넌트(331)는 헤더 포맷팅 및 CABAC 컴포넌트(231)와 실질적으로 유사할 수 있다.
변환 및 양자화된 잔차 블록 및/또는 대응하는 예측 블록은 또한 모션 보상 컴포넌트(321)에 의해 사용하기 위한 참조 블록으로의 재구성을 위해 변환 및 양자화 컴포넌트(313)로부터 역변환 및 양자화 컴포넌트(329)로 포워딩된다. 변환 및 양자화 컴포넌트(329)는 스케일링 및 역변환 컴포넌트(229)와 실질적으로 유사할 수 있다. 인-루프 필터 컴포넌트(325)의 인-루프 필터는 또한 예에 따라 잔차 블록 및/또는 재구성된 참조 블록에 적용된다. 인-루프 필터 컴포넌트(325)는 필터 제어 분석 컴포넌트(227) 및 인-루프 필터 컴포넌트(225)와 실질적으로 유사할 수 있다. 인-루프 필터 컴포넌트(325)는 인-루프 필터 컴포넌트(225)와 관련하여 논의된 바와 같이 다중 필터를 포함할 수 있다. 필터링된 블록은 그런 다음 모션 보상 컴포넌트(321)에 의한 참조 블록으로서 사용하기 위해 디코딩된 픽처 버퍼 컴포넌트(323)에 저장된다. 디코딩된 픽처 버퍼 컴포넌트(323)는 디코딩된 픽처 버퍼 컴포넌트(223)와 실질적으로 유사할 수 있다.
도 4는 예시적인 비디오 디코더(400)를 예시하는 블록도이다. 비디오 디코더(400)는 코덱 시스템(200)의 디코딩 기능을 구현하고 및/또는 동작 방법(100)의 단계 111, 단계 113, 단계 115, 및/또는 단계 117을 구현하기 위해 사용될 수 있다. 디코더(400)는 예를 들어 인코더(300)로부터 비트스트림을 수신하고, 최종 사용자에게 표시하기 위해 비트스트림에 기초하여 재구성된 출력 비디오 신호를 생성한다.
비트스트림은 엔트로피 디코딩 컴포넌트(433)에 의해 수신된다. 엔트로피 디코딩 컴포넌트(433)는 CAVLC, CABAC, SBAC, PIPE 코딩, 또는 다른 엔트로피 코딩 기술과 같은 엔트로피 디코딩 방식을 구현하도록 구성된다. 예를 들어, 엔트로피 디코딩 컴포넌트(433)는 헤더 정보를 사용하여 비트스트림에서 코드워드로 인코딩된 추가 데이터를 해석하기 위한 컨텍스트를 제공할 수 있다. 디코딩된 정보는 일반 제어 데이터, 필터 제어 데이터, 파티션 정보, 모션 데이터, 예측 데이터 및 잔차 블록으로부터의 양자화된 변환 계수와 같은 비디오 신호를 디코딩하기 위한 임의의 원하는 정보를 포함한다. 양자화된 변환 계수는 잔여 블록으로의 재구성을 위해 역변환 및 양자화 컴포넌트(429)로 포워딩된다. 역변환 및 양자화 컴포넌트(429)는 역변환 및 양자화 컴포넌트(329)와 유사할 수 있다.
재구성된 잔차 블록 및/또는 예측 블록은 인트라 예측 동작에 기초한 이미지 블록으로의 재구성을 위해 인트라 픽처 예측 컴포넌트(417)로 포워딩된다. 인트라 픽처 예측 컴포넌트(417)는 인트라 픽처 추정 컴포넌트(215) 및 인트라 픽처 예측 컴포넌트(217)와 유사할 수 있다. 구체적으로, 인트라 픽처 예측 컴포넌트(417)는 프레임에서 참조 블록을 찾기 위해 예측 모드를 사용하고 인트라 예측된 이미지 블록을 재구성하기 위해 결과에 잔차 블록을 적용한다. 재구성된 인트라 예측된 이미지 블록 및/또는 잔차 블록 및 대응하는 인터 예측 데이터는 디코딩된 픽처 버퍼 컴포넌트(223) 및 인-루프 필터 컴포넌트(225)와 각각 실질적으로 유사할 수 있는 인-루프 필터 컴포넌트(425)를 통해 디코딩된 픽처 버퍼 컴포넌트(423)에 포워딩된다. 인-루프 필터 컴포넌트(425)는 재구성된 이미지 블록, 잔차 블록 및/또는 예측 블록을 필터링하고, 그러한 정보는 디코딩된 픽처 버퍼 컴포넌트(423)에 저장된다. 디코딩된 픽처 버퍼 컴포넌트(423)로부터의 재구성된 이미지 블록은 인터-예측을 위해 모션 보상 컴포넌트(421)로 포워딩된다. 모션 보상 컴포넌트(421)는 모션 추정 컴포넌트(221) 및/또는 모션 보상 컴포넌트(219)와 실질적으로 유사할 수 있다. 구체적으로, 모션 보상 컴포넌트(421)는 참조 블록으로부터의 모션 벡터를 사용하여 예측 블록을 생성하고 잔여 블록을 결과에 적용하여 이미지 블록을 재구성한다. 결과적인 재구성된 블록은 또한 인-루프 필터 컴포넌트(425)를 통해 디코딩된 픽처 버퍼 컴포넌트(423)로 포워딩될 수 있다. 디코딩된 픽처 버퍼 컴포넌트(423)는 파티션 정보를 통해 프레임으로 재구성될 수 있는 추가의 재구성된 이미지 블록을 계속 저장한다. 이러한 프레임은 시퀀스에 배치될 수도 있다. 시퀀스는 재구성된 출력 비디오 신호로서 디스플레이를 향해 출력된다.
도 5는 WPP(500)의 예시적인 메커니즘을 예시하는 개략도이다. 예를 들어, WPP(500)는 슬라이스(501)를 인코딩 및/또는 디코딩하기 위한 방법(100)의 일부로서 이용될 수 있다. 이와 같이, WPP(500)는 코덱 시스템(200), 인코더(300), 및/또는 디코더(400)에 의해 이용될 수 있다.
도시된 바와 같이, WPP(500)는 슬라이스(501)에 적용된다. 슬라이스(501)는 픽처의 파티션이다. 구체적으로, 픽처는 하나 이상의 슬라이스(501)로 분할될 수 있다. 슬라이스(501)는 정수 수의 연속적인 완전한 CTU 행(521, 522, 523, 524, 525)을 포함할 수 있다. 또한, 슬라이스(501) 및 모든 하위-분할(sub-division)(예: CTU 511 및 512)은 단일 NAL 단위에 독점적으로 포함된다. WPP(500)는 슬라이스(501)가 정수 수의 연속적인 완전한 CTU 행(521, 522, 523, 524, 525)을 포함할 때 적용될 수 있다. 선택적으로, 일부 예들에서 슬라이스(501)는 하나 이상의 타일을 포함할 수 있고, 이러한 타일은 각각 정수 수의 연속적인 완전한 CTU 행(521, 522, 523, 524 및 525)을 포함할 수 있다. 따라서, 슬라이스(501)는 VVC 표준에서 단일 NAL 단위에 배타적으로 포함되는 픽처의 타일 내의 정수 수의 완전한 타일의 또는 정수 수의 연속적인 완전한 CTU 행(521-525)으로 정의된다.
슬라이스(501)는 CTU(511, 512)를 포함한다. CTU(511/512)는 코딩 트리에 의해 코딩 블록으로 분할될 수 있는 미리 정의된 크기의 샘플 그룹이다. 예를 들어, CTU(511 및 512)는 CTU 행(521-525) 및 CTU 열(516)로 배열될 수 있다. CTU 행(521-525)은 슬라이스(501)의 왼쪽 경계와 슬라이스(501)의 오른쪽 경계 사이에서 수직으로 연장하는 CTU(511/512)의 그룹이다. CTU 열(516)은 슬라이스(501)의 상단 경계와 슬라이스(501)의 하단 경계 사이에서 수직으로 연장되는 CTU(511/512)의 그룹이다.
WPP(500)는 코드 CTU(511/512)와 병렬로 동작하는 다중 컴퓨팅 스레드를 사용할 수 있다. 도시된 예에서, CTU(511)는 이미 코딩되었고 CTU(512)는 아직 코딩되지 않았다. 예를 들어, 제1 스레드는 처음에 CTU 행(521) 코딩을 시작할 수 있다. CTU(511)가 제1 CTU 행(521)에서 코딩되었다면, 제2 스레드는 CTU 행(522)을 코딩하기 시작할 수 있다. CTU(511)가 제2 CTU 행(522)에서 코딩되었다면, 제3 스레드는 CTU 행(523)을 코딩하기 시작할 수 있다. CTU(511)가 제3 CTU 행(523)에서 코딩되었다면, 제4 스레드는 CTU 행(524)을 코딩하기 시작할 수 있다. CTU(511)가 제4 CTU 행(524)에서 코딩되었다면, 제5 스레드는 제5 CTU 행(525)을 코딩하기 시작할 수 있다. 이것은 도 5에 도시된 바와 같은 패턴으로 된다. 원하는 경우 추가 스레드를 사용할 수 있다. 이 메커니즘은 외형 같은 파면을 가진 패턴을 생성하므로 WPP(500)의 이름이 명명된다. 일부 비디오 코딩 메커니즘은 현재 CTU(512)의 위 또는 왼쪽에 위치한 코딩된 CTU(511)를 기반으로 현재 CTU(512)를 코딩한다. WPP(500)는 코딩될 임의의 현재 CTU(512)에 도달할 때 이러한 CTU(511)가 이미 코딩되었음을 보장하기 위해 각각의 스레드를 시작하는 사이에 CTU(511) 코딩 지연을 남겨둔다. VVC 표준을 사용하는 시스템은 하나의 CTU(511) 코딩 지연을 사용할 수 있는 반면, HEVC와 같은 다른 시스템은 두 개의 CTU(511) 코딩 지연을 사용할 수 있음에 유의해야 한다. 임의의 다른 CTU(511) 코딩 지연 값이 또한 본 개시의 범위 내에서 사용될 수 있다.
CTU(511)는 CTU 행(521-525)에서 비트스트림으로 코딩된다. 예를 들어, CTU 행 521은 비트스트림에 포함될 수 있고, CTU 행 522이 뒤를 잇고, CTU 행 523이 뒤를 잇고, CTU 행 524이 뒤를 잇고, CTU 행 525이 뒤를 잇고, 이와 같이 계속된다. 각각의 CTU 행 521-525는 독립적으로 주소 지정 가능 비트스트림에서 슬라이스(501)의 서브세트일 수 있다. 예를 들어, 각각의 CTU 행(521-525)은 엔트리 포인트(517)에서 어드레싱될 수 있다. 엔트리 포인트(517)는 슬라이스(501)가 인코딩된 후 슬라이스(501)의 대응하는 서브세트에 대한 비디오 데이터의 첫 번째 비트를 포함하는 비트스트림에서의 비트 위치이다. WPP(500)가 사용될 때, 엔트리 포인트(517)는 대응하는 CTU 행(521-525)의 첫 번째 비트를 포함하는 비트 위치이다. 예를 들어, CTU 행(523)에 대한 엔트리 포인트(517)는 CTU 행(523)에 대한 비디오 데이터의 첫 번째 비트를 포함하고 CTU 행(522)에 대한 비디오 데이터의 마지막 비트 뒤에 위치한다. 이와 같이, 엔트리 포인트의 수(NumEntryPoints)(518)는 CTU 행(521-525)에 대한 엔트리 포인트(517)의 수이다.
일부 비디오 코딩 시스템에서, 엔트리 포인트(517)에 대한 비트 오프셋은 슬라이스(501)와 연관된 슬라이스 헤더의 어레이로 시그널링될 수 있다. 또한, 인코더는 NumEntryPoint(518)를 결정할 수 있고 슬라이스 헤더에서, 예를 들어 num_entry_point_offsets 파라미터에서 이러한 데이터를 시그널링할 수 있다. 디코더는 그런 다음 디코딩을 시작하기 위해 모든 관련 엔트리 포인트(517)를 획득하기 위해 어레이로부터 얼마나 많은 비트 오프셋을 획득해야 하는지를 결정하기 위해 엔트리 포인트(517)의 수를 사용할 수 있다. num_entry_point_offsets 파라미터는 여러 비트를 포함하며 각 슬라이스 헤더에서 시그널링된다. 각 픽처는 여러 개의 슬라이스(501)를 포함할 수 있고 비디오 시퀀스는 수천 개의 픽처를 포함할 수 있기 때문에 num_entry_point_offsets는 여러 번 시그널링되고 비디오 시퀀스의 데이터 양에 상당한 총체적 영향을 미칠 수 있다.
본 개시는 비트스트림에서 그러한 데이터를 시그널링하지 않고 디코더(및/또는 인코더에서 HRD)에서 NumEntryPoints(518)를 도출하기 위한 다양한 메커니즘을 포함한다. 따라서 비트스트림에서 num_entry_point_offsets를 생략할 수 있으며, 이는 전체 비트스트림 압축을 상당히 증가시킨다. 예를 들어, 슬라이스(501)가 WPP(500)에 따라 코딩될 때 슬라이스(501)에 대한 NumEntryPoints(518)를 도출하기 위해 메커니즘이 사용될 수 있다. NumEntryPoints(518)는 CTU 행(521-525)의 크기에 기초하여, CTU 열(516)의 크기에 기초하여, 슬라이스(501)의 CTU(511/512)의 수에 기초하여, 및/또는 CTU(511/512) 및/또는 슬라이스(501) 주소에 기초하여 도출될 수 있다.
예를 들어, NumEntryPoints(518)는 다음과 같이 도출될 수 있다:
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice -1
}
여기서 !entropy_coding_sync_enabled_flag는 WPP(500)이 사용 중이 아님을 나타내고, NumBricksInCurrSlice는 슬라이스(501)의 타일 수이고, numBrickSpecificCtuRowsInSlice는 슬라이스(501)의 CTU 행 521-525의 수이며, BrickHeight[ SliceBrickIdx[ i ] ]는 CTU 행 521-525의 높이(따라서 CTU 열(516)의 높이)이다. entropy_coding_sync_enabled_flag는 WPP(500)가 슬라이스(501)를 코딩하는 데 사용되는지를 나타내기 위해 사용될 수 있다는 점에 유의해야 한다. 예를 들어, entropy_coding_sync_enabled_flag는 WPP(500)가 사용되는 경우 1로 설정되고 WPP(500)가 사용되지 않는 경우 0으로 설정될 수 있다. 일부 코딩 시스템에서는 !는 값이 아님을 나타낸다. 따라서 !entropy_coding_sync_enabled_flag는 WPP(500)이 위에서 언급한 의사 코드의 if 절에 사용되지 않음을 나타낸다. 따라서 WPP는 위에서 언급한 의사 코드의 else 절에 사용된다.
이 예는 슬라이스(501)가 WPP(500)를 사용하는지를 검사한다. WPP(500)가 사용되지 않는 경우, NumEntryPoints(518)는 슬라이스(501)의 타일 수보다 하나 적다. 그렇지 않으면 WPP(500)가 사용된다. 그러한 경우에, 예는 슬라이스(501)의 높이(따라서 CTU 열(516)의 높이)와 비교하여 CTU 행(521-525) 각각의 높이를 더함으로써 CTU 행(521-525)의 수를 결정한다. NumEntryPoints(518)는 CTU 행(521-525)의 수보다 하나 적다.
도 6은 예시적인 비트스트림(600)을 도시하는 개략도이다. 예를 들어, 비트스트림(600)은 방법(100)에 따른 코덱 시스템(200) 및/또는 디코더(400)에 의한 디코딩을 위해 코덱 시스템(200) 및/또는 인코더(300)에 의해 생성될 수 있다. 또한, 비트스트림(600)은 WPP(500)에 따라 코딩된 슬라이스(501)를 포함할 수 있다.
비트스트림(600)은 SPS(610), 복수의 픽처 파라미터 세트(PPS)(611), 복수의 슬라이스 헤더(615), 및 이미지 데이터(620)를 포함한다. SPS(610)는 코딩된 비디오 시퀀스의 모든 픽처에 공통인 시퀀스 데이터를 포함한다. 이러한 데이터는 픽처 사이징, 비트 심도, 코딩 툴 파라미터, 비트 레이트 제한 등을 포함할 수 있다. PPS(611)는 전체 픽처에 적용되는 파라미터를 포함한다. 따라서, 비디오 시퀀스의 각 픽처는 PPS(611)를 참조할 수 있다. 각 픽처는 PPS(611)를 참조하지만, 일부 예들에서 단일 PPS(611)는 다수의 픽처에 대한 데이터를 포함할 수 있다는 점에 유의해야 한다. 예를 들어, 다수의 유사한 픽처가 유사한 파라미터에 따라 코딩될 수 있다. 이러한 경우, 하나의 PPS(611)에는 이와 같은 유사한 픽처에 대한 데이터가 포함될 수 있다. PPS(611)는 대응하는 픽처의 슬라이스, 양자화 파라미터, 오프셋 등을 위해 이용 가능한 코딩 도구를 나타낼 수 있다. 슬라이스 헤더(615)는 픽처의 각 슬라이스에 특정한 파라미터를 포함한다. 따라서, 비디오 시퀀스의 슬라이스당 하나의 슬라이스 헤더(615)가 있을 수 있다. 슬라이스 헤더(615)는 슬라이스 유형 정보, POC, 참조 픽처 목록, 예측 가중치, 타일 엔트리 포인트, 디블록킹 파라미터 등을 포함할 수 있다. 슬라이스 헤더(615)는 또한 일부 컨텍스트에서 타일 그룹 헤더로 지칭될 수 있음에 유의해야 한다.
이미지 데이터(620)는 인터 예측 및/또는 인트라 예측에 따라 인코딩된 비디오 데이터와 대응하는 변환 및 양자화된 잔차 데이터를 포함한다. 예를 들어, 비디오 시퀀스는 복수의 픽처(621)를 포함한다. 픽처(621)는 비디오 시퀀스의 대응하는 순간에 사용자에게 전체 또는 부분 표시를 위한 완전한 이미지이다. 픽처(621)는 단일 액세스 유닛(AU)에 포함될 수 있다. 픽처(621)는 하나 이상의 슬라이스(623)를 포함한다. 슬라이스(623)는 단일 NAL 단위에 포함되는 픽처(621)의 정수 수의 완전한 타일 또는 정수 수의 연속적인 완전한 CTU 행(예를 들어, 타일 내)으로 정의될 수 있다. 예를 들어, 슬라이스(623)는 슬라이스(501)와 실질적으로 유사할 수 있다. 슬라이스(623)는 CTU(625) 및/또는 코딩 트리 블록(CTB)으로 더 분할된다. CTU(625)는 코딩 트리에 의해 분할될 수 있는 미리 정의된 크기의 샘플 그룹이다. 예를 들어, 비트스트림(600)의 CTU(625)가 인코딩되었고, 따라서 CTU(511)와 실질적으로 유사할 수 있다. CTB는 CTU(625)의 서브세트이고 CTU의 루마 성분 또는 크로마 성분을 포함한다. CTU(625/CTB)는 코딩 트리에 기초하여 코딩 블록으로 더 분할된다. 그런 다음, 코딩 블록은 예측 메커니즘에 따라 인코딩/디코딩될 수 있다.
위에서 언급한 바와 같이, NumEntryPoints(518)는 디코더에서 결정될 수 있다. 따라서, 슬라이스 헤더(615)는 num_entry_point_offsets 파라미터 또는 NumEntryPoints(518)의 값을 나타내는 다른 파라미터를 포함하지 않는다. num_entry_point_offsets가 각 슬라이스 헤더(615)로부터 제거됨에 따라, 비트스트림(600)은 압축된다. 이렇게 하면 인코더와 디코더 모두에서 메모리와 네트워크 리소스 사용량이 줄어든다.
이전의 정보는 이하에서 보다 상세하게 설명된다. 비디오 코덱 사양에서 픽처는 여러 목적으로 식별되어야 한다. 여기에는 인터 예측에서 참조 픽처로 사용하기 위한 것, DPB로부터의 픽처의 출력을 위한 것, 모션 벡터의 스케일링을 위한 것, 가중 예측을 위한 것 등이 포함된다. 예를 들어, 픽처는 픽처 순서 카운트(POC)로 식별될 수 있다. 일부 비디오 코딩 시스템에서 DPB의 픽처는 단기 참조용으로 사용되거나 장기 참조용으로 사용되거나 참조용으로 사용되지 않는 것으로 표시될 수 있다. 참조용으로 사용하지 않은 것으로 표시된 픽처는 더 이상 예측용으로 사용할 수 없다. 이러한 픽처가 더 이상 출력에 필요하지 않으면 DPB에서 픽처를 제거할 수 있다.
일부 비디오 코딩 시스템은 단기 및 장기 참조 픽처를 사용한다. 참조 픽처는 예측 참조로 사용하기 위해 더 이상 필요하지 않은 경우 참조용으로 사용되지 않는 것으로 표시될 수 있다. 이들 3가지 상태(예를 들어, 단기, 장기, 참조용으로 미사용) 사이의 픽처 변환은 디코딩된 참조 픽처 마킹 프로세스에 의해 제어될 수 있다. 예를 들어, 암시적 슬라이딩 윈도우 프로세스 및/또는 명시적 메모리 관리 제어 연산(memory management control operation, MMCO) 프로세스가 참조 픽처를 마킹하기 위해 사용될 수 있다. 슬라이딩 윈도우 프로세스는 참조 프레임의 수가 SPS에 저장될 수 있는 참조 프레임의 최대 수(max_num_ref_frames)와 동일한 경우 단기 참조 픽처를 참조용으로 사용하지 않는 것으로 표시한다. 단기 참조 픽처는 가장 최근에 디코딩된 단기 픽처가 DPB에 유지되도록 선입선출 방식으로 저장될 수 있다. 명시적 MMCO 프로세스에는 여러 MMCO 명령이 포함될 수 있다. MMCO 명령은 하나 이상의 단기 또는 장기 참조 픽처를 참조용으로 사용되지 않은 것으로 표시하거나, 모든 픽처를 참조용으로 사용하지 않은 것으로 표시하거나, 현재 참조 픽처 또는 기존 단기 참조 픽처를 장기 및 장기 참조 픽처에 장기 픽처 인덱스를 할당한다. 일부 비디오 코딩 시스템에서, 참조 픽처 마킹 동작 및 DPB로부터 픽처의 출력 및 제거를 위한 프로세스는 픽처가 디코딩된 후에 수행된다.
다른 비디오 코딩 시스템은 참조 픽처 관리를 위해 참조 픽처 세트(reference picture set, RPS)를 사용한다. RPS 프로세스와 MMCO/슬라이딩 윈도우 프로세스의 한 가지 차이점은 현재 픽처 또는 후속 픽처에서 사용되는 참조 픽처의 완전한 세트가 각 슬라이스에 대해 제공된다는 것이다. 따라서 현재 또는 미래의 픽처에서 사용하기 위해 DPB에 보관해야 하는 모든 픽처의 완전한 세트가 시그널링된다. 이는 DPB에 대한 상대적인 변경 사항만 알리는 방식과 다르다. RPS 메커니즘은 DPB에서 참조 픽처의 올바른 상태를 유지하기 위해 디코딩 순서에서 이전 픽처의 정보를 유지할 필요가 없다. 픽처 디코딩 및 DPB 동작의 대응하는 변경은 RPS의 장점을 이용하고 오류 복원력을 개선하기 위해 사용될 수 있다. 일부 비디오 코딩 시스템에서, DPB로부터의 디코딩된 픽처의 출력 및 제거 둘 다를 포함하는 픽처 마킹 및 버퍼 동작은 현재 픽처가 디코딩된 후에 적용될 수도 있다. 다른 비디오 코딩 시스템에서, RPS는 현재 픽처의 슬라이스 헤더로부터 먼저 디코딩된다. 그런 다음, 일반적으로 현재 픽처를 디코딩하기 전에 픽처 마킹 및 버퍼 동작을 적용한다.
다른 비디오 코딩 시스템은 참조 픽처 목록 0 및 참조 픽처 목록 1로 표시된 2개의 참조 픽처 목록을 기반으로 참조 픽처를 관리한다. 이 접근법에서, 픽처에 대한 참조 픽처 목록은 참조 픽처 목록 초기화 프로세스 및 참조 픽처 목록 수정 프로세스를 사용하지 않고 직접 구성될 수 있다. 또한, 참조 픽처 마킹은 2개의 참조 픽처 목록을 기반으로 직접 수행된다. 참조 픽처 관리 관련 신택스 및 의미의 예는 다음과 같다.
예시적인 시퀀스 파라미터 세트 RBSP 신택스는 다음과 같다.
seq_parameter_set_rbsp( ) { 설명자
...
log2_max_pic_order_cnt_lsb_minus4 ue(v)
sps_max_dec_pic_buffering_minus1 ue(v)
long_term_ref_pics_flag u(1)
sps_idr_rpl_present_flag u(1)
rpl1_same_as_rpl0_flag u(1)
for( i = 0; i < !rpl1_same_as_rpl0_flag ? 2 : 1; i++ ) {
num_ref_pic_lists_in_sps[ i ] ue(v)
for( j = 0; j < num_ref_pic_lists_in_sps[ i ]; j++)
ref_pic_list_struct( i, j )
}
...
예시적인 픽처 파라미터 세트 RBSP 신택스는 다음과 같다.
pic_parameter_set_rbsp( ) { 설명자
...
for( i = 0; i < 2; i++ )
num_ref_idx_default_active_minus1[ i ] ue(v)
rpl1_idx_present_flag u(1)
...
레귤러 슬라이스 헤더 신택스의 예는 다음과 같다.
slice_header( ) { 설명자
...
slice_pic_order_cnt_lsb u(v)
if( ( NalUnitType != IDR_W_RADL && NalUnitType != IDR_N_LP ) | | sps_idr_rpl_present_flag ) {
for( i = 0; i < 2; i++ ) {
if( num_ref_pic_lists_in_sps[ i ] > 0 &&
( i = = 0 | | ( i = = 1 && rpl1_idx_present_flag ) ) )
ref_pic_list_sps_flag[ i ] u(1)
if( ref_pic_list_sps_flag[ i ] ) {
if( num_ref_pic_lists_in_sps[ i ] > 1 &&
( i = = 0 | | ( i = = 1 && rpl1_idx_present_flag ) ) )
ref_pic_list_idx[ i ] u(v)
} else
ref_pic_list_struct( i, num_ref_pic_lists_in_sps[ i ] )
for( j = 0; j < NumLtrpEntries[ i ][ RplsIdx[ i ] ]; j++ ) {
if( ltrp_in_slice_header_flag[ i ][ RplsIdx[ i ] ] )
slice_poc_lsb_lt[ i ][ j ] u(v)
delta_poc_msb_present_flag[ i ][ j ] u(1)
if( delta_poc_msb_present_flag[ i ][ j ] )
delta_poc_msb_cycle_lt[ i ][ j ] ue(v)
}
}
if( ( slice_type != I && num_ref_entries[ 0 ][ RplsIdx[ 0 ] ] > 1) | |
( slice_type = = B && num_ref_entries[ 1 ][ RplsIdx[ 1 ] ] > 1 ) ) {
num_ref_idx_active_override_flag u(1)
if( num_ref_idx_active_override_flag )
for( i = 0; i < ( slice_type = = B ? 2: 1 ); i++ )
if( num_ref_entries[ i ][ RplsIdx[ i ] ] > 1 )
num_ref_idx_active_minus1[ i ] ue(v)
}
}
...
예시적인 참조 픽처 목록 구조 신택스는 다음과 같다.
ref_pic_list_struct( listIdx, rplsIdx ) { 설명자
num_ref_entries[ listIdx ][ rplsIdx ] ue(v)
if( long_term_ref_pics_flag )
ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ] u(1)
for( i = 0, j = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++) {
if( long_term_ref_pics_flag )
st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] u(1)
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) {
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] ue(v)
if( abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] > 0 )
strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] u(1)
} else if( !ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ] )
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ j++ ] u(v)
}
}
예시적인 시퀀스 파라미터 세트 RBSP 의미론은 다음과 같다. log2_max_pic_order_cnt_lsb_minus4는 픽처 순서 카운트에 대한 디코딩 프로세스에서 사용되는 변수 MaxPicOrderCntLsb의 값을 다음과 같이 지정한다:
MaxPicOrderCntLsb = 2( log2_max_pic_order_cnt_lsb_minus4 + 4 ) (7-7)
log2_max_pic_order_cnt_lsb_minus4의 값은 0에서 12까지의 범위에 있을 수 있다. sps_max_dec_pic_buffering_minus1 plus 1은 CVS에 대한 디코딩된 픽처 버퍼의 최대 요구 크기를 픽처 저장 버퍼 단위로 지정한다. sps_max_dec_pic_buffering_minus1의 값은 0에서 MaxDpbSize - 1(포함)의 범위에 있을 수 있다. 여기서 Max는 다른 곳에서 지정된 것과 같다. long_term_ref_pics_flag는 TRP가(장기 참조 픽처) CBS에서 임의의 코딩된 픽처의 인터 예측에 사용되지 않음을 지정하기 위해 0과 동일하게 설정될 수 있다. long_term_ref_pics_flag는 TRP가 CBS에서 하나 이상의 코딩된 픽처의 인터-예측을 위해 사용될 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. sps_id_rpl_present_flag는 참조 픽처 목록 신택스 요소가 IDR 픽처의 슬라이스 헤더에 존재한다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. sps_idr_rpl_present_flag는 참조 픽처 목록 신택스 요소가 IDR 픽처의 슬라이스 헤더에 존재하지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다.
rpl1_same_as_rpl0_flag는 신택스 구조 num_ref_pic_lists_in_sps[1] 및 ref_pic_list_struct(1, rplsIdx)가 존재하지 않고 다음이 적용된다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. num_ref_pic_lists_in_sps[ 1 ]의 값은 num_ref_pic_lists_in_sps[ 0 ]의 값과 동일한 것으로 추론된다. ref_pic_list_struct( 1, rplsIdx )의 각 신택스 요소의 값은 0에서 num_ref_pic_lists_in_sps[ 0 ] _num _ref 1까지 범위의 rplsIdx에 대한 ref_pic_list_struct(0, rplsIdx)의 해당 신택스 요소의 값과 동일한 것으로 추론된다. num_ref_pic_lists_in_sps[ i ]는 SPS에 포함된 i와 동일한 listIdx를 갖는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 수를 지정한다. num_ref_pic_lists_in_sps[ i ]의 값은 0에서 64(포함)까지의 범위에 있을 수 있다. listIdx의 각 값(0 또는 1과 동일)에 대해 디코더는 현재 화면의 슬라이스 헤더에서 직접 시그널링되는 하나의 ref_pic_list_struct( listIdx, ) rplsIdx가 있을 수 있으므로 총 num_ref_pic_lists_in_sps[ i ] + 1 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에 대한 메모리를 할당해야 한다. 된다.
예시적인 픽처 파라미터 세트 RBSP 의미론은 다음과 같다. num_ref_idx_default_active_minus1[ i ] plus 1은 i가 0일 때 num_ref_idx_active_override_flag가 0인 P 또는 B 슬라이스에 대한 변수 NumRefIdxActive[ 0 ]의 추론된 값을 지정하고, i가 1일 때 num_ref_idx_active_override_flag가 0인 B 슬라이스에 대한 NumRefIdxActive[ 1 ]의 추론된 값을 지정한다. num_ref_idx_default_active_minus1[ i ] 값은 0에서 14(포함)까지의 범위에 있어야 한다. rpl1_idx_present_flag는 ref_pic_list_sps_flag[ 1 ] 및 ref_pic_list_idx[ 1 ]가 슬라이스 헤더에 존재하지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. rpl1_idx_present_flag는 ref_pic_list_sps_flag[ 1 ] 및 ref_pic_list_idx[ 1 ]가 슬라이스 헤더에 존재할 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다.
레귤러 슬라이스 헤더 의미론의 예는 다음과 같다. slice_pic_order_cnt_lsb는 현재 픽처에 대한 픽처 순서 카운트 모듈로 MaxPicOrderCntLsb를 지정한다. slice_pic_order_cnt_lsb 신택스 요소의 길이는 log2_max_pic_order_cnt_lsb_minus4 + 4비트이다. slice_pic_order_cnt_lsb의 값은 0에서 MaxPicOrderCntLsb - 1(포함)의 범위에 있어야 한다. ref_pic_list_sps_flag[ i ]는 현재 슬라이스의 참조 픽처 목록 i가 활성 SPS에서 i와 동일한 listIdx를 갖는 ref_pic_list_struct(listIdx, rplsIdx) 신택스 구조 중 하나에 기초하여 도출된다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. ref_pic_list_sps_flag[ i ]는 현재 슬라이스의 참조 픽처 목록 i가 현재 픽처의 슬라이스 헤더에 직접 포함되어 있는 listIdx가 i와 동일한 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에 기초하여 도출된다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. num_ref_pic_lists_in_sps[ i ]가 0과 같을 때, ref_pic_list_sps_flag[ i ]의 값은 0과 동일한 것으로 추론된다. rpl1_idx_present_flag가 0과 같을 때, ref_pic_list_sps_flag[1]의 값은 ref_pic_list_sps_flag[0]와 같은 것으로 추론된다.
ref_pic_list_idx[ i ]는 활성 SPS에 포함된 i와 동일한 listIdx를 갖는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 목록으로, 현재 픽처의 참조 픽처 목록 i의 도출에 사용되는 listIdx가 i와 동일한 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 요소의 인덱스를 지정한다. 신택스 요소 ref_pic_list_idx[ i ]는 Ceil( Log2( num_ref_pic_lists_in_sps[ i ] ) ) 비트로 표시된다. 존재하지 않을 때, ref_pic_list_idx[ i ]의 값은 0과 같은 것으로 추론된다. ref_pic_list_idx[ i ]의 값은 0에서 num_ref_pic_lists_in_sps[ i ] - 1까지의 범위에 있어야 한다. ref_pic_list_sps_flag[ i ]가 1과 동일하고 num_ref_pic_lists_in_sps[ i ]가 1과 동일할 때, ref_pic_list_idx[ i ]의 값은 0과 동일한 것으로 추론된다. ref_pic_list_sps_flag[ i ]가 1이고 rpl1_idx_present_flag가 0일 때, ref_pic_list_idx[ 1 ]의 값은 ref_pic_list_idx[ 0 ]와 동일한 것으로 추론된다.
변수 RplsIdx[ i ]는 다음과 같이 도출된다:
RplsIdx[ i ] = ref_pic_list_sps_flag[ i ] ? ref_pic_list_idx[ i ] :
num_ref_pic_lists_in_sps[ i ] (7-40)
slice_poc_lsb_lt[ i ][ j ]는 i번째 참조 픽처 목록에서 j번째 LTRP 엔트리의 픽처 순서 카운트 모듈로 MaxPicOrderCntLsb의 값을 지정한다. slice_poc_lsb_lt[ i ][ j ] 신택스 요소의 길이는 log2_max_pic_order_cnt_lsb_minus4 + 4비트이다.
변수 PocLsbLt[ i ][ j ]는 다음과 같이 도출된다:
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag[ i ][ RplsIdx[ i ] ] ? (7-41)
slice_poc_lsb_lt[ i ][ j ] :
rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
delta_poc_msb_present_flag[ i ][ j ]는 delta_poc_msb_cycle_lt[ i ][ j ]가 존재한다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. delta_poc_msb_present_flag[ i ][ j ]는 delta_poc_msb_cycle_lt[ i ][ j ]가 존재하지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. prevTid0Pic을 0과 동일한 TemporalId를 갖고 RASL(Random Access Skipped Leading) 또는 RADL(Random Access Decodeable Leading) 픽처가 아닌 디코딩 순서의 이전 픽처라고 하자. setOfPrevPocVals를 다음을 포함하는 세트로 하자: prevTid0Pic의 PicOrderCntVal; prevTid0Pic의 RefPicList[ 0 ] 항목과 RefPicList[ 1 ] 항목에 의해 참조되는 각 픽처의 PicOrderCntVal; 및 디코딩 순서에서 prevTid0Pic을 따르고 디코딩 순서에서 현재 픽처보다 앞선 각 픽처의 PicOrderCntVal. modulo MaxPicOrderCntLsb 값이 PocLsbLt[ i ][ j ]와 동일한 setOfPrevPocVals에 둘 이상의 값이 있는 경우 delta_poc_msb_present_flag[ i ][ j ]의 값은 1과 같아야 한다.
delta_poc_msb_cycle_lt[ i ][ j ]는 변수 FullPocLt[ i ][ j ]의 값을 다음과 같이 지정한다:
if( j = = 0 )
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ]
else (7-42)
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ] + deltaMsbCycle[ i ][ j - 1 ]
FullPocLt[ i ][ RplsIdx[ i ] ][ j ] = PicOrderCntVal - deltaMsbCycle[ i ][ j ] * MaxPicOrderCntLsb -
( PicOrderCntVal & ( MaxPicOrderCntLsb -1 ) ) + PocLsbLt[ i ][ j ]
delta_poc_msb_cycle_lt[ i ][ j ]의 값은 0에서 2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4)(포함)의 범위에 있어야 한다. 존재하지 않을 때, delta_poc_msb_cycle_lt[ i ][ j ]의 값은 0과 같은 것으로 추론된다. num_ref_idx_active _override_flag는 신택스 요소 num_ref_idx_active _minus1[ 0 ]이 P 및 B 슬라이스에 대해 존재하고 신택스 요소 num_ref_idx_active_minus1[ 1 ]이 B 슬라이스에 대해 존재한다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. num_ref_idx_active_override _flag는 신택스 요소 num_ref_idx_active_ minus1[ 0 ] 및 num_ref_idx_active_minus1[ 1 ]이 존재하지 않음을 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않을 때, num_ref_idx_active_override_flag의 값은 1과 같은 것으로 추론된다. num_ref_idx_active _minus1[ i ]은 변수 NumRefIdxActive[ i ]의 도출에 사용된다. num_ref_idx_active_minus1[ i ]의 값은 0에서 14(포함)까지의 범위에 있을 수 있다. i가 0 또는 1인 경우, 현재 슬라이스가 B 슬라이스이고 num_ref_idx_active_override_flag가 1이고 num_ref_idx_active_minus1[ i ]이 존재하지 않을 때, num_ref_idx_active_minus1[ i ]이 0과 동일한 것으로 추론된다. 현재 슬라이스가 P 슬라이스인 경우 num_ref_idx_active_override_flag는 1이고 num_ref_idx_active_minus1[ 0 ]은 존재하지 않을 때, num_ref_idx_active_minus1[ 0 ]은 0과 동일한 것으로 추론된다.
변수 NumRefIdxActive[ i ]는 다음과 같이 도출된다:
for( i = 0; i < 2; i++ ) {
if( slice_type = = B | | ( slice_type = = P && i = = 0 ) ) {
if( num_ref_idx_active_override_flag )
NumRefIdxActive[ i ] = num_ref_idx_active_minus1[ i ] + 1 (7-43)
else {
if( num_ref_entries[ i ][ RplsIdx[ i ] ] >= num_ref_idx_default_active_minus1[ i ] + 1 )
NumRefIdxActive[ i ] = num_ref_idx_default_active_minus1[ i ] + 1
else
NumRefIdxActive[ i ] = num_ref_entries[ i ][ RplsIdx[ i ] ]
}
} else // slice_type = = I | | ( slice_type = = P && i = = 1 )
NumRefIdxActive[ i ] = 0
}
NumRefIdxActive[ i ] - 1의 값은 슬라이스를 디코딩하는 데 사용될 수 있는 참조 픽처 목록 i에 대한 최대 참조 인덱스를 지정한다. NumRefIdxActive[ i ]의 값이 0과 같을 때, 참조 픽처 목록 i에 대한 참조 인덱스는 슬라이스를 디코딩하는데 사용될 수 없다. 현재 디코딩된 픽처가 현재 슬라이스에 대한 유일한 참조 픽처임을 지정하는 변수 CurrPicIsOnlyRef는 다음과 같이 도출된다:
CurrPicIsOnlyRef = sps_cpr_enabled_flag && ( slice_type  = =  P ) && (7-44)
( num_ref_idx_active_minus1[ 0 ]  = =  0 )
예시적인 참조 픽처 목록 구조 세만틱스는 다음과 같다. ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조는 SPS 또는 슬라이스 헤더에 존재할 수 있다. 신택스 구조가 슬라이스 헤더에 포함되는지 SPS에 포함되는지에 따라 다음이 적용된다. 슬라이스 헤더에 존재하는 경우, ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조는 현재 픽처(예를 들어, 슬라이스를 포함하는 픽처)의 참조 픽처 목록 listIdx를 지정한다. 그렇지 않으면(예를 들어, SPS에 존재하면), ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조는 참조 픽처 목록 listIdx의 후보를 지정하고, 의미론에서 현재 픽처라는 용어는 1) SPS에 포함된 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 목록에 대한 인덱스와 동일한 ref_pic_list_idx[ listIdx ]를 포함하는 하나 이상의 슬라이스를 가지며, 2) SPS를 활성 SPS로 갖는 CVS에 있는 각 픽처를 나타낸다.
num_ref_entries[ listIdx ][ rplsIdx ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 항목 수를 지정한다. num_ref_entries[ listIdx ] [ rplsIdx ] 값은 0에서 sps_max_dec_pic_buffering_minus1 + 14(포함)까지 범위에 있어야 한다. ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에서 LTRP 항목의 POC LSB가 ref_pic_list_struct(listIdx) 신택스에 존재한다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에서 LTRP 항목의 POC LSB가 ref_pic_list_struct(listIdx) 신택스에 존재하지 않음을 지정하기 위해 1과 동일하게 설정될 수 있다. st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 i 번째 항목이 단기 참조 픽처(STRP) 항목임을 지정하기 위해 1과 동일하게 설정될 수 있다. st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 i 번째 항목이 LTRP 항목임을 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않을 때, st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]의 값은 1과 같은 것으로 추론된다.
변수 NumLtrpEntries[ listIdx ][ rplsIdx ]는 다음과 같이 도출될 수 있다.
for( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) (7-86)
NumLtrpEntries[ listIdx ][ rplsIdx ]++
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]는 i 번째 항목이 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 첫 번째 STRP 항목일 때 현재 픽처와 i 번째 항목이 참조하는 픽처의 픽처 순서 카운트 값 간의 절대 차이를 지정하거나, 또는 i 번째 항목이 STRP 항목이지만 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 첫 번째 STRP 항목이 아닌 경우, ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에서 i 번째 항목과 이전 STRP 항목에 의해 참조되는 픽처의 픽처 순서 카운트 값 간의 절대 차이를 지정한다. abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]의 값은 0에서 215-1(포함)의 범위에 있을 수 있다. strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]는 신택스 구조 ref_pic_list_struct( listIdx, rplsIdx )의 i번째 항목이 0보다 크거나 같은 값을 갖는다는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. strp_entry_sign_flag[ listIdx ][ rplsIdx ]는 신택스 구조 ref_pic_list_struct( listIdx, rplsIdx )의 i번째 항목이 0보다 작은 값을 가짐을 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않을 때, strp_entry_sign_flag[ i ][ j ]의 값은 1과 같은 것으로 추론된다.
목록 DeltaPocSt[ listIdx ][ rplsIdx ]는 다음과 같이 도출된다:
for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) {
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) { (7-87)
DeltaPocSt[ listIdx ][ rplsIdx ][ i ] = ( strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]) ?
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] : 0 - abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]
}
}
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ]는 ref_pic_list_struct(listIdx, rplsIdx) 신택스 구조에서 i번째 항목에 의해 참조되는 픽처의 픽처 순서 카운트 모듈로 MaxPicOrderCntLsb의 값을 지정한다. rpls_poc_lsb_lt[ listIdx ] [ rplsIdx ][ i ] 신택스 요소의 길이는 log2_max_pic_order_cnt_lsb_minus4 + 4비트이다.
비디오 이미지를 코딩하기 위해, 먼저 이미지가 분할되고, 분할이 비트스트림으로 코딩된다. 다양한 픽처 분할 방식을 사용할 수 있다. 예를 들어, 이미지는 파면 병렬 처리(Wavefront Parallel Processing, WPP)에 따라 레귤러 슬라이스, 종속 슬라이스, 타일로 분할될 수 있다. 단순함을 위해 HEVC는 비디오 코딩을 위해 슬라이스를 CTB 그룹으로 분할할 때 레귤러 슬라이스, 종속 슬라이스, 타일, WPP 및 이들의 조합만 사용할 수 있도록 인코더를 제한한다. 이러한 분할을 적용하여 최대 전송 단위(Maximum Transfer Unit, MTU) 크기 일치, 병렬 처리 및 종단 간 지연 감소를 지원할 수 있다. MTU는 단일 패킷으로 전송할 수 있는 최대 데이터 양을 나타낸다. 패킷 페이로드가 MTU를 초과하는 경우 해당 페이로드는 단편화라는 프로세스를 통해 두 개의 패킷으로 분할된다.
단순히 슬라이스라고도 하는 레귤러 슬라이스는 루프 필터링 작업으로 인한 일부 상호 의존성에도 불구하고 동일한 픽처 내의 다른 레귤러 슬라이스와 독립적으로 재구성될 수 있는 이미지의 분할된 부분이다. 각 레귤러 슬라이스는 전송을 위해 자체 네트워크 추상화 계층(Network Abstraction Layer, NAL) 단위로 캡슐화된다. 또한, 인-픽처 예측(인트라 샘플 예측, 모션 정보 예측, 코딩 모드 예측) 및 슬라이스 경계에 걸친 엔트로피 코딩 의존성은 독립적인 재구성을 지원하기 위해 비활성화될 수 있다. 이러한 독립적인 재구성은 병렬화를 지원한다. 예를 들어, 레귤러 슬라이스 기반 병렬화는 최소한의 프로세서 간 또는 코어 간 통신을 사용한다. 그러나 각 레귤러 슬라이스는 독립적이므로 각 슬라이스는 별도의 슬라이스 헤더와 연결된다. 레귤러 슬라이스를 사용하면 각 슬라이스에 대한 슬라이스 헤더의 비트 비용과 슬라이스 경계에 걸친 예측 부족으로 인해 상당한 코딩 오버헤드가 발생할 수 있다. 또한, MTU 크기 요구 사항에 대한 일치를 지원하기 위해 레귤러 슬라이스가 사용될 수 있다. 특히, 레귤러 슬라이스는 별도의 NAL 단위로 캡슐화되고 독립적으로 코딩될 수 있으므로 각 레귤러 슬라이스는 슬라이스를 여러 패킷으로 나누는 것을 방지하기 위해 MTU 방식의 MTU보다 작아야 한다. 이와 같이 병렬화의 목표와 MTU 크기 일치의 목표는 픽처의 슬라이스 레이아웃에 상반된 요구를 제기할 수 있다.
종속 슬라이스는 레귤러 슬라이스와 유사하지만, 슬라이스 헤더가 단축되고 인-픽처 예측을 깨뜨리지 않고 이미지 트리블록 경계의 분할을 허용한다. 따라서 종속 슬라이스를 사용하면 레귤러 슬라이스를 여러 NAL 단위로 분할할 수 있으며, 이는 전체 레귤러 슬라이스의 인코딩이 완료되기 전에 레귤러 슬라이스의 일부가 전송되도록 허용함으로써 종단 간 지연(end-to-end delay)을 감소시킨다.
타일은 타일의 열과 행을 생성하는 수평 및 수직 경계에 의해 생성된 이미지의 분할된 부분이다. 타일은 래스터 스캔 순서(오른쪽에서 왼쪽 및 위에서 아래로)로 코딩될 수 있다. CTB의 스캔 순서는 타일 내에서 로컬이다. 따라서 첫 번째 타일의 CTB는 다음 타일의 CTB로 진행하기 전에 래스터 스캔 순서로 코딩된다. 레귤러 슬라이스와 유사하게 타일은 엔트로피 디코딩 종속성뿐만 아니라 인-픽처 예측 종속성을 깨뜨린다. 그러나 타일은 개별 NAL 단위에 포함되지 않을 수 있으므로 MTU 크기 매칭에 타일을 사용하지 않을 수 있다. 각 타일은 하나의 프로세서/코어에 의해 처리될 수 있으며, 인접 타일을 디코딩하는 처리 유닛 간의 인-픽처 예측에 사용되는 프로세서/코어간 통신은 공유 슬라이스 헤더를 전달하는 것으로 제한될 수 있고(인접 타일이 동일한 슬라이스이다) 재구성된 샘플 및 메타데이터의 공유와 관련된 루프 필터링을 수행한다. 슬라이스에 하나 이상의 타일이 포함되는 경우, 슬라이스의 첫 번째 엔트리 포인트 오프셋이 아닌 각 타일에 대한 엔트리 포인트 바이트 오프셋은 슬라이스 헤더에서 시그널링될 수 있다. 각 슬라이스 및 타일에 대해 다음 조건 중 하나 이상이 충족되어야 한다. 1) 슬라이스의 모든 코딩된 트리 블록은 동일한 타일에 속한다. 2) 타일의 모든 코딩된 트리 블록은 동일한 슬라이스에 속한다.
WPP에서 이미지는 CTB의 단일 행으로 분할된다. 엔트로피 디코딩 및 예측 메커니즘은 다른 행에 있는 CTB의 데이터를 사용할 수 있다. 병렬 처리는 CTB 행의 병렬 디코딩을 통해 가능하다. 예를 들어, 현재 행은 선행 행과 병렬로 디코딩될 수 있다. 그러나 현재 행의 디코딩은 예에 따라 이전 행의 디코딩 과정에서 하나 또는 두 개의 CTB만큼 지연된다. 이 지연은 현재 CTB가 코딩되기 전에 현재 행에서 현재 CTB의 위 및 오른쪽에 있는 CTB 및 위의 CTB와 관련된 데이터를 사용할 수 있도록 한다. 이 접근 방식은 그래픽으로 표시될 때 파면으로 나타난다. 이 엇갈린 시작을 통해 이미지에 CTB 행이 포함된 만큼 최대 프로세서/코어로 병렬화할 수 있다. 픽처 내의 이웃하는 트리블록 행 사이의 인-픽처 예측이 허용되기 때문에, 인-픽처 예측을 가능하게 하는 프로세서간/코어간 통신이 상당할 수 있다. WPP 분할은 NAL 단위 크기를 고려한다. 따라서 WPP는 MTU 크기 일치를 지원하지 않는다. 그러나 특정 코딩 오버헤드가 있는 WPP와 함께 레귤러 슬라이스를 사용하여 원하는 대로 MTU 크기 일치를 구현할 수 있다.
예에서, 비디오 코딩 시스템은 슬라이스, 타일, 브릭 및 WPP로 이미지를 분할할 수 있다. 픽처는 하나 이상의 타일 행과 하나 이상의 타일 열로 나눌 수 있다. 타일은 픽처의 직사각형 영역을 덮는 일련의 CTU일 수 있다. 타일은 하나 이상의 브릭으로 나눌 수 있으며 각 브릭에는 타일 내에 여러 CTU 행이 포함되어 있다. 여러 개의 브릭으로 분할되지 않은 타일을 브릭이라고도 한다. 타일의 진정한 서브세트인 브릭은 타일이라고 부를 수 없다. 슬라이스는 픽처의 타일 수 또는 타일의 브릭 수를 포함할 수 있다. 래스터 스캔 슬라이스 모드와 직사각형 슬라이스 모드를 포함하여 두 가지 모드의 슬라이스가 지원될 수 있다. 래스터 스캔 슬라이스 모드에서 슬라이스는 픽처의 타일 래스터 스캔에서 타일 시퀀스를 포함한다. 직사각형 슬라이스 모드에서 슬라이스는 픽처의 직사각형 영역을 집합적으로 형성하는 많은 수의 픽처 브릭을 포함할 수 있다. 직사각형 슬라이스 내의 브릭은 슬라이스의 브릭 래스터 스캔 순서이다. single_tile_in_pic_flag는 1과 동일하게 설정되어 픽처에 타일이 하나만 있고 단일 타일이 브릭으로 분할되지 않음을 지정할 수 있다. entropy_coding_sync_enabled_flag는 WPP가 사용 중임을 지정하기 위해 1과 동일하게 설정될 수 있다.
예시적인 픽처 파라미터 세트 RBSP 신택스는 다음과 같다:
pic_parameter_set_rbsp( ) { 설명자
... ue(v)
single_tile_in_pic_flag u(1)
if( !single_tile_in_pic_flag ) {
uniform_tile_spacing_flag u(1)
if( uniform_tile_spacing_flag ) {
tile_cols_width_minus1 ue(v)
tile_rows_height_minus1 ue(v)
} else {
num_tile_columns_minus1 ue(v)
num_tile_rows_minus1 ue(v)
for( i = 0; i < num_tile_columns_minus1; i++ )
tile_column_width_minus1[ i ] ue(v)
for( i = 0; i < num_tile_rows_minus1; i++ )
tile_row_height_minus1[ i ] ue(v)
}
brick_splitting_present_flag u(1)
for( i = 0; brick_present_flag && i < NumTilesInPic; i++ ) {
brick_split_flag[ i ] u(1)
if( brick_split_flag[ i ] ) {
uniform_brick_spacing_flag[ i ] u(1)
if( uniform_brick_spacing_flag[ i ] )
brick_height_minus1[ i ] ue(v)
else {
num_brick_rows_minus1[ i ] ue(v)
for( j = 0; j < num_brick_rows_minus1[ i ]; j++ )
brick_row_height_minus1[ i ][ j ] ue(v)
}
}
}
single_brick_per_slice_flag u(1)
if( !single_brick_per_slice_flag )
rect_slice_flag u(1)
if( rect_slice_flag && !single_brick_per_slice_flag ) {
num_slices_in_pic_minus1 ue(v)
for( i = 0; i <= num_slices_in_pic_minus1; i++ ) {
if( i > 0 )
top_left_brick_idx[ i ] u(v)
bottom_right_brick_idx_delta[ i ] u(v)
}
}
loop_filter_across_bricks_enabled_flag u(1)
if( loop_filter_across_bricks_enabled_flag )
loop_filter_across_slices_enabled_flag u(1)
}
if( rect_slice_flag ) {
signalled_slice_id_flag u(1)
if( signalled_slice_id_flag ) {
signalled_slice_id_length_minus1 ue(v)
for( i = 0; i <= num_slices_in_pic_minus1; i++ )
slice_id[ i ] u(v)
}
}
entropy_coding_sync_enabled_flag u(1)
...
레귤러 슬라이스 헤더 신택스의 예는 다음과 같다.
slice_header( ) { 설명자
... ue(v)
if( rect_slice_flag | | NumBricksInPic > 1 )
slice_address u(v)
if( !rect_slice_flag && !single_brick_per_slice_flag )
num_bricks_in_slice_minus1
...
if ( entropy_coding_sync_enabled_flag )
num_entry_point_offsets ue(v)
if( NumEntryPoints > 0 ) {
offset_len_minus1 ue(v)
for( i = 0; i < NumEntryPoints; i++ )
entry_point_offset_minus1[ i ] u(v)
}
...
}
예시적인 픽처 파라미터 세트 RBSP 의미론은 다음과 같다. single_tile_in_pic_flag는 PPS를 참조하는 각 픽처에 하나의 타일만 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. single_tile_in_pic_flag는 PPS를 참조하는 각 픽처에 하나 이상의 타일이 있다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. 타일 내에서 추가 브릭 분할이 없는 경우 전체 타일을 브릭이라고 할 수 있다. 픽처에 브릭이 더 이상 분할되지 않은 단일 타일만 포함된 경우 픽처를 단일 브릭이라고 할 수 있다. 비트스트림 적합성을 위해 single_tile_in_pic_flag 값은 CVS 내에서 활성화되는 모든 PPS에 대해 동일해야 한다.
uniform_tile_spacing_flag는 타일 열 경계 및 마찬가지로 타일 행 경계가 픽처에 걸쳐 균일하게 분포되고 신택스 요소 tile_cols_width_minus1 및 tile_rows_height_minus1을 사용하여 시그널링되는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. uniform_tile_spacing_flag는 타일 열 경계 및 마찬가지로 타일 행 경계가 픽처에 걸쳐 균일하게 분포되거나 그렇지 않을 수 있고 신택스 요소 num_tile_columns_minus1 및 num_tile_rows_minus1 및 신택스 요소 쌍의 목록 tile_column_width_minus1[ i ] 및 tile_row_height_minus1[ i ]을 사용하여 시그널링될 수도 있고 그렇지 않을 수 있다. 존재하지 않는 경우, uniform_tile_spacing_flag의 값은 0과 동일한 것으로 추론될 수 있다. tile_cols_width_minus1 plus 1은 uniform_tile_spacing_flag가 1일 때 픽처의 가장 우측 타일 열을 제외한 타일 열의 너비를 CTB 단위로 지정한다. tile_cols_width_minus1의 값은 0부터 PicWidthInCtbsY - 1까지의 범위일 수 있다. 존재하지 않는 경우 tile_cols_width_minus1의 값은 PicWidthInCtbsY - 1과 동일한 것으로 유추된다.
tile_rows_height_minus1 plus 1은 uniform_tile_spacing_flag가 1일 때 CTB 단위로 픽처의 하단 타일 행을 제외한 타일 행의 높이를 지정한다. tile_rows_height_minus1의 값은 0에서 PicHeightInCtbsY - 1까지의 범위에 있어야 한다. 존재하지 않을 때, tile_rows_width_minus1의 값은 PicHeightInCtbsY - 1과 동일한 것으로 추론된다. num_tile_columns_minus1 plus 1은 uniform_tile_spacing_flag가 0일 때 픽처를 분할하는 타일 열의 수를 지정한다. num_tile_columns_minus1의 값은 0에서 PicWidthInCtbsY - 1까지의 범위에 있어야 한다. single_tile_in_pic_flag가 1과 같으면 num_tile_columns_minus1의 값은 0과 같은 것으로 추론된다. 그렇지 않고, uniform_tile_spacing_flag가 1일 때, num_tile_columns_minus1의 값이 유추된다. num_tile_rows_minus1 plus 1은 uniform_tile_spacing_flag가 0과 같을 때 화상을 분할하는 타일 행의 수를 지정한다. num_tile_rows_minus1의 값은 0에서 PicHeightInCtbsY - 1까지의 범위에 있어야 한다. single_tile_in_pic_flag가 1과 같으면 num_tile_rows_minus1의 값은 0과 같은 것으로 추론된다. 그렇지 않고 uniform_tile_spacing_flag가 1일 때 num_tile_rows_minus1의 값이 유추된다. 변수 NumTilesInPic은 ( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1 )과 동일하게 설정될 수 있다.
single_tile_in_pic_flag가 0과 같을 때, NumTilesInPic은 1보다 커야 한다. tile_column_width_minus1[ i ] plus 1은 CTB 단위로 i번째 타일 열의 너비를 지정한다. tile_row_height_minus1[ i ] plus 1은 CTB 단위로 i번째 타일 행의 높이를 지정한다. brick_splitting_present_flag는 PPS를 참조하는 하나 이상의 픽처 타일이 둘 이상의 브릭으로 분할될 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. brick_splitting_present_flag는 PPS를 참조하는 픽처의 타일이 2개 이상의 브릭으로 분할되지 않음을 지정하기 위해 0과 동일하게 설정될 수 있다. brick_split_flag[ i ]는 i번째 타일이 2개 이상의 브릭으로 분할되는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. brick_split_flag[ i ]는 i번째 타일이 2개 이상의 브릭으로 분할되지 않도록 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않는 경우, brick_split_flag[ i ]의 값은 0과 같은 것으로 추론된다.
uniform_brick_spacing_flag[ i ]는 브릭 경계가 i번째 타일에 걸쳐 균일하게 분포되고 신택스 요소 brick_height_minus1[ i ]를 사용하여 시그널링되는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. uniform_brick_spacing_flag[ i ]는 브릭 경계가 i번째 타일에 균일하게 분포되거나 그렇지 않을 수 있음을 지정하기 위해 0으로 설정될 수 있으며 신택스 요소 num_brick_rows_minus1[ i ] 및 신택스 요소 목록 brick_row_height_minus1[ i ][ j ]을 사용하여 시그널링될 수 있다. 존재하지 않을 때, uniform_brick_spacing _flag[ i ]의 값은 1과 같은 것으로 추론된다. brick_height_minus1[ i ] plus 1은 uniform_brick_spacing_flag[ i ]가 1일 때 CTB 단위로 i번째 타일에서 하단 브릭을 제외한 브릭 행의 높이를 지정한다. 존재하는 경우, brick_height_minus1의 값은 0에서 RowHeight[ i ] - 2(포함)의 범위에 있어야 한다. 존재하지 않는 경우, brick_height_minus1[ i ]의 값은 RowHeight[ i ] - 1과 같은 것으로 추론된다. num_brick_rows_minus1[ i ] plus 1은 uniform_brick_spacing_flag[ i ]가 0과 같을 때 i번째 타일을 분할하는 브릭의 수를 지정한다. 존재하는 경우, num_brick_rows_minus1[ i ]의 값은 1에서 RowHeight[ i ] - 1(포함)의 범위에 있을 수 있다. brick_split_flag[ i ]가 0과 같으면 num_brick_rows_minus1[ i ]의 값은 0과 같은 것으로 추론된다. 그렇지 않고, uniform_brick_spacing_flag[ i ]가 1일 때, num_brick_rows_minus1[ i ]의 값이 유추된다. brick_row_height_minus1[ i ][ j ] plus 1은 uniform_tile_spacing_flag가 0일 때 CTB 단위로 i번째 타일에서 j번째 브릭의 높이를 지정한다.
다음 변수가 도출될 수 있으며, uniform_tile_spacing_flag가 1과 같을 때 num_tile_columns_minus1 및 num_tile_rows_minus1의 값이 추론되고, 0에서 NumTilesInPic - 1(포함)까지의 범위의 각각의 i에 대해, uniform_brick_spacing_flag[ i ]가 1과 같을 때, num_brick_rows_minus1[ i ]의 값은 CTB 래스터 및 브릭 스캔 변환 프로세스를 호출하여 유추된다. 도출될 수 있는 변수에는 0에서 num_tile_rows_minus1(포함)까지 범위의 j에 대한 목록 RowHeight[ j ]가 포함되며, CTB 단위로 j번째 타일 행의 높이를 지정하고; 0에서 PicSizeInCtbsY - 1(포함)까지 범위의 ctbAddrRs에 대한 목록 CtbAddrRsToBs[ ctbAddrRs ]는 픽처의 CTB 래스터 스캔의 CTB 주소로부터 브릭 스캔의 CTB 주소로의 변환을 지정하며; 0에서 PicSizeInCtbsY - 1(포함)까지 범위의 ctbAddrBs에 대한 목록 CtbAddrBsToRs[ ctbAddrBs ]는 브릭 스캔의 CTB 주소로부터 픽처의 CTB 래스터 스캔의 CTB 주소로의 변환을 지정하며; 0에서 PicSizeInCtbsY - 1(포함)까지 범위의 ctbAddrB에 대한 목록 BrickId[ ctbAddrBs ]는 브릭 스캔의 CTB 주소로부터 브릭 ID로의 변환을 지정하며; 0에서 NumBricksInPic - 1(포함)까지 범위의 brickIdx에 대한 목록 NumCtusInBrick[ brickIdx ]는 브릭 인덱스로부터 브릭 내의 CTU 수로의 변환을 지정하며; 그리고 0에서 NumBricksInPic - 1(포함)까지 범위의 brickIdx에 대한 목록 FirstCtbAddrBs[ brickIdx ]는 브릭 내의 첫 번째 CTB의 브릭 스캔에서 브릭 ID로부터 CTB 주소로의 변환을 지정한다.
single_brick_per_slice_flag는 이 PPS를 참조하는 각 슬라이스가 하나의 브릭을 포함하도록 지정하기 위해 1과 동일하게 설정될 수 있다. single_brick_per_slice_flag는 이 PPS를 참조하는 슬라이스가 하나 이상의 브릭을 포함할 수 있음을 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않는 경우 single_brick_per_slice_flag의 값은 1과 동일한 것으로 유추된다. rect_slice_flag는 각 슬라이스 내의 브릭이 래스터 스캔 순서에 있고 슬라이스 정보가 PPS에서 시그널링되지 않음을 지정하기 위해 0과 동일하게 설정될 수 있다. rect_slice_flag는 각 슬라이스 내의 브릭이 픽처의 직사각형 영역을 덮고 슬라이스 정보가 PPS에서 시그널링되는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. single_brick_per_slice_flag가 1과 같을 때 rect_slice_flag는 1과 같은 것으로 추론된다. num_slices_in_pic_minus1 plus 1은 PPS를 참조하는 각 픽처의 슬라이스 수를 지정한다. num_slices_in_pic_minus1의 값은 0에서 NumBricksInPic - 1(포함)까지 범위에 있을 수 있다. 존재하지 않고 single_brick_per_slice_flag가 1과 같을 때, num_slices_in_pic_minus1의 값은 NumBricksInPic - 1과 같은 것으로 추론된다.
top_left_brick_idx[ i ]는 i번째 슬라이스의 왼쪽 상단 모서리에 위치한 브릭의 브릭 인덱스를 지정한다. top_left_brick_idx[ i ]의 값은 j와 같지 않은 i에 대해 top_left_brick_idx[ j ]의 값과 같아야 한다. 존재하지 않을 때 top_left_brick_idx[ i ]의 값은 i와 동일한 것으로 유추된다. top_left_brick_idx[ i ] 신택스 요소의 길이는 Ceil( Log2( NumBricksInPic ) 비트이다. bottom_right_brick_idx_delta[ i ]는 i 번째 슬라이스의 오른쪽 하단 모서리에 위치하는 브릭의 브릭 인덱스와 top_left_brick_idx[ i ] 간의 차이를 지정한다. single_brick_per_slice_flag가 1과 같을 때, bottom_right_brick_idx_delta[ i ]의 값은 0과 같은 것으로 추론된다. bottom_right_brick_idx_delta[ i ] 신택스 요소의 길이는 Ceil( Log2( NumBricksInPic - top_left_brick_idx[ i ] ) )비트이다.
비트스트림 적합성은 슬라이스가 다수의 완전한 타일 또는 하나의 타일의 서브세트만을 포함하도록 요구할 수 있다. i번째 슬라이스의 브릭 수와 브릭의 슬라이스 매핑을 지정하는 변수 NumBricksInSlice[ i ] 및 BricksToSliceMap[ j ]은 다음과 같이 도출될 수 있다.
NumBricksInSlice[ i ] = 0
botRightBkIdx = top_left_brick_idx[ i ] + bottom_right_brick_idx_delta[ i ]
for( j = 0; j < NumBricksInPic; j++) {
if( BrickColBd[ j ] >= BrickColBd[ top_left_brick_idx[ i ] ] &&
BrickColBd[ j ] <= BrickColBd[ botRightBkIdx ] &&
BrickRowBd[ j ] >= BrickRowlBd[ top_left_brick_idx[ i ] ] && (7-34)
BrickRowBd[ j ] <= BrickColBd[ botRightBkIdx ] ) {
NumBricksInSlice[ i ]++
BricksToSliceMap[ j ] = i
}
}
loop_filter_across_bricks_enabled_flag는 인-루프 필터링 동작이 PPS를 참조하는 픽처의 브릭 경계를 가로질러 수행될 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. loop_filter_across_bricks_enabled_flag는 인-루프 필터링 동작이 PPS를 참조하는 픽처에서 브릭 경계를 가로질러 수행되지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. 인-루프 필터링 작업에는 디블로킹 필터, 샘플 적응형 오프셋 필터 및 적응형 루프 필터 작업이 포함된다. 존재하지 않는 경우 loop_filter_across_bricks_enabled_flag의 값은 1과 동일한 것으로 유추된다. loop_filter_across_slices_enabled_flag는 인-루프 필터링 동작이 PPS를 참조하는 픽처에서 슬라이스 경계를 가로질러 수행될 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. loop_filter_across_slice_enabled_flag는 인-루프 필터링 동작이 PPS를 참조하는 픽처에서 슬라이스 경계를 가로질러 수행되지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. 인-루프 필터링 작업에는 디블로킹 필터, 샘플 적응형 오프셋 필터 및 적응형 루프 필터 작업이 포함된다. 존재하지 않을 때, loop_filter_across_slices_enabled_flag의 값은 0과 같은 것으로 추론된다.
signalled_slice_id_flag는 각 슬라이스에 대한 슬라이스 ID가 시그널링되는 것을 지정하기 위해 1과 동일하게 설정될 수 있다. signalled_slice_id_flag는 슬라이스 ID가 시그널링되지 않는다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. rect_slice_flag가 0과 같을 때, signalled_slice_id_flag의 값은 0과 같은 것으로 추론된다. signalled_slice_id_length_minus1 plus 1은 존재하는 경우 신택스 요소 slice_id[ i ] 및 슬라이스 헤더 내의 신택스 요소 slice_address를 나타내는 데 사용되는 비트 수를 지정한다. signalled_slice_id_length_minus1의 값은 0에서 15까지의 범위에 있을 수 있다. 존재하지 않을 때 signalled_slice_id_length_minus1의 값은 Ceil( Log2( num_slices_in_pic_minus1 + 1 ) ) - 1과 같은 것으로 추론된다.
slice_id[ i ]는 i번째 슬라이스의 슬라이스 ID를 지정한다. slice_id[ i ] 신택스 요소의 길이는 signalled_slice_id_length_minus1 + 1 비트이다. 존재하지 않을 때, slice_id[ i ]의 값은 0에서 num_slices_in_pic_minus1까지의 범위에 있는 각각의 i에 대해 i와 동일한 것으로 추론된다. entropy_coding_sync_enabled_flag는 PPS를 참조하는 각 픽처의 각 브릭에 있는 CTB 행의 첫 번째 CTB를 포함하는 CTU를 디코딩하기 전에 컨텍스트 변수에 대한 특정 동기화 프로세스가 호출되도록 지정하고, PPS를 참조하는 각 픽처의 각 브릭에 있는 CTB 행의 첫 번째 CTB를 포함하는 CTU를 디코딩한 후에 컨텍스트 변수에 대한 특정 저장 프로세스가 호출된다. entropy_coding_sync_enabled_flag는 PPS를 참조하는 각 픽처의 각 브릭에 있는 CTB 행의 첫 번째 CTB를 포함하는 CTU를 디코딩하기 전에 컨텍스트 변수에 대한 특정 동기화 프로세스가 호출될 필요가 없음을 지정하기 위해 0으로 설정될 수 있고, 컨텍스트 변수에 대한 특정 저장 프로세스는 PPS를 참조하는 각 픽처의 각 브릭에 있는 CTB 행의 첫 번째 CTB를 포함하는 CTU를 디코딩한 후에 호출되지 않는다. 비트스트림 적합성은 entropy_coding_sync_enabled_flag 값이 CVS 내에서 활성화되는 모든 PPS에 대해 동일해야 함을 요구할 수 있다.
레귤러 슬라이스 헤더 의미론의 예는 다음과 같다. slice_address는 슬라이스의 슬라이스 주소를 지정한다. 존재하지 않을 때, slice_address의 값은 0과 같은 것으로 추론된다. rect_slice_flag가 0이면 다음이 적용된다. 슬라이스 주소는 브릭 ID이다. slice_address의 길이는 Ceil( Log2 ( NumBricksInPic ) ) 비트이다. slice_address의 값은 0에서 NumBricksInPic - 1(포함)의 범위에 있을 수 있다. 그렇지 않으면(rect_slice_flag가 1임) 다음이 적용된다. 슬라이스 주소는 슬라이스의 슬라이스 ID이다. slice_address의 길이는 signalled_slice_id_length_minus1 + 1비트이다. signalled_slice_id_flag가 0과 같으면 slice_address의 값은 0에서 num_slices_in_pic_minus1까지의 범위에 있어야 한다. 그렇지 않으면, slice_address의 값은 0에서 2( signalled_slice_id_length_minus1 + 1 ) - 1(포함)의 범위에 있어야 한다.
비트스트림 적합성은 다음과 같은 제약이 적용될 것을 요구할 수 있다. slice_address의 값은 동일한 코딩된 픽처의 임의의 다른 코딩된 슬라이스 NAL 단위의 slice_address의 값과 동일하지 않을 수 있다. 픽처의 슬라이스는 slice_address 값의 오름차순이 아닐 수 있다. 픽처 슬라이스의 형상은 각 브릭이 디코딩될 때 픽처 경계를 포함하거나 이전에 디코딩된 브릭(들)의 경계를 포함하는 전체 왼쪽 경계 및 전체 상단 경계를 갖도록 할 수 있다. num_bricks_in_slice_minus1(있는 경우)은 슬라이스의 브릭 수에서 1을 뺀 수를 지정한다. num_bricks_in_slice_minus1의 값은 0에서 NumBricksInPic - 1(포함)의 범위에 있을 수 있다. rect_slice_flag가 0이고 single_brick_per_slice_flag가 1일 때, num_bricks_in_slice_minus1의 값은 0과 동일한 것으로 추론된다.
현재 슬라이스의 브릭의 수를 지정하는 변수 NumBricksInCurrSlice 및 현재 슬라이스의 i 번째 브릭의 브릭 인덱스를 지정하는 SliceBrickIdx[ i ]는 다음과 같이 도출될 수 있다.
if( rect_slice_flag ) {
sliceIdx = 0
while( slice_address != rect_slice_id[ sliceIdx ] )
sliceIdx++
NumBricksInCurrSlice = NumBricksInSlice[ sliceIdx ]
brickIdx = top_left_brick_idx[ sliceIdx ]
botBrickIdx = brickIdx + bottom_right_brick_idx_delta[ brickIdx ]
for( bIdx = 0; brickIdx <= botBrickIdx; brickIdx++ ) (7-38)
if( BricksToSliceMap[ brickIdx ] = = sliceIdx )
SliceBrickIdx[ bIdx++ ] = brickIdx
} else {
NumBricksInCurrSlice = num_bricks_in_slice_minus1 + 1
SliceBrickIdx[ 0 ] = slice_address
for( i = 1; i < NumBricksInCurrSlice; i++ )
SliceBrickIdx[ i ] = SliceBrickIdx[ i - 1 ] + 1
}
num_entry_point_offsets는 다음과 같이 현재 슬라이스의 엔트리 포인트 수를 지정하는 변수 NumEntryPoints를 지정하는 데 사용된다.
NumEntryPoints = entropy_coding_sync_enabled_flag ? num_entry_point_offsets :
NumBricksInCurrSlice - 1 (7-60)
offset_len_minus1 plus 1은 entry_point_offset_minus1[ i ] 신택스 요소의 길이를 비트 단위로 지정한다. offset_len_minus1의 값은 0에서 31까지의 범위에 있을 수 있다. entry_point_offset_minus1[ i ] plus 1은 i번째 엔트리 포인트 오프셋을 바이트 단위로 지정하고 offset_len_minus1 plus 1비트로 표시된다. 슬라이스 헤더 뒤에 오는 슬라이스 데이터에는 NumEntryPoints + 1 서브세트가 포함되며 서브세트 인덱스 값 범위는 0에서 NumEntryPoints(포함)까지이다. 슬라이스 데이터의 첫 번째 바이트는 바이트 0으로 간주된다. 존재하는 경우, 코딩된 슬라이스 NAL 단위의 슬라이스 데이터 부분에 나타나는 에뮬레이션 방지 바이트는 서브세트 식별을 위해 슬라이스 데이터의 일부로 계산된다. 서브세트 0은 코딩된 슬라이스 데이터 0에서 entry_point_offset_minus1[ 0 ](포함)까지의 바이트를 포함하고, 서브세트 k는 (k는 1에서 NumEntryPoints - 1(포함)까지의 범위에 있으며) firstByte[ k ] 및 lastByte[ k ]가 다음과 같이 정의된 코딩된 슬라이스 데이터의 firstByte[ k ]부터 lastByte[ k ]까지의 바이트를 포함한다:
Figure pct00001
(7-61)
lastByte[ k ] = firstByte[ k ] + entry_point_offset_minus1[ k ](7-61)
마지막 서브세트(서브세트 인덱스가 NumEntryPoints와 동일)에는 코딩된 슬라이스 데이터의 나머지 바이트가 포함된다.
entropy_coding_sync_enabled_flag가 0과 같을 때, 각 서브세트는 동일한 브릭 내에 있는 슬라이스의 모든 CTU의 모든 코딩된 비트를 포함할 수 있고, 서브세트의 수(예를 들어, NumEntryPoints + 1의 값)는 다음과 같아야 한다. 슬라이스의 브릭 수이다. entropy_coding_sync_enabled_flag가 1과 같을 때 0에서 NumEntryPoints까지의 범위에 있는 k를 갖는 각 서브세트 k는 브릭 내의 CTU 행에 있는 모든 CTU의 모든 코딩된 비트와 서브세트의 수(예를 들어, NumEntryPoints + 1의 값)은 슬라이스의 브릭별 루마 CTU 행(brick-specific luma CTU rows)의 총 수와 같을 수 있다.
앞의 예는 하나 이상의 문제를 포함할 수 있다. 예를 들어, ref_pic_list_struct()의 신택스 요소 ltrp_in_slice_header_flag는 long_term_ref_pics_flag가 1과 동일하다는 것을 조건으로 할 수 있다. 결과적으로, long_term_ref_pics_flag가 1과 같을 때, 이 플래그는 후보 참조 픽처 목록 구조 각각에 존재하며, 이는 많을 수 있다. 이는 long_term_ref_pics_flag가 1일 때 큰 SPS를 초래할 수 있다. 다른 예에서, 신택스 요소 num_ref_idx_active_override_flag에 대한 조건과 대응하는 추론의 조합은 문제가 될 수 있다. 예를 들어, num_ref_idx_active_override_flag의 값은 I 슬라이스에 대해 1과 같을 수 있고, 결과적으로 신택스 요소 num_ref_idx_active_minus1[ 0 ]은 num_ref_entries[ 0 ][ RplsIdx[ 0 ] ]가 1보다 큰 I 슬라이스에 대해 시그널링될 수 있고, 이것은 필요하지 않다. 다른 예에서, WPP가 사용 중일 때(예를 들어, entropy_coding_sync_enabled_flag가 1일 때), 신택스 요소 num_entry_point_offsets는 변수 NumEntryPoints의 도출을 위해 시그널링될 수 있다. 그러나 NumEntryPoint는 이러한 시그널링 없이 도출될 수 있다.
일반적으로, 본 개시는 WPP가 사용 중일 때 참조 픽처 목록의 시그널링 및 엔트리 포인트의 시그널링에 대한 개선을 포함하는 비디오 코딩의 개선을 위한 기술을 설명한다. 기술에 대한 설명은 개발 중인 VVC를 기반으로 하지만 다른 비디오/미디어 코덱 사양에도 적용될 수 있다.
위에서 언급한 문제 중 하나 이상은 다음과 같이 해결될 수 있다. 예시적인 관점에서, 플래그가 SPS에 포함되는, 비디오 비트스트림을 디코딩하기 위한 방법이 개시된다. 플래그는 참조 픽처 목록 구조의 장기 참조 픽처(long term reference picture, LTRP) 항목의 POC LSB가 슬라이스 헤더 또는 참조 픽처 목록 구조에 존재하는지를 지정한다. 예를 들어, 플래그는 ltrp_in_slice_header_flag일 수 있다. 다른 예시적인 관점에서, 비디오 비트스트림을 디코딩하기 위한 방법이 개시되고, 여기서 비트스트림은 참조 픽처 목록의 활성 엔트리들의 수가 명시적으로 시그널링되는지를 지정하는 플래그를 포함하고, 플래그가 존재하지 않을 때, 비트스트림의 값 플래그는 슬라이스가 I 슬라이스인 경우 0과 같은 것으로 추론되고 슬라이스가 B 또는 P 슬라이스인 경우 1과 같은 것으로 추론된다. 예를 들어, 플래그는 num_ref_idx_active_override_flag일 수 있다. 다른 예시적인 관점에서, 비디오 비트스트림을 디코딩하는 방법이 개시되며, 여기서 비트스트림은 픽처에 복수의 타일을 포함하고, 파면 병렬 처리 기능이 적용되며, 슬라이스의 다수의 엔트리 포인트는 명시적으로 시그널링되는 대신 추론된다. 예를 들어 엔트리 포인트의 수는 슬라이스에 포함된 모든 브릭의 CTU 행 수의 합으로 유추될 수 있다. 또 다른 예에서, 엔트리 포인트의 수는 변수 NumEntryPoints에 의해 표현될 수 있다.
예시적인 시퀀스 파라미터 세트 RBSP 신택스는 다음과 같다.
seq_parameter_set_rbsp( ) { 설명자
...
log2_max_pic_order_cnt_lsb_minus4 ue(v)
sps_max_dec_pic_buffering_minus1 ue(v)
long_term_ref_pics_flag u(1)
if( long_term_ref_pics_flag )
ltrp_in_slice_header_flag u(1)
sps_idr_rpl_present_flag u(1)
rpl1_same_as_rpl0_flag u(1)
for( i = 0; i < !rpl1_same_as_rpl0_flag ? 2 : 1; i++ ) {
num_ref_pic_lists_in_sps[ i ] ue(v)
for( j = 0; j < num_ref_pic_lists_in_sps[ i ]; j++)
ref_pic_list_struct( i, j )
}
...
레귤러 슬라이스 헤더 신택스의 예는 다음과 같다.
slice_header( ) { 설명자
...
slice_pic_order_cnt_lsb u(v)
if( ( NalUnitType != IDR_W_RADL && NalUnitType != IDR_N_LP ) | | sps_idr_rpl_present_flag ) {
for( i = 0; i < 2; i++ ) {
if( num_ref_pic_lists_in_sps[ i ] > 0 &&
( i = = 0 | | ( i = = 1 && rpl1_idx_present_flag ) ) )
ref_pic_list_sps_flag[ i ] u(1)
if( ref_pic_list_sps_flag[ i ] ) {
if( num_ref_pic_lists_in_sps[ i ] > 1 &&
( i = = 0 | | ( i = = 1 && rpl1_idx_present_flag ) ) )
ref_pic_list_idx[ i ] u(v)
} else
ref_pic_list_struct( i, num_ref_pic_lists_in_sps[ i ] )
for( j = 0; j < NumLtrpEntries[ i ][ RplsIdx[ i ] ]; j++ ) {
if( ltrp_in_slice_header_flag)
slice_poc_lsb_lt[ i ][ j ] u(v)
delta_poc_msb_present_flag[ i ][ j ] u(1)
if( delta_poc_msb_present_flag[ i ][ j ] )
delta_poc_msb_cycle_lt[ i ][ j ] ue(v)
}
}
if( ( slice_type != I && num_ref_entries[ 0 ][ RplsIdx[ 0 ] ] > 1) | |
( slice_type = = B && num_ref_entries[ 1 ][ RplsIdx[ 1 ] ] > 1 ) ) {
num_ref_idx_active_override_flag u(1)
if( num_ref_idx_active_override_flag )
for( i = 0; i < ( slice_type = = B ? 2: 1 ); i++ )
if( num_ref_entries[ i ][ RplsIdx[ i ] ] > 1 )
num_ref_idx_active_minus1[ i ] ue(v)
}
}
...
참조 픽처 목록 구조 신택스
ref_pic_list_struct( listIdx, rplsIdx ) { 설명자
num_ref_entries[ listIdx ][ rplsIdx ] ue(v)
for( i = 0, j = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++) {
if( long_term_ref_pics_flag )
st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] u(1)
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) {
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] ue(v)
if( abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] > 0 )
strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] u(1)
} else if( !ltrp_in_slice_header_flag)
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ j++ ] u(v)
}
}
예시적인 시퀀스 파라미터 세트 RBSP 의미론은 다음과 같다. long_term_ref_pics_flag는 0과 동일하게 설정되어 CVS에서 임의의 코딩된 픽처의 인터-예측을 위해 LTRP가 사용되지 않음을 지정할 수 있다. long_term_ref_pics_flag는 LTRP가 CVS에서 하나 이상의 코딩된 픽처의 인터-예측을 위해 사용될 수 있음을 지정하기 위해 1과 동일하게 설정될 수 있다. ltrp_in_slice_header_flag는 각각의 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에서 LTRP 항목의 POC LSB가 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에 존재한다는 것을 지정하기 위해 0과 동일하게 설정될 수 있다. ltrp_in_slice_header_flag는 각각의 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에서 LTRP 항목의 POC LSB가 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조에 존재하지 않음을 지정하기 위해 1과 동일하게 설정될 수 있다.
레귤러 슬라이스 헤더 의미론의 예는 다음과 같다. slice_poc_lsb_lt[ i ][ j ]는 i번째 참조 픽처 목록에서 j번째 LTRP 엔트리의 픽처 순서 카운트 모듈로 MaxPicOrderCntLsb의 값을 지정한다. slice_poc_lsb_lt[ i ][ j ] 신택스 요소의 길이는 log2_max_pic_order_cnt_lsb_minus4 + 4비트일 수 있다. 변수 PocLsbLt[ i ][ j ]는 다음과 같이 도출될 수 있다.
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag ? (7-41)
slice_poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
num_ref_idx_active_override_flag는 신택스 요소 num_ref_idx_active_minus1[ 0 ]가 P 및 B 슬라이스에 대해 존재하고 신택스 요소 num_ref_idx_active_minus1[ 1 ]이 B 슬라이스에 대해 존재함을 지정하기 위해 1과 같을 수 있다. num_ref_idx_active_override_flag는 신택스 요소 num_ref_idx_active_minus1[ 0 ] 및 num_ref_idx_active_minus1[ 1 ]이 존재하지 않음을 지정하기 위해 0과 동일하게 설정될 수 있다. 존재하지 않는 경우 num_ref_idx_active_override_flag의 값은 다음과 같이 유추될 수 있다. slice_type이 B 또는 P인 경우, num_ref_idx_active_override_flag의 값은 1과 동일한 것으로 유추될 수 있다. 그렇지 않으면(slice_type이 I과 동일하면), num_ref_idx_active_override_flag의 값은 0과 동일한 것으로 추론될 수 있다.
예시적인 참조 픽처 목록 구조 의미론은 다음과 같다. num_ref_entries[ listIdx ][ rplsIdx ]는 ref_pic_list_struct( listIdx, rplsIdx ) 신택스 구조의 항목 수를 지정할 수 있다. num_ref_entries[ listIdx ][ rplsIdx ]의 값은 0에서 sps_max_dec_pic_buffering_minus1 + 14(포함)까지의 범위에 있을 수 있다.
다른 예로서, 레귤러 슬라이스 헤더 신택스는 다음과 같다.
slice_header( ) { 설명자
... ue(v)
if( rect_slice_flag | | NumBricksInPic > 1 )
slice_address u(v)
if( !rect_slice_flag && !single_brick_per_slice_flag )
num_bricks_in_slice_minus1
...
if( NumEntryPoints > 0 ) {
offset_len_minus1 ue(v)
for( i = 0; i < NumEntryPoints; i++ )
entry_point_offset_minus1[ i ] u(v)
}
...
}
레귤러 슬라이스 헤더 의미론의 예는 다음과 같다. 현재 슬라이스의 엔트리 포인트 수를 지정하는 변수 NumEntryPoints는 다음과 같이 도출될 수 있다.
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ ) (7-60)
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice -1
}
offset_len_minus1 plus 1은 entry_point_offset_minus1[ i ] 신택스 요소의 길이를 비트 단위로 지정한다. offset_len_minus1의 값은 0에서 31까지의 범위에 있을 수 있다.
도 7은 예시적인 비디오 코딩 디바이스(700)의 개략도이다. 비디오 코딩 디바이스(700)는 여기에 설명된 바와 같이 개시된 예/실시예를 구현하기에 적합하다. 비디오 코딩 장치(700)는 네트워크를 통해 데이터 업스트림 및/또는 다운스트림을 통신하기 위한 송신기 및/또는 수신기를 포함하는 다운스트림 포트(720), 업스트림 포트(750), 및/또는 트랜시버 유닛(Tx/Rx)(710)을 포함한다. 비디오 코딩 디바이스(700)는 또한 데이터를 처리하기 위한 논리 유닛 및/또는 중앙 처리 유닛(CPU) 및 데이터를 저장하기 위한 메모리(732)를 포함하는 프로세서(730)를 포함한다. 비디오 코딩 디바이스(700)는 또한 통신을 위해 업스트림 포트(750) 및/또는 다운스트림 포트(720)에 결합된 전기, 광-전기(optical-to-electrical, OE) 컴포넌트, 전기-광(electrical-to-optical, EO) 컴포넌트, 및/또는 전기, 광학 또는 무선 통신 네트워크를 통한 데이터의 통신을 위한 무선 통신 컴포넌트를 포함할 수 있다. 비디오 코딩 디바이스(700)는 또한 사용자와 데이터를 통신하기 위한 입력 및/또는 출력(I/O) 디바이스들(760)을 포함할 수 있다. 입출력 장치(760)는 비디오 데이터를 표시하기 위한 디스플레이, 오디오 데이터를 출력하기 위한 스피커 등과 같은 출력 장치를 포함할 수 있다. 입출력 장치(760)는 또한 키보드, 마우스, 트랙볼 및/또는 그러한 출력 장치와 상호작용하기 위한 대응하는 인터페이스 등과 같은 입력 장치를 포함할 수 있다.
프로세서(730)는 하드웨어 및 소프트웨어에 의해 구현된다. 프로세서(730)는 하나 이상의 CPU 칩, 코어(예를 들어, 다중 코어 프로세서로서), 필드 프로그래머블 게이트 어레이(field-programmable gate arrays, FPGA), 주문형 집적 회로(application specific integrated circuit, ASIC), 및 디지털 신호 프로세서(digital signal processor, DSP)로서 구현될 수 있다. 프로세서(730)는 다운스트림 포트(720), Tx/Rx(710), 업스트림 포트(750), 및 메모리(732)와 통신한다. 프로세서(730)는 코딩 모듈(714)을 포함한다. 코딩 모듈(714)은 방법(100, 800 및 900)과 같이, WPP(500) 및/또는 비트스트림(600)을 포함할 수 있는, 여기에 설명된 개시된 실시예를 구현한다. 코딩 모듈(714)은 또한 여기에 설명된 임의의 다른 방법/메커니즘을 구현할 수 있다. 또한, 코딩 모듈(714)은 코덱 시스템(200), 인코더(300), 및/또는 디코더(400)를 구현할 수 있다. 예를 들어, 코딩 모듈(714)은 비트스트림의 슬라이스 헤더에서 num_entry_point_offsets 파라미터를 수신하지 않고 NumEntryPoints(518)의 값을 결정할 수 있다. 따라서, 코딩 모듈(714)은 비디오 코딩 디바이스(700)가 비디오 데이터를 코딩할 때 추가적인 기능 및/또는 코딩 효율성을 제공하게 한다. 이와 같이, 코딩 모듈(714)은 비디오 코딩 장치(700)의 기능을 개선할 뿐만 아니라 비디오 코딩 기술에 특정한 문제를 해결한다. 또한, 코딩 모듈(714)은 비디오 코딩 디바이스(700)를 상이한 상태로 변환시킨다. 대안적으로, 코딩 모듈(714)은 메모리(732)에 저장된 명령으로서 (예를 들어, 비일시적 매체에 저장된 컴퓨터 프로그램 제품으로서) 구현될 수 있고 프로세서(730)에 의해 실행될 수 있다.
메모리(732)는 디스크, 테이프 드라이브, 솔리드 스테이트 드라이브, 읽기 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 플래시 메모리, 삼진 콘텐츠 주소 지정 가능 메모리(TCAM), 정적 랜덤 액세스 메모리(SRAM) 등을 포함한다. 메모리(732)는 오버플로 데이터 저장 장치로 사용될 수 있으며, 이러한 프로그램이 실행을 위해 선택될 때 프로그램을 저장하고, 프로그램 실행 중에 판독되는 명령 및 데이터를 저장한다.
도 8은 비디오 시퀀스의 슬라이스에 대한 NumEntryPoints를 시그널링하지 않고 WPP(500)로 인코딩된 비트스트림(600)과 같은 비트스트림으로 비디오 시퀀스를 인코딩하는 예시적인 방법(800)의 흐름도이다. 방법(800)은 방법(100)을 수행할 때 코덱 시스템(200), 인코더(300), 및/또는 비디오 코딩 디바이스(700)와 같은 인코더에 의해 사용될 수 있다.
방법(800)은 인코더가 복수의 픽처를 포함하는 비디오 시퀀스를 수신하고 예를 들어 사용자 입력에 기초하여 그 비디오 시퀀스를 비트스트림으로 인코딩하기로 결정할 때 시작할 수 있다. 단계 801에서 인코더는 슬라이스를 포함하는 픽처를 비트스트림으로 인코딩할 수 있다. 인코더는 또한 픽처 및/또는 슬라이스가 각각 다른 픽처 및/또는 슬라이스에 대한 코딩된 참조 픽처 및/또는 참조 슬라이스로서 사용되어야 한다고 결정할 수 있다. 이 픽처/슬라이스는 명확성을 위해 이하에서 현재 픽처/현재 슬라이스로 지칭된다. 참조 픽처가 참조 픽처로 사용될 것으로 결정되면, 참조 픽처는 디코딩을 위해 HRD로 포워딩될 수 있다. 인코더는 슬라이스 헤더를 비트스트림으로 인코딩할 수 있다는 점에 유의해야 한다. 일 예에서, 슬라이스 헤더(예를 들어, 참조 슬라이스 및/또는 현재 슬라이스에 대한)는 슬라이스의 엔트리 포인트 오프셋의 수에 대응하는 값을 포함하지 않는다. 예를 들어 슬라이스 헤더에는 num_entry_point_offsets 파라미터가 포함되어 있지 않는다. 단계 803에서, 인코더의 HRD는 비트스트림 또는 메모리로부터 코딩된 참조 픽처의 참조 슬라이스를 획득한다.
단계 805에서, 인코더의 HRD는 참조 슬라이스의 크기에 기초하여 NumEntryPoints를 참조 슬라이스로 도출한다. 예를 들어, NumEntryPoints는 참조 슬라이스가 WPP에 따라 코딩될 때 도출될 수 있다. 일 예에서, NumEntryPoints는 참조 슬라이스 내의 행의 크기에 기초해서 더 도출될 수 있다. 일 예에서, NumEntryPoints는 참조 슬라이스 내의 열의 크기에 기초해서 더 도출될 수 있다. 일 예에서, NumEntryPoints는 참조 슬라이스의 CTU의 수에 기초하여 추가로 도출될 수 있다. 일 예에서, NumEntryPoints는 CTU 주소와 같은 참조 슬라이스 내의 주소에 기초해서 더 도출될 수 있다. 인코더의 HRD는 NumEntryPoints를 기반으로 참조 슬라이스에서 코딩된 데이터의 서브세트에 대한 오프셋을 결정할 수 있다. 예를 들어, HRD는 오프셋 배열을 얻을 수 있다. 그런 다음 HRD는 NumEntryPoints를 기반으로 하는 배열에서 많은 오프셋을 얻을 수 있다. 일 예에서, 서브세트는 CTU 행이다. 따라서 획득된 오프셋은 슬라이스의 각 CTU 행에 대한 엔트리 포인트를 나타낼 수 있다.
예를 들어, NumEntryPoints는 다음과 같이 도출될 수 있다:
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice -1
}
여기서 !entropy_coding_sync_enabled_flag는 WPP(500)이 사용 중이 아님을 나타내고, NumBricksInCurrSlice는 슬라이스(501)의 타일 수이고, numBrickSpecificCtuRowsInSlice는 슬라이스(501)의 CTU 행 521-525의 수이며, BrickHeight[ SliceBrickIdx[ i ] ]는 CTU 행 521-525의 높이이다(따라서 CTU 열(516)의 높이이다).
단계(807)에서, 인코더의 HRD는 참조 슬라이스 내의 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 코딩된 참조 픽처의 참조 슬라이스를 디코딩할 수 있다. 예를 들어, HRD는 해당 오프셋으로 표시된 메모리 또는 비트스트림의 비트에서 시작하는 각 CTU 행에 대한 데이터를 얻을 수 있다. 그런 다음 HRD는 획득된 데이터를 기반으로 참조 슬라이스의 CTU 각각을 디코딩할 수 있다.
단계 809에서, 인코더는 예를 들어 인터 예측을 사용함으로써 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩할 수 있다. 인코더는 또한 단계 811에서 디코더를 향한 통신을 위해 비트스트림을 저장할 수 있다.
도 9는 NumEntryPoints가 WPP(500)로 인코딩된 비트스트림(600)과 같은 비트스트림에 포함되지 않은 경우 비디오 시퀀스를 디코딩하기 위해 NumEntryPoints를 도출하는 예시적인 방법(900)의 흐름도이다. 방법(900)은 방법(100)을 수행할 때 코덱 시스템(200), 디코더(400), 및/또는 비디오 코딩 디바이스(700)과 같이, 디코더에 의해 채용될 수 있다.
방법(900)은 디코더가 예를 들어 방법(800)의 결과로서 비디오 시퀀스를 나타내는 코딩된 데이터의 비트스트림을 수신하기 시작할 때 시작할 수 있다. 단계(901)에서, 디코더는 슬라이스를 포함하는 비트스트림을 수신한다. 예를 들어, 슬라이스는 WPP(500)에 따라 코딩된 슬라이스(501)일 수 있다. 비트스트림은 또한 슬라이스와 연관된 슬라이스 헤더를 포함한다. 예에서 슬라이스 헤더는 슬라이스의 엔트리 포인트 오프셋 수에 해당하는 값을 포함하지 않는다. 예를 들어 슬라이스 헤더에는 num_entry_point_offsets 파라미터가 포함되어 있지 않는다.
단계(903)에서, 디코더는 슬라이스의 크기에 기초하여 NumEntryPoints를 슬라이스로 도출한다. 예를 들어, NumEntryPoints는 슬라이스가 WPP에 따라 코딩될 때 도출될 수 있다. 일 예에서, NumEntryPoints는 슬라이스 내의 행의 크기에 기초해서 추가로 도출될 수 있다. 일 예에서, NumEntryPoints는 슬라이스 내의 열의 크기에 기초해서 더 도출될 수 있다. 일 예에서, NumEntryPoints는 슬라이스의 CTU의 수에 기초하여 추가로 도출될 수 있다. 일 예에서, NumEntryPoints는 CTU 주소와 같은 슬라이스 내의 주소에 기초해서 추가로 도출될 수 있다.
예를 들어, NumEntryPoints는 다음과 같이 도출될 수 있다:
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice -1
}
여기서 !entropy_coding_sync_enabled_flag는 WPP(500)이 사용 중이 아님을 나타내고, NumBricksInCurrSlice는 슬라이스(501)의 타일 수이고, numBrickSpecificCtuRowsInSlice는 슬라이스(501)의 CTU 행 521-525의 수이며, BrickHeight[ SliceBrickIdx[ i ] ]는 CTU 행 521-525의 높이이다(따라서 CTU 열(516)의 높이이다).
단계(905)에서, 디코더는 단계(903)에서 도출된 NumEntryPoints에 기초하여 슬라이스에 포함된 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정할 수 있다. 예를 들어, 디코더는 오프셋의 어레이를 획득할 수 있다. 디코더는 그런 다음 단계(903)에서 도출된 NumEntryPoints에 기초하여 어레이로부터 다수의 오프셋을 얻을 수 있다. 예를 들어, 코딩된 슬라이스 데이터의 오프셋은 각각 서브세트 인덱스 값과 연관될 수 있고, 그러한 값의 범위는 0에서 NumEntryPoints일 수 있다. 그런 다음 디코더는 NumEntryPoints에 도달할 때까지 해당 서브세트 인덱스 값에서 각 오프셋을 반복적으로 얻을 수 있다. 예에서 서브세트는 CTU 행이다. 따라서 획득된 오프셋은 슬라이스의 각 CTU 행에 대한 엔트리 포인트를 나타낼 수 있다.
단계 907에서, 디코더는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 슬라이스를 디코딩한다. 예를 들어, 디코더는 대응하는 오프셋에 의해 표시된 바와 같이 비트스트림의 비트에서 시작하는 각 CTU 행에 대한 데이터를 얻을 수 있다. 그런 다음 디코더는 획득된 데이터에 기초하여 슬라이스의 CTU 각각을 디코딩할 수 있다. 그런 다음 디코더는 단계 909에서 디코딩된 비디오 시퀀스의 일부로서 표시를 위해 슬라이스를 포워딩할 수 있다.
도 10은 NumEntryPoints를 시그널링하지 않고 WPP(500)에 따라 코딩된 비트스트림(600)과 같은 비트스트림으로 비디오 시퀀스를 코딩하기 위한 예시적인 시스템(1000)의 개략도이다. 시스템(1000)은 코덱 시스템(200), 인코더(300), 디코더(400), 및/또는 비디오 코딩 장치(700)와 같은 인코더 및 디코더에 의해 구현될 수 있다. 또한, 시스템(1000)은 방법(100, 800, 및/또는 900)을 구현할 때 적용될 수 있다.
시스템(1000)은 비디오 인코더(1002)를 포함한다. 비디오 인코더(1002)는 코딩된 참조 픽처의 참조 슬라이스를 획득하기 위한 획득 모듈(1001)을 포함한다. 비디오 인코더(1002)는 참조 슬라이스의 크기에 기초하여 NumEntryPoints를 참조 슬라이스로 도출하기 위한 도출 모듈(1003)을 더 포함한다. 비디오 인코더(1002)는 NumEntryPoints에 기초하여 참조 슬라이스 내의 코딩된 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 모듈(1004)을 더 포함한다. 비디오 인코더(1002)는 참조 슬라이스 내의 코딩된 데이터의 서브세트들에 대한 오프셋들에 기초하여 코딩된 참조 픽처의 참조 슬라이스를 디코딩하기 위한 코딩 모듈(1005)을 더 포함한다. 코딩 모듈(1005)은 또한 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩하기 위한 것이다. 비디오 인코더(1002)는 디코더를 향한 통신을 위한 비트스트림을 저장하기 위한 저장 모듈(1006)을 더 포함한다. 비디오 인코더(1002)는 비디오 디코더(1010)를 향해 비트스트림을 전송하기 위한 전송 모듈(1007)을 더 포함한다. 비디오 인코더(1002)는 방법(800)의 단계들 중 임의의 단계를 수행하도록 추가로 구성될 수 있다.
시스템(1000)은 또한 비디오 디코더(1010)를 포함한다. 비디오 디코더(1010)는 슬라이스를 포함하는 비트스트림을 수신하기 위한 수신 모듈(1011)을 포함한다. 비디오 디코더(1010)는 슬라이스의 크기에 기초하여 NumEntryPoints를 슬라이스로 도출하기 위한 결정 모듈(1013)을 더 포함한다. 비디오 디코더(1010)는 0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 모듈(1015)을 더 포함한다. 비디오 디코더(1010)는 슬라이스 내의 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 슬라이스를 디코딩하기 위한 디코딩 모듈(1017)을 더 포함한다. 비디오 디코더(1010)는 디코딩된 비디오 시퀀스의 일부로서 표시를 위해 슬라이스를 포워딩하기 위한 포워딩 모듈(1019)을 더 포함한다. 비디오 디코더(1010)는 방법(900)의 단계들 중 임의의 단계를 수행하도록 추가로 구성될 수도 있다.
제1 컴포넌트와 제2 컴포넌트 사이의 선, 트레이스, 또는 다른 매체를 제외하고는 개재 컴포넌트가 없을 때 제1 컴포넌트가 제2 컴포넌트에 직접 결합된다. 제1 컴포넌트는 제1 컴포넌트와 제2 컴포넌트 사이에 선, 궤적 또는 다른 매체 이외의 개재 컴포넌트가 있는 경우 제2 컴포넌트에 간접적으로 결합된다. "결합된"이라는 용어와 그 변형에는 직접 결합된 것과 간접적으로 결합된 것이 모두 포함된다. "약"이라는 용어의 사용은 달리 명시되지 않는 한 후속 숫자의 ±10%를 포함하는 범위를 의미한다.
또한 여기에 설명된 예시적인 방법의 단계는 설명된 순서대로 수행될 필요가 없으며 이러한 방법의 단계의 순서는 단지 예시적인 것으로 이해되어야 한다. 마찬가지로, 이러한 방법에는 추가적인 단계가 포함될 수 있으며, 본 개시의 다양한 실시예에 따른 방법에서 특정 단계는 생략되거나 결합될 수 있다.
몇몇 실시예가 본 개시에서 제공되었지만, 개시된 시스템 및 방법은 본 개시의 사상 또는 범위를 벗어나지 않고 많은 다른 특정 형태로 구현될 수 있다는 것을 이해할 수 있을 것이다. 본 예는 예시적인 것으로 간주되어야 하며 제한적이지 않으며, 그 의도는 여기에 주어진 세부 사항으로 제한되지 않는다. 예를 들어, 다양한 구성 요소 또는 구성 요소가 다른 시스템에 결합 또는 통합되거나 특정 기능이 생략되거나 구현되지 않을 수 있다.
또한, 다양한 실시예에서 개별적이거나 분리된 것으로 설명되고 예시된 기술, 시스템, 서브시스템 및 방법은 본 개시의 범위를 벗어나지 않고 다른 시스템, 컴포넌트, 기술 또는 방법과 결합되거나 통합될 수 있다. 변경, 대체 및 변경의 다른 예는 당업자에 의해 검사 가능하며 여기에 개시된 정신 및 범위를 벗어나지 않고 이루어질 수 있다.

Claims (22)

  1. 디코더에서 구현되는 방법으로서,
    상기 디코더의 수신기가 슬라이스를 포함하는 비트스트림을 수신하는 단계;
    상기 디코더의 프로세서가 상기 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하는 단계;
    상기 프로세서가 0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정하는 단계; 및
    상기 프로세서가 상기 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 상기 슬라이스를 디코딩하는 단계
    를 포함하는 디코더에서 구현되는 방법.
  2. 제1항에 있어서,
    상기 NumEntryPoints는 슬라이스가 파면 병렬 처리(wavefront parallel processing, WPP)에 따라 코딩될 때 도출되는, 디코더에서 구현되는 방법.
  3. 제1항 내지 제2항 중 어느 한 항에 있어서,
    상기 비트스트림은 슬라이스 헤더를 포함하고, 상기 슬라이스 헤더는 상기 슬라이스 내의 엔트리 포인트 오프셋의 수에 대응하는 값을 포함하지 않는, 디코더에서 구현되는 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 슬라이스 내의 행의 크기에 기초해서 도출되는, 디코더에서 구현되는 방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 슬라이스 내의 열의 크기에 기초해서 도출되는, 디코더에서 구현되는 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 슬라이스 내의 코딩 트리 단위(coding tree unit, CTU)의 수에 기초해서 도출되는, 디코더에서 구현되는 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 슬라이스 내의 주소에 기초해서 도출되는, 디코더에서 구현되는 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 슬라이스의 크기에 기초해서 도출되는, 디코더에서 구현되는 방법.
  9. 인코더에서 구현되는 방법으로서,
    상기 인코더의 프로세서가 코딩된 참조 픽처의 참조 슬라이스를 획득하는 단계;
    상기 프로세서가 상기 참조 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하는 단계;
    상기 프로세서가 상기 NumEntryPoints에 기초하여 상기 참조 슬라이스에서 코딩된 데이터의 서브세트에 대한 오프셋을 결정하는 단계;
    상기 프로세서가 상기 참조 슬라이스 내의 상기 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 상기 코딩된 참조 픽처의 참조 슬라이스를 디코딩하는 단계;
    상기 프로세서가 상기 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩하는 단계; 및
    상기 프로세서에 연결된 메모리가 디코더를 향한 통신을 위해 상기 비트스트림을 저장하는 단계
    를 포함하는 인코더에서 구현되는 방법.
  10. 제9항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스가 파면 병렬 처리(wavefront parallel processing, WPP)에 따라 코딩될 때 도출되는, 인코더에서 구현되는 방법.
  11. 제9항 내지 제10항 중 어느 한 항에 있어서,
    상기 비트스트림은 슬라이스 헤더를 포함하고, 상기 슬라이스 헤더는 상기 슬라이스 내의 엔트리 포인트 오프셋의 수에 대응하는 값을 포함하지 않는, 인코더에서 구현되는 방법.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스 내의 행의 크기에 기초해서 도출되는, 인코더에서 구현되는 방법.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스 내의 열의 크기에 기초해서 도출되는, 인코더에서 구현되는 방법.
  14. 제9항 내지 제13항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스 내의 코딩 트리 단위(coding tree unit, CTU)의 수에 기초해서 도출되는, 인코더에서 구현되는 방법.
  15. 제9항 내지 제14항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스 내의 주소에 기초해서 도출되는, 인코더에서 구현되는 방법.
  16. 제9항 내지 제15항 중 어느 한 항에 있어서,
    상기 NumEntryPoints는 상기 참조 슬라이스의 크기에 기초해서 도출되는, 인코더에서 구현되는 방법.
  17. 비디오 코딩 디바이스로서,
    프로세서, 상기 프로세서에 결합된 수신기, 상기 프로세서에 결합된 메모리, 상기 프로세서에 결합된 전송기를 포함하며, 상기 프로세서, 수신기, 메모리, 및 전송기는 제1항 내지 제16항 중 어느 한 항의 방법을 수행하도록 구성되는, 비디오 코딩 디바이스.
  18. 비 일시적 컴퓨터 판독 가능형 매체로서,
    비디오 코딩 디바이스가 사용하기 위한 컴퓨터 프로그램 제품을 포함하며, 상기 컴퓨터 프로그램 제품은 상기 비 일시적 컴퓨터 판독 가능형 매체에 저장된 컴퓨터 실행 가능형 명령을 포함하여 프로세서에 의해 실행될 때 상기 비디오 코딩 디바이스로 하여금 제1항 내지 제16항 중 어느 한 항의 방법을 수행하게 하는, 비 일시적 컴퓨터 판독 가능형 매체.
  19. 디코더로서,
    슬라이스를 포함하는 비트스트림을 수신하기 위한 수신 수단;
    상기 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하기 위한 도출 수단;
    0에서 NumEntryPoints까지 범위의 서브세트 인덱스 값을 갖는 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 수단; 및
    상기 코딩된 슬라이스 데이터의 서브세트에 대한 오프셋에 기초하여 상기 슬라이스를 디코딩하기 위한 디코딩 수단
    을 포함하는 디코더.
  20. 제19항에 있어서,
    상기 디코더는 제1항 내지 제8항 중 어느 한 항의 방법을 수행하도록 추가로 구성되는 디코더.
  21. 인코더로서,
    코딩된 참조 픽처의 참조 슬라이스를 획득하기 위한 획득 수단;
    상기 참조 슬라이스 내의 엔트리 포인트의 수(NumEntryPoints)를 도출하기 위한 도출 수단;
    상기 NumEntryPoints에 기초하여 상기 참조 슬라이스에서 코딩된 데이터의 서브세트에 대한 오프셋을 결정하기 위한 결정 수단;
    상기 참조 슬라이스 내의 상기 코딩된 데이터의 서브세트에 대한 오프셋에 기초하여 상기 코딩된 참조 픽처의 참조 슬라이스를 디코딩하고, 상기 참조 슬라이스에 기초하여 현재 슬라이스를 비트스트림으로 인코딩하기 위한 코딩 수단; 및
    디코더를 향한 통신을 위해 상기 비트스트림을 저장하기 위한 저장 수단
    을 포함하는 인코더.
  22. 제21항에 있어서,
    상기 인코더는 제9항 내지 제16항 중 어느 한 항의 방법을 수행하도록 추가로 구성되는 인코더.
KR1020217035498A 2019-04-10 2020-04-09 비디오 코딩에서 슬라이스 엔트리 포인트 KR20210135621A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962832128P 2019-04-10 2019-04-10
US62/832,128 2019-04-10
PCT/US2020/027497 WO2020210511A1 (en) 2019-04-10 2020-04-09 Slice entry points in video coding

Publications (1)

Publication Number Publication Date
KR20210135621A true KR20210135621A (ko) 2021-11-15

Family

ID=72750584

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217035498A KR20210135621A (ko) 2019-04-10 2020-04-09 비디오 코딩에서 슬라이스 엔트리 포인트

Country Status (8)

Country Link
US (1) US20220030253A1 (ko)
EP (1) EP3942819A4 (ko)
JP (1) JP2022526023A (ko)
KR (1) KR20210135621A (ko)
CN (1) CN113785583A (ko)
AU (1) AU2020270961A1 (ko)
MX (1) MX2021012404A (ko)
WO (1) WO2020210511A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6982253B2 (ja) * 2018-10-31 2021-12-17 日本電信電話株式会社 復号装置、符号化装置、復号方法、符号化方法、及びプログラム
JP7346731B2 (ja) * 2019-11-05 2023-09-19 エルジー エレクトロニクス インコーポレイティド 映像/ビデオコーディングのための映像情報処理方法及び装置
JP7443513B2 (ja) * 2019-11-05 2024-03-05 エルジー エレクトロニクス インコーポレイティド 映像/ビデオコーディング方法及び装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9124895B2 (en) * 2011-11-04 2015-09-01 Qualcomm Incorporated Video coding with network abstraction layer units that include multiple encoded picture partitions
KR102361012B1 (ko) * 2012-03-22 2022-02-09 엘지전자 주식회사 비디오 인코딩 방법, 비디오 디코딩 방법 및 이를 이용하는 장치
LT3793200T (lt) * 2012-04-13 2023-02-27 Ge Video Compression, Llc Vaizdo kodavimas su maža delsa
EP2903269B1 (en) * 2012-09-26 2019-01-02 Velos Media International Limited Image decoding method and image decoding apparatus
HUE045386T2 (hu) * 2013-01-04 2019-12-30 Samsung Electronics Co Ltd Eljárás slice-szegmensek entrópiadekódolására
US20150373376A1 (en) * 2014-06-20 2015-12-24 Qualcomm Incorporated Systems and methods for selectively signaling different numbers of video signal information syntax structures in a parameter set

Also Published As

Publication number Publication date
WO2020210511A1 (en) 2020-10-15
AU2020270961A1 (en) 2021-11-04
EP3942819A1 (en) 2022-01-26
US20220030253A1 (en) 2022-01-27
JP2022526023A (ja) 2022-05-20
MX2021012404A (es) 2021-11-12
CN113785583A (zh) 2021-12-10
EP3942819A4 (en) 2022-05-25

Similar Documents

Publication Publication Date Title
US11272223B2 (en) Slicing and tiling in video coding
KR102661416B1 (ko) 인코더, 디코더 및 대응하는 방법
KR20210134389A (ko) 인코더, 디코더, 및 대응하는 방법들
KR20210110710A (ko) 비디오 인코더, 비디오 디코더 및 대응하는 방법
KR20210095959A (ko) 비디오 인코더, 비디오 디코더 및 대응하는 방법
KR20220062124A (ko) 비디오 코딩에서 픽처 헤더의 시그널링
JP7368477B2 (ja) ビデオエンコーダ、ビデオデコーダ、及び対応する方法
US20220030253A1 (en) Slice entry points in video coding
US11425377B2 (en) Arbitrary and wrap-around tile grouping
KR20220063262A (ko) 서브픽처 기반 비디오 코딩에서 서브픽처당 하나의 슬라이스의 지시
KR20210095949A (ko) 비디오 코딩 방법 및 장치
KR20210104900A (ko) 비디오 인코더, 비디오 디코더 및 상응하는 방법들

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal