KR102409816B1 - 비디오 코딩을 위한 팔레트 모드 코딩 - Google Patents

비디오 코딩을 위한 팔레트 모드 코딩 Download PDF

Info

Publication number
KR102409816B1
KR102409816B1 KR1020177020890A KR20177020890A KR102409816B1 KR 102409816 B1 KR102409816 B1 KR 102409816B1 KR 1020177020890 A KR1020177020890 A KR 1020177020890A KR 20177020890 A KR20177020890 A KR 20177020890A KR 102409816 B1 KR102409816 B1 KR 102409816B1
Authority
KR
South Korea
Prior art keywords
palette
syntax element
block
video data
video
Prior art date
Application number
KR1020177020890A
Other languages
English (en)
Other versions
KR20170109553A (ko
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 KR20170109553A publication Critical patent/KR20170109553A/ko
Application granted granted Critical
Publication of KR102409816B1 publication Critical patent/KR102409816B1/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/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 (Golomb) 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하는 것, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하는 것, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하는 것, 및 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하는 것.

Description

비디오 코딩을 위한 팔레트 모드 코딩{PALETTE MODE CODING FOR VIDEO CODING}
이 출원은 2015 년 1 월 29 일자로 출원된 미국 가출원 제 62/109,568 호의 이익을 주장하고, 그 전체 내용들은 본원에 참조로 편입된다.
이 개시물은 비디오 인코딩 및 디코딩에 관한 것이다.
디지털 비디오 기능들은, 디지털 텔레비전들, 디지털 다이렉트 브로드캐스트 시스템 (digital direct broadcast system) 들, 무선 브로드캐스트 시스템들, 개인 정보 단말 (personal digital assistant; PDA) 들, 랩톱 또는 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 전자책 리더 (e-book reader) 들, 디지털 카메라들, 디지털 레코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게임용 디바이스들, 비디오 게임 콘솔들, 셀룰러 또는 위성 라디오 전화들, 소위 "스마트폰들", 화상 원격회의 디바이스들, 비디오 스트리밍 디바이스들 등을 포함하는 광범위한 디바이스들 내로 편입될 수 있다. 디지털 비디오 디바이스들은 MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Part 10, 진보된 비디오 코딩 (Advanced Video Coding; AVC) 에 의해 정의된 표준들, 현재 개발 중에 있는 고효율 비디오 코딩 (High Efficiency Video Coding; HEVC) 표준, 및 이러한 표준들의 확장들에서 설명된 것들과 같은 비디오 압축 기법들을 구현한다. 비디오 디바이스들은 이러한 비디오 압축 기법들을 구현함으로써 디지털 비디오 정보를 더 효율적으로 송신하고, 수신하고, 인코딩하고, 디코딩하고, 및/또는 저장할 수도 있다.
비디오 압축 기법들은 비디오 시퀀스들에 내재된 중복성을 감소시키거나 제거하기 위해 공간적 (인트라-픽처 (intra-picture)) 예측 및/또는 시간적 (인터-픽처 (inter-picture)) 예측을 수행한다. 블록-기반 비디오 코딩을 위하여, 비디오 슬라이스 (예컨대, 비디오 프레임 또는 비디오 프레임의 부분) 는 비디오 블록들로 파티셔닝 (partition) 될 수도 있다. 픽처의 인트라-코딩된 (I) 슬라이스에서의 비디오 블록들은 동일한 픽처에서의 이웃하는 블록들 내의 참조 샘플들에 대한 공간적 예측을 이용하여 인코딩된다. 픽처의 인터-코딩된 (P 또는 B) 슬라이스 내의 비디오 블록들은 동일한 픽처에서의 이웃하는 블록들 내의 참조 샘플들에 대한 공간적 예측, 또는 다른 참조 픽처들에서의 참조 샘플들에 대한 시간적 예측을 이용할 수도 있다. 픽처들은 프레임들로서 지칭될 수도 있고, 참조 픽처들은 참조 프레임들로서 지칭될 수도 있다.
공간적 또는 시간적 예측은 코딩되어야 할 블록에 대한 예측 블록으로 귀착된다. 잔차 데이터 (residual data) 는 코딩되어야 할 원래의 블록과 예측 블록 사이의 픽셀 차이들을 나타낸다. 인터-코딩된 블록은 예측 블록을 형성하는 참조 샘플들의 블록을 지시하는 모션 벡터 (motion vector) 에 따라 인코딩되고, 잔차 데이터는 코딩된 블록과 예측 블록 사이의 차이를 표시한다. 인트라-코딩된 블록은 인트라-코딩 모드 및 잔차 데이터에 따라 인코딩된다. 추가의 압축을 위하여, 잔차 데이터는 픽셀 도메인으로부터 변환 도메인으로 변환되어 잔차 계수들로 귀착될 수도 있고, 이 잔차 계수들은 그 후에 양자화될 수도 있다. 초기에 2 차원 어레이로 배열된 양자화된 계수들은 계수들의 1 차원 벡터를 생성하기 위하여 스캔될 수도 있고, 훨씬 더 많은 압축을 달성하기 위하여 엔트로피 코딩 (entropy coding) 이 적용될 수도 있다.
이 개시물은 비디오 인코딩 및 디코딩 기법들에 관한 것이다. 특히, 이 개시물은 팔레트-기반 코딩 모드로 비디오 데이터를 인코딩하고 디코딩하기 위한 기법들을 설명한다. 팔레트-기반 코딩 모드에서, 비디오 데이터의 블록에 대한 픽셀 값들은 비디오 데이터의 블록과 연관된 컬러 값들의 팔레트에 대하여 코딩될 수도 있다. 컬러 값들의 팔레트는 비디오 인코더에 의해 결정될 수도 있고, 특정한 블록에 대하여 가장 공통적인 컬러 값들을 포함할 수도 있다. 비디오 인코더는 컬러 값들의 팔레트로의 인덱스를 비디오 데이터의 블록에서의 각각의 픽셀에 배정할 수도 있고, 이러한 인덱스를 인코딩된 비디오 비트스트림으로 비디오 디코더로 시그널링할 수도 있다. 그 다음으로, 비디오 디코더는 블록에서의 특정한 픽셀에 대하여 어떤 컬러 값을 이용할 것인지를 결정하기 위하여 팔레트로의 인덱스를 이용할 수도 있다.
팔레트에서의 인덱스들을 시그널링하는 것에 추가하여, 비디오 인코더는 또한, 팔레트 자체를 인코딩된 비디오 비트스트림으로 송신할 수도 있다. 팔레트를 송신하기 위한 기법들은 팔레트 값들을 명시적으로 시그널링하는 것뿐만 아니라, 하나 이상의 이전에 코딩된 블록들로부터의 팔레트 엔트리들로부터 현재의 블록에 대한 팔레트 엔트리들을 예측하는 것을 포함할 수도 있다. 이 개시물은 팔레트 코딩 및/또는 팔레트 예측에 관련된 신택스 엘리먼트들을 코딩하기 위한 기법들을 포함하는, 팔레트들을 코딩하기 위한 기법들을 설명한다.
개시물의 하나의 예에서, 비디오 데이터를 디코딩하는 방법은 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 단계로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 단계, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 단계로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 (Golomb) 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하는 단계, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하는 단계, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하는 단계, 및 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하는 단계를 포함한다.
개시물의 또 다른 예에서, 비디오 데이터를 인코딩하는 방법은 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하는 단계, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 단계로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하는 단계, 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하는 단계, 및 인코딩된 비디오 비트스트림에서 복수의 신택스 엘리먼트들을 포함하는 단계를 포함한다.
개시물의 또 다른 예에서, 비디오 데이터를 디코딩하도록 구성된 장치는 인코딩된 비디오 비트스트림을 저장하도록 구성된 메모리, 및 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 것으로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하고, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하고, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하고, 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하도록 구성된 비디오 디코더를 포함한다.
개시물의 또 다른 예에서, 비디오 데이터를 인코딩하도록 구성된 장치는 비디오 데이터의 블록을 저장하도록 구성된 메모리, 및 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하고, 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하고, 인코딩된 비디오 비트스트림에서 복수의 신택스 엘리먼트들을 포함하도록 구성된 비디오 인코더를 포함한다.
개시물의 또 다른 예에서, 비디오 데이터를 디코딩하도록 구성된 장치는 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하기 위한 수단으로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하기 위한 수단, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하기 위한 수단으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하기 위한 수단, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하기 위한 수단, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하기 위한 수단, 및 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하기 위한 수단을 포함한다.
개시물의 또 다른 예에서, 비디오 데이터를 인코딩하도록 구성된 장치는 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하기 위한 수단, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하기 위한 수단으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하기 위한 수단, 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하기 위한 수단, 및 인코딩된 비디오 비트스트림에서 복수의 신택스 엘리먼트들을 포함하기 위한 수단을 포함한다.
또 다른 예에서, 이 개시물은 명령들을 저장하는 컴퓨터-판독가능 저장 매체를 설명하고, 상기 명령들은, 실행될 경우, 비디오 데이터를 디코딩하도록 구성된 디바이스의 하나 이상의 프로세서들로 하여금, 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하게 하는 것으로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하게 하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하게 하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하게 하고, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하게 하고, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하게 하고, 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하게 한다.
또 다른 예에서, 이 개시물은 명령들을 저장하는 컴퓨터-판독가능 저장 매체를 설명하고, 상기 명령들은, 실행될 경우, 비디오 데이터를 인코딩하도록 구성된 디바이스의 하나 이상의 프로세서들로 하여금, 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하게 하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하게 하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하게 하고, 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하게 하고, 인코딩된 비디오 비트스트림에서 복수의 신택스 엘리먼트들을 포함하게 한다.
하나 이상의 예들의 세부사항들은 첨부한 도면들 및 이하의 설명에서 기재된다. 다른 특징들, 목적들, 및 장점들은 설명 및 도면들로부터, 그리고 청구항들로부터 명백할 것이다.
도 1 은 이 개시물에서 설명된 기법들을 사용할 수도 있는 일 예의 비디오 코딩 시스템을 예시하는 블록도이다.
도 2 는 이 개시물에서 설명된 기법들을 구현할 수도 있는 일 예의 비디오 인코더를 예시하는 블록도이다.
도 3 은 이 개시물에서 설명된 기법들을 구현할 수도 있는 일 예의 비디오 디코더를 예시하는 블록도이다.
도 4 는 도 2 의 비디오 인코더의 일 예의 팔레트-기반 인코딩 유닛을 예시하는 블록도이다.
도 5 는 개시물의 기법들에 따라 일 예의 팔레트 예측 기법을 예시하는 개념도이다.
도 6 은 개시물의 기법들에 따라 일 예의 2진 예측 벡터 인코딩 기법을 예시하는 개념도이다.
도 7 은 도 3 의 비디오 인코더의 일 예의 팔레트-기반 디코딩 유닛을 예시하는 블록도이다.
도 8 은 개시물의 기법들에 따라 일 예의 비디오 인코딩 방법을 예시하는 플로우차트이다.
도 9 는 개시물의 기법들에 따라 일 예의 비디오 디코딩 방법을 예시하는 플로우차트이다.
이 개시물은 비디오 코딩의 분야에 관련되고, 더욱 상세하게는, 팔레트-기반 코딩 모드에서 비디오 데이터의 블록을 예측하거나 코딩하는 것에 관련된다. 전통적인 비디오 코딩에서는, 이미지들이 연속-톤 (continuous-tone) 이고 공간적으로 평활 (smooth) 한 것으로 가정된다. 이 가정들에 기초하여, 블록-기반 변환, 필터링 등과 같은 다양한 툴들이 개발되었고, 이러한 툴들은 자연적 컨텐츠 비디오들에 대하여 양호한 성능을 보여주었다. 그러나, 원격 데스크톱, 협업 작업 및 무선 디스플레이와 같은 애플리케이션들에서, (예컨대, 텍스트 또는 컴퓨터 그래픽과 같은) 컴퓨터 생성 스크린 컨텐츠는 압축되어야 할 지배적인 컨텐츠일 수도 있다. 이 타입의 컨텐츠는 이산-톤 (discrete-tone) 을 가지는 경향이 있고, 예리한 라인들 및 높은 콘트라스트의 객체 경계들을 특징으로 한다. 연속-톤 및 평활성의 가정은 더 이상 스크린 컨텐츠에 대해 적용될 수도 없고, 이에 따라, 전통적인 비디오 코딩 기법들은 스크린 컨텐츠를 포함하는 비디오 데이터를 압축하기 위하여 효율적이지 않을 수도 있다.
이 개시물은 스크린 컨텐츠의 코딩을 위하여 특히 적당할 수도 있는 팔레트-기반 코딩을 설명한다. 예를 들어, 비디오 데이터의 특정한 구역이 상대적으로 작은 수의 컬러들을 가지는 것으로 가정하면, 비디오 코더 (예컨대, 비디오 인코더 또는 비디오 디코더) 는 특정한 구역의 비디오 데이터를 나타내기 위하여 소위 "팔레트" 를 형성할 수도 있다. 팔레트는 특정한 구역 (예컨대, 소정의 블록) 의 비디오 데이터를 나타내는 컬러들 또는 픽셀 값들의 표로서 표현될 수도 있다. 예를 들어, 팔레트는 소정의 블록에서 가장 지배적인 픽셀 값들을 포함할 수도 있다. 일부 경우들에는, 가장 지배적인 픽셀 값들이 블록 내에서 가장 빈번하게 발생하는 하나 이상의 픽셀 값들을 포함할 수도 있다. 추가적으로, 일부 경우들에는, 비디오 코더가 픽셀 값이 블록에서 가장 지배적인 픽셀 값들 중의 하나로서 포함되어야 하는지 여부를 결정하기 위하여, 임계 값 (threshold value) 을 적용할 수도 있다. 팔레트-기반 코딩의 다양한 양태들에 따르면, 비디오 코더는 비디오 데이터의 현재의 블록에 대한 실제적인 픽셀 값들 또는 그 잔차들을 코딩하는 대신에, 현재의 블록의 픽셀들 값들 중의 하나 이상을 표시하는 인덱스 값들을 코딩할 수도 있다. 팔레트-기반 코딩의 맥락에서, 인덱스 값들은 현재의 블록의 개별적인 픽셀 값들을 나타내기 위하여 이용되는 팔레트에서의 개개의 엔트리들을 표시한다.
예를 들어, 비디오 인코더는 블록에 대한 팔레트를 결정하고 (예컨대, 팔레트를 명시적으로 코딩하거나, 팔레트를 예측하거나, 또는 그 조합을 행하고), 픽셀 값들 중의 하나 이상을 나타내기 위하여 팔레트에서의 엔트리를 위치시키고, 블록의 픽셀 값들을 나타내기 위하여 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩함으로써, 비디오 데이터의 블록을 인코딩할 수도 있다. 일부 예들에서, 비디오 인코더는 인코딩된 비트스트림으로 팔레트 및/또는 인덱스 값들을 시그널링할 수도 있다. 결국, 비디오 디코더는 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라, 블록의 개별적인 픽셀들에 대한 인덱스 값들을 획득할 수도 있다. 비디오 디코더는 블록의 다양한 픽셀 값들을 재구성하기 위하여 픽셀들의 인덱스 값들을 팔레트의 엔트리들에 관련시킬 수도 있다.
이하에서 논의된 다양한 예들에 따르면, 이 개시물은 팔레트-기반 코딩 모드로 비디오 데이터의 블록들을 코딩할 때에 코딩 효율을 개선시키기 위한 기법들을 설명한다. 이 개시물의 예들은 팔레트-기반 코딩 모드를 이용하여 비디오 데이터를 코딩하기 위한 기법들, 및 팔레트-기반 코딩 모드에 관련된 신택스 엘리먼트들을 코딩하기 위한 기법들을 포함한다. 일부 예들에서, 이 개시물의 기법들은 비디오 데이터의 블록에 대한 팔레트를 결정하고 및/또는 재구성하기 위하여 비디오 디코더에 의해 이용된 신택스 엘리먼트들을 코딩하는 것에 관한 것이다.
일부 예들에서, 이 개시물의 팔레트-기반 코딩 기법들은 하나 이상의 비디오 코딩 표준들과의 이용을 위하여 구성될 수도 있다. 일부 예의 비디오 코딩 표준들은 그 스케일러블 비디오 코딩 (SVC) 및 멀티뷰 비디오 코딩 (MVC) 확장들을 포함하는, ITU-T H.261, ISO/IEC MPEG-1 비주얼, ITU-T H.262 또는 ISO/IEC MPEG-2 비주얼, ITU-T H.263, ISO/IEC MPEG-4 비주얼 및 ITU-T H.264 (또한, ISO/IEC MPEG-4 AVC 로서 알려짐) 를 포함한다. 또 다른 예에서, 팔레트-기반 코딩 기법들은 고효율 비디오 코딩 (High Efficiency Video Coding; HEVC) 과의 이용을 위하여 구성될 수도 있다. HEVC 는 ITU-T 비디오 코딩 전문가 그룹 (Video Coding Experts Group; VCEG) 및 ISO/IEC 모션 픽처 전문가 그룹 (Motion Picture Experts Group; MPEG) 의 비디오 코딩에 관한 합동 협력 팀 (Joint Collaboration Team on Video Coding; JCT-VC) 에 의해 개발된 새로운 비디오 코딩 표준이다.
최근, HEVC 의 설계는 ITU-T 비디오 코딩 전문가 그룹 (Video Coding Experts Group; VCEG) 및 ISO/IEC 동화상 전문가 그룹 (Motion Picture Experts Group; MPEG) 의 비디오 코딩에 관한 합동 협력 팀 (Joint Collaboration Team on Video Coding; JCT-VC) 에 의해 완결되었다. 이하 HEVC 버전 1 또는 HEVC1 로서 지칭된 최근의 HEVC 사양은 2015 년 3 월 24 일자로, http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=11885&lang=en 로부터 입수가능한 "ITU-T H.265 (V1)" 에서 설명되어 있다. 문서 ITU-T H.265, SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS, 시청각 서비스들의 기반구조 (Infrastructure of Audiovisual Services) - 동영상의 코딩 (Coding of Moving Video), "High Efficiency Video Coding (고효율 비디오 코딩)" April 2013 은 또한 HEVC 표준을 설명한다. 이하 RExt 로서 지칭된 범위 확장들의 최근 사양은, 2015 년 3 월 24 일자로 http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=12296&lang=en 로부터 입수가능한 "ITU-T H.265 (V2)" 에서 설명되어 있다.
스크린 생성된 컨텐츠의 더욱 효율적인 코딩을 제공하기 위하여, JCT-VC 는 HEVC 스크린 컨텐츠 코딩 (Screen Content Coding; SCC) 표준으로서 지칭된, HEVC 표준에 대한 확장을 개발하고 있다. "HEVC SCC 초안 2" 또는 "WD2" 로서 지칭된, HEVC SCC 표준의 최근의 작업 초안은 문서 JCTVC-S1005, R. Joshi 및 J. Xu, "HEVC screen content coding draft text 2 (HEVC 스크린 컨텐츠 코딩 초안 텍스트 2)" ITU-T SG 16 WP 3 및 ISO/IEC JTC 1/SC 29/WG 11 의 비디오 코딩에 관한 합동 협력 팀 (Joint Collaborative Team on Video Coding; JCT-VC), 19 차 회의: Strasbourg, FR, 17-24 October 2014 에서 설명되어 있다.
도 1 은 팔레트-기반 비디오 코딩을 위하여 이 개시물의 기법들을 사용할 수도 있는 일 예의 비디오 코딩 시스템 (10) 을 예시하는 블록도이다. 본원에서 이용된 바와 같이, 용어 "비디오 코더" 는 일반적으로 비디오 인코더들 및 비디오 디코더들의 양자를 지칭한다. 이 개시물에서, 용어들 "비디오 코딩" 또는 "코딩" 은 일반적으로 비디오 인코딩 또는 비디오 디코딩을 지칭할 수도 있다. 비디오 코딩 시스템 (10) 의 비디오 인코더 (20) 및 비디오 디코더 (30) 는, 이 개시물에서 설명된 다양한 예들에 따라 팔레트-기반 비디오 코딩을 위한 기법들을 수행하도록 구성될 수도 있는 디바이스들의 예들을 나타낸다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트-기반 코딩 또는 비-팔레트 (non-palette) 기반 코딩의 어느 하나를 이용하여, HEVC 코딩에서의 CU 들 및 PU 들과 같은 비디오 데이터의 다양한 블록들을 선택적으로 코딩하도록 구성될 수도 있다. 비-팔레트 기반 코딩 모드들은 HEVC 표준에 의해 특정된 다양한 코딩 모드들과 같은, 다양한 인터-예측 시간적 코딩 모드들 또는 인트라-예측 공간적 코딩 모드들을 지칭할 수도 있다. 그러나, 이 개시물의 기법들은 팔레트-기반 코딩 모드를 이용하는 임의의 비디오 코딩 기법들 및/또는 표준들과 함께 이용될 수도 있다는 것이 이해되어야 한다.
도 1 에서 도시된 바와 같이, 비디오 코딩 시스템 (10) 은 소스 디바이스 (12) 및 목적지 디바이스 (14) 를 포함한다. 소스 디바이스 (12) 는 인코딩된 비디오 데이터를 생성한다. 따라서, 소스 디바이스 (12) 는 비디오 인코딩 디바이스 또는 비디오 인코딩 장치로서 지칭될 수도 있다. 목적지 디바이스 (14) 는 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 디코딩할 수도 있다. 따라서, 목적지 디바이스 (14) 는 비디오 디코딩 디바이스 또는 비디오 디코딩 장치로서 지칭될 수도 있다. 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 비디오 코딩 디바이스들 또는 비디오 코딩 장치들의 예들일 수도 있다.
소스 디바이스 (12) 및 목적지 디바이스 (14) 는, 데스크톱 컴퓨터들, 이동 컴퓨팅 디바이스들, 노트북 (예컨대, 랩톱) 컴퓨터들, 태블릿 컴퓨터들, 셋톱 (set-top) 박스들, 소위 "스마트" 폰들과 같은 전화 핸드셋들, 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게임용 콘솔들, 차량내 컴퓨터들 등을 포함하는 광범위한 디바이스들을 포함할 수도 있다.
목적지 디바이스 (14) 는 채널 (16) 을 통해 소스 디바이스 (12) 로부터 인코딩된 비디오 데이터를 수신할 수도 있다. 채널 (16) 은 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 이동시킬 수 있는 하나 이상의 매체들 또는 디바이스들을 포함할 수도 있다. 하나의 예에서, 채널 (16) 은 소스 디바이스 (12) 가 인코딩된 비디오 데이터를 실시간으로 목적지 디바이스 (14) 로 직접 송신하는 것을 가능하게 하는 하나 이상의 통신 매체들을 포함할 수도 있다. 이 예에서, 소스 디바이스 (12) 는 무선 통신 프로토콜과 같은 통신 표준에 따라 인코딩된 비디오 데이터를 변조시킬 수도 있고, 변조된 비디오 데이터를 목적지 디바이스 (14) 로 송신할 수도 있다. 하나 이상의 통신 매체들은 라디오 주파수 (radio frequency; RF) 스펙트럼 또는 하나 이상의 물리적 송신 라인들과 같은 무선 및/또는 유선 통신 매체들을 포함할 수도 있다. 하나 이상의 통신 매체들은 로컬 영역 네트워크, 광역 네트워크, 또는 글로벌 네트워크 (예컨대, 인터넷) 와 같은 패킷-기반 네트워크의 일부를 형성할 수도 있다. 하나 이상의 통신 매체들은 라우터들, 스위치들, 기지국들, 또는 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로의 통신을 가능하게 하는 다른 장비를 포함할 수도 있다.
또 다른 예에서, 채널 (16) 은 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 저장하는 저장 매체를 포함할 수도 있다. 이 예에서, 목적지 디바이스 (14) 는 디스크 액세스 또는 카드 액세스를 통해 저장 매체를 액세스할 수도 있다. 저장 매체는 블루-레이 (Blu-ray) 디스크들, DVD 들, CD-ROM 들, 플래시 메모리, 또는 인코딩된 비디오 데이터를 저장하기 위한 다른 적당한 디지털 저장 매체들과 같은, 다양한 국소적으로 액세스된 데이터 저장 매체들을 포함할 수도 있다.
추가의 예에서, 채널 (16) 은 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 저장하는 파일 서버 또는 또 다른 중간 저장 디바이스를 포함할 수도 있다. 이 예에서, 목적지 디바이스 (14) 는 스트리밍 또는 다운로드를 통해 파일 서버 또는 다른 중간 저장 디바이스에서 저장된 인코딩된 비디오 데이터를 액세스할 수도 있다. 파일 서버는 인코딩된 비디오 데이터를 저장할 수 있으며 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로 송신할 수 있는 일 타입의 서버일 수도 있다. 일 예의 파일 서버들은 (예컨대, 웹사이트를 위한) 웹 서버들, 파일 전송 프로토콜 (file transfer protocol; FTP) 서버들, 네트워크 연결 저장 (network attached storage; NAS) 디바이스들, 및 로컬 디스크 드라이브들을 포함한다.
목적지 디바이스 (14) 는 인터넷 접속과 같은 표준 데이터 접속을 통해 인코딩된 비디오 데이터를 액세스할 수도 있다. 데이터 접속들의 일 예의 타입들은, 파일 서버 상에 저장된 인코딩된 비디오 데이터를 액세스하기에 적당한 무선 채널들 (예컨대, Wi-Fi 접속들), 유선 접속들 (예컨대, DSL, 케이블 모뎀 등), 또는 양자의 조합들을 포함할 수도 있다. 파일 서버로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신, 또는 양자의 조합일 수도 있다.
팔레트-기반 비디오 코딩을 위한 이 개시물의 기법들은 무선 애플리케이션들 또는 설정들로 제한되지는 않는다. 기법들은 오버-디-에어 (over-the-air) 텔레비전 브로드캐스트들, 케이블 텔레비전 송신들, 위성 텔레비전 송신들, 예컨대, 인터넷을 통한 스트리밍 비디오 송신들, 데이터 저장 매체 상에서의 저장을 위한 비디오 데이터의 인코딩, 데이터 저장 매체 상에 저장된 비디오 데이터의 디코딩, 또는 다른 애플리케이션들과 같은 다양한 멀티미디어 애플리케이션들의 지원 하에서 비디오 코딩에 적용될 수도 있다. 일부 예들에서, 비디오 코딩 시스템 (10) 은 비디오 스트리밍, 비디오 재생, 비디오 브로드캐스팅, 및/또는 영상 통화 (video telephony) 와 같은 애플리케이션들을 지원하기 위하여 일방향 (one-way) 또는 양방향 (two-way) 비디오 송신을 지원하도록 구성될 수도 있다.
도 1 에서 예시된 비디오 코딩 시스템 (10) 은 단지 하나의 예이다. 이 개시물의 기법들은 인코딩 및 디코딩 디바이스들 사이의 임의의 데이터 통신을 반드시 포함하지는 않는 비디오 코딩 이용 케이스들 (예컨대, 비디오 인코딩 또는 비디오 디코딩) 에 적용할 수도 있다. 다른 예들에서, 데이터는 로컬 메모리로부터 취출 (retrieve) 되거나, 네트워크 상에서 스티리밍되는 등등과 같다. 비디오 인코딩 디바이스는 데이터를 인코딩하고 이를 메모리에 저장할 수도 있고, 및/또는 비디오 디코딩 디바이스는 메모리로부터 데이터를 취출하고 이를 디코딩할 수도 있다. 다수의 예들에서, 인코딩 및 디코딩은, 서로 통신하지 않지만, 간단하게 데이터를 메모리로 인코딩하고 및/또는 메모리로부터 데이터를 취출하여 데이터를 디코딩하는 디바이스들에 의해 수행된다.
도 1 의 예에서, 소스 디바이스 (12) 는 비디오 소스 (18), 비디오 인코더 (20), 및 출력 인터페이스 (22) 를 포함한다. 일부 예들에서, 출력 인터페이스 (22) 는 변조기/복조기 (모뎀) 및/또는 송신기를 포함할 수도 있다. 비디오 소스 (18) 는 비디오 캡처 디바이스, 예컨대, 비디오 카메라, 이전-캡처된 비디오 데이터를 포함하는 비디오 아카이브 (video archive), 비디오 컨텐츠 제공자로부터 비디오 데이터를 수신하기 위한 비디오 공급 인터페이스, 및/또는 비디오 데이터를 생성하기 위한 컴퓨터 그래픽 시스템, 또는 비디오 데이터의 이러한 소스들의 조합을 포함할 수도 있다.
비디오 인코더 (20) 는 비디오 소스 (18) 로부터의 비디오 데이터를 인코딩할 수도 있다. 일부 예들에서, 소스 디바이스 (12) 는 출력 인터페이스 (22) 를 통해 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로 직접적으로 송신한다. 다른 예들에서, 인코딩된 비디오 데이터는 또한, 디코딩 및/또는 재생을 위한 목적지 디바이스 (14) 에 의한 더 이후의 액세스를 위하여 저장 매체 또는 파일 서버 상으로 저장될 수도 있다.
도 1 의 예에서, 목적지 디바이스 (14) 는 입력 인터페이스 (28), 비디오 디코더 (30), 및 디스플레이 디바이스 (32) 를 포함한다. 일부 예들에서, 입력 인터페이스 (28) 는 수신기 및/또는 모뎀을 포함한다. 입력 인터페이스 (28) 는 채널 (16) 상에서 인코딩된 비디오 데이터를 수신할 수도 있다. 디스플레이 디바이스 (32) 는 목적지 디바이스 (14) 와 통합될 수도 있거나, 목적지 디바이스 (14) 의 외부에 있을 수도 있다. 일반적으로, 디스플레이 디바이스 (32) 는 디코딩된 비디오 데이터를 디스플레이한다. 디스플레이 디바이스 (32) 는 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 또는 또 다른 타입의 디스플레이 디바이스와 같은 다양한 디스플레이 디바이스들을 포함할 수도 있다.
이 개시물은 일반적으로, 비디오 인코더 (20) 가 어떤 정보를 비디오 디코더 (30) 와 같은 또 다른 디바이스에 "시그널링" 또는 "송신" 하는 것을 지칭할 수도 있다. 용어 "시그널링" 또는 "송신"은 일반적으로, 압축된 비디오 데이터를 디코딩하기 위하여 이용된 신택스 엘리먼트들 및/또는 다른 데이터의 통신을 지칭할 수도 있다. 이러한 통신은 실시간 또는 실시간에 근접하게 발생할 수도 있다. 대안적으로, 이러한 통신은, 인코딩 시에 인코딩된 비트스트림으로, 신택스 엘리먼트들을 컴퓨터-판독가능 저장 매체에 저장하고, 다음으로, 이러한 신택스 엘리먼트들이 이 매체에 저장된 후의 임의의 시간에 디코딩 디바이스에 의해 취출될 수도 있을 때에 발생할 수도 있는 것과 같이, 시간의 기간에 걸쳐 발생할 수도 있다. 이에 따라, 비디오 디코더 (30) 는 어떤 정보를 "수신" 하는 것으로서 지칭될 수도 있지만, 정보의 수신은 반드시 실시간 또는 실시간에 근접하여 발생할 필요는 없고, 저장 후의 일부의 시간에 매체로부터 취출될 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (30) 는 각각, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서 (digital signal processor; DSP) 들, 애플리케이션 특정 집적 회로 (application-pecific integrated circuit; ASIC) 들, 필드-프로그래밍가능한 게이트 어레이 (field-programmable gate array; FPGA) 들, 개별 로직, 하드웨어, 또는 그 임의의 조합들과 같은 다양한 적당한 회로부 중의 임의의 것으로서 구현될 수도 있다. 기법들이 부분적으로 소프트웨어로 구현될 경우, 디바이스는 소프트웨어를 위한 명령들을 적당한 비-일시적 (non-transitory) 컴퓨터-판독가능 저장 매체에 저장할 수도 있고, 이 개시물의 기법들을 수행하기 위하여 하나 이상의 프로세서들을 이용하여 명령들을 하드웨어로 실행할 수도 있다. 상기한 것 (하드웨어, 소프트웨어, 하드웨어 및 소프트웨어의 조합 등을 포함함) 중의 임의의 것은 하나 이상의 프로세서들인 것으로 간주될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 의 각각은 하나 이상의 인코더들 또는 디코더들 내에 포함될 수도 있고, 인코더들 또는 디코더들 중의 어느 하나는 조합된 인코더/디코더 (CODEC) 의 일부로서 각각의 디바이스 내에 통합될 수도 있다.
일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 위에서 언급된 HEVC 표준과 같은 비디오 압축 표준에 따라 동작한다. 기본 HEVC 표준에 추가하여, HEVC 를 위한 스케일러블 비디오 코딩, 멀티뷰 비디오 코딩, 및 3D 코딩 확장들을 생성하기 위한 노력들이 계속되고 있다. 게다가, 예컨대, 이 개시물에서 설명된 바와 같은 팔레트-기반 코딩 모드들은 HEVC 표준의 확장을 위하여 제공될 수도 있다. 일부 예들에서, 팔레트-기반 코딩을 위하여 이 개시물에서 설명된 기법들은 다른 비디오 코딩 표준들에 따라 동작하도록 구성된 인코더들 및 디코더들에 적용될 수도 있다. 따라서, HEVC 코덱에서 코딩 유닛 (CU) 들 또는 예측 유닛 (prediction unit; PU) 들의 코딩을 위한 팔레트-기반 코딩 모드의 적용은 예시의 목적들을 위하여 설명된다.
HEVC 및 다른 비디오 코딩 표준들에서는, 비디오 시퀀스가 전형적으로 일련의 픽처들을 포함한다. 픽처들은 또한, "프레임들" 로서 지칭될 수도 있다. 픽처는 SL, SCb 및 SCr 로 나타낸 3 개의 샘플 어레이들을 포함할 수도 있다. SL 은 루마 샘플 (luma sample) 들의 2 차원 어레이 (예컨대, 블록) 이다. SCb 는 Cb 크로미넌스 샘플 (chrominance sample) 들의 2 차원 어레이이다. SCr 은 Cr 크로미넌스 샘플 (chrominance sample) 들의 2 차원 어레이이다. 크로미넌스 샘플들은 또한, 본원에서 "크로마 (chroma)" 샘플들로서 지칭될 수도 있다. 다른 사례들에서, 픽처는 단색일 수도 있고 루마 샘플들의 어레이를 오직 포함할 수도 있다.
픽처의 인코딩된 표현을 생성하기 위하여, HEVC 에서, 비디오 인코더 (20) 는 코딩 트리 유닛 (coding tree unit; CTU) 들의 세트를 생성할 수도 있다. CTU 들의 각각은 루마 샘플들의 코딩 트리 블록, 크로마 샘플들의 2 개의 대응하는 코딩 트리 블록들, 및 코딩 트리 블록들의 샘플들을 코딩하기 위하여 이용된 신택스 구조들을 포함할 수도 있다. 코딩 트리 블록은 샘플들의 NxN 블록일 수도 있다. CTU 는 또한, "트리 블록" 또는 "최대 코딩 유닛 (largest coding unit)" (LCU) 으로서 지칭될 수도 있다. HEVC 의 CTU 들은 H.264/AVC 와 같은 다른 표준들의 매크로블록들과 대략 유사할 수도 있다. 그러나, CTU 는 반드시 특정한 크기로 제한되는 것은 아니고, 하나 이상의 코딩 유닛 (CU) 들을 포함할 수도 있다. 슬라이스는 래스터 스캔 (raster scan) 에서 연속적으로 순서화된 정수 개수 (integer number) 의 CTU들을 포함할 수도 있다. 코딩된 슬라이스는 슬라이스 헤더 및 슬라이스 데이터를 포함할 수도 있다. 슬라이스의 슬라이스 헤더는 슬라이스에 대한 정보를 제공하는 신택스 엘리먼트들을 포함하는 신택스 구조일 수도 있다. 슬라이스 데이터는 슬라이스의 코딩된 CTU 들을 포함할 수도 있다.
이 개시물은 하나 이상의 샘플 블록들과, 샘플들의 하나 이상의 블록들의 샘플들을 코딩하기 위하여 이용된 신택스 구조들을 지칭하기 위하여 용어 "비디오 유닛" 또는 "비디오 블록" 또는 "블록" 을 이용할 수도 있다. 비디오 유닛들 또는 블록들의 예시적인 타입들은, CTU들, CU들, PU들, 변환 유닛들 (TU들), 매크로블록들, 매크로블록 파티션들, 등등을 포함할 수도 있다. 일부 맥락들에서, PU 들의 논의는 매크로블록들 또는 매크로블록 파티션들의 논의와 상호교환될 수도 있다.
코딩된 CTU 를 생성하기 위하여, 비디오 인코더 (20) 는 코딩 트리 블록들을 코딩 블록들, 이 때문에, 명칭 "코딩 트리 유닛들" 로 분할하기 위하여, CTU 의 코딩 트리 블록들에 대해 쿼드-트리 파티셔닝 (quad-tree partitioning) 을 재귀적으로 수행할 수도 있다. 코딩 블록은 샘플들의 NxN 블록이다. CU 는 루마 샘플들의 코딩 블록과, 루마 샘플 어레이, Cb 샘플 어레이, 및 Cr 샘플 어레이를 가지는 픽처의 크로마 샘플들의 2 개의 대응하는 코딩 블록들, 그리고 코딩 블록들의 샘플들을 코딩하기 위하여 이용된 신택스 구조들일 수도 있다. 비디오 인코더 (20) 는 CU 의 코딩 블록을 하나 이상의 예측 블록들로 파티셔닝할 수도 있다. 예측 블록은 동일한 예측이 적용되는 샘플들의 직사각형 (예컨대, 정사각형 또는 비-정사각형) 블록일 수도 있다. CU 의 예측 유닛 (PU) 은 루마 샘플들의 예측 블록, 픽처의 크로마 샘플들의 2 개의 대응하는 예측 블록들, 및 예측 블록 샘플들을 예측하기 위해 이용된 신택스 구조들을 포함할 수도 있다. 비디오 인코더 (20) 는 CU 의 각각의 PU 의 루마, Cb, 및 Cr 예측 블록들에 대한 예측 루마, Cb, 및 Cr 블록들을 생성할 수도 있다.
비디오 인코더 (20) 는 PU 에 대한 예측 블록들을 생성하기 위하여 인트라 예측 또는 인터 예측을 이용할 수도 있다. 비디오 인코더 (20) 가 PU 의 예측 블록들을 생성하기 위하여 인트라 예측을 이용할 경우, 비디오 인코더 (20) 는 PU 와 연관된 픽처의 디코딩된 샘플들에 기초하여 PU 의 예측 블록들을 생성할 수도 있다.
비디오 인코더 (20) 가 PU 의 예측 블록들을 생성하기 위하여 인터 예측을 이용할 경우, 비디오 인코더 (20) 는 PU 와 연관된 픽처 이외의 하나 이상의 픽처들의 디코딩된 샘플들에 기초하여 PU 의 예측 블록들을 생성할 수도 있다. 비디오 인코더 (20) 는 PU 의 예측 블록들을 생성하기 위하여 단방향-예측 (uni-prediction) 또는 양방향-예측 (bi-prediction) 을 이용할 수도 있다. 비디오 인코더 (20) 가 PU 에 대한 예측 블록들을 생성하기 위하여 단방향-예측을 이용할 때, PU 는 단일 모션 벡터 (MV) 를 가질 수도 있다. 비디오 인코더 (20) 가 PU 에 대한 예측 블록들을 생성하기 위하여 양방향-예측을 이용할 때, PU 는 2 개의 MV 들을 가질 수도 있다.
비디오 인코더 (20) 가 CU 의 하나 이상의 PU 들에 대한 예측 블록들 (예컨대, 예측 루마, Cb, 및 Cr 블록들) 을 생성한 후, 비디오 인코더 (20) 는 CU 에 대한 잔차 블록들을 생성할 수도 있다. CU 의 잔차 블록에서의 각각의 샘플은 CU 의 PU 의 예측 블록에서의 샘플과, CU 의 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 에 대한 루마 잔차 블록을 생성할 수도 있다. CU 의 루마 잔차 블록에서의 각각의 샘플은 CU 의 예측 루마 블록들 중의 하나에서의 루마 샘플과, CU 의 원래의 루마 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시한다. 게다가, 비디오 인코더 (20) 는 CU 에 대한 Cb 잔차 블록을 생성할 수도 있다. CU 의 Cb 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cb 블록들 중의 하나에서의 Cb 샘플과, CU 의 원래의 Cb 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다. 비디오 인코더 (20) 는 또한, CU 에 대한 Cr 잔차 블록을 생성할 수도 있다. CU 의 Cr 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cr 블록들 중의 하나에서의 Cr 샘플과, CU 의 원래의 Cr 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다.
또한, 비디오 인코더 (20) 는 CU 의 잔차 블록들 (예컨대, 루마, Cb 및 Cr 잔차 블록들) 을 하나 이상의 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 로 분해하기 위하여 쿼드-트리 파티셔닝 (quad-tree partitioning) 을 이용할 수도 있다. 변환 블록은 동일한 변환이 적용되는 샘플들의 직사각형 블록일 수도 있다. CU 의 변환 유닛 (TU) 은 루마 샘플들의 변환 블록, 크로마 샘플들의 2 개의 대응하는 변환 블록들, 및 변환 블록 샘플들을 변환하기 위하여 이용된 신택스 구조들일 수도 있다. 이에 따라, CU 의 각각의 TU 는 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록과 연관될 수도 있다. TU 와 연관된 루마 변환 블록은 CU 의 루마 잔차 블록의 서브-블록 (sub-block) 일 수도 있다. Cb 변환 블록은 CU 의 Cb 잔차 블록의 서브-블록일 수도 있다. Cr 변환 블록은 CU 의 Cr 잔차 블록의 서브-블록일 수도 있다.
비디오 인코더 (20) 는 TU 에 대한 계수 블록 (coefficient block) 을 생성하기 위하여 하나 이상의 변환들을 변환 블록에 적용할 수도 있다. 계수 블록은 변환 계수들의 2 차원 어레이일 수도 있다. 변환 계수는 스칼라량 (scalar quantity) 일 수도 있다. 예를 들어, 비디오 인코더 (20) 는 TU 에 대한 루마 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 루마 변환 블록에 적용할 수도 있다. 비디오 인코더 (20) 는 TU 에 대한 Cb 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 Cb 변환 블록에 적용할 수도 있다. 비디오 인코더 (20) 는 TU 에 대한 Cr 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 Cr 변환 블록에 적용할 수도 있다.
계수 블록 (예컨대, 루마 계수 블록, Cb 계수 블록, 또는 Cr 계수 블록) 을 생성한 후, 비디오 인코더 (20) 는 계수 블록을 양자화할 수도 있다. 양자화는 일반적으로, 변환 계수들을 나타내기 위하여 이용된 데이터의 양을 가능한 대로 감소시키기 위하여 변환 계수들이 양자화되어 추가의 압축을 제공하는 프로세스를 지칭한다. 비디오 인코더 (20) 가 계수 블록을 양자화한 후, 비디오 인코더 (20) 는 양자화된 변환 계수들을 표시하는 신택스 엘리먼트들을 엔트로피 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 양자화된 변환 계수들을 표시하는 신택스 엘리먼트들에 대해 컨텍스트-적응 2진 산술 코딩 (Context-Adaptive Binary Arithmetic Coding; CABAC) 을 수행할 수도 있다. 비디오 인코더 (20) 는 엔트로피-인코딩된 신택스 엘리먼트들을 비트스트림으로 출력할 수도 있다. 비트스트림은 또한, 엔트로피 인코딩되지 않은 신택스 엘리먼트들을 포함할 수도 있다.
비디오 인코더 (20) 는 엔트로피-인코딩된 신택스 엘리먼트들을 포함하는 비트스트림을 출력할 수도 있다. 비트스트림은 코딩된 픽처들 및 연관된 데이터의 표현을 형성하는 비트들의 시퀀스를 포함할 수도 있다. 비트스트림은 네트워크 추상화 계층 (network abstraction layer; NAL) 유닛들의 시퀀스를 포함할 수도 있다. NAL 유닛들의 각각은 NAL 유닛 헤더를 포함하고, 원시 바이트 시퀀스 페이로드 (raw byte sequence payload; RBSP) 를 캡슐화 (encapsulate) 한다. NAL 유닛 헤더는, NAL 유닛 타입 코드를 나타내는 신택스 엘리먼트를 포함할 수도 있다. NAL 유닛의 NAL 유닛 헤더에 의해 특정된 NAL 유닛 타입 코드는 NAL 유닛의 타입을 표시한다. RBSP 는 NAL 유닛 내에서 캡슐화되는 정수 개수의 바이트들을 포함하는 신택스 구조일 수도 있다. 일부 사례들에서, RBSP 는 제로 비트들을 포함한다.
상이한 타입들의 NAL 유닛들은 상이한 타입들의 RBSP 들을 캡슐화할 수도 있다. 예를 들어, 제 1 타입의 NAL 유닛은 픽처 파라미터 세트 (picture parameter set; PPS) 에 대한 RBSP 를 캡슐화할 수도 있고, 제 2 타입의 NAL 유닛은 코딩된 슬라이스에 대한 RBSP 를 캡슐화할 수도 있고, 제 3 타입의 NAL 유닛은 보충 강화 정보 (Supplemental Enhancement Information; SEI) 에 대한 RBSP 를 캡슐화할 수도 있는 등등과 같다. (파라미터 세트들 및 SEI 메시지들에 대한 RBSP 들과는 반대로) 비디오 코딩 데이터에 대한 RBSP 들을 캡슐화하는 NAL 유닛들은 비디오 코딩 계층 (video coding layer; VCL) NAL 유닛들로서 지칭될 수도 있다.
비디오 디코더 (30) 는 비디오 인코더 (20) 에 의해 생성된 비트스트림을 수신할 수도 있다. 게다가, 비디오 디코더 (30) 는 비트스트림으로부터 신택스 엘리먼트들을 획득할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 비트스트림으로부터 신택스 엘리먼트들을 디코딩하기 위하여 비트스트림을 파싱 (parse) 할 수도 있다. 비디오 디코더 (30) 는 비트스트림으로부터 획득된 (예컨대, 디코딩된) 신택스 엘리먼트들에 적어도 부분적으로 기초하여 비디오 데이터의 픽처들을 재구성할 수도 있다. 비디오 데이터를 재구성하기 위한 프로세스는 일반적으로, 비디오 인코더 (20) 에 의해 수행된 프로세스와 상반적일 수도 있다. 예를 들어, 비디오 디코더 (30) 는 현재의 CU 의 PU 들에 대한 인터-예측 샘플 블록들 (예컨대, 인터-예측 블록들) 을 결정하기 위하여 PU 들의 MV 들을 이용할 수도 있다. 게다가, 비디오 디코더 (30) 는 현재의 CU 의 TU 들과 연관된 변환 계수 블록들을 역양자화할 수도 있다. 비디오 디코더 (30) 는 현재의 CU 의 TU 들과 연관된 변환 블록들을 재구성하기 위하여 변환 계수 블록들에 대해 역변환들을 수행할 수도 있다. 비디오 디코더 (30) 는 현재의 CU 의 PU 들에 대한 예측 샘플 블록들의 샘플들을 현재의 CU 의 TU 들의 변환 블록들의 대응하는 샘플들에 추가함으로써, 현재의 CU 의 코딩 블록들을 재구성할 수도 있다. 픽처의 각각의 CU 에 대한 코딩 블록들을 재구성함으로써, 비디오 디코더 (30) 는 픽처를 재구성할 수도 있다.
일부 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. 예를 들어, 팔레트 기반 코딩에서는, 위에서 설명된 인트라-예측 또는 인터-예측 코딩 기법들을 수행하는 것이 아니라, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 특정 구역 (예컨대, 소정의 블록) 의 비디오 데이터를 나타내는 컬러들 또는 픽셀 값들의 표로서, 소위 팔레트를 코딩할 수도 있다. 이러한 방법으로, 비디오 데이터의 현재의 블록에 대한 실제적인 픽셀 값들 또는 그 잔차들을 코딩하는 것이 아니라, 비디오 코더는 현재의 블록의 픽셀들 값들 중의 하나 이상에 대한 인덱스 값들을 코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록의 픽셀 값들을 나타내기 위하여 이용되는 팔레트에서의 엔트리들을 표시한다 (예컨대, 인덱스는 Y, Cr, 및 Cb 값들의 세트, 또는 R, G, 및 B 값들의 세트에 맵핑할 수도 있다).
예를 들어, 비디오 인코더 (20) 는, 블록에 대한 팔레트를 결정하고, 블록의 하나 이상의 개별적인 픽셀들의 값을 나타내는 값을 가지는 팔레트에서의 엔트리를 위치시키고, 블록의 하나 이상의 개별적인 픽셀 값들을 나타내기 위하여 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩함으로써, 비디오 데이터의 블록을 인코딩할 수도 있다. 추가적으로, 비디오 인코더 (20) 는 인코딩된 비트스트림으로 인덱스 값들을 시그널링할 수도 있다. 결국, 비디오 디코딩 디바이스 (예컨대, 비디오 디코더 (30)) 는 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라, 팔레트를 이용하여 블록의 다양한 개별적인 픽셀들을 결정하기 위하여 이용된 인덱스 값들을 획득할 수도 있다. 비디오 디코더 (30) 는 블록의 픽셀 값들을 재구성하기 위하여 개별적인 픽셀들의 인덱스 값들을 팔레트의 엔트리들과 일치시킬 수도 있다. 개별적인 픽셀의 픽셀 값이 블록에 대한 대응하는 팔레트에 의해 표현된 픽셀 값들 중의 임의의 것에 충분히 근접하지 않는 사례들에서, 비디오 디코더 (30) 는 팔레트-기반 코딩의 목적들을 위하여, 이러한 개별적인 픽셀을 이스케이프 픽셀 (escape pixel) 로서 식별할 수도 있다. 이스케이프 픽셀의 픽셀 값은 팔레트 인덱스를 통하는 것이 아니라, 명시적으로 인코딩될 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 다음의 동작들에 따라 비디오 데이터의 블록을 인코딩할 수도 있다. 비디오 인코더 (20) 는 블록의 개별적인 픽셀들에 대한 예측 잔차 값들을 결정할 수도 있고, 블록에 대한 팔레트를 결정할 수도 있고, 개별적인 픽셀들의 예측 잔차 값들 중의 하나 이상의 예측 잔차 값의 값을 나타내는 값을 가지는 팔레트에서의 엔트리 (예컨대, 인덱스 값) 를 위치시킬 수도 있다. 추가적으로, 비디오 인코더 (20) 는 블록의 각각의 개별적인 픽셀에 대한 대응하는 예측 잔차 값을 나타내기 위하여 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩할 수도 있다. 비디오 디코더 (30) 는 소스 디바이스 (12) 에 의해 시그널링된 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라, 블록의 개별적인 픽셀들에 대응하는 예측 잔차 값들에 대한 인덱스 값들을 획득할 수도 있다. 설명된 바와 같이, 인덱스 값들은 현재의 블록과 연관된 팔레트에서의 엔트리들에 대응할 수도 있다. 결국, 비디오 디코더 (30) 는 블록의 예측 잔차 값들을 재구성하기 위하여, 예측 잔차 값들의 인덱스 값들을 팔레트의 엔트리들에 관련시킬 수도 있다. 예측 잔차 값들은 블록의 픽셀 값들을 재구성하기 위하여 (예를 들어, 인트라 또는 인터 예측을 이용하여 획득된) 예측 값들에 추가될 수도 있다.
이하에서 더욱 상세하게 설명된 바와 같이, 팔레트-기반 코딩의 기본적인 사상은, 코딩되어야 할 비디오 데이터의 소정의 블록에 대하여, 비디오 인코더 (20) 가 현재의 블록에서 가장 지배적인 픽셀 값들을 포함하는 팔레트를 유도할 수도 있다는 것이다. 예를 들어, 팔레트는 현재의 CU 에 대하여 지배적 및/또는 대표적인 것으로 결정되거나 가정되는 다수의 픽셀 값들을 지칭할 수도 있다. 비디오 인코더 (20) 는 먼저, 팔레트의 크기 및 엘리먼트들을 비디오 디코더 (30) 로 송신할 수도 있다. 추가적으로, 비디오 인코더 (20) 는 어떤 스캔 순서에 따라 소정의 블록에서의 픽셀 값들을 인코딩할 수도 있다. 소정의 블록 내에 포함된 각각의 픽셀에 대하여, 비디오 인코더 (20) 는 픽셀 값을 팔레트에서의 대응하는 엔트리에 맵핑하는 인덱스 값을 시그널링할 수도 있다. 픽셀 값이 팔레트 엔트리들 중의 임의의 것의 값에 충분히 근접 (예컨대, 일부 미리 결정된 임계치와 비교된 값에 충분히 근접) 하지 않을 경우, 이러한 픽셀은 "이스케이프 픽셀" 로서 정의된다. 팔레트-기반 코딩에 따르면, 비디오 인코더 (20) 는 즉, 그것이 이스케이프 픽셀이고 팔레트에서의 엔트리가 있는 픽셀이 아니라는 것을 표시하기 위하여, 이스케이프 픽셀에 대하여 예약되는 인덱스 값을 인코딩할 수도 있고 시그널링할 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 또한, 소정의 블록 내에 포함된 이스케이프 픽셀에 대한 픽셀 값 또는 잔차 값 (또는 그 양자화된 버전들) 을 인코딩할 수도 있고 시그널링할 수도 있다.
비디오 인코더 (20) 에 의해 시그널링된 인코딩된 비디오 비트스트림을 수신할 시에, 비디오 디코더 (30) 는 먼저, 비디오 인코더 (20) 로부터 수신된 정보에 기초하여 팔레트를 결정할 수도 있다. 다음으로, 비디오 디코더 (30) 는 소정의 블록의 픽셀 값들을 재구성하기 위하여, 소정의 블록에서의 픽셀 로케이션들과 연관된 수신된 인덱스 값들을 팔레트의 엔트리들로 맵핑할 수도 있다. 일부 사례들에서, 비디오 디코더 (30) 는 예컨대, 픽셀이 이스케이프 픽셀들에 대하여 예약된 인덱스 값으로 팔레트-코딩되는 것으로 결정함으로써, 팔레트-코딩된 블록의 픽셀이 이스케이프 픽셀인 것으로 결정할 수도 있다. 비디오 디코더 (30) 가 팔레트-코딩된 블록에서 이스케이프 픽셀을 식별하는 사례들에서, 비디오 디코더 (30) 는 소정의 블록 내에 포함된 이스케이프 픽셀에 대한 픽셀 값 또는 잔차 값 (또는 그 양자화된 버전들) 을 수신할 수도 있다. 비디오 디코더 (30) 는 개별적인 픽셀 값들을 대응하는 팔레트 엔트리들에 맵핑함으로써, 그리고 팔레트-코딩된 블록 내에 포함된 임의의 이스케이프 픽셀들을 재구성하기 위하여 픽셀 값 또는 잔차 값 (또는 그 양자화된 버전들) 을 이용함으로써 팔레트-코딩된 블록을 재구성할 수도 있다.
비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 이하에서 더욱 상세하게 설명되는 바와 같이, 이 개시물에서 설명된 기법들에 따라 동작하도록 구성될 수도 있다. 일반적으로, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 하나 이상의 팔레트 코딩 모드들을 이용하여 비디오 데이터를 인코딩하고 디코딩하도록 구성될 수도 있고, 여기서, 팔레트 코딩 모드들은 팔레트 공유 모드를 포함하지 않는다. 이 개시물의 기법들은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 1 신택스 엘리먼트의 최초의 빈 (bin) 을 결정하도록 구성되는, 비디오 인코더 (20) 와 같은 비디오 코딩 디바이스를 포함한다. 비디오 인코더 (20) 는 비트스트림을 인코딩하도록 추가로 구성될 수도 있다. 비트스트림은 제 1 신택스 엘리먼트를 포함할 수도 있다. 비트스트림은 또한, 팔레트 공유 모드를 표시하는 제 2 신택스 엘리먼트를 포함하지 않을 수도 있다. 일부 예들에서, 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것은 컨텍스트-적응 2진 산술 코딩을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것을 포함한다. 다른 예들에서, 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것은 하나 이상의 컨텍스트들을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것을 포함한다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
또한, 이 개시물은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 구성되는 비디오 인코더 (20) 를 설명한다. 비디오 인코더 (20) 는 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 비디오 인코더 (20) 는 비트스트림에서 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하는 것으로서, 여기서, 제 1 신택스 엘리먼트는 런 타입 (run type) 을 표시하는, 상기 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하고, 비트스트림의 나머지를 인코딩하도록 추가로 구성될 수도 있다.
또한, 이 개시물의 기법들은 최대 허용된 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 1 신택스 엘리먼트를 결정하도록 구성되는 비디오 인코더 (20) 를 포함한다. 비디오 인코더 (20) 는 또한, 제 1 신택스 엘리먼트를 포함하는 비트스트림을 인코딩하도록 구성될 수도 있다. 일부 예들에서, 비트스트림은 최대 예측자 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 2 신택스 엘리먼트를 더 포함한다. 일부 예들에서, 제 1 신택스 엘리먼트는 4096 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8192 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 4095 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8191 의 최대 값을 가진다. 또 다른 예들에서, 제 1 신택스 엘리먼트는 최대 코딩 유닛에서의 픽셀들의 수와 동일한 최대 값을 가지고, 제 2 신택스 엘리먼트는 제 1 신택스 엘리먼트의 최대 값에 의해 승산된, 2 와 같은 양의 상수와 동일한 최대 값을 가진다. 다른 예들에서, 비트스트림은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 또 다른 신택스 엘리먼트를 포함한다. 이것의 일부 예들에서, 이 신택스 엘리먼트는 골롬 라이스 코드 (Golomb Rice code), 지수 골롬 코드 (Exponential Golomb code), 절단 라이스 코드 (Truncated Rice code), 또는 1진 코드 (Unary code) 중의 하나에 의해 표현된다. 이것의 다른 예들에서, 이 신택스 엘리먼트는 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드, 또는 팔레트 인덱스가 현재의 픽셀 상부의 행 (row) 에서의 팔레트 인덱스로부터 복사되거나 인코딩된 비트스트림에서 명시적으로 복사되는지 여부를 표시하는 인코딩된 비트스트림 내에 포함된 제 3 신택스 엘리먼트를 코딩하기 위하여 또한 이용되는 코드 중의 하나에 의해 표현된다. 일부 예들에서, 이 신택스 엘리먼트는 절단된 라이스 모드에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 비디오 데이터의 현재의 블록에서의 픽셀들의 수와 동일한 최대 값을 가진다.
또한, 이 개시물은 인코딩된 비트스트림을 수신하도록 구성되는, 비디오 디코더 (30) 와 같은 비디오 코딩 디바이스를 설명한다. 인코딩된 비트스트림은 팔레트 공유 모드를 표시하는 제 1 신택스 엘리먼트를 포함하지 않는다. 또한, 인코딩된 비트스트림은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 2 신택스 엘리먼트를 포함한다. 비디오 디코더 (30) 는 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하도록 추가로 구성될 수도 있다. 일부 예들에서, 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것은 컨텍스트-적응 2진 산술 코딩 엘리먼트를 이용하여 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것을 포함한다. 다른 예들에서, 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것은 하나 이상의 컨텍스트들을 이용하여 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것을 포함한다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
또한, 이 개시물의 기법들은 인코딩된 비트스트림을 수신하도록 구성되는 비디오 디코더 (30) 를 포함한다. 인코딩된 비트스트림은 런 타입을 표시하는 제 1 신택스 엘리먼트를 포함할 수도 있다. 비디오 디코더 (30) 는 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 추가로 구성될 수도 있다. 비디오 디코더 (30) 는 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 비디오 디코더 (30) 는 제 1 신택스 엘리먼트를 디코딩하는 것을 우회할 수도 있다.
또한, 이 개시물의 기법들은 최대 허용된 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 1 신택스 엘리먼트를 포함하는 인코딩된 비트스트림을 수신하도록 구성되는 비디오 디코더 (30) 를 포함한다. 비디오 디코더 (30) 는 인코딩된 비트스트림을 디코딩하도록 추가로 구성될 수도 있다. 일부 예들에서, 인코딩된 비트스트림은 최대 예측자 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 2 신택스 엘리먼트를 더 포함한다. 일부 예들에서, 제 1 신택스 엘리먼트는 4096 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8192 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 4095 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8191 의 최대 값을 가진다. 또 다른 예들에서, 제 1 신택스 엘리먼트는 최대 코딩 유닛에서의 픽셀들의 수와 동일한 최대 값을 가지고, 제 2 신택스 엘리먼트는 제 1 신택스 엘리먼트의 최대 값에 의해 승산된, 2 와 같은 양의 상수와 동일한 최대 값을 가진다. 다른 예들에서, 인코딩된 비트스트림은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 또 다른 신택스 엘리먼트를 포함한다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 골롬 라이스 코드, 지수 골롬 코드, 절단 라이스 코드, 또는 1진 코드 중의 하나에 의해 표현된다. 다른 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드, 또는 팔레트 인덱스가 현재의 픽셀 상부의 행에서의 팔레트 인덱스로부터 복사되거나 인코딩된 비트스트림에서 명시적으로 코딩되는지 여부를 표시하는 신택스 엘리먼트를 코딩하기 위하여 이용되는 동일한 코드 중의 하나에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 절단 라이스 모드에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 비디오 데이터의 현재의 블록에서의 픽셀들의 수와 동일한 최대 값을 가진다.
개시물의 또 다른 예에서, 비디오 디코더 (30) 는 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 것으로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 수신하고, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하고, 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하고, 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하도록 구성될 수도 있다.
개시물의 또 다른 예에서, 비디오 인코더 (20) 는 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하고, 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하고, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하고, 인코딩된 비디오 비트스트림에서 복수의 신택스 엘리먼트들을 포함하도록 구성될 수도 있다.
도 2 는 이 개시물의 다양한 기법들을 구현할 수도 있는 일 예의 비디오 인코더 (20) 를 예시하는 블록도이다. 도 2 는 설명의 목적들을 위하여 제공되고, 이 개시물에서 대략적으로 예시되고 설명된 바와 같은 기법들의 제한으로 고려되지 않아야 한다. 설명의 목적들을 위하여, 이 개시물은 HEVC 코딩의 맥락에서 비디오 인코더 (20) 를 설명한다. 그러나, 이 개시물의 기법들은 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
도 2 의 예에서, 비디오 인코더 (20) 는 비디오 데이터 메모리 (98), 예측 프로세싱 유닛 (100), 잔차 생성 유닛 (102), 변환 프로세싱 유닛 (104), 양자화 유닛 (106), 역양자화 유닛 (108), 역변환 프로세싱 유닛 (110), 재구성 유닛 (112), 필터 유닛 (114), 디코딩된 픽처 버퍼 (116), 및 엔트로피 인코딩 유닛 (118) 을 포함한다. 예측 프로세싱 유닛 (100) 은 인터-예측 프로세싱 유닛 (120) 및 인트라-예측 프로세싱 유닛 (126) 을 포함한다. 인터-예측 프로세싱 유닛 (120) 은 모션 추정 유닛 및 모션 보상 유닛 (도시되지 않음) 을 포함한다. 비디오 인코더 (20) 는 또한, 이 개시물에서 설명된 팔레트-기반 코딩 기법들의 다양한 양태들을 수행하도록 구성된 팔레트-기반 인코딩 유닛 (122) 을 포함한다. 다른 예들에서, 비디오 인코더 (20) 는 더 많거나, 더 적거나, 또는 상이한 구조적 컴포넌트들을 포함할 수도 있다.
비디오 데이터 메모리 (98) 는 비디오 인코더 (20) 의 컴포넌트들에 의해 인코딩되어야 할 비디오 데이터를 저장할 수도 있다. 비디오 데이터 메모리 (98) 내에 저장된 비디오 데이터는 예를 들어, 도 1 의 비디오 소스 (18) 로부터 획득될 수도 있다. 디코딩된 픽처 버퍼 (116) 는 예컨대, 인트라-코딩 또는 인터-코딩 모드들에서 비디오 인코더 (20) 에 의해 비디오 데이터를 인코딩함에 있어서 이용하기 위한 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (98) 및 디코딩된 픽처 버퍼 (116) 는 동기식 DRAM (synchronous DRAM; SDRAM) 을 포함하는 동적 랜덤 액세스 메모리 (dynamic random access memory; DRAM), 자기저항 RAM (magnetoresistive RAM; MRAM), 저항 RAM (resistive RAM; RRAM), 또는 다른 타입들의 메모리 디바이스들과 같은 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수도 있다. 비디오 데이터 메모리 (98) 및 디코딩된 픽처 버퍼 (116) 는 동일한 메모리 디바이스 또는 별도의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (98) 는 비디오 인코더 (20) 의 다른 컴포넌트들과 함께 온-칩 (on-chip) 일 수도 있거나, 그 컴포넌트들에 대하여 오프-칩 (off-chip) 일 수도 있다.
비디오 인코더 (20) 는 비디오 데이터를 수신할 수도 있다. 비디오 인코더 (20) 는 비디오 데이터의 픽처의 슬라이스에서의 각각의 CTU 를 인코딩할 수도 있다. CTU 들의 각각은 동일한 크기의 루마 코딩 트리 블록 (coding tree block; CTB) 들 및 픽처의 대응하는 CTB 들과 연관될 수도 있다. CTU 를 인코딩하는 것의 일부로서, 예측 프로세싱 유닛 (100) 은 CTU 의 CTB 들을 점진적으로 더 작은 블록들로 분할하기 위하여 쿼드-트리 파티셔닝 (quad-tree partitioning) 을 수행할 수도 있다. 더 작은 블록은 CU 들의 코딩 블록들일 수도 있다. 예를 들어, 예측 프로세싱 유닛 (100) 은 CTU 와 연관된 CTB 를 4 개의 동일한 크기의 서브-블록들로 파티셔닝할 수도 있고, 서브-블록들 중의 하나 이상을 4 개의 동일한 크기의 서브-서브-블록 (sub-sub-block) 들로 파티셔닝할 수도 있는 등등과 같다.
비디오 인코더 (20) 는 CTU 의 CU 들을 인코딩하여 CU 들의 인코딩된 표현들 (예컨대, 코딩된 CU 들) 을 생성할 수도 있다. CU 를 인코딩하는 것의 일부로서, 예측 프로세싱 유닛 (100) 은 CU 의 하나 이상의 PU 들 중에서 CU 와 연관된 코딩 블록들을 파티셔닝할 수도 있다. 이에 따라, 각각의 PU 는 루마 예측 블록 및 대응하는 크로마 예측 블록들과 연관될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 다양한 크기들을 가지는 PU 들을 지원할 수도 있다. 위에서 표시된 바와 같이, CU 의 크기는 CU 의 루마 코딩 블록의 크기를 지칭할 수도 있고, PU 의 크기는 PU 의 루마 예측 블록의 크기를 지칭할 수도 있다. 특정한 CU 의 크기가 2Nx2N 인 것으로 가정하면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 인트라 예측을 위한 2Nx2N 또는 NxN 의 PU 크기들과, 인터 예측을 위한 2Nx2N, 2NxN, Nx2N, NxN, 또는 유사한 것의 대칭적인 PU 크기들을 지원할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 또한, 인터 예측을 위한 2NxnU, 2NxnD, nLx2N, 및 nRx2N 의 PU 크기들에 대한 비대칭적인 파티셔닝을 지원할 수도 있다.
인터-예측 프로세싱 유닛 (120) 은 CU 의 각각의 PU 에 대해 인터 예측을 수행함으로써 PU 에 대한 예측 데이터를 생성할 수도 있다. PU 에 대한 예측 데이터는 PU 의 하나 이상의 예측 샘플 블록들 및 PU 에 대한 모션 정보를 포함할 수도 있다. 인터-예측 프로세싱 유닛 (120) 은 PU 가 I 슬라이스, P 슬라이스, 또는 B 슬라이스에 있는지 여부에 따라 CU 의 PU 에 대한 상이한 동작들을 수행할 수도 있다. I 슬라이스에서는, 모든 PU 들이 인트라 예측된다. 이 때문에, PU 가 I 슬라이스에 있을 경우, 인터-예측 프로세싱 유닛 (120) 은 PU 에 대한 인터 예측을 수행하지 않는다. 이에 따라, I-모드에서 인코딩된 블록들에 대하여, 예측 블록은 동일한 프레임 내에서의 이전에 인코딩된 이웃하는 블록들로부터의 공간적 예측을 이용하여 형성된다.
PU 가 P 슬라이스 내에 있을 경우, 인터-예측 프로세싱 유닛 (120) 의 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 참조 픽처들의 리스트 (예컨대, "RefPicList0") 에서 참조 픽처들을 검색할 수도 있다. PU 에 대한 참조 영역은, 참조 픽처 내에서, PU 의 샘플 블록들에 가장 근접하게 대응하는 샘플 블록들을 포함하는 영역일 수도 있다. 모션 추정 유닛은 PU 에 대한 참조 영역을 포함하는 참조 픽처의 RefPicList0 에서의 위치를 표시하는 참조 인덱스를 생성할 수도 있다. 게다가, 모션 추정 유닛은 PU 의 코딩 블록과, 참조 영역과 연관된 참조 로케이션과의 사이의 공간적 변위를 표시하는 MV 를 생성할 수도 있다. 예를 들어, MV 는 현재의 디코딩된 픽처에서의 좌표들로부터 참조 픽처에서의 좌표들까지의 오프셋을 제공하는 2 차원 벡터일 수도 있다. 모션 추정 유닛은 참조 인덱스 및 모션 벡터 (MV) 를 PU 의 모션 정보로서 출력할 수도 있다. 인터-예측 프로세싱 유닛 (120) 의 모션 보상 유닛은 PU 의 MV 에 의해 표시된 참조 로케이션에서의 실제적인 또는 보간된 샘플들에 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
PU 가 B 슬라이스 내에 있을 경우, 모션 추정 유닛은 PU 에 대한 단방향-예측 또는 양방향-예측을 수행할 수도 있다. PU 에 대한 단방향-예측을 수행하기 위하여, 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 RefPicList0 또는 제 2 참조 픽처 리스트 ("RefPicList1") 의 참조 픽처들을 검색할 수도 있다. 모션 추정 유닛은 PU 의 모션 정보로서, 참조 영역을 포함하는 참조 픽처의 RefPicList0 또는 RefPicList1 에서의 위치를 표시하는 참조 인덱스, PU 의 샘플 블록과, 참조 영역과 연관된 참조 로케이션과의 사이의 공간적 변위를 표시하는 MV, 및 참조 픽처가 RefPicList0 또는 RefPicList1 에 있는지 여부를 표시하는 하나 이상의 예측 방향 표시자들을 출력할 수도 있다. 인터-예측 프로세싱 유닛 (120) 의 모션 보상 유닛은 PU 의 모션 벡터에 의해 표시된 참조 영역에서의 실제적인 (즉, 정수 정밀도) 또는 보간된 (즉, 분수 정밀도) 샘플들에 적어도 부분적으로 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
PU 에 대한 양방향 인터 예측을 수행하기 위하여, 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 RefPicList0 에서의 참조 픽처들을 검색할 수도 있고, 또한, PU 에 대한 또 다른 참조 영역을 위하여 RefPicList1 에서의 참조 픽처들을 검색할 수도 있다. 모션 추정 유닛은 참조 영역들을 포함하는 참조 픽처들의 RefPicList0 및 RefPicList1 에서의 위치들을 표시하는 참조 픽처 인덱스들을 생성할 수도 있다. 게다가, 모션 추정 유닛은 참조 영역들과 연관된 참조 로케이션과, PU 의 샘플 블록과의 사이의 공간적 변위들을 표시하는 MV 들을 생성할 수도 있다. PU 의 모션 정보는 참조 인덱스들 및 PU 의 MV들을 포함할 수도 있다. 모션 보상 유닛은 PU 의 모션 벡터에 의해 표시된 참조 영역에서의 실제적인 또는 보간된 샘플들에 적어도 부분적으로 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
이 개시물의 다양한 예들에 따르면, 비디오 인코더 (20) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. HEVC 프레임워크에 대하여, 일 예로서, 팔레트-기반 코딩 기법들은 CU 모드로서 이용되도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 HEVC 의 프레임워크에서 PU 모드로서 이용되도록 구성될 수도 있다. 따라서, CU 모드의 맥락에서 본원에서 (이 개시물의 전반에 걸쳐) 설명되는 개시된 프로세스들 전부는 추가적으로 또는 대안적으로, PU 모드에 적용할 수도 있다. 그러나, 이 HEVC-기반 예들은 본원에서 설명된 팔레트-기반 코딩 기법들의 한정 또는 제한으로 간주되지 않아야 하는데, 이것은 이러한 기법들이 독립적으로, 또는 다른 현존하는 또는 아직 개발되어야 할 시스템들/표준들의 일부로서 작동하도록 적용될 수도 있기 때문이다. 이 경우들에는, 팔레트 코딩을 위한 유닛이 정사각형 블록들, 직사각형 블록들, 또는 심지어 비-직사각형 형상의 영역들일 수 있다.
팔레트-기반 인코딩 유닛 (122) 은 예를 들어, 팔레트-기반 인코딩 모드가 예컨대, CU 또는 PU 에 대하여 선택될 때에 팔레트-기반 코딩을 수행할 수도 있다. 예를 들어, 팔레트-기반 인코딩 유닛 (122) 은, 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하고, 비디오 데이터의 블록의 적어도 일부의 위치들의 픽셀 값들을 나타내기 위하여 팔레트에서 픽셀 값들을 선택하고, 비디오 데이터의 블록의 위치들 중의 적어도 일부를, 선택된 픽셀 값들에 각각 대응하는 팔레트에서의 엔트리들과 연관시키는 정보를 시그널링하도록 구성될 수도 있다. 다양한 기능들이 팔레트-기반 인코딩 유닛 (122) 에 의해 수행되는 것으로서 설명되지만, 이러한 기능들의 일부 또는 전부는 다른 프로세싱 유닛들, 또는 상이한 프로세싱 유닛들의 조합에 의해 수행될 수도 있다.
팔레트-기반 인코딩 유닛 (122) 은 팔레트-기반 코딩에 관련된 본원에서 설명된 다양한 신택스 엘리먼트들 중의 임의의 것을 생성하도록 구성될 수도 있다. 따라서, 비디오 인코더 (20) 는 본 개시에서 설명된 것과 같은 팔레트-기반 코드 모드들을 이용하여 비디오 데이터의 블록들을 인코딩하도록 구성될 수도 있다. 비디오 인코더 (20) 는 선택적으로, 팔레트 코딩 모드를 이용하여 비디오 데이터의 블록을 인코딩할 수도 있거나, 또는 예컨대, HEVC 인터-예측 또는 인트라-예측 코딩 모드와 같은 상이한 모드를 이용하여 비디오 데이터의 블록을 인코딩할 수도 있다. 비디오 데이터의 블록은 예를 들어, HEVC 코딩 프로세스에 따라 생성된 CU 또는 PU 일 수도 있다. 비디오 인코더 (20) 는 인터-예측 시간적 예측 또는 인트라-예측 공간적 코딩 모드들로 일부의 블록들을 인코딩할 수도 있고, 팔레트-기반 코딩 모드로 다른 블록들을 디코딩할 수도 있다.
인트라-예측 프로세싱 유닛 (126) 은 PU 에 대해 인트라 예측을 수행함으로써 PU 에 대한 예측 데이터를 생성할 수도 있다. PU 에 대한 예측 데이터는 PU 에 대한 예측 샘플 블록들 및 다양한 신택스 엘리먼트들을 포함할 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 I 슬라이스들, P 슬라이스들, 및 B 슬라이스들에서의 PU 들에 대해 인트라 예측을 수행할 수도 있다.
PU 에 대해 인트라 예측을 수행하기 위하여, 인트라-예측 프로세싱 유닛 (126) 은 PU 에 대한 예측 데이터의 다수의 세트들을 생성하기 위하여 다수의 인트라 예측 모드들을 이용할 수도 있다. PU 에 대한 예측 데이터의 세트를 생성하기 위하여 일부의 인트라 예측 모드들을 이용할 때, 인트라-예측 프로세싱 유닛 (126) 은 인트라 예측 모드들과 연관된 방향들로 PU 의 예측 블록들에 걸쳐 이웃하는 PU 들의 샘플 블록들로부터 샘플들의 값들을 확장할 수도 있다. PU 들, CU 들, 및 CTU 들에 대하여 좌측에서 우측, 상부에서 하부의 인코딩 순서를 가정하면, 이웃하는 PU 들은 PU 의 상부, 상부 및 우측, 상부 및 좌측, 또는 좌측에 있을 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 다수의 상이한 인트라 예측 모드들, 예컨대, 33 개의 방향성 인트라 예측 모드 (directional intra prediction mode) 들 중의 임의의 것을 이용할 수도 있다. 일부 예들에서, 인트라 예측 모드들의 수는 PU 와 연관된 영역의 크기에 종속될 수도 있다.
예측 프로세싱 유닛 (100) 은 PU 들에 대한 인터-예측 프로세싱 유닛 (120) 에 의해 생성된 예측 데이터, 또는 PU 들에 대한 인트라-예측 프로세싱 유닛 (126) 에 의해 생성된 예측 데이터 중으로부터 CU 의 PU 들에 대한 예측 데이터를 선택할 수도 있다. 일부 예들에서, 예측 프로세싱 유닛 (100) 은 예측 데이터의 세트들의 레이트/왜곡 메트릭 (metric) 들에 기초하여 CU 의 PU 들에 대한 예측 데이터를 선택한다. 선택된 예측 데이터의 예측 샘플 블록들은 선택된 예측 샘플 블록들로서 본원에서 지칭될 수도 있다.
잔차 생성 유닛 (102) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb, 및 Cr 코딩 블록들) 과, CU 의 PU 들의 선택된 예측 샘플 블록들 (예컨대, 예측 루마, Cb, 및 Cr 블록들) 에 기초하여, CU 의 잔차 블록들 (예컨대, 루마, Cb, 및 Cr 잔차 블록들) 을 생성할 수도 있다. 예를 들어, 잔차 생성 유닛 (102) 은, 잔차 블록들에서의 각각의 샘플이 CU 의 코딩 블록에서의 샘플과, CU 의 PU 의 대응하는 선택된 예측 샘플 블록에서의 대응하는 샘플과의 사이의 차이와 동일한 값을 가지도록, CU 의 잔차 블록들을 생성할 수도 있다.
변환 프로세싱 유닛 (104) 은 CU 와 연관된 잔차 블록들을 CU 의 TU 들과 연관된 변환 블록들로 파티셔닝하기 위하여 쿼드-트리 파티셔닝을 수행할 수도 있다. 이에 따라, 일부 예들에서, TU 는 루마 변환 블록 및 2 개의 크로마 변환 블록들과 연관될 수도 있다. CU 의 TU들의 루마 및 크로마 변환 블록들의 크기들 및 위치들은 CU 의 PU들의 예측 블록들의 크기들 및 위치들에 기초할 수도 있거나 기초하지 않을 수도 있다. "잔차 쿼드 트리 (residual quad-tree)" (RQT) 로서 알려진 쿼드-트리 구조는 영역들의 각각과 연관된 노드들을 포함할 수도 있다. CU 의 TU 들은 RQT 의 리프 노드 (leaf node) 들에 대응할 수도 있다.
변환 프로세싱 유닛 (104) 은 하나 이상의 변환들을 TU 의 변환 블록들에 적용함으로써 CU 의 각각의 TU 에 대한 변환 계수 블록들을 생성할 수도 있다. 변환 프로세싱 유닛 (104) 은 다양한 변환들을 TU 와 연관된 변환 블록에 적용할 수도 있다. 예를 들어, 변환 프로세싱 유닛 (104) 은 이산 코사인 변환 (discrete cosine transform; DCT), 방향성 변환, 또는 개념적으로 유사한 변환을 변환 블록에 적용할 수도 있다. 일부 예들에서, 변환 프로세싱 유닛 (104) 은 변환들을 변환 블록에 적용하지 않는다. 이러한 예들에서는, 변환 블록이 변환 계수 블록으로서 취급될 수도 있다.
양자화 유닛 (106) 은 계수 블록에서의 변환 계수들을 양자화할 수도 있다. 양자화 프로세스는 변환 계수들의 일부 또는 전부와 연관된 비트 심도 (bit depth) 를 감소시킬 수도 있다. 예를 들어, n-비트 변환 계수는 양자화 동안에 m-비트 변환 계수로 버림 (round down) 될 수도 있고, 여기서, nm 보다 더 크다. 양자화 유닛 (106) 은 CU 와 연관된 양자화 파라미터 (QP) 값에 기초하여 CU 의 TU 와 연관된 계수 블록을 양자화할 수도 있다. 비디오 인코더 (20) 는 CU 와 연관된 QP 값을 조절함으로써, CU 와 연관된 계수 블록들에 적용된 양자화도를 조절할 수도 있다. 양자화는 정보의 손실을 도입할 수도 있고, 이에 따라, 양자화된 변환 계수들은 원래의 것들보다 더 낮은 정밀도를 가질 수도 있다.
역양자화 유닛 (108) 및 역변환 프로세싱 유닛 (110) 은 계수 블록으로부터 잔차 블록을 재구성하기 위하여, 역양자화 및 역변환들을 계수 블록에 각각 적용할 수도 있다. 재구성 유닛 (112) 은 TU 와 연관된 재구성된 변환 블록을 생성하기 위하여, 재구성된 잔차 블록을, 예측 프로세싱 유닛 (100) 에 의해 생성된 하나 이상의 예측 샘플 블록들로부터의 대응하는 샘플들에 추가할 수도 있다. 이러한 방식으로 CU 의 각각의 TU 에 대한 변환 블록들을 재구성함으로써, 비디오 인코더 (20) 는 CU 의 코딩 블록들을 재구성할 수도 있다.
필터 유닛 (114) 은 하나 이상의 디블록킹 (deblocking) 동작들을 수행하여, CU 와 연관된 코딩 블록들에서의 블록킹 아티팩트들을 감소시킬 수도 있다. 필터 유닛 (114) 이 재구성된 코딩 블록들에 대해 하나 이상의 디블록킹 동작들을 수행한 후, 디코딩된 픽처 버퍼 (116) 는 재구성된 코딩 블록들을 저장할 수도 있다. 인터-예측 프로세싱 유닛 (120) 은 다른 픽처들의 PU 들에 대해 인터 예측을 수행하기 위하여, 재구성된 코딩 블록들을 포함하는 참조 픽처를 이용할 수도 있다. 게다가, 인트라-예측 프로세싱 유닛 (126) 은 CU 와 동일한 픽처에서의 다른 PU 들에 대해 인트라 예측을 수행하기 위하여, 디코딩된 픽처 버퍼 (116) 에서의 재구성된 코딩 블록들을 이용할 수도 있다.
엔트로피 인코딩 유닛 (118) 은 비디오 인코더 (20) 의 다른 기능적 컴포넌트들로부터 데이터를 수신할 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 양자화 유닛 (106) 으로부터 계수 블록들을 수신할 수도 있고, 예측 프로세싱 유닛 (100) 으로부터 신택스 엘리먼트들을 수신할 수도 있다. 엔트로피 인코딩 유닛 (118) 은 엔트로피-인코딩된 데이터를 생성하기 위하여, 데이터에 대해 하나 이상의 엔트로피 인코딩 동작들을 수행할 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 데이터에 대하여, CABAC 동작, 컨텍스트-적응 가변 길이 코딩 (context-adaptive variable length coding; CAVLC) 동작, 가변-대-가변 (variable-to-variable; V2V) 길이 코딩 동작, 신택스-기반 컨텍스트-적응 2진 산술 코딩 (syntax-based context-adaptive binary arithmetic coding; SBAC) 동작, 확률 간격 파티셔닝 엔트로피 (Probability Interval Partitioning Entropy; PIPE) 코딩 동작, 지수-골롬 (Exponential-Golomb) 인코딩 동작, 또는 또 다른 타입의 엔트로피 인코딩 동작을 수행할 수도 있다. 비디오 인코더 (20) 는 엔트로피 인코딩 유닛 (118) 에 의해 생성된 엔트로피-인코딩된 데이터를 포함하는 비트스트림을 출력할 수도 있다. 예를 들어, 비트스트림은 CU 에 대한 RQT 를 나타내는 데이터를 포함할 수도 있다.
일부 예들에서, 잔차 코딩은 팔레트 코딩과 함께 수행되지 않는다. 따라서, 비디오 인코더 (20) 는 팔레트 코딩 모드를 이용하여 코딩될 때에 변환 또는 양자화를 수행하지 않을 수도 있다. 게다가, 비디오 인코더 (20) 는 잔차 데이터와는 별도로 팔레트 코딩 모드를 이용하여 생성된 데이터를 엔트로피 인코딩할 수도 있다.
이 개시물의 기법들 중의 하나 이상에 따르면, 비디오 인코더 (20), 그리고 구체적으로 팔레트-기반 인코딩 유닛 (122) 은 예측된 비디오 블록들의 팔레트-기반 비디오 코딩을 수행할 수도 있다. 위에서 설명된 바와 같이, 비디오 인코더 (20) 에 의해 생성된 팔레트는 명시적으로 인코딩될 수도 있으며 비디오 디코더 (30) 로 전송될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 그 조합일 수도 있다.
이 개시물의 하나 이상의 기법들에 따르면, 팔레트-기반 인코딩 유닛 (122) 은 하나 이상의 팔레트 코딩 모드들을 이용하여 비디오 데이터를 인코딩하기 위하여, 샘플 값 대 인덱스 변환을 수행하기 위한 이 개시물의 기법들을 적용할 수도 있고, 여기서, 팔레트 코딩 모드들은 팔레트 공유 모드를 포함하지 않는다. 이 개시물의 기법들은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 1 신택스 엘리먼트의 최초의 빈을 결정하도록 구성되는 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 을 포함한다. 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은 비트스트림을 인코딩하도록 추가로 구성될 수도 있다. 비트스트림은 제 1 신택스 엘리먼트를 포함할 수도 있다. 비트스트림은 또한, 팔레트 공유 모드를 표시하는 제 2 신택스 엘리먼트를 포함하지 않을 수도 있다. 일부 예들에서, 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것은 컨텍스트-적응 2진 산술 코딩을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것을 포함한다. 다른 예들에서, 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것은 하나 이상의 컨텍스트들을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 결정하는 것을 포함한다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
또한, 이 개시물의 기법들은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 구성되는 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 을 포함한다. 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은 비트스트림에서 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하는 것으로서, 여기서, 제 1 신택스 엘리먼트는 런 타입을 표시하는, 상기 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하고, 비트스트림의 나머지를 인코딩하도록 추가로 구성될 수도 있다.
또한, 이 개시물의 기법들은 최대 허용된 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 1 신택스 엘리먼트를 결정하도록 구성되는 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 을 포함한다. 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은 또한, 제 1 신택스 엘리먼트를 포함하는 비트스트림을 인코딩하도록 구성될 수도 있다. 일부 예들에서, 비트스트림은 최대 예측자 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 2 신택스 엘리먼트를 더 포함한다. 일부 예들에서, 제 1 신택스 엘리먼트는 4096 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8192 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 4095 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8191 의 최대 값을 가진다. 또 다른 예들에서, 제 1 신택스 엘리먼트는 최대 코딩 유닛에서의 픽셀들의 수와 동일한 최대 값을 가지고, 제 2 신택스 엘리먼트는 제 1 신택스 엘리먼트의 최대 값에 의해 승산된, 2 와 같은 양의 상수와 동일한 최대 값을 가진다. 다른 예들에서, 비트스트림은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 또 다른 신택스 엘리먼트를 포함한다. 이것의 일부 예들에서, 이 신택스 엘리먼트는 골롬 라이스 코드, 지수 골롬 코드, 절단 라이스 코드, 또는 1진 코드 중의 하나에 의해 표현된다. 이것의 다른 예들에서, 이 신택스 엘리먼트는 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드, 또는 팔레트 인덱스가 현재의 픽셀 상부의 행에서의 팔레트 인덱스로부터 복사되거나 인코딩된 비트스트림에서 명시적으로 복사되는지 여부를 표시하는 인코딩된 비트스트림 내에 포함된 제 3 신택스 엘리먼트를 코딩하기 위하여 또한 이용되는 코드 중의 하나에 의해 표현된다. 일부 예들에서, 이 신택스 엘리먼트는 절단된 라이스 모드에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 비디오 데이터의 현재의 블록에서의 픽셀들의 수와 동일한 최대 값을 가진다.
도 3 은 이 개시물의 기법들을 구현하도록 구성되는 일 예의 비디오 디코더 (30) 를 예시하는 블록도이다. 비디오 디코더 (30) 는 도 2 를 참조하여 설명된 비디오 인코더 (20) 의 그것과 상반되는 방식으로 동작할 수도 있다. 도 3 은 설명의 목적들을 위하여 제공되고, 이 개시물에서 대략 예시되고 설명된 바와 같은 기법들에 대해 제한하지 않는다. 설명의 목적들을 위하여, 이 개시물은 HEVC 코딩의 맥락에서 비디오 디코더 (30) 를 설명한다. 그러나, 이 개시물의 기법들은 팔레트 모드 코딩이 이용되는 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
도 3 의 예에서, 비디오 디코더 (30) 는 비디오 데이터 메모리 (148), 엔트로피 디코딩 유닛 (150), 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 재구성 유닛 (158), 필터 유닛 (160), 및 디코딩된 픽처 버퍼 (162) 를 포함한다. 예측 프로세싱 유닛 (152) 은 모션 보상 유닛 (164) 및 인트라-예측 프로세싱 유닛 (166) 을 포함한다. 비디오 디코더 (30) 는 또한, 이 개시물에서 설명된 팔레트-기반 코딩 기법들의 다양한 양태들을 수행하도록 구성된 팔레트-기반 디코딩 유닛 (165) 을 포함한다. 다른 예들에서, 비디오 디코더 (30) 는 더 많거나, 더 적거나, 또는 상이한 구조적 컴포넌트들을 포함할 수도 있다.
비디오 데이터 메모리 (148) 는 비디오 디코더 (30) 의 컴포넌트들에 의해 디코딩되어야 할, 인코딩된 비디오 비트스트림과 같은 비디오 데이터를 저장할 수도 있다. 비디오 데이터 메모리 (148) 내에 저장된 비디오 데이터는 예를 들어, 채널 (16) 로부터, 예컨대, 카메라와 같은 로컬 비디오 소스로부터, 비디오 데이터의 유선 또는 무선 네트워크 통신을 통해, 또는 물리적 데이터 저장 매체들을 액세스함으로써 획득될 수도 있다. 비디오 데이터 메모리 (148) 는 인코딩된 비디오 비트스트림으로부터의 인코딩된 비디오 데이터를 저장하는 코딩된 픽처 버퍼 (coded picture buffer; CPB) 를 형성할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 예컨대, 인트라-코딩 또는 인터-코딩 모드들에서 비디오 디코더 (30) 에 의해 비디오 데이터를 디코딩함에 있어서 이용하기 위한 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (148) 및 디코딩된 픽처 버퍼 (162) 는 동기식 DRAM (SDRAM) 을 포함하는 동적 랜덤 액세스 메모리 (DRAM), 자기저항 RAM (MRAM), 저항 RAM (RRAM), 또는 다른 타입들의 메모리 디바이스들과 같은 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수도 있다. 비디오 데이터 메모리 (148) 및 디코딩된 픽처 버퍼 (162) 는 동일한 메모리 디바이스 또는 별도의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (148) 는 비디오 디코더 (30) 의 다른 컴포넌트들과 함께 온-칩일 수도 있거나, 그러한 컴포넌트들에 대하여 오프-칩일 수도 있다.
비디오 데이터 메모리 (148), 예컨대, CPB 는 비트스트림의 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 를 수신할 수도 있고 저장할 수도 있다. 엔트로피 디코딩 유닛 (150) 은 비디오 데이터 메모리 (148) 로부터 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 를 수신할 수도 있고, 신택스 엘리먼트들을 디코딩하기 위하여 NAL 유닛들을 파싱할 수도 있다. 엔트로피 디코딩 유닛 (160) 은 NAL 유닛들에서의 엔트로피-인코딩된 신택스 엘리먼트들을 엔트로피 디코딩할 수도 있다. 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 재구성 유닛 (158), 및 필터 유닛 (160) 은 비트스트림으로부터 획득된 (예컨대, 추출된) 신택스 엘리먼트들에 기초하여 디코딩된 비디오 데이터를 생성할 수도 있다.
비트스트림의 NAL 유닛들은 코딩된 슬라이스 NAL 유닛들을 포함할 수도 있다. 비트스트림을 디코딩하는 것의 일부로서, 엔트로피 디코딩 유닛 (150) 은 코딩된 슬라이스 NAL 유닛들로부터 신택스 엘리먼트들을 추출할 수도 있고 엔트로피 디코딩할 수도 있다. 코딩된 슬라이스들의 각각은 슬라이스 헤더 및 슬라이스 데이터를 포함할 수도 있다. 슬라이스 헤더는 슬라이스에 속하는 신택스 엘리먼트들을 포함할 수도 있다. 슬라이스 헤더에서의 신택스 엘리먼트들은 슬라이스를 포함하는 픽처와 연관된 PPS 를 식별하는 신택스 엘리먼트를 포함할 수도 있다.
비트스트림으로부터 신택스 엘리먼트들을 디코딩하는 것에 추가하여, 비디오 디코더 (30) 는 비-파티셔닝 (non-partitioned) CU 에 대해 재구성 동작을 수행할 수도 있다. 비-파티셔닝 CU 에 대해 재구성 동작을 수행하기 위하여, 비디오 디코더 (30) 는 CU 의 각각의 TU 에 대해 재구성 동작을 수행할 수도 있다. CU 의 각각의 TU 에 대해 재구성 동작을 수행함으로써, 비디오 디코더 (30) 는 CU 의 잔차 블록들을 재구성할 수도 있다.
CU 의 TU 에 대해 재구성 동작을 수행하는 것의 일부로서, 역양자화 유닛 (154) 은 TU 와 연관된 계수 블록들을 역양자화, 예컨대, 탈-양자화 (de-quantize) 할 수도 있다. 역양자화 유닛 (154) 은 TU 의 CU 와 연관된 QP 값을 이용하여, 양자화도 및 적용할 역양자화 유닛 (154) 에 대한 역양자화도를 결정할 수도 있다. 즉, 압축 비율, 예컨대, 원래의 시퀀스 및 압축된 시퀀스를 나타내기 위하여 이용된 비트들의 수의 비율은 변환 계수들을 양자화할 때에 이용된 QP 의 값을 조절함으로써 제어될 수도 있다. 압축 비율은 또한, 채용된 엔트로피 코딩의 방법에 종속될 수도 있다.
역양자화 유닛 (154) 이 계수 블록을 역양자화한 후, 역변환 프로세싱 유닛 (156) 은 TU 와 연관된 잔차 블록을 생성하기 위하여 하나 이상의 역변환들을 계수 블록에 적용할 수도 있다. 예를 들어, 역변환 프로세싱 유닛 (156) 은 역 DCT, 역정수 변환, 역 카루넨-루베 변환 (Karhunen-Loeve transform; KLT), 역회전 변환, 역방향성 변환, 또는 또 다른 역변환을 계수 블록에 적용할 수도 있다.
PU 가 인트라 예측을 이용하여 인코딩될 경우, 인트라-예측 프로세싱 유닛 (166) 은 PU 에 대한 예측 블록들을 생성하기 위하여 인트라 예측을 수행할 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 공간적으로 이웃하는 PU 들의 예측 블록들에 기초하여 PU 에 대한 예측 루마, Cb, 및 Cr 블록들을 생성하기 위하여 인트라-예측 모드를 이용할 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 비트스트림으로부터 디코딩된 하나 이상의 신택스 엘리먼트들에 기초하여 PU 에 대한 인트라 예측 모드를 결정할 수도 있다.
예측 프로세싱 유닛 (152) 은 비트스트림으로부터 추출된 신택스 엘리먼트들에 기초하여 제 1 참조 픽처 리스트 (RefPicList0) 및 제 2 참조 픽처 리스트 (RefPicList1) 를 구성할 수도 있다. 또한, PU 가 인터 예측을 이용하여 인코딩될 경우, 엔트로피 디코딩 유닛 (150) 은 PU 에 대한 모션 정보를 추출할 수도 있다. 모션 보상 유닛 (164) 은 PU 의 모션 정보에 기초하여, PU 에 대한 하나 이상의 참조 영역들을 결정할 수도 있다. 모션 보상 유닛 (164) 은 PU 에 대한 하나 이상의 참조 블록들에서의 샘플들 블록들에 기초하여, PU 에 대한 예측 블록들 (예컨대, 예측 루마, Cb, 및 Cr 블록들) 을 생성할 수도 있다.
재구성 유닛 (158) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb, 및 Cr 코딩 블록들) 을 재구성하기 위하여, CU 의 TU 들과 연관된 변환 블록들 (예컨대, 루마, Cb, 및 Cr 변환 블록들) 및 CU 의 PU 들의 예측 블록들 (예컨대, 루마, Cb, 및 Cr 블록들), 예컨대, 적용 가능하다면, 인트라-예측 데이터 또는 인터-예측 데이터의 어느 하나를 이용할 수도 있다. 예를 들어, 재구성 유닛 (158) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb, 및 Cr 코딩 블록들) 을 재구성하기 위하여, 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 의 샘플들을 예측 블록들 (예컨대, 예측 루마, Cb, 및 Cr 블록들) 의 대응하는 샘플들에 추가할 수도 있다.
필터 유닛 (160) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb, 및 Cr 코딩 블록들) 과 연관된 블록킹 아티팩트들을 감소시키기 위하여 디블록킹 동작을 수행할 수도 있다. 비디오 디코더 (30) 는 CU 의 코딩 블록들 (예컨대, 루마, Cb, 및 Cr 코딩 블록들) 을 디코딩된 픽처 버퍼 (162) 내에 저장할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 후속 모션 보상, 인트라 예측, 및 도 1 의 디스플레이 디바이스 (32) 와 같은 디스플레이 디바이스 상에서의 제시를 위하여 참조 픽처들을 제공할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 디코딩된 픽처 버퍼 (162) 에서의 블록들 (예컨대, 루마, Cb, 및 Cr 블록들) 에 기초하여, 다른 CU 들의 PU 들에 대해 인트라 예측 또는 인터 예측 동작들을 수행할 수도 있다. 이러한 방식으로, 비디오 디코더 (30) 는 비트스트림으로부터, 중요한 계수 블록의 변환 계수 레벨들을 추출할 수도 있고, 변환 계수 레벨들을 역양자화할 수도 있고, 변환 블록을 생성하기 위하여 변환을 변환 계수 레벨들에 적용할 수도 있고, 변환 블록에 적어도 부분적으로 기초하여, 코딩 블록을 생성할 수도 있고, 디스플레이를 위하여 코딩 블록을 출력할 수도 있다.
이 개시물의 다양한 예들에 따르면, 비디오 디코더 (30) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 예를 들어, 팔레트-기반 디코딩 모드가 예컨대, CU 또는 PU 에 대하여 선택될 때에 팔레트-기반 디코딩을 수행할 수도 있다. 예를 들어, 팔레트-기반 디코딩 유닛 (165) 은 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하도록 구성될 수도 있다. 또한, 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 비디오 데이터의 블록의 적어도 일부의 위치들을 팔레트에서의 엔트리들과 연관시키는 정보를 수신할 수도 있다. 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 정보에 기초하여 팔레트에서의 픽셀 값들을 선택할 수도 있다. 추가적으로, 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 선택된 픽셀 값들에 기초하여 블록의 픽셀 값들을 재구성할 수도 있다. 다양한 기능들이 팔레트-기반 디코딩 유닛 (165) 에 의해 수행되는 것으로서 설명되지만, 이러한 기능들의 일부 또는 전부는 다른 프로세싱 유닛들, 또는 상이한 프로세싱 유닛들의 조합에 의해 수행될 수도 있다.
이 개시물의 하나 이상의 기법들에 따르면, 팔레트-기반 디코딩 유닛 (165) 은 팔레트 코딩 모드 정보를 수신할 수도 있고, 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되는 것을 표시할 때에 상기 동작들을 수행할 수도 있다. 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되지 않는 것을 표시할 때, 또는 다른 모드 정보가 상이한 모드의 이용을 표시할 때, 팔레트-기반 디코딩 유닛 (165) 은 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되지 않는 것을 표시할 때에 예컨대, HEVC 인터-예측 또는 인트라-예측 코딩 모드와 같은 비-팔레트 기반 코딩 모드를 이용하여 비디오 데이터의 블록을 디코딩한다. 비디오 데이터의 블록은 예를 들어, HEVC 코딩 프로세스에 따라 생성된 CU 또는 PU 일 수도 있다. 비디오 디코더 (30) 는 인터-예측 시간적 예측 또는 인트라-예측 공간적 코딩 모드들로 일부의 블록들을 디코딩할 수도 있고, 팔레트-기반 코딩 모드로 다른 블록들을 디코딩할 수도 있다. 팔레트-기반 코딩 모드는 복수의 상이한 팔레트-기반 코딩 모드들 중의 하나를 포함할 수도 있거나, 단일 팔레트-기반 코딩 모드가 있을 수도 있다.
이 개시물의 기법들 중의 하나 이상에 따르면, 비디오 디코더 (30), 그리고 구체적으로 팔레트-기반 디코딩 유닛 (165) 은 팔레트-코딩된 비디오 블록들의 팔레트-기반 비디오 디코딩을 수행할 수도 있다. 위에서 설명된 바와 같이, 비디오 디코더 (30) 에 의해 디코딩된 팔레트는 비디오 인코더 (20) 에 의해 명시적으로 인코딩될 수도 있고 시그널링될 수도 있거나, 수신된 팔레트-코딩된 블록에 대하여 비디오 디코더 (30) 에 의해 재구성될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 또는 그 조합일 수도 있다.
팔레트-기반 디코딩 유닛 (165) 은 하나 이상의 팔레트 코딩 모드들을 이용하여 비디오 데이터를 디코딩하기 위하여, 샘플 값 대 인덱스 변환을 수행하기 위한 이 개시물의 기법들을 적용할 수도 있고, 여기서, 팔레트 코딩 모드들은 팔레트 공유 모드를 포함하지 않는다. 또한, 이 개시물의 기법들은 인코딩된 비트스트림을 수신하도록 구성되는 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 을 포함한다. 이 예에서, 인코딩된 비트스트림은 팔레트 공유 모드를 표시하는 제 1 신택스 엘리먼트를 포함하지 않는다. 또한, 인코딩된 비트스트림은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 2 신택스 엘리먼트를 포함한다. 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하도록 추가로 구성될 수도 있다. 일부 예들에서, 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것은 컨텍스트-적응 2진 산술 코딩 (CABAC) 유닛을 이용하여 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것을 포함한다. 다른 예들에서, 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것은 하나 이상의 컨텍스트들을 이용하여 제 2 신택스 엘리먼트의 최초의 빈을 디코딩하는 것을 포함한다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
또한, 이 개시물의 기법들은 인코딩된 비트스트림을 수신하도록 구성되는 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 을 포함한다. 인코딩된 비트스트림은 런 타입을 표시하는 제 1 신택스 엘리먼트를 포함할 수도 있다. 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 추가로 구성될 수도 있다. 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 제 1 신택스 엘리먼트를 디코딩하는 것을 우회할 수도 있다.
또한, 이 개시물의 기법들은 최대 허용된 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 1 신택스 엘리먼트를 포함하는 인코딩된 비트스트림을 수신하도록 구성되는 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 을 포함한다. 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 비트스트림을 디코딩하도록 추가로 구성될 수도 있다. 일부 예들에서, 인코딩된 비트스트림은 최대 예측자 팔레트 크기를 표시하고 제로의 최소 값을 가지는 제 2 신택스 엘리먼트를 더 포함한다. 일부 예들에서, 제 1 신택스 엘리먼트는 4096 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8192 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 4095 의 최대 값을 가진다. 다른 예들에서, 제 1 신택스 엘리먼트는 4095 의 최대 값을 가지고, 제 2 신택스 엘리먼트는 8191 의 최대 값을 가진다. 또 다른 예들에서, 제 1 신택스 엘리먼트는 최대 코딩 유닛에서의 픽셀들의 수와 동일한 최대 값을 가지고, 제 2 신택스 엘리먼트는 제 1 신택스 엘리먼트의 최대 값에 의해 승산된, 2 와 같은 양의 상수와 동일한 최대 값을 가진다. 다른 예들에서, 인코딩된 비트스트림은 또 다른 신택스 엘리먼트, 예컨대, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 3 신택스 엘리먼트를 포함한다. 이 개시물의 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 골롬 라이스 코드, 지수 골롬 코드, 절단 라이스 코드, 또는 1진 코드 중의 하나에 의해 표현된다. 이 개시물의 다른 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드, 또는 팔레트 인덱스가 현재의 픽셀 상부의 행에서의 팔레트 인덱스로부터 복사되거나 인코딩된 비트스트림에서 명시적으로 코딩되는지 여부를 표시하는 인코딩된 비트스트림 내에 포함된 제 3 신택스 엘리먼트를 코딩하기 위하여 또한 이용되는 코드 중의 하나에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 절단 라이스 모드에 의해 표현된다. 일부 예들에서, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트는 비디오 데이터의 현재의 블록에서의 픽셀들의 수와 동일한 최대 값을 가진다.
예에 따라서는, 본원에서 설명된 기법들 중의 임의의 것의 어떤 액트 (act) 들 또는 이벤트 (event) 들이 상이한 시퀀스에서 수행될 수 있거나, 추가될 수도 있거나, 병합될 수도 있거나, 또는 모두 배제 (예를 들어, 모든 설명된 액트들 또는 이벤트들이 기법들의 실시를 위해 필요한 것은 아님) 될 수도 있다는 것이 인식되어야 한다. 또한, 어떤 예들에서는, 액트들 또는 이벤트들이 순차적인 것이 아니라, 예컨대, 멀티-스레딩된 (multi-threaded) 프로세싱, 인터럽트 프로세싱, 또는 다수의 프로세서들을 통해 동시에 수행될 수도 있다. 게다가, 이 개시물의 어떤 양태들은 명료함의 목적들을 위하여 단일 모듈 또는 유닛에 의해 수행되는 것으로 설명되지만, 이 개시물의 기법들은 비디오 코더와 연관된 유닛들 또는 모듈들의 조합에 의해 수행될 수도 있는 것이 이해되어야 한다.
이 개시물의 어떤 양태들은 예시의 목적들을 위하여 개발 중인 HEVC 표준에 대하여 설명되었다. 그러나, 이 개시물에서 설명된 기법들은 아직 개발되지 않은 다른 표준 또는 전용 비디오 코딩 프로세스들을 포함하는 다른 비디오 코딩 프로세스들에 대해 유용할 수도 있다.
위에서 설명된 기법들은 비디오 인코더 (20) (도 1 및 도 2) 및/또는 비디오 디코더 (30) (도 1 및 도 3) 에 의해 수행될 수도 있고, 이들 양자는 일반적으로 비디오 코더로서 지칭될 수도 있다. 마찬가지로, 비디오 코딩은 적용가능한 바와 같이, 비디오 인코딩 또는 비디오 디코딩을 지칭할 수도 있다.
일부 예들에서, 팔레트-기반 코딩 기법들은 HEVC 표준 또는 HEVC SCC 표준의 하나 이상의 코딩 모드들에서의 이용을 위하여 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 독립적으로, 또는 다른 현존하는 또는 미래의 시스템들 또는 표준들의 일부로서 이용될 수도 있다. 일부 예들에서, 비디오 데이터의 팔레트-기반 코딩을 위한 기법들은 비디오 데이터의 인터-예측 코딩 또는 인트라-예측 코딩을 위한 기법들과 같은 하나 이상의 다른 코딩 기법들과 함께 이용될 수도 있다. 예를 들어, 이하에서 더욱 상세하게 설명된 바와 같이, 인코더 또는 디코더, 또는 조합된 인코더-디코더 (코덱) 는 인터-예측 및 인트라-예측 코딩뿐만 아니라, 팔레트-기반 코딩을 수행하도록 구성될 수도 있다.
HEVC 프레임워크에 대하여, 예로서, 팔레트-기반 코딩 기법들은 코딩 유닛 (coding unit; CU) 모드로서 이용되도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 HEVC 의 프레임워크에서 예측 유닛 (prediction unit; PU) 모드로서 이용되도록 구성될 수도 있다. 따라서, CU 모드의 맥락에서 설명된 다음의 개시된 프로세스들의 전부는 추가적으로 또는 대안적으로, PU 에 적용할 수도 있다. 그러나, 이 HEVC-기반 예들은 본원에서 설명된 팔레트-기반 코딩 기법들의 한정 또는 제한으로 간주되지 않아야 하는데, 이것은 이러한 기법들이 독립적으로, 또는 다른 현존하는 또는 아직 개발되어야 할 시스템들/표준들의 일부로서 작동하도록 적용될 수도 있기 때문이다. 이 경우들에는, 팔레트 코딩을 위한 유닛이 정사각형 블록들, 직사각형 블록들, 또는 심지어 비-직사각형 형상의 영역들일 수 있다.
팔레트-기반 코딩의 기본적인 사상은 각각의 CU 에 대하여, 현재의 CU 에서 가장 지배적인 픽셀 값들을 포함하는 (그리고 이것으로 구성될 수도 있는) 팔레트가 유도된다는 것이다. 팔레트의 크기 및 엘리먼트들은 비디오 인코더로부터 비디오 디코더로 먼저 송신된다. 팔레트의 크기 및/또는 엘리먼트들은 이웃하는 CU 들 (예컨대, 상부 및/또는 좌측 코딩된 CU) 에서의 팔레트의 크기 및/또는 엘리먼트들을 이용하여 직접적으로 코딩될 수 있거나 예측적으로 코딩될 수 있다. 그 후에, CU 에서의 픽셀 값들은 어떤 스캔 순서에 따라 팔레트에 기초하여 인코딩된다. CU 에서의 각각의 픽셀 로케이션에 대하여, 플래그, 예컨대, palette_flag 는 픽셀 값이 팔레트 내에 포함되는지 여부를 표시하기 위하여 먼저 송신된다. 일부 예들에서, 이러한 플래그는 copy_above_palette_indices_flag 로 칭해진다. 팔레트에서의 엔트리에 맵핑하는 그 픽셀 값들에 대하여, 엔트리와 연관된 팔레트 인덱스는 CU 에서의 소정의 픽셀 로케이션에 대하여 시그널링된다. 팔레트에서 존재하지 않는 그 픽셀 값들에 대하여, 특수한 인덱스는 픽셀에 배정될 수도 있고, 실제적인 픽셀 값 (일부 경우들에는, 양자화된 픽셀 값) 은 CU 에서의 소정의 픽셀 로케이션에 대하여 송신된다. 이 픽셀들은 "이스케이프 픽셀들" 로서 지칭된다. 이스케이프 픽셀은 고정 길이 코딩, 1진 코딩 등과 같은 임의의 현존하는 엔트로피 코딩 방법을 이용하여 코딩될 수 있다.
다른 예들에서, 플래그는 픽셀이 "이스케이프" 픽셀인지 여부를 명시적으로 표시하기 위하여 이용되지 않는다. 그 대신에, 플래그 또는 다른 신택스 엘리먼트는 런 타입을 표시하기 위하여 이용될 수도 있다. 런 타입을 표시하는 신택스 엘리먼트는 다음의 인덱스들이 현재의 픽셀의 상부의 위치로부터 복사되는지 여부, 또는 시그널링된 인덱스 값들의 런이 있는지를 표시할 수도 있다. 특정한 픽셀의 유도된 인덱스 값이 "이스케이프 인덱스" (예컨대, 이스케이프 픽셀의 이용을 표시하는 팔레트에서의 미리 결정된 인덱스) 에 대응할 경우, 비디오 디코더 (30) 는 이러한 픽셀이 이스케이프 픽셀인 것으로 결정할 수도 있다.
스크린 컨텐츠 코딩 효율을 개선시키기 위하여, 팔레트 모드를 확장시키는 몇몇 방법들이 제안되었다. 예를 들어, 이러한 방법들은 JCTVC-S0114 (Kim, J. 등, "CE6-related: Enabling copy above mode prediction at the boundary of CU (CE6-관련: CU의 경계에서의 상부 복사 모드 예측을 가능하게 함)", ITU-T SG 16 WP 3 및 ISO/IEC JTC 1/SC 29/WG 11 의 비디오 코딩에 관한 합동 협력 팀 (Joint Collaborative Team on Video Coding; JCT-VC), 19 차 회의: Strasbourg, FR, 17-24 October 2014); JCTVC-S0120 (Ye, J. 등, "Non-CE6: Copy previous mode (비-CE6: 이전 복사 모드)", ITU-T SG 16 WP 3 및 ISO/IEC JTC 1/SC 29/WG 11 의 비디오 코딩에 관한 합동 협력 팀 (JCT-VC), 19 차 회의: Strasbourg, FR, 17-24 October 2014); 및 JCTVC-S0151 (Wang, W. 등, "Non-CE6: 2-D Index Map Coding of Palette Mode in HEVC SCC (비-CE6: HEVC SCC 에서의 팔레트 모드의 2-D 인덱스 맵 코딩)", ITU-T SG 16 WP 3 및 ISO/IEC JTC 1/SC 29/WG 11 의 비디오 코딩에 관한 합동 협력 팀 (JCT-VC), 19 차 회의: Strasbourg, FR, 17-24 October 2014) 에서 발견될 수도 있다.
문서 X. Guo 및 A. Saxena, "RCE4: Summary report of HEVC Range Extension Core Experiments 4 (RCE4) on palette coding for screen content (RCE4: 스크린 컨텐츠에 대한 팔레트 코딩에 관한 HEVC 범위 확장 코어 실험들 4 (RCE4) 의 개요 보고)", JCTVC-P0035, San Jose, US, 9-17 Jan. 2014 는 특히, 스크린 컨텐츠들에 대하여, 상당한 Bjontegaard 왜곡-레이트 (BD-레이트) 감소를 달성하는 것으로 보고되었던, 팔레트-기반 모드들의 2 개의 테스트 결과들을 설명한다. 2 개의 방법들은 이하에서 간단하게 요약된다.
설명된 바와 같은 하나의 예의 방법에서는, 예를 들어, 문서 X. Guo, Y. Lu, 및 S. Li, "RCE4: Test 1. Major-color-based screen content coding (RCE4: 테스트 1. 주-컬러-기반 스크린 컨텐츠 코딩)", JCTVC-P0108, San Jose, US, 9-17 Jan. 2014 에서, 히스토그램-기반 (histogram-based) 알고리즘은 픽셀들을 분류하기 위하여 이용된다. 특히, 히스토그램에서의 최상위 N 피크 값들은 코딩을 위한 주 컬러 (major color) 들로서 선택된다. 주 컬러에 근접한 픽셀 값들은 주 컬러로 양자화될 것이다. 임의의 주 컬러 세트들에 속하지 않는 다른 픽셀들은, 코딩하기 전에 또한 양자화되는 이스케이프 픽셀들이다. 무손실 코딩을 위하여, 양자화가 이용되지 않는다.
분류를 이용함으로써, 코딩 유닛 (CU) 의 픽셀들은 컬러 인덱스들로 변환될 수 있다. 그 후에, 주 컬러 수 및 값들은 코딩된다. 그 다음으로, 컬러 인덱스들은 다음과 같이 코딩된다:
● 각각의 픽셀 라인에 대하여, 플래그는 코딩 모드를 표시하기 위하여 시그널링된다. 3 개의 모드들: 수평 모드, 수직 모드, 및 정상 모드가 있다.
○ 모드가 수평 모드일 경우, 전체 라인 (즉, 전체 라인에서의 픽셀들의 전부) 은 동일한 컬러 인덱스를 공유한다. 이 경우, 컬러 인덱스가 송신된다.
○ 모드가 수직 모드일 경우, 전체 라인은 상부 라인과 동일하다. 이 경우, 어떤 것도 송신되지 않는다. 현재의 라인은 상부 라인의 컬러 인덱스들을 복사한다.
○ 모드가 정상 모드일 경우, 플래그는 그것이 좌측 및 상부 픽셀들 중의 하나와 동일한지 여부를 표시하기 위하여 각각의 픽셀 위치에 대하여 시그널링된다. 그렇지 않을 경우, 인덱스 자체가 송신된다.
게다가, 픽셀이 이스케이프 픽셀일 경우, 픽셀 값이 송신된다.
설명된 바와 같은 또 다른 예의 방법에서는, 예를 들어, 문서 L. Guo, W. Pu, M. Karczewicz, J. Sole, R. Joshi, 및 F. Zou, "RCE4: Results of Test 2 on Palette Mode for Screen Content Coding (RCE4: 스크린 컨텐츠 코딩을 위한 팔레트 모드에 관한 테스트 2 의 결과들)", JCTVC-P0198, San Jose, US, 9-17 Jan. 2014 에서, 팔레트-기반 코딩 모드는 CU 모드로서 포함된다. 제 2 방법의 인코딩 프로세스는 다음을 포함할 수도 있다:
● 팔레트의 송신: 엔트리별 예측 방식은 좌측 CU (좌측으로 현재 코딩되고 있는 CU 와 이웃하는 CU) 의 팔레트에 기초하여 현재의 팔레트를 인코딩하기 위하여 이용된다. 그 후에, 팔레트의 비-예측된 엔트리들이 송신된다.
● 픽셀 값들의 송신: CU 에서의 픽셀들은 다음의 3 개의 모드들을 이용하여 래스터 스캔 순서 (raster scan order) 에서 인코딩된다:
○ "런 모드": 팔레트 인덱스가 먼저 시그널링되고, 그 다음으로, "palette_run"(M)이 시그널링된다. 다음의 M 개의 팔레트 인덱스들은 먼저 시그널링된 시그널링된 팔레트 인덱스와 동일하다.
○ "상부 복사 모드": 값 "copy_run" (N) 은 다음의 N 개의 팔레트 인덱스들에 대하여, 그 상부 이웃들과 각각 동일하다는 것을 표시하기 위하여 송신된다.
○ "픽셀 모드": 예측 플래그가 먼저 송신된다. 1 과 동일한 플래그 값은 재구성된 상부 이웃하는 픽셀을 예측자로서 이용하는 예측 잔차가 송신된다는 것을 표시한다. 이 플래그의 값이 0 일 경우, 픽셀 값은 예측 없이 송신된다.
팔레트는 팔레트 코딩된 블록 (예컨대, CU) 에 대한 비트들의 상대적으로 중요한 부분을 구성할 수도 있다. 따라서, 비디오 코더는 (예컨대, "팔레트의 송신" 에 대하여 위에서 언급된 바와 같이) 이전에 코딩된 팔레트의 하나 이상의 엔트리들에 기초하여 팔레트의 하나 이상의 엔트리들을 예측할 수도 있다.
일부 예들에서, 비디오 코더는 팔레트 엔트리들을 예측할 때에 팔레트 예측자 리스트를 생성할 수도 있다. 예를 들어, 문서 C. Gisquet, G. Laroche, 및 P. Onno, "AhG10: Palette predictor stuffing (AhG10: 팔레트 예측자 스터핑)", JCTVC-Q0063 은 팔레트 예측자들을 결정하기 위한 하나의 예의 프로세스를 개시한다. 일부 예들에서, 비디오 코더는 팔레트 예측자 리스트에서의 각각의 항목이 현재 코딩되고 있는 블록에 대한 팔레트에서의 하나 이상의 엔트리들을 예측하기 위하여 이용되는지 (또는 이용되지 않는지) 여부를 표시하기 위하여 불리언 벡터 (Boolean vector) 를 이용할 수도 있다.
일부 예들에서, 팔레트 예측자 리스트에서의 항목들의 전부는 이전에-코딩된 팔레트 (예컨대, 이전에 코딩된 블록으로 코딩된 팔레트) 로부터 유도된다. 그러나, 이러한 팔레트들은 현재의 CU 로부터 공간적으로 멀리 떨어져 있을 수도 있고, 이것은 팔레트 상관을 상대적으로 약하게 할 수도 있다. 일반적으로, 팔레트 예측자 표를 확대하는 것은 도움이 될 수도 있다 (예컨대, 효율 이득으로 귀착될 수도 있는 더욱 정확한 예측자들을 제공할 수도 있음). 그러나, 상대적으로 큰 팔레트 예측자 표를 결정하고 이용하는 것은 상대적으로 더 긴 불리언 벡터로 귀착된다.
팔레트 코딩의 하나의 예에서, 비디오 인코더 (20) 는 팔레트-기반 코딩 모드가 비디오 프레임의 특정한 영역에 대하여 이용되는지 아닌지 여부를 표시하는, 플래그 "PLT_Mode_flag" 와 같은 신택스 엘리먼트를 생성할 수도 있다. 예를 들어, PLT_Mode_flag 는 슬라이스 레벨, CU-레벨, PU-레벨, 또는 비디오 프레임의 임의의 다른 레벨에서 생성될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 레벨에서 PLT_Mode_flag 를 생성할 수도 있고, 인코딩된 비디오 비트스트림으로 PLT_Mode_flag 를 시그널링할 수도 있다. 그 다음으로, 비디오 디코더 (30) 는 인코딩된 비디오 비트스트림을 디코딩할 시에 PLT_Mode_flag 를 파싱할 수도 있다. 이 예에서, 1 과 동일한 이 PLT_Mode_flag 의 값은 현재의 CU 가 팔레트 모드를 이용하여 인코딩된다는 것을 특정한다. 이 경우, 비디오 디코더 (30) 는 CU 를 디코딩하기 위하여 팔레트-기반 코딩 모드를 적용할 수도 있다. 일부 예들에서, 신택스 엘리먼트는 CU 에 대한 복수의 상이한 팔레트 모드들 중의 하나를 표시할 수도 있다.
0 과 동일한 이 PLT_Mode_flag 의 값은 현재의 CU 가 팔레트 모드 이외의 모드를 이용하여 인코딩된다는 것을 특정한다. 예를 들어, 다양한 인터-예측, 인트라-예측, 또는 다른 코딩 모드들 중의 임의의 것이 이용될 수도 있다. PLT_Mode_flag 의 값이 0 일 때, 추가의 정보는 어느 특정 모드가 개개의 CU 를 인코딩하기 위하여 이용되는지를 시그널링하기 위하여 송신될 수도 있고, 여기서, 이러한 특정 모드는 전형적으로, HEVC 코딩 모드 (예컨대, 인트라 코딩 또는 인터 코딩) 일 수도 있다. PLT_Mode_flag 의 이용은 예시의 목적들을 위하여 설명된다. 그러나, 다른 예들에서, 멀티-비트 코드들과 같은 다른 신택스 엘리먼트들은 팔레트-기반 코딩 모드가 CU (또는 다른 예들에서의 PU) 에 대하여 이용되어야 할 것인지 여부를 표시하거나, 또는 복수의 모드들 중의 어느 것이 이용되어야 할 것인지를 표시하기 위하여 이용될 수도 있다.
PLT_Mode_flag 또는 다른 신택스 엘리먼트는 또한, 더 높은 레벨에서 송신될 수도 있다. 예를 들어, PLT_Mode_flag 는 슬라이스 레벨에서 송신될 수도 있다. 이 경우, 1 과 동일한 플래그의 값은 슬라이스에서의 CU 들의 전부가 팔레트 모드를 이용하여 인코딩될 것이라는 것을 암시한다 (이것은 예컨대, 팔레트 모드 또는 다른 모드들에 대한 모드 정보가 CU 레벨에서 송신될 필요가 없다는 것을 의미함). 유사하게, 이 플래그는 픽처 파라미터 세트 (picture parameter set; PPS), 시퀀스 파라미터 세트 (sequence parameter set; SPS), 또는 비디오 파라미터 세트 (video parameter set; VPS) 레벨에서 시그널링될 수 있다. 또한, 플래그는 팔레트 모드가 특정한 픽처, 슬라이스 등에 대하여 인에이블되거나 디스에이블되는지 여부를 특정하는 이 레벨들 중의 하나에서 전송될 수 있는 반면, PLT_Mode_flag 는 팔레트-기반 코딩 모드가 각각의 CU 에 대하여 이용되는지 여부를 표시한다. 이 경우, 슬라이스, PPS, SPS 또는 VPS 레벨에서 전송된 플래그 또는 다른 신택스 엘리먼트가 팔레트 코딩 모드가 디스에이블되는 것을 표시할 경우, 일부 예들에서는, 각각의 CU 에 대하여 PLT_Mode_flag 를 시그널링할 필요성이 없을 수도 있다. 대안적으로, 슬라이스, PPS, SPS, 또는 VPS 레벨에서 전송된 플래그 또는 다른 신택스 엘리먼트가 팔레트 코딩 모드가 인에이블되는 것을 표시할 경우; PLT_Mode_flag 는 팔레트-기반 코딩 모드가 각각의 CU 에 대하여 이용되어야 할 것인지 여부를 표시하기 위하여 추가로 시그널링될 수도 있다. 다시, 위에서 언급된 바와 같이, CU 의 팔레트-기반 코딩을 표시하기 위한 이 기법들의 적용은 추가적으로 또는 대안적으로, PU 의 팔레트-기반 코딩을 표시하기 위하여 이용될 수 있다.
PLT_Mode_flag 와 같은 플래그는 또한, 또는 대안적으로, 조건적으로 송신될 수도 있거나 추론될 수도 있다. PLT_Mode_flag 를 송신하거나 플래그를 추론하기 위한 조건들은 예들로서, CU 의 크기, 프레임 타입, 컬러 공간, 컬러 컴포넌트, 프레임 크기, 프레임 레이트, 스케일러블 비디오 코딩에서의 계층 id, 또는 멀티-뷰 코딩에서의 뷰 id 중의 하나 이상일 수 있다.
팔레트의 생성 및 송신을 위한 기법들이 지금부터 논의될 것이다. 비디오 인코더 (20) 는 비디오 프레임 (예컨대, CU) 의 특정한 레벨을 인코딩하기 위하여 비디오 인코더 (20) 에 의해 이용된 팔레트를 구성하고 및/또는 재구성하기 위하여 비디오 디코더 (30) 에 의해 이용될 수도 있는 하나 이상의 신택스 엘리먼트들 및 값들을 생성하고 시그널링하도록 구성될 수도 있다. 일부 예들에서, 비디오 인코더 (20) 는 각각의 CU 에 대한 팔레트를 표시할 수도 있거나, 또는 그렇지 않을 경우에 시그널링할 수도 있다. 다른 예들에서, 비디오 인코더 (20) 는 몇몇 CU 들 사이에서 공유될 수도 있는 팔레트를 표시할 수도 있거나, 또는 그렇지 않을 경우에 시그널링할 수도 있다.
팔레트의 크기는, 예컨대, 포함된 픽셀 값들의 수의 측면에서, 고정된 값일 수 있거나, 인코딩된 비디오 비트스트림으로 비디오 인코더 (20) 에 의해 시그널링될 수 있다. 비디오 디코더 (30) 는 인코딩된 비디오 비트스트림으로부터 팔레트 크기의 표시를 수신할 수도 있고 이를 디코딩할 수도 있다. 시그널링은 상이한 컴포넌트들에 대하여 별도일 수 있거나, 단일 크기가 모든 컴포넌트들에 대하여 시그널링될 수 있다. 상이한 컴포넌트들은 예를 들어, 루마 (luma) 및 크로마 (chroma) 컴포넌트들일 수도 있다. 시그널링은 1진 코드들 또는 (예컨대, 팔레트 크기의 최대 한계에서 절단하는) 절단된 1진 코드들을 이용할 수 있다. 지수-골롬 또는 라이스-골롬 코드들이 또한 이용될 수 있다. 일부 예들에서, 크기의 시그널링은 다음의 방법으로 행해질 수 있다: 팔레트에서의 엔트리를 시그널링한 후에, "정지" 플래그가 시그널링된다. 1 과 동일한 이 플래그의 값은 현재의 엔트리가 팔레트에서 최후의 것이라는 것을 특정하고; 0 과 동일한 이 플래그의 값은 팔레트에서 더 많은 엔트리들이 있다는 것을 특정한다. "정지" 플래그는 이미 구성된 팔레트가 팔레트 크기의 최대 한계를 타격할 경우에 인코더에 의해 송신되지 않을 수도 있다. 일부 예들에서, 팔레트의 크기는 또한, "플래그 PLT_Mode_flag 의 송신" 에 대하여 위에서 설명된 것과 동일한 방법으로 부수적 정보에 기초하여 조건적으로 송신될 수 있거나 추론될 수 있다.
팔레트는 CU 에서의 각각의 컬러 컴포넌트에 대하여 별도로 송신될 수 있다. 예를 들어, 이 CU 의 Y 컴포넌트에 대한 팔레트, 이 CU 의 U 컴포넌트에 대한 또 다른 팔레트, 및 이 CU 의 V 컴포넌트에 대한 또 다른 팔레트가 있을 수도 있다. Y 팔레트에 대하여, 엔트리는 (아마) 이 CU 에서의 대표적인 Y 값일 수도 있다. 동일사항이 U 및 V 컴포넌트들에 적용된다. 팔레트가 CU 에서의 컬러 컴포넌트들의 전부에 대하여 송신될 수도 있다는 것이 또한 가능하다. 이 예에서, 팔레트에서의 i 번째 엔트리는 트리플 (triple) (Yi, Ui, Vi) 이다. 이 경우, 팔레트는 컴포넌트들의 각각에 대한 값들을 포함한다.
팔레트의 예측은 위에서 설명된 "팔레트의 송신" 에 대한 대안적인 접근법이다. 일부 예들에서, 팔레트 예측 기법들은 팔레트 시그널링 기법들과 함께 이용될 수도 있다. 즉, 비디오 인코더 (20) 는 팔레트 엔트리들의 총 수의 부분을 예측하기 위하여 비디오 디코더 (30) 에 의해 이용될 수도 있는 신택스 엘리먼트들을 시그널링하도록 구성될 수도 있다. 게다가, 비디오 인코더 (20) 는 팔레트 엔트리들의 또 다른 부분을 명시적으로 시그널링하도록 구성될 수도 있다.
팔레트 예측 접근법의 하나의 예에서는, 각각의 CU 에 대하여, 하나의 플래그 "pred_palette_flag" 가 송신된다. 1 과 동일한 이 플래그의 값은 현재의 CU 에 대한 팔레트가 과거의 데이터로부터 예측될 것이고 이에 따라, 팔레트가 송신될 필요성이 없다는 것을 특정한다. 0 과 동일한 이 플래그의 값은 현재의 CU 의 팔레트가 송신될 필요가 있다는 것을 의미한다. 플래그는 (예컨대, 3 개의 플래그들이 YUV 비디오에서의 CU 에 대하여 송신될 필요가 있도록) 상이한 컬러 컴포넌트들에 대하여 별도일 수 있거나, 단일 플래그가 모든 컬러 컴포넌트들에 대하여 시그널링될 수 있다. 예를 들어, 단일 플래그는 팔레트들이 컴포넌트들의 전부에 대하여 송신되는지 여부, 또는 컴포넌트들의 전부에 대한 팔레트들이 예측될 것인지 여부를 표시할 수도 있다.
일부 예들에서, 예측은 다음의 방식으로 수행될 수 있다. 예측 플래그 값이 1 과 동일할 경우, 현재의 CU 에 대하여, 비디오 인코더 (20) 는 이미 인코딩된 이웃하는 CU 들 중의 하나 이상의 CU 의 팔레트를 복사한다. 이미 인코딩된 이웃하는 CU 들의 팔레트는 송신되었을 수도 있거나 예측되었을 수도 있다. 예를 들어, 복사된 이웃하는 CU 는 좌측 이웃하는 CU 일 수 있다. (좌측 CU 가 팔레트 모드를 이용하여 인코딩되지 않거나 현재의 CU 가 픽처의 최초 열 (column) 에 있는 경우와 같이) 좌측 CU 의 팔레트가 이용가능하지 않은 경우에는, 팔레트의 복사가 현재의 CU 의 상부의 CU 로부터일 수 있다. 복사된 팔레트는 또한, 다수의 이웃하는 CU 들의 팔레트들의 조합일 수 있다. 예를 들어, 하나 이상의 공식들, 함수들, 규칙들 등등은 복수의 이웃하는 CU 들 중의 하나 또는 조합의 팔레트들에 기초하여 팔레트를 생성하기 위하여 적용될 수도 있다.
후보 리스트가 구성될 수도 있고 인덱스는 현재의 CU 가 팔레트를 그로부터 복사하는 후보 CU 를 표시하기 위하여 비디오 인코더 (20) 에 의해 송신되는 것이 또한 가능하다. 비디오 디코더 (30) 는 동일한 후보 리스트를 구성할 수도 있고, 그 다음으로, 현재의 CU 와의 이용을 위한 대응하는 CU 의 팔레트를 선택하기 위하여 인덱스를 이용할 수도 있다. 예를 들어, 후보 리스트는 슬라이스 또는 픽처 내의 코딩되어야 할 현재의 CU 에 대하여, 상부의 하나의 CU 및 좌측의 하나의 CU 를 포함할 수도 있다. 이 예에서, 플래그 또는 다른 신택스 엘리먼트는 후보 선택을 표시하기 위하여 시그널링될 수도 있다. 예를 들어, 0과 동일한 송신된 플래그는 복사가 좌측 CU 로부터인 것을 의미하고, 1 과 동일한 송신된 플래그는 복사가 상부 CU 로부터인 것을 의미한다. 비디오 디코더 (30) 는 대응하는 이웃 CU 로부터 복사되어야 할 팔레트를 선택하고, 현재의 CU 를 디코딩함에 있어서의 이용을 위하여 그것을 복사한다. 예측은 또한, 현재의 CU 의 인과적 이웃 (causal neighbor) 들에서의 가장 빈번한 샘플 값들을 이용하여 유도될 수 있다.
팔레트들의 예측은 또한 엔트리별 (entry-wise) 일 수 있다. 팔레트에서의 각각의 엔트리에 대하여, 비디오 인코더 (20) 는 플래그를 생성하고 이를 시그널링한다. 소정의 엔트리에 대한 1 과 동일한 플래그의 값은 예측된 값 (예를 들어, 좌측 CU 와 같은 선택된 후보 CU 로부터의 대응하는 엔트리) 이 이 엔트리의 값으로서 이용된다는 것을 특정한다. 0 과 동일한 플래그의 값은 이 엔트리가 예측되지 않고 그 값은 비디오 인코더 (20) 로부터 비디오 디코더 (30) 로 송신될 것이고, 예컨대, 비디오 디코더 (30) 에 의한 더 이후의 디코딩을 위하여 비디오 인코더 (20) 에 의해 인코딩된 비트스트림으로 시그널링될 것이라는 것을 특정한다.
"pred_palette_flag" 의 값, 그 팔레트가 현재의 CU 의 팔레트를 예측하기 위하여 이용되는 후보 CU, 또는 후보들을 구성하기 위한 규칙들은 또한, "플래그 PLT_Mode_flag 의 송신" 에 대하여 위에서 설명된 것과 동일한 방법으로 부수적 정보에 기초하여 조건적으로 송신될 수 있거나 추론될 수 있다.
다음으로, 비디오 인코더 (20) 는 어느 개개의 팔레트 엔트리가 CU 에서의 각각의 픽셀과 연관되는지를 표시하는 맵을 생성할 수도 있고 이를 시그널링할 수도 있다. 맵에서의 i 번째 엔트리는 CU 에서의 i 번째 위치에 대응하고 있다. 1 과 동일한 i 번째 엔트리의 값은, CU 에서의 이 i 번째 로케이션에서의 픽셀 값이 팔레트에서의 값들 중의 하나이고, 팔레트 인덱스는 비디오 디코더 (30) 가 픽셀 값을 재구성할 수 있도록 추가로 송신된다는 것 (팔레트에서 오직 하나의 엔트리가 있을 경우, 팔레트 인덱스의 송신이 스킵 (skip) 될 수도 있음) 을 특정한다. 0 과 동일한 i 번째 엔트리의 값은 CU 에서의 i 번째 위치에서의 픽셀 값이 팔레트에 있지 않고 이에 따라, 픽셀 값은 비디오 디코더 (30) 로 명시적으로 송신될 것이라는 것을 특정한다.
CU 에서의 하나의 위치에서의 픽셀 값이 팔레트에서의 값일 경우, CU 에서의 이웃하는 위치들이 동일한 픽셀 값을 가질 높은 확률이 있다는 것이 관찰된다. 따라서, 위치에 대한 팔레트 인덱스 (픽셀 값 s 에 대응하고 있는 j 라고 함) 를 인코딩한 후에, 비디오 인코더 (20) 는 스캔이 상이한 픽셀 값에 도달하기 전에, CU 에서의 동일한 픽셀 값 s 의 연속적 값들의 수를 표시하기 위하여 신택스 엘리먼트 "런" 을 송신할 수도 있다. 예를 들어, 바로 다음의 하나가 s 와는 상이한 값을 가질 경우, 런=0 이 송신된다. 다음의 하나가 s 이지만, 그 후의 하나가 s 가 아닐 경우, 런 = 1 이다.
런이 송신되지 않을 경우 (예컨대, 묵시적 런 유도), 런의 값은 상수, 예를 들어, 4, 8, 16 등일 수도 있거나, 런의 값은 또한, 부수적 정보에 종속적일 수도 있다. 예를 들어, 런의 값은 블록 크기에 종속될 수도 있고, 예컨대, 런은 현재의 블록의 폭, 또는 현재의 블록의 높이, 또는 현재의 블록의 절반의 폭 (또는 절반의 높이), 블록의 폭 및 높이의 분수, 또는 블록의 높이/폭의 배수와 동일하다. 런의 값은 또한, QP, 프레임-타입, 컬러 컴포넌트, 컬러 포맷 (예컨대, 444, 422, 420), 및/또는 컬러 공간 (예컨대, YUV, RGB) 에 종속적일 수도 있다. 런의 값은 또한, 스캔 방향에 종속될 수도 있다. 다른 예들에서, 런의 값은 다른 타입들의 부수적 정보에 종속될 수도 있다. 런의 값은 또한, 높은 레벨 신택스 (예컨대, PPS, SPS) 를 이용하여 시그널링될 수도 있다.
일부 예들에서, 맵은 송신될 필요가 없을 수도 있다. 런은 어떤 로케이션들에서 오직 시작할 수도 있다. 예를 들어, 런은 각각의 행의 시작부 (beginning), 또는 매 N 행들의 시작부에서 오직 시작할 수도 있다. 시작 로케이션은 상이한 스캔 방향들에 대하여 상이할 수도 있다. 예를 들어, 수직 스캔이 이용될 경우, 런은 열의 시작부, 또는 매 N 열들의 시작부에서 오직 시작할 수도 있다. 시작 로케이션은 부수적 정보에 종속될 수도 있다. 예를 들어, 시작 로케이션은 각각의 행 또는 각각의 열의 중간-포인트, 또는 각각의 행/열의 1/n, 2/n, ... (n-1)/n (즉, 분수들) 일 수도 있다. 시작 로케이션은 또한, QP, 프레임-타입, 컬러 컴포넌트, 컬러 포맷 (예컨대, 444, 422, 420), 및/또는 컬러 공간 (예컨대, YUV, RGB) 에 종속될 수도 있다. 다른 예들에서, 런의 시작 위치는 다른 타입들의 부수적 정보에 종속될 수도 있다. 시작 위치는 또한, 높은 레벨 신택스 (예컨대, PPS, SPS 등) 를 이용하여 시그널링될 수 있다.
묵시적 시작 위치 유도 및 묵시적 런 유도가 조합되는 것이 또한 가능하다. 예를 들어, 런은 2 개의 이웃하는 시작 위치들 사이의 거리와 동일하다. 시작 포인트가 매 행의 시작부 (즉, 최초 위치) 일 경우, 런의 길이는 행이다.
스캔 방향은 수직 또는 수평일 수도 있다. 플래그는 스캔 방향을 표시하기 위하여 각각의 CU 에 대하여 송신되는 것이 가능하다. 플래그들이 각각의 컴포넌트에 대하여 별도로 송신될 수도 있거나 단일 플래그가 송신될 수도 있고, 표시된 스캔 방향은 모든 컬러 컴포넌트들에 적용한다. 45 도 또는 135 도와 같은 다른 스캔 방향들이 이용되는 것이 또한 가능하다. 스캔 순서는 고정될 수도 있거나, "플래그 PLT_Mode_flag 의 송신" 에 대하여 위에서 설명된 것과 동일한 방법으로 부수적 정보에 종속적일 수도 있다.
위에서, 팔레트를 어떻게 송신할 것인지가 설명된다. 상기 설명된 예들에 대한 대안은 팔레트를 온-더-플라이 (on-the-fly) 로 구성하기 위한 것이다. 이 경우, CU 의 시작부에서는, 팔레트에서 엔트리가 없고, 비디오 인코더 (20) 가 CU 에서의 위치들에 대한 픽셀들의 새로운 값들을 시그널링하므로, 이 값들은 팔레트 내에 포함된다. 즉, 비디오 인코더 (20) 는 픽셀 값들이 CU 에서의 위치들에 대해 생성되고 송신될 때에, 픽셀 값들을 팔레트에 추가한다. 그 다음으로, 동일한 값들을 가지는 CU 에서의 더 이후의 위치들은 비디오 인코더 (20) 가 픽셀 값들을 송신하게 하는 대신에, 예컨대, 인덱스 값들로 팔레트에서의 픽셀 값들을 참조할 수도 있다. 유사하게, 비디오 디코더 (30) 가 CU 에서의 위치에 대하여 (예컨대, 비디오 인코더에 의해 시그널링된) 새로운 픽셀 값을 수신할 때, 그것은 비디오 디코더 (30) 에 의해 구성된 팔레트 내에 픽셀 값을 포함한다. CU 에서의 더 이후의 위치들이 팔레트에 추가되었던 픽셀 값들을 가질 때, 비디오 디코더 (30) 는 CU 에서의 픽셀 값들의 재구성을 위하여 팔레트에서 대응하는 픽셀 값들을 식별하는, 예컨대, 인덱스 값들과 같은 정보를 수신할 수도 있다.
예컨대, 팔레트가 온-더-플라이로 동적으로 구성될 때, 최대 팔레트 크기에 도달될 경우, 인코더 및 디코더는 팔레트의 엔트리를 제거하기 위하여 동일한 메커니즘을 공유한다. 하나의 방법은 팔레트에서 가장 오래된 엔트리를 제거하기 위한 것이다 (FIFO 큐 (queue)). 또 다른 방법은 팔레트에서 가장 적게 이용된 엔트리를 제거하기 위한 것이다. 또 다른 것은 대체되어야 할 엔트리를 판단하기 위하여 양자의 방법들 (팔레트에서의 시간 및 사용 주파수) 을 가중화하기 위한 것이다. 하나의 예로서, 픽셀 값 엔트리가 팔레트로부터 제거되고, 픽셀 값이 팔레트에서의 더 이후의 위치에서 다시 발생할 경우, 인코더는 팔레트 내에 엔트리를 포함하는 대신에, 픽셀 값을 송신할 수도 있다. 추가적으로 또는 대안적으로, 이러한 픽셀 값은 예컨대, 인코더 및 디코더가 CU 에서의 위치들을 스캔할 때에, 제거된 후의 팔레트 내로 재입력될 수 있다.
이 개시물은 또한, 초기 팔레트 시그널링을 팔레트의 온-더-플라이 유도와 조합하는 것을 고려한다. 하나의 예에서, 초기 팔레트는 픽셀들의 코딩으로 업데이트될 것이다. 예를 들어, 초기 팔레트를 송신할 시에, 비디오 인코더 (20) 는 CU 에서의 추가적인 로케이션들의 픽셀 값들이 스캔될 때에, 값들을 초기 팔레트에 추가할 수도 있거나, 초기 팔레트에서의 값들을 변경시킬 수도 있다. 유사하게, 초기 팔레트를 수신할 시에, 비디오 디코더 (30) 는 CU 에서의 추가 위치들의 픽셀 값들이 스캔될 때, 값들을 초기 팔레트에 추가할 수도 있거나, 초기 팔레트에서의 값들을 변경시킬 수도 있다. 유사하게, 인코더는 현재의 CU 가 전체 팔레트의 송신, 또는 온-더-플라이 팔레트 생성, 또는 초기 팔레트의 송신과, 온-더-플라이 유도에 의한 초기 팔레트의 업데이트와의 조합을 이용하는지 여부를 시그널링할 수 있다. 일부 예들에서, 초기 팔레트는 이 경우에 초기 팔레트에서의 값들이 변경될 수도 있는 최대 팔레트 크기에서의 완전한 팔레트, 또는 이 경우에 값들이 초기 팔레트에 추가되고 임의적으로, 초기 팔레트에서의 값들이 변경되는 감소된 크기의 팔레트일 수도 있다.
위에서, 픽셀 값을 식별함으로써 맵을 어떻게 송신할 것인지가 설명되었다. 위에서 설명된 그 방법과 마찬가지로, 맵의 송신은 라인 복사를 시그널링함으로써 행해질 수 있다. 하나의 예에서, 엔트리에 대한 픽셀 값이 상부 라인의 (또는 스캔이 수직일 경우에 좌측의 열에서의) 엔트리의 픽셀 값과 동일하도록, 라인 복사는 비디오 인코더 (20) 에 의해 시그널링된다. 그 다음으로, 라인으로부터 복사되는 엔트리들의 '런' 은 시그널링될 수도 있다. 또한, 그것이 그로부터 복사되는 라인은 표시될 수 있고; 몇몇 상부 라인들은 이 목적을 위하여 버퍼링될 수도 있다. 예를 들어, 이전의 4 개의 행들이 저장되고, 어느 행이 복사되는지는 절단된 1진 코드 또는 다른 코드들로 시그널링될 수도 있고, 그 다음으로, 그 행의 얼마나 많은 엔트리들이 복사되는지, 즉, 런이 시그널링될 수도 있다. 이 때문에, 일부 예들에서, 엔트리에 대한 픽셀 값은 현재의 행 바로 상부의 행 또는 현재의 행 상부의 2 개 이상의 행들에서의 엔트리의 픽셀 값과 동일하도록 시그널링될 수도 있다.
런이 시그널링되지 않는 경우, 런의 값은 상수/고정될 수도 있거나, 위에서 설명된 방법을 이용하는 부수적 정보에 종속적일 수도 있다 (그리고 디코더에 의해 유도됨).
맵은 송신될 필요가 없다는 것이 또한 가능하다. 예를 들어, 런은 어떤 위치들에서 오직 시작할 수도 있다. 시작 위치는 고정될 수도 있거나, 부수적 정보에 종속적일 수도 있어서 (그리고 디코더에 의해 유도됨), 시작 위치의 시그널링이 스킵될 수도 있다. 그 대신에, 위에서 설명된 하나 이상의 기법들이 적용될 수도 있다. 묵시적 시작 위치 유도 및 묵시적 런 유도는 또한, 위에서 설명된 것과 동일한 방법을 이용하여 조합될 수도 있다.
맵 송신의 양자의 방법들이 이용될 경우, 플래그 또는 다른 신택스 엘리먼트는 픽셀이 팔레트로부터, 또는 이전의 라인들로부터 획득되는지 여부를 표시할 수도 있고, 그 다음으로, 인덱스는 팔레트 또는 행에서의 엔트리, 및 최종적으로 '런' 을 표시한다.
이 개시물은 팔레트 모드 코딩을 간략화하고 및/또는 팔레트-기반 코딩 효율을 개선시키기 위한 방법들, 디바이스들, 및 기법들을 설명한다. 이 개시물의 기법들은 코딩 효율을 개선시키고 및/또는 코덱 복잡도를 감소시키기 위하여, 서로 함께 또는 별도로 이용될 수도 있다. 일반적으로, 이 개시물의 기법들에 따르면, 비디오 코딩 디바이스는 하나 이상의 팔레트 코딩 모드들을 이용하여 비디오 데이터를 인코딩하고 디코딩하도록 구성될 수도 있고, 여기서, 팔레트 코딩 모드들은 팔레트 공유 모드를 포함하지 않는다.
하나의 예의 팔레트 모드에서, palette_share_flag 와 같은 플래그는 비디오 데이터에 대한 팔레트 또는 비디오 데이터의 더 많은 블록들이 공유되거나 비디오 데이터의 또 다른 블록의 팔레트로부터 병합되는 것을 표시하기 위하여 비트스트림으로 시그널링될 수도 있다. 공유된 팔레트를 그로부터 획득하기 위한 비디오 데이터의 블록은 미리 결정된 규칙들 (예컨대, 현재의 블록의 좌측 또는 상부의 블록의 팔레트를 이용함) 에 기초할 수도 있거나, 또는 그렇지 않을 경우에, 인코딩된 비디오 비트스트림에서 표시될 수도 있다. R. Joshi 및 J. Xu, "High efficient video coding (HEVC) screen content coding: Draft 2 (고효율 비디오 코딩 (HEVC) 스크린 컨텐츠 코딩: 초안 2)", JCTVC-S1005, 섹션 7.4.9.6 에서 설명된 바와 같이, palette_share_flag 의 시맨틱 (semantic) 들은 "1 과 동일한 palette_share_flag[x0][y0] 가 현재의 코딩 유닛에 대한 팔레트가 예측자 팔레트로부터 최초의 PreviousPaletteSize 엔트리들을 복사함으로써 유도된다는 것을 특정한다. 변수 PreviousPaletteSize 는 하위조항 8.4.5.2.8 에서 특정된 바와 같이 유도된다. 0 과 동일한 palette_share_flag [x0][y0] 는 현재의 코딩 유닛에 대한 팔레트가 이전의 코딩 유닛들로부터의 팔레트 엔트리들 및 명시적으로 시그널링되는 새로운 팔레트 엔트리들의 조합으로서 특정된다." 로서 기재되어 있다.
하나의 예에서, palette_share_ flag 의 값이 1 과 동일할 때, palette_share_ flag 는 현재의 블록이 이전에 코딩된 블록으로부터의 최후 코딩된 팔레트를 재이용할 수도 있다는 것을 표시한다. 이 방법은 또한 팔레트 공유로서 알려져 있다. 그러나, 새로운 연구 결과들은 이 플래그가, 그것이 나타내는 팔레트 공유 방법과 함께, 추가적인 파싱 및 디코딩 복잡도를 또한 도입하면서, 코딩 효율을 개선시킴에 있어서 효과적이지 않다는 것을 표시한다.
또한, 일부 중복성들이 palette_run_type_flag 와 같은, 런 타입을 표시하는 신택스 엘리먼트에 대한 시그널링 프로세스에서 식별된다. 구체적으로, 현재의 픽셀이 스캔 순서에서 라인에서의 최초 픽셀이고, 현재의 픽셀과 이웃하고 현재의 픽셀 상부의 픽셀이 이용가능할 때, 현재의 픽셀은 "상부 복사" 모드에 있을 수 없다. 용어 "상부 픽셀이 이용가능함" 은 "외부로부터의 복수" 방법들이 인에이블되지 않을 경우에, 상부 이웃이 수평 스캔에 대하여 현재의 블록 내에 있거나 좌측 이웃이 수직 스캔 순서에 대하여 블록 내에 있다는 것을 의미한다. "외부로부터의 복사" 방법들이 인에이블될 때, "상부 픽셀" 은 블록 내의 각각의 픽셀에 대하여 항상 이용가능할 수도 있다. 일 예의 "외부로부터의 복사" 방법들은 Y.-C. Sun, J. Kim, T.-D. Chuang, Y.-W. Chen, S. Liu, Y.-W. Huang, 및 S. Lei, "Non-CE6: Cross-CU palette colour index prediction (비-CE6: 교차-CU 팔레트 컬러 인덱스 예측)", JCTVC-S0079, 및 J. Kim, Y.-C. Sun, S. Liu, T.-D. Chuang, Y.-W. Chen, Y.-W. Huang, 및 S. Lei, "CE6-related: Enabling copy above mode prediction at the boundary of CU (CE6-관련: CU 의 경계에서의 상부 복사 모드 예측을 가능하게 함", JCTVC-S0114 에서 설명되어 있다.
현재의 픽셀이 "상부 복사" 모드에 따라 코딩될 경우, 현재의 픽셀의 인덱스는 현재의 픽셀의 상부 이웃의 인덱스와 동일하다. 이에 반해, "상부 복사" 모드가 또 다른 "상부 복사" 모드를 바로 선행할 수 없다는 규칙으로 인해, 상부 이웃은 '인덱스 복사' 런의 종료부 (end) 이어야 한다. 그러므로, 상부 이웃의 "인덱스 복사" 런은 현재의 픽셀을 "상부 복사" 런의 최초 픽셀로 만드는 대신에, 현재의 픽셀을 "인덱스 복사" 런에 추가함으로써 적어도 1 만큼 길어질 수 있다. 이에 따라, 현재의 픽셀이 스캔 순서에서 라인에서의 최초 픽셀일 경우, "상부 복사" 모드를 규범적으로 디스에이블하는 것이 가능하다. 이것은 이러한 픽셀에 대하여, 런 타입이 "인덱스 복사" 인 것으로 추론될 수도 있고, 이에 따라, 이러한 인덱스를 시그널링할 필요성을 제거할 수도 있으므로, 비트 절감으로 귀착된다.
또한, 신택스 엘리먼트 palette_num_signalled_entries 에 대한 현재의 2진화는 절단된 1진 코드이다. palette_num_signalled_entries 신택스 엘리먼트는 명시적으로 시그널링되는 현재의 팔레트 (예컨대, 비디오 데이터의 현재의 블록을 코딩하기 위하여 이용되어야 할 팔레트) 에서의 엔트리들의 수를 표시한다. 명시적으로 시그널링되는 샘플들의 수는 (이스케이프 샘플의 이용을 표시하는 임의의 팔레트 엔트리들을 포함하는) 비디오 데이터의 또 다른 블록의 팔레트로부터 예측되는 팔레트에서의 엔트리들의 수로부터 감산된 팔레트에서의 엔트리들의 수 사이의 차이에 의해 결정될 수도 있다. 일부 예들에서, palette_num_signalled_entries 신택스 엘리먼트는 num_signalled_palette_entries 신택스 엘리먼트로 명명될 수도 있다.
일부 예들에서, palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하기 위하여 이용된 코드워드는 바람직하지 않게 길 수도 있고, 이것은 32 보다 더 큰 길이의 코드워드들로 귀착될 수도 있다. 예를 들어, HEVC1 에서, 모든 코드워드들은 32 이하인 길이이다. 동일한 상황은 또한, palette_predictor_run 신택스 엘리먼트를 코딩할 때에 발생할 수도 있다. palette_predictor_run 신택스 엘리먼트는 어레이 (array) predictor_palette_entry_reuse_flag 에서 비-제로 (non-zero) 엔트리를 선행하는 제로들의 수를 특정한다. predictor_palette_entry_reuse_flag 는 하나 이상의 이전에 이용된 팔레트들로부터의 특정한 팔레트 엔트리가 현재의 팔레트에 대하여 재이용되는지 아닌지 여부를 표시한다. palette_predictor_run 의 값은 0 부터 최대 팔레트 예측자 크기까지의 범위일 수도 있다.
이 단점들을 고려하면, 개시물의 하나의 예에서, 이 개시물은 비디오 인코더 (20) 및 비디오 디코더 (30) 가 팔레트-공유 기법들 없이 팔레트-기반 코딩 모드를 수행하도록 구성될 것을 제안한다. 더욱 구체적으로, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 이하에서 표시된 바와 같이, palette_share_flag[ x0 ][ y0 ] 신택스 엘리먼트를 이용하지 않으면서, 팔레트-기반 코딩을 수행하도록 구성될 수도 있다:
Figure 112017071707712-pct00001
팔레트 공유 기법들을 이용하는 대신에, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 위에서 설명된 팔레트 예측 기법들과 같은 다른 기법들을 이용하여 비디오 데이터의 하나 이상의 블록들과의 이용을 위한 팔레트를 코딩하도록 구성될 수도 있다. 다른 예들에서, 비디오 인코더 (20) 및/ 비디오 디코더 (30) 는 다음의 기법들을 이용하여 팔레트 예측을 수행하도록 구성될 수도 있다.
도 4 는 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 을 더욱 상세하게 도시하는 블록도이다. 팔레트-기반 인코딩 유닛 (122) 은 팔레트-기반 비디오 코딩을 위한 이 개시물의 일 예의 기법들 중의 하나 이상을 수행하도록 구성될 수도 있다.
위에서 설명된 바와 같이, 팔레트-기반 인코딩 유닛 (122) 은 팔레트-기반 인코딩 모드로 비디오 데이터의 블록 (예컨대, CU 또는 PU) 을 인코딩하도록 구성될 수도 있다. 팔레트-기반 인코딩 모드에서, 팔레트는, 인덱스에 의해 번호부여되고, 픽셀 값들을 표시하기 위하여 이용될 수도 있는 컬러 컴포넌트 값들 (예를 들어, RGB, YUV 등) 또는 강도들을 나타내는 엔트리들을 포함할 수도 있다. 팔레트 생성 유닛 (203) 은 비디오 데이터의 현재의 블록에 대한 픽셀 값들 (212) 을 수신하고 비디오 데이터의 현재의 블록에 대한 컬러 값들의 팔레트를 생성하도록 구성될 수도 있다. 팔레트 생성 유닛 (203) 은 위에서 논의된 히스토그램-기반 기법들을 포함하는, 비디오 데이터의 현재의 블록에 대한 팔레트를 생성하기 위한 임의의 기법들을 이용할 수도 있다. 팔레트 생성 유닛 (203) 은 임의의 크기의 팔레트를 생성하도록 구성될 수도 있다. 하나의 예에서, 팔레트 생성 유닛 (203) 은 32 개의 팔레트 엔트리들을 생성하도록 구성될 수도 있고, 여기서, 각각의 팔레트 엔트리는 픽셀의 Y, Cr, 및 Cb 컴포넌트들에 대한 픽셀 값들을 포함한다. 전자의 예에서는, 각각의 팔레트 엔트리가 샘플 (픽셀) 의 모든 컬러 컴포넌트들에 대한 값들을 특정하는 것으로 가정된다. 그러나, 이 문서에서 설명된 개념들은 각각의 컬러 컴포넌트에 대하여 별도의 팔레트를 이용하는 것에 적용가능하다.
일단 팔레트가 팔레트 생성 유닛 (203) 에 의해 생성되면, 맵 유닛 (204) 은 비디오 데이터의 현재의 블록에서의 특정한 픽셀이 팔레트 생성 유닛 (203) 에 의해 생성된 팔레트에서의 엔트리에 의해 표현될 수도 있는지 아닌지 여부를 표시하는 비디오 데이터의 현재의 블록에 대한 맵을 생성할 수도 있다. 맵 유닛 (204) 은 각각의 픽셀이 팔레트로부터의 엔트리들을 어떻게 이용하는지 (또는 이용하지 않음) 를 표시하는 신택스 엘리먼트들을 포함하는 맵 (214) 을 생성할 수도 있다. 위에서 논의된 바와 같이, 이스케이프 픽셀들은 별도의 신택스 엘리먼트로 시그널링되는 것이 아니라, 오히려, 팔레트에서의 미리 결정된 예약된 인덱스로 표시될 수도 있다. 비디오 데이터의 현재의 블록에서의 픽셀에 대한 값이 팔레트에서 발견되지 않을 경우, 맵 유닛 (204) 은 팔레트에서의 예약된 인덱스로 이스케이프 픽셀의 이용을 표시할 수도 있고, 그 특정한 픽셀에 대한 픽셀 값을 명시적으로 송신할 수도 있다. 일부 예들에서, 맵 유닛 (204) 은 팔레트에서 발견된 엔트리들 중의 하나로부터 명시적 픽셀 값을 예측할 수도 있다. 일부 다른 예들에서, 맵 유닛 (204) 은 픽셀을 양자화할 수도 있고 양자화된 값들을 송신할 수도 있다.
블록에서의 픽셀들의 각각에 대하여 이용된 컬러 값들을 표시하는 신택스 엘리먼트들을 시그널링하는 것에 추가하여, 팔레트-기반 인코딩 유닛 (122) 은 또한, 비디오 데이터의 현재의 블록에 대하여 이용되어야 하는 팔레트를 시그널링하도록 구성될 수도 있다. 이 개시물의 기법들에 따르면, 팔레트-기반 인코딩 유닛 (122) 은 비디오 데이터의 특정한 블록에 대한 팔레트의 값들을 표시하기 위하여 시그널링되는 데이터의 양을 감소시키기 위한 팔레트 예측 기법들을 채용하도록 구성될 수도 있다.
팔레트 예측의 하나의 예로서, 2014 년 6 월 20 일자로, http://phenix.int-evry.fr/jct/doc_end_user/documents/17_Valencia/wg11/JCTVC-Q0094-v1.zip 으로부터 입수가능한 JCTVC-Q0094 에서 설명되는 바와 같이, 팔레트는 예측자 팔레트로부터 복사되는 엔트리들을 포함할 수도 있다. 예측자 팔레트는 팔레트 모드를 이용하는 이전에 코딩된 블록들로부터, 또는 다른 재구성된 샘플들로부터의 팔레트 엔트리들을 포함할 수도 있다. 도 4 에서 도시된 바와 같이, 팔레트-기반 인코딩 유닛 (122) 은 예측자 팔레트 버퍼 (210) 를 포함할 수도 있다. 예측자 팔레트 버퍼 (210) 는 이전에 인코딩된 블록들로부터의 다수의 이전에 이용된 팔레트 엔트리들을 저장하도록 구성될 수도 있다. 하나의 예로서, 예측자 팔레트 버퍼 (210) 는 미리 결정된 크기의 선입, 선출 (first in first out; FIFO) 버퍼로서 구성될 수도 있다. 예측자 팔레트 버퍼 (210) 는 임의의 크기일 수도 있다. 하나의 예에서, 예측자 팔레트 버퍼 (210) 는 최대 64 개의 이전에 이용된 팔레트 엔트리들을 포함한다.
일부 예들에서, 팔레트-기반 인코딩 유닛 (122) 은 예측자 팔레트 버퍼 (210) 에서의 모든 팔레트 엔트리들이 고유하도록, 예측자 팔레트 버퍼 (210) 에서의 엔트리들을 프루닝 (prune) 하도록 구성될 수도 있다. 즉, 예측자 팔레트 버퍼 (210) 에 추가되어야 할 각각의 새로운 팔레트 엔트리에 대하여, 팔레트-기반 인코딩 유닛 (122) 은 예측자 팔레트 버퍼 (210) 내에 이미 저장된 다른 동일한 엔트리들이 없다는 것을 먼저 검사하도록 구성될 수도 있다. 동일한 엔트리들이 없을 경우, 새로운 팔레트 엔트리는 예측자 팔레트 버퍼 (210) 에 추가된다. 새로운 엔트리가 현존하는 엔트리의 복제본일 경우, 새로운 팔레트 엔트리는 예측자 팔레트 버퍼 (210) 에 추가되고, 복제된 엔트리들은 예측자 팔레트 버퍼 (210) 로부터 제거된다.
팔레트-기반 인코딩 유닛 (122) 은 (예컨대, 플래그 = 1 에 의해 표시된) 예측자 팔레트 버퍼 (210) 에서의 팔레트 엔트리가 비디오 데이터의 현재의 블록에 대한 팔레트에서의 엔트리들 중의 하나에 대하여 복사 (또는 재이용) 되는지 여부를 표시하기 위하여, 팔레트 생성 유닛 (203) 에 의해 생성된 비디오 데이터의 현재의 블록에 대한 팔레트에서의 각각의 엔트리에 대하여, 2진 플래그 (예컨대, predictor_palette_entry_reuse_flag) 를 생성하고 시그널링하도록 구성되는 2진 예측 벡터 생성 유닛 (206) 을 포함할 수도 있다. 즉, 2진 예측자 벡터에서 1 의 값을 갖는 플래그는 예측자 팔레트 버퍼 (210) 에서의 대응하는 엔트리가 현재의 블록에 대한 팔레트에 대하여 재이용된다는 것을 표시하는 반면, 2진 예측 벡터에서 0 의 값을 갖는 플래그는 예측자 팔레트 버퍼 (210) 에서의 대응하는 엔트리가 현재의 블록에 대한 팔레트에 대하여 재이용되지 않는다는 것을 표시한다. 추가적으로, 팔레트-기반 인코딩 유닛 (122) 은 예측자 팔레트 버퍼 (210) 에서의 엔트리들로부터 복사될 수 없는 현재의 팔레트에 대한 일부 값들을 명시적으로 시그널링하도록 구성될 수도 있다. 새로운 엔트리들의 수는 마찬가지로 시그널링될 수도 있다. 이와 관련하여, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 palette_num_signalled_entries 신택스 엘리먼트를 이용하여 명시적으로 시그널링된 팔레트 엔트리들의 수를 시그널링하도록 구성될 수도 있다.
팔레트 예측 기법들을 이용하는 팔레트-기반 코딩 모드를 이용할 때, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 다른 신택스 엘리먼트들 중에서, 비디오 데이터의 현재의 블록을 코딩하기 위하여 이용되어야 할 현재의 팔레트에 대하여 명시적으로 시그널링되는 팔레트 엔트리들의 수를 표시하는 신택스 엘리먼트 (예컨대, palette_num_signalled_entries) 를 코딩하도록 구성될 수도 있다. 이 개시물은 이러한 신택스 엘리먼트를 코딩할 때에 코딩 효율을 개선시키거나 코드워드 길이를 한정하기 위한 기법들을 제안한다.
개시물의 하나의 예에서, 팔레트-기반 인코딩 유닛 (122) 은 CABAC 컨텍스트를 이용하여, palette_num_signalled_entries 신택스 엘리먼트와 같은, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트의 최초의 빈을 인코딩하도록 구성될 수도 있다. 팔레트-기반 인코딩 유닛 (122) 은 다른 인코딩 기법들을 이용하여 palette_num_signalled_entries 의 다른 빈들을 코딩할 수도 있다. 개시물의 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 palette_num_signalled_entries 신택스 엘리먼트의 최초의 빈을 코딩하기 위하여 하나를 초과하는 컨텍스트를 이용하도록 구성될 수도 있다. 하나의 예에서, 팔레트-기반 인코딩 유닛 (122) 은 코딩되고 있는 현재의 비디오 블록의 블록 크기에 기초하여, 및/또는 다른 신택스 엘리먼트들의 값에 기초하여 컨텍스트들을 결정하도록 구성될 수도 있다.
개시물의 하나의 예에 따르면, 팔레트-기반 인코딩 유닛 (122) 은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 1 신택스 엘리먼트의 최초의 빈을 결정하도록 구성될 수도 있다. 비디오 인코더 (20) 는 제 1 신택스 엘리먼트를 포함하는 비트스트림을 인코딩하도록 추가로 구성될 수도 있다. 비트스트림은 또한, 팔레트 공유 모드를 표시하는 제 2 신택스 엘리먼트를 포함하지 않을 수도 있다. 일부 예들에서, 팔레트-기반 인코딩 유닛 (122) 은 컨텍스트-적응 2진 산술 코딩을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 인코딩하도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 인코딩 유닛 (122) 은 하나 이상의 컨텍스트들을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 인코딩하도록 구성될 수도 있다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
개시물의 또 다른 예에서는, palette_num_signalled_entries 의 코드워드 길이가 32 비트들보다 더 길어지는 것을 회피하기 위하여, 규범적 시맨틱 변경들이 현재의 팔레트 코딩 기법들 (예컨대, R. Joshi 및 J. Xu, "High efficient video coding (HEVC) screen content coding: Draft 2 (고효율 비디오 코딩 (HEVC) 스크린 컨텐츠 코딩: 초안 2", JCTVC-S1005) 에 대해 행해지는 것이 제안된다. 예를 들어, palette_max_size 와 같은, 최대 허용된 팔레트 크기를 특정하는 신택스 엘리먼트, 및 palette_max_predictor_size 와 같은, 최대 예측자 팔레트 크기를 특정하는 신택스 엘리먼트의 실현가능한 값들이 임계치에 의해 캡핑 (capping) 될 수도 있다. 이러한 임계치는 미리 결정될 수도 있고, 팔레트-기반 인코딩 유닛 (122) 에 의해 액세스가능한 메모리 (예컨대, 도 2 에서의 비디오 데이터 메모리 (98) 또는 도 3 에서의 비디오 데이터 메모리 (148)) 내에 저장될 수도 있다. 구체적으로, palette_max_size 에 대하여, 값은 0 으로부터 T1 까지의 임의의 값일 수도 있고, 여기서, T1 은 임계치이다. 존재하지 않을 때, 팔레트-기반 인코딩 유닛 (122) 은 palette_max_size 의 값을 0 인 것으로 추론하도록 구성될 수도 있다. 또한, palette_max_predictor_size 에 대하여, 값은 0 으로부터 T2 까지의 임의의 값일 수도 있고, 여기서, T2 는 임계치이다. 존재하지 않을 때, 팔레트-기반 인코딩 유닛 (122) 은 palette_max_predictor_size 의 값을 0 인 것으로 추론하도록 구성될 수도 있다.
하나의 예에서, T1 은 4096 과 동일하고, T2 는 8192 와 동일하다. 또 다른 예에서, T1 은 4095 와 동일하고, T2 는 4095 와 동일하다. 또 다른 예에서, T1 은 4095 와 동일하고, T2 는 8191 과 동일하다.
또 다른 예로서, 이 개시물은 palette_max_size 의 값이 최대 크기 코딩 유닛에서의 픽셀들의 수와 동일하다는 것을 제안한다. 이러한 값은 미리 결정될 수도 있고, 팔레트-기반 인코딩 유닛 (122) 에 의해 액세스가능한 메모리 내에 저장될 수도 있다. 일부 예들에서, palette_max_predictor_size 의 값은 K * palette_max_size 이하일 수도 있고, 여기서, K 는 양의 상수이다. 일부 예들에서, K = 2 이다.
또 다른 예에서, (예컨대, 2진 벡터 압축 유닛 (209) 또는, 엔트로피 인코딩 유닛 (118) 과 같은, 비디오 인코더 (20) 의 또 다른 구조적 컴포넌트를 이용하는) 팔레트-기반 인코딩 유닛 (122) 은 골롬 코드 계열 (예컨대, 골롬-라이스 코드, 지수 골롬 코드, 절단 라이스 코드, 1진 코드 등) 로부터의 하나 이상의 코딩 기법들을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하도록 구성될 수도 있다. 개시물의 하나의 예에서, 팔레트-기반 인코딩 유닛 (122) 은 차수 0 의 지수 골롬 코드를 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 인코딩하도록 구성된다. 개시물의 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 HEVC1 에서 coeff_abs_level_remaining 신택스 엘리먼트를 코딩하기 위하여 계수 코딩에서 이용된 것과 같은 절단 라이스 (Truncated Rice; TR) 코드 및 지수 골롬 코드의 연접 (concatenation) 을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 인코딩하도록 구성된다.
0 의 골롬 라이스 파라미터에 대한 TR 코드 및 지수 골롬 코드의 연접의 예는 이하에서 도시되어 있다:
Figure 112017071707712-pct00002
여기서, x 는 0 또는 1 의 값을 취할 수 있다. 유사하게, 이하의 표는 paletteRun 신택스 엘리먼트의 코딩에서 이용된 연접된 2진화의 예를 도시한다. 이것은 7 의 최대 런 값에 대한 차수 0 의 절단된 라이스 및 절단된 지수 골롬 코드의 연접이다.
Figure 112017071707712-pct00003
여기서, x 는 0 또는 1 의 값을 취할 수 있다.
palette_num_signalled_entries 신택스 엘리먼트를 코딩하기 위하여 (예컨대, 지수 골롬 코드, 또는 TR 코드 및 지수 골롬 코드의 연접과 같은) 하나 이상의 골롬 코드들을 이용하는 것은 palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하기 위한 이전의 기법들과 비교하여 이득을 제공한다. palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하기 위한 이전의 기법들은 1진 코드를 이용하였다. 1진 코드의 이용은 palette_num_signalled_entries 신택스 엘리먼트의 코딩된 길이가 일부 상황들에서 32 비트들로보다 더 큰 것으로 귀착되었다. palette_num_signalled_entries 신택스 엘리먼트를 코딩하기 위하여 하나 이상의 골롬 코드들을 이용함으로써, 이 개시물의 기법들은 팔레트-기반 인코딩 유닛 (122) 이 코딩된 길이를 비트들의 일부 미리 결정된 수 (예컨대, 32 비트들) 에서 또는 그 미만으로 유지하는 사항으로 palette_num_signalled_entries 신택스 엘리먼트의 값을 인코딩하는 것을 허용한다.
또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 골롬 코드 계열의 절단된 버전 (예컨대, 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드 등) 을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하도록 구성될 수도 있다. 개시물의 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 paletteRun 신택스 엘리먼트를 코딩하기 위하여 이용된 동일한 코드를 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하도록 구성될 수도 있다. 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 계수 코딩에서 coeff_abs_level_remaining 신택스 엘리먼트를 코딩하기 위하여 이용된 방법 (예컨대, 절단된 라이스 (TR) 및 지수 골롬 코드의 연접) 을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 코딩하도록 구성될 수도 있다. 이 예에 따르면, TR 파라미터는 0 인 것으로 선호된다. 이 예들의 각각에서, 특정한 절단된 코드는 palette_num_signalled_entries 신택스 엘리먼트의 인코딩된 길이가 32 비트들에서, 또는 그 미만에서 유지되도록 선택된다.
또 다른 예에서는, palette_num_signalled_entries 가 블록에서의 픽셀들의 수와 동일하다는 비트스트림에 관한 한정을 부과하는 것이 제안된다. 즉, 팔레트-기반 인코딩 유닛 (122) 은 palette_num_signalled_entries 신택스 엘리먼트의 가능한 값을 현재 코딩된 블록에서의 픽셀들의 수에 의해 제한하도록 구성될 수도 있다. 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 palette_num_signalled_entries 의 가능한 값을 특정한 픽처의 최대 가능한 블록에서의 픽셀들의 수 (예컨대, 특정한 비디오 코딩 표준에 의해 정의된 큰 블록 크기) 에 의해 제한하도록 구성될 수도 있다.
또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀이고 현재의 픽셀 상부에서 현재의 픽셀과 이웃하는 픽셀이 이용가능할 경우, palette_run_type_flag 와 같은, 런 타입을 표시하는 신택스 엘리먼트를 시그널링하는 것을 우회하도록 구성될 수도 있다. 하나의 예에서, 팔레트-기반 인코딩 유닛 (122) 은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 구성될 수도 있다. 팔레트-기반 인코딩 유닛 (122) 은 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 팔레트-기반 인코딩 유닛 (122) 은 비트스트림에서 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하는 것으로서, 여기서, 제 1 신택스 엘리먼트는 런 타입을 표시하는, 상기 제 1 신택스 엘리먼트를 인코딩하는 것을 우회하고, 비트스트림의 나머지를 인코딩하도록 추가로 구성될 수도 있다.
도 4 및 이 개시물의 팔레트 예측 기법들로 돌아가면, US 특허 공개 제 2015/028178 호로서 공개된, 2015 년 3 월 24 일자로 출원된 미국 출원 제 14/667,411 호에서는, 2진 트리 기반 시그널링 방법 및 종료부-위치 기반 시그널링 방법들이 팔레트 2진 예측자 벡터의 코딩을 위하여 제안되었다. 2014 년 5 월 23 일자로 출원된 미국 가출원 제 62/002,741 호에서는, 그룹 기반 시그널링 방법이 제안되었다. 이 개시물은 2진 예측 벡터를 생성하고, 인코딩하고, 디코딩하기 위한 추가적인 기법들을 제안한다.
본원에서 설명된 일부 예들은 코딩 효율을 개선시키기 위하여 팔레트 예측 벡터를 코딩하기 위한 방법들에 관한 것이다. 예를 들어, 2진 예측 벡터 생성 유닛 (206) 에 의해 생성된 2진 예측 벡터는 이하에 의해 나타내어지는 것으로 가정한다:
b = [b 0, b 1, … , b N -1], N ≥ 0, b i ∈ {0,1}, 0 ≤ i < N
상기 수학식에서, b i ∈ {0,1}, 0 ≤ i < N 은 예측 플래그 (또한, 2진 플래그 또는 2진 예측 플래그로 칭해짐) 를 나타낸다. N=0 일 경우, b = φ (즉, b 는 비어 있는 벡터임) 이고, 이것은 시그널링될 필요가 없다. 그러므로, 다음의 설명에서는, N > 0 으로 가정될 수도 있다.
도 5 는 예측자 팔레트 버퍼 (210) 및 현재의 팔레트 (220) 의 하나의 예를 도시한다. 도 5 에서 볼 수 있는 바와 같이, 현재의 팔레트 (220) 는 엔트리 인덱스들 1, 2, 5, 및 9 와 연관된 예측자 팔레트 버퍼 (210) 로부터의 픽셀 값들을 재이용한다. 이와 같이, 도 4 의 2진 예측 벡터 생성 유닛 (206) 에 의해 생성된 2진 예측자 벡터는 b = [110010001000] 일 것이다. 이 예에서 볼 수 있는 바와 같이, 2진 예측 벡터 b 는 예측자 팔레트 버퍼 (210) 에서의 제 1, 제 2, 제 5, 및 제 9 인덱스들에 대응하는 1 의 값을 갖는 플래그들을 포함한다. 즉, 예측자 팔레트 버퍼 (210) 에서의 제 1, 제 2, 제 5, 및 제 9 엔트리들은 오직 현재의 팔레트 (220) 에 대하여 재이용된 엔트리들이다. 현재의 팔레트 (220) 에서의 엔트리 인덱스들 5 내지 8 에 대하여, 팔레트-기반 인코딩 유닛 (122) 은 (예컨대, 명시적 시그널링 또는 또 다른 예측 기법을 이용하여) 인코딩된 비디오 비트스트림으로 팔레트 엔트리 값들을 시그널링하도록 구성될 수도 있다.
이 개시물의 하나 이상의 기법들에 따르면, 비디오 인코더 (20) 는 인코딩된 비디오 비트스트림으로 팔레트를 시그널링하기 위하여 필요한 데이터의 양을 감소시키기 위하여, 2진 예측자 벡터 b 를 인코딩하거나 일반적으로 인코딩하도록 구성될 수도 있다. 도 4 에서 도시된 바와 같이, 2진 예측 벡터 압축 유닛 (209) 은 인코딩된 2진 예측 벡터 (215) 를 생성하고 시그널링하도록 구성될 수도 있다. 그러나, 이 개시물의 2진 예측 벡터 압축 기법들은 도 2 에서의 엔트로피 인코딩 유닛 (118) 을 포함하는, 비디오 인코더 (20) 의 다른 구조들에서 구현될 수도 있다는 것이 이해되어야 한다.
개시물의 하나의 예에서, 2진 예측 벡터 압축 유닛 (209) 은 런-길이 기반 인코딩 기법들을 이용하여 2진 예측 벡터를 인코딩하도록 구성될 수도 있다. 예를 들어, 2진 예측 벡터 압축 유닛 (209) 은 지수-골롬 코드를 이용하여 2진 예측 벡터에서의 '1들' 사이의 연속적 '0들' 의 수를 시그널링함으로써 2진 예측 벡터를 인코딩하도록 구성될 수도 있다. 예로서, b = [110010001000] 으로 다시 가정한다. 이 예에서는, 도 6 에서 도시된 바와 같이, 2진 예측 벡터 (즉, b ) 가 다음으로서 표현될 수 있다: '제로 연속적 0들'-'1'-'제로 연속적 0들'-'1'-'2 개의 연속적 0들'-'1'-'3 개의 연속적 0들'-'1'- 및 '4 개의 연속적 0들'. 그것은 최후의 '연속적 0' 그룹을 제외하고는, b i ∈ {0,1} 인 것으로 알려져 있으므로, 각각의 '연속적 0' 그룹은 '1' 을 선행해야 한다. 그러므로, 2진 예측 벡터 압축 유닛 (209) 은 2진 예측 벡터 b 를, 런-길이 시퀀스 '0-0-2-3-4' 로서 표현될 수 있는 '제로 연속적 0'-'제로 연속적 0'-'2 개의 연속적 0'-'3 개의 연속적 0'-'4 개의 연속적 0' 으로서 표현하기 위하여 제로-기반 런-길이 코딩 기법들을 이용할 수도 있다.
런-길이 기반 시그널링에 관련된 이 개시물의 하나 이상의 예들에 따르면, 런-길이 시퀀스를 코딩하기 위하여, 골롬-라이스 코드, 임의의 차수의 지수-골롬 코드, 절단 지수-골롬 코드, 절단-라이스 코드, 또는 절단된 2진화들을 포함하는 임의의 다른 2진화들이 이용될 수도 있다. 하나의 예에서, 2진 예측 벡터 압축 유닛 (209) 은 0 번째 차수의 지수-골롬 코드를 런-길이 코딩 기법으로서 이용한다.
절단된 2진화에 대하여, 2진 벡터의 종료부로 이동할 시에, 최대 가능한 런 값은 벡터 내의 위치에 따라 벡터 크기로부터 0 으로 감소되므로, 최대 심볼은 2진 벡터에서의 '1' 의 위치 및 2진 벡터 크기에 따라 런의 최대 가능한 값일 수 있다. 예를 들어, 최대 심볼은 2진 벡터 길이, 또는 2진 벡터 길이 마이너스 (minus) 런이 그로부터 카운팅되고 있는 '1' 의 위치일 수 있다. 다시 말해서, 그것은 2진 벡터의 종료부로부터 측정된 나머지 길이이다. 특정한 크기, 예컨대, 13 의 2진 벡터 b 를 갖는 상기 예에 대하여, 런-길이 시퀀스 '0-0-2-3-4' 는 절단된 2진화 '0[13]-0[12]-2[11]-3[8]-4[4]' 로 코딩될 수 있고, 여기서, 최대 심볼은 괄호들에서 제공된다.
또한, 일부 예들에서, 2진화는 2진 벡터에서의 엘리먼트 (0 또는 1) 의 위치 또는 인덱스에 종속적일 수도 있다. 특정한 예로서, 위치가 어떤 임계치보다 더 작을 경우, 하나의 타입의 2진화가 이용되고; 그렇지 않을 경우에는, 또 다른 타입의 2진화가 적용된다. 일부 예들에서, 2진화 타입은 지수-골롬 코드와 같은, 상이한 2진화 코드들 또는 상이한 차수를 갖는 동일한 코드 계열일 수 있다.
하나의 예에서, 임계치는 이전의 블록 또는 이전의 팔레트 코딩된 블록으로부터의 팔레트 길이일 수도 있다. 또 다른 예에서, 임계치는 일부 디폴트 값으로 고정될 수 있거나, 블록, 슬라이스, 픽처, 또는 다른 것마다 시그널링될 수 있다. 대응하는 기법은 런 값들을 코딩하기 위한 CABAC 컨텍스트를 정의하기 위하여 임의적으로 이용될 수도 있다는 것이 인식되어야 한다. 추가적으로, 팔레트-기반 인코딩 유닛 (122) (도 2 참조) 은 시그널링된 '1' 엘리먼트들의 수 (즉, 현재의 팔레트 (220) 에 대하여 재이용되는 것으로서 표시된 예측자 팔레트 버퍼 (210) 로부터의 팔레트 엔트리들의 수) 가 최대 가능한 수에 도달할 때에 런-길이 시그널링을 정지하도록 구성될 수도 있다. 일부 예들에서, 최대 가능한 수는 최대 가능한 팔레트 크기이다.
이 개시물의 일부 예들은 2진 예측 벡터 b 를 표시하는 런-길이 시퀀스의 종료부 위치 코딩에 관한 것이다. 이 개시물의 하나 이상의 예들에서, 2진 예측 벡터 압축 유닛 (209) 은 2진 예측 벡터의 종료부 위치를 코딩하기 위하여 예약된 런-길이 L 을 이용하여 2진 예측 벡터 b 를 인코딩하도록 구성될 수도 있다. 하나의 예에서, L =1 은 예약된 런-길이로서 이용된다. 비디오 인코더 (20) 에서, 런-길이가 L 이상일 경우, 2진 예측 벡터 압축 유닛 (209) 은 1 을 런-길이에 추가하도록 구성된다. 실제적인 런-길이가 L 보다 작을 경우, 2진 예측 벡터 압축 유닛 (209) 은 런-길이를 그대로 시그널링하도록 구성된다. 2진 예측 벡터 압축 유닛 (209) 은 예약된 런-길이 L 로 종료부 위치 런-길이를 시그널링할 수도 있다.
마찬가지로, 비디오 디코더 (30) 에서, 런-길이의 디코딩된 값이 L 보다 더 클 경우, 1 이 실제적인 런-길이로부터 감산된다. 디코딩된 값 또는 런-길이가 L 보다 더 작을 경우, 디코딩된 값은 실제적인 런-길이로서 이용된다. 디코딩된 값이 L 과 동일할 경우, 2진 예측 벡터 b 에서의 나머지 위치들은 모두 0 이다. 이 때문에, 디코딩된 값이 L 과 동일할 경우, 더 많은 런 시그널링이 필요한 것은 아니다.
상기와 동일한 예 (즉, b = [110010001000]) 를 이용하고 L =1 인 것으로 가정하면, 2진 예측 벡터 압축 유닛 (209) 은 도 6 의 런-길이 시퀀스 '0-0-2-3-4' 를 '0-0-3-4-1' 로서 시그널링하도록 구성된다. 그 다음으로, 상기 규칙들을 적용하면, 비디오 디코더 (30) 는 런-길이 시퀀스를 '0-0-2-3-종료부' 로서 복원하도록 구성될 수도 있다. 즉, 0 런-길이 시퀀스들의 양자가 L =1 의 예약된 런-길이 값보다 더 작으므로, 0 의 최초의 런-길이 값은 0 으로서 디코딩되고, 0 의 다음의 런-길이 시퀀스는 0 으로서 디코딩된다. 다음의 런-길이 시퀀스는 3 이고, 이와 같이, 비디오 디코더 (30) 는 3 의 수신된 값이 L =1 의 예약된 런-길이 값보다 더 크므로, 2 를 획득하기 위하여 3 의 값으로부터 1 을 감산하도록 구성될 것이다. 마찬가지로, 비디오 디코더 (30) 는 4 의 수신된 값이 L =1 의 예약된 런-길이 값보다 더 크므로, 다음의 런-길이 시퀀스에 대하여 3 을 획득하기 위하여 4 의 수신된 값으로부터 1 을 감산하도록 구성될 것이다. 최종적으로, 최후의 수신된 런-길이 값 1 은 L =1 의 예약된 런-길이 값과 동일하다. 따라서, 비디오 디코더 (30) 는 '1' 의 추가의 값들이 2진 예측 벡터에서 존재하지 않는 것으로 결정할 수도 있다.
도 7 은 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 의 예를 도시하는 블록도이다. 팔레트-기반 디코딩 유닛 (165) 은 도 4 의 팔레트-기반 인코딩 유닛 (122) 과 상반적인 방식으로 수행하도록 구성될 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에서의 각각의 픽셀에 대하여, 팔레트에 대한 엔트리들이 현재의 블록에서의 픽셀들에 대하여 이용될 것인지 아닌지 여부를 표시하는 맵 (312) 을 수신하도록 구성될 수도 있다. 게다가, 맵 (312) 은 어느 팔레트 엔트리들이 소정의 픽셀에 대하여 이용되어야 하는지를 추가로 표시할 수도 있다. 맵 유닛 (302) 은 디코딩된 비디오 데이터 (314) 를 생성하기 위하여, 맵 (312) 및 팔레트 생성 유닛 (304) 에 의해 생성된 팔레트를 이용하여 비디오 데이터의 현재의 블록을 디코딩할 수도 있다.
이 개시물의 기법들에 따르면, 팔레트-기반 디코딩 유닛 (165) 은 또한, 인코딩된 2진 예측 벡터 (316) 를 수신할 수도 있다. 위에서 논의된 바와 같이, 2진 예측 벡터 (316) 는 2진 예측 벡터에서 제로 값들의 런을 표시하는 런-길이 시퀀스를 인코딩하는 런-길이 코딩 기법을 이용하여 인코딩될 수도 있다. 2진 예측 벡터 압축해제 유닛 (306) 은 도 4 내지 도 6 을 참조하여 위에서 설명된 런-길이 코딩 기법들의 임의의 조합을 이용하여 인코딩된 2진 예측 벡터 (316) 를 디코딩하도록 구성될 수도 있다. 일단 2진 예측 벡터가 2진 예측 벡터 압축해제 유닛 (306) 에 의해 복원되면, 팔레트 생성 유닛 (304) 은 2진 예측 벡터 및 예측자 팔레트 버퍼 (310) 내에 저장된 이전에 이용된 팔레트 엔트리들에 기초하여 비디오 데이터의 현재의 블록에 대한 팔레트를 생성할 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 팔레트-기반 인코딩 유닛 (122) (도 2 참조) 이 이전에 이용된 팔레트 엔트리들을 예측자 팔레트 버퍼 (210) 내에 저장하였던 것과 동일한 방식으로 이전에 이용된 팔레트 엔트리들을 예측자 팔레트 버퍼 (310) 내에 저장하도록 구성될 수도 있다.
개시물의 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 CABAC 컨텍스트를 이용하여, palette_num_signalled_entries 신택스 엘리먼트와 같은, 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 신택스 엘리먼트의 최초의 빈을 디코딩하도록 구성될 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 다른 디코딩 기법들을 이용하여 palette_num_signalled_entries 의 다른 빈들을 디코딩할 수도 있다. 개시물의 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 palette_num_signalled_entries 신택스 엘리먼트의 최초의 빈을 디코딩하기 위하여 하나를 초과하는 컨텍스트를 이용하도록 구성될 수도 있다. 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 디코딩되고 있는 현재의 비디오 블록의 블록 크기에 기초하여, 및/또는 다른 신택스 엘리먼트들의 값에 기초하여 컨텍스트들을 결정하도록 구성될 수도 있다.
개시물의 하나의 예에 따르면, 팔레트-기반 디코딩 유닛 (165) 은 명시적으로 시그널링되는 현재의 팔레트에서의 엔트리들의 수를 표시하는 제 1 신택스 엘리먼트의 최초의 빈을 결정하도록 구성될 수도 있다. 비디오 디코더 (30) 는 제 1 신택스 엘리먼트를 포함하는 비트스트림을 디코딩하도록 추가로 구성될 수도 있다. 비트스트림은 또한, 팔레트 공유 모드를 표시하는 제 2 신택스 엘리먼트를 포함하지 않을 수도 있다. 일부 예들에서, 팔레트-기반 디코딩 유닛 (165) 은 컨텍스트-적응 2진 산술 코딩을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 디코딩하도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 디코딩 유닛 (165) 은 하나 이상의 컨텍스트들을 이용하여 제 1 신택스 엘리먼트의 최초의 빈을 디코딩하도록 구성될 수도 있다. 하나 이상의 컨텍스트들을 이용하는 일부 예들에서, 하나 이상의 컨텍스트들은 팔레트 코딩 엔트리들의 예측된 수 및 블록 크기 중의 적어도 하나에 기초할 수도 있다.
개시물의 또 다른 예에서는, palette_num_signalled_entries 의 코드워드 길이가 32 비트들보다 더 길어지는 것을 회피하기 위하여, 규범적 시맨틱 변경들이 현재의 팔레트 코딩 기법들에 대해 행해지는 것이 제안된다. 예를 들어, palette_max_size 와 같은, 최대 허용된 팔레트 크기를 특정하는 신택스 엘리먼트, 및 palette_max_predictor_size 와 같은, 최대 예측자 팔레트 크기를 특정하는 신택스 엘리먼트의 실현가능한 값들이 임계치에 의해 캡핑될 수도 있다. 이러한 임계치는 미리 결정될 수도 있고, 팔레트-기반 디코딩 유닛 (165) 에 의해 액세스가능한 메모리 (예컨대, 도 3 에서의 비디오 데이터 메모리 (148)) 내에 저장될 수도 있다. 구체적으로, palette_max_size 에 대하여, 값은 0 으로부터 T1 까지의 임의의 값일 수도 있고, 여기서, T1 은 임계치이다. 존재하지 않을 때, 팔레트-기반 디코딩 유닛 (165) 은 palette_max_size 의 값을 0 인 것으로 추론하도록 구성될 수도 있다. 또한, palette_max_predictor_size 에 대하여, 값은 0 으로부터 T2 까지의 임의의 값일 수도 있고, 여기서, T2 는 임계치이다. 존재하지 않을 때, 팔레트-기반 디코딩 유닛 (165) 은 palette_max_predictor_size 의 값을 0 인 것으로 추론하도록 구성될 수도 있다.
하나의 예에서, T1 은 4096 과 동일하고, T2 는 8192 와 동일하다. 또 다른 예에서, T1 은 4095 와 동일하고, T2 는 4095 와 동일하다. 또 다른 예에서, T1 은 4095 와 동일하고, T2 는 8191 과 동일하다.
또 다른 예로서, 이 개시물은 palette_max_size 의 값이 최대 크기 코딩 유닛에서의 픽셀들의 수와 동일하다는 것을 제안한다. 이러한 값은 미리 결정될 수도 있고, 팔레트-기반 디코딩 유닛 (165) 에 의해 액세스가능한 메모리 내에 저장될 수도 있다. 일부 예들에서, palette_max_predictor_size 의 값은 K * palette_max_size 이하일 수도 있고, 여기서, K 는 양의 상수이다. 일부 예들에서, K = 2 이다.
또 다른 예에서, (예컨대, 2진 예측 벡터 압축해제 유닛 (306) 또는, 도 3 의 엔트로피 디코딩 유닛 (150) 과 같은, 비디오 디코더 (30) 의 또 다른 구조적 컴포넌트를 이용하는) 도 3 의 팔레트-기반 디코딩 유닛 (165) 은 골롬 코드 계열 (예컨대, 골롬-라이스 코드, 지수 골롬 코드, 절단 라이스 코드, 1진 코드 등) 로부터의 하나 이상의 디코딩 기법들을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 디코딩하도록 구성될 수도 있다. 개시물의 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 절단된 라이스 및 지수 골롬 코드의 연접을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 디코딩하도록 구성된다.
또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 골롬 코드 계열의 절단된 버전 (예컨대, 절단된 골롬 라이스 코드, 절단된 지수 골롬 코드, 절단된 절단 라이스 코드, 절단된 1진 코드 등) 을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 디코딩하도록 구성될 수도 있다. 개시물의 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 paletteRun 신택스 엘리먼트를 코딩하기 위하여 이용된 동일한 코드를 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 디코딩하도록 구성될 수도 있다. 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 계수 코딩에서 coeff_abs_level_remaining 신택스 엘리먼트를 디코딩하하는 방법 (예컨대, 절단 라이스 (TR) 및 지수 골롬 코드의 연접) 을 이용하여 palette_num_signalled_entries 신택스 엘리먼트의 값을 디코딩하도록 구성될 수도 있다. 이 예에 따르면, TR 파라미터는 0 인 것으로 선호된다.
또 다른 예에서는, palette_num_signalled_entries 가 블록에서의 픽셀들의 수와 동일하다는 비트스트림에 관한 한정을 부과하는 것이 제안된다. 즉, 팔레트-기반 디코딩 유닛 (165) 은 palette_num_signalled_entries 신택스 엘리먼트의 가능한 값을 현재 코딩된 블록에서의 픽셀들의 수에 의해 제한하도록 구성될 수도 있다. 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 palette_num_signalled_entries 의 가능한 값을 특정한 픽처의 최대 가능한 블록에서의 픽셀들의 수 (예컨대, 특정한 비디오 코딩 표준에 의해 정의된 큰 블록 크기) 에 의해 제한하도록 구성될 수도 있다.
또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀이고 현재의 픽셀 상부에서 현재의 픽셀과 이웃하는 픽셀이 이용가능할 경우, palette_run_type_flag 와 같은, 런 타입을 표시하는 신택스 엘리먼트의 값을 추론하도록 구성될 수도 있다. 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하도록 구성될 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 추가로 결정할 수도 있다. 현재의 픽셀이 스캔 순서에서 라인에서의 최초의 픽셀인 것으로 결정하는 것과, 현재의 픽셀의 상부에 위치된 이웃하는 픽셀이 이용가능한 것으로 결정하는 것에 응답하여, 팔레트-기반 디코딩 유닛 (165) 은 비트스트림에서 제 1 신택스 엘리먼트의 값을 추론하는 것으로서, 여기서, 제 1 신택스 엘리먼트는 런 타입을 표시하는, 상기 제 1 신택스 엘리먼트의 값을 추론하고, 비트스트림의 나머지를 인코딩하도록 추가로 구성될 수도 있다.
도 8 은 개시물의 기법들에 따라 일 예의 비디오 인코딩 방법을 예시하는 플로우차트이다. 도 8 의 기법들은 팔레트-기반 인코딩 유닛 (122) 및/또는 엔트로피 인코딩 유닛 (118) (도 2 참조) 을 포함하는, 비디오 인코더 (20) 의 하나 이상의 하드웨어 구조들에 의해 구현될 수도 있다.
개시물의 하나의 예에서, 비디오 인코더 (20) 는 팔레트-기반 코딩 모드 및 팔레트를 이용하여 비디오 데이터의 블록을 인코딩하고 (800), 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하도록 (802) 구성될 수도 있다. 비디오 인코더 (20) 는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 인코딩하고 (804), 인코딩된 비디오 비트스트림 내에 복수의 신택스 엘리먼트들을 포함하도록 (806) 추가로 구성될 수도 있다.
개시물의 하나의 예에서, 제 1 신택스 엘리먼트는 palette_num_signalled_entries 신택스 엘리먼트이다. 개시물의 또 다른 예에서, 복수의 신택스 엘리먼트들은 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 팔레트 값들을 포함한다.
개시물의 하나의 예에서, 비트들의 미리 결정된 최대 수는 32 이고, 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 코드이다. 개시물의 또 다른 예에서, 비트들의 미리 결정된 최대 수는 32 이고, 하나 이상의 골롬 코드들은 절단된 라이스 코드 및 지수 골롬 코드의 연접이다.
개시물의 또 다른 예에서, 제 1 신택스 엘리먼트의 최대 값은 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트, 및 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트에 대하여 정의된다. 이 예에서, 비디오 인코더 (20) 는 제 2 신택스 엘리먼트를 0 부터 제 1 임계치까지의 값인 것으로 정의하고, 제 3 신택스 엘리먼트를 0 부터 제 2 임계치까지의 값인 것으로 정의하도록 추가로 구성될 수도 있다. 하나의 예에서, 제 1 임계치는 4095 또는 4096 중의 하나이고, 제 2 임계치는 4095, 8191, 또는 8192 중의 하나이다.
개시물의 또 다른 예에서, 제 1 신택스 엘리먼트의 최대 값은 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트, 및 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트에 대하여 정의된다. 이 예에서, 비디오 인코더 (20) 는 제 2 신택스 엘리먼트를 인코딩된 비디오 비트스트림에서 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하고, 제 3 신택스 엘리먼트를 K * 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하도록 추가로 구성될 수도 있고, 여기서, K 는 양의 상수이다. 하나의 예에서, K 는 2 이다.
개시물의 또 다른 예에서, 비디오 인코더 (20) 는 현재의 픽셀이 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 시그널링하고, 현재의 픽셀이 스캔 순서에서 최초의 픽셀이고 이전의 픽셀/샘플이 이용가능한 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 시그널링하지 않도록 추가로 구성될 수도 있다.
도 9 는 개시물의 기법들에 따라 일 예의 비디오 디코딩 방법을 예시하는 플로우차트이다. 도 9 의 기법들은 팔레트-기반 디코딩 유닛 (165) 및/또는 엔트로피 디코딩 유닛 (150) (도 3 참조) 을 포함하는, 비디오 디코더 (30) 의 하나 이상의 하드웨어 구조들에 의해 구현될 수도 있다.
개시물의 하나의 예에서, 비디오 디코더 (30) 는 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 것으로서, 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하고 (900), 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 것으로서, 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 여기서, 제 1 신택스 엘리먼트는 인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하도록 (902) 구성될 수도 있다. 비디오 디코더 (30) 는 하나 이상의 골롬 코드들을 이용하여 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 복수의 신택스 엘리먼트들을 디코딩하고 (904), 디코딩된 복수의 신택스 엘리먼트들에 기초하여 팔레트를 재구성하고 (906), 재구성된 팔레트를 이용하여 비디오 데이터의 블록을 디코딩하도록 (908) 추가로 구성될 수도 있다. 비디오 디코더 (30) 는 비디오 데이터의 디코딩된 블록을 디스플레이하도록 추가로 구성될 수도 있다.
개시물의 하나의 예에서, 제 1 신택스 엘리먼트는 palette_num_signalled_entries 신택스 엘리먼트이다. 개시물의 또 다른 예에서, 복수의 신택스 엘리먼트들은 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 팔레트 값들을 포함한다.
개시물의 하나의 예에서, 비트들의 미리 결정된 최대 수는 32 이고, 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 코드이다. 개시물의 또 다른 예에서, 비트들의 미리 결정된 최대 수는 32 이고, 하나 이상의 골롬 코드들은 절단된 라이스 코드 및 지수 골롬 코드의 연접이다.
개시물의 또 다른 예에서, 제 1 신택스 엘리먼트의 최대 값은 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트, 및 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트에 대하여 정의된다. 이 예에서, 비디오 디코더 (30) 는 제 2 신택스 엘리먼트를 0 부터 제 1 임계치까지의 값인 것으로 정의하고, 제 3 신택스 엘리먼트를 0 부터 제 2 임계치까지의 값인 것으로 정의하도록 추가로 구성될 수도 있다. 하나의 예에서, 제 1 임계치는 4095 또는 4096 중의 하나이고, 제 2 임계치는 4095, 8191, 또는 8192 중의 하나이다.
개시물의 또 다른 예에서, 제 1 신택스 엘리먼트의 최대 값은 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트, 및 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트에 대하여 정의된다. 이 예에서, 비디오 디코더 (30) 는 제 2 신택스 엘리먼트를 인코딩된 비디오 비트스트림에서 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하고, 제 3 신택스 엘리먼트를 K * 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하도록 추가로 구성될 수도 있고, 여기서, K 는 양의 상수이다. 하나의 예에서, K 는 2 이다.
개시물의 또 다른 예에서, 비디오 디코더 (30) 는 현재의 픽셀이 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 수신하고, 현재의 픽셀이 스캔 순서에서 최초의 픽셀인 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 추론하도록 추가로 구성될 수도 있다.
기법들의 다양한 양태들의 특정 조합들이 위에서 설명되지만, 이 조합들은 이 개시물에서 설명된 기법들의 예들을 단지 예시하기 위하여 제공된다. 따라서, 이 개시물의 기법들은 이 예의 조합들에 제한되지 않아야 하고, 이 개시물에서 설명된 기법들의 다양한 양태들의 임의의 상상가능한 조합을 망라할 수도 있다.
하나 이상의 예들에서는, 설명된 기능들이 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현될 경우, 기능들은 하나 이상의 명령들 또는 코드로서, 컴퓨터-판독가능 매체 상에 저장되거나 컴퓨터-판독가능 매체를 통해 송신될 수도 있고, 하드웨어-기반 프로세싱 유닛에 의해 실행될 수도 있다. 컴퓨터-판독가능 매체들은 데이터 저장 매체들과 같은 유형의 매체에 대응하는 컴퓨터-판독가능 저장 매체들, 또는 예컨대, 통신 프로토콜에 따라 하나의 장소로부터 또 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들을 포함할 수도 있다. 이러한 방식으로, 컴퓨터-판독가능 매체들은 일반적으로 (1) 비-일시적 유형의 컴퓨터-판독가능 저장 매체들, 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체들은 이 개시물에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터-판독가능 매체를 포함할 수도 있다.
제한이 아닌 예로서, 이러한 컴퓨터-판독가능 저장 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 저장하기 위하여 이용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속은 컴퓨터-판독가능 매체로 적절하게 칭해진다. 예를 들어, 동축 케이블, 광섬유 케이블, 트위스트 페어 (twisted pair), 디지털 가입자 회선 (digital subscriber line; DSL), 또는 적외선, 라디오 (radio), 및 마이크로파 (microwave) 와 같은 무선 기술들을 이용하여 웹사이트, 서버, 또는 다른 원격 소스로부터 명령들이 송신될 경우, 동축 케이블, 광섬유 케이블, 트위스트 페어, DSL, 또는 적외선, 라디오, 및 마이크로파와 같은 무선 기술들은 매체의 정의 내에 포함된다. 그러나, 컴퓨터-판독가능 저장 매체들 및 데이터 저장 매체들은 접속들, 반송파들, 신호들, 또는 다른 일시적 매체 (transient medium) 들을 포함하는 것이 아니라, 그 대신에, 비-일시적인, 유형의 저장 매체들에 관한 것이라는 것이 이해되어야 한다. 본원에서 이용된 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (compact disc; CD), 레이저 디스크 (laser disc), 광학 디스크 (optical disc), 디지털 다기능 디스크 (digital versatile disc; DVD), 플로피 디스크 (floppy disk) 및 블루레이 디스크 (Blu-ray disc) 를 포함하고, 여기서 디스크 (disk) 들은 통상 데이터를 자기적으로 재생하는 반면, 디스크 (disc) 들은 데이터를 레이저들로 광학적으로 재생한다. 상기의 조합들은 컴퓨터-판독가능 매체들의 범위 내에 또한 포함되어야 한다.
명령들은 하나 이상의 디지털 신호 프로세서 (digital signal processor; DSP) 들, 범용 마이크로프로세서들, 주문형 집적 회로 (application specific integrated circuit; ASIC) 들, 필드 프로그래밍가능한 게이트 어레이 (field programmable gatec array; FPGA) 들, 또는 다른 등가의 통합된 또는 개별 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 따라서, 본원에서 이용된 바와 같은 용어 "프로세서" 는 상기한 구조, 또는 본원에서 설명된 기법들의 구현을 위해 적당한 임의의 다른 구조 중의 임의의 것을 지칭할 수도 있다. 게다가, 일부 양태들에서는, 본원에서 설명된 기능성이 인코딩 및 디코딩을 위해 구성되거나 조합된 코덱 내에 통합된 전용 하드웨어 및/또는 소프트웨어 모듈들 내에서 제공될 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
이 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC 들의 세트 (예를 들어, 칩셋) 를 포함하는 광범위한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위하여 이 개시물에서 설명되어 있지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 요구하지는 않는다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛들은 코덱 하드웨어 유닛 내에 조합될 수도 있거나, 적당한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서들을 포함하는 상호동작하는 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
개시물의 다양한 예들이 설명되었다. 설명된 시스템들, 동작들, 또는 기능들의 임의의 조합이 구상된다. 이들 및 다른 예들은 다음의 청구항들의 범위 내에 있다.

