KR101983441B1 - 비디오 코덱들에서의 콘텍스트 적응형 이진 산술 코딩(cabac)의 가속화 - Google Patents
비디오 코덱들에서의 콘텍스트 적응형 이진 산술 코딩(cabac)의 가속화 Download PDFInfo
- Publication number
- KR101983441B1 KR101983441B1 KR1020167033286A KR20167033286A KR101983441B1 KR 101983441 B1 KR101983441 B1 KR 101983441B1 KR 1020167033286 A KR1020167033286 A KR 1020167033286A KR 20167033286 A KR20167033286 A KR 20167033286A KR 101983441 B1 KR101983441 B1 KR 101983441B1
- Authority
- KR
- South Korea
- Prior art keywords
- context
- index
- blocks
- syntax element
- coded
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/91—Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/13—Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
비디오 압축 또는 압축해제를 위해 콘텍스트 기반 적응형 이진 산술 코딩(CABAC)을 수행할 때 콘텍스트-인덱스를 결정하기 위한 방법이 제공되는데, 이 방법은 주어진 블록(예를 들어, 매크로블록)과 연관되는 선택된 신택스 요소들의 복수의 콘텍스트-인덱스 각각을 초기화 값으로 초기화하는 단계를 포함한다. 주어진 블록의 종속적인 이웃 블록들의 콘텍스트-인덱스가 평가된다. 종속적인 이웃 블록들은 현재 빈 포지션의 코딩에 종속하는 콘텍스트-인덱스를 갖는 블록들이다. 종속적인 이웃 블록들의 콘텍스트-인덱스가 초기화 값들로부터 변경되는 경우에만 이러한 블록들의 콘텍스트-인덱스가 업데이트된다.
Description
관련 출원에 대한 상호 참조
본 출원은, 2014년 5월 28일자로 출원되었으며 참조로 완전히 본 명세서에 포함되어 있는 이전에 출원된 미국 가출원 제62/003,695호로부터 35 U.S.C. §119(e) 하에서 우선권을 주장한다.
콘텍스트 적응형 이진 산술 코딩(Context Adaptive Binary Arithmetic Coding)(CABAC)은, H.264 및 HEVC와 같은 비디오 표준들에서 이용되는 엔트로피 코딩 방법이다. 이것은 무손실 코딩 기술이 다양한 신택스 요소들에 적용되는 비디오 인코딩 프로세스의 마지막 스테이지이다. CABAC는 이진 산술 코딩에 기초한다. 그것은 상이한 신택스 요소들에 대해 다수의 확률 모델을 이용하고, 코딩 중에 확률 모델을 적응적으로 선택한다. 이것은 이전 표준들에서 그리고 H.264의 베이스라인 프로파일에서 이용된 CAVLC보다 더 효율적인 기술이다. 그러나, 그것은 또한 고도로 복잡하며 순차적이고, 그에 따라 디코더에서 가장 CPU 집약적인 모듈 중 하나를 형성한다. CABAC 디코딩도 또한 사실상 순차적이고, 그에 따라 멀티-코어 프로세서들의 능력들을 이용하는 것도 또한 어렵다.
스마트폰들 등과 같은 더 작은 디바이스들 상에서 지원되는 해상도들의 증가로, 실시간 디코딩 및 인코딩에 대한 최적화가 더 중요해지고 있다. CABAC 디코딩은 멀티-코어 플랫폼들 상에서 구현되는 많은 디코더에서 병목 현상으로 나타난다.
본 명세서에 개시된 발명 대상의 일 양태에 따르면, 비디오 압축 또는 압축해제를 위해 콘텍스트 기반 적응형 이진 산술 코딩(CABAC)을 수행할 때 콘텍스트-인덱스를 결정하기 위한 방법이 제공된다. 이 방법에 다르면, 주어진 매크로블록(MB)과 연관되는 선택된 신택스 요소들의 복수의 콘텍스트-인덱스 각각이 초기화 값으로 초기화된다. 주어진 MB의 종속적인 이웃 MB들의 콘텍스트-인덱스가 평가된다. 종속적인 이웃 MB들은 현재 빈 포지션의 코딩에 종속하는 콘텍스트-인덱스를 갖는 MB들이다. 종속적인 이웃 MB들의 콘텍스트-인덱스는, 그들의 콘텍스트-인덱스가 초기화 값들로부터 변경되는 경우에만 업데이트된다.
본 명세서에 개시된 발명 대상의 다른 양태에 따르면, 비디오 압축해제 동안 콘텍스트 기반 적응형 이진 산술 코딩(CABAC) 데이터를 역이진화(debinarizing)하기 위한 방법이 제공된다. 이 방법에 따르면, 프로토콜에 의해 미리 정의되는 특정 비트 패턴 및 비트 길이로 코딩되는 모든 신택스 요소들이 식별된다. 식별되는 신택스 요소들의 코드들은, 동일한 비트 수를 갖는 코드들이 상이한 비트 수를 갖는 임의의 개재 코드들 없이 순차적으로 배열되도록 배열된다. 배열된 신택스 요소들의 코드들을 이용하여 역이진화가 수행된다.
본 명세서에 개시된 발명 대상의 또 다른 양태에 따르면, CABAC 인코더가 제공된다. CABAC 인코더는 이진화 모듈, 콘텍스트-인덱스 모듈 및 산술 인코더를 포함한다. 이진화 모듈은 신택스 요소를 빈들의 시퀀스로 변환한다. 콘텍스트-인덱스 모듈은 빈들의 시퀀스에 기초하여 신택스 요소에 대한 하나 이상의 콘텍스트 모델을 획득한다. 콘텍스트 모델들 각각은 콘텍스트 모델과 연관된다. 콘텍스트-인덱스 모듈은 주어진 매크로블록(MB)과 연관된 신택스 요소의 콘텍스트-인덱스를 초기화함으로써 하나 이상의 콘텍스트 모델을 획득하고, 주어진 MB의 종속적인 이웃 MB들의 콘텍스트-인덱스를 평가한다. 종속적인 이웃 MB들은 현재 빈 포지션의 코딩에 종속하는 콘텍스트-인덱스를 갖는 MB들이다. 산술 인코더는 빈들의 시퀀스에 기초하여 하나 이상의 콘텍스트 모델을 업데이트하고, 하나 이상의 콘텍스트 모델을 이용하여 시퀀스에서의 빈들 각각을 인코딩한다. 산술 인코더는, 종속적인 이웃 MB들의 연관된 콘텍스트-인덱스들을 그들의 콘텍스트-인덱스들이 초기화 값들로부터 변경되는 경우에만 업데이트함으로써 하나 이상의 콘텍스트 모델을 업데이트한다.
도 1은 H.264 비디오 인코더의 구현을 이용하여 비디오 데이터를 인코딩하는 방법의 일례를 예시하는 하이-레벨 플로우차트이다.
도 2는 H.264 CABAC 인코더의 일례를 예시하는 하이-레벨 블록도이다.
도 3은 H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들과 같은 블록들로 분할되는 프레임 또는 픽처를 도시한다.
도 4는 H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들과 같은 블록들로 분할되는 다른 프레임 또는 픽처를 도시한다.
도 5는 브로드캐스팅 방법을 이용한 콘텍스트-인덱스들의 도출 시에 수반되는 단계들의 일례를 도시하는 플로우차트이다.
도 6은 브로드캐스팅 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행될 수 있는 프로세스의 일례를 도시하는 플로우차트이다.
도 7은 브로드캐스팅 방법을 이용하여 모든 적용가능한 신택스 요소들의 콘텍스트-인덱스를 도출하기 위해 수행될 수 있는 프로세스의 일례를 도시하는 플로우차트이다.
도 8은 레거시 방법 및 본 명세서에 설명된 방법을 이용하여 각각의 mb_type을 역이진화하기 위해 수행된 검색들의 횟수를 비교하는 차트이다.
도 2는 H.264 CABAC 인코더의 일례를 예시하는 하이-레벨 블록도이다.
도 3은 H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들과 같은 블록들로 분할되는 프레임 또는 픽처를 도시한다.
도 4는 H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들과 같은 블록들로 분할되는 다른 프레임 또는 픽처를 도시한다.
도 5는 브로드캐스팅 방법을 이용한 콘텍스트-인덱스들의 도출 시에 수반되는 단계들의 일례를 도시하는 플로우차트이다.
도 6은 브로드캐스팅 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행될 수 있는 프로세스의 일례를 도시하는 플로우차트이다.
도 7은 브로드캐스팅 방법을 이용하여 모든 적용가능한 신택스 요소들의 콘텍스트-인덱스를 도출하기 위해 수행될 수 있는 프로세스의 일례를 도시하는 플로우차트이다.
도 8은 레거시 방법 및 본 명세서에 설명된 방법을 이용하여 각각의 mb_type을 역이진화하기 위해 수행된 검색들의 횟수를 비교하는 차트이다.
도면들 및 다음의 설명은 단지 예시에 의해 바람직한 실시예들에 관련된다. 다음의 논의로부터, 본 명세서에 개시된 구조들 및 방법들의 대안적인 실시예들은 청구되는 것의 원리들로부터 벗어나지 않으면서 이용될 수 있는 실행가능한 대안들로서 손쉽게 인식될 것이라는 점에 유의해야 한다.
이제, 수개의 실시예에 대한 참조가 상세하게 이루어질 것이고, 그 예들은 첨부 도면들에 예시되어 있다. 실시가능한 경우에, 유사하거나 동일한 참조 번호들이 도면들에서 이용될 수 있으며, 유사하거나 동일한 기능성을 표시할 수 있다는 점에 유의한다. 도면들은 단지 예시의 목적으로 개시된 시스템(또는 방법)의 실시예들을 도시한다. 본 기술분야의 통상의 기술자라면, 다음의 설명으로부터, 본 명세서에 예시된 구조들 및 방법들의 대안적인 실시예들이 본 명세서에 설명된 원리들로부터 벗어나지 않으면서 이용될 수 있다는 점을 손쉽게 인식할 것이다.
H.264/HEVC 비디오 인코더 개략
도 1은 일 실시예에 따른 H.264 비디오 인코더의 구현을 이용하여 비디오 데이터를 인코딩하는 방법을 예시하는 하이-레벨 플로우차트이다. 일반적으로, H.264/HEVC 인코더는 비디오 소스 모듈(100)로부터 원시 비디오 데이터(105)를 수신하고, 예측(110), 변환(120), 양자화(130) 및 엔트로피 인코딩(140)의 단계들을 수행한다. 비디오 소스 모듈(100)은 컴퓨터 하드 드라이브, 컴퓨터 메모리, 플래시 메모리 카드, 또는 디지털 비디오 데이터를 저장하는 임의의 다른 수단을 포함할 수 있다. 비디오 소스 모듈(100)은 H.264 비디오 인코더에 대해 로컬이거나, 또는 외부에 있으며 네트워크를 통해 액세스가능할 수 있다. 비디오 소스(100)뿐만 아니라 예측(110), 변환(120), 양자화(130) 및 엔트로피 인코딩(140)을 수행하는 모듈들은 단일 모듈 또는 디바이스로 구현될 수 있거나, 또는 다수의 모듈 또는 디바이스로 구현될 수 있다. 추가로, 이러한 모듈들의 기능성들은 도 1에 도시된 것들보다 더 적은 모듈들 또는 추가적인 모듈들로 구현될 수 있다. 도시되지 않은 추가적인 기능성들은 H.264 인코더에서 또한 구현될 수 있다.
원시 비디오 데이터(105)는 비디오 소스(100)로부터 예측 모듈(110)로 송신된다. 원시 비디오 데이터(105)는, 비압축된 것이든지, 이전에 압축된 것이든지 또는 다른 방식으로 이루어진 것이든지 간에, 임의의 포맷의 비디오 데이터일 수 있다. 원시 비디오 데이터(105)는 비디오의 일반적인 디스플레이 특성들(예컨대, 비디오의 크기, 길이, 해상도 또는 스크린 비율)을 기술하는 정보, 비디오의 프레임-특정 디스플레이 특성들(예컨대, 픽셀 컬러 정보, 픽셀 위치 정보, 휘도, 불투명도, 블록 및 매크로블록 치수 및 프레임 위치, 또는 임의의 다른 픽셀-도메인 정보)를 기술하는 정보, 또는 (비디오 타이틀, 발행자, 발행 날짜, 또는 비디오 콘텐츠의 카테고리 특성화들을 기술하는 키워드들과 같은) 비디오를 기술하는 메타데이터를 포함할 수 있다. 원시 비디오 데이터(105)는, 연속적으로 디스플레이될 때 모션 비디오를 형성하는, 픽셀 정보로 각각 구성된 하나 이상의 복수의 스틸 이미지를 포함하는 프레임 포맷으로 이루어질 수 있다.
예측 모듈(110)은 원시 비디오 데이터(105)의 하나 이상의 프레임을 수신하고, 하나 이상의 잔여 프레임(115)을 생성한다. 예측 프로세스는 전형적으로 비디오의 입력 프레임을 수신하는 것, 비디오의 입력 프레임과 유사한 예측 이미지를 결정하는 것, 및 비디오의 입력 프레임으로부터 예측 이미지를 감산하여, 비디오의 잔여 프레임을 생성하는 것을 포함한다. 비디오의 잔여 프레임은 전형적으로 비디오의 입력 프레임보다 더 적은 데이터를 포함하고, 따라서 인코딩 및 압축하기가 더 쉽다. 입력 이미지로부터 예측 이미지를 감산하는 것은 전형적으로 입력 이미지의 픽셀 정보로부터 예측 이미지의 픽셀 정보를 감산하는 것을 포함하고, 이는 감산의 차이를 나타내는 픽셀 정보로 구성된 잔여 이미지를 초래한다. 수신된 입력 프레임 또는 생성된 잔여 프레임(115) 중 어느 하나는 매크로블록들로 이루어질 수 있으며, 이는 일 실시예에서 픽셀들의 16×16 정사각형들을 포함할 수 있다.
예측 모듈(110)은 공간 예측(오브젝트들, 형상들, 커브들, 라인들, 또는 예측 이미지와 유사한 단일 이미지의 임의의 다른 특성을 식별함), 시간 예측(오브젝트의 모션과 같이 선행 또는 후속 프레임들의 특성들을 식별함), 또는 원시 비디오 데이터(105) 이미지에 대한 예측 이미지를 결정하기 위한 임의의 다른 적합한 방법을 이용할 수 있다. 예측 이미지는 인코더 및 디코더 양쪽 모두에 이용가능한 참조 이미지들의 라이브러리 또는 사전으로부터 비롯될 수 있다. 대안적으로, 예측 이미지는 이전에 인코딩된 프레임 또는 장래에 인코딩될 프레임으로부터 비롯될 수 있다. 각각의 예측 이미지는 하나의 또는 하나보다 많은 예측 서브이미지로 이루어질 수 있다. 예를 들어, 예측 모듈(100)은 입력 이미지의 배경에 대한 제1 예측 이미지, 및 입력 이미지의 전경에서의 오브젝트에 대한 제2 예측 이미지를 결정할 수 있다. 따라서, "예측 이미지"라는 용어는 모든 예측 서브이미지들의 단일 이미지로의 조합을 포괄할 수 있다. 다음에, 예측 모듈(100)은 원시 비디오 데이터(105) 이미지로부터 예측 이미지를 감산하고, 잔여 프레임(115)을 출력한다.
변환 모듈(120)은 픽셀 형태로 잔여 이미지(115)를 수신하고, 잔여 이미지(115)를 처리하고, 잔여 이미지 계수들(125)(변환 도메인에서의 잔여 이미지)을 출력한다. 변환 모듈(120)은 수신된 잔여 이미지(115)에 대해 이산 코사인 변환(DCT), 웨이브릿 변환 또는 임의의 다른 푸리에 관련 변환을 적용할 수 있다. 일 실시예에서, 변환 모듈(120)은 한번에 잔여 프레임의 하나의 매크로블록을 처리하여, 각각의 처리된 매크로블록에 대한 계수들의 하나의 세트를 생성한다. 실시예에서, 잔여 이미지(115)의 각각의 픽셀에 대해 하나의 계수가 생성된다.
양자화 모듈(130)은 계수들(125)을 수신하고, 계수들(125)을 양자화하고, 양자화된 계수들(135)을 출력한다. 계수들(125)의 양자화는 전형적으로 0으로 라운딩되는 많은 더 고 주파수 계수들을 초래하고, 이는 계수들을 유지하는데 요구되는 스토리지 공간을 감소시킨다. 양자화 모듈(130)은 수신된 계수들(125)의 범위를 단일 양자 값으로 압축하여, 양자화된 계수들(135)을 생성할 수 있다. 일 실시예에서, 양자화 모듈(130)은 수신된 계수들을 선택된 양자화 행렬로 제산하고, 결과적인 몫들은 생성되는 양자화된 계수들(135)에 가장 가까운 정수로 라운딩된다.
엔트로피 인코딩 모듈(140)은 양자화된 계수들(135)을 수신하고, 이러한 계수들을 압축하고, 압축된 비트스트림(145)을 출력한다. 엔트로피 인코딩 모듈(140)은 CAVLC나 CABAC와 같은 무손실 압축 방법을 이용한다. 엔트로피 인코딩 모듈(140)은 증분 인코딩(incremental encoding)을 수행하여, 수신되는 양자화된 계수들(135)이 압축됨에 따라 한번에 하나 이상의 비트를 출력할 수 있다. 수신되는 양자화된 계수들(135)을 압축하는 것에 추가하여, 엔트로피 인코딩 모듈(140)은 임의의 신택스 요소를 압축할 수 있다. 신택스 요소들은 (양자화된 계수들(135)에 추가하여) 디코더가 예측을 재생성하는 것을 가능하게 하는 정보, 압축된 데이터의 구조에 대한 정보, 인코딩된 비디오 시퀀스에 대한 정보, 인코딩 중에 이용되는 압축 툴들에 대한 정보, 또는 비디오 또는 인코딩 및 압축 프로세스를 기술하는 임의의 다른 정보를 포함한다. 압축된 비트스트림(145)은 디코딩 및 재생을 위해 디코더로 송신될 수 있다.
H.264 CABAC 인코더 개략
콘텍스트 적응형 이진 산술 코딩(CABAC)은 H.264/MPEG-4 AVC 및 HEVC 비디오 표준에서 이용되는 엔트로피 인코딩의 일 형태이다. 그것은 그 자체로 무손실 압축을 할 수 있다. CABAC 기반 코딩은, CABAC가 코딩 심볼들에 대해 콘텍스트를 적응시킨다는 점에서 적응형인데, 여기서 콘텍스트는 과거에 코딩되며 적응에 이용되는 심볼들의 세트를 식별한다. 과거 심볼들은 인접 블록들에 위치할 수 있고, 또한 이웃 블록들의 심볼 값들을 참조할 수 있다.
CABAC 인코딩은 3개의 주요 단계, 즉 이진화, 콘텍스트 모델링 및 이진 산술 코딩에 따라 동작하는 것으로서 개념화될 수 있다. 제1 단계인 이진화는 입력 심볼들을 "빈들(bins)" 또는 이진 심볼들의 스트링으로 매핑한다. 입력 심볼은 이진화되는 비이진 값 심볼일 수 있다. 콘텍스트 모델링에서, 주어진 빈에 모델 확률 분포가 할당된다. 확률 모델은 '콘텍스트'에 종속하고, 이는 로컬 및 미리 관측된 통계들의 함수이고; 로컬 통계들은 과거에 코딩된 빈들에 대응한다. 이진 산술 인코더는 빈을 인코딩하기 위해 이러한 콘텍스트 모델을 이용한다. 실제 인코딩된 빈 값에 기초하여, 콘텍스트 모델은 업데이트되고, 따라서 적응형으로 된다. 콘텍스트 모델들은 콘텍스트-인덱스를 이용하여 인덱싱된다. 최종적으로, 이진 산술 코딩에서, 빈들의 인코딩은 '정규 코딩 방법(regular coding method)' 또는 '바이패스 코딩 방법(bypass coding method)' 중 어느 하나를 이용하여 수행된다. 빈들은 '정규 코딩 방법' 또는 '바이패스 코딩 방법' 중 어느 하나를 이용하여 (코딩된 비트스트림의) 비트들로 코딩될 수 있다. '정규 코딩 방법'에서, 입력 심볼들에 대응하는 산술 코딩 빈(들)을 위해 확률 모델이 선택되어 이용될 필요가 있다.
위의 단계들은 비디오 인코더 또는 압축기에서 동작하는 CABAC의 관점에서 설명되었다. 비디오 디코더 또는 압축해제기에서, CABAC 디코딩은 인코더에 의해 이용된 처리 방법들 중 일부를 반대로 한다. (코딩된 비트스트림의) 비트들은, 인코더가 비트(들)를 코딩하는데 어느 방법을 이용하였는지에 기초하여 '정규 디코딩 방법' 또는 '바이패스 디코딩 방법' 중 어느 하나를 이용하여 빈들로 변환된다. 디코더에서의 역이진화 및 '바이패스 디코딩 방법' 또는 '정규 디코딩 방법'에서 수반되는 처리는 인코더에 의해 이용된 대응하는 방법들의 역 프로세스들이다. 콘텍스트 모델 선택 및 콘텍스트 모델 업데이트에서 수반되는 처리는 인코더에서와 동일하게 유지된다. CABAC에서의 역이진화 단계는 빈들을 송신된 심볼 값으로 변환한다. 심볼은 비디오 디코딩에서 수반되는 나머지 프로세스들에 이용된다.
개념적인 레벨로 위에서 설명된 CABAC 프로세스는, H.264 CABAC 인코더의 일례를 예시하는 하이-레벨 블록도인 도 2를 참조하여 더 상세하게 설명될 것이다. CABAC 인코더는 도 1에서 설명된 H.264 비디오 인코딩 프로세스에서의 엔트로피 인코딩 모듈(140)에 의해 구현될 수 있다. 예시적인 CABAC 인코더의 주요 컴포넌트들은 이진화 모듈(305), 콘텍스트 룩업 모듈(315), 산술 인코더 모듈(325) 및 콘텍스트 표 메모리(335)이다. 추가적인 또는 더 적은 모듈들이 CABAC 인코딩 기능성을 구현하는데 이용될 수 있다. CABAC 인코더는 명료성을 위해 단일 인코딩 사이클의 콘텍스트에서 설명될 것이고; CABAC 인코더의 파이프라인 구현에서와 같이 CABAC 인코딩에 의해 다수의 인코딩 사이클이 수행될 수 있다.
이진화 모듈(305)은 신택스 요소(300)를 수신하고, 신택스 요소(300)를 "빈들"(310)로 지칭되는 순서화된 이진 비트들로 변환함으로써 이진화를 수행하고, 빈들(310)을 출력한다. 일 실시예에서, 신택스 요소(300)는 양자화된 계수, 또는 위에서 논의된 인코딩 정보 또는 비디오 정보 중 임의의 것을 포함한다. 신택스 요소(300)는 신택스 요소를 식별하는 신택스 요소 식별자("신택스 요소 ID")를 추가적으로 포함할 수 있다. 예를 들어, 신택스 요소 ID는 양자화된 계수인 신택스 요소(300)가 어느 매크로블록에 속하는지, 양자화된 계수인 신택스 요소(300)가 인코딩된 비디오의 어느 부분에 나타나는지, 또는 비디오의 인코딩 시에 어느 타입의 양자화가 수행되었는지를 식별할 수 있다. 일 실시예에서, 이진화된 신택스 요소의 빈들의 순서는 유지되어야 한다. 예를 들어, 산술 인코더(325)는, 인코딩되는 이진화된 신택스 요소를 디코더가 디코딩하기 위해 이진화 모듈(305)에 의해 빈들이 출력되는 순서로 이러한 빈들을 인코딩하도록 요구될 수 있다. 최종적으로, 신택스 요소(300)는 콘텍스트 모델 인덱스를 포함하여, 산술 인코딩에서 이용될 콘텍스트 모델을 식별할 수 있다.
빈들(310)은 수신된 신택스 요소(300)를 나타내는 개별적인 이진 비트들이고, 신택스 요소 ID를 포함하여, 각각의 빈이 나타내는 신택스 요소를 식별할 수 있다. 대안적으로, 각각의 빈(310)은 각각의 빈(310)과 연관된 콘텍스트 모델을 식별하는 콘텍스트 모델 인덱스를 포함할 수 있다. 콘텍스트 인덱스는 신택스 요소 ID로부터 도출될 수 있거나, 또는 독립적으로 도출되거나 수신될 수 있다. 이진화 모듈(305)은 수신된 신택스 요소(300)를 이진 형태로 변환한다. 예를 들어, 신택스 요소(300)는 정수 형태로 수신될 수 있고, 이진화 모듈은 신택스 요소(300)를 이진 빈들(310)로 변환한다.
콘텍스트 룩업 모듈(315)은 빈들(310)을 수신하고, 콘텍스트 표 요청(340)을 콘텍스트 표 메모리(335)에 송신한다. 콘텍스트 표 요청(340)은 수신된 빈(310)과 연관된 신택스 요소를 식별할 수 있다. 일 실시예에서, 수신된 빈(310)은 신택스 요소 ID를 포함하고, 콘텍스트 룩업 모듈(315)은 이 신택스 요소 ID를 파싱하여 콘텍스트 표 요청(340)과 함께 송신한다. 콘텍스트 표 요청(340)은, 콘텍스트 표 메모리(335) 내의 특정 콘텍스트 모델, 또는 특정 콘텍스트 모델을 포함하는 콘텍스트 표 메모리(335) 내의 특정 위치를 식별할 수 있는 콘텍스트 모델 인덱스를 포함할 수 있다.
콘텍스트 룩업 모듈(315)은 각각의 신택스 요소에 대해 한번 콘텍스트 표 메모리(335)로부터 콘텍스트 모델을 요청할 수 있거나, 또는 주어진 신택스 요소에 대해 다수회, 예컨대 수신된 빈마다 한번 동일한 콘텍스트 모델을 요청할 수 있다. 단순화를 위해, "콘텍스트 모델"이라는 용어는 단일 콘텍스트 모델, 다수의 콘텍스트 모델, 또는 함께 저장된 다중 콘텍스트 모델을 포함하는 콘텍스트 모델 워드(context model word)를 지칭할 수 있다.
콘텍스트 표 메모리(335)는 콘텍스트 표 요청(340)을 수신하고, 이 요청(340)에 기초하여 콘텍스트 모델(320)을 출력한다. 콘텍스트 표 메모리(335)는 하나 이상의 메모리 위치를 포함할 수 있고, 메모리 위치마다 하나 이상의 콘텍스트 모델을 포함할 수 있다. 예를 들어, 각각의 콘텍스트 표 메모리 위치는 32개의 콘텍스트 모델을 포함하는 콘텍스트 모델 워드를 저장할 수 있다. 일 실시예에서, 콘텍스트 표 메모리(335)는 콘텍스트 모델 인덱스에 의해 콘텍스트 모델들을 인덱싱한다. 콘텍스트 모델 인덱스는 메모리 위치, 및 그 메모리 위치에 저장된 특정 콘텍스트 모델을 포함할 수 있다. 예를 들어, 하나의 예시적인 실시예에서, 메모리 어드레스 "E41C"에 있는 콘텍스트 모델 "14"에 대한 콘텍스트 모델 인덱스는 "E41C14"이다.
예로서, H.264 표준에서, 0 내지 72의 범위의 콘텍스트 인덱스들은, 슬라이스 기반 및 매크로블록 기반 제어 정보뿐만 아니라, 매크로블록 타입, 서브매크로블록 타입, 및 공간 타입 및 시간 타입의 예측 모드들의 신택스 요소들에 관련된다. 이러한 타입의 신택스 요소들에 있어서, 대응하는 콘텍스트 인덱스는, 주어진 신택스 요소의 콘텍스트 인덱스 증분과, 범위에서의 최저 값으로서 정의되는 콘텍스트 인덱스 오프셋의 합계로부터 계산될 수 있다. 마찬가지로, 85-104의 범위의 콘텍스트 인덱스들은 신택스 요소 coded_block_flag에 관련되는 한편, 73-398의 콘텍스트 인덱스들은 잔여 데이터의 코딩에 관련된다.
저장된 콘텍스트 모델들은, 수신된 빈이 특정 비트일 확률을 포함할 수 있고, 산술 인코더(325)가 빈들(310)을 인코딩하는 것을 허용하는데 충분한 임의의 형태를 포함할 수 있다. 예를 들어, 저장된 콘텍스트 모델들은, 1-비트의 MPB(most probable bit), 및 수신된 빈이 MPB와 동일한 6-비트의 이진 확률로 구성되는 7-비트 워드들을 포함할 수 있다. 대안적으로, 콘텍스트 모델들은 대신에 LPB(least probable bit), 수신된 빈이 LPB와 동일한 확률, 또는 식별된 비트나 그것의 역을 수신할 확률과 식별된 비트의 임의의 조합을 포함할 수 있다. 추가로, 콘텍스트 모델들은 콘텍스트 표 메모리(335)에서 7 비트보다 더 많거나 더 적은 비트에 저장될 수 있고, 확률들은 6 비트보다 더 많거나 더 적은 비트를 포함할 수 있다. 일 실시예에서, 콘텍스트 표 메모리(335)는 각각의 콘텍스트 모델에 대한 인덱스를 저장하고, 콘텍스트 모델이 요청될 때 그 콘텍스트 모델의 확률 컴포넌트를 계산한다.
콘텍스트 표 메모리(335)는 콘텍스트 표 요청(340)에 의해 식별되는 요청된 콘텍스트 모델(320)에 액세스하고 출력한다. 콘텍스트 모델(320)은 산술 인코더(325)로의 후속 송신을 위해 콘텍스트 룩업 모듈(315)로 송신될 수 있거나, 또는 산술 인코더(325)로 직접적으로 송신될 수 있다. 산술 인코더(325)는 콘텍스트 모델(320) 및 빈(310)을 수신하고, 업데이트된 콘텍스트 모델(330) 및 코딩된 비트스트림(345)을 생성한다. 일부 경우에, 동일한 신택스 요소의 빈들을 인코딩하는데 단 하나의 콘텍스트 모델(320)만이 이용되고; 대안적으로, 주어진 신택스 요소의 빈들을 인코딩하는데 하나보다 많은 콘텍스트 모델(320)이 이용될 수 있다.
산술 인코더(325)는 수신된 빈들(310)의 콘텐츠에 종속하여 콘텍스트 모델(320)을 적응적으로 업데이트한다. 일부 경우에, 산술 인코더(325)는 빈(310)이 수신될 때마다 콘텍스트 모델(320)을 업데이트한다. 신택스 요소의 수신된 빈들(310)을 인코딩하는 동안에, 산술 인코더(325)는 내부적으로 업데이트된 콘텍스트 모델(330)을 유지하여, 신택스 요소의 각각의 후속 빈을 인코딩하는데 업데이트된 콘텍스트 모델(330)을 이용하고, 각각의 후속 빈을 인코딩한 이후에 콘텍스트 모델을 업데이트할 수 있다. 콘텍스트 모델들은 H.264에서 정의된 확률 상태 인덱스 전이 규칙들에 따라 업데이트될 수 있거나, 또는 임의의 적합한 적응형 방법을 이용하여 업데이트될 수 있다.
업데이트된 콘텍스트 모델(330)은, 콘텍스트 모델이 업데이트될 때마다 또는 전체 신택스 요소가 인코딩된 이후에 콘텍스트 표 메모리(335)로 송신될 수 있다. 콘텍스트 표 메모리(335)는 업데이트된 콘텍스트 모델(330)을 오리지널 콘텍스트 모델(320)의 메모리 위치에 기입하여, 오리지널 콘텍스트 모델(320)을 오버라이트할 수 있다.
산술 인코더(325)는 빈 값, 타입 및 빈의 대응하는 콘텍스트 모델에 기초하여 수신된 빈들(310) 각각을 인코딩하기 위해 콘텍스트 모델(320)을 이용한다. 산술 인코더(325)는 수신된 빈들(310)을 하나의 분수 n으로 인코딩할 수 있는데, 여기서 n은 0 이상 1 미만이다. 수신된 빈들(310)을 인코딩하기 위해서, 인코더(325)는 이전에 수신된 빈들(310)을 수신할 확률을 나타내는 수치 구간(numerical interval)을 유지할 수 있다. 수치 구간은 상부 구간 한계 및 하부 구간 한계를 가질 수 있으며, 상부 구간 한계와 하부 구간 한계 사이의 차이를 포함하는 범위 R로 표현될 수 있다. 일 실시예에서, 수치 구간은 구간 [0, 1]로 초기화되고, 각각의 수신된 빈(310)에 대해 업데이트된다. 일 실시예에서, 유지된 구간은 상부 구간 한계(RU) 및 하부 구간 한계(RL)를 가지며, 이들은 수신된 빈을 인코딩할 때 업데이트된다.
콘텍스트 인덱스 결정의 최적화
본 명세서에 설명된 발명 대상의 일 양태는 CABAC 처리 동안 콘텍스트-인덱스들의 계산에 이용되는 동작들의 횟수에서의 감소에 관련된다. 이 양태는 CABAC를 이용하는 임의의 비디오 인코더 또는 디코더에 의해 이용될 수 있으며, 그 예들은 H.264 또는 HEVC 코덱들이다. 아래에 상세하게 설명되는 바와 같이, 이러한 감소는 현재 콘텍스트 인덱스들을 이웃 블록들에 브로드캐스팅함으로써 달성된다.
CABAC에 의해 코딩된 많은 신택스 요소(SE)는 이웃 블록들에서의 신택스 요소들의 값에 기초하여 픽처에서의 모든 샘플 위치에서 콘텍스트의 선택을 요구한다. 이웃 블록들은 일반적으로 디코딩 순서에서 이전에 있는 이전 블록 또는 좌측에 있는 블록 및 상부에 있는 블록이다.
콘텍스트 결정을 위해 H.264 및 HEVC에서 이용되는 하나의 종래의 기술(본 명세서에서 다이렉트 방법(direct method)으로 지칭됨)은 다양한 논리 연산들 및 조건부 체크들뿐만 아니라 이웃 매크로블록들(MB)의 다수의 신택스 요소에 대한 액세스를 요구한다.
본 개시내용은 콘텍스트 결정을 위한 계산 시간을 감소시키는 것을 목적으로 하는 대안적인 기술을 이용한다. 이 기술에 따르면, 다운스트림 이웃 블록들(예를 들어, 코딩 순서에서 다음 블록 또는 현재 블록의 하부 및 우측에 있는 블록들)에 대응하는 콘텍스트들은 이들이 초기화 값으로부터 변경될 때 결정 및 브로드캐스팅된다. 이러한 결정은 처리되고 있는 현재 MB에 관하여 이미 이용가능한 정보에 기초하여 수행될 수 있다. 따라서, 다이렉트 방법과 달리, 장래에 CABAC 처리되어야 할 때 다운스트림 이웃 블록들에 의한 콘텍스트 결정에 필요한 특정 MB의 신택스 요소 값들을 저장 및 액세스할 필요성이 존재하지 않는다.
본 명세서에 설명된 콘텍스트 결정 기술들은 다양한 신택스 요소들의 빈들을 인코딩 및 디코딩할 때 적용될 수 있다. 예를 들어, H.264에서, 이웃 블록들로부터의 정보에 종속하고, 따라서 이 기술로부터 이득을 얻을 수 있는 예시적인 신택스 요소들은, mb_type, mb_skip_flag, transform_size_8x8_flag, mb_qp_delta, mb_field_decoding_flag, intra_chroma_pred_mode, mvd (horizontal)_10, mvd (vertical)_10, mvd (horizontal)_11, mvd (vertical)_11, ref_idx_10, ref_idx_11, coded_block_pattern 및 coded_block_flag를 포함한다. 마찬가지로, HEVC에서, 이 기술로부터 이득을 얻을 수 있는 예시적인 신택스 요소들은 split_cu_flag, cu_skip_flag 및 sig_coeff_flag를 포함한다.
콘텍스트 결정을 위한 종래의 다이렉트 방법은, 블록들(210)(예를 들어, H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들(CTB들))로 분할되는 프레임 또는 픽처(200)를 도시하는 도 3을 참조하여 예시될 것이다. 도시된 바와 같이, 블록 C, B 및 A는 현재 블록, 상부 이웃 블록 및 좌측 이웃 블록을 각각 나타낸다. C에서의 콘텍스트 인덱스를 계산하기 위해서, 이웃 블록 A 및 B로부터의 신택스 요소 값들이 판독되고, 특정 조건들을 이용하여 평가된다.
본 명세서에 개시된 발명 대상에 따른 콘텍스트 결정을 위한 브로드캐스팅 방법은, 블록들(410)(예를 들어, H.264에서의 매크로블록들 및 HEVC에서의 코딩된 트리 블록들(CTB들))로 분할되는 프레임 또는 픽처(400)를 도시하는 도 4를 참조하여 예시될 것이다. 도시된 바와 같이, 블록 C, D 및 E는 현재 블록, 하부 이웃 블록 및 우측 이웃 블록을 각각 나타낸다.
먼저, 블록 C에서의 빈은 블록 C의 블록 특성들 및 이 빈에 대한 콘텍스트에 기초하여 디코딩된다. 다음에, 이웃 블록 D 및 E에서의 대응하는 빈에 대한 콘텍스트 인덱스가 계산되고, 필요한 경우에 (아래에 설명되는 특정 조건들에 종속하여) 업데이트된다. 블록 D 및 E에서의 대응하는 빈들을 디코딩하기 위한 콘텍스트 인덱스는 이제 손쉽게 이용가능하다. 이것은 이웃 블록들로부터의 신택스 요소 값들에 액세스할 필요성을 제거한다.
일반적으로, 브로드캐스팅 방법을 이용할 때, 모든 콘텍스트들은 디폴트 값(신택스 요소에 대한 콘텍스트-인덱스들의 모든 세트에 대해 이용가능한 제1 콘텍스트와 연관된 콘텍스트-인덱스로서 선택될 수 있음)으로 초기화되고, 필요할 때 업데이트된다. 예를 들어, 신택스 요소 CBP(루마)에 대해, 최저 또는 제1 콘텍스트 인덱스는 73이다. 일 실시예에서, 픽처의 매크로블록들의 현재 및 후속 로우에서의 모든 8x8 블록들의 루마 CBP 빈들에 대한 콘텍스트-인덱스들의 2개의 로우가 이 값으로 초기화될 수 있다.
예 - 신택스 요소 루마 CBP의 빈들의 코딩
H.264에서의 신택스 요소 루마 코딩된 블록 패턴(CBP)에 대한 다음의 예는 콘텍스트 결정의 다이렉트 방법에 대한 콘텍스트 결정을 위한 브로드캐스팅 방법의 유효성을 예시하기 위해 이용될 것이다. 이 예는, 모든 콘텍스트 결정 단계에서 이웃 블록들로부터의 정보에 액세스하는 것보다는 콘텍스트 인덱스에 대한 변경들의 영향을 브로드캐스팅하는 것이 더 효과적이라는 것을 입증할 것이다.
H.264에서, 코딩된 블록 패턴(CBP)은, 16x16 MB의 4개의 8x8 루마 블록들 및 연관된 크로마 블록들 중 어느 것이 비제로 변환 계수들을 포함할 수 있는지를 표시한다. CBP는, 크로마 블록들에 대한 CBP 값들을 표시하는 2개의 MSB, 및 4개의 8x8 루마 블록들(루마 CBP)에 대한 CBP 값들을 표시하는 나머지 4개의 최하위 비트를 갖는 6 비트 값(범위 0 내지 47)이다. 루마 CBP는 PCM 또는 Skip MB들이 아닌 매크로블록들(MB들)에 대해 코딩된다. Intra_16x16 MB들에 대해, CBP는 명시적으로 코딩되지 않고, mb_type 신택스 요소의 일부로서 임베딩된다. H.264는 루마 CBP의 각각의 빈을 코딩하는데 이용될 수 있는 4개의 콘텍스트의 세트를 정의한다. 이러한 콘텍스트들은 콘텍스트-인덱스 값을 이용함으로써 인덱싱된다. 각각의 빈을 코딩하기 위한 콘텍스트 선택은 현재 8x8 블록에 이웃하는(상부 및 좌측) 8x8 블록들로부터의 정보에 기초하여 결정된다. 선택된 콘텍스트 및 그 포지션에서의 빈 값은 인코더에서 코딩된 비트를 발생시키는데 이용된다. 선택된 콘텍스트 및 인코딩된 비트는 디코더에서 빈 값을 회복(get back)하는데 이용된다. 코딩된 값은 콘텍스트를 업데이트하는데 추가로 이용된다.
먼저, 도 3을 한번 더 참조하면, 콘텍스트 결정의 종래의 다이렉트 방법은 신택스 요소인 "루마 코딩된 블록 패턴"에 대해 설명될 것이다. 이전에 언급된 바와 같이, I 블록 'C', 'A' 및 'B'는 현재 블록, 좌측 이웃 블록 및 상부 이웃 블록을 각각 나타낸다. 블록 C에 대응하는 CBP 빈을 코딩하기 위해, 콘텍스트가 선택될 필요가 있다. 콘텍스트 선택은 블록 A 및 B로부터의 신택스 요소 값들에 기초한다.
다음의 단계들은 다이렉트 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행된다. 먼저, 단계 1에서, 콘텍스트-인덱스는 콘텍스트-인덱스-오프셋(즉, 73)으로 초기화된다. 다음에, 단계 2에서, 현재 MB가 PCM 또는 Skip 또는 Intra 16x16인 경우, CBP를 코딩하지 않고, 아래에 논의되는 단계 9로 진행한다. (현재 MB가 Intra_16x16 MB들인 경우, CBP는 명시적으로 코딩되지 않고, mb_type 신택스 요소의 일부로서 임베딩된다.) 단계 3에서 이웃 A(좌측 이웃) 또는 이웃 B(상부 이웃)로부터 신택스 요소 값 mb_type 및 대응하는 루마 CBP 빈이 판독된다. 이웃 A 또는 B가 이웃 MB로부터 획득되어야 하는 경우, 단계 4에서 다음의 조건들이 체크된다:
a. mb_type == I_PCM인지를 체크하고, 참인 경우, 아래에 논의되는 단계 6으로 진행한다;
b. mb_type != P_SKIP 및 mb_type != B_SKIP인지를 체크하고, 이웃으로부터의 CBP 빈 != 0인 경우, 아래에 논의되는 단계 6으로 진행한다;
c. 좌측 이웃인 경우에는 콘텍스트-인덱스를 1만큼 증분하고, 상부 이웃인 경우에는 콘텍스트-인덱스를 2만큼 증분한다.
그렇지 않으면(A 또는 B가 현재 MB에 속하면). 대응하는 이웃에 대한 CBP의 이전 코딩된 빈이 0과 동일한 경우, 좌측 이웃인 경우에는 콘텍스트-인덱스를 1만큼 증분하고, 상부 이웃인 경우에는 콘텍스트-인덱스를 2만큼 증분하고, 그렇지 않으면 다음의 단계들로 계속된다.
단계 5에서, 제2 이웃(A 또는 B)에 대해 단계 3이 반복된다. 단계 6에서, 빈은 업데이트된 콘텍스트-인덱스와 연관된 콘텍스트를 이용하여 코딩되고, 단계 7에서 저장된다. 단계 8에서, 프로세스는 모든 나머지 루마 CBP 빈들에 대해 단계로부터 반복된다. 최종적으로, 단계 9에서, 다음 신택스 요소가 코딩된다.
이제, 종래의 다이렉트 코딩 프로세스에 대한 위의 단계들을 이용하여 각각의 빈을 코딩하기 위한 콘텍스트 인덱스를 결정하기 위한 계산 요구가 이웃 블록들의 상이한 카테고리들을 수반하는 3가지 상이한 경우들 각각에 대해 결정될 것이다. 각각의 경우에 있어서, 요구되는 조건부 체크들, 메모리 판독 및 기입 동작들의 횟수가 결정될 것이다.
경우 1에서, 이웃 블록들이 상이한 MB들로부터의 것으로 가정된다. 위의 단계 3에서 표시된 바와 같이, 4회의 판독 동작(2개의 이웃의 CBP 및 mb_type)이 요구된다. 또한, 위의 단계 4에서 표시된 바와 같이, 최대 10회의 조건부 체크, 즉 CBP에 대해 2회 그리고 mb_type에 대해 8회의 조건부 체크가 요구된다. 최종적으로, 위의 단계 7에서 표시된 바와 같이, 코딩된 빈의 1회의 기입 동작이 요구된다.
경우 2에서, 하나의 이웃 블록은 현재 MB에 속하는 것으로 가정되고, 다른 이웃 블록은 상이한 MB에 속하는 것으로 가정된다. 위의 단계 3에서 표시된 바와 같이, 3회의 판독 동작(하나의 이웃의 mb_type과 CBP 및 다른 이웃의 CBP만)이 수행된다. 추가적으로, 위의 단계 4에서 표시된 바와 같이, 최대 6회의 조건부 체크, 즉 mb_type에 대해 4회 그리고 CBP에 대해 2회의 조건부 체크가 수행된다. 최종적으로, 위의 단계 7에서 표시된 바와 같이, 코딩된 빈의 1회의 기입 동작이 수행된다.
경우 3에서, 이웃 블록들 양쪽 모두가 현재 MB에 속하는 것으로 가정된다. 위의 단계 3에서 표시된 바와 같이, 2회의 판독 동작(2개의 이웃의 CBP 빈)이 수행된다. 위의 단계 4에서 표시된 바와 같이, CBP에 대해 최대 2회의 조건부 체크가 수행된다. 최종적으로, 위의 단계 7에서 표시된 바와 같이, 코딩된 빈의 1회의 기입 동작이 수행된다.
각각의 빈에 대한 콘텍스트 인덱스를 결정하기 위한 판독, 체크 및 기입 동작들에 대한 모든 3가지 경우에 대한 평균 값들은 3회의 판독, 6회의 체크 및 1회의 기입이다. 이 평균은, MB에서의 4개의 8x8 블록 중에서, 하나의 블록이 상이한 MB에서 그것의 이웃들 양쪽 모두를 가질 가능성이 있고, 2개의 블록이 상이한 MB들에서 그것의 이웃들 중 하나를 가질 가능성이 있고, 하나의 블록이 동일한 MB에서 그것의 이웃들 양쪽 모두를 가질 가능성이 있다는 결정론적 지식에 기초하여 획득된다.
위의 계산 데이터는, 각각의 프레임에 대해 32,400개의 8x8 블록을 갖는, 1080p 콘텐츠의 프레임에 대해 외삽될 수 있다. 이 경우, 블록들의 25%(8,100개의 블록)가 상이한 MB들에서 이웃들 양쪽 모두를 가질 것이고, 블록들의 50%(16,200개의 블록)가 상이한 MB들에서 하나의 이웃을 가질 것이며, 블록들의 25%(8,100개의 블록)가 동일한 MB에서 이웃들 양쪽 모두를 가질 것이다. 따라서, 루마 CBP의 32,400개의 빈을 코딩하기 위해, 콘텍스트 인덱스를 결정하는데 필요한 계산들의 횟수는 97,200회의 판독 동작, 1,094,400회의 체크 동작 및 32,400회의 기입 동작일 것이다.
다음에, 도 4를 한번 더 참조하면, 본 명세서에 개시된 발명 대상에 따른 콘텍스트 결정을 위한 브로드캐스팅 방법은 신택스 요소인 "루마 코딩된 블록 패턴"에 대해 한번 더 설명될 것이다. 이전에 언급된 바와 같이, 블록 C, D 및 E는 현재 블록, 하부 이웃 블록 및 우측 이웃 블록을 각각 나타낸다. 다음의 단계들은 브로드캐스팅 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행된다.
예비 사항으로서, 모든 블록들에 대한 루마 CBP 콘텍스트-인덱스들이 신택스 요소 루마 CBP의 최저 또는 제1 콘텍스트-인덱스(73임)로 초기화되는 초기화 단계가 수행된다. 일 실시예에서, 픽처의 현재 및 후속 로우에서의 모든 매크로블록들의 루마 CBP 빈들에 대한 콘텍스트-인덱스들의 2개의 로우가 초기화된다. 블록 C의 루마 CBP 빈은 콘텍스트 인덱스의 초기화되거나 업데이트된 값을 이용하여 코딩된다. 블록 C의 특성들 및 코딩된 빈 값들에 기초하여, 이웃 블록 D 및 E에서의 대응하는 빈의 콘텍스트 인덱스는, 이들이 초기화 값과 상이한 경우에 업데이트된다.
도 5는 브로드캐스팅 방법을 이용한 콘텍스트-인덱스들의 도출 시에 수반되는 단계들의 일례를 도시하는 플로우차트이다. 예비적으로, 콘텍스트 인덱스의 2개의 로우가 제1 콘텍스트 인덱스 값(즉, 73)으로 초기화된다. 블록 C의 루마 CBP 빈은 콘텍스트-인덱스의 초기화되거나 업데이트된 값을 이용하여 코딩된다. 블록 C의 특성들 및 코딩된 빈 값에 기초하여, 이웃 블록 D 및 E에서의 대응하는 빈의 콘텍스트-인덱스는, 이들이 초기화 값과 상이한 경우에 업데이트된다.
프로세스는 단계(505)에서 시작하고, 이 때 콘텍스트-인덱스-오프셋이 초기화된다. 구체적으로, 루마 CBP의 4개의 빈에 대응하는 콘텍스트-인덱스 값들의 2개의 로우가 초기화된다. 이 단계는 로우에서의 모든 매크로블록들에 대해 단일 횟수 수행될 수 있다. 다음에, 단계(510)에서, 현재 MB가 I-PCM인 경우, 단계들(515 및 530)에서 각각 표시된 바와 같이, 이웃 MB들의 콘텍스트-인덱스들에 어떠한 변경도 이루어지지 않고, CBP는 코딩되지 않는다. 이 시점에, 단계(535)에서 표시된 바와 같이, 다음 신택스 요소의 코딩이 수행된다.
한편, 단계(520)에서, 현재 MB가 I-PCM이 아니라 Skip MB인 경우, 단계(525)에서, 콘텍스트-인덱스는 우측 이웃 MB들에 대해서는 1만큼 증분되고, 하부 이웃 MB들에 대해서는 2만큼 증분된다. 현재 MB가 I-PCM도 스킵 MB도 아닌 경우, 프로세스는 단계(540)로 계속된다. 단계(540)에서 현재 MB가 Intra_16x16 MB인 경우, 그리고 단계(545)에서 CBP 빈 값이 0과 동일한 경우, 단계(550)에서, 콘텍스트-인덱스는 우측 이웃 MB들에 대해서는 1만큼 증분되고, 하부 이웃 MB들에 대해서는 2만큼 증분된다. 프로세스는 단계(560)에서 다음 신택스 요소의 코딩으로 계속된다.
단계(540)로 리턴하여, 현재 MB가 Intra_16x16 MB가 아닌 경우, 프로세스는 단계(565)로 진행하고, 여기서 (I-PCM, 스킵 및 Intra_16x16 블록들은 제외하고) 타입에 관계없이, 현재 블록에 대응하는 빈에 대한 콘텍스트-인덱스가 판독되고, 후속하여 단계(570)에서 코딩된다. 단계(575)에서, 코딩된 빈 값이 0과 동일한 것으로 결정되는 경우, 단계(580)에서, 콘텍스트-인덱스는 우측 이웃 MB에 대해서는 1만큼 증분되고, 하부 이웃 MB에 대해서는 2만큼 증분된다. 단계(585)에서, 모든 4개의 루마 CBP 빈들이 코딩되는지가 결정된다. 그렇지 않은 경우, 프로세스는 나머지 루마 CBP 빈들에 대해 단계(565)로 리턴한다. 일단 현재 MB의 모든 4개의 루마 CBP 빈이 코딩되면, 프로세스는 단계(590)에서 다음 신택스 요소를 코딩하기 시작한다.
위의 프로세스에서는 CBP가 I_PCM 또는 P_SKIP 또는 B_SKIP이 아닌 MB들에 대해서만 코딩되기 때문에, 다이렉트 방법과 함께 이용된 바와 같은 콘텍스트-인덱스 계산을 위한 이웃 블록들의 mb_type에 대한 체크들이 완전히 제거된다.
블록 E 및 D에서의 콘텍스트-인덱스들은 이제 손쉽게 이용가능하다. 샘플 D 및 E에 대한 빈 값들이 이용가능하자마자, 블록 D 및 E에 의해 '팬아웃(fanned-out)'되는 후속 콘텍스트-인덱스들이 업데이트될 수 있다.
각각의 빈을 코딩하기 위한 콘텍스트 인덱스를 결정하기 위한 계산 요건들은 다음과 같다. 계산 복잡도는 (단계들(525 및 550)에서 표시된 바와 같이) 1회의 조건부 체크 및 (단계들(525 및 550)에서 표시된 바와 같이) 최대 2회의 기입 동작으로 감소한다. 2회의 기입 동작은 최악의 경우라는 점에 유의한다. 기입 동작은 콘텍스트가 초기화 값과 상이한 경우에만 수행된다. 초기화는 나중에 설명되는 바와 같이 통계적으로 잘 작동하여 기입들의 횟수를 감소시킨다. 계산 복잡도는 이웃 블록이 동일한 MB에 속하는지 또는 상이한 MB에 속하는지에 관계없이 동일할 것이다.
위의 계산 데이터 요건들은 다음과 같이 1080p 콘텐츠의 각각의 프레임에 대해 외삽될 수 있다. 코딩되는 루마 CBP의 32,400개의 빈에 대해, 콘텍스트 인덱스 결정에 필요한 계산들은 32,400회의 체크, (전형적인 고 비트 레이트 콘텐츠에 대해서는) 6,480회의 기입 동작, 또는 (전형적인 저 비트 레이트 콘텐츠에 대해서는) 16,200회의 기입 동작일 것이다. 표 1은 1080p 콘텐츠의 각각의 프레임에 대해 본 명세서에 개시된 발명 대상에 따른 콘텍스트 결정을 위한 브로드캐스팅 방법과 종래의 다이렉트 방법 사이의 계산 데이터 요건들을 비교한다.
위에 표시된 바와 같은 전형적인 고 비트 레이트 콘텐츠 및 저 비트 레이트 콘텐츠에 대한 기입 동작들의 횟수는 전형적인 1080p 콘텐츠에 대해 루마 CBP에서 발견된 1들 및 0들의 분포에 기초하였다.
신택스 요소 루마 CBP를 코딩할 때의 계산 복잡도에서의 추가 감소
아래에 설명되는 바와 같이, 루마 CBP를 디코딩하는 동안 계산 복잡도에서의 추가 감소는 비트 레이트에 기초하여 달성될 수 있다. 고 비트 레이트 스트림들에 대해, 1들을 갖는 CBP 빈들은 상대적으로 높다는 것이 관측되었다. 이에 반해, 저 비트 레이트 스트림들에 대해, 0들을 갖는 CBP 빈들은 상대적으로 높다. 예들로서, QCIF 해상도(176x144)를 갖는 H.264 표준 위원회의 2개의 적합 스트림을 고려한다. 구체적으로, 저 비트 레이트 스트림에 대해, CABACI3_Sony_B: (189 kbps)를 고려한다. 이 스트림에 대해, 루마 CBP에서의 1들의 개수는 23107이고, 루마 CBP에서의 0들의 개수는 72661이다. 고 비트 레이트 스트림에 대해, CABA1_Sony_D: (758 kbps)를 고려한다. 이 스트림에 대해, 루마 CBP에서의 1들의 개수는 17735이고, 루마 CBP에서의 0들의 개수는 2065이다.
위에서 설명된 바와 같이, 브로드캐스팅 방법은 각각의 신택스 요소에 대해 이용가능한 콘텍스트-인덱스들의 세트 중 제1 콘텍스트-인덱스로 초기화되는 콘텍스트-인덱스들을 갖는다. 콘텍스트-인덱스들에 대한 업데이트들은 콘텍스트-인덱스에 대한 증분이 비제로일 때 발생하며, 이는 결국 mb 타입에 대한 특정 조건들 하에서 루마 CBP 빈이 0일 때 발생한다. 이것은 CBP에서의 0들의 개수가 상대적으로 적은 것으로 발견된 고 비트 레이트 경우들에서 유리한 것으로 나타난다. 예를 들어, CABA1_Sony_D 스트림에 대한 총 19800개의 루마 CBP 빈 중에서, 콘텍스트-인덱스들에 대해 4130회의 업데이트만이 요구되는데, 이는 브로드캐스팅 방법에 대한 최악의 경우의 기입 동작들의 횟수의 10.4%를 차지한다.
저 비트 레이트 스트림들에 대해 유사한 접근법을 이용하는 것은 다음과 같이 초기화 및 업데이트 스킴들을 변경하기 위한 가이던스를 제공한다. (매우 저 비트 레이트 콘텐츠의 경우에서와 같이) CBP에 상대적으로 적은 개수의 1들이 존재하는 경우, 콘텍스트-인덱스들은 각각의 신택스 요소에 대해 이용가능한 최고 가능한 콘텍스트-인덱스로 초기화된다. 추가로, 콘텍스트-인덱스는 mb 타입에 대한 특정 조건들 하에서 CBP가 1일 때 감분된다. 이것은 CBP에서의 1들의 개수가 상대적으로 적은 것으로 발견된 저 비트 레이트 경우들에 대해 유리한 것으로 나타난다. 예를 들어, CABACI3_Sony_B 스트림에 대한 총 95768개의 루마 CBP 빈 중에서, 콘텍스트-인덱스들에 대해 46214회의 업데이트만이 요구되는데, 이는 최악의 경우의 기입 동작들의 횟수의 24%를 차지한다.
루마 CBP 신택스 요소의 예에 대해 다음과 같이 2가지 경우가 요약될 수 있다.
경우 1 : 콘텍스트-인덱스가 증분된다(1들의 높은 수를 선호함)
a. 그 신택스 요소에 대한 콘텍스트-인덱스들의 이용가능한 세트에서의 제1 콘텍스트(예를 들어, 루마 CBP에 대해 73)로 콘텍스트-인덱스를 초기화한다.
b. 0으로서 디코딩되는 모든 CBP 빈에 대해, 또는 현재 블록이 스킵 매크로블록에 속하는 경우, 이웃 블록들의 콘텍스트-인덱스를 증분하여, 이러한 경우들에서 기입 동작을 초래한다(CBP에 대한 하부 이웃에 대해 2만큼 증분하거나 또는 우측 이웃에 대해 1만큼 증분함).
고 비트 레이트 스트림들에 대해, 1들을 갖는 CBP 빈들은 높고, 이 경우 더 적은 기입 동작들/증분들이 초래될 것이다.
경우 2 : 콘텍스트-인덱스가 감분된다(0들의 높은 수를 선호함)
a. 그 신택스 요소에 대한 콘텍스트-인덱스들의 이용가능한 세트에서의 마지막 콘텍스트(예를 들어, 루마 CBP에 대해 76)로 콘텍스트-인덱스를 초기화한다.
b. 1로서 디코딩되는 모든 CBP 빈에 대해, 또는 현재 블록이 PCM MB에 속하는 경우, 이웃 블록들의 콘텍스트-인덱스를 감분하여, 이러한 경우들에서 기입 동작을 초래한다(CBP에 대한 하부 이웃에 대해 2만큼 감분하거나 또는 우측 이웃에 대해 1만큼 감분함).
아래의 표 2는 코딩된 블록의 mb_type 및 코딩된 빈에 기초하여 이웃들에 대해 이루어지는 업데이트들을 요약한다. 증분들 및 감분들은 우측 이웃 MB들에 대해서는 1만큼 이루어지고, 하부 이웃 MB들에 대해서는 2만큼 이루어진다.
다음에, QCIF 해상도를 갖는 H.264 표준 위원회로부터의 2개의 적합 스트림을 고려한다. 구체적으로, 고 비트 레이트 콘텐츠에 대해, CABA1_Sony_D(758 kbps) 스트림을 고려하는데, 여기서 이 콘텐츠에 존재하는 mb_type들(pcm, 스킵 및 다른 것들)에 기초한 MB들의 분포는 다음과 같다: 0개의 PCM mb, 0개의 스킵 mb: 0 및 4950개의 다른 mb. 루마 CBP 빈 값들은 다음과 같이 분포된다: 17735개의 1 및 2065개의 0.
표 3은 MB들 및 CBP 빈들의 분포에 기초한 계산 요건들을 제시한다.
고 비트 레이트 콘텐츠와 함께 경우 1을 이용하면, 경우 2와 비교하여, 콘텍스트-인덱스를 업데이트할 때 계산 사이클들의 횟수에서 약 88%의 절감이 달성될 수 있다. 따라서, 경우 1은 고 비트 레이트 콘텐츠를 선호하는데, 그 이유는 1의 값을 갖는 CBP 빈들의 개수가 0의 값을 갖는 CBP 빈들의 개수보다 더 많기 때문이다.
다음에, 저 비트 레이트 콘텐츠에 대해, CABACI3_Sony_B(189 kbps) 스트림을 고려하는데, 여기서 mb_type들에 기초한 MB들의 분포는 다음과 같다: 0개의 PCM MB, 5758개의 스킵 MB 및 23942개의 다른 MB. 루마 CBP 빈 값들은 다음과 같이 분포된다: 23107개의 1 및 72661개의 0.
MB들 및 CBP 빈들의 분포에 기초하여, 계산 요구가 표 4에 제시된다.
저 비트 레이트 콘텐츠와 함께 경우 2를 이용하면, 경우 1과 비교하여, 콘텍스트-인덱스를 업데이트할 때 계산 사이클들의 횟수에서 약 83.7%의 절감이 달성된다. 따라서, 경우 2는 저 비트 레이트 콘텐츠를 선호하는데, 그 이유는 0의 값을 갖는 CBP 빈들의 개수가 1의 값을 갖는 CBP 빈들의 개수보다 더 많기 때문이다.
위의 분석은 콘텍스트 인덱스를 업데이트하기 위해 다음의 접근법을 이용하는 것을 제안한다. 먼저, 스트림의 비트 레이트를 체크한다. 다음에, 선택된 접근법을 이용하여 더 적은 기입 동작들이 초래되도록, 신택스 요소의 빈들에서의 1들 및 0들의 예측된 상대적인 개수에 기초하여 경우 1 또는 경우 2를 선택한다. 예를 들어, 위에서 설명된 경우 1을 이용함으로써, CBP에 더 많은 1들이 존재할 때 더 적은 기입 동작들이 초래된다.
QCIF 스트림들에 대한 계산 요구를 대략 비교함으로써 표 5 및 표 6에서 종래의 다이렉트 방법 및 브로드캐스팅 방법이 비교된다.
브로드캐스팅 방법이 이용될 수 있는 일례로서 루마 CBP의 디코딩을 제시하였지만, H.264에서의 다른 예시적인 신택스 요소, 구체적으로 mb_qp_delta의 디코딩이 다음에 고려될 것이다.
예 - 신택스 요소 mb_qp_delta의 제1 빈의 디코딩
잔여 데이터를 코딩하기 위해 이용된 루마 양자화 파라미터(QPy)의 값이 슬라이더 헤더에서 송신된다. 신택스 요소 mb_qp_delta는 MB 계층에서 이 파라미터에 대한 임의의 변경들을 시그널링하는데 이용된다. 신택스 요소 mb_qp_delta는 타입 I_PCM, Skip의 매크로블록들에 대해서 그리고 0의 CBP 값을 갖는 Intra16x16에 대해서 송신되지 않는다. 모든 다른 MB들에 대해, 이 신택스 요소는 송신된다.
H.264는 mb_qp_delta 신택스 요소의 제1 빈을 디코딩하기 위한 2가지 상이한 콘텍스트를 특정한다. 이웃 매크로블록으로부터의 정보에 기초하여 특정 콘텍스트가 선택된다. 이웃 MB는 코딩 순서에서 현재 블록 이전의 블록이다.
mb_qp_delta의 제1 빈(bin_0)을 디코딩하기 위해 이용되는 콘텍스트-인덱스를 결정하기 위한 계산 요구가 아래에서 검사될 것이다. 다이렉트 코딩 방법 및 브로드캐스팅 코딩 방법 양쪽 모두에 대한 계산 요구가 비교될 것이다.
다음의 단계들은 다이렉트 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행된다. 먼저, 단계 1에서, 콘텍스트-인덱스는 콘텍스트-인덱스-오프셋으로 초기화된다. 단계 2에서, 신택스 요소 mb_qp_delta는 타입 I_PCM 및 Skip의 매크로블록들에 대해 그리고 0의 CBP 값을 갖는 넌-Intra16x16 매크로블록에 대해 송신되지 않는다. 오히려, 프로세스는 아래에 논의되는 단계 9로 진행한다. 단계 3에서, 신택스 요소는 단계 2에서 특정되지 않은 모든 다른 매크로블록들에 대해 송신된다. 다음에, 단계 4에서, 이전 MB(즉, 코딩 순서에서 이전에 있음)의 신택스 요소 CBP, mb_type, mb_qp_delta가 판독된다. 단계 5에서 이전 MB로부터 판독된 값들에 대해 다음의 조건부 체크들이 수행된다:
a. 이웃 MB의 mb_type = I_PCM 또는 P_Skip 또는 B_Skip인지를 체크한다;
b. 이웃 MB의 mb_type != Intra_16x16 그리고 CBP = 0인지를 체크한다;
c. 위의 조건들 중 임의의 조건이 참인 경우, 빈을 코딩하기 위해 단계 7로 진행한다;
d. 이웃 MB의 mb_qp_delta = 0인지를 체크하고, 그러한 경우, 빈을 코딩하기 위해 단계 7로 진행한다.
그렇지 않은 경우, 단계 6에서, 콘텍스트-인덱스를 1만큼 증분한다. 단계 7에서, 업데이트된 콘텍스트-인덱스와 연관된 콘텍스트가 제1 빈 ofmb_qp_delta를 코딩하기 위해 이용된다. 단계 8에서, 다른 빈들이 코딩되고, 코딩된 mb_qp_delta 값이 저장된다. 최종적으로, 단계 9에서, 다음 신택스 요소가 코딩된다.
따라서, mb_qp_delta의 제1 빈을 디코딩할 때, (단계 4에서 표시된 바와 같이) 3회의 판독 동작이 수행되고, (단계 5.a, 5.b 및 5.d에서 표시된 바와 같이) 최대 6회의 조건부 체크가 수행되고, (단계 8에서 표시된 바와 같이) 1회의 기입 동작이 수행된다.
1080p 콘텐츠의 프레임에 대한 계산 요구를 외삽하면 - 각각의 프레임은 8100개의 매크로블록을 가짐 -, 24,300회의 판독 동작, 최대 48,600회의 체크 및 8,100회의 기입 동작이 존재할 것이다.
도 6은 본 명세서에 설명된 브로드캐스팅 방법을 이용하여 콘텍스트-인덱스를 도출하기 위해 수행될 수 있는 프로세스의 일례를 도시하는 플로우차트이다. 먼저, 단계(605)에서, 콘텍스트 인덱스들의 로우가 디폴트 값(콘텍스트-인덱스-오프셋)으로 초기화된다. 초기화되는 콘텍스트 인덱스들은 이 로우에서의 모든 매크로블록들에 대한 mb_qp_delta의 제1 빈(bin_0)에 대응하는 것들이다. 다음에, 단계(610)에서, 현재 MB가 타입 I_PCM 또는 Skip을 갖는 경우, 신택스 요소 mb_qp_delta는 송신되지 않고, 프로세스는 단계(640)로 진행하는데, 여기서 다음 신택스 요소가 코딩된다. 한편, 단계(610)에서, 현재 MB가 타입 I_PCM 또는 Skip을 갖지 않는 경우, 프로세스는 단계(615)로 진행하고, 여기서 현재 MB가 타입 Intra_16x16을 갖는지 및 CBP가 0과 동일한지가 결정된다. 그렇지 않은 경우, 한번 더 신택스 요소 mb_qp_delta는 송신되지 않고, 프로세스는 단계(640)로 진행하는데, 여기서 다음 신택스 요소가 코딩된다.
단계(615)에서, 현재 MB가 타입 Intra16x16을 가지며 CBP가 0과 동일하다고 결정되는 경우, 단계(620)에서, mb_qp_delta의 제1 빈(bin_0)은 초기화되거나 업데이트된 콘텍스트-인덱스와 연관된 콘텍스트를 이용하여 코딩된다. 다음에, 단계(625)에서, mb_qp_delta의 모든 다른 빈들이 코딩된다. 프로세스는 단계(630)로 계속되고, 여기서 mb_qp_delta가 0보다 큰 값을 갖는지가 결정된다. 그러한 경우, 단계(635)에서, 코딩 순서에서 다음 MB의 콘텍스트-인덱스가 1만큼 증분되고, 그 이후에 프로세스는 단계(640)에서 다음 신택스 요소를 코딩하기 시작한다.
0의 CBP 값을 갖는 Intra16x16 MB들, 그리고 타입 I_PCM, Skip의 매크로블록들에 대해 신택스 요소 mb_qp_delta가 송신되지 않기 때문에, 이웃 MB의 CBP 및 mb_type의 판독 동작들 및 조건부 체크들은 브로드캐스팅 방법을 이용하여 제거된다.
mb_qp_delta의 제1 빈을 디코딩하기 위한 계산 요구는 (단계(630)에서 표시된 바와 같이) 1회의 조건부 체크 및 (단계(635)에서 표시된 바와 같이) 최대 1회의 기입 동작을 수반한다. 1080p 콘텐츠의 프레임에 대한 이러한 계산 요구를 외삽하면 - 각각의 프레임은 8100개의 매크로블록을 가짐 -, 8100회의 체크 및 최대 8100회의 기입 동작을 산출한다.
표 7은 1080p 콘텐츠의 각각의 프레임에 대한 다이렉트 방법과 브로드캐스팅 방법 사이의 계산 데이터 요건들을 비교한다.
위에서 제시된 CBP의 예는 모든 적용가능한 신택스 요소들로 일반화될 수 있다. 도 7은 이러한 프로세스의 일례를 예시하는 플로우차트이다. 먼저, 단계(710)에서, 콘텍스트-인덱스는 이 신택스 요소 빈에 대해 이용가능한 제1 콘텍스트로 초기화된다. 다음에, 단계(720)에서, 콘텍스트 인덱스의 초기화되거나 업데이트된 값과 연관된 콘텍스트가 빈을 디코딩하는데 이용된다. 디코딩된 빈의 값 및 현재 블록의 지식에 기초하여, 판정 단계(730)에서, 이웃 빈들의 콘텍스트 인덱스에 대한 임의의 업데이트가 필요한지를 결정한다. 예인 경우, 프로세스는 단계(740)로 진행하고, 여기서 이웃 빈들의 콘텍스트 인덱스가 업데이트된다. 아니오인 경우, 프로세스는 단계(750)로 계속되고, 여기서 다음 빈이 디코딩된다.
콘텍스트를 결정하기 위해 이웃 MB들로부터 정보에 액세스할 필요성을 제거함으로써, 본 명세서에 설명된 기술들은 판독 동작들, 조건부 체크들 및 기입 사이클의 횟수를 감소시키는 것에 의해 상당한 시간 절감을 달성한다.
이웃 MB들(예를 들어, 일부 경우에는 우측 및 하부 이웃들 그리고 다른 경우에는 다음 이웃)의 빈에 대한 콘텍스트-인덱스 값들은 현재 블록에서의 빈을 디코딩한 이후에 업데이트된다. 이러한 콘텍스트 인덱스들을 저장 및 업데이트하기 위한 최적 설계는 매크로블록들의 현재 및 다음 로우의 빈들에 대응하는 콘텍스트-인덱스 값들의 2개의 로우(2개의 이웃 MB를 업데이트할 때) 또는 하나의 로우(단 하나의 이웃 MB를 업데이트할 때)를 유지하는 것이다. 현재 로우 및 다음 로우에서의 요소들은 디폴트 값(예를 들어, 신택스 요소에 대해 이용가능한 제1 콘텍스트와 연관된 콘텍스트-인덱스)으로 초기화되고, 필요할 때 업데이트된다. MB들의 현재 로우의 끝에서, 다음 로우가 현재 로우로 되고, 이전의 현재 로우가 다음 로우로 되고, 다음에 다음 로우가 디폴트 값으로 재초기화된다.
역이진화
이전에 논의된 바와 같이, 비이진 값들을 갖는 것들을 포함하여 모든 신택스 요소들은 CABAC 인코딩이 수행되기 이전에 먼저 빈들의 시퀀스로서 이진으로 표현된다. 이러한 프로세스는 이진화로서 알려져 있다. H.264 및 HEVC에서 이용되는 4가지 기본 타입의 이진화 스킴이 존재한다: 일진 코드(unary code), 절단된 일진 코드(truncated unary code), k차 Exp-Golomb 코드 및 고정-길이 코드. 일부 경우에, 이러한 기본 타입들을 이용한 연쇄 코드들이 이용되었다. 일부 신택스 요소들은 표준에서 미리 정의되는 코드들을 갖는다. 예를 들어, mb_type(I, P, B) 및 sub_mb_type 신택스 요소들은 이 카테고리에 있다.
디코더에서, 빈들은 이들이 도달하는 순서로 디코딩되고, 수신된 빈들은 역이진화된다. 각각의 신택스 요소에 대해, 디코딩된 빈들의 스트링이 유지된다. 신택스 요소의 각각의 빈을 디코딩한 이후에, 디코딩되고 있는 현재 신택스 요소에 대한 빈 스트링이 업데이트된다. 일단 유효 신택스 요소가 수신되었으면, 현재 신택스 요소에 대한 역이진화 프로세스가 종단되고, 다음 신택스 요소에 대한 역이진화 프로세스가 개시된다. 역이진화 프로세스를 종단하는 프로세스는 이용되는 이진화 스킴에 종속한다. 예를 들어, 주어진 신택스 요소에 일진 코드가 이용된 경우, 일단 0이 수신되었으면 역이진화 프로세스가 종단된다. mb-type 및 sub-mb_type과 같은 신택스 요소들에 대해, 표준들은 신택스 요소의 모든 가능한 값들의 표를 정의한다. 빈 스트링에서의 각각의 빈 값을 디코딩한 이후에, 표준 구현에서 그리고 레거시 구현에서 정의된 역이진화 절차는 부분적으로 디코딩된 빈 스트링과 이러한 표에서의 모든 엔트리들을 비교한다.
본 명세서에 개시된 발명 대상의 일 양태는 mb_type 및 sub_mb_type과 같은 신택스 요소들에 대해 이러한 표형 코드들의 역이진화를 위한 더 최적인 방법에 관련된다. 다음의 예는 I mb_type들의 역이진화를 고려할 것이다. H.264 표준에서 정의되는 표 8은 다양한 I mb_type들에 대응하는 빈 스트링을 제시한다. 위에서 설명된 종래의 방법에서, 각각의 빈이 디코딩된 이후에, 결과적인 빈 스트링은 이러한 표에 제시된 25개의 신택스 요소 각각과 비교된다. 대조적으로, 본 명세서에 설명된 방법은 검색될 필요가 있는 이러한 표에서의 엔트리들의 개수를 상당히 감소시킨다.
이 방법에 따르면, 각각의 유효 신택스 요소에서의 빈들의 개수가 주목된다. 표 8로부터 알 수 있는 바와 같이, I mb_type 신택스 요소들에 대해 1 비트, 2 비트, 6 비트 및 7 비트 빈 스트링이 존재한다. 다음에, 이 표는 연속적인 방식으로 동일한 비트 수를 갖는 모든 빈 스트링들을 배열하도록 재배열된다. 표 9는 동일한 개수의 빈을 갖는 모든 mb_type이 함께 그룹화되는 본 발명에서의 재배열된 엔트리들을 제시한다. 이 예에서, 엔트리들은 최소 비트 수를 갖는 빈 스트링으로부터 최대 비트 수를 갖는 빈 스트링으로 순서화된다.
빈 스트링에서의 각각의 빈을 디코딩한 이후에, 업데이트된 빈 스트링에서의 빈들의 개수는 유효 신택스 요소를 초래할 수 있는지를 확인하기 위해 체크된다. 그러한 경우, 주어진 개수의 빈들을 포함하는 표에서의 엔트리들만이 검색된다. 따라서, 이 예에서, 제1 빈이 디코딩된 이후에, 빈 스트링은 그것의 값이 "0"인지를 확인하기 위해 체크된다. 그렇지 않은 경우, 빈 스트링에서의 다음 빈이 디코딩된다. 한번 더, 업데이트된 빈 스트링은, 업데이트된 빈 스트링에서 주어진 개수의 빈들을 갖는 표 9에서의 엔트리들과 비교되어, 빈 스트링이 "1,1"인 이 표에서의 제2 엔트리와 매칭하는지를 체크한다. 이 단계 이후에, 4 이상의 빈이 디코딩된다. 이 시점에서, 이진 스트링은 표 엔트리 3-10에 대해서만 매칭된다. 이 시점에서 여전히 매칭하는 엔트리가 존재하지 않는 경우, 마지막 빈이 디코딩되고, 엔트리 11-25에 대해 매칭된다. 임의의 시점에, 유효 신택스 요소가 발견될 때, 그 신택스 요소에 대한 디코딩 프로세스가 종단된다.
역이진화에 요구되는 시간에서의 최대 75%의 절감은 신택스 요소 mb_type이 본 명세서에 설명된 기술을 이용하여 역이진화될 때 달성될 수 있다고 입증되었다. 본 명세서에 설명된 방법 및 레거시 방법을 이용하여 각각의 mb_type을 역이진화하기 위해 수행되는 검색들의 횟수의 비교는 도 8에 도시되어 있다.
Claims (20)
- 비디오 압축 또는 압축해제를 위해 콘텍스트 기반 적응형 이진 산술 코딩(Context-based Adaptive Binary Arithmetic Coding)(CABAC)을 수행할 때 콘텍스트-인덱스를 결정하는 방법으로서,
코딩될 블록들의 적어도 하나의 다음 로우(row) 및 코딩될 블록들의 최대 2개의 다음 로우를 포함하는 주어진 블록들과 연관되는 선택된 신택스 요소들의 복수의 콘텍스트-인덱스 각각을 초기화 값으로 초기화하는 단계;
종속적인 이웃 블록들(dependent neighboring blocks)의 코딩 이전에 상기 주어진 블록들의 상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 평가하는 단계 - 상기 종속적인 이웃 블록들은 상기 주어진 블록들 내의 현재 빈 포지션(current bin position)의 코딩에 종속하는 콘텍스트-인덱스를 갖는 블록들임 -; 및
상기 종속적인 이웃 블록들의 콘텍스트-인덱스가 상기 초기화 값들로부터 변경되는 경우 상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 업데이트하는 단계
를 포함하는 방법. - 제1항에 있어서,
상기 선택된 신택스 요소들은 H.264/MPEG 4 AVC 표준에서 특정되고, mb_type, mb_skip_flag, transform_size_8x8_flag, mb_qp_delta, mb_field_decoding_flag, intra_chroma_pred_mode, mvd (horizontal)_10, mvd (vertical)_10, mvd (horizontal)_11, mvd (vertical)_11, ref_idx_10 및 ref_idx_11, coded_block_pattern 및 coded_block_flag로 구성된 그룹으로부터 선택되는 방법. - 제1항에 있어서,
상기 선택된 신택스 요소들은 HEVC 표준에서 특정되고, 상기 비디오 압축 또는 압축해제가 HEVC를 이용하여 수행된 경우에 split_cu_flag, cu_skip_flag, sig_coeff_flag로 구성된 그룹으로부터 선택되는 방법. - 제1항에 있어서,
상기 종속적인 이웃 블록들의 콘텍스트-인덱스는, 적어도 하나의 특정된 조건이 만족될 때 상기 주어진 블록들 내의 현재 빈 포지션의 코딩에만 종속하고, 상기 특정된 조건들 중 하나는 mb_type에 종속하는 방법. - 제1항에 있어서,
상기 복수의 콘텍스트-인덱스를 초기화하는 단계는, 모든 콘텍스트-인덱스들을 코딩되고 있는 선택된 신택스 요소에 대한 최소 가능한 콘텍스트-인덱스로 선택적으로 초기화하는 단계를 포함하는 방법. - 제5항에 있어서,
상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 업데이트 및 초기화하는 것은, 압축되거나 압축해제되고 있는 비디오 스트림의 비트 레이트 및 mb_type에 기초하여 상기 콘텍스트-인덱스를 증분하는 것을 포함하는 방법. - 제1항에 있어서,
상기 복수의 콘텍스트-인덱스를 초기화하는 단계는, 모든 콘텍스트-인덱스들을 코딩되고 있는 선택된 신택스 요소에 대한 최대 가능한 콘텍스트-인덱스로 초기화하는 단계를 포함하는 방법. - 제7항에 있어서,
상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 업데이트 및 초기화하는 것은, 압축되거나 압축해제되고 있는 비디오 스트림의 비트 레이트 및 mb_type에 기초하여 상기 콘텍스트-인덱스를 감분하는 것을 포함하는 방법. - CABAC 인코더로서,
신택스 요소를 빈들의 시퀀스로 변환하기 위한 이진화 모듈;
상기 빈들의 시퀀스에 기초하여 상기 신택스 요소에 대한 하나 이상의 콘텍스트 모델을 획득하기 위한 콘텍스트-인덱스 모듈 - 상기 콘텍스트 모델들 각각은 콘텍스트 모델과 연관되고, 상기 콘텍스트-인덱스 모듈은 코딩될 블록들의 적어도 하나의 다음 로우 및 코딩될 블록들의 최대 2개의 다음 로우를 포함하는 주어진 블록들과 연관된 상기 신택스 요소의 콘텍스트-인덱스를 초기화함으로써 상기 하나 이상의 콘텍스트 모델을 획득하고, 종속적인 이웃 블록들의 코딩 이전에 상기 주어진 블록들의 상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 평가하고, 상기 종속적인 이웃 블록들은 상기 주어진 블록들 내의 현재 빈 포지션의 코딩에 종속하는 콘텍스트-인덱스를 갖는 블록들임 -; 및
상기 빈들의 시퀀스에 기초하여 상기 하나 이상의 콘텍스트 모델을 업데이트하고, 상기 하나 이상의 콘텍스트 모델을 이용하여 상기 시퀀스에서의 상기 빈들 각각을 인코딩하기 위한 산술 인코더 - 상기 산술 인코더는, 상기 종속적인 이웃 블록들의 연관된 콘텍스트-인덱스들이 초기화 값들로부터 변경되는 경우 상기 종속적인 이웃 블록들의 연관된 콘텍스트-인덱스들을 업데이트함으로써 상기 하나 이상의 콘텍스트 모델을 업데이트함 -
를 포함하는 CABAC 인코더. - 제9항에 있어서,
상기 콘텍스트-인덱스 모듈은 상기 빈들의 시퀀스에서의 각각의 빈에 콘텍스트 모델을 할당하도록 추가로 구성되는 CABAC 인코더. - 제9항에 있어서,
상기 종속적인 이웃 블록들의 콘텍스트-인덱스는, 적어도 하나의 특정된 조건이 만족될 때 상기 주어진 블록들 내의 현재 빈 포지션의 코딩에만 종속하고, 상기 특정된 조건들 중 하나는 mb_type에 종속하는 CABAC 인코더. - 제9항에 있어서,
상기 콘텍스트-인덱스 모듈은, 모든 콘텍스트-인덱스들을 코딩되고 있는 선택된 신택스 요소에 대한 최소 가능한 콘텍스트-인덱스로 선택적으로 초기화함으로써 복수의 콘텍스트-인덱스를 초기화하도록 추가로 구성되는 CABAC 인코더. - 제12항에 있어서,
상기 콘텍스트-인덱스 모듈은, 압축되거나 압축해제되고 있는 비디오 스트림의 비트 레이트 및 mb_type에 기초하여 상기 콘텍스트-인덱스를 증분함으로써 상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 업데이트 및 초기화하도록 추가로 구성되는 CABAC 인코더. - 제9항에 있어서,
상기 콘텍스트-인덱스 모듈은, 모든 콘텍스트-인덱스들을 코딩되고 있는 선택된 신택스 요소에 대한 최대 가능한 콘텍스트-인덱스로 초기화함으로써 복수의 콘텍스트-인덱스를 초기화하도록 추가로 구성되는 CABAC 인코더. - 제14항에 있어서,
상기 콘텍스트-인덱스 모듈은, 압축되거나 압축해제되고 있는 비디오 스트림의 비트 레이트 및 mb_type에 기초하여 상기 콘텍스트-인덱스를 감분함으로써 상기 종속적인 이웃 블록들의 콘텍스트-인덱스를 업데이트하고 초기화하도록 추가로 구성되는 CABAC 인코더. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462003711P | 2014-05-28 | 2014-05-28 | |
US62/003,711 | 2014-05-28 | ||
PCT/US2015/032835 WO2015184069A1 (en) | 2014-05-28 | 2015-05-28 | Acceleration of context adaptive binary arithmetic coding (cabac) in video codecs |
US14/723,786 | 2015-05-28 | ||
US14/723,786 US10848786B2 (en) | 2014-05-28 | 2015-05-28 | Acceleration of context adaptive binary arithmetic coding (CABAC) in video CODECS |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160147021A KR20160147021A (ko) | 2016-12-21 |
KR101983441B1 true KR101983441B1 (ko) | 2019-08-28 |
Family
ID=53433275
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167033286A KR101983441B1 (ko) | 2014-05-28 | 2015-05-28 | 비디오 코덱들에서의 콘텍스트 적응형 이진 산술 코딩(cabac)의 가속화 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10848786B2 (ko) |
KR (1) | KR101983441B1 (ko) |
CA (1) | CA2950180C (ko) |
WO (1) | WO2015184069A1 (ko) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10848786B2 (en) * | 2014-05-28 | 2020-11-24 | Arris Enterprises Llc | Acceleration of context adaptive binary arithmetic coding (CABAC) in video CODECS |
CN108028942B (zh) | 2015-06-04 | 2020-06-26 | 清华大学 | 像素预测方法、编码方法、解码方法及其装置、存储介质 |
KR102414164B1 (ko) | 2017-03-31 | 2022-06-29 | 한국전자통신연구원 | 향상된 산술부호화를 제공하는 영상 처리 방법, 그를 이용한 영상 복호화, 부호화 방법 및 그 장치 |
US9992496B1 (en) | 2017-11-15 | 2018-06-05 | Google Llc | Bin string coding based on a most probable symbol |
WO2019240493A1 (ko) | 2018-06-12 | 2019-12-19 | 한국전자통신연구원 | 문맥 적응적 이진 산술 부호화 방법 및 장치 |
US11706486B2 (en) * | 2021-06-25 | 2023-07-18 | Rovi Guides, Inc. | Systems and methods to prevent or reduce ad fatigue using user preferences |
US20230328249A1 (en) * | 2022-04-06 | 2023-10-12 | Tencent America LLC | Cabac context modeling with information from spatial neighbors |
CN114531595B (zh) * | 2022-04-24 | 2022-08-09 | 浙江芯昇电子技术有限公司 | cabac二进制化和上下文模型产生的编码方法和装置 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7379608B2 (en) * | 2003-12-04 | 2008-05-27 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung, E.V. | Arithmetic coding for transforming video and picture data units |
US8885726B2 (en) * | 2007-12-04 | 2014-11-11 | Vixs Systems, Inc. | Neighbor management for use in entropy encoding and methods for use therewith |
US20110004881A1 (en) | 2008-03-12 | 2011-01-06 | Nxp B.V. | Look-ahead task management |
US8542748B2 (en) | 2008-03-28 | 2013-09-24 | Sharp Laboratories Of America, Inc. | Methods and systems for parallel video encoding and decoding |
CN103748886B (zh) * | 2011-06-16 | 2017-11-10 | Ge视频压缩有限责任公司 | 支持模式切换的熵编码 |
US9584819B2 (en) | 2011-10-24 | 2017-02-28 | Qualcomm Incorporated | Grouping of tiles for video coding |
US9538177B2 (en) * | 2011-10-31 | 2017-01-03 | Mediatek Inc. | Apparatus and method for buffering context arrays referenced for performing entropy decoding upon multi-tile encoded picture and related entropy decoder |
US9484952B2 (en) * | 2011-11-03 | 2016-11-01 | Qualcomm Incorporated | Context state and probability initialization for context adaptive entropy coding |
TWI573436B (zh) * | 2012-01-20 | 2017-03-01 | 三星電子股份有限公司 | 用於並行熵編碼的方法及裝置以及用於並行熵解碼的方法及裝置以及非暫時性電腦可讀記錄媒體 |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9584802B2 (en) * | 2012-04-13 | 2017-02-28 | Texas Instruments Incorporated | Reducing context coded and bypass coded bins to improve context adaptive binary arithmetic coding (CABAC) throughput |
US9351003B2 (en) * | 2013-09-27 | 2016-05-24 | Apple Inc. | Context re-mapping in CABAC encoder |
US10848786B2 (en) * | 2014-05-28 | 2020-11-24 | Arris Enterprises Llc | Acceleration of context adaptive binary arithmetic coding (CABAC) in video CODECS |
-
2015
- 2015-05-28 US US14/723,786 patent/US10848786B2/en active Active
- 2015-05-28 WO PCT/US2015/032835 patent/WO2015184069A1/en active Application Filing
- 2015-05-28 KR KR1020167033286A patent/KR101983441B1/ko active IP Right Grant
- 2015-05-28 CA CA2950180A patent/CA2950180C/en active Active
-
2020
- 2020-11-24 US US17/103,024 patent/US11336921B2/en active Active
Non-Patent Citations (2)
Title |
---|
Detlev Marpe, et al. Context-based adaptive binary arithmetic coding in the H. 264/AVC video compression standard. IEEE Transactions on circuits and systems for video technology, 2003.07.* |
Vivienne Sze, et al. High throughput CABAC entropy coding in HEVC. IEEE Transactions on Circuits and Systems for Video Technology. 2012.12.* |
Also Published As
Publication number | Publication date |
---|---|
KR20160147021A (ko) | 2016-12-21 |
WO2015184069A1 (en) | 2015-12-03 |
CA2950180C (en) | 2020-04-21 |
US10848786B2 (en) | 2020-11-24 |
US20210084342A1 (en) | 2021-03-18 |
US20150373379A1 (en) | 2015-12-24 |
US11336921B2 (en) | 2022-05-17 |
CA2950180A1 (en) | 2015-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11336921B2 (en) | Acceleration of context adaptive binary arithmetic coding (CABAC) in video codecs | |
US11496768B2 (en) | GOLOMB-RICE/EG coding technique for CABAC in HEVC | |
US9462275B2 (en) | Residual quad tree (RQT) coding for video coding | |
CA2953505C (en) | Advanced screen content coding with improved palette table and index map coding methods | |
US8401321B2 (en) | Method and apparatus for context adaptive binary arithmetic coding and decoding | |
US6744387B2 (en) | Method and system for symbol binarization | |
KR101627568B1 (ko) | 동화상 부호화 장치, 동화상 부호화 방법 및 동화상 부호화용 컴퓨터 프로그램 | |
KR20070006445A (ko) | 하이브리드 엔트로피 부호화, 복호화 방법 및 장치 | |
US11785259B2 (en) | Escape coding for coefficient levels | |
JP2022539311A (ja) | ピクチャのサブセクション用の独立したcabac | |
EP3149948B1 (en) | Acceleration of context adaptive binary arithmetic coding (cabac) in video codecs | |
JP2022548685A (ja) | 画像データの符号化及び復号化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |