[go: up one dir, main page]

KR100813877B1 - 효율적인 h.264/avc cavlc 디코딩 방법 - Google Patents

효율적인 h.264/avc cavlc 디코딩 방법 Download PDF

Info

Publication number
KR100813877B1
KR100813877B1 KR1020060042514A KR20060042514A KR100813877B1 KR 100813877 B1 KR100813877 B1 KR 100813877B1 KR 1020060042514 A KR1020060042514 A KR 1020060042514A KR 20060042514 A KR20060042514 A KR 20060042514A KR 100813877 B1 KR100813877 B1 KR 100813877B1
Authority
KR
South Korea
Prior art keywords
decoding
code
value
arithmetic expression
classifying
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
KR1020060042514A
Other languages
English (en)
Other versions
KR20070109487A (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 전자부품연구원
Priority to KR1020060042514A priority Critical patent/KR100813877B1/ko
Priority to US11/608,262 priority patent/US7423562B2/en
Publication of KR20070109487A publication Critical patent/KR20070109487A/ko
Application granted granted Critical
Publication of KR100813877B1 publication Critical patent/KR100813877B1/ko
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
    • H03M7/425Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory for the decoding process only

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

본 발명은 VLC 코드들의 상관관계에 따라 VLC 코드들을 그룹으로 분류한 후, 각 그룹을 디코딩할 수 있는 산술식을 정의하고 이에 따라 디코딩을 수행함으로써, 테이블 룩-업에 의한 메모리 접근을 최소화하고 디코딩 시간 및 전력 소모량을 감소시킬 수 있는 효율적인 H.264/AVC CAVLC 디코딩 방법에 관한 것이다. 본 발명에 따른 CAVLC 디코딩 방법은 (a) TotalCoeffs와 TrailingOnes의 조합으로 구성된 Coeff_Token의 디코딩 단계, (b) 각각의 0이 아닌 계수들 앞에 있는 0의 개수인 run_before의 디코딩 단계, (c) 마지막 0이 아닌 계수 이전의 0인 계수들의 개수인 total_zeros의 디코딩 단계, (d) 상기 TrailingOnes의 부호의 디코딩 단계 및 (e) 0 이 아닌 계수들의 레벨값의 디코딩 단계를 포함하되, 상기 Coeff_Token의 디코딩 단계, 상기 run_before의 디코딩 단계 및 상기 total_zeros의 디코딩 단계는 각각 (1) VLC 코드들을 소정의 기준에 따라 정렬 및 그룹으로 분류하는 단계; (2) 상기 각 그룹마다 디코딩을 위한 산술식을 지정하는 단계; 및 (3) 상기 산술식에 따라 디코딩을 수행하는 단계를 포함하는 것을 특징으로 한다.

Description

효율적인 H.264/AVC CAVLC 디코딩 방법{EFFECTIVE DECODING METHOD OF H.264/AVC CONTEXT-BASED ADAPTIVE VARIABLE LENGTH CODING}
도 1은 종래 기술에 따른 문의 방법을 도시한 흐름도.
도 2는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC0 디코딩 알고리듬을 도시한 흐름도.
도 3은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC1 디코딩 알고리듬을 도시한 흐름도.
도 4는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC2 디코딩 알고리듬을 도시한 흐름도.
도 5는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token 크로마 DC 디코딩 알고리듬을 도시한 흐름도.
도 6은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 run_before 디코딩 알고리듬을 도시한 흐름도.
도 7은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 total_zeros 디코딩 알고리듬을 도시한 흐름도.
도 8은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 total_zeros 크로마 DC 디코딩 알고리듬을 도시한 흐름도.
본 발명은 효율적인 H.264/AVC CAVLC 디코딩 방법에 관한 것으로, 특히 VLC 코드들의 상관관계에 따라 VLC 코드들을 그룹으로 분류한 후, 각 그룹을 디코딩할 수 있는 산술식을 정의하고 이에 따라 디코딩을 수행함으로써, 테이블 룩-업에 의한 메모리 접근을 최소화하고 디코딩 시간 및 전력 소모량을 감소시킬 수 있는 효율적인 H.264/AVC CAVLC 디코딩 방법에 관한 것이다.
H.264/MPEG-4 AVC 디코더에서는 엔트로피 부호화방식으로서 CAVLC(Context-based Adaptive Variable length Coding)와 CABAC(Context-based Adaptive Binary Arithmetic Coding) 두 종류의 고효율 부호화 방식이 있다. 여기서 CAVLC란 주위 블록의 정보를 이용해서 보다 효율이 좋은 VLC 테이블을 적응적으로 선택한다는 의미이다. 본 발명과 직접적으로 관련이 있는 CAVLC 디코딩 방법에 대해서만 상세히 설명한다. CAVLC 방법에서는 양자화된 DCT(Discrete Cosine Transform) 계수를 지그재그 스캔한 일차원 배열을 가지고, 계수와 연속되는 0의 길이(Run) 등, 복호에 필요한 정보를 부호화 한다. CAVLC는 양자화된 4X4 블록의 여러 가지 통계적 특징을 이용하기 위해 만들어 졌다. 그 특징들은 다음과 같다.
1. 양자화 이후에, 블록들은 일반적으로 대부분 많은 0을 포함한다. CAVLC는 연이어 있는 0을 간결하게 표현하기 위해 런 레벨(run-level) 코딩을 사용한다.
2. 지그재그 스캔 이후에 일차원 배열의 끝에서부터 살펴보면 0이 아닌 첫 번째, 두 번째, 세 번째 계수들은 대게 +-1이고 CAVLC는 +-1계수(TrailingOnes)의 개수를 간결한 방법으로 알려준다.
3. 인접한 블록의 0이 아닌 계수들의 개수는 현재 블록의 계수의 개수와 상관관계가 있다. 계수들의 개수는 룩-업(look-up) 테이블을 사용하여 인코딩되는데, 룩-업 테이블은 인접한 블록 내의 0이 아닌 계수들의 개수에 따라 선택된다.
4. 0이 아닌 계수들의 레벨은 지그재그 스캔된 일차원 배열의 시작점(DC 계수 주변)에서 보다 큰 경향이 있고 뒤로 갈수록(즉, 고주파 쪽으로 갈수록) 작다. CAVLC는 이러한 특징을 이용하여 최근에 부호화된 레벨의 크기에 따라 레벨 파라미터를 위한 VLC 룩-업 테이블의 선택을 달리한다.
블록의 CAVLC 인코딩은 몇가지 단계에 따라 진행 된다. 그 단계는 우선적으로 계수의 개수(TotalCoeff)와 +-1계수(TrailingOnes)를 인코딩 하고, 각 +-1계수(TrailingOnes)의 부호를 인코딩 한다. 그 후 나머지 0이 아닌 계수들의 레벨을 인코딩하며, 마지막 계수 이전의 전체 0의 개수를 인코딩한다. 마지막으로 각 0의 run을 인코딩 하게 된다. H.264/MPEG-4 AVC에서는 MPEG-2의 경우에서처럼 "런"과 "레벨"의 조합을 부호화하는 것이 아니라, "런"과 "레벨"을 각각의 VLC(가변길이 부호화)표를 사용하여 지그재그 스캔의 역방향 순으로 따로따로 부호화 한다.
디코딩 과정을 상세히 설명하면 다음과 같다.
1) Coeff_Token 디코딩
Coeff_Token은 TotalCoeffs와 TrailingOnes의 조합으로 구성되어 있다. TotalCoeffs는 0에서 16까지의 값을 가지게 되며, TrailingOnes는 0에서 3까지의 값을 갖는다. 세 개 이상의 TrailingOnes가 존재하면 마지막 세 개만 해당되며, 나머지 +-1은 일반 계수처럼 디코딩된다. Coeff_Token을 위한 VLC 표는 4 개가 존재하고 적응적으로 선택된다. 좌측 4x4블록의 DCT 계수의 개수[nA]와 상단 4x4블록의 DCT 계수의 개수[nB]의 평균값 nC(=Round[(nA+nB)/2])에 의해 VLC 표를 선택한다. 그러나 상단 블록만 유효하면 nC=nB로, 좌측 블록만 유효하면 nC=nA로, 둘 다 유효 하지 않으면 nC=0으로 계산한다. nC 값에 따른 Coeff_Token VLC 표의 선택 기준은 하기 표 1과 같다.
nC 의미
0, 1 Num-VLC0 계수의 개수가 작다.
2, 3 Num-VLC1 계수의 개수가 보통이다.
4, 5, 6, 7 Num-VLC2 계수의 개수가 많다.
8 or above Num-FLC 6-bit FLC (Fixed Length Coding)
표 1에 도시된 4개의 VLC 표 중에 VLC0, VLC1 및 VLC2는 테이블 룩-업에 의한 디코딩이 일반적인 방법이다. 왜냐하면 Num-VLC 표는 구조화되어 있지 않기 때문에 산술식으로 표현하기가 용이하지 않기 때문이다. 반면에 Num-FLC 표는 말 그대로 FLC 이기 때문에 산술식으로 표현되어서 테이블 룩-업이 필요 없다.
2) TrailingOnes의 부호 디코딩
지그재그 스캔된 DCT 계수들의 일차원 배열에서 역순으로 3개까지의 +-1 이 부호화된다. +는 비트 0으로 -는 비트 1로 부호화된다. 즉, 상기 1)에서 구한 TrailingOnes의 개수만큼의 부호 비트가 존재한다.
단순히 최대 3 비트 판독으로 디코딩이 완료되는 방식이다.
3) 0 이 아닌 계수들의 레벨값 디코딩
0 이 아닌 계수들의 레벨값은 역순으로 복호화되고, 위의 2)번에서 복호화된 +-1은 제외된다. 7개의 VLC 표 중의 하나가 바로 전에 복호화된 레벨값에 따라 적응적으로 선택된다.
레벨 VLC 표는 구조화되어 있기 때문에 테이블 룩-업이 아닌 간단한 산술식으로 디코딩된다.
4) 마지막 0이 아닌 계수 이전의 0인 계수들의 개수인 total_zeros 디코딩
1)에서 구한 TotalCoeff 값에 의해 15개의 VLC 표 중의 하나를 선택한다.
역시 구조화되어 있지 않은 표이기 때문에 테이블 룩-업에 의한 디코딩이 일반적인 방법이다.
5) 각각의 0이 아닌 계수들 앞에 있는 0의 개수인 run_before 디코딩
run_before은 역순으로 복호화되고, 전체 0의 개수인 total_zeros 중에서 디코딩 과정에서 남아 있는 0의 개수인 zerosLeft 값에 의해 7개의 VLC 표 중의 하나를 적응적으로 선택한다.
구조화되어 있지 않은 표이기 때문에 테이블 룩-업에 의한 디코딩이 일반적인 방법이다.
위에서 설명한 가장 기본적인 순차적인 테이블 룩-업 방식에 의한 디코딩을 TLSS(테이블 look-up by Sequential Search) 라고 표현할 수 있다.
두 번째 방법은 테이블 룩-업을 하되 순차적인 검색이 아닌 이진 검색(binary search) 방식을 채용하는 것인데, TLBS(테이블 look-up by Binary Search)라고 표현할 수 있다. TLBS가 TLSS 보다 메모리 접근량은 55% 가량 적지만, 임의 메모리 접근(random memory access) 특성을 갖기 때문에 CAVLC 디코딩 연산 속도면에서 큰 차이를 보여주지는 못한다.
TLSS 방법이 테이블 룩-업에 의해 많은 메모리 접근량을 가지는 문제점을 해결하기 위하여 문의 방법(Moon's method)이 제안되었다.
문의 방법은 모바일 디바이스 등에서 저전력 디코딩을 목표로 메모리 접근량을 크게 줄이기 위한 방법이다. 메모리 접근량을 줄이기 위해서 가장 빈도가 높은 VLC 코드 일부를 산술식으로 디코딩하고 빈도가 낮은 나머지 코드들은 기존의 TLSS로 디코딩하는 방식이다. 그리고 ‘문’의 방법은 coeff_token 및 run_before 디코딩만을 다루고 있다.
도 1은‘문’의 방법에서 제안한 run_before 디코딩 알고리듬의 구조를 도시한 흐름도이고, coeff_token 및 run_before 디코딩 알고리듬은 다음과 같다. 다음의 알고리듬 수식에서 I[x] 는 의미적으로 x번째에 위치한 비트 하나의 값 (즉, 0 또는 1)을 의미하고, I[x:y] 는 y 번째부터 x 번째까지 위치한 (y-x+1) 개의 비트의 값 (즉, x 및 y는 0~3의 범위를 가지므로 값의 범위는 0 ~ 15 임)을 나타낸다. run_before 디코딩 알고리듬의 구조를 도시한 흐름도이다.
도 1을 참조하여 '문'의 방법에 따른 디코딩 알고리듬을 설명하면 아래와 같다.
1) coeff_token-VLC0 표 디코딩
1.1) 입력된 비트스트림에서 m을 구한다. m은 비트스트림에서 비트 1이 나올 때까지의 비트 0의 개수이다.
1.2) m 이 4이면 기존의 TLSS를 이용하고, m이 4가 아니면 처음의 2 비트 I[1:0]를 읽는다.
1.3) TotalCoeff와 T1s를 다음의 수식을 이용해서 구한다.
T1s = {m+(d-1) * ((m+1)/4)*(d/2)} % 4, (여기서 d = 3-I[1:0])
TotalCoeff = {m+d*((m+1)/4) * (d/2)} % 4
위 식에서 %와 / 는 나머지 연산과, 반올림을 하는 정수 나누기 연산을 의미한다.
2) coeff_token-VLC1 표 디코딩
2.1) 비트스트림으로부터 4 비트 I[3:0]을 읽는다.
2.2) I[3:2]가 0 이면 기존의 TLSS를 이용하고, 아니면 다음 과정을 수행한다.
2.3) T1s = D+(1-w) * (d/2), where D = 3-I[3:2], w = I[3:2]/2, and d = 3-I[1:0]
TotalCoeff = T1s+(1-w) * (d+1) / 4;
3) coeff_token-VLC2 표 디코딩
2.1) 비트스트림으로부터 4 비트 I[3:0]을 읽는다.
2.2) I[3] 이 0 이면 기존의 TLSS를 이용하고, 아니면 다음 과정을 수행한다.
2.3) T1s = 3+(d-3)*w, where d = 3-I[1:0] and w = I[3:2]%2
TotalCoeff = d+4 * (1-w)
위의 알고리듬 1), 2), 3)의 의미는 앞서 설명한 대로 VLC 표의 앞부분에 배치되어 있는 빈도수가 높은 VLC 코드들을 산술식으로 디코딩하여 메모리 접근량을 대폭 줄이는 것이다.
4) run_before 디코딩
zero_left 값은 total_zeros 값으로 초기화된다. 이후 run_before 값을 하나씩 디코딩 할 때마다 zero_left 값은 (zero_left-run_before) 값으로 대체된다. 즉, zero_left 값은 현재 남아 있는 0의 개수가 된다.
1. zero_left≥7일 때, 입력되는 3비트를 I[2:0]에 저장한다.
I[2:0]이 0보다 크면 run_before = 7-I[2:0] 이고, 그 외의 경우에는 run_before = 4+m 이다.
2. zero_left=6일 때, 입력되는 3비트를 I[2:0]에 저장한다.
I[2:0]이 2보다 작으면, run_before = I[2:0]+1 이고, I[2:0]이 6이상이면, run_before = zero_left-I[2:0]/2 이며, I[2:0]이 2나 4일 때 run_before = I[2:0]+2이며, 그 외의 경우에 run_before는 I[2:0]이 된다.
3. zero_left가 3이상 5이하 일 때, 입력되는 3비트를 I[2:0]에 저장한다.
zero_left≤3+I[2:-]/2 이면, run_before = 3-I[2:0]이며, 그 외의 경우는 run_before = zero_left-I[2:0]이다.
4. zero_left가 1이나 2일 때, 입력되는 2비트를 I[1:0]에 저장한다.
zero_left 가 2이면, run_before=(2-I[1:0])*(1-I[1]) 이고, 그 외의 경우는 run_before = 1-I[1]이다.
TLSS 방법은 가장 구현하기 쉽지만, 무조건적인 순차적인 메모리 접근이 필요하므로 모바일 환경에서 많은 전력 소모를 유발할 수 있다. 또한 모바일 환경에서 주로 쓰이는 저속도의 메모리로 인해 CAVLC 디코딩 연산 시간도 가장 느릴 수 있다.
TLBS 방법은 역시 구현하기 용이하고, TLSS에 비해서 메모리 접근량이 55% 가량 줄었지만, 상대적으로 메모리 접근량이 많고, 임의 메모리 접근 특성 때문에 CAVLC 디코딩 연산 시간도 크게 감소하지 않는다.
문의 방법은 기존의 TLSS 에 비해서 대략 65% 정도의 메모리 접근량을 줄였지만, 근본적인 한계를 갖고 있다. 즉, 통계적으로 빈도가 높은 coeff_token의 VLC 코드만을 산술식으로 표현했기 때문에, 여러 종류의 시퀀스 및 QP에 따라 메모리 접근량이 불규칙한 결과를 보일 수 있다. 또한 run_before 디코딩은 너무 많은 조건문 때문에 산술식으로 변환한 장점을 상당히 퇴색시키고 있다. 또한 TLBS 방법과 마찬가지로 CAVLC 디코딩 연산 시간 감소면에서 TLBS보다는 크지만 효과가 그리 크지 않다는 문제가 있다.
상술한 문제점을 해결하기 위하여, 본 발명은 VLC 코드들의 상관관계에 따라 VLC 코드들을 그룹으로 분류한 후, 각 그룹을 디코딩할 수 있는 산술식을 정의하고 이에 따라 디코딩을 수행함으로써, 테이블 룩-업에 의한 메모리 접근을 최소화하고 디코딩 시간 및 전력 소모량을 감소시킬 수 있는 효율적인 H.264/AVC CAVLC 디코딩 방법을 제공하는 것을 그 목적으로 한다.
본 발명에 따른 CAVLC 디코딩 방법은 (a) TotalCoeffs(TC)와 TrailingOnes(T1s)의 조합으로 구성된 Coeff_Token의 디코딩 단계, (b) 각각의 0이 아닌 계수들 앞에 있는 0의 개수인 run_before의 디코딩 단계 및 (c) 마지막 0이 아닌 계수 이전의 0인 계수들의 개수인 total_zeros의 디코딩 단계를 포함하되, 상기 Coeff_Token의 디코딩 단계, 상기 run_before의 디코딩 단계 및 상기 total_zeros의 디코딩 단계는 각각 (1) VLC 코드들을 소정의 기준에 따라 정렬 및 그룹으로 분류하는 단계; (2) 상기 각 그룹마다 디코딩을 위한 산술식을 지정하는 단계; 및 (3) 상기 산술식에 따라 디코딩을 수행하는 단계를 포함하는 것을 특징으로 한다.
이하에서는, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세히 설명한다.
본 발명의 기본 원리는 이미 산술연산으로 표현되어 있는 레벨 디코딩을 제외하고, total_zeros VLC 테이블의 일부를 제외한 CAVLC에서 사용되는 모든 테이블을 CPU 연산에 최적화된 산술식으로 치환하여 테이블 룩-업에 의한 메모리 접근을 최소화하는 것이다. 즉, VLC 코드들의 상관관계를 분석한 후에 관계 있는 VLC 코드들을 그룹으로 묶고, 그 그룹을 디코딩할 수 있는 산술식을 정의하는 것이다.
예를 들어, VLC 코드들을
[A.1] VLC 코드에서 비트 1's의 위치;
[A.2] 연속된 VLC 코드의 값의 연속성;
[A.3] VLC 코드 에서 Exp-Golomb 코드의 프리픽스(prefix) 인 m: VLC 코드 에서 첫 번째 비트 1 이 나오기까지의 비트 0의 개수; 및
[A.4] 상기 [A.1] 내지 [A.3]에 해당되지 않는 특별 케이스
에 따라 분류할 수 있다.
여기서, 그룹의 개수는 가능하면 최소화하는 것이 바람직하다. 이는 그룹의 수가 많아져서 조건문이 많아지면 결국 연산 시간이 늘어나서 메모리 접근에 비해 서 산술식으로 변환하는 의미가 퇴색되기 때문이다. 각각의 그룹은 아래의 특징들을 이용하여 산술식으로 디코딩할 수 있게 그룹으로 분류되었다.
이하에서는 본 발명에 따른 TotalCoeffs와 TrailingOnes의 조합으로 구성된 Coeff_Token의 디코딩 단계, (b) 각각의 0이 아닌 계수들 앞에 있는 0의 개수인 run_before의 디코딩 단계, (c) 마지막 0이 아닌 계수 이전의 0인 계수들의 개수인 total_zeros의 디코딩 단계를 상세히 설명한다. 여기서, 각 도면의 /* */은 각각의 그룹을 분류한 예시적 기준을 표시한다는 것에 유의하여야 한다.
1. coeff_token의 디코딩 단계
coeff_token 에는 nC 값 및 휘도/색도에 따라서 모두 4개의 VLC 테이블이 존재한다. 즉, 주변 블록의 0이 아닌 계수의 개수에 따라서 현재 4x4 block의 VLC 표가 적응적으로 선택된다.
아래의 표 2는 nC 값에 따른 coeff_token의 VLC 테이블을 도시하고 있다. 표 2의 VLC 코드는 정렬되지 않은 상태로서 TrailingOnes(T1s) 및 TotalCoeff(TC) 값에 따라 나열한 것이다.
T1s TC 0<=nC<2 2<=nC<4 4<=nC<8 8<=nC
0 0 1 11 1111 0000 11
0 1 001 01 0010 11 0011 11 0000 00
1 1 01 10 1110 0000 01
0 2 0000 0111 0001 11 0010 11 0001 00
1 2 0001 00 0011 1 0111 1 0001 01
2 2 001 011 1101 0001 10
0 3 0000 0011 1 0000 111 0010 00 0010 00
1 3 0000 0110 0010 10 0110 0 0010 01
2 3 0000 101 0010 01 0111 0 0010 10
3 3 0001 1 0101 1100 0010 11
0 4 0000 0001 11 0000 0111 0001 111 0011 00
1 4 0000 0011 0 0001 10 0101 0 0011 01
2 4 0000 0101 0001 01 0101 1 0011 10
3 4 0000 11 0100 1011 0011 11
0 5 0000 0000 111 0000 0100 0001 011 0100 00
1 5 0000 0001 10 0000 110 0100 0 0100 01
2 5 0000 0010 1 0000 101 0100 1 0100 10
3 5 0000 100 0010 0 1010 0100 11
0 6 0000 0000 0111 1 0000 0011 1 0001 001 0101 00
1 6 0000 0000 110 0000 0110 0011 10 0101 01
2 6 0000 0001 01 0000 0101 0011 01 0101 10
3 6 0000 0100 0010 00 1001 0101 11
0 7 0000 0000 0101 1 0000 0001 111 0001 000 0110 00
1 7 0000 0000 0111 0 0000 0011 0 0010 10 0110 01
2 7 0000 0000 101 0000 0010 1 0010 01 0110 10
3 7 0000 0010 0 0001 00 1000 0110 11
0 8 0000 0000 0100 0 0000 0001 011 0000 1111 0111 00
1 8 0000 0000 0101 0 0000 0001 110 0001 110 0111 01
2 8 0000 0000 0110 1 0000 0001 101 0001 101 0111 10
3 8 0000 0001 00 0000 100 0110 1 0111 11
0 9 0000 0000 0011 11 0000 0000 1111 0000 1011 1000 00
1 9 0000 0000 0011 10 0000 0001 010 0000 1110 1000 01
2 9 0000 0000 0100 1 0000 0001 001 0001 010 1000 10
3 9 0000 0000 100 0000 0010 0 0011 00 1000 11
0 10 0000 0000 0010 11 0000 0000 1011 0000 0111 1 1001 00
1 10 0000 0000 0010 10 0000 0000 1110 0000 1010 1001 01
2 10 0000 0000 0011 01 0000 0000 1101 0000 1101 1001 10
3 10 0000 0000 0110 0 0000 0001 100 0001 100 1001 11
0 11 0000 0000 0001 111 0000 0000 1000 0000 0101 1 1010 00
1 11 0000 0000 0001 110 0000 0000 1010 0000 0111 0 1010 01
2 11 0000 0000 0010 01 0000 0000 1001 0000 1001 1010 10
3 11 0000 0000 0011 00 0000 0001 000 0000 1100 1010 11
0 12 0000 0000 0001 011 0000 0000 0111 1 0000 0100 0 1011 00
1 12 0000 0000 0001 010 0000 0000 0111 0 0000 0101 0 1011 01
2 12 0000 0000 0001 101 0000 0000 0110 1 0000 0110 1 1011 10
3 12 0000 0000 0010 00 0000 0000 1100 0000 1000 1011 11
0 13 0000 0000 0000 1111 0000 0000 0101 1 0000 0011 01 1100 00
1 13 0000 0000 0000 001 0000 0000 0101 0 0000 0011 1 1100 01
2 13 0000 0000 0001 001 0000 0000 0100 1 0000 0100 1 1100 10
3 13 0000 0000 0001 100 0000 0000 0110 0 0000 0110 0 1100 11
0 14 0000 0000 0000 1011 0000 0000 0011 1 0000 0010 01 1101 00
1 14 0000 0000 0000 1110 0000 0000 0010 11 0000 0011 00 1101 01
2 14 0000 0000 0000 1101 0000 0000 0011 0 0000 0010 11 1101 10
3 14 0000 0000 0001 000 0000 0000 0100 0 0000 0010 10 1101 11
0 15 0000 0000 0000 0111 0000 0000 0010 01 0000 0001 01 1110 00
1 15 0000 0000 0000 1010 0000 0000 0010 00 0000 0010 00 1110 01
2 15 0000 0000 0000 1001 0000 0000 0010 10 0000 0001 11 1110 10
3 15 0000 0000 0000 1100 0000 0000 0000 1 0000 0001 10 1110 11
0 16 0000 0000 0000 0100 0000 0000 0001 11 0000 0000 01 1111 00
1 16 0000 0000 0000 0110 0000 0000 0001 10 0000 0001 00 1111 01
2 16 0000 0000 0000 0101 0000 0000 0001 01 0000 0000 11 1111 10
3 16 0000 0000 0000 1000 0000 0000 0001 00 0000 0000 10 1111 11
1) VLC0 표 (0 <= nC < 2)
먼저, 표 2의 VLC 코드들을 비트 길이 및 값의 순서대로 분류한다.
VLC 코드들을 예를 들어 9비트의 길이를 가지는 이진수로 표현하고, 이를 다시 이진수의 값에 따라 표 3과 같이 정렬한다. 여기서, x는 비트 0 또는 1 을 의미한다.
Code Value Bit count [T1s, TC]
1 xxxx xxxx >= 256 1 [0, 0]
0 1xxx xxxx >= 128 2 [1, 1]
0 01xx xxxx >= 64 3 [2, 2]
0 0011 xxxx >= 48 5 [3, 3]
0 0010 1xxx >= 40 6 [0, 1]
0 0010 0xxx >= 32 6 [1, 2]
0 0001 1xxx >= 24 6 [3, 4]
0 0001 01xx >= 20 7 [2, 3]
0 0001 00xx >= 16 7 [3, 5]
0 0000 111x >= 14 8 [0, 2]
0 0000 110x >= 12 8 [1, 3]
0 0000 101x >= 10 8 [2, 4]
0 0000 100x >= 8 8 [3, 6]
0 0000 0111 7 9 [0, 3]
0 0000 0110 6 9 [1, 4]
0 0000 0101 5 9 [2, 5]
0 0000 0100 4 9 [3, 7]
그 다음에, 이진수의 값에 따라 3개의 그룹으로 분류하고 각 그룹마다 제1 산술식을 정의한다. 디코딩은 정의된 산술식에 따라 수행된다. 테이블 룩-업을 수행하는 대신에 각 그룹마다 정의된 산술식을 이용하여 디코딩을 수행한다.
VLC 코드들을 16비트의 길이를 가지는 이진수로 표현하고, 이를 다시 이진수의 값에 따라 표 4와 같이 정렬한다. 여기서, x는 비트 0 또는 1 을 의미한다.
Code Value Bit count [T1s, TC]
0000 0001 11xx xxxx >= 448 10 [0, 4]
0000 0001 10xx xxxx >= 384 10 [1, 5]
0000 0001 01xx xxxx >= 320 10 [2, 6]
0000 0001 00xx xxxx >= 256 10 [3, 8]
0000 0000 111x xxxx >= 224 11 [0, 5]
0000 0000 110x xxxx >= 192 11 [1, 6]
0000 0000 101x xxxx >= 160 11 [2, 7]
0000 0000 100x xxxx >= 128 11 [3, 9]
0000 0000 0111 1xxx >= 120 13 [0, 6]
0000 0000 0111 0xxx >= 112 13 [1, 7]
0000 0000 0110 1xxx >= 104 13 [2, 8]
0000 0000 0110 0xxx >= 96 13 [3, 10]
0000 0000 0101 1xxx >= 88 13 [0, 7]
0000 0000 0101 0xxx >= 80 13 [1, 8]
0000 0000 0100 1xxx >= 72 13 [2, 9]
0000 0000 0100 0xxx >= 64 13 [0, 8]
0000 0000 0011 11xx >= 60 14 [0, 9]
0000 0000 0011 10xx >= 56 14 [1, 9]
0000 0000 0011 01xx >= 52 14 [2, 10]
0000 0000 0011 00xx >= 48 14 [3, 11]
0000 0000 0010 11xx >= 44 14 [0, 10]
0000 0000 0010 10xx >= 40 14 [1, 10]
0000 0000 0010 01xx >= 36 14 [2, 11]
0000 0000 0010 00xx >= 32 14 [3, 12]
0000 0000 0001 111x >= 30 15 [0, 11]
0000 0000 0001 110x >= 28 15 [1, 11]
0000 0000 0001 101x >= 26 15 [2, 12]
0000 0000 0001 100x >= 24 15 [3, 13]
0000 0000 0001 011x >= 22 15 [0, 12]
0000 0000 0001 010x >= 20 15 [1, 12]
0000 0000 0001 001x >= 18 15 [2, 13]
0000 0000 0001 000x >= 16 15 [3, 14]
0000 0000 0000 1111 15 16 [0, 13]
0000 0000 0000 1110 14 16 [1, 14]
0000 0000 0000 1101 13 16 [2, 14]
0000 0000 0000 1100 12 16 [3, 15]
0000 0000 0000 1011 11 16 [0, 14]
0000 0000 0000 1010 10 16 [1, 15]
0000 0000 0000 1001 9 16 [2, 15]
0000 0000 0000 1000 8 16 [3, 16]
0000 0000 0000 0111 7 16 [0, 15]
0000 0000 0000 0110 6 16 [1, 16]
0000 0000 0000 0101 5 16 [2, 16]
0000 0000 0000 0100 4 16 [0, 16]
0000 0000 0000 001x >= 2 15 [1, 13]
그 다음에, 이진수의 값에 따라 5개의 그룹으로 분류하고 각 그룹마다 제1 산술식을 정의한다. 디코딩은 정의된 산술식에 따라 수행된다. 테이블 룩-업을 수행하는 대신에 각 그룹마다 정의된 산술식을 이용하여 디코딩을 수행한다.
VLC 코드들을 9 비트 및 16 비트의 2개의 집합으로 나눈 이유는 9 비트 집합에 해당하는 VLC 코드의 발생 확률이 95% 정도에 해당하기 때문에 연산 효율을 높이기 위해서이다.
도 2는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC0 디코딩 알고리듬을 도시한 흐름도이다.
도 2를 참조하면, 산술식에서 T1s 는 TrailingOnes를 나타내고, TC는 TotalCoeff를 나타낸다. 또한, 변수 g, h, k, f는 그 자체로 특별한 의미를 갖지 않는 임시 변수를 나타낸다. 도 2에서 ShowBits(n)는 비트스트림 버퍼에서 n 비트를 big-endian 방식으로 리턴해 주고, SkipBits(n)는 n 비트를 skip해주는 함수이고, GetM(코드, a)는 길이가 a 비트인 코드내에서 m을 구해서 리턴해주는 함수이다. 도 2에 예시된 바와 같이, code 값이 4보다 작은 경우에는 code16값을 구하고, code16의 값에 따라 산술식을 [T1s=7-(code16>>(g+5)); TC=T1s+5-g+((T1s+1)>>2)] (code16>=128인 경우, 여기에서 g=code16>>8), [T1s=3-(f&3); TC=T1s+6+((15-f)>>2)+((T1s+1)>>2)](code16>=64인 경우, 여기에서 f = (code16<72)?7:(code16>>3)), [T1s=3-(f&3); TC=T1s+10-(g<<1)+((15-f)>>2)+((4-T1s)>>2)](code16>=16인 경우, 여기에서 g=code16>>5 이고 f=code16>>(g+1)), [T1s=3-(code16&3); TC=T1s+12+((15-code16)>>2)+((code16&2)>>1)](code16>=5인 경우) 및 [T1s=1-g; TC=13+3*g](그 외의 경우, 이 때 g=code16>>2)로 정의하고 연산을 수행하여 T1s 및 TC 값을 구한다. code 값이 4보다 크거나 같은 경우에는 code 값에 따라 시스템 특성에 맞게 산술식을 FAST_GETM 방식을 이용하거나 [T1s=(code&256)?0:(3-f); TC=T1s]를 이용하고(code>=48인 경우, 여기에서 g=(code&128)>>1 이고 f=(code&(192-g))>>6), [T1s=f+(f>>1); TC=T1s+1](code>=24인 경우, , 여기에서 f=5-(code>>3)) 및 [T1s=7-(code>>g); TC=T1s+(3-g)+((T1s+1)>>2)](그 외의 경우, 여기에서 g=code>>3)를 정의하고 연산을 수행한다.
도 2에 도시된 바와 같이, 테이블 룩-업에 의한 메모리 접근은 전혀 없이 산술식만으로 모든 디코딩을 수행하고, 상대적으로 연산 시간이 오래 걸리는 나눗셈 관련 연산(/, %)은 철저하게 배제되었다. 실험 결과 95%의 확률로 9 비트 표현 집합에서 VLC 코드를 찾기 때문에 조건문의 숫자도 4개 이하일 확률이 95% 이상이다. 또한, 이전에 사용된 방법과 다르게 조건자체가 VLC 코드의 값에만 의존하는 단순하고 일관된 구조를 갖고 있다. 일부 프로세서에서는 연산량이 적지 않게 필요한 m은 필수불가결한 이유가 없는 한 산술식에서 배제시켰다. 그러나 도 2에서 FAST_GETM 방식은, 예를 들면 ARMv5 프로세서의 CLZ (count leading zero) 명령어의 경우처럼 m을 구하는 빠른 연산을 지원하는 시스템를 위한 매크로이다. 즉, GetM() 함수를 빠르게 실행할 수 있는 시스템에서는 GetM()함수를 이용한 산술식이 훨씬 간단하지만, 그렇지 않은 시스템에서는 오히려 GetM()함수의 이용을 자제하는 것이 바람직하다.
2) VLC1 표 (2 <= nC < 4)
VLC0의 경우와 유사하게 먼저 VLC 코드를 비트 길이 및 값의 순서대로 9-bit 와 14-bit 집합으로 정렬한 후에, VLC 코드들을 다시 관련 있는 3개 및 4개의 그룹으로 각각 분류한다. 분류한 후에 각각의 그룹에 대해서 하나의 산술식을 정의해서 테이블 룩-업 없이 디코딩을 수행한다.
하기 표 5 및 표 6은 그룹으로 분류된 VLC 코드를 도시한다.
Code Value Bit count [T1s, TC]
1 1xxx xxxx >= 384 2 [0, 0]
1 0xxx xxxx >= 256 2 [1, 1]
0 11xx xxxx >= 192 3 [2, 2]
0 101x xxxx >= 160 4 [3, 3]
0 100x xxxx >= 128 4 [3, 4]
0 0111 xxxx >= 112 5 [1, 2]
0 0110 xxxx >= 96 5 [3, 5]
0 0101 1xxx >= 88 6 [0, 1]
0 0101 0xxx >= 80 6 [1, 3]
0 0100 1xxx >= 72 6 [2, 3]
0 0100 0xxx >= 64 6 [3, 6]
0 0011 1xxx >= 56 6 [0, 2]
0 0011 0xxx >= 48 6 [1, 4]
0 0010 1xxx >= 40 6 [2, 4]
0 0010 0xxx >= 32 6 [3, 7]
0 0001 11xx >= 28 7 [0, 3]
0 0001 10xx >= 24 7 [1, 5]
0 0001 01xx >= 20 7 [2, 5]
0 0001 00xx >= 16 7 [3, 8]
0 0000 111x >= 14 8 [0, 4]
0 0000 110x >= 12 8 [1, 6]
0 0000 101x >= 10 8 [2, 6]
0 0000 100x >= 8 8 [0, 5]
0 0000 0111 7 9 [0, 6]
0 0000 0110 6 9 [1, 7]
0 0000 0101 5 9 [2, 7]
0 0000 0100 4 9 [3, 9]
Code Value Bit count [T1s, TC]
00 0000 0111 1xxx >= 120 11 [0, 7]
00 0000 0111 0xxx >= 112 11 [1, 8]
00 0000 0110 1xxx >= 104 11 [2, 8]
00 0000 0110 0xxx >= 96 11 [3, 10]
00 0000 0101 1xxx >= 88 11 [0, 8]
00 0000 0101 0xxx >= 80 11 [1, 9]
00 0000 0100 1xxx >= 72 11 [2, 9]
00 0000 0100 0xxx >= 64 11 [3, 11]
00 0000 0011 11xx >= 60 12 [0, 9]
00 0000 0011 10xx >= 56 12 [1, 10]
00 0000 0011 01xx >= 52 12 [2, 10]
00 0000 0011 00xx >= 48 12 [3, 12]
00 0000 0010 11xx >= 44 12 [0, 10]
00 0000 0010 10xx >= 40 12 [1, 11]
00 0000 0010 01xx >= 36 12 [2, 11]
00 0000 0010 00xx >= 32 12 [0, 11]
00 0000 0001 111x >= 30 13 [0, 12]
00 0000 0001 110x >= 28 13 [1, 12]
00 0000 0001 101x >= 26 13 [2, 12]
00 0000 0001 100x >= 24 13 [3, 13]
00 0000 0001 011x >= 22 13 [0, 13]
00 0000 0001 010x >= 20 13 [1, 13]
00 0000 0001 001x >= 18 13 [2, 13]
00 0000 0001 000x >= 16 13 [3, 14]
00 0000 0000 111x >= 14 13 [0, 14]
00 0000 0000 110x >= 12 13 [2, 14]
00 0000 0000 1011 11 14 [1, 14]
00 0000 0000 1010 10 14 [2, 15]
00 0000 0000 1001 9 14 [0, 15]
00 0000 0000 1000 8 14 [1, 15]
00 0000 0000 0111 7 14 [0, 16]
00 0000 0000 0110 6 14 [1, 16]
00 0000 0000 0101 5 14 [2, 16]
00 0000 0000 0100 4 14 [3, 16]
00 0000 0000 001x >= 2 13 [3, 15]
도 3은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC1 디코딩 알고리듬을 도시한 흐름도이다.
도 3에 도시된 바와 같이, 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 3을 참조하면, code 및 code 14값에 따라 적절한 산술식, 예를 들면 [T1s=(g<<1)+(f>>1); TC=T1s+((g+f)>>2)](code>=128인 경우, 여기에서 g=1-(code>>8) 이고 f=7-(code>>(6-g))), [T1s=3-((code>>f)&(3-h)); TC=(3-g)+(k<<1)+(k>>1)](code>=16인 경우, 여기에서 g=(code>>5), h=(g+1)>>2 이고 f=(g+11)>>2), [T1s=((f-g)==3)?0:(7-f); TC=T1s+(6-g)-(k&(f&1))](4<=code<16인 경우, 여기에서 g=code>>3, f=code>>g이고 k=g+((code==5)?1:0)))이고, code값이 4보다 작을 경우에는 14-bit 값인 code14를 구한 후에, [T1s=3-(f&3); TC=T1s+9-(g<<1)+((15-f)>>2) -((f&1)&(T1s>>1))](code14>=32인 경우, 여기에서 g=code14>>6 이고 f= (code14<36)?7:(code14>>(2+g))), [T1s=3-(f&3); TC=12+((15-f)>>2+((T1s+1)>>2)](code14>=12인 경우, 여기에서 f=(code14<14)?5:(code14>>1)), [T1s=12-code14-3*((13-code14)>>2); TC=17-((code14+1)>>2)](code14>=8인 경우), [T1s=(code14<4) ? 3 : (7-code14); TC=15+g](그 이외의 경우, 여기에서 g=code14>>2) 를 정의하고 상기 산술식에 따라 T1s 및 TC 값을 구한다. 도 3의 알고리듬에 따른 디코딩 방법은 도 2와 유사하므로 자세한 설명은 생략한다.
3) VLC2 표 (4 <= nC < 8)
먼저 VLC 코드를 비트 길이 및 값의 순서대로 7-bit 와 10-bit 집합으로 정렬한 후에, 표 7 및 표 8과 같이 VLC 코드들을 다시 관련 있는 그룹으로 각각 분류한다. 분류한 후에 각각의 그룹에 대해서 하나의 산술식을 정의해서 테이블 룩-업 검색 없이 디코딩을 수행한다.
Code Value Bit count [T1s, TC]
111 1xxx >= 120 4 [0, 0]
111 0xxx >= 112 4 [1, 1]
110 1xxx >= 104 4 [2, 2]
110 0xxx >= 96 4 [3, 3]
101 1xxx >= 88 4 [3, 4]
101 0xxx >= 80 4 [3, 5]
100 1xxx >= 72 4 [3, 6]
100 0xxx >= 64 4 [3, 7]
011 11xx >= 60 5 [1, 2]
011 10xx >= 56 5 [2, 3]
011 01xx >= 52 5 [3, 8]
011 00xx >= 48 5 [1, 3]
010 11xx >= 44 5 [2, 4]
010 10xx >= 40 5 [1, 4]
010 01xx >= 36 5 [2, 5]
010 00xx >= 32 5 [1, 5]
001 111x >= 30 6 [0, 1]
001 110x >= 28 6 [1, 6]
001 101x >= 26 6 [2, 6]
001 100x >= 24 6 [3, 9]
001 011x >= 22 6 [0, 2]
001 010x >= 20 6 [1, 7]
001 001x >= 18 6 [2, 7]
001 000x >= 16 6 [0, 3]
000 1111 15 7 [0, 4]
000 1110 14 7 [1, 8]
000 1101 13 7 [2, 8]
000 1100 12 7 [3, 10]
000 1011 11 7 [0, 5]
Code Value Bit count [T1s, TC]
00 0101 0xxx >= 80 7 [2, 9]
00 0100 1xxx >= 72 7 [0, 6]
00 0100 0xxx >= 64 7 [0, 7]
00 0011 11xx >= 60 8 [0, 8]
00 0011 10xx >= 56 8 [1, 9]
00 0011 01xx >= 52 8 [2, 10]
00 0011 00xx >= 48 8 [3, 11]
00 0010 11xx >= 44 8 [0, 9]
00 0010 10xx >= 40 8 [1, 10]
00 0010 01xx >= 36 8 [2, 11]
00 0010 00xx >= 32 8 [3, 12]
00 0001 111x >= 30 9 [0, 10]
00 0001 110x >= 28 9 [1, 11]
00 0001 101x >= 26 9 [2, 12]
00 0001 100x >= 24 9 [3, 13]
00 0001 011x >= 22 9 [0, 11]
00 0001 010x >= 20 9 [1, 12]
00 0001 001x >= 18 9 [2, 13]
00 0001 000x >= 16 9 [0, 12]
00 0000 111x >= 14 9 [1, 13]
00 0000 1101 13 10 [0, 13]
00 0000 1100 12 10 [1, 14]
00 0000 1011 11 10 [2, 14]
00 0000 1010 10 10 [3, 14]
00 0000 1001 9 10 [0, 14]
00 0000 1000 8 10 [1, 15]
00 0000 0111 7 10 [2, 15]
00 0000 0110 6 10 [3, 15]
00 0000 0101 5 10 [0, 15]
00 0000 0100 4 10 [1, 16]
00 0000 0011 3 10 [2, 16]
00 0000 0010 2 10 [3, 16]
00 0000 0001 1 10 [0, 16]
도 4는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token VLC2 디코딩 알고리듬을 도시한 흐름도이다.
도 4에는 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 4를 참조하면, code 및 code10의 값에 따라 적절한 산술식, 예를 들면 [T1s=(f>3)?3:f; TC=f](code>=11인 경우, 여기에서 f=15-(code>>3)), [T1s=(f<4)?f:(1+(f&1)); TC=(f==3)?8:(T1s+(f>>1)+((9-f)>>3))](code>=32인 경우, 여기에서 f=16-(code>>2)), [T1s=(f&3); TC=(g<<2)+(1+(f>>2))+(g&1)](code>=18인 경우, 여기에서 f=15-(code>>1)이고 g=(T1s+1)>>1), [T1s=((15-code)&3)*(1-g); TC=(T1s==0)?(7-(code>>2)) : (((T1s+7)>>1)<<1)](11<=code<18인 경우, 여기에서 g=code>>4)이고, code 값이 11보다 작을 경우에는 10-bit 값인 code10을 구한 후에 [T1s=((f+6)>>4)<<1; TC=T1s+7-(f&1)](code10>=64인 경우, 여기에서 f=code10>>3 ), [T1s=3-(f&3); TC=T1s+((5-g)<<1)+((15-f)>>2)](code10>=18인 경우, 여기에서 g=code10>>5 이고 f=code10>>(g+1)), [T1s=(code10&2)>>1; TC=T1s+12](code10>=14인 경우), [T1s=(13-code10)&3; TC=16-((code10-1) >>2)](그 이외의 경우) 등을 정의하고 정의된 산술식에 따라 T1s 및 TC값을 구한다. 도 4의 알고리듬에 따른 디코딩 방법은 도 2 및 도 3과 유사하므로 자세한 설명은 생략한다.
4) 크로마 DC 표 (nC == -1)
크로마 DC 표는 VLC 코드 를 8-bit로 표현한 후에 표 9와 같이 4개의 그룹으로 나누어서 산술식을 정의한다.
Code Value Bit count [T1s, TC]
1xxx xxxx >= 128 1 [1, 1]
01xx xxxx >= 64 2 [0, 0]
001x xxxx >= 32 3 [2, 2]
0001 11xx >= 28 6 [0, 1]
0001 10xx >= 24 6 [1, 2]
0001 01xx >= 20 6 [3, 3]
0001 00xx >= 16 6 [0, 2]
0000 11xx >= 12 6 [0, 3]
0000 10xx >= 8 6 [0, 4]
0000 011x >= 6 7 [1, 3]
0000 010x >= 4 7 [2, 3]
0000 0011 3 8 [1, 4]
0000 0010 2 8 [2, 4]
0000 000x >= 0 7 [3, 4]
도 5는 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 coeff_token 크로마 DC 디코딩 알고리듬을 도시한 흐름도이다.
도 5에는 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 5를 참조하면, code8의 값에 따라 적절한 산술식, 예를 들면 [T1s=(g>>2)+(((9-g) >>3)<<1); TC=T1s](code8>=32인 경우, 여기에서 g=code8>>5), [T1s=((g-1)>>2)*(f+(f>>1)); TC=f+1-(((f+1)>>2)<<1)](code8>=8인 경우, 여기에서 g=code8>>2 이고 f=7-g), [T1s=4-(code8>>g); TC=4-g](code8>=2인 경우, 여기에서 g=code8>>2), [T1s=3; TC=4](그 외의 경우) 등을 정의하고 정의된 산술식에 따라 T1s 및 TC값을 구한다. 도 5의 알고리듬에 따른 디코딩 방법은 도 2 내지 도 4와 유사하므로 자세한 설명은 생략한다.
2. run_before 디코딩
run_before는 zero_left(ZL) 값에 따라 7개의 run_before 테이블이 존재하고, 테이블 내의 모든 VLC 코드를 표 10과 같이 5개의 그룹으로 분류해서 각 그룹마다 산술식을 정의하고 산술식에 따라 테이블 룩-업 없이 디코딩을 수행한다.
run_before (RB) zero_left (ZL)
1 2 3 4 5 6 > 6
0 1 1 11 11 11 11 111
1 0 01 10 10 10 000 110
2 00 01 01 011 001 101
3 00 001 010 011 100
4 000 001 010 011
5 000 101 010
6 100 001
7 0001
8 00001
9 000001
10 0000001
11 00000001
12 000000001
13 0000000001
14 00000000001
도 6은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 run_before 디코딩 알고리듬을 도시한 흐름도이다.
도 6에는 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 6을 참조하면, zero_left(ZL)의 값에 따라 적절한 산술식, 예를 들면 [RB=ZL-(code&((code>>1)+1))](ZL<=2인 경우, 여기에서 code=ShowBits(ZL)), [RB=3-(code>>1)](ZL<=6이고 (3+(code>>1))>=ZL인 경우, 여기에서 code=ShowBits(3)), [RB=(ZL<6)?f:((code<2)?(code+1):f)](ZL<=6이고 (3+(code>>1))<ZL인 경우, 여기에서 code=ShowBits(3)), [RB=7-(code11>>9)](ZL>6이고 code11>=256인 경우, 여기에서 code11=ShowBits(11)), [RB=4+m]](ZL>6이고 code11<256인 경우, 여기에서 code11=ShowBits(11)) 등을 정의하고 정의된 산술식에 따라 run_before(RB)값을 구한다. 도 6의 알고리듬에 따른 디코딩 방법은 도 2 내지 도 5와 유사하므로 자세한 설명은 생략한다.
3. total_zeros 디코딩
1) 4x4 블록에 대한 total_zeros 테이블
total_zeros(TZ)의 경우 표 11 및 표 12에 도시된바와 같이, TotalCoeff(TC)의 값에 따라 15개의 total_zeros 테이블이 존재하는데, VLC 코드들의 연관성이 너무 떨어져서 산술식으로 표현할 경우 너무 많은 조건문이 필요하게 된다. 그럴 경우 오히려 테이블 검색에 비해 연산 속도가 더 떨어지기 때문에, 본 발명에서는 표 11 및 표 12에 도시된 바와 같이 조건문이 적은 TC(TotalCoeff)가 1, 13, 14, 15 일 때 4개의 테이블만 산술식으로 표현하고, 나머지 11개의 테이블은 기존의 TLBS(테이블 lookup using binary search) 방법을 이용한다.
TZ TotalCoeff(coeff_token)
1 2 3 4 5 6 7 8
0 1 111 0101 0001 1 0101 0000 01 0000 01 0000 01
1 011 110 111 111 0100 0000 1 0000 1 0001
2 010 101 110 0101 0011 111 101 0000 1
3 0011 100 101 0100 111 110 100 011
4 0010 011 0100 100 110 101 011 11
5 0001 1 0101 0011 101 101 100 11 10
6 0001 0 0100 100 100 100 011 010 010
7 0001 11 0011 011 0011 011 010 0001 001
8 0000 10 0010 0010 011 0010 0001 001 0000 00
9 0000 011 0001 1 0001 1 0010 0000 1 001 0000 00
10 0000 010 0001 0 0001 0 0001 0 0001 0000 00
11 0000 0011 0000 11 0000 01 0000 1 0000 0
12 0000 0010 0000 10 0000 1 0000 0
13 0000 0001 1 0000 01 0000 00
14 0000 0001 0 0000 00
15 0000 0000 1
TZ TotalCoeff(coeff_token)
8 9 10 11 12 13 14 15
0 0000 01 0000 01 0000 1 0000 0000 000 00 0
1 0001 0000 00 0000 0 0001 0001 001 01 1
2 0000 1 0001 001 001 01 1 1
3 011 11 11 010 1 01
4 11 10 10 1 001
5 10 001 01 011
6 010 01 0001
7 001 0000 1
8 0000 00
9
10
11
12
13
14
15
도 7은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 total_zeros 디코딩 알고리듬을 도시한 흐름도이다.
도 7에는 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 7을 참조하면, TotalCoeff(TC)값 및 code값에 따라 적절한 산술식, 예를 들면 TC가 1일 경우 9-bit code값을 구한 후에 [TZ=0](code>=256일 경우), [TZ=(m<<1)-((code>>(7-m))&1)](code>=4일 경우), [TZ=16-code](그 이외의 경우)로 산술식을 정의하고, TC가 13일 경우 [TZ=((code>>g)&(h+1))+(h-g)](여기에서 g=code>>2, h=code>>(g+1)이고 code=ShowBits(3))로 산술식을 정의하고, TC가 14나 15일 경우 [TZ=code&(g+1)](여기에서 g=code>>1, code=ShowBits(16-TC))로 산술식을 정의하고 정의된 산술식에 따라 total_zeros(TZ)값을 구한다. 위에서 정의하지 않은 나머지 TC값에 대해서는 TLBS 방법을 사용하여 total_zeros(TZ)값을 구한다. 도 7의 알고리듬에 따른 디코딩 방법은 도 2 내지 도 6과 유사하므로 자세한 설명은 생략한다.
2) 2x2 크로마 DC에 대한 total_zeros 테이블
total_zeros 크로마 DC 테이블은 표 13에 도시된 바와 같이 2개의 그룹으로 나눌 수 있다.
TZ TotalCoeff (TC)
1 2 3
0 1 1 1
1 01 01 0
2 001 00
3 000
분류된 각 그룹마다 산술식을 정의하고 산술식에 따라 테이블 룩-업 없이 디코딩을 수행한다.
도 8은 본 발명에 따른 효율적인 H.264/AVC CAVLC 디코딩 방법의 total_zeros 크로마 DC 디코딩 알고리듬을 도시한 흐름도이다.
도 8에는 본 발명에 따른 디코딩 알고리듬이 C pseudo code로 표현되어 있다. 도 8을 참조하면, TotalCoeff(TC)값 및 code값에 따라 적절한 산술식, 예를 들면 [TZ=f-code](code<=1인 경우, 여기에서 f=4-TC, code=ShowBits(f)), [TZ=1-((code&(f<<1))>>f)](그 외의 경우, 여기에서 f=4-TC, code=ShowBits(f))를 정의하고 정의된 산술식에 따라 total_zeros(TZ)값을 구한다. 도 8의 알고리듬에 따른 디코딩 방법은 도 2 내지 도 6과 유사하므로 자세한 설명은 생략한다.
본 발명에 따르면, YCbCr 4:2:2 포맷에서도 크로마 관련 VLC 코드에 대한 산술식을 추가 정의해주면 본 알고리듬을 적용할 수 있기 때문에, 베이스라인 프로파일(baseline profile)뿐이 아닌 CAVLC를 사용하는 모든 프로파일에 적용할 수 있다. 또한, YCbCr 4:4:4 포맷의 경우에는 크로마가 루마 VLC 코드를 그대로 이용하므로 역시 본 발명을 수정 없이 적용할 수 있다.
본 발명에 따른 H.264/AVC CAVLC 디코딩 방법은 VLC 코드들의 상관관계에 따라 VLC 코드들을 그룹으로 분류한 후, 각 그룹을 디코딩할 수 있는 산술식을 정의 하고 이에 따라 디코딩을 수행함으로써, 테이블 룩-업에 의한 메모리 접근을 최소화하고 디코딩 시간 및 전력 소모량을 감소시킬 수 있는 장점이 있다.

Claims (17)

  1. (a) TotalCoeffs(TC)와 TrailingOnes(T1s)의 조합으로 구성된 Coeff_Token의 디코딩 단계, (b) 각각의 0이 아닌 계수들 앞에 있는 0의 개수인 run_before의 디코딩 단계 및 (c) 마지막 0이 아닌 계수 이전의 0인 계수들의 개수인 total_zeros의 디코딩 단계를 포함하되,
    상기 Coeff_Token의 디코딩 단계, 상기 run_before의 디코딩 단계 및 상기 total_zeros의 디코딩 단계는 각각
    (1) VLC 코드들을 소정의 기준에 따라 정렬 및 그룹으로 분류하는 단계;
    (2) 상기 각 그룹마다 디코딩을 위한 산술식을 지정하는 단계; 및
    (3) 상기 산술식에 따라 디코딩을 수행하는 단계
    를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  2. 제1항에 있어서,
    상기 Coeff_Token의 디코딩 단계는
    (a-1) VLC 코드들을 비트의 길이 및 코드값의 순서대로 정렬하는 단계;
    (a-2) 상기 정렬된 VLC 코드를 관련있는 그룹으로 분류하는 단계; 및
    (a-3) 상기 분류된 그룹마다 제1 산술식을 각각 정의하고 상기 제1 산술식을 이용하여 디코딩하는 단계
    를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  3. 제2항에 있어서,
    상기 Coeff_Token의 디코딩 단계는 좌측 4x4블록의 DCT 계수의 개수[nA]와 상단 4x4블록의 DCT 계수의 개수[nB]의 평균값인 nC(=Round[(nA+nB)/2])에 따라 VLC0 테이블 내지 VLC2 테이블 중 어느 하나를 선택하고, 상기 선택된 테이블에 포함된 VLC 코드에 대하여 상기 (a-1) 단계를 수행하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  4. 제3항에 있어서,
    상기 nC값이 -1인 경우에는 크로마 DC 테이블이 선택되며, 상기 nC값이 0 이상 2 미만인 경우에는 VLC0 테이블이 선택되며, 상기 nC값이 2 이상 4 미만인 경우에는 VLC1 테이블이 선택되며, 상기 nC값이 4 이상 8 미만인 경우에는 VLC2 테이블이 선택되는 것을 특징으로 하는 CAVLC 디코딩 방법.
  5. 제2항에 있어서,
    상기 (a-1) 단계는 상기 VLC 코드들에서 비트 1's의 위치, 연속된 VLC 코드들의 값의 연속성 및 상기 VLC 코드들 중에서 Exp-Golomb 코드의 prefix 인 m: VLC 코드에서 첫 번째 비트 1 이 나오기까지의 비트 0의 개수에 따라 상기 그룹으로 분류하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  6. 제4항에 있어서,
    상기 VLC0 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 9 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 3개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 3개의 그룹 각각에 FAST_GETM을 이용하거나 산술식 [T1s=(code&256)?0:(3-f); TC=T1s], [T1s=f+(f>>1); TC=T1s+1], [T1s=7-(code>>g); TC=T1s+(3-g)+((T1s+1)>>2)] 중 선택된 어느 하나를 할당하여 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  7. 제4항에 있어서,
    상기 VLC0 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 16 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 5개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 5개의 그룹 각각에 산술식 [T1s=7-(code16>>(g+5)); TC=T1s+5-g+((T1s+1)>>2)], [T1s=3-(f&3); TC=T1s+6+((15-f)>>2)+((T1s+1)>>2)], [T1s=3-(f&3); TC=T1s+10-(g<<1)+((15-f)>>2)+((4-T1s)>>2)], [T1s=3-(code16&3); TC=T1s+12+((15-code16)>>2)+((code16&2)>>1)] 및 [T1s=1-g; TC=13+3*g] 중 선택된 어느 하나를 할당하여 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  8. 제4항에 있어서,
    상기 VLC1 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 9 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 3개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 3개의 그룹 각각에 산술식 [T1s=(g<<1)+(f>>1); TC=T1s+((g+f)>>2)], [T1s=3-((code>>f)&(3-h)); TC=(3-g)+(k<<1)+(k>>1)], [T1s=((f-g)==3)?0:(7-f); TC=T1s+(6-g)-(k&(f&1))] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  9. 제4항에 있어서,
    상기 VLC1 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 14 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 4개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 4개의 그룹 각각에 산술식 [T1s=3-(f&3); TC=T1s+9-(g<<1)+((15-f)>>2) -((f&1)&(T1s>>1))], [T1s=3-(f&3); TC=12+((15-f)>>2+((T1s+1)>>2)], [T1s=12-code14-3*((13-code14)>>2); TC=17-((code14+1)>>2)] 및 [T1s=(code14<4) ? 3 : (7-code14); TC=15+g] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  10. 제4항에 있어서,
    상기 VLC2 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 7 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 4개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 4개의 그룹 각각에 산술식 [T1s=(f>3)?3:f; TC=f], [T1s=(f<4)?f:(1+(f&1)); TC=(f==3)?8:(T1s+(f>>1)+((9-f)>>3))], [T1s=((15-code)&3)*(1-g); TC=(T1s==0)?(7-(code>>2)) : (((T1s+7)>>1)<<1)], [T1s=(f&3); TC=(g<<2)+(1+(f>>2))+(g&1)] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  11. 제4항에 있어서,
    상기 VLC2 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 10 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 4개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 4개의 그룹 각각에 산술식 [T1s=((f+6)>>4)<<1; TC=T1s+7-(f&1)], [T1s=3-(f&3); TC=T1s+((5-g)<<1)+((15-f)>>2)], [T1s=(code10&2)>>1; TC=T1s+12] 및 [T1s=(13-code10)&3; TC=16-((code10-1) >>2)] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  12. 제4항에 있어서,
    상기 크로마 DC 테이블이 선택되는 경우, 상기 (a-1) 단계는 상기 VLC 코드들을 8 비트의 길이를 가지는 이진수로 표현하는 단계를 포함하고, 상기 (a-2) 단계는 상기 표현된 이진수를 이진수의 값의 크기에 따라 4개의 그룹으로 분류하는 단계를 포함하고, (a-3) 단계는 상기 분류된 4개의 그룹 각각에 산술식 [T1s=(g>>2)+(((9-g) >>3)<<1); TC=T1s], [T1s=((g-1)>>2) * (f+(f>>1)); TC=f+1-(((f+1)>>2)<<1)], [T1s=4-(code8>>g); TC=4-g] 및 [T1s=3; TC=4] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  13. 제1항에 있어서,
    상기 run_before의 디코딩 단계는
    (b-1) zero_left 값에 따라 테이블로 분류하고, 상기 테이블 내의 VLC 코드들을 그룹으로 분류하는 단계; 및
    (b-2) 상기 분류된 그룹마다 제2 산술식을 각각 정의하고, 상기 제2 산술식을 이용하여 디코딩하는 단계
    를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  14. 제13항에 있어서,
    상기 (b-1) 단계는 zero_left 값에 따라 7개의 테이블로 분류하고 상기 7개의 테이블에 포함된 VLC 값들을 5개의 그룹으로 분류하는 단계를 포함하며, 상기 (b-2) 단계는 상기 분류된 5개의 그룹 각각에 산술식 [RB=ZL-(code&((code>>1)+1))], [RB=3-(code>>1)], [RB=(ZL<6)?f:((code<2)?(code+1):f)], [RB=7-(code11>>9)] 및 [RB=4+m] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  15. 제1항에 있어서,
    상기 total_zeros의 디코딩 단계는
    (c-1) TotalCoeff의 값에 따라 VLC 코드 값을 분류하여 테이블을 작성하는 단계;
    (c-2) 조건문의 개수가 소정 기준 이하인 테이블에 대하여 제3 산술식을 정의하고 상기 제3 산술식을 이용하여 디코딩하는 단계; 및
    (c-3) 상기 조건문의 개수가 소정 기준 이상인 테이블에 대하여 TLBS 방법으로 디코딩하는 단계
    를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  16. 제15항에 있어서,
    상기 (c-1) 단계는 상기 TotalCoeff의 값에 따라 15개의 total_zeros 테이블로 분류하는 단계를 포함하며, 상기 (c-2) 단계는 TotalCoeff의 값이 1, 13, 14 및 15인 total_zeros 테이블에 대하여 상기 제3 산술식을 정의하고 상기 제3 산술식에 따라 디코딩하는 단계를 포함하며, 상기 (c-3) 단계는 TotalCoeff의 값이 2 내지 12인 total_zeros 테이블에 대하여 상기 TLBS 방법으로 디코딩하는 단계
    를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
  17. 제15항에 있어서,
    상기 (c-2) 단계는 TotalCoeff의 값이 1, 13, 14 및 15인 total_zeros 테이블 각각에 대하여 산술식 [TZ=0], [TZ=(m<<1)-((code>>(7-m))&1)], [TZ=16-code], [TZ=((code>>g)&(h+1))+(h-g)], 및 [TZ=code&(g+1)] 중 선택된 어느 하나를 할당하고 디코딩하는 단계를 포함하는 것을 특징으로 하는 CAVLC 디코딩 방법.
KR1020060042514A 2006-05-11 2006-05-11 효율적인 h.264/avc cavlc 디코딩 방법 Expired - Fee Related KR100813877B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020060042514A KR100813877B1 (ko) 2006-05-11 2006-05-11 효율적인 h.264/avc cavlc 디코딩 방법
US11/608,262 US7423562B2 (en) 2006-05-11 2006-12-08 Effective decoding method of H.264/AVC context-based adaptive variable length coding

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060042514A KR100813877B1 (ko) 2006-05-11 2006-05-11 효율적인 h.264/avc cavlc 디코딩 방법

Publications (2)

Publication Number Publication Date
KR20070109487A KR20070109487A (ko) 2007-11-15
KR100813877B1 true KR100813877B1 (ko) 2008-03-18

Family

ID=38684603

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060042514A Expired - Fee Related KR100813877B1 (ko) 2006-05-11 2006-05-11 효율적인 h.264/avc cavlc 디코딩 방법

Country Status (2)

Country Link
US (1) US7423562B2 (ko)
KR (1) KR100813877B1 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4368575B2 (ja) * 2002-04-19 2009-11-18 パナソニック株式会社 可変長復号化方法、可変長復号化装置およびプログラム
JP4379444B2 (ja) * 2006-07-26 2009-12-09 ソニー株式会社 復号化方法、復号化方法のプログラム、復号化方法のプログラムを記録した記録媒体、復号化装置
US8098735B2 (en) * 2006-12-21 2012-01-17 Lsi Corporation Efficient 8×8 CABAC residual block decode
US7501964B2 (en) * 2007-04-16 2009-03-10 Texas Instruments Incorporated Entropy coding for digital codecs
KR100923948B1 (ko) * 2007-11-26 2009-10-29 한국전자통신연구원 어플리케이션 특정 명령어 프로세서에 기반한 h.264cavlc 디코딩 방법
KR100935856B1 (ko) * 2007-11-29 2010-01-07 한국전자통신연구원 H.264 cavlc 디코딩에서의 cavlc 테이블 탐색방법
US8542727B2 (en) * 2007-12-31 2013-09-24 Intel Corporation Systems and apparatuses for performing CABAC parallel encoding and decoding
KR100941059B1 (ko) * 2008-01-23 2010-02-05 경상대학교산학협력단 새로운 복호화 테이블을 기반으로 하는 저전력 토탈 제로정보의 복호화 방법 및 장치
US7592937B1 (en) * 2008-06-02 2009-09-22 Mediatek Inc. CABAC decoding unit and method
US8138956B2 (en) * 2008-06-02 2012-03-20 Mediatek Inc. CABAC encoder and CABAC encoding method
KR101501568B1 (ko) * 2008-07-04 2015-03-12 에스케이 텔레콤주식회사 영상 부호화 및 복호화 장치 및, 방법
US7773004B2 (en) * 2008-07-08 2010-08-10 Qualcomm Incorporated CAVLC run-before decoding scheme
CN101873496B (zh) * 2010-05-24 2012-02-29 杭州海康威视软件有限公司 一种h.264的基于上下文自适应变长解码方法及装置
CN102377994B (zh) * 2010-08-05 2014-05-07 富士通株式会社 上下文自适应可变长度编码方法和系统
CN102547260B (zh) * 2010-12-22 2014-11-19 联芯科技有限公司 基于上下文自适应的可变长编码的解码方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030062913A (ko) * 2002-01-21 2003-07-28 주식회사 엘지이아이 가변 길이 복호화기
KR20050061777A (ko) * 2003-12-18 2005-06-23 엘지전자 주식회사 Cavlc 복호 방법

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7099387B2 (en) * 2002-03-22 2006-08-29 Realnetorks, Inc. Context-adaptive VLC video transform coefficients encoding/decoding methods and apparatuses
JP4271134B2 (ja) * 2004-12-10 2009-06-03 株式会社東芝 可変長符号化デコーダおよびデコード方法
US7292163B1 (en) * 2006-04-14 2007-11-06 Xilinx, Inc. Circuit for and method of encoding a data stream

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030062913A (ko) * 2002-01-21 2003-07-28 주식회사 엘지이아이 가변 길이 복호화기
KR20050061777A (ko) * 2003-12-18 2005-06-23 엘지전자 주식회사 Cavlc 복호 방법

Also Published As

Publication number Publication date
US7423562B2 (en) 2008-09-09
KR20070109487A (ko) 2007-11-15
US20070262886A1 (en) 2007-11-15

Similar Documents

Publication Publication Date Title
KR100813877B1 (ko) 효율적인 h.264/avc cavlc 디코딩 방법
US7496143B2 (en) Method and arrangement for coding transform coefficients in picture and/or video coders and decoders and a corresponding computer program and a corresponding computer-readable storage medium
CN101164340B (zh) Cabac解码系统及方法
JP4886755B2 (ja) コンテキスト適応バイナリ算術符号化と復号化のシステム及び方法
US9338478B2 (en) Video compression using multiple variable length coding methods for multiple types of transform coefficient blocks
KR100856398B1 (ko) 복수 매핑 테이블을 이용한 가변장 부호화 및 복호화방법과 그 장치
US20040126028A1 (en) Image encoding method, image decoding method, image encoding apparatus, image decoding apparatus, image encoding program, and image decoding program
US20040240559A1 (en) Context adaptive binary arithmetic code decoding engine
Hu et al. A new lossless compression scheme based on Huffman coding scheme for image compression
US20070126853A1 (en) Variable length codes for scalable video coding
EP2112765A1 (en) Method for encoding a sequence of integers, storage device and signal carrying an encoded integer sequence and method for decoding a sequence of integers
US20070053425A1 (en) Variable length codes for scalable video coding
CN100471279C (zh) 一种基于上下文自适应变长解码的方法
Hoffman et al. High-throughput CAVLC architecture for real-time H. 264 coding using reconfigurable devices
KR100753282B1 (ko) Cavlc 디코딩을 위한 vlc 테이블 선택방법 및 그cavlc 디코딩방법
KR100848905B1 (ko) 가변 길이 복호화기
CN101188753B (zh) 一种视频熵解码查找表的构造方法及视频熵解码方法
Yeo et al. High throughput parallel decoding method for H. 264/AVC CAVLC
Hu et al. A novel two-stage lossless image compression scheme
Sima et al. Variable Length Decoder Implemented on a TriMedia/CPU64 Reconfigurable Functional Unit
CN101258756A (zh) 用于可伸缩视频编码的可变长度编码
KR20010010964A (ko) 동영상 부호화 방법

Legal Events

Date Code Title Description
A201 Request for examination
PA0109 Patent application

St.27 status event code: A-0-1-A10-A12-nap-PA0109

PA0201 Request for examination

St.27 status event code: A-1-2-D10-D11-exm-PA0201

R17-X000 Change to representative recorded

St.27 status event code: A-3-3-R10-R17-oth-X000

D13-X000 Search requested

St.27 status event code: A-1-2-D10-D13-srh-X000

D14-X000 Search report completed

St.27 status event code: A-1-2-D10-D14-srh-X000

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

St.27 status event code: A-1-2-D10-D21-exm-PE0902

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

PG1501 Laying open of application

St.27 status event code: A-1-1-Q10-Q12-nap-PG1501

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

St.27 status event code: A-1-2-D10-D22-exm-PE0701

GRNT Written decision to grant
PR0701 Registration of establishment

St.27 status event code: A-2-4-F10-F11-exm-PR0701

PR1002 Payment of registration fee

St.27 status event code: A-2-2-U10-U11-oth-PR1002

Fee payment year number: 1

PG1601 Publication of registration

St.27 status event code: A-4-4-Q10-Q13-nap-PG1601

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 4

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 5

FPAY Annual fee payment

Payment date: 20130111

Year of fee payment: 6

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 6

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R13-asn-PN2301

St.27 status event code: A-5-5-R10-R11-asn-PN2301

FPAY Annual fee payment

Payment date: 20131231

Year of fee payment: 7

P22-X000 Classification modified

St.27 status event code: A-4-4-P10-P22-nap-X000

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 7

LAPS Lapse due to unpaid annual fee
PC1903 Unpaid annual fee

St.27 status event code: A-4-4-U10-U13-oth-PC1903

Not in force date: 20150311

Payment event data comment text: Termination Category : DEFAULT_OF_REGISTRATION_FEE

PC1903 Unpaid annual fee

St.27 status event code: N-4-6-H10-H13-oth-PC1903

Ip right cessation event data comment text: Termination Category : DEFAULT_OF_REGISTRATION_FEE

Not in force date: 20150311

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R13-asn-PN2301

St.27 status event code: A-5-5-R10-R11-asn-PN2301

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R13-asn-PN2301

St.27 status event code: A-5-5-R10-R11-asn-PN2301