Claims (46)

  1. 비디오 데이터를 디코딩하는 방법으로서,
    비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 단계로서, 상기 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하는 단계;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 단계로서, 상기 복수의 신택스 엘리먼트들은 상기 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 가지며, 상기 제 1 신택스 엘리먼트는 인코딩된 상기 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 (Golomb) 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하는 단계;
    상기 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 상기 복수의 신택스 엘리먼트들을 디코딩하는 단계;
    디코딩된 상기 복수의 신택스 엘리먼트들에 기초하여 상기 팔레트를 재구성하는 단계; 및
    재구성된 상기 팔레트를 이용하여 상기 비디오 데이터의 블록을 디코딩하는 단계를 포함하는, 비디오 데이터를 디코딩하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 신택스 엘리먼트는 num_signalled_palette_entries 신택스 엘리먼트인, 비디오 데이터를 디코딩하는 방법.
  3. 제 1 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 (exponential Golomb) 코드인, 비디오 데이터를 디코딩하는 방법.
  4. 제 1 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 절단된 라이스 (Rice) 코드 및 지수 골롬 코드의 연접 (concatenation) 인, 비디오 데이터를 디코딩하는 방법.
  5. 제 1 항에 있어서,
    상기 복수의 신택스 엘리먼트들은 상기 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 상기 팔레트 값들을 포함하는, 비디오 데이터를 디코딩하는 방법.
  6. 제 1 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 상기 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 상기 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되는, 비디오 데이터를 디코딩하는 방법.
  7. 제 1 항에 있어서,
    상기 제 1 임계치는 4095 또는 4096 중의 하나이고, 상기 제 2 임계치는 4095, 8191, 또는 8192 중의 하나인, 비디오 데이터를 디코딩하는 방법.
  8. 제 1 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되고, 상기 방법은,
    상기 제 2 신택스 엘리먼트를 상기 인코딩된 비디오 비트스트림에서 상기 비디오 데이터의 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하는 단계; 및
    상기 제 3 신택스 엘리먼트를 K * 상기 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하는 단계를 더 포함하고, K 는 양의 상수이고 * 는 승산 연산을 표시하는, 비디오 데이터를 디코딩하는 방법.
  9. 제 8 항에 있어서,
    K 는 2 인, 비디오 데이터를 디코딩하는 방법.
  10. 제 1 항에 있어서,
    상기 비디오 데이터의 디코딩된 블록을 디스플레이하는 단계를 더 포함하는, 비디오 데이터를 디코딩하는 방법.
  11. 제 1 항에 있어서,
    상기 비디오 데이터의 블록의 현재의 픽셀이 상기 비디오 데이터의 블록의 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 수신하는 단계; 및
    상기 현재의 픽셀이 상기 스캔 순서에서 최초의 픽셀인 경우에 팔레트 런 타입을 표시하는 것으로서 상기 신택스 엘리먼트를 추론하는 단계를 더 포함하는, 비디오 데이터를 디코딩하는 방법.
  12. 비디오 데이터를 디코딩하도록 구성된 장치로서,
    인코딩된 비디오 비트스트림을 저장하도록 구성된 메모리; 및
    비디오 디코더를 포함하고,
    상기 비디오 디코더는,
    비디오 데이터의 블록을 상기 인코딩된 비디오 비트스트림으로 수신하는 것으로서, 상기 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 상기 인코딩된 비디오 비트스트림으로 수신하고;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하는 것으로서, 상기 복수의 신택스 엘리먼트들은 상기 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 가지며, 상기 제 1 신택스 엘리먼트는 인코딩된 상기 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하고;
    상기 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 상기 복수의 신택스 엘리먼트들을 디코딩하고;
    디코딩된 상기 복수의 신택스 엘리먼트들에 기초하여 상기 팔레트를 재구성하고; 그리고
    재구성된 상기 팔레트를 이용하여 상기 비디오 데이터의 블록을 디코딩하도록 구성되는, 비디오 데이터를 디코딩하도록 구성된 장치.
  13. 제 12 항에 있어서,
    상기 제 1 신택스 엘리먼트는 num_signalled_palette_entries 신택스 엘리먼트인, 비디오 데이터를 디코딩하도록 구성된 장치.
  14. 제 12 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 코드인, 비디오 데이터를 디코딩하도록 구성된 장치.
  15. 제 12 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 절단된 라이스 코드 및 지수 골롬 코드의 연접인, 비디오 데이터를 디코딩하도록 구성된 장치.
  16. 제 12 항에 있어서,
    상기 복수의 신택스 엘리먼트들은 상기 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 상기 팔레트 값들을 포함하는, 비디오 데이터를 디코딩하도록 구성된 장치.
  17. 제 12 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 상기 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 상기 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되는, 비디오 데이터를 디코딩하도록 구성된 장치.
  18. 제 12 항에 있어서,
    상기 제 1 임계치는 4095 또는 4096 중의 하나이고, 상기 제 2 임계치는 4095, 8191, 또는 8192 중의 하나인, 비디오 데이터를 디코딩하도록 구성된 장치.
  19. 제 12 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되고, 상기 비디오 디코더는,
    상기 제 2 신택스 엘리먼트를 상기 인코딩된 비디오 비트스트림에서 상기 비디오 데이터의 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하고; 그리고
    상기 제 3 신택스 엘리먼트를 K * 상기 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하도록 추가로 구성되고, K 는 양의 상수이고 * 는 승산 연산을 표시하는, 비디오 데이터를 디코딩하도록 구성된 장치.
  20. 제 19 항에 있어서,
    K 는 2 인, 비디오 데이터를 디코딩하도록 구성된 장치.
  21. 제 12 항에 있어서,
    상기 비디오 데이터의 디코딩된 블록을 디스플레이하도록 구성된 디스플레이를 더 포함하는, 비디오 데이터를 디코딩하도록 구성된 장치.
  22. 제 12 항에 있어서,
    상기 비디오 디코더는,
    상기 비디오 데이터의 블록의 현재의 픽셀이 상기 비디오 데이터의 블록의 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 수신하고; 그리고
    상기 현재의 픽셀이 상기 스캔 순서에서 최초의 픽셀인 경우에 팔레트 런 타입을 표시하는 것으로서 상기 신택스 엘리먼트를 추론하도록 추가로 구성되는, 비디오 데이터를 디코딩하도록 구성된 장치.
  23. 비디오 데이터를 디코딩하도록 구성된 장치로서,
    비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하기 위한 수단으로서, 상기 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하기 위한 수단;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하기 위한 수단으로서, 상기 복수의 신택스 엘리먼트들은 상기 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 가지며, 상기 제 1 신택스 엘리먼트는 인코딩된 상기 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하기 위한 수단;
    상기 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 상기 복수의 신택스 엘리먼트들을 디코딩하기 위한 수단;
    디코딩된 상기 복수의 신택스 엘리먼트들에 기초하여 상기 팔레트를 재구성하기 위한 수단; 및
    재구성된 상기 팔레트를 이용하여 상기 비디오 데이터의 블록을 디코딩하기 위한 수단을 포함하는, 비디오 데이터를 디코딩하도록 구성된 장치.
  24. 명령들을 저장하는 비일시적 컴퓨터-판독가능 저장 매체로서,
    상기 명령들은, 실행될 경우, 비디오 데이터를 디코딩하도록 구성된 디바이스의 하나 이상의 프로세서들로 하여금,
    비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하게 하는 것으로서, 상기 비디오 데이터의 블록은 팔레트-기반 코딩 모드를 이용하여 인코딩된, 상기 비디오 데이터의 블록을 인코딩된 비디오 비트스트림으로 수신하게 하고;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 팔레트를 표시하는 복수의 신택스 엘리먼트들을 수신하게 하는 것으로서, 상기 복수의 신택스 엘리먼트들은 상기 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하고, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 가지며, 상기 제 1 신택스 엘리먼트는 인코딩된 상기 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록, 하나 이상의 골롬 코드들을 이용하여 인코딩되는, 상기 복수의 신택스 엘리먼트들을 수신하게 하고;
    상기 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 디코딩하는 것을 포함하는, 상기 복수의 신택스 엘리먼트들을 디코딩하게 하고;
    디코딩된 상기 복수의 신택스 엘리먼트들에 기초하여 상기 팔레트를 재구성하게 하고; 그리고
    재구성된 상기 팔레트를 이용하여 상기 비디오 데이터의 블록을 디코딩하게 하는, 명령들을 저장하는 비일시적 컴퓨터-판독가능 저장 매체.
  25. 비디오 데이터를 인코딩하는 방법으로서,
    팔레트 및 팔레트-기반 코딩 모드를 이용하여 비디오 데이터의 블록을 인코딩하는 단계;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 상기 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 단계로서, 상기 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하는 단계;
    인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 인코딩하는 단계로서, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 갖는, 상기 제 1 신택스 엘리먼트를 인코딩하는 단계; 및
    상기 인코딩된 비디오 비트스트림 내에 상기 복수의 신택스 엘리먼트들을 포함하는 단계를 포함하는, 비디오 데이터를 인코딩하는 방법.
  26. 제 25 항에 있어서,
    상기 제 1 신택스 엘리먼트는 num_signalled_palette_entries 신택스 엘리먼트인, 비디오 데이터를 인코딩하는 방법.
  27. 제 25 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 코드인, 비디오 데이터를 인코딩하는 방법.
  28. 제 25 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 절단된 라이스 코드 및 지수 골롬 코드의 연접인, 비디오 데이터를 인코딩하는 방법.
  29. 제 25 항에 있어서,
    상기 복수의 신택스 엘리먼트들은 상기 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 상기 팔레트 값들을 포함하는, 비디오 데이터를 인코딩하는 방법.
  30. 제 25 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 상기 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 상기 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되는, 비디오 데이터를 인코딩하는 방법.
  31. 제 25 항에 있어서,
    상기 제 1 임계치는 4095 또는 4096 중의 하나이고, 상기 제 2 임계치는 4095, 8191, 또는 8192 중의 하나인, 비디오 데이터를 인코딩하는 방법.
  32. 제 25 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되고, 상기 방법은,
    상기 제 2 신택스 엘리먼트를 상기 인코딩된 비디오 비트스트림에서 상기 비디오 데이터의 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하는 단계; 및
    상기 제 3 신택스 엘리먼트를 K * 상기 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하는 단계를 더 포함하고, K 는 양의 상수이고 * 는 승산 연산을 표시하는, 비디오 데이터를 인코딩하는 방법.
  33. 제 32 항에 있어서,
    K 는 2 인, 비디오 데이터를 인코딩하는 방법.
  34. 제 25 항에 있어서,
    현재의 픽셀이 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 시그널링하는 단계; 및
    상기 비디오 데이터의 블록의 상기 현재의 픽셀이 상기 비디오 데이터의 블록의 상기 스캔 순서에서 최초의 픽셀인 경우에 팔레트 런 타입을 표시하는 상기 신택스 엘리먼트를 시그널링하지 않는 단계를 더 포함하는, 비디오 데이터를 인코딩하는 방법.
  35. 비디오 데이터를 인코딩하도록 구성된 장치로서,
    비디오 데이터의 블록을 저장하도록 구성된 메모리; 및
    비디오 인코더를 포함하고,
    상기 비디오 인코더는,
    팔레트 및 팔레트-기반 코딩 모드를 이용하여 상기 비디오 데이터의 블록을 인코딩하고;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 상기 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하는 것으로서, 상기 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하고;
    인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 인코딩하는 것으로서, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 갖는, 상기 제 1 신택스 엘리먼트를 인코딩하고; 그리고
    상기 인코딩된 비디오 비트스트림 내에 상기 복수의 신택스 엘리먼트들을 포함하도록 구성되는, 비디오 데이터를 인코딩하도록 구성된 장치.
  36. 제 35 항에 있어서,
    상기 제 1 신택스 엘리먼트는 num_signalled_palette_entries 신택스 엘리먼트인, 비디오 데이터를 인코딩하도록 구성된 장치.
  37. 제 35 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 차수 0 의 지수 골롬 코드인, 비디오 데이터를 인코딩하도록 구성된 장치.
  38. 제 35 항에 있어서,
    상기 비트들의 미리 결정된 최대 수는 32 이고, 상기 하나 이상의 골롬 코드들은 절단된 라이스 코드 및 지수 골롬 코드의 연접인, 비디오 데이터를 인코딩하도록 구성된 장치.
  39. 제 35 항에 있어서,
    상기 복수의 신택스 엘리먼트들은 상기 제 1 신택스 엘리먼트에 의해 명시적으로 시그널링되는 것으로서 표시된 상기 팔레트 값들을 포함하는, 비디오 데이터를 인코딩하도록 구성된 장치.
  40. 제 35 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 상기 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 상기 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되는, 비디오 데이터를 인코딩하도록 구성된 장치.
  41. 제 35 항에 있어서,
    상기 제 1 임계치는 4095 또는 4096 중의 하나이고, 상기 제 2 임계치는 4095, 8191, 또는 8192 중의 하나인, 비디오 데이터를 인코딩하도록 구성된 장치.
  42. 제 35 항에 있어서,
    상기 제 1 신택스 엘리먼트의 상기 최대 값은 상기 팔레트의 최대 크기를 표시하는 상기 제 2 신택스 엘리먼트 및 상기 팔레트 예측자의 최대 크기를 표시하는 상기 제 3 신택스 엘리먼트 양자 모두에 대하여 정의되고, 상기 비디오 인코더는,
    상기 제 2 신택스 엘리먼트를 상기 인코딩된 비디오 비트스트림에서 상기 비디오 데이터의 최대 가능한 블록에서의 픽셀들의 수 이하인 것으로 정의하고; 그리고
    상기 제 3 신택스 엘리먼트를 K * 상기 제 2 신택스 엘리먼트의 값 이하인 것으로 정의하도록 추가로 구성되고, K 는 양의 상수이고 * 는 승산 연산을 표시하는, 비디오 데이터를 인코딩하도록 구성된 장치.
  43. 제 42 항에 있어서,
    K 는 2 인, 비디오 데이터를 인코딩하도록 구성된 장치.
  44. 제 35 항에 있어서,
    상기 비디오 인코더는,
    현재의 픽셀이 스캔 순서에서 최초의 픽셀이 아닌 경우에 팔레트 런 타입을 표시하는 신택스 엘리먼트를 시그널링하고; 그리고
    상기 비디오 데이터의 블록의 상기 현재의 픽셀이 상기 비디오 데이터의 블록의 상기 스캔 순서에서 최초의 픽셀인 경우에 팔레트 런 타입을 표시하는 상기 신택스 엘리먼트를 시그널링하지 않도록 추가로 구성되는, 비디오 데이터를 인코딩하도록 구성된 장치.
  45. 비디오 데이터를 인코딩하도록 구성된 장치로서,
    팔레트 및 팔레트-기반 코딩 모드를 이용하여 비디오 데이터의 블록을 인코딩하기 위한 수단;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 상기 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하기 위한 수단으로서, 상기 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하기 위한 수단;
    인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 인코딩하기 위한 수단으로서, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 갖는, 상기 제 1 신택스 엘리먼트를 인코딩하기 위한 수단; 및
    상기 인코딩된 비디오 비트스트림 내에 상기 복수의 신택스 엘리먼트들을 포함하기 위한 수단을 포함하는, 비디오 데이터를 인코딩하도록 구성된 장치.
  46. 명령들을 저장하는 비일시적 컴퓨터-판독가능 저장 매체로서,
    상기 명령들은, 실행될 경우, 비디오 데이터를 인코딩하도록 구성된 디바이스의 하나 이상의 프로세서들로 하여금,
    팔레트 및 팔레트-기반 코딩 모드를 이용하여 비디오 데이터의 블록을 인코딩하게 하고;
    상기 비디오 데이터의 블록을 인코딩하기 위하여 이용되었던 상기 팔레트를 표시하는 복수의 신택스 엘리먼트들을 생성하게 하는 것으로서, 상기 복수의 신택스 엘리먼트들은 인코딩된 비디오 비트스트림으로 명시적으로 시그널링되는 상기 팔레트에 대한 팔레트 값들의 수를 표시하는 제 1 신택스 엘리먼트를 포함하는, 상기 복수의 신택스 엘리먼트들을 생성하게 하고;
    인코딩된 제 1 신택스 엘리먼트의 길이가 비트들의 미리 결정된 최대 수 이하가 되도록 하나 이상의 골롬 코드들을 이용하여 상기 제 1 신택스 엘리먼트를 인코딩하게 하는 것으로서, 상기 제 1 신택스 엘리먼트의 최대 값은 상기 팔레트의 최대 크기를 표시하는 제 2 신택스 엘리먼트 또는 팔레트 예측자의 최대 크기를 표시하는 제 3 신택스 엘리먼트 중 하나 이상에 대하여 정의되고, 상기 제 2 신택스 엘리먼트는 0 부터 제 1 임계치까지의 값을 갖고, 상기 제 3 신택스 엘리먼트는 0 부터 제 2 임계치까지의 값을 갖는, 상기 제 1 신택스 엘리먼트를 인코딩하게 하고; 그리고
    상기 인코딩된 비디오 비트스트림 내에 상기 복수의 신택스 엘리먼트들을 포함하게 하는, 명령들을 저장하는 비일시적 컴퓨터-판독가능 저장 매체.
KR1020177020890A 2015-01-29 2016-01-25 비디오 코딩을 위한 팔레트 모드 코딩 KR102409816B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562109568P 2015-01-29 2015-01-29
US62/109,568 2015-01-29
US15/004,508 2016-01-22
US15/004,508 US9986248B2 (en) 2015-01-29 2016-01-22 Palette mode coding for video coding
PCT/US2016/014760 WO2016123033A1 (en) 2015-01-29 2016-01-25 Palette mode coding for video coding

Publications (2)

Publication Number Publication Date
KR20170109553A KR20170109553A (ko) 2017-09-29
KR102409816B1 true KR102409816B1 (ko) 2022-06-15

Family

ID=55359727

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177020890A KR102409816B1 (ko) 2015-01-29 2016-01-25 비디오 코딩을 위한 팔레트 모드 코딩

Country Status (13)

Country Link
US (1) US9986248B2 (ko)
EP (1) EP3251356B1 (ko)
JP (1) JP6708652B2 (ko)
KR (1) KR102409816B1 (ko)
CN (1) CN107409215B (ko)
AU (1) AU2016211797B2 (ko)
BR (1) BR112017016341B1 (ko)
EA (1) EA035170B1 (ko)
ES (1) ES2739690T3 (ko)
HU (1) HUE044674T2 (ko)
TN (1) TN2017000308A1 (ko)
TW (1) TWI665912B (ko)
WO (1) WO2016123033A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016048092A1 (ko) 2014-09-26 2016-03-31 주식회사 케이티 비디오 신호 처리 방법 및 장치
CN107079163B (zh) 2014-10-20 2020-06-05 株式会社Kt 用于处理视频信号的方法和设备
CN111131824B (zh) 2015-01-15 2023-10-03 株式会社Kt 对视频信号进行解码的方法和对视频信号进行编码的方法
KR102422485B1 (ko) 2015-01-29 2022-07-20 주식회사 케이티 비디오 신호 처리 방법 및 장치
US10477243B2 (en) * 2015-01-29 2019-11-12 Kt Corporation Method and apparatus for predicting and restoring a video signal using palette entry and palette mode
US9942551B2 (en) * 2015-01-30 2018-04-10 Qualcomm Incorporated Palette index grouping for video coding
CN112839225B (zh) 2015-04-02 2024-03-29 株式会社Kt 对视频信号进行编解码的方法
CN107615765A (zh) * 2015-06-03 2018-01-19 联发科技股份有限公司 视频编解码系统中在帧内块复制模式和帧间预测模式之间的资源共享的方法和装置
JP6545570B2 (ja) * 2015-08-18 2019-07-17 株式会社東芝 符号化装置、復号装置および画像処理装置
JP6662123B2 (ja) * 2016-03-14 2020-03-11 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
GB2554065B (en) * 2016-09-08 2022-02-23 V Nova Int Ltd Data processing apparatuses, methods, computer programs and computer-readable media
US10917636B2 (en) * 2018-12-03 2021-02-09 Tencent America LLC Method and apparatus for video coding
US11202101B2 (en) * 2019-03-13 2021-12-14 Qualcomm Incorporated Grouped coding for palette syntax in video coding
MX2021012525A (es) * 2019-04-25 2021-11-12 Beijing Dajia Internet Information Tech Co Ltd Metodos y aparato para la codificacion de video usando el modo paleta.
US11109041B2 (en) * 2019-05-16 2021-08-31 Tencent America LLC Method and apparatus for video coding
KR20220013938A (ko) 2019-05-31 2022-02-04 바이트댄스 아이엔씨 인트라 블록 복사 예측을 갖는 팔레트 모드
CN117729331A (zh) 2019-06-28 2024-03-19 字节跳动有限公司 在变换跳过模式中修改量化参数的技术
EP3973450A4 (en) 2019-06-28 2023-02-22 ByteDance Inc. CHROMINANCE INTRA MODE DERIVATION IN SCREEN CONTENT ENCODING
CN114175662B (zh) 2019-07-20 2023-11-24 北京字节跳动网络技术有限公司 调色板模式使用指示的条件相关编解码
KR20220035154A (ko) 2019-07-21 2022-03-21 엘지전자 주식회사 팔레트 모드의 적용 여부에 따라 크로마 성분 예측 정보를 시그널링 하는 영상 부호화/복호화 방법, 장치 및 비트스트림을 전송하는 방법
US20220286701A1 (en) 2019-08-26 2022-09-08 Lg Electronics Inc. Image or video coding based on palette mode
EP4026322A4 (en) * 2019-09-07 2024-01-03 Beijing Dajia Internet Information Tech Co Ltd PREDICTIVE MODE SIGNALING IN VIDEO CODING
CN114375581A (zh) 2019-09-12 2022-04-19 字节跳动有限公司 在视频编解码中使用调色板预测器
WO2021055114A1 (en) * 2019-09-20 2021-03-25 Alibaba Group Holding Limited Method and system for signaling chroma quantization parameter offset
EP4026326A4 (en) * 2019-10-10 2022-11-30 Beijing Dajia Internet Information Technology Co., Ltd. METHOD AND DEVICE FOR VIDEO CODING USING PALETTE MODE
CN114747217A (zh) * 2019-11-30 2022-07-12 字节跳动有限公司 调色板编解码模式
WO2021121419A1 (en) 2019-12-19 2021-06-24 Beijing Bytedance Network Technology Co., Ltd. Interaction between adaptive color transform and quantization parameters
US11451801B2 (en) * 2019-12-26 2022-09-20 Alibaba Group Holding Limited Methods for coding video data in palette mode
CN116437086B (zh) * 2019-12-30 2023-11-17 阿里巴巴(中国)有限公司 用于在调色板模式下对视频数据进行编码的方法和装置
WO2021136555A1 (en) 2020-01-05 2021-07-08 Beijing Bytedance Network Technology Co., Ltd. Use of offsets with adaptive colour transform coding tool
CN115176470A (zh) 2020-01-18 2022-10-11 抖音视界有限公司 图像/视频编解码中的自适应颜色变换
CN115802061B (zh) * 2020-03-27 2023-09-26 北京达佳互联信息技术有限公司 对视频数据进行编码的方法、电子装置和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150016501A1 (en) 2013-07-12 2015-01-15 Qualcomm Incorporated Palette prediction in palette-based video coding

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9654777B2 (en) * 2013-04-05 2017-05-16 Qualcomm Incorporated Determining palette indices in palette-based video coding
US10834412B2 (en) * 2013-12-10 2020-11-10 Canon Kabushiki Kaisha Method and apparatus for encoding or decoding blocks of pixel
GB2521606A (en) * 2013-12-20 2015-07-01 Canon Kk Method and apparatus for transition encoding in video coding and decoding
US10362336B2 (en) 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
JP6310152B2 (ja) * 2014-05-23 2018-04-11 寰發股▲ふん▼有限公司HFI Innovation Inc. パレットテーブル予測とシグナリングの方法と装置
WO2015192340A1 (zh) * 2014-06-18 2015-12-23 富士通株式会社 基于调色板的图像编码方法、装置以及图像处理设备
US9955157B2 (en) * 2014-07-11 2018-04-24 Qualcomm Incorporated Advanced palette prediction and signaling
CN105960802B (zh) * 2014-10-08 2018-02-06 微软技术许可有限责任公司 切换色彩空间时对编码和解码的调整

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150016501A1 (en) 2013-07-12 2015-01-15 Qualcomm Incorporated Palette prediction in palette-based video coding

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Jie Zhao, et al., Non-CE6: Simplified palette size coding, JCT-VC of ITU-T and ISO/IEC 19th Meeting, JCTVC-S0134, pp. 1-5 (2014.10.) 1부.

