이하, 첨부한 도면들을 참조하여 본 발명의 실시예들을 상세히 설명한다. 그러나 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥 상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "이루어진다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성 성분, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 구성 성분, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다. 가능하다면, 같은 참조 번호들은 같은 또는 유사한 파트(part)들을 지칭하기 위하여 도면들 전체에서 사용될 수 있을 것이다.
도 3a는 본 발명에 따른 전형적인 시스템 내의 컨텍스트 기반 적응형 이진 산술 코딩의 인코딩을 위한 파이프라인 스테이지들을 나타내는 개략적인 플로우 도면이다.
도 3a를 참조하면, 컨텍스트 기반 적응형 이진 산술 코딩의 인코딩을 위한 파이프라인 스테이지(pipeline stage)들은, 예를 들면, 이진화 스테이지(binarization stage), 컨텍스트 모델 선택 스테이지(context model selection stage), 이진 산술 인코딩 스테이지(binary arithmetic encoding stage), 비트 생성 스테이지(bit generation stage) 등을 포함할 수 있다. 상기 이진화 스테이지에 있어서, 신택스 엘리먼트(SE)의 값은 이진 스트링으로 변환될 수 있다. 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)은 신택스 엘리먼트(SE)의 타입(type)에 의존하는 다섯 가지 정도의 이진화 방식들을 사용한다. 또한, 이러한 다섯 가지의 방식들은 고정 길이(fixed length; FL) 방식, 유너리(unary; U) 방식, 트런케이티드 유너리(truncated unary; TU) 방식, 트리 구조(tree structure) 방식 및 연결된 유너리/k차 지수 골롬(concatenated unary/k-th order Exp-Golomb; UEGk) 방식을 포함한다. 이러한 다섯 가지 방식들 및 비트 스트링의 최대 길이는 아래 표 1에 나타나 있다.
[표 1]
이진화 타입 |
신택스 엘리먼트의 타입 |
이진 스트링의 최대 길이 |
fixed length (FL) |
mb_skip_flag·pred_mode_falg · rem_pred_mode· mb_field_decoding_flag· transform_size_8x8_flag· end_of_slice· significant_coef_flag· last_significant_coef_flag· coef_sign_flag |
7 |
tree structure |
mb_type·sub_mb_typ |
13 |
unary (U) |
ref_idx·mb_qp_delt |
32 |
truncated unary (TU) |
intra_chroma_pred_mod |
3 |
FL+TU |
coded_block_patter |
6 |
TU+UEGk |
mvd·coefficient_abs_level_minus |
45 |
컨텍스트 모델 선택 스테이지에 있어서, 신택스 엘리먼트(SE)의 각각의 레귤라 이진(regular bin)의 인코딩을 용이하게 하기 위해서 컨텍스트 모델 인덱스(ctxIdx)에 기초하여 신택스 엘리먼트(SE)의 각각의 레귤라 이진을 위해 컨텍스트 모델(CM)들의 459개 세트들 중에서 하나가 선택된다. 이러한 컨텍스트 모델 인덱스(ctxIdx)는 아래 수학식 1에 의하여 얻어진다.
ctxIdx = ctxCatOffset + ctxIdxOffset + ctxIdxInc
여기서, 변수(ctxIdxOffset, ctxCatOffset)는 신택스 엘리먼트(SE)의 타입 및 나머지 블록(residual block)들의 타입에 의해서 각각 확인될 수 있다. 또한, 변수(ctxIdxInc)는 다음 수학식 2 및 수학식 3에 의해서 얻어질 수 있다.
condTermFlag = a*condTermFlagA + b*condTermFlagB + c
상기 수학식 2의 변수들(a, b, c)은 상수이고, 상기 수학식 3의 변수(condTermFlagA, condTermFlagB)는 이웃 블록(neighbor block)들로부터의 정보에 기초하여 계산된다. 예를 들어, 변수(condTermFlagA)는 레프트 블록(left block) 또는 마크로 블록으로부터의 정보에 의하여 확인될 수 있으며, 변수(condTermFlagB)는 탑 블록(top block) 또는 마크로 블록으로부터의 정보에 의하여 확인될 수 있다.
또한, 상기 컨텍스트 모델 선택 스테이지는 네 가지 정도의 서브 스테이지(sub-stage)들로 나누어질 수 있다. 즉, 이웃 블록의 정보를 얻는(GNB) 서브 스테이지, 변수(condTermFlag)를 계산하는(CTF) 서브 스테이지, 컨텍스트 모델 인덱스(ctxIdx)를 계산하는(CCI) 서브 스테이지, 컨텍스트 모델(CM)을 얻는(CML) 서브 스테이지 등으로 나누어질 수 있다. 이웃 블록 정보를 얻는(GNB) 서브 스테이지는 변수(condTermFlag)를 계산하는(CTF) 서브 스테이지 이전에 수행된다. 이웃 블록 정보를 얻는(GNB) 서브 스테이지 및 변수(condTermFlag)를 계산하는(CTF) 서브 스테이지는 이진화 스테이지에서 동시에(in parallel) 수행될 수 있다.
이진 산술 인코딩 스테이지에 있어서, 레귤라 엔진(regular engine), 바이패스 엔진(bypass engine) 및 터미네이트 엔진(terminate engine)을 포함하는 세 개의 인코딩 엔진(encoding engine)들이 사용될 수 있다. 변수(codILow, codIRange)는 슬라이스 내에서 제1 마크로 블록을 인코딩하는 초기에 초기화될 수 있다. 변수(codILow, codIRange)의 값들은 인코딩 프로세스(encoding process) 동안에 변경될 수 있다. 이진 스트링 내의 각각의 이진은 세 개의 인코딩 엔진들 중에서 하나에 의해 인코딩될 수 있다. 여기서, 6비트의 확률 상태 인덱스(pStateIdx) 및 1비트의 최대 확률 심볼(valMPS)로 구성된 상응하는 컨텍스트 모델(CM)은 이진을 인코딩하는 데에 있어서 레귤라 엔진을 위하여 요구된다. 또한, 선택된 컨텍스트 모델(CM)은 레귤라 인코딩 프로세스(regular encoding process) 동안에 업데이트될 수 있다.
변수(codIRange)의 값이 "256" 보다 작은 경우에는 재정규화 프로세스(renormalization process)가 이진 산술 인코딩 스테이지에서 요구될 수 있다. 변수들(codILow, codIRange)은 그들의 값이 "256" 보다 작지 않을 때까지 두 배(doubled)로 될 수 있다. 그 사이에, 인코딩된 비트 데이터는 비트 생성 스테이지에서 반복적으로 생성될 수 있다.
도 3b는 전형적인 시스템 내의 컨텍스트 기반 적응형 이진 산술 코딩의 디코딩을 위한 파이프라인 스테이지들을 나타내는 개략적인 플로우 도면이다.
도 3b를 참조하면, 전형적인 시스템 내의 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 디코딩을 위한 파이프라인 스테이지들은, 예를 들면, 컨텍스트 모델 선택 스테이지, 이진 산술 디코딩 스테이지 및 역이진화 스테이지를 포함할 수 있다. 컨텍스트 모델 스테이지에서, 컨텍스트 모델(CM)은 계산된 컨텍스트 모델 인덱스(ctxIdx)에 기초하여 선택될 수 있다. 컨텍스트 모델 인덱스(ctxIdx)는 앞서 설명한 바와 같이, 이전에 디코딩된 이진들이거나 이웃 블록들로부터의 정보에 의해 정해지는 값 또는 상수일 수 있다. 신택스 엘리먼트(SE)의 이진은 선택된 컨텍스트 모델(CM)에 기초하여 이진 산술 스테이지에서 디코딩될 수 있다. 또한, 선택된 컨텍스트 모델(CM)은 업데이트될 수 있으며, 이진 값이 생성될 수 있다. 컨텍스트 모델(CM)의 업데이트 단계 및 이진 값의 출력 단계는 신택스 엘리먼트(SE)를 위하여 이진 스트링이 생성될 때까지 반복될 수 있다. 이후, 디코딩된 이진 스트링은 신택스 엘리먼트(SE)의 값을 생성하기 위하여 역이진화(de-binarized)된다. 뿐만 아니라, 변수(codIRange)의 값이 "256" 보다 작을 때, 재정규화 프로세스가 이진 산술 디코딩 스테이지 내의 레귤라 디코딩 엔진(regular decoding engine)을 위하여 요구될 수 있다. 변수(codIRange)가 "256" 보다 작지 않을 때까지 변수(codIRange)는 두 배 정도로 될 수 있고, 변수(codIOffset)는 디코딩된 비트 스트림으로부터 1비트 데이터를 연결(concatenate)시킬 수 있다.
도 3c는 전형적인 시스템 내의 컨텍스트 기반 적응형 이진 산술 코딩의 인코 딩 및 디코딩을 위한 파이프라인 스테이지들을 나타내는 개략적인 플로우 도면이다.
도 3c를 참조하면, 전형적인 시스템 내의 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 인코딩 및 디코딩을 위한 파이프라인 스테이지들은 도 3a에 도시된 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 인코딩 스테이지들을 도 3b에 도시된 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 디코딩 스테이지들과 통합한다. 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 인코딩 프로세스 동안, 이진화 스테이지 및 비트 생성 스테이지가 수행되며, 역이진화 스테이지는 수행되지 않는다. 반면, 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 디코딩 프로세스 동안에 이진화 스테이지 및 비트 생성 스테이지는 수행되지 않고, 역이진화 스테이지가 수행된다.
도 4는 본 발명에 따른 컨텍스트 기반 적응형 이진 산술 코딩의 인코딩 및 디코딩을 위한 전형적인 시스템을 나타내는 도면이다.
도 4를 참조하면, 시스템(40)은 이진기(binarizer; BZ)(41), 계산 장치들(42, 43), 이진 산술 유닛(BAU)(44), 역이진기(de-binarizer; DB)(45), 비트 생성기(BG)(46) 및 메모리 장치들(31 내지 39)을 포함할 수 있다. 인코딩 프로세스 또는 디코딩 프로세스에 앞서 컨텍스트 모델(CM)들은 초기화될 수 있다. 컨텍스트 모델(CM)들의 459개 세트들을 초기화하기 위한 변수들은 메모리(31), 예를 들어, 1762×16 비트의 읽기 전용 메모리(read only memory; ROM)에 저장될 수 있다. 초기화 모듈(initializing module)(47)은 컨텍스트 모델(CM)들의 459개 세트들을 초 기화한 후, 슬라이스 헤더 레이어에서 초기화된 컨텍스트 모델(CM)들을 메모리(32), 예를 들면, 싱글 포트 랜덤 억세스 메모리(single-port random access memory; RAM) 내의 클러스터(cluster)에 입력하도록 구성될 수 있다. 컨트롤러(도시되지 않음)의 제어 하에서, 컨텍스트 모델 클러스터(context model cluster)들 중에서 하나는 메모리(32)로부터 불러올(fetched) 수 있고, 컨텍스트 모델 독출(context model read; CMR) 동작을 거쳐 메모리(33)로 독출될 수 있다. 메모리(33)는 레지스터 뱅크(register bank)를 포함할 수 있으나 이에 한정되는 것은 아니다. 컨텍스트 모델 독출(CMR) 동작은 컨텍스트 모델 선택 스테이지 중에서 일부 및 이진화 스테이지를 포함할 수 있는 스테이지(GNB/CTF/BZ) 동안에 실행될 수 있다.
이진기(41)는 스테이지(GNB/CTF/BZ)에서 신택스 엘리먼트(SE)의 값을 이진 스트링으로 이진화하도록 구성될 수 있다. 동일한 스테이지에서, 하나 이상의 이웃 블록으로부터 정보가 획득(GNB)될 수 있다. 예를 들어, 탑 블록 또는 마크로 블록으로부터의 정보는 버퍼(34)에 저장될 수 있으며, 레프트 블록 또는 마크로 블록으로부터의 정보는 다른 버퍼(35)에 저장될 수 있다. 제1 계산 장치(42)는 상기 수학식 2에 따라 하나 이상의 이웃 블록으로부터의 정보에 기초하여 이진 스트링 내의 이진을 위한 변수(condTermFlag)를 계산하도록 구성될 수 있다. 예를 들어, 상기 표 1에 리스트되어 있는 신택스 엘리먼트(mb_skip_flag)에 있어서, 레프트 마크로 블록의 신택스 엘리먼트(mb_skip_flag)는 "1"이거나 또는 레프트 마크로 블록이 이용 가능하지 않을 때는 변수(CondTermFlagA)가 "0"으로 설정된다. 그렇지 않은 경 우에는 변수(CondTermFlagA)는 "1"로 설정된다. 이와 유사하게, 변수(condTermFlagB)는 탑 블록 또는 마크로 블록으로부터의 정보에 의하여 결정될 수 있다. 이진기(41) 및 제1 계산 장치(42)의 출력들은 제1 레지스터(36)에 저장될 수 있다.
컨텍스트 모델 선택 스테이지의 다른 부분인 컨텍스트 모델 인덱스(ctxIdx)를 계산하는(CCI) 스테이지 및 컨텍스트 모델(CM)을 얻는(CML) 스테이지에 있어서, 제2 계산 장치(43)는 위에서 상기 수학식 1에 기초하여 컨텍스트 모델 인덱스(ctxIdx)를 계산하도록 구성될 수 있다. 제2 계산 장치(43)로부터의 계산된 컨텍스트 모델(CM)에 기초하여 컨텍스트 모델(CM)은 메모리(33)로부터 불러질 수 있다. 메모리(33)로부터의 컨텍스트 모델(CM)에 기초하여, 제1 rLPS는 제1 룩업 테이블(lookup table; LUT)(51), 예를 들어, 8×256 비트의 룩업 테이블(LUT)로부터 생성될 수 있다. 컨텍스트 모델(CM)의 6비트 확률 상태 인덱스(pStateIdx)에 의해 제1 룩업 테이블(LUT)(51)로부터 확인될 수 있는 제1 rLPS의 값은 이진 산술 유닛(BAU)(44) 내에서 이후의 인코딩 프로세스 또는 디코딩 프로세스에서 사용될 수 있다. 제1 rLPS는 멀티플렉서(48)로의 제1 입력으로서 사용될 수 있다. 제2 룩업 테이블(LUT)(52)로부터의 제2 rLPS는 멀티플렉서(48)로의 제2 입력으로 사용될 수 있다. 제2 rLPS는 이진 산술 유닛(BAU)(44)으로부터의 업데이트된 컨텍스트 모델(CM)에 기초하여 제2 룩업 테이블(LUT)(52)에 의해 생성될 수 있다. 제1 rLPS 및 제2 rLPS 중의 하나가 멀티플렉서(48)에 의해서 선택되어 제2 레지스터(37)에 저장될 수 있다. 본 발명의 일 실시예에 있어서, 멀티플렉서(48)는 현재의 이진을 위해 선택된 컨텍스트 모델 인덱스(ctxIdx)가 이전의 이진을 위해 선택된 컨텍스트 모델 인덱스(ctxIdx)와 다른 경우에 제1 rLPS를 출력할 수 있으며, 현재 이진을 위해 선택된 컨텍스트 모델 인덱스(ctxIdx)가 이전의 이진을 위해 선택된 컨텍스트 모델 인덱스(ctxIdx)와 동일한 경우에는 제2 rLPS를 출력할 수 있다. 이러한 실시예에서, 도시된 제1 룩업 테이블(LUT)(51) 및 제2 룩업 테이블(LUT)(52)은 분리된 룩업 테이블(LUT)들이다. 그러나, 다른 실시예에 따르면 제1 룩업 테이블(LUT)(51) 및 제2 룩업 테이블(LUT)(52)은 동일한 룩업 테이블(LUT)일 수 있다.
이진 산술 유닛(BAU)(44)은 신택스 엘리먼트(SE)의 타입 및 이진 인덱스(binIdx)에 따라 레귤라 이진, 바이패스 이진 및 터미네이트 이진을 인코딩하도록 구성될 수 있다. 몇 가지 신택스 요소들과 그들의 상응하는 인코딩 엔진들은 다음 표 2에 리스트 되어 있다.
[표 2] 신택스 요소들을 위한 상응하는 코딩 엔진들
신택스 요소 |
코딩 엔진 |
mb_type (SI slice) |
레귤라 모드 |
mb_type (I slice) |
레귤라 모드 |
mb_type (P, SP slice) |
레귤라 모드 |
mb_type (B slice) |
레귤라 모드 |
sub_mb_type (P, SP slice) |
레귤라 모드 |
sub_mb_type (B slice) |
레귤라 모드 |
mb_skip_flag (P, SP slice) |
레귤라 모드 |
mb_skip_flag (B slice) |
레귤라 모드 |
mvd_10[][][0], mvd11[][][0] |
레귤라 모드 + 바이패스 모드 |
mvd_10[][][1], mvd11[][][1] |
레귤라 모드 + 바이패스 모드 |
ref_idx_10, ref_idx_11 |
레귤라 모드 |
mb_qp_delta |
레귤라 모드 |
intra_chroma_pred_mode |
레귤라 모드 |
prev_intra4x4_pred_mode_flag prev_intra8x8_pred_mode_flag |
레귤라 모드 |
rem_intra4x4_pred_mode rem_intra8x8_pred_mode |
레귤라 모드 |
mb_field_decoding_flag |
레귤라 모드 |
coded_block_pattern |
레귤라 모드 |
transform_size_8x8_flag |
레귤라 모드 |
end_of_slice |
터미네이트 모드 |
coded_block_flag |
레귤라 모드 |
significant_coef_flag |
레귤라 모드 |
last_significant_coef_flag |
레귤라 모드 |
coeff_abs_level_minus1 |
레귤라 모드 + 바이패스 모드 |
coeff_sign_flag |
바이패스 모드 |
초기화된 컨텍스트 모델(CM)들은 컨텍스트 모델 독출(CMR) 동작을 통하여 메모리(32)로부터 메모리(33)로 독출될 수 있다. 레귤라 이진이 프로세스되는 경우에는 업데이트된 컨텍스트 모델(CM)이 메모리(33)에 기입될 필요가 있을 수 있다. 이에 따라, 인코딩된 이진은 인코딩된 비트 스트림을 생성하도록 구성될 수 있는 비트 생성기(46)로 전달될 수 있다. 비트 생성기(46)는 파이포(first-in-first-out; FIFO) 장치(38), 예를 들어, 8×11 비트 레지스터로부터 파라미터들(EncodeFlush, low_renorm, range_lnz_renorm)을 불러 오고, 이진 길이(bits_len) 및 비트 데이터(bits_data)를 포함하는 인코딩된 이진 데이터를 생성할 수 있다. 컨텍스트 모델 선택 스테이지 및 이진 산술 인코딩 스테이지는 신택스 엘리먼트(SE)의 모든 이진들이 완전하게 인코딩될 때까지 반복될 수 있다.
또한, 이진 산술 유닛(BAU)(44)은 신택스 엘리먼트(SE)의 타입 및 이진 인덱스에 따라 레귤라 이진, 바이패스 이진, 터미네이트 이진 등을 디코딩하도록 구성될 수 있다. 초기화된 컨텍스트 모델(CM)들은 컨텍스트 모델 독출(CMR) 동작을 통하여 메모리(32)로부터 메모리(33)로 독출될 수 있다. 디코딩된 이진은 버퍼(39)로 전달될 수 있다. 이진이 디코딩된 경우에는 선택된 컨텍스트 모델(CM)은 업데이트되고, 메모리(33)에 다시 기입될 수 있다. 역이진기(de-binarizer)(45)는 신택스 엘리먼트(SE)의 디코딩이 완료되었을 때, 신택스 엘리먼트(SE)의 모든 이진들이 디코딩 되었는지 판단하고, 버퍼(39) 내의 디코딩된 이진들에 기초하여 신택스 엘리먼트의 값(SE_value)을 출력할 수 있다. 신택스 엘리먼트의 값(SE_Value)은 나머지 블록(residual block)의 플로우(flow) 분석을 프로세싱하기 위하여 H.264 분석 유닛(도시되지 않음) 또는 나머지 유닛(residual unit)(도시되지 않음)으로 보내질 수 있다. 하나의 예에서, 신택스 엘리먼트의 값(SE_Value)은 이웃 버퍼 업데이트(neighbor buffer update; NBU) 동작을 통하여 제1 버퍼(34) 및 제2 버퍼(35)에 기입될 수 있다. 역이진기(45)가 신택스 엘리먼트(SE)의 디코딩이 완료되었는지 검출하고, 완료 신호(SE_Valid)를 예를 들어, 논리 하이(logic high)에 설정할 때까지 컨텍스트 모델 선택 스테이지 및 이진 산술 디코딩/역이진화 스테이지들은 반복될 수 있다. 신택스 엘리먼트(SE)의 모든 이진들이 디코딩된 경우에는 메모리(33) 내의 업데이트된 컨텍스트 모델(CM)들은 컨텍스트 모델 기입(CMW) 동작을 통하여 메모리(32)에 다시 기입될 수 있다.
도 5a는 본 발명의 일 실시예에 따른 컨텍스트 기반 적응형 이진 산술 코딩 의 인코딩을 위한 파이프라인 메커니즘을 나타내는 개략도이다.
도 5a 뿐만 아니라, 도 3a, 도 3c 및 도 4도 참조하면, 사이클(0)에서, 신택스 엘리먼트(SE)의 값은 이진들(Bin 0, Bin 1, Bin 2)을 포함하는 이진 스트림으로 이진화(BZ)될 수 있다. 이웃 블록들로부터의 정보는 획득(GNB)될 수 있고, 변수(condtermFlag)는 계산(CTF)될 수 있다. 또한, 초기화된 컨텍스트 모델(CM)들은 독출(CMR)될 수 있다. 이웃 블록들로부터의 정보가 획득(GNB)되는 것에서 변수(condtermFlag)가 계산(CTF)되는 것으로의 점 화살표(dotted arrowhead)는 변수(condtermFlag)가 계산(CTF)되기 이전에 이웃 블록들로부터의 정보가 획득(GNB)되는 것이 수행됨을 나타낸다.
사이클(1)에서, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있으며, 이진(Bin 0)을 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다.
사이클(2)에서, 이진(Bin 0)은 인코딩(BAU)될 수 있고, 이진(Bin 0)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 또한, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 이진(Bin 1)을 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다.
사이클(3)에서, 이진(Bin 0)을 위한 비트 스트림은 생성(BG)될 수 있다. 이진(Bin 1)은 인코딩(BAU)되고, 이진(Bin 1)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 또한, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 이진(Bin 2)을 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다.
사이클(4)에서, 이진(Bin 1)을 위한 이진 스트림은 생성(BG)될 수 있다. 이 진(Bin 2)은 인코딩(BAU)될 수 있으며, 이진(Bin 2)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다.
사이클(5)에서, 이진(Bin 2)을 위한 이진 스트림은 생성(BG)될 수 있다.
파이프라인 메커니즘(pipeline mechanism)에서, 데이터 포워딩 테크닉(data forwarding technique)은 컨텍스트 모델(CM)을 얻는(CML) 동작과 선택된 컨텍스트 모델(CM)을 업데이트하는(CMU) 동작 사이의 데이터 의존성(data dependency)을 처리(handle)하기 위하여 사용될 수 있다. 이진(bin(i+1))의 컨텍스트 모델 인덱스(ctxIdx)가 이진(bin(i))의 컨텍스트 모델 인덱스(ctxIdx)와 동일한 경우에, 스테이지 이진 산술 유닛(BAU)으로부터의 이진(bin(i))의 업데이트된 컨텍스트 모델(CM)은 멀티플렉서(48)에 의하여 선택될 수 있다. 다른 데이터 의존성은 이진(bin(i+1))의 컨텍스트 모델 인덱스(ctxIdx)가 계산(CCI)되는 동작이 이진(bin(i))의 값을 요구할 수 있는 컨텍스트 모델 인덱스(ctxIdx) 계산(CCI) 및 이진 산술 유닛(BAU) 스테이지들에서 일어날 수 있다. 데이터 의존성들을 위한 파이프라인 동작들은 기껏해야 마크로 블록을 위한 다섯 싸이클들을 소비(cost)할 수 있다. 특히, 이진(Bin 1)은 싸이클(0) 및 싸이클(1) 동안에 두 개의 싸이클들을 위하여 아이들(idle)하고, 이진(Bin 2)은 싸이클(0)부터 싸이클(2) 동안에 세 개의 싸이클들을 위하여 아이들한다.
도 5b는 본 발명의 일 실시예에 따른 컨텍스트 기반 적응형 이진 산술 코딩의 디코딩을 위한 파이프라인 메커니즘을 나타내는 개략도이다.
도 5b 뿐만 아니라, 도 3b, 도 3c 및 도 4를 참조하면, 이웃 블록들로부터의 정보는 획득(GNB)될 수 있고, 변수(condtermFlag)는 계산(CTF)될 수 있다. 또한, 초기화된 컨텍스트 모델(CM)들은 독출(CMR)될 수 있다.
싸이클(1)에서, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있으며, 이진(Bin 0)을 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다.
사이클(2)에서, 이진(Bin 0)은 디코딩(BAU)될 수 있고, 이진(Bin 0)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 업데이트된 컨텍스트 모델(CM)은 메모리(33)로 보내어질 수 있다. 이진(Bin 0)을 위하여 디코딩된 이진 값은 버퍼(39)에 저장될 수 있다. 역이진기(DB)(45)는 신택스 엘리먼트(SE)를 위한 디코딩 프로세스가 완료되지 않음을 검출하고, 신호(SE_Valid)를, 예를 들어, 논리 로우(logic low)로 설정한다. 또한, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 이진(Bin 1)을 위한 컨텍스트 모델(CM)은 선택되고, 로딩(CML)될 수 있다.
사이클(3)에서, 이진(Bin 1)은 디코딩(BAU)될 수 있고, 이진(Bin 1)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 업데이트된 컨텍스트 모델(CM)은 메모리(33)로 보내어질 수 있다. 이진(Bin 1)을 위하여 디코딩된 이진 값은 버퍼(39)에 저장될 수 있다. 역이진기(DB)(45)는 신택스 엘리먼트(SE)를 위한 디코딩 프로세스가 완료되지 않음을 검출하고, 신호(SE_Valid)를 논리 로우로 유지시킨다. 또한, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있으며, 이진(Bin 2)을 위한 컨텍스트 모델(CM)은 선택되고, 로딩(CML)될 수 있다.
사이클(4)에서, 사이클(3)과 유사하게, 이진(Bin 2)은 디코딩(BAU)될 수 있 고, 이진(Bin 2)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 업데이트된 컨텍스트 모델(CM)은 메모리(33)로 보내어질 수 있다. 이진(Bin 2)을 위하여 디코딩된 이진 값은 버퍼(39)에 저장될 수 있다. 역이진기(DB)(45)는 신택스 엘리먼트(SE)를 위한 디코딩 프로세스가 완료되지 않음을 검출하고, 신호(SE_Valid)를 논리 로우로 유지시킨다. 또한, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있으며, 이진(Bin 3)을 위한 컨텍스트 모델(CM)은 선택되고, 로딩(CML)될 수 있다.
사이클(5)에서, 이진(Bin 3)은 디코딩(BAU)될 수 있고, 이진(Bin 3)을 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 업데이트된 컨텍스트 모델(CM)은 메모리(33)로 보내어질 수 있다. 이진(Bin 3)을 위하여 디코딩된 이진 값은 버퍼(39)에 저장될 수 있다. 역이진기(DB)(45)는 신택스 엘리먼트(SE)를 위한 디코딩 프로세스가 완료됨을 검출하고, 신호(SE_Valid)를 논리 하이로 설정한다.
이어서, 사이클(6)에서, 메모리(33)에 저장된 업데이트된 컨텍스트 모델(CM)들은 컨텍스트 모델 기입(CMW) 동작을 통하여 메모리(32)에 다시 기입된다. 또한, 역이진기(45)는 신택스 엘리먼트의 값(SE_Value)을 생성하고, 이 신호(SE_Value)를 이웃 버퍼 업데이트(NBU) 동작을 통하여 제1 버퍼(34) 및 제2 버퍼(35)에 기입한다.
다시 도 5a 및 도 5b를 참조하면, 컨텍스트 모델 독출(CMR) 동작은 하나의 클럭(clock) 내에서 실행될 수 있다. 컨텍스트 모델 독출(CMR)이 하나의 클럭 사이클(cycle) 내에서 완료될 수 있음을 확실하게 하기 위하여, 동일한 신택스 엘리먼 트(SE)에 의하여 사용되는 컨텍스트 모델(CM)들은 메모리(33)의 동일한 주소에 위치될 수 있다.
도 6a는 종래 기술에 따른 메모리 내의 컨텍스트 모델들의 전형적인 배치를 나타내는 개략도이다. 메모리의 최소 데이터 버스 넓이(minimum data bus width)는 105(15×7)비트일 수 있다. 왜냐하면, 각각의 컨텍스트 모델(CM)이 7비트들의 길이(length)를 갖고, 모든 신택스 엘리먼트(SE)들 중에서 가장 긴 신택스 엘리먼트(significant_coeff_flag)가 컨텍스트 모델(CM)들의 15개 세트들을 이용하기 때문이다. 그러나 이러한 배치는 메모리 공간의 비경제적인 사용을 유발한다.
도 6b는 본 발명에 따른 메모리 내의 컨텍스트 모델들의 전형적인 배치를 나타내는 개략도이다. 본 발명의 일 실시예에 있어서, 컨텍스트 모델들의 459개 세트들은 아래 리스트된 바와 같이 38개 클러스터들로 나누어질 수 있다.
(1) mb_skip_flag and mb_field_decoding_flag for I and P slice
(2) mb_skip_flag and mb_field_decoding_flag for B slice
(3) mb_type and sub_mb_type for I and P slice
(4) mb_type and sub_mb_type for B slice
(5) prev_intra4x4_pred_mode_flag, prev_intra8x8_pred_mode_flag, rem_intra4x4_pred_mode, rem_intra8x8_pred_mode, intra_chroma_pred_mode and mb_qp_delta
(6) mvd_l0 and mvd_l1
(7) ref_idx_l0, ref_idx_l1 and transform_size_8x8_flag
(8) coded_block_pattern
(9) coded_block_flag and coeff_abs_level_minus1 for luma DC block
(10) coded_block_flag and coeff_abs_level_minus1 for luma AC block
(11) coded_block_flag and coeff_abs_level_minus1 for 4x4 luma block
(12) coded_block_flag and coeff_abs_level_minus1 for chroma DC block
(13) coded_block_flag and coeff_abs_level_minus1 for chroma AC block
(14) coded_block_flag and coeff_abs_level_minus1 for 8x8 luma block
(15) significant_coeff_flag for frame-coded luma DC block
(16) last_significant_coeff_flag for frame-coded luma DC block
(17) significant_coeff_flag for field-coded luma DC block
(18) last_significant_coeff_flag for field-coded luma DC block
(19) significant_coeff_flag for frame-coded luma AC block
(20) last_significant_coeff_flag for frame-coded luma AC block
(21) significant_coeff_flag for field-coded luma AC block
(22) last_significant_coeff_flag for field-coded luma AC block
(23) significant_coeff_flag for frame-coded 4x4 luma block
(24) last_significant_coeff_flag for frame-coded 4x4 luma block
(25) significant_coeff_flag for field-coded 4x4 luma block
(26) last_significant_coeff_flag for field-coded 4x4 luma block
(27) significant_coeff_flag for frame-coded chroma DC block
(28) last_significant_coeff_flag for frame-coded chroma DC block
(29) significant_coeff_flag for field-coded chroma DC block
(30) last_significant_coeff_flag for field-coded chroma DC block
(31) significant_coeff_flag for frame-coded chroma AC block
(32) last_significant_coeff_flag for frame-coded chroma AC block
(33) significant_coeff_flag for field-coded chroma AC block
(34) last_significant_coeff_flag for field-coded chroma AC block
(35) significant_coeff_flag for frame-coded 8x8 luma block
(36) last_significant_coeff_flag for frame-coded 8x8 luma block
(37) significant_coeff_flag for field-coded 8x8 luma block and
(38) last_significant_coeff_flag for field-coded 8x8 luma block.
상기 38개 클러스터들은 아래에 주어지는 규칙(rule)들에 따라 메모리에 배치될 수 있다.
[규칙 1]
#CMs(SE
) + #CMs(SE
) + … + #CMs(SE
) ≤ 15
여기서, SE
는 i번째 신택스 엘리먼트(SE)를 나타내고, #CMs(SE
)는 SE
를 인코딩 또는 디코딩하는데 사용되는 컨텍스트 모델(CM)들의 개수를 나타낸다.
[규칙 2]
SE
, SE
, ...,SE
은 인코딩 또는 디코딩 순서이다.
[규칙 1] 및 [규칙 2]를 적용함으로써, 컨텍스트 모델(CM)들의 개수가 "15"와 같거나 작은 경우에는 신택스 엘리먼트(SE)를 위해 사용되는 컨텍스트 모델(CM)들이 메모리의 동일한 주소의 클러스터 내에 배열될 수 있다.
도 6b를 참조하면, 각각의 클러스터는 메모리 공간의 하나의 엔트리(entry)를 차지하고, 하나의 클럭 사이클에서, 예를 들어, 15개 정도의 7비트 레지스터들로 구성된 레지스터 뱅크에 로딩될 수 있다. 이러한 배치는 메모리 공간의 사용을, 예를 들면, 662바이트(byte)에서 460바이트 정도로 감소시킬 수 있다. 또한, 이러한 배치는 메모리 억세스 빈도(memory access frequency)를 낮출 수 있다. 예를 들어, 신택스 엘리먼트(mb_field_decoding_flag)를 위한 컨텍스트 모델(CM)들은 신택스 엘리먼트(mb_skip_flag)를 프로세스한 이후에 분리된 엔트리에 로딩될 필요가 없을 수 있다. 이는, 신택스 엘리먼트(SE)들 모두는 동일한 클러스터(Cluster 2)에 속하고, 신택스 엘리먼트(mb_skip_flag)를 디코딩하는 동안에 이미 로딩될 수 있기 때문이다. 도 6a에 도시한 배치와 비교해 볼 때, 도 6b에 도시된 본 발명의 실시예들에 따른 배치는 메모리 공간의 보다 경제적인 사용을 가능하게 한다.
도 7a는 신택스 엘리먼트들 SCF[i]와 LSCF[i] 간의 컨텍스트 모델 스위칭을 나타내는 개략도이다.
도 7a를 참조하면, H.264 표준에 규정된 바와 같이, 1-이진 신택스 엘리먼트(last_significant_coeff_flag[i]; LSCF[i])는 1-이진 신택스 엘리먼트(significant_coeff_flag[i]; SCF[i])가 프로세스될 때까지 프로세스되지 않을 수 있다. 여기서, 1-이진 신택스 엘리먼트(SCF[i]) 및 1-이진 신택스 엘리먼 트(LSCF[i])를 위한 프로세싱은 인코딩 또는 디코딩을 포함할 수 있다. 본 발명의 일 실시예에 있어서, 컨텍스트 모델 스위칭(context model switching)은 1-이진 신택스 엘리먼트(SCF[i])를 위한 디코딩 프로세스가 완료되는 사이클(3) 및 1-이진 신택스 엘리먼트(LSCF[i])를 위한 디코딩 프로세스가 시작되는 사이클(4) 사이에서 일어날 수 있다. 1-이진 신택스 엘리먼트(SCF[i])는 위치(i)에 있는 계수(coefficient)가 비제로(nonzero)인지 결정할 수 있고, 1-이진 신택스 엘리먼트(LSCF[i])는 위치(i) 다음의 이후 1-이진 신택스 엘리먼트(SCF)들이 모두 제로(zero)인지를 나타낼 수 있다. 1-이진 신택스 엘리먼트(SCF[i])의 값이 "1"인 경우에 1-이진 신택스 엘리먼트(LSCF[i])가 존재한다. 이러한 경우에 있어서, 1-이진 신택스 엘리먼트(LSCF[i])의 값도 "1"인 경우, 이후의 1-이진 신택스 엘리먼트(SCF)들은 모두 제로이고, 프로세스될 필요가 없다. 반면에, 1-이진 신택스 엘리먼트(SCF[i])의 값이 "0"인 경우에, 1-이진 신택스 엘리먼트(LSCF[i])는 프로세스될 필요가 없고, 아래 표 3에 나타난 바와 같이 1-이진 신택스 엘리먼트(SCF[i+1])가 코딩될 수 있다.
[표 3
] 루마(Luma) 4
4 디씨(DC) 블록의 SCF 및 LSCF 쌍을 위한 예
인덱스 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
15 |
15 |
SCF |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
LSCF |
0 |
x |
x |
0 |
x |
x |
x |
0 |
1 |
x |
x |
x |
x |
x |
x |
x |
컨텍스트 모델 스위칭은 도 7b에 도시된 파이프라인 메커니즘과 비교하였을 때, H.264 표준에 기초하여 파이프라인 동작(pipelined operation)에서 세 아이들(idle) 사이클들을 소비할 수 있다.
도 7b는 본 발명의 일 실시예에 따른 신택스 엘리먼트들 SCF[i] 및 LSCF[i]을 처리하기 위한 파이프라인 메커니즘을 나타내는 개략도이다. 또한, 도 7c는 본 발명의 일 실시예에 따른 신택스 엘리먼트를 위해 전용된(dedicated) 레지스터 뱅크를 포함하는 메모리를 나타내는 개략도이다.
도 7b를 참조하면, 사이클(0)에서, 이웃 블록들로부터의 정보가 획득(GNB)될 수 있으며, 변수(condtermFlag)는 계산(CTF)될 수 있다. 또한, 초기화된 컨텍스트 모델(CM)들 또는 1-이진 신택스 엘리먼트(SCF)를 위한 컨텍스트 모델 클러스터는 도 7c에 도시된 메모리(70)의 레지스터 뱅크(72)에 로딩(CMR)될 수 있다.
사이클(1)에서, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 1-이진 신택스 엘리먼트(SCF[i])를 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다. 또한, 초기화된 컨텍스트 모델(CM)들 또는 1-이진 신택스 엘리먼트(LSCF)를 위한 컨텍스트 모델 클러스터는 메모리(70)의 레지스터 뱅크(71)에 로딩(CMR)될 수 있다.
사이클(2)에서, 1-이진 신택스 엘리먼트(SCF[i])는 디코딩(BAU)될 수 있고, 1-이진 신택스 엘리먼트(SCF[i])를 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 1-이진 신택스 엘리먼트(LSCF[i])가 존재하는 것을 의미하는 경우인 1-이진 신택스 엘리먼트(SCF[i])의 디코딩된 이진 값이 "1"인 경우, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 1-이진 신택스 엘리먼트(LSCF[i])를 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다. 1-이진 신택스 엘리먼트(LSCF[i])가 프로세스가 될 필요가 없다는 것을 의미하는 경우인 1-이진 신택 스 엘리먼트(SCF[i])의 디코딩된 이진 값이 "0"인 경우, 컨텍스트 모델 인덱스(ctxIdx)는 계산(CCI)될 수 있고, 1-이진 신택스 엘리먼트(SCF[i+1])를 위한 컨텍스트 모델(CM)은 선택되고 로딩(CML)될 수 있다.
사이클(3)에서, 1-이진 신택스 엘리먼트(LSCF[i]) 또는 1-이진 신택스 엘리먼트(SCF[i+1])는 디코딩(BAU)될 수 있고, 1-이진 신택스 엘리먼트(LSCF[i]) 또는 1-이진 신택스 엘리먼트(SCF[i+1])를 위하여 선택된 컨텍스트 모델(CM)은 업데이트(CMU)될 수 있다. 아래 표 4는 주어진 1920×1080 해상도 비디오 시퀀스(resolution video sequence)에서 서로 다른 비트 레이트 8M, 22M, 47M 및 51M bps에서 슬라이스(slice) 당 컨텍스트 모델 스위칭의 개수를 보여준다. 본 발명에 따른 파이프라인 메커니즘은 51M bps의 비트 레이트(bit rate)에서 슬라이스 당 대략 3×382284 클럭 사이클들을 절약할 수 있다.
[표 4] 서로 다른 비트 레이트 스트림들을 위한 컨텍스트 모델 스위칭 개수
해상도 |
1920x1080p |
비트 레이트 (bps) |
8M |
22M |
47M |
51M |
슬라이스 타입 |
I/P/B |
I/P/B |
I/P/B |
I |
QP |
25 |
20 |
17 |
18 |
슬라이스 당 SCF 및 LSCF를 위한 컨텍스트 스위치들 |
48960 |
138720 |
345794 |
382284 |
도 8은 본 발명의 일 실시예에 따른 이진기를 나타내는 회로도이다. 이진기(80)는 신택스 엘리먼트(SE)의 값 및 타입에 따른 길이를 갖는 이진 스트링을 생성하도록 구성될 수 있다.
도 8을 참조하면, 이진기(80)는 다섯 개의 롬 테이블(ROM table)들(81,…,85)을 포함할 수 있다. 트리 구조 테이블(tree structure table)(81)은 신택스 엘 리먼트들(mb_type, sub_mb_type)에 의하여 사용되어 그들을 위한 이진 스트링을 생성할 수 있다. 트런케이티드 테이블(truncated table)(82)은 신택스 엘리먼트(intra_chroma_pred_mode)에 의하여 사용될 수 있다. 유너리 테이블(unary table)(83)은 신택스 엘리먼트들(ref_idx, mb_qp_delta)에 의하여 사용될 수 있다. 신택스 엘리먼트들(mvd, coefficient_abs_level_minus1)의 값들은 각각 프리픽스(prefix) 부분 및 서픽스(suffix) 부분으로 구성될 수 있다. 이러한 두 신택스 엘리먼트들의 프리픽스 부분들은 트런케이티드 유너리 코드(truncated unary code)들을 포함할 수 있다. 신택스 엘리먼트(mvd)의 서픽스 부분은 UEG3 코드이고, 신택스 엘리먼트(coefficient_abs_level_minus1)의 서픽스 부분은 UEG0 코드이다. 따라서 멀티플렉서들(801, 802)과 관련된 UEG0 테이블(84) 및 UEG3 테이블(85)은 이러한 두 신택스 엘리먼트들의 서픽스 부분들을 각각 이진화하는데 사용될 수 있다. 유너리 테이블(83) 및 멀티플렉서(803)는 프리픽스 부분들을 이진화하는데 사용될 수 있다. 연결 장치(concatenating device)(86)에서 멀티플렉서들(803, 804)로부터의 이진 스트링의 프리픽스 부분 및 서픽스 부분은 함께 연결된다. 이후, 선택 신호로서 신택스 엘리먼트(SE)의 타입을 사용하면서 이진 스트링은 멀티플렉서(805)로부터 생성될 수 있다. 이진기(80)의 전형적인 회로 동작은 도 12a를 참조하여 이후에 논의될 것이다.
도 9는 본 발명의 일 실시예에 따른 이진 산술 유닛을 나타내는 회로도이다. 이진 산술 유닛(BAU)(90)은 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 인코딩 및 디코딩을 위한 레귤라 엔진, 바이패스 엔진 및 터미네이트 엔진을 포함할 수 있 다. 변수(codIRange; range라고 표시됨) 및 변수(codILow; Low라고 표시됨)는 이진 산술 인코딩 프로세스 동안에 업데이트될 수 있다. 반면에, 변수(codIRange) 및 다른 변수(codIOffset; Offset이라고 표시됨)는 이진 산술 디코딩 프로세스 동안에 업데이트될 수 있다. H.264 표준에서 규정된 변수들(codIRange, codILow, codIOffset)을 업데이트하기 위한 알고리즘들은 참조를 위하여 아래 표 5, 표 6 및 표 7에 각기 나타나 있다.
[표 5] 이진 산술 유닛(BAU) 인코더 및 디코더를 위한 변수(codIRange)의 업데이트를 위한 알고리즘
codIRange |
디코더 |
레귤라 |
Offset >= rMPS |
rLPS |
Offset < rMPS |
rMPS ( = codIRange rLPS) |
바이패스 |
Offset_New >= rMPS |
codIRange |
Offset_New < rMPS |
codIRange |
터미네이션 |
Offset >= rMPS |
codIRange - 2 |
Offset < rMPS |
codIRange - 2 |
인코더 |
레귤라 |
binVal != valMPS |
rLPS |
binVal = valMPS |
rMPS ( = codIRange rLPS) |
바이패스 |
binVal != 0 |
codIRange |
binVal = 0 |
codIRange |
터미네이션 |
binVal != 0 |
codIRange |
binVal = 0 |
codIRange - 2 |
[표 6] 이진 산술 유닛(BAU) 디코더를 위한 변수(codIOffset)의 업데이트를 위한 알고리즘
codIOffset |
디코더 |
레귤라 |
codIOffset >= rMPS |
codIOffset - rMPS |
codIOffset < rMPS |
codIOffset |
바이패스 |
Offset_New >= rMPS |
Offset_New(= codIOffset << 1 | read_bits(1) ) rMPS |
Offset_New < rMPS |
Offset_New |
터미네이션 |
codIOffset >= rMPS |
codIOffset |
codIOffset < rMPS |
codIOffset |
[표 7] 이진 산술 유닛(BAU) 인코더를 위한 변수(codILow)의 업데이트를 위한 알고리즘
codILow |
인코더 |
레귤라 |
binVal != valMPS |
codILow + rMPS |
binVal = valMPS |
codILow |
바이패스 |
binVal != 0 |
(codILow << 1) + codIRange |
binVal = 0 |
codILow |
터미네이션 |
binVal != 0 |
codILow + rMPS |
binVal = 0 |
codILow |
상기 표 5 내지 표 7은 세 변수들의 어떤 값이 서로 다른 엔진 및 조건 하에서 재할당될 수 있는지를 보여주고 있다. 도 9를 참조하면, 변수들(Low, Offset, range)에 추가하여, 변수들(bin Val, valMPS, rLPS)이 이진 산술 유닛(BAU)(90)에 입력될 수 있다. 변수(bin Val)의 값은 도 8에 도시된 이진기(80)의 멀티플렉서(805)로부터 생성될 수 있고, 변수(valMPS) 및 변수(rLPS)의 값은 상응하는 컨텍스트 모델(CM)이 확인될 때 확인될 수 있다. 이진 산술 유닛(BAU)(90)은 변수들(range, Offset, Low)의 값을 업데이트하고, 업데이트된 값들(new_range, new_offset new_low)을 출력할 수 있다. 이진 산술 유닛(BAU)(90)의 전형적인 회로 동작은 도 12b를 참조하여 이후에 논의될 것이다.
이진 산술 유닛(BAU)(90)은 이진 산술 유닛(BAU) 인코더 및 디코더를 위한 변수(codIRange)가 "256"이하일 때, 재정규화 프로세스를 수행하는 재정규화 장치(renormalization device)를 포함할 수 있다.
도 10은 본 발명의 실시예들에 따른 재정규화 장치를 나타내는 회로도이다.
도 10을 참조하면, 재정규화 장치(100)는 이진 산술 유닛(BAU)(90)으로부터 값들(new_range, new_offset new_low)을 수신할 수 있다. 리딩 제로 검출(leading zero detection; LZD)(101) 장치는 변수들(codIRange, codILow, codIOffset)을 위하여 왼쪽으로 쉬프트될 비트들의 개수를 결정하는 데 사용될 수 있다. 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)이 인코딩 모드에 있고, 변수(codIRange)가 "256"이하일 때, 세 파라미터들(range_lzn_renorm, low_renorm, EncodeFlush)은 파이포(FIFO)(102)에 들어갈 수 있다. 재정규화 장치(100)의 전형적인 회로 동작은 도 12c를 참조하여 이후에 논의될 것이다.
도 11은 본 발명의 실시예들에 따른 비트 생성기를 나타내는 회로도이다.
도 11을 참조하면, 비트 생성기(bit generator)(110)는 실행 플로우(execution flow)를 제어하도록 구성된 유한 스테이트 머신(finite state machine; FSM)을 포함할 수 있다. 리딩 제로 검출(LZD) 장치(111)는 도 10에 도시된 파이포(FIFO)(102)로부터의 변수(low_renorm)에서 선택된 변수(low_mux)를 위한 리딩 제로의 개수를 검출하기 위하여 사용될 수 있다. 리딩 원 검출(leading one detection; LOD) 장치(112)는 변수(low_mux)를 위한 리딩 원(leading one)의 개수를 검출하기 위하여 사용될 수 있다. 비트 생성기(110)는 세 출력 신호들(bit-write-enable(bwe), bits_len, bits)을 생성할 수 있다. 세 출력 신호들(bit-write-enable(bwe), bits_len, bits)에서, 신호 비트(signal bit)들은 코딩된 비트 스트림을 나타내고, 신호(bits_len)는 코딩된 비트 스트림의 길이를 나타내며, 신호(bwe)는 신호 비트들이 유효(valid)함을 나타낸다. 비트 생성기(110)의 전형적인 회로 동작은 도 12d를 참조하여 이후에 논의될 것이다.
상기 표 1에 리스트된 신택스 엘리먼트(mb_type)를 인코딩하는 전형적인 회로 동작은 도 12a 내지 도 12d를 참조하여 설명되고 도시될 것이다.
도 12a는 도 8에 도시된 이진기의 전형적인 회로 동작을 나타내는 도면이다.
도 12a를 참조하면, 신택스 엘리먼트(mb_type)는 I-슬라이스 타입 및 예를 들어 값 "25"를 갖는다. 또한, 상기 표 1에 나타난 바와 같이, 신택스 엘리먼트(mb_type)를 위한 이진화 타입은 트리 구조이다. 신택스 엘리먼트(mb_type)의 슬라이스 타입 및 값에 응답하여, 트리 구조 테이블(81)은 2비트의 이진 값 "11"을 나타내는 출력 "2'b11"을 생성할 수 있다. 멀티플렉서(805)는 "0"으로 설정된 선택 신호(se_type)에 기초하여 값 "2'b11"을 출력으로서 선택한다. 따라서, 이진기(80)는 신택스 엘리먼트(SE)의 값 "25"에 기초하여 신택스 엘리먼트(SE)를 이진 스트링 "2'b11"으로 이진화시킨다.
도 12b는 도 9에 도시된 이진 산술 유닛의 전형적인 회로 동작을 나타내는 도면이다.
도 12b를 참조하면, 이진 스트링 "2'b11"(즉, "11")의 첫 번째 이진 값인 변수(binVal)의 처음 값은 "1"이다. 이진 스트링 "2'b11"의 두 번째 이진이자 마지막 이진 값인 변수(binVal)의 다음 값 또한 "1"이다. 표시 1(1)에서, 괄호 외부의 첫 번째 "1"은 변수(binVal)의 처음 값을 나타내고, 괄호 안의 두 번째 "1"은 변수(binVal)의 다음 값을 나타낸다. 또한, 첫 번째 변수(binVal)를 코딩하는데 있어서, 변수들(valMPS, Low, range, rLPS)이 각각 처음 값 "0", "374", "458" 및 "150"을 갖는다고 가정할 수 있을 것이다. 변수(Offset)는 디코딩 프로세스에서 사용되고, 인코딩 프로세스에서는 사용되지 않아서 값을 갖지 않는다.
변수(binVal) 및 변수(valMPS)의 값들을 비교함으로써, 비교 장치(901)는 값 "0"을 출력할 수 있다. 제1 가산기(905)는 변수(range)의 값에서 변수(rLPS)의 값을 뺌으로써 값 "308"을 출력한다. 멀티플렉서들(902, 903, 906, 907, 910)을 위한 선택 신호(decoder)는 인코딩 프로세스 동안에 "0"으로 설정될 수 있고, 멀티플렉서들(902, 903, 906, 907, 910)은 출력으로서 0-입력 단자의 값을 선택할 수 있다. 본 발명의 다른 실시예에 있어서, 선택 신호(decoder)는 디코딩 프로세스 동안에 "1"로 설정될 수 있다. 이러한 방식으로, 이진 산술 유닛(BAU)(90)은 멀티플렉서들을 위한 선택 핀(selection pin)들의 값에 따라 인코딩 프로세스 동안에 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 인코더로서 역할을 할 수 있고, 디코딩 프로세스 동안에는 컨텍스트 기반 적응형 이진 산술 코딩(CABAC)의 디코더로서 역할을 할 수 있다. 또한, 멀티플렉서(904)를 위한 선택 신호(bypass)는 레귤라 이진을 인코딩할 때 "0"으로 설정될 수 있다. 더욱이, 멀티플렉서(909)를 위한 선택 신호(dec_mode)는 레귤라 이진을 인코딩할 때 "00"으로 설정될 수 있다. 제2 가산기(912)는 멀티플렉서들(904, 906)의 각각의 출력 값인 "374"와 "308"을 더함으로써 값 "682"를 출력한다. 멀티플렉서들(907, 908)을 위한 선택 신호들은 멀티플렉서(902)로부터의 출력에 의존한다. 이후에, 멀티플렉서(909)에서 출력되는 변수(new_range)의 값은 "150"이고, 멀티플렉서(910)에서 출력되는 변수(new_offset new_low)의 값은 "682"이다. 변수(new_range)의 값이 "256" 보다 작기 때문에 재정 규화 프로세스가 요구될 수 있다.
도 12c는 도 10에 도시된 재정규화 장치의 전형적인 회로 동작을 나타내는 도면이다.
도 12c를 참조하면, 이진 산술 유닛(BAU)(90)으로부터의 출력들(new_range, new_offset new_low)은 재정규화 장치(100)로의 입력으로서 역할을 할 수 있다. 리딩 제로 검출(LZD)(101)은 이진 형태로 "010010110"인 입력 값 "150"이 주어질 때, 리딩 제로의 개수가 하나이기 때문에 값 "1"을 출력할 수 있다. 리딩 제로 검출(LZD)의 출력에 기초하여, 제1 레프트 쉬프터(left shifter)(103)는 이진 형태 "010010110"을 왼쪽으로 1비트만큼 쉬프트시켜, "256" 보다 크고 변수(new_range)의 입력 값 "150"의 두 배인 새로운 이진 형태 "100101100"인 값 "300"을 만든다. 즉, 도 12b의 변수(range)는 다음 이진을 인코딩할 때 사용될 수 있는 새로운 값 "300"으로 업데이트된다. 또한, 리딩 제로 검출(LZD)의 출력에 기초하여, 제2 레프트 쉬프터(108)는 멀티플렉서(104)의 출력 값인 "682"의 이진 형태 "1010101010"을 왼쪽으로 1비트만큼 쉬프트시켜, 새로운 이진 형태 "0101010100"인 값 "340"을 만든다. AND 게이트 모듈(107)은 이진 형태 "0101010100" 및 신호(mask_bits; "10'h1ff") 즉, 10비트의 16진법의 값 "1ff" 또는 "0111111111"에 대하여 논리 AND 연산(logic AND function)을 수행하여 값 "340"을 만들 수 있다.
변수들(low_renorm, range_lzn_renorm)의 값은 각각 멀티플렉서(105, 106)의 출력 값에 의존한다. 변수(EncodeFlush)의 값은 터미네이트 엔진에 의하여 현재 인코딩된 터미네이트 이진이 제로가 아닌 값을 갖는 경우에 "0"으로 설정되고, 터미 네이트 이진이 제로 값을 갖는 경우에는 "1"로 설정된다. 변수들(low_renorm, range_lzn_renorm, EncodeFlush)의 값은 파이포(FIFO)(102)로 입력된다.
도 12d는 도 11에 도시된 비트 생성기의 전형적인 회로 동작을 나타내는 도면이다.
도 12d를 참조하면, 변수(low_renorm)는 이진 형태가 "1010101010"인 값 "682"를 갖고, 변수(range_lzn)는 재정규화 장치(100)에서 확인되는 값 "1"을 갖는다. 비트 "9"에서 비트 "4"까지 즉, "101010"은 멀티플렉서(113)에 의하여 변수(low_renorm)의 이진 형태인 "1010101010"으로부터 감산되고, 변수(low_mux)에 할당된다. 리딩 원 검출(LOD)(111)은 멀티플렉서(114)에 의하여 선택되는 변수(low_mux) 내의 리딩 원의 개수가 하나인지를 검출한다. 멀티플렉서(114)의 출력에 기초하여, 레프트 쉬프터(115)는 이진 형태인 "1010101010"을 왼쪽으로 1비트만큼 쉬프트하여 새로운 이진 형태인 "0101010100"을 만든다. "2"로 가정될 수 있는 변수(bitOutStanding)는 증분(incremented)되지 않는다. 신호(bwe)가 논리 하이이기 때문에 "0"의 값을 갖는 2비트 코드의 비트 스트림이 생성될 수 있다.
다시 도 12b를 참조하면, 첫 번째 이진이 코딩된 이후에, 두 번째 이진이자 마지막 이진이 코딩될 수 있다. 변수들(Low, range)은 첫 번째 이진을 인코딩하는 데 있어서 재정규화 장치(100) 내에서 "340" 및 "300"으로 각각 업데이트된다. 변수(valMPS) 및 변수(rLPS)의 값은 각각 "0"과 "2"로 가정된다. 마지막 이진이 인코딩되기 때문에 멀티플렉서(909)를 위한 선택 신호(dec_mode)는 "10", 터미네이트 모드로 설정될 수 있다. 변수(new_range)의 값은 "256"보다 큰 "298"이고, 이에 재 정규화 장치(100)에서 두 배로 되지 않는다. 다시 도 12c를 참조하면, 변수(range_out)의 값은 "298"과 같다.