Also Published As

Publication number Publication date
TW201633788A (zh) 2016-09-16
JP6708652B2 (ja) 2020-06-10
EP3251356A1 (en) 2017-12-06
CN107409215B (zh) 2020-01-17
KR20170109553A (ko) 2017-09-29
TWI665912B (zh) 2019-07-11
US20160227239A1 (en) 2016-08-04
AU2016211797B2 (en) 2019-07-25
US9986248B2 (en) 2018-05-29
CN107409215A (zh) 2017-11-28
BR112017016341A2 (pt) 2018-04-03
EA201791616A1 (ru) 2017-11-30
EP3251356B1 (en) 2019-05-08
HUE044674T2 (hu) 2019-11-28
ES2739690T3 (es) 2020-02-03
WO2016123033A1 (en) 2016-08-04
BR112017016341B1 (pt) 2023-10-03
EA035170B1 (ru) 2020-05-08
TN2017000308A1 (en) 2019-01-16
AU2016211797A1 (en) 2017-07-13
JP2018507612A (ja) 2018-03-15

Similar Documents

Publication Publication Date Title
KR102409816B1 (ko) 비디오 코딩을 위한 팔레트 모드 코딩
KR102344232B1 (ko) 비디오 코딩을 위한 런 길이 코드를 이용한 팔레트 예측자 시그널링
EP3308542B1 (en) Grouping palette bypass bins for video coding
KR102082548B1 (ko) 팔레트-기반 비디오 코딩에서의 최대 팔레트 파라미터들
KR101958536B1 (ko) 팔레트-기반 비디오 코딩에서 런들을 코딩
KR102095086B1 (ko) 팔레트-기반 비디오 코딩에서의 탈출 샘플 코딩
KR101821069B1 (ko) 팔레트-기반 비디오 코딩에서의 팔레트 예측
KR102465026B1 (ko) 고 스루풋 cabac 코딩을 위한 팔레트 인덱스 그루핑
US11259020B2 (en) Determining palettes in palette-based video coding
US20150189319A1 (en) Color index coding for palette-based video coding
WO2015196104A1 (en) Color palette mode in video coding
US10178395B2 (en) Explicit signaling of escape sample positions in palette coding mode for video coding
WO2015196047A1 (en) Copy from previous rows for palette mode coding
WO2016057504A1 (en) Non-uniform exponential-golomb codes for palette mode coding
EP3205102A1 (en) Palette run hiding in palette-based video coding
OA18316A (en) Palette mode coding for video coding.

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant