KR101151352B1 - H.264/avc를 위한 문맥 적응적 가변 길이 복호화기 - Google Patents

H.264/avc를 위한 문맥 적응적 가변 길이 복호화기 Download PDF

Info

Publication number
KR101151352B1
KR101151352B1 KR1020110028297A KR20110028297A KR101151352B1 KR 101151352 B1 KR101151352 B1 KR 101151352B1 KR 1020110028297 A KR1020110028297 A KR 1020110028297A KR 20110028297 A KR20110028297 A KR 20110028297A KR 101151352 B1 KR101151352 B1 KR 101151352B1
Authority
KR
South Korea
Prior art keywords
decoder
decoding
symbol
bitstream
suffix
Prior art date
Application number
KR1020110028297A
Other languages
English (en)
Inventor
정덕진
왕규열
김병수
이상설
백승규
Original Assignee
인하대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인하대학교 산학협력단 filed Critical 인하대학교 산학협력단
Priority to KR1020110028297A priority Critical patent/KR101151352B1/ko
Application granted granted Critical
Publication of KR101151352B1 publication Critical patent/KR101151352B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/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
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation

Landscapes

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

Abstract

본 발명은 H.264/AVC에 있어서 저비용(low-cost)으로 고효율(high-throughput)을 얻을 수 있는 새로운 문맥 적응적 가변 길이 복호화기(Context-based Adaptive Variable Length Coding decoder)에 관한 것으로, 본 발명에 따르면, 간단한 산술연산(arithmetic operation)으로 coeff_token 및 total_zeros 심볼의 길이를 생성하는(generates) CAVLC 디코더가 제공됨으로써 CAVLC 디코더가 감소된 룩업 테이블로 구현될 수 있고, 향상된 스루풋(enhanced throughput)을 가지는 멀티 심볼(multi-symbol) 런 비포(run_before) 디코더가 제공됨으로써, 디코드 되어야 할 런 비포 심볼이 있는 경우 1 사이클 동안 2.5 심볼 이상이 디코드될 수 있으며, 125MHz에서 합성될(synthesized) 때 하드웨어 비용(hardware cost)은 약 12K 게이트(gates)인 문맥 적응적 가변 길이 복호화기가 제공된다.

Description

H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기{Context-based adaptive variable length coding decoder for H.264/AVC}
본 발명은 문맥 적응적 가변 길이 복호화기(Context-based Adaptive Variable Length Coding decoder)에 관한 것으로, 더 상세하게는, H.264/AVC에 있어서, 저비용(low-cost)으로 고효율(high-throughput)을 얻을 수 있는 새로운 문맥 적응적 가변 길이 복호화기에 관한 것이다.
최근, 휴대용 멀티미디어 재생기기나 스마트폰의 보급으로 인해, 다양한 휴대용 장치에서도 고품질의 멀티미디어 데이터가 이용되고 있다.
즉, 종래의 휴대용 재생장치는 그 성능의 제약으로 인해 상대적으로 낮은 품질의 파일만 재생할 수 있었으나, 최근에는, 상기한 바와 같이 휴대용 기기에서도 고품질의 멀티미디어 파일을 재생할 수 있게 되었다.
이와 같이 휴대용 기기에서의 멀티미디어에 대한 수요가 늘어나면서, 보다 적은 용량으로 높은 품질의 화질 및 음질을 제공할 수 있도록 하는 새로운 압축방식, 즉, 이른바 코덱(codec)에 대한 수요가 증가하고 있다.
이러한 멀티미디어 파일의 압축방법의 예로는, 예를 들면, 최근 들어 널리 이용되고 있는 H.264/AVC 방식이 있다.
더 상세하게는, H.264/AVC 방식은, ITU-T의 VCEG(Video Coding Expert Group) 및 ISO/ICE의 MPEG(Moving Picture Expert Group)에 의해 개발된 것으로, 1/4 픽셀 정밀도 모션 평가(Quarter-pixel precision motion estimation) 다양한 프레임내 예측 모드(various intra prediction modes), 정수 변환(integer transform), 적응성 인-루프 필터(adaptive in-loop filter) 및 향상된 엔트로피 코딩과 같은 새로운 특징이 보다 높은 코딩 효율(higher coding efficiency)을 위해 적용되어 있다.
상기한 바와 같은 특징들에 의해, H.264/AVC는 향상된 압축율(compression rate)을 가지나, H.264/AVC 코덱은, 복잡도(complexity)가 증가하므로, H.264/AVC 코덱의 개발에 있어서 비용적인 효율 문제(cost effectiveness problem)가 발생하게 된다.
따라서 H.264/AVC 코덱의 하드웨어 구현(hardware implementation)이 불가피하게(inevitable) 된다.
H.264/AVC의 엔트로피 코딩 방법으로서, 문맥 적응적 가변 길이 코딩(Context-based Adaptive Variable Length Coding, 이하, 'CAVLC'라 한다)이, 지그재그 스캔된(zigzag scanned) 4×4 또는 2×2 잔여 데이터(residual data)를 인코딩 및 디코딩하기 위해 이용된다.
CAVLC에 있어서는, 다양한 길이의 심볼(symbols)로 구성되므로, 현재의 디코딩 처리가 끝날 때까지는 다음의 디코딩 단계가 시작될 수 없으며, 따라서 각각의 디코딩 단계가 순차적으로 진행된다.
그러므로, 실시간(real time) 고품질(high quality) 휴대용 어플리케이션 시스템(mobile application system)에 대한 CAVLC 디코더는 주의 깊게 구현되어야 한다.
상기한 바와 같은 종래의 CAVLC 디코딩 처리의 처리과정에 대하여, 도 1을 참조하여 좀 더 상세하게 설명한다.
도 1을 참조하면, 도 1은 종래의 CAVLC 디코딩 처리 흐름의 일례를 나타내는 도면이다.
즉, 도 1에 나타낸 바와 같이, 일반적으로는, H.246/AVC에 있어서 잔여 데이터 압축(residual data comprassion)의 코딩 효율(coding efficiency)을 개선하기 위해, 지그재그 스캔된 코딩(zig-zag scanned coding), 런 렝스(run-length) 코딩 및 CAVLC가 적용된다.
또한, CAVLC 디코딩은, 도 1에 나타낸 바와 같은 5개의 서브 디코딩 단계를 포함한다.
더 상세하게는, 먼저, CAVLC 디코딩의 제 1 단계로서, 비제로 계수(non-zero coefficient)(Tc)의 수(number) 및 도 1에 도시된 바와 같은 재구축된(reconstructured) 잔여 블록(residual block)의 트레일링 원(trailing ones)(Tls)의 수를 디코드하기 위한 coeff_token 디코딩이 진행된다.
상기 값들은 이어지는 서브 디코딩 단계들이 수행되어야 하는 횟수를 결정하기 위해 이용된다.
다음 단계에서, 트레일링 원의 신호(signs) 디코딩이 각각의 트레일링 원의 신호를 디코드하기 위해 수행된다.
여기서, 트레일링 원은, 지그재그 스캔된 블록 데이터에서 절대값 '1'을 가지는 마지막 계수(last coefficient)이며, 각각의 신호값(sign value)은, 역순으로(in the reverse order) 이어지는 1비트(following one bit)와 함께 디코드된다. 즉, Tls_sign 디코딩이 Tls회(times) 수행된다. 아울러, 역순이라 함은, 디코딩 처리가 마지막 계수 또는 지그재그 스캔된 블록 데이터 내의 값부터 이루어지는 것을 의미한다.
또한, 그리고 나서, 지그재그 스캔된 잔여 데이터 내의 트레일링 원을 제외한 비제로 계수들을 디코딩하기 위해 레벨(Level) 디코딩이 수행된다. 레벨 심볼(Level symbol)은 역순으로 디코드 되고 처리 횟수는 Tc-Tls이다. 즉, Tc가 0 또는 Tls이면, 디코딩 처리는 생략된다.
도 1의 예에 있어서, 최초 디코드된 레벨의 절대값은 1만큼 증가된다. 본 발명에 따르면, 이러한 과정이 후술하는 바와 같이 비트스트림 길이의 감소를 위해 조건부로 생략될 수 있다.
다음 단계에서, 지그재그 스캔된 잔여 데이터 내의 마지막 비제로 계수 전의 제로의 수를 디코드하기 위해 total_zeros 디코딩이 수행되며, total_zeros를 결정하기 위해, 4×4 블록과 2×2 크로마(chroma) DC 블록에 대한 2개의 다른 테이블이 존재한다.
Tc가 maxNumCoeff와 같을 때 total_zeros 디코딩은 수행되지 않고 total_zeros의 값은 제로로 설정되며, Tc가 제로일 때는 total_zeros 디코딩은 무시된다. maxNumCoeff는 잔여 블록의 형식(type)에 따라 16, 15, 또는 4로 설정된다.
run_before 디코딩 단계에서, 인접하는 계수들 사이의 제로의 수는 역순으로 디코드 된다. run_before 디코딩 동안, run_before 디코더는 zeroLeft에 의해 나누어진 VLCTs를 사용하며, zeroLeft는 total_zeros로 초기화되고(initialized) run_before에 의해 감소되는 zeroLeft로 새로워진다(renewed).
run_before 심볼 디코딩은 zeroLeft가 제로 또는 run_before 디코딩이 Tc-1회 수행됨을 나타내는 run_before 심볼이 존재하지 않을 때까지 수행된다.
마지막으로, level 디코딩에서 디코드된 계수들과 run_before 심볼은 재구축 잔여 데이터(reconstruct residual data)로 통합된다(merged).
트레일링 원의 신호(Tls_sign)를 제외한 CAVLC 심볼은 리딩제로(leading zeros), '1' 및 서픽스(suffix)(info.)로 구성되는 Exp-Golomb 코드를 이용하여 인코드 된다. 따라서 CAVLC 디코딩에 있어서, 리딩 제로의 수(leading_zeros)를 신속하게 찾아내는 것이 중요하다.
이를 위해, 종래에는, 예를 들면, "A VLSI Architecture Design of CAVLC Decoder", Wu Di, Gao Wen, Hu Mingzeng, Ji Zhenzhou, 5th International conference on ASIC, vol. 2, pp.962-965, 2003.에 개시된 바와 같은 효율적인 리딩 제로 검출기가 개시되어 있다.
또한, "An improved coeff_token Variable length decoding method for low power design of H.264/AVC CAVLC Decoder", Young Ho Moon, Il Ku Eom, and Suk Woon Ha, IEEE International conference on Image Processing, pp.2840-2843, 2008. 및 "An Improved Decoding Method of Coeff_token Element for H.264 CAVLC Decoder", Ya-Xuan Yu, Gao-Ming Du, Duo-Li Zhang, Yu-Kun Song, Ming-Lun Gao, International conference on anti-counterfeiting, security, and Identification in communication, pp.524-538, 2009. 등에는, 룩업 테이블(LUT)과 리딩 제로의 수를 고려한 메모리 구조가 개시되어 있다.
아울러, "A Novel Low-Cost High-Performance VLSI architecture for MPEG-4 AVC/H.264 CAVLC Decoding", Hsiu-Cheng Chang, Chien-Chang Lin, and Jiun-In Guo, IEEE International symposium on Circuits and Systems, vol. 6, pp. 6110-6113, 2005.에 개시된 바와 같은 시퀀셜 심볼 매칭 처리 등 여러 가지 방법이 제안되어 왔다.
그러나 이러한 종래의 방법들은, 예를 들면, 상기한 Moon 및 Yu에 의해 제안된 메모리 구조는, VLCTs에 사용시 디코딩 결과가 다음 사이클에 생성되어, 다음의 디코딩 단계가 현재의 디코딩 처리 내의 스킵 조건에 의해 결정되지 못하는 문제가 있었다.
또한, 상기한 Chang에 의해 제안된 심볼 매칭 처리는, 긴 심볼을 디코딩하는 경우, 디코딩하기 위해 요구되는 매칭 처리 시간이 길어, 고속(high-performance) 실시간(real-time) 어플리케이션에는 적합하지 못한 문제가 있었다.
따라서 상기한 바와 같은 종래의 CAVLC의 문제점을 해결하기 위하여는 실시간 고품질 휴대용 어플리케이션 시스템에 적합하도록, 저비용(low-cost)으로 고스루풋(high-throughput)을 가지는 새로운 CAVLC 디코더 구조(decoder architecture)를 제공하는 것이 바람직하나, 아직까지 그러한 요구를 모두 만족시키는 장치나 방법은 제공되지 못하고 있는 실정이다.
본 발명은 상기한 바와 같은 종래의 CAVLC의 단점을 개선하기 위한 것으로, 따라서 본 발명은, 저비용(low-cost)으로 고스루풋(high-throughput)을 가지는 새로운 CAVLC 디코더 구조(decoder architecture)를 제공하는 것을 그 목적으로 하는 것이다.
즉, 본 발명의 목적은, 가변 길이 코드 테이블(Variable Length Code Tables, 이하, 'VLCTs'라 한다)을 위한 효율적인 디코딩 방법, 고스루풋 멀티심볼(multi-symbol) 런 비포(run_before) 디코딩 및 지연(delay) 없이 비트스트림 레지스터(bit-stream register)를 새롭게 하는(renew) 새로운 플러시 유닛(flush unit)과 같은 특징을 가지는 새로운 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기를 제공하는 것을 그 목적으로 하는 것이다.
더 상세하게는, 본 발명의 목적은, 상기한 바와 같은 종래기술의 문제점을 개선하기 위해, 심볼 길이 정보를 포함하지 않고 리딩 제로와 비트스트림의 수를 이용하여 생성된 주소에 의해 억세스되는 저비용 LUT를 제안하고자 하는 것이며, 또한, 다른 목적은, 고스루풋(high throughput) 멀티심볼 런 비포(run_before) 디코더 및 새로운 플러시 유닛(flush unit)을 제안하고자 하는 것이다.
상기한 바와 같은 목적을 달성하기 위해, 본 발명에 따르면, H.264/AVC를 위한 문맥 적응적 가변 길이(Context-based Adaptive Variable Length Coding ; CAVLC) 복호화기(decoder)에 있어서, 비트스트림의 값을 저장하는 비트스트림 레지스터(bitstream register)와, 상기 비트스트림 레지스터의 리뉴얼(renewal)을 위해 추가적인 사이클을 요구하지 않고 상기 비트스트림 레지스터를 리뉴얼 하는 플러시 유닛(flush unit)과, 리딩 제로(leading_zeros)를 검출하는 리딩 제로 검출기(leading_zero detector)와, 상기 비트스트림으로부터 서픽스 비트스트림(suffix bit-stream)을 생성하는 정보 생성기와, coeff_token & Tls sign 디코더, total_zeros 디코더, 레벨(levels) 디코더, 멀티 심볼(multi-symbol) run_before 디코더를 포함하는 서브 디코더 블록 및 상기 서브 디코더 블록을 제어하기 위한 컨트롤러(controller)를 포함하여 구성되고, 상기 서브 디코더 블록의 각각의 디코더들은, 각각의 디코딩 과정에서 상기 리딩 제로(leading_zeros)의 값을 공유하도록 구성된 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기가 제공된다.
여기서, 상기 플러시 유닛은, 현재의 심볼 길이(symbol_length) 및 마지막 심볼 디코딩까지 소비된 비트스트림 길이를 계산하기 위한 가산기(accumulator), 시프터(shifter) 및 레지스터를 포함하고, 상기 소비된 비트스트림의 길이가 32를 초과하면, 비트스트림 레지스터의 리뉴얼(renewal)을 위한 비트스트림 요청신호를 생성하는 부가적인 가산기를 더 포함하도록 구성되어, 상기 비트스트림 요청신호가 현재의 디코딩 처리에서 생성됨으로써, 상기 비트스트림 레지스터의 리뉴얼을 위해 추가적인 사이클을 요구하지 않고 리프레시된(refreshed) 비트스트림으로 디코딩 처리가 이루어지는 것을 특징으로 한다.
또한, 상기 정보 생성기는, 현재의 비트스트림을 leading_zeros + 1 만큼 천이(shifting) 시킴으로써 상기 서픽스 비트스트림을 생성하는 것을 특징으로 한다.
아울러, 상기 coeff_token & Tls_sign 디코더는, VLCTs 억세스를 위한 주소생성을 위해, suffix_len 디코딩을 행하는 단계 및 addr_gen 디코딩을 행하는 단계와, 상기 리딩 제로(leading_zero), 상기 서픽스 길이(suffix length) 및 LUTs의 디코드된 성분(decoded elements)으로 심볼 길이를 디코드하는 단계와, 트레일링 원(trailing ones)의 신호를 디코드하는 단계를 수행하도록 구성됨으로써, 총 계수(total coefficient), 트레일링 원(trailing ones) 및 트레일링 원의 신호를 디코드하는 것을 특징으로 한다.
여기서, 상기 suffix_len 디코딩을 행하는 단계는, coeff_token 심볼의 서픽스 길이를 논리 연산으로 디코드하며, 상기 논리 연산은 이하의 [수학식 1] 내지 [수학식 3]을 이용하여 이루어지는 것을 특징으로 한다.
[수학식 1]
Figure 112011022919515-pat00001
[수학식 2]
Figure 112011022919515-pat00002
[수학식 3]
Figure 112011022919515-pat00003

(여기서, 기호 & 및 │는 비트와이즈(bit-wise) AND 및 OR 연산을 각각 나타내며, 중괄호({ })는 베릴로그(Verilog) HDL 신택스(syntax)를 의미하고, 또한, 소문자 a, b, c, d는 4비트 폭(4-bits width) 리딩 제로 신호의 MSB부터 LSB를 의미하고, a', b', c', d'로 나타낸 상보(complement)는 NOT 함수로 반전된 신호이며, nC가 -1일 때, 즉, 고정길이코드(Fixed Length Code ; FLC) 디코딩일 때 서픽스 길이(suffix_length)는 2이다.)
또한, 상기 addr_gen 디코딩을 행하는 단계는, 이전 단계에서 얻어진 리딩 제로의 수, 서픽스 비트스트림(info) 및 서픽스 길이를 이용하여 상기 LUT 억세스를 위한 주소를 디코드하고, VLCT0, VLCT1, VLCT2 및 크로마 DC에 대한 주소 디코딩은 이하의 [수학식 4] 내지 [수학식 7]에 나타낸 바와 같은 연산을 통하여 이루어지고, 디코드된 주소는 상기 suffix_len 디코딩을 행하는 단계에서 디코드된 서픽스 길이에 따라 조정되는(adjusted) 것을 특징으로 한다.
[수학식 4]
Figure 112011022919515-pat00004
[수학식 5]
Figure 112011022919515-pat00005
[수학식 6]
Figure 112011022919515-pat00006
[수학식 7]
Figure 112011022919515-pat00007

(여기서, 기호 '<<'는, 좌측 시프트 연산(left shift operation)을 의미함.)
또한, 상기 addr_gen 디코딩을 행하는 단계는, 상기 suffix_len이 3이면, 서픽스 비트스트림(info[0])의 MSB 비트는 반전되고, 그 후 최종 주소를 만들기 위해 주소값과 더해지며, 그렇지 않으면, 상기 [수학식 4] 내지 상기 [수학식 7]에서 얻어진 주소값이 최종 주소값이 되도록 구성된 것을 특징으로 한다.
아울러, 상기 복호화기는, 4개의 룩업 테이블(look-up table)에 4개의 VLCTs를 저장하고, 상기 룩업 테이블은, Tc와 Tls로 구성되는 4개의 성분이 일렬로(in a row) 삽입되며, 주소로 디코드된 성분들 사이에서 coeff_token(Tc 및 Tls)이 서픽스 비트스트림(info)으로 최종 결정되는 것을 특징으로 한다.
여기서, 상기 서픽스 비트스트림은, 일렬로 삽입된 4개의 성분 중에서 하나를 선택하도록 하는 서브어드레스(sub-address)를 위해 사용되고, 상기 sub_addr는 상기 suffix_len의 값에 의존하는 서픽스 비트스트림 중에서 선택되도록 구성되어, 상기 suffix_len가 3이면 상기 정보 생성기에서 생성된 상기 서픽스 비트스트림의 제 2 및 제 3 비트(info[1:2])가 sub_addr로서 선택되고, 그렇지 않으면, 제 1 및 제 2 비트(info[0:1])가 sub_addr로서 선택되는 것을 특징으로 한다.
또한, 유효한(valid) 서픽스 비트스트림 길이가 2보다 짧으면, 유효하지 않은 서픽스 비트스트림에 상관없이 올바른 성분(correct element)을 디코드하기 위해 인접하는 성분이 복사되도록(copied) 구성되어, 상기 suffix_len가 3이면, 8개의 성분이 상기 룩업 테이블의 2개의 연속하는 열(consecutive row)에 저장되는 것을 특징으로 한다.
아울러, 상기 심볼 길이를 디코드하는 단계는, LUTs에 억세스 할 때 총 계수의 수와 트레일링 원의 수를 선택하기 위해 사용되는 4개의 성분이 addr로서 얻어지고, 유효한 서픽스 길이를 찾기 위해, sub_addr 값이 '10' 및 '01'인 2개의 원소를 비교하거나, 또는, sub_addr의 제 1 비트(sub_addr[0])가 '1'일 때 sub_addr가 '11' 및 '10'인 상위 2개의 원소(upper two elements)를 비교하거나, 아니면, 두 번째 비교에 대하여 하위의(lower) 2개의 원소가 이용되고, 선택된 2개의 값이 동일하면 비교결과는 '1'이며, 선택된 2개의 값이 다르면 비교 결과는 '0'으로 하여, 이하의 [수학식 8]에 compare0 및compare1로서 이용함으로써 상기 심볼 길이를 디코드하는 것을 특징으로 한다.
[수학식 8]
Figure 112011022919515-pat00008

또한, 불규칙한(irregular) 심볼(nC = -1. 비트스트림 = 000_0000...)이 존재하는 경우에도 정확한 결과를 얻기 위해, symbol_len 계산을 위해 사용되는 leading_zeros를 수정하는 예외(exception) 처리를 더 포함하고, FLCT(8 ≤ nC)의 심볼이 6비트 고정 길이를 가질 때, 고정 길이 코드(FLC) 디코딩은 이하의 [수학식 9]와 같이 정의되는 것을 특징으로 한다.
[수학식 9]
Figure 112011022919515-pat00009

(여기서, bs는 시프트기로부터 생성된 현재 유효한 비트스트림을 의미하고, 대괄호 안의 숫자는 Tc와 Tls 계산을 위해 사용되는 비트스트림 내의 비트의 위치이다.)
아울러, 상기 total_zeros 디코더는, 상기 coeff_token 디코더에서 LTUs를 위해 사용된 것과 동일한 방식으로 설계된 LTUs를 가지고, 심볼 길이 디코딩 방법으로 디코드 될 수 없는 제로 시퀀스 심볼(zero sequence symbol)에 대하여, 이하의 [수학식 10]을 이용하여 주소 디코딩 전에 제로 시퀀스의 최대 길이를 계산하며,
[수학식 10]
Figure 112011022919515-pat00010

(여기서, i는 Tc/8이고, i가 1일 때 k는 Tc-6이며, 아니면 k는 Tc이다. m은 k/4이고, j는 j=(k-2)/4이다. 기호 '/'는 0(zero) 쪽으로 결과의 절사(truncation)를 가지는 정수 분할(integer division)이다.)
얻어진 leading_zeros가 제로 시퀀스의 최대 길이보다 크면, leading_zeros는 max_zero_len으로 대체하고, Tc가 1, 14 또는 15일 때 total_zeros 심볼을 디코드하기 위해, Tc가 2일때 적용 가능한 이하의 [수학식 11]에 나타낸 바와 같은 간단한 산술연산을 이용하며,
[수학식 11]
Figure 112011022919515-pat00011

2×2 크로마 잔여 데이터(chroma residual data)에 대한 룩업 테이블은 이하의 [수학식 12]와 같은 산술 디코딩 연산으로 대체하는 디코딩 처리를 수행하도록 구성된 것을 특징으로 한다.
[수학식 12]
Figure 112011022919515-pat00012

또한, 상기 멀티 심볼 run before 디코더는, 3개의 run_before 디코더와, 각각의 상기 run_before 디코더의 동작을 제어하는 run_before 컨트롤러(controller)를 포함하여 구성되며, 상기 run before 디코더는, 3개의 가산기(adder)와 3개의 2 입력(2-input) MUX를 대체하는 5개의 게이트를 포함하여 구성되고, run before 디코딩은, zeroLeft = (1, 2)인 경우, zeroLeft = (3, 4, 5)인 경우, zeroLeft = 6인 경우 및 zeroLeft > 6인 네 가지 경우에 대하여, 이하의 [수학식 13] 내지 [수학식 16]을 이용하여 수행되는 것을 특징으로 한다.
[수학식 13]
Figure 112011022919515-pat00013
[수학식 14]
Figure 112011022919515-pat00014
[수학식 15]
Figure 112011022919515-pat00015
[수학식 16]
Figure 112011022919515-pat00016

(여기서, 최종 run_before는 zeroLeft에 의해 선택되며, [수학식 15]에서, 기호 "∧"는 배타적 OR(exclusive OR) 게이트 연산을 의미한다.)
아울러, 각각의 상기 run before 디코더는, 상기 run_before 컨트롤러에 의해 이전의 zeroLeft가 zero보다 크고 run before 실행(execution)의 수가 Tc-1보다 작을 때 실행되며, 두 번째 및 세 번째 run_before 디코더에 대한 디코딩 연산은 이하의 [수학식 17]을 이용하여 수행됨으로써, 2번째(2nd) run_before decoder에 입력되는 심볼은, 첫 번째(1st) run_before 심볼 길이 디코딩이 심볼 디코딩(symbol decoding) 과정과 동시에 이루어지므로, 2개의 run_before 심볼에 대하여는 100% 정확도를 가지고 디코딩이 가능하며, 남아 있는 run_before 심볼이 있을 경우, 잔여 동작(redundant operation)이 없이 최소 2개 이상의 디코딩을 수행할 수 있도록 구성된 것을 특징으로 한다.
[수학식 17]
Figure 112011022919515-pat00017

상기한 바와 같이, 본 발명에 따르면, 가변 길이 코드 테이블(Variable Length Code Tables)을 위한 효율적인 디코딩 방법, 고스루풋 멀티심볼(multi-symbol) 런 비포(run_before) 디코딩 및 지연(delay) 없이 비트스트림 레지스터(bit-stream register)를 새롭게 하는(renew) 새로운 플러시 유닛(flush unit)과 같은 특징을 가지는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기가 제공된다.
따라서 본 발명에 따르면, 간단한 산술연산(arithmetic operation)으로 coeff_token 및 total_zeros 심볼의 길이를 생성하는(generates) CAVLC 디코더가 제공됨으로써, CAVLC 디코더가 감소된 룩업 테이블로 구현될 수 있다.
또한, 본 발명에 따르면, 향상된 스루풋(enhanced throughput)을 가지는 멀티 심볼(multi-symbol) 런 비포(run_before) 디코더가 제공됨으로써, 디코드 되어야 할 런 비포 심볼이 있는 경우 1 사이클 동안 2.5 심볼 이상이 디코드될 수 있으며, 125MHz에서 합성될(synthesized) 때 하드웨어 비용(hardware cost)은 약 12K 게이트(gates)가 되므로, 종래의 CAVLC 디코더에 비하여 저비용(low-cost)이며 고스루풋(high-throughput)을 가지는 새로운 CAVLC 디코더 구조(decoder architecture)를 제공할 수 있다.
도 1은 종래의 CAVLC 디코딩 처리 흐름의 일례를 나타내는 도면이다.
도 2는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 전체적인 구성을 개략적으로 나타내는 블록도이다.
도 3은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 coeff_token 및 Tls_sign 디코더의 구성을 개략적으로 나타내는 블록도이다.
도 4는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 coeff_token VLCT 디코딩을 위해 이용되는 주소 디코더의 구성을 개략적으로 나타내는 블록도이다.
도 5는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 run before 디코더의 전체적인 구성을 개략적으로 나타내는 도면이다.
도 6은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 멀티 심볼 run before 디코더의 전체적인 구성을 개략적으로 나타내는 도면이다.
도 7은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 성능 평가 결과를 나타내는 도면이다.
이하, 상기한 바와 같은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 상세한 내용에 대하여 설명한다.
여기서, 이하에 설명하는 내용은 본 발명을 실시하기 위한 하나의 실시예일 뿐이며, 본 발명은 이하에 설명하는 실시예의 내용으로만 한정되는 것은 아니라는 사실에 유념해야 한다.
더 상세하게는, 본 발명은, 후술하는 바와 같이, 간단한 산술연산으로 coeff_token 및 total_zeros 심볼의 길이를 생성함으로써, 감소된 룩업 테이블로 구현될 수 있는 CAVLC 디코더에 관한 것이다.
또한, 본 발명은, 향상된 스루풋을 가지는 멀티 심볼 런 비포(run_before) 디코더를 제공함으로써, 디코드 되어야 할 런 비포 심볼이 있는 경우 1 사이클 동안 2.5 심볼 이상이 디코드될 수 있으며, 125MHz에서 합성될 때 하드웨어 비용은 약 12K 게이트가 되는 CAVLC 디코더에 관한 것이다.
즉, 상기한 바와 같이, 본 발명은, 종래의 CAVLC 디코더에 비하여 저비용 고스루풋의 새로운 CAVLC 디코더 구조에 관한 것이다.
계속해서, 도면을 참조하여, 상기한 바와 같은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 상세한 내용에 대하여 설명한다.
먼저, 도 2를 참조하면, 도 2는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 전체적인 구성을 개략적으로 나타내는 블록도이다.
즉, 도 2에 나타낸 바와 같이, 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기는, 비트스트림 레지스터(bitstream reg_H, bitstream reg_L), 64비트 시프트기(shifter) 및 가산기(accumulator)를 포함하는 플러시 유닛(flush unit)과, 리딩제로 검출기(leading_zero detector)와, 정보 생성기(info_gen)와, coeff_token & Tls sign, total_zeros, levels, multi-symbol run_before의 각각의 서브 디코더 블록 및 이들 각 블록을 제어하기 위한 컨트롤러(controller)를 포함하여 구성된다.
여기서, 도 2에 나타낸 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기는, level, run_before 및 coeff_token 서브 디코더와 각각 리딩제로 검출기를 공유하도록 구성되어 있다.
또한, 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기는, 하드웨어 비용을 감소하고 다른 서브 디코더들이 각 디코딩 과정에서 leading_zeros의 값을 이용하도록 한다.
또한, 정보 생성기(info generator)는 현재의 비트스트림을 leading_zeros + 1 만큼 천이(shifting) 시킴으로써 서픽스 비트스트림(suffix bit-stream)을 생성한다.
따라서 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기는, 공유된 leading_zeros 검출기와 정보 생성기를 통하여, leading_zeros, '1' 및 서픽스(info)로 구성되는 Exp-Golomb 코드를 검출하기에 적합한 구조를 가진다.
또한, 본 발명은 추가적인 사이클이 없이 비트스트림 레지스터를 새롭게 하기 위한 새로운 플러시 유닛을 제공하며, 상기한 플러시 유닛은 존재하는 디코딩 프로세스 내에서 지금까지 소비된(consumed) 비트스트림 길이를 계산한다.
종래기술의 플러시 유닛은 가산기(accumulator), 시프터(shifter) 및 32비트 레지스터를 포함하여 구성되나, 현재의 심볼 디코딩 처리 내에서 비트스트림 요청신호(bitstream request signal)(bit_stream_req)를 생성하지 못한다. 따라서 잔여 블록에 대한 비트스트림의 길이가 32를 초과하면, 비트스트림 레지스터의 리뉴얼(renewal)을 위해 추가적인 사이클이 요구된다.
반면, 본 발명에 따른 플러시 유닛은 현재의 심볼 길이(symbol_length) 및 마지막 심볼 디코딩까지 소비된 비트스트림 길이와 함께 비트스트림 요청신호를 생성하기 위한 부가적인 가산기를 가진다.
따라서 소비된 비트스트림 길이가 32를 넘으면, 비트스트림 요청신호가 현재의 디코딩 처리에서 생성되므로, 이어지는 단계에서, 리프레시된(refreshed) 비트스트림으로 디코딩 처리가 달성된다.
또한, coeff_token & Tls_sign 및 total_zeros 디코더는 조합 논리(combinational logic)로 설계되나, level과 run_before 디코더는 자기 의존(self-dependent) 디코딩 처리이므로, 현재의 상태값(status value)을 저장해야 한다.
다음으로, 도 3을 참조하여 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 coeff_token 및 Tls_sign 디코더의 구체적인 구성에 대하여 설명한다.
도 3을 참조하면, 도 3은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 coeff_token & Tls_sign 디코더의 구성을 개략적으로 나타내는 블록도이다.
즉, 도 3에 나타낸 바와 같이, coeff_token & Tls_sign 디코더는 총 계수(total coefficient), 트레일링 원(trailing ones) 및 트레일링 원의 신호를 디코드 하기 위한 4개의 단계를 가진다.
첫 번째 단계(suffix_len 디코딩) 및 두 번째 단계(addr_gen 디코딩)는, VLCTs 억세스를 위한 주소생성을 위해 사용되며, 세 번째 단계에서, 심볼 길이는 리딩 제로(leading_zero), 서픽스 길이(suffix length) 및 LUTs의 디코드된 성분(decoded elements)으로 디코드 되고, 최종적으로, 트레일링 원의 신호는 네 번째 단계에서 디코드 된다.
첫 번째 단계에서, coeff_token 심볼의 서픽스 길이는 논리 연산으로 디코드 되며, 서픽스 길이(suffix_len)를 계산하기 위한 상기 연산은 이하의 [수학식 1] 내지 [수학식 3]을 이용하여 이루어진다.
Figure 112011022919515-pat00018
Figure 112011022919515-pat00019
Figure 112011022919515-pat00020
상기한 [수학식 1] 내지 [수학식 3]에서, 기호 & 및 │는 비트와이즈(bit-wise) AND 및 OR 연산을 각각 나타내며, 중괄호({ })는 베릴로그(Verilog) HDL 신택스(syntax)로서 사용되었다.
또한, 소문자 a, b, c, d는 4비트 폭(4-bits width) 리딩 제로 신호의 MSB부터 LSB를 의미하고, a', b', c', d'로 나타낸 상보(complement)는 NOT 함수로 반전된 신호이며, nC가 -1일 때, 즉, 고정길이코드(Fixed Length Code ; FLC) 디코딩일 때 서픽스 길이(suffix_length)는 2이다.
두 번째 단계에서, LUT 억세스를 위한 주소는, 이전 단계에서 얻어진 리딩 제로의 수, 서픽스 비트스트림(info) 및 서픽스 길이를 이용하여 디코드 되며, VLCT0, VLCT1, VLCT2 및 크로마 DC에 대한 주소 디코딩은 이하의 [수학식 4] 내지 [수학식 7]에 나타낸 바와 같은 연산을 통하여 이루어지고, 주소 디코딩 후, 디코드된 주소는 첫 번째 단계에서 디코드된 서픽스 길이에 의존하여 조정된다(adjusted).
즉, 만약, suffix_len이 3이면, 서픽스 비트스트림(info[0])의 MSB 비트는 반전되고, 그 후 최종 주소를 만들기 위해 주소값과 더해진다. 그렇지 않으면,이하의 [수학식 4] 내지 [수학식 7]에서 얻어진 주소값이 최종 주소값이 된다.
Figure 112011022919515-pat00021
Figure 112011022919515-pat00022
Figure 112011022919515-pat00023
Figure 112011022919515-pat00024
여기서, 기호 '<<'는, 좌측 시프트 연산(left shift operation)을 의미한다.
다음으로, 도 4를 참조하여, coeff_token VLCT 디코딩을 위해 이용되는 주소 디코더에 대하여 상세히 설명한다.
도 4를 참조하면, 도 4는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 coeff_token VLCT 디코딩을 위해 이용되는 주소 디코더의 구성을 개략적으로 나타내는 블록도이다.
즉, 도 4에 나타낸 바와 같이, 도 4는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기는, 4개의 룩업 테이블(look-up table)에 4개의 VLCTs를 저장한다.
Tc와 Tls로 구성되는 4개의 성분은 일렬로(in a row) 삽입되며, 주소로 디코드된 성분들 사이에서, coeff_token(Tc 및 Tls)은 서픽스 비트스트림(info)으로 최종 결정된다. 서픽스 비트스트림은 일렬로 삽입된 4개의 성분 중에서 하나를 선택하도록 하는 서브어드레스(sub-address)를 위해 사용된다. sub_addr는 suffix_len의 값에 의존하는 서픽스 비트스트림 중에서 선택된다.
만약, suffix_len가 3이면, 정보 생성기에서 생성된 서픽스 비트스트림의 제 2 및 제 3 비트(info[1:2])가 sub_addr로서 선택되고, 그렇지 않으면, 제 1 및 제 2 비트(info[0:1])가 sub_addr로서 선택된다.
또한, 유효한(valid) 서픽스 비트스트림 길이가 2보다 짧으면, 유효하지 않은 서픽스 비트스트림을 상관없이 올바른 성분(correct element)을 디코드하기 위해 인접하는 성분이 복사된다(copied).
만약, 서픽스 길이가 3이면, 8개의 성분이 룩업 테이블의 2개의 연속하는 열(consecutive row)에 저장되고, 규칙성(regularity)으로 인해, 직관적인(intuitive) coeff_token 디코딩이 이루어질 수 있다.
여기서, [표 1] 내지 [표 4]에 나타낸 바와 같이, LUTs 사용에 있어서 복제된 성분으로 인해 일부 비효율적인 면이 있으나, 본 발명에 따르면, 각 성분의 심볼 길이 정보가 포함되어 있지 않으므로, 종래기술의 방법에 비해 룩업 테이블의 크기(size)를 약 30% 감소할 수 있다.
또한, 각각의 표에서, 각 성분의 첫 번째 숫자는 총 계수(total coefficient)이고, 두 번째 숫자는 트레일링 원의 수이다.
Figure 112011022919515-pat00025
[ coeff_token 디코딩을 위한 VLCT0 룩업 테이블 ]
Figure 112011022919515-pat00026
[ coeff_token 디코딩을 위한 VLCT1 룩업 테이블 ]
Figure 112011022919515-pat00027
[ coeff_token 디코딩을 위한 VLCT2 룩업 테이블 ]
Figure 112011022919515-pat00028
[ coeff_token 디코딩을 위한 Chroma DC 룩업 테이블 ]
다음으로, 세 번째 단계에서, 심볼 길이 디코딩이 처리된다. 본 발명에서는, LUTs에 억세스 할 때 총 계수의 수와 트레일링 원의 수를 선택하기 위해 사용되는 4개의 성분을 addr로 얻으며, 유효한 서픽스의 길이를 찾기 위해, 이하와 같이 4개의 쌍(pairs)을 비교한다.
상기한 비교는 2가지의 비교가 있으며, 먼저, 첫 번째는, sub_addr 값이 '10' 및 '01'인 2개의 원소를 비교하는 것이고, 두 번째는, sub_addr의 제 1 비트(sub_addr[0])가 '1'일 때 sub_addr가 '11' 및 '10'인 상위 2개의 원소(upper two elements)를 비교하는 것이며, 아니면, 두 번째 비교에 대하여 하위의(lower) 2개의 원소가 이용된다.
선택된 2개의 값이 동일하면 비교결과는 '1'이며, 선택된 2개의 값이 다르면 비교 결과는 '0'이다. 2가지의 비교결과는 이하의 [수학식 8]에 compare0 및compare1로서 정의되어 있다.
Figure 112011022919515-pat00029
본 발명의 coeff_token 디코딩 처리로 Tc, Tls 및 심볼 길이가 얻어질 수 있으나, 표 4에서 어두운 색으로 표시된 바와 같은 불규칙한(irregular) 심볼(nC = -1. 비트스트림 = 000_0000...)이 존재한다.
따라서 정확한 결과를 얻기 위해, symbol_len 계산을 위해 사용되는 leading_zeros를 수정하는 부가적인 로직에 의해 예외(exception) 처리가 행해진다.
최종적으로, 트레일링 원의 신호를 레벨 레지스터 파일(level register file)로 전송하기 위해 Tls_sign 디코딩이 수행된다. 트레일링 원의 신호(Tls_sign)의 심볼 위치(symbol position)는 서픽스 비트스트림(info)의 suffix_len-compare0-compare1에서 시작된다. Tls와 같은 이어지는 비트들은 트레일링 원 신호 디코딩에 이용되고 레벨 레지스터 파일에 저장되기 위하여 분석된다(parsed).
고정 길이 코드(FLC) 디코딩은 다른 VLC 디코딩과 대조적으로 산술함수(arithmetic function)로 정의될 수 있다. FLCT(8 ≤ nC)의 심볼은 6비트 고정 길이를 가진다. FLC 디코딩은 이하의 [수학식 9]와 같이 정의된다.
Figure 112011022919515-pat00030
여기서, bs는, 64비트 시프트기로부터 생성된 현재 유효한 비트스트림을 의미하고, 대괄호 안의 숫자는 Tc와 Tls 계산을 위해 사용되는 비트스트림 내의 비트의 위치이다. 이후의 식에서, bs는 연속적으로, 플러시 유닛으로부터 분석된 유효한 비트스트림을 가리킨다.
다음으로, 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 레벨 디코더에 대하여 설명한다.
레벨 심볼(level symbol)은 VLCTs로 디코드 되지 않고 산술 디코딩 처리로 디코드 되며, 레벨 심볼을 디코딩하기 위해 레벨 심볼의 최대 길이(maximum length)가 정확하게 분석되어야 한다.
레벨 심볼의 길이는 지원되는 프로파일(supported profile)에 따라 정의되며, 만일, 프로파일이 베이스라인(baseline), 메인(main), 또는 확장된 프로파일(extended profile)이면, 레벨 심볼의 프리픽스(prefix)는 15 아래이며, 서픽스의 길이는 프리픽스 -3 이하이다. 따라서 레벨 심볼의 최대 길이는 28비트이다.
다른 프로파일에서, 프리픽스의 길이는 11+ bit_depth 이하이고, bit_depth는 8 이상 14 이하이다. 본 발명의 CAVLC 디코더는 메인 프로파일까지 지원하므로 레벨 디코더는 28 이하의 길이를 가지는 심볼을 디코드하도록 설계된다. 레벨 디코딩의 처리는 이하의 [표 5]에 나타낸 바와 같은 흐름으로 이루어지며, [표 5]에 있어서,부호 '~'는 비트와이즈 낫 게이트(bit-wise not gate operation) 동작을 의미한다.
Figure 112011022919515-pat00031
[ 레벨 심볼 디코딩 처리 흐름 ]
여기서, 레벨 디코딩 처리에는 상술한 바와 같이 조건부로 예외(conditional exception)가 있으며, 이는 H.264/AVC 인코딩의 압축률(compression rate)을 향상시키기 위해 적용된다.
즉, H.264/AVC 인코딩에 있어서, 첫 번째 비트레일링 원(non-trailing ones) 레벨은 트레일링 원의 수가 3보다 작을 때 1만큼 감소된 절대값을 가진다. Tls가 3보다 작으면, 첫 번째 비트레일링 원 레벨은 음(negative)일 경우 1만큼 증가하고, 양(positive)일 경우 1만큼 감소하여, 첫 번째 비트레일링 원 레벨이 제로에 근접하도록 한다.
대조적으로, 이러한 예외는 레벨 디코딩 처리에서 level_cnt와 Tls를 체크하는 조건문(conditional sentence)에 의해 표현된다. level_cnt가 제로이고 Tls가 3보다 작으면, levelCode는 2만큼 증가한다. 결과적으로, 마지막 비트레일링 원 레벨은 증가된 절대값을 가진다.
레벨 디코딩 처리에서, 이전의 레벨 디코딩 처리에서 결정된 level_length가 현재의 레벨 디코딩에도 사용된다. 따라서 레벨 디코딩이 자기 의존(self-dependent) 디코딩 처리가 되고 순차적인 로직(sequential logic)에 의해 구현될 수 있다.
다음으로, 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 total_zeros 디코더에 대하여 설명한다.
본 발명에 따른 total_zeros 디코더는, coeff_token 디코더에서 LTUs를 위해 사용된 것과 동일한 방식으로 설계된 유사한 LTUs를 가진다. total_zeros 심볼의 서픽스 길이는 2보다 적고, 따라서 coeff_token 디코딩의 두 번째 단계에서 사용된 주소 조정(address adjustment)은 필요하지 않다. coeff_token 디코딩에는 동일한 심볼 길이 디코딩 방법이 사용되나, 심볼 길이 디코딩 방법으로 디코드 될 수 없는 제로 시퀀스 심볼(zero sequence symbol)의 수가 존재하기 때문에, total_zeros 디코딩은 부가적인 디코딩 처리를 요구한다.
따라서 본 발명에서는, 이하의 [수학식 10]을 이용하여, 주소 디코딩 전에 제로 시퀀스의 최대 길이를 계산한다.
Figure 112011022919515-pat00032
[수학식 10]에 있어서, i는 Tc/8이고, i가 1일 때 k는 Tc-6이며, 아니면 k는 Tc이다. m은 k/4이고, j는 j=(k-2)/4이다. 기호 '/'는 0(zero) 쪽으로 결과의 절사(truncation)를 가지는 정수 분할(integer division)이다.
얻어진 leading_zeros가 제로 시퀀스의 최대 길이보다 크면, leading_zeros는 max_zero_len으로 대체된다. 즉, 예를 들면, Young HO Moon, "An advanced Total_zeros Decoding method Based on New Memory architecture in H.264/AVC CAVLC",IEEE Tran. Circuits and Systems for Video Technology, vol. 18, no. 9, September 2008.에 개시된 바와 같은 종래기술의 하이브리드 디코딩 방법과 달리, 본 발명의 total_zeros 디코더는, Tc가 1, 14 또는 15일 때 total_zeros 심볼을 디코드하기 위해, Tc가 2일때 적용 가능한 이하의 [수학식 11]에 나타낸 바와 같은 간단한 산술연산을 이용하며, 그것에 의해, 상기한 종래기술과 비교하여 룩업 테이블을 약 11% 감소할 수 있다.
Figure 112011022919515-pat00033
또한, 2×2 크로마 잔여 데이터(chroma residual data)에 대한 룩업 테이블은 이하의 [수학식 12]와 같은 산술 디코딩 연산으로 대체될 수 있다.
Figure 112011022919515-pat00034
계속해서, 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 run before 디코더에 대하여 설명한다.
대부분의 run_before 심볼의 길이는 3보다 짧고 run_before 디코더는 다른 서브 디코더들보다 작은 하드웨어(H/W) 사이즈를 가지며, 멀티 심볼 run_before 디코더는, 예를 들면, "Highthroughput low-cost VLSI architecture for AVC/H.264 CAVLC decoding", G. G. Lee, C.-C. Lo, Y.-C. Chen, H.-Y. Lin, M.-J. Wang, IET Image Processing, vol.4, no. 2, pp. 81-91, 2010. 및 "A zero-skipping Multisymbol CAVLC decoder for MPEG-4 AVC/H.264", Guo-Shiuan Yu, Tian-Sheuan Chang, Proc. int. symposium on ISCAS 2006, pp. 5583-5586, 2006.와 같이, run_before 심볼의 특징에 근거하여 다양한 문헌을 통하여 연구되어 왔다.
그러나 상기한 종래의 문헌들은, 향상된 스루풋과는 대조적으로 H/W 사이즈는 크게 증가하였다. 즉, 상기한 Yu의 문헌에 따르면, 멀티 심볼 run_before 디코더에 대하여 분리된(separated) run_before 테이블을 제안하고 있으나, 멀티 심볼 run_before 디코더는 zeroLeftr가 6보다 작을 때 두 개의 run_before 심볼을 디코드하며, 상기한 테이블은 두 개의 연속적인 run_before 심볼의 가능한 조합(conbination)을 가지고 있다.
이는, 스루풋은 증가되나, 테이블 사이즈는 기하급수적으로(exponentially) 증가하는 결과를 야기한다.
또한, "An Efficient Decoding of CAVLC in H.264/AVC Video coding Strandard", Young Ho Moon, Gyu Yeong Kim, and Jea Ho Kim, IEEE Tran. Consumer electronics, vol. 51. no. 3, August 2005.에 따르면, run_before 디코더에 근거한 전체 연산(full arithmetic) 디코딩이 개시되어 있으며, 이는 후에 상기한 Lee에 의해 효율적인 H/W 구현을 위해 개선되었다.
또한, 상기한 Lee에 따르면, run_before 심볼과 zeroLeft의 길이 사이의 통계 분석(statistical analysis)에 근거한 멀티 심볼 run_before 디코더가 제안되었다.
즉, 상기한 멀티 심볼 run_before 디코더는, 현재의 zeroLeft로 현재와 다음의 run_before 심볼의 길이를 예측하여, 디코드된 심볼의 길이가 예측된 결과와 같으면 1 사이클에 3개의 run_before 심볼을 디코드할 수 있다. 그러나 상기한 멀티 심볼 run_before 디코더는, 예측 성공률이 높지 않다는 문제가 있었다.
이에 대하여, 본 발명에 따른 run_before 디코더는, run_before 디코딩 동작의 일관성(regularity)을 증가시킴으로써 H/W 사이즈를 감소하였다.
즉, 도 5를 참조하면, 도 5는 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 run before 디코더의 전체적인 구성을 개략적으로 나타내는 도면이다.
도 5에 나타낸 바와 같이, 본 발명에 따른 run before 디코더는, 종래의 구성에 비하여 3개의 가산기(adder)와 3개의 2 입력(2-input) MUX를 부가적인 5개의 게이트로 대체한 구성을 가지고 있다.
여기서, run before 디코딩은, 이하의 [수학식 13] 내지 [수학식 16]에 나타낸 바와 같이, zeroLeft = (1, 2)인 경우와, zeroLeft = (3, 4, 5)인 경우, zeroLeft = 6인 경우 및 zeroLeft > 6인 네 가지 경우로 나누어진다.
최종 run_before는 zeroLeft에 의해 선택되며, [수학식 15]에서, 기호 "∧"는 배타적 OR(exclusive OR) 게이트 연산을 의미한다.
Figure 112011022919515-pat00035
Figure 112011022919515-pat00036
Figure 112011022919515-pat00037
Figure 112011022919515-pat00038
또한, 본 발명에 따른 멀티 심볼 run before 디코더는, 도 6에 나타낸 바와 같이, 도 5에 나타낸 바와 같은 본 발명의 run before 디코드를 이용하여 구성된다.
도 6을 참조하면, 도 6은 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 멀티 심볼 run before 디코더의 전체적인 구성을 개략적으로 나타내는 도면이다.
즉, 도 6에 나타낸 바와 같이, 본 발명에 따른 CAVLC 디코더는 리딩 제로의 수를 디코드하는 멀티 심볼 run before 디코더를 제공한다. 리딩 제로의 수 및 zeroLeft는 첫 번째(1st) run before 결과가 생성되기 전에 첫 번째(1st) run before 심볼의 길이를 디코드하기 위해 사용된다.
결과적으로, 디코드 되어야 할 run before 심볼이 남아 있을 경우 올바른(correct) 2개의 run before 심볼이 디코드 될 수 있으며, 멀티 심볼 run before 디코더 내의 각 run before 디코더는 이전의 zeroLeft가 zero보다 크고 run before 실행(execution)의 수가 Tc-1보다 작을 때 실행된다.
세 번째(3rd) run before 디코더는, 두 번째(2nd) run before 디코더에서 생성된 심볼 길이가 이하에 제시된 [표 6]에서 예측된 결과와 같으면 올바른 결과를 가진다.
또한, 상기한 설명에서 언급된 조건은 run_before 컨트롤러(controller)에서 체크된다. 즉, 컨트롤러는, 레벨 레지스터 파일에 저장된 레벨 계수를 run_before 디코더 및 레벨 인덱스 레지스터(level index register))로 생성된 레벨 인덱스(level index)와 함께 기입하도록 하기 위해(enable to write) 3비트폭(3bit-width) run_en 신호를 생성한다.
레벨 인덱스 레지스터는, 이어지는 레벨 계수의 레벨 인덱스를 만들기 위해 이전에 기입된 마지막 run_before 디코딩의 레벨 인덱스를 저장한다. 레벨 인덱스는 출력 레지스터(output register)에 레벨 계수를 저장하기 위한 주소로서 사용된다.
또한, 컨트롤러는, run_before_d 블록의 우측면에 위치한 4 MUXs에 대한 선택 신호(selection signal)를 생성한다. run_before_d 블록에서 생성된 결과가 예측된 결과와 일치하지 않거나, 또는, 디코드 될 심볼이 더 이상 없는 경우, run_before_d 블록의 run_before 및 symbol_len은 무시되고(ignored), 레벨 인덱스에 대하여 올바른 level_index 및 run_before 디코더 블록에서 생성된 각 symbol_len의 합(summation)에 의해 계산된 총 심볼 길이(total symbol length)를 얻기 위해 더미값(dummy value) '0'이 선택된다.
최종적으로, 멀티 심볼 run_before 디코더는 디코드 된 run_before 심볼의 총 길이(t_symbol_len)를 생성하고 디코드 된 run_before 심볼의 수를 이용하여 유효한 zeroLeft를 선택한다.
아울러, 본 발명에 따라 간략화된 두 번째 및 세 번째 run_before 디코더에 대한 디코딩 연산은 이하의 [수학식 17]과 같다.
Figure 112011022919515-pat00039
즉, 상기한 바와 같이, 첫 번째(1st) run_before 심볼 길이 프리디코딩 및 두 번째(2nd) run_before 심볼 길이 예측에서 볼 수 있듯이, 2번째 run_before decoder에 입력되는 심볼은, 첫 번째 run_before 심볼 길이 디코딩이 심볼 디코딩(symbol decoding) 과정과 동시에 이루어지므로, 2개의 run_before 심볼에 대하여는 100% 정확도를 가지고 디코딩이 가능하며, 남아 있는 run_before 심볼이 있을 경우, 잔여 동작(redundant operation)이 없이 최소 2개 이상의 디코딩을 수행할 수 있다.
다음으로, 상기한 바와 같이 하여 구성된 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 성능을 실제로 테스트한 결과에 대하여 설명한다.
이하의 테스트는 국제전기통신연합(International Telecommunication Union, 이하, "ITU"라 함, http://wftp3.itu.int/av-arch/jvt-site/draft_conformance/ 참조)에 의해 제공된 것을 이용하였으며, CAVLC 디코더의 입력 및 출력 데이터는 기능 검증(functional verification)을 위해 JM 16.0에 의해 생성되었고, 공지된 테스트 과정(public test sequence)에 의해 테스트 과정의 미세한 차이에 따른 오차를 제거하였다.
먼저, 본 발명에 따른 멀티 심볼 run_before 디코더의 성능 평가에 대하여 설명한다.
일반적으로, run_before 심볼 길이 프리디코딩(pre-decoding)은 12가지의 카테고리로 분류되며, 여기서는, 제 1 run_before 심볼 길이 프리디코딩의 실험에는 zeroLeft 및 리딩제로가 사용되었고, 제 2 run_before 심볼 길이 프리디코딩의 실험은, 제 2 run_before 심볼 디코딩이 수행되고 제 3 run_before 디코더에 디코드 될 run_before 심볼이 남아 있을 때, ITU에 의해 제공된 8개의 범용(general purpose) 테스트 시퀀스를 이용하여 수행되었으며, 지엽적인(local) 예측 결과를 회피하기 위해, 다양한 양자화 파라미터(quantization parameter)(Qp) 및 레벨을 가지는 8개의 테스트 시퀀스가 사용되었다.
표 6에 있어서, AND(bs[0],bs[1])는 현재의 비트스트림에서 제 1 및 제 2 비트의 AND 게이트 연산을 의미하며, 실험 결과는 도 7에 나타내었다.
Figure 112011022919515-pat00040
[1st run_before 심볼 길이 프리디코딩 및 2nd run_before 심볼 길이 예측]
도 7에 있어서, x 표시의 언더스코어(underscore) 좌우의 숫자는 표 6에서의 케이스 및 제 2 run_before 심볼 길이를 각각 나타내고, 발생율(occurrence rate)이 최대값은 8이며 이는 제 3 run_before 심볼 디코딩의 실행된 수가 각각의 테스트 시퀀스에서 1로 통일되었기 때문이다.
제 2 run_before 심볼 길이 예측은 케이스 12를 제외한 다른 경우에서 50% 이상의 성공률(success ratio)을 나타내고, 특히, 케이스 1, 3, 5에서는, 예측 성공률이 100%를 나타내었다.
또한, 본 발명자들은, 본 발명에 따른 멀티 심볼 run_before 디코더의 성능을 종래기술과 비교하였으며, 그 결과를 이하의 [표 7]에 나타내었다.
Figure 112011022919515-pat00041
[ run_before 디코더의 처리 사이클 비교 ]
[표 7]에 있어서, "Proposed"는 본 발명을 나타내며, ref[2]는 "Design of High Speed CAVLC Decoder for H.264/AVC", Myungseok Oh, Wonjae Lee, Jaeseok Kim, IEEE Workshop on Signal Processing Systems, pp.325-330, 2007.이고, ref[8]은 "High throughput low-cost VLSI architecture for AVC/H.264 CAVLC decoding", G. G. Lee, C.-C. Lo, Y.-C. Chen, H.-Y. Lin, M.-J. Wang, IET Image Processing, vol.4, no. 2, pp. 81-91, 2010.이다.
즉, 본 발명에 따르면, [표 7]에 나타낸 바와 같이, 종래기술에 비하여 처리 사이클이 약 7~11% 감소하는 것에 더하여, run_before 심볼 길이 예측의 높은 정확성을 가지는 것임을 확인할 수 있다.
다음으로, 본 발명자들은, 본 발명에 따른 CAVLC 디코더에 대한 평가를 수행하여, 그 결과를 [표 8]에 나타내었다.
Figure 112011022919515-pat00042
[CAVLC 디코더의 스루풋 비교(매크로블록 당 평균 사이클)]
즉, [표 8]에 나타낸 바와 같이, 본 발명에 따른 CAVLC 디코더는, coeff_token & Tls_sign 디코딩, 고스루풋 멀티 심볼 run_before 디코더, 새로운 플러시 유닛 및 멀티 심볼 디코딩에 근거한 룩업 테이블에 의해, 종래의 기술에 비하여 CAVLC 디코딩에 대해 요구되는 사이클이 훨씬 적으며, 또한, run_before 심볼 길이 프리디코딩 및 고정확도의 run_before 심볼 길이 예측을 통하여, 종래기술에 비하여 스루풋이 약 4~9% 증가하는 것을 알 수 있다.
여기서, 스루풋의 비교를 위해, CAVLC 스루풋 비교에서 일반적으로 사용되는 매크로 블록당 평균 사이클(average cycles per macroblock)을 계산하였으며, [표 8]에서 기호 "-"는 없는 데이터(missing data)를 나타내기 위해 사용되었다.
또한, [표 8]에 있어서, "Proposed"가 본 발명을 나타내며, ref[6]은 "A Novel Low-Cost High-Performance VLSI architecture for MPEG-4 AVC/H.264 CAVLC Decoding", Hsiu-Cheng Chang, Chien-Chang Lin, and Jiun-In Guo, IEEE International symposium on Circuits and Systems, vol. 6, pp. 6110-6113, 2005.이고, ref[14]는 "High performance VLSI architecture design for H.264 CAVLC decoder", Mythri Alle, J Biswas, S. K. Nandy, Proc. int. conf. on application-specific systems, architectures and processors, pp. 317-322, 2006.이다. ref[7]은 상기한 [표 7]과 같다.
다음으로, 본 발명자들은, 상기한 알고리즘을 매트랩(Matlab)으로 설계하고, 소프트웨어 시뮬레이션에 사용되는 입력 및 출력 데이터를 JM 레퍼런스 소프트웨어(reference software) ver.16.0을 이용하여 생성하였다.
소프트웨어 시뮬레이션 후, 본 발명에 따른 알고리즘은 Verilog HDL로 디자인되었고(designed), 그 후 메그나칩(Megnachip) 0.18 기술 라이브러리를 이용하여 통합되었다(synthesized).
즉, 본 발명에 따른 CAVLC 디코더의 새로운 룩업 테이블은 각 심볼의 심볼 길이 정보를 가지지 않으므로, 종래기술에 비하여 약 30%의 룩업 테이블 사이즈 감소를 달성할 수 있으며, 아울러, 확장된 연산 디코딩과 상기한 룩업 테이블을 가지는 하이브리드 total_zeros 디코더를 설계함으로써, 종래기술에 비하여 룩업 테이블 영역을 약 10% 감소시킬 수 있다.
또한, 본 발명에 따라 run_before 디코더를 최적화함으로써, 본 발명에 따른 CAVLC 디코더는 종래기술에 비하여 약 23% 감소된 H/W 사이즈로 구현될 수 있다.
이러한 결과는 이하의 [표 9]에 나타내었으며, [표 9]에 있어서, "Proposed"는 본 발명을 나타내고, ref[4]는 "An improved Decoding Method of Coeff_token Element for H.264 CAVLC Decoder", Ya-Xuan Yu, Gao-Ming Du, Duo-Li Zhang, Yu-Kun Song, Ming-Lun Gao, International conference on anti-counterfeiting, security, and Identification in communication, pp.524-538, 2009.이고, ref[15]는 "A zero-skipping Multisymbol CAVLC decoder for MPEG-4 AVC/H.264", Guo-Shiuan Yu, Tian-Sheuan Chang, Proc. int. symposium on ISCAS 2006, pp. 5583-5586, 2006 이며, ref[8] 및 ref[14]는 상기한 [표 7] 및 [표 8]과 같다.
Figure 112011022919515-pat00043
[ CAVLC 디코더의 구현 결과 비교 ]
따라서 상기한 바와 같이, 본 발명에 따르면, 높은 코딩 효율을 얻기 위해 H.264/AVC에서 CAVLC 디코딩이 중요한 역할을 가지나, CAVLC 심볼의 다양한 길이 특성으로 인해 디코딩 처리가 순차적으로 구현되어야만 했던 종래기술의 단점을 해결하여, 고품질 실시간 영상 시퀀스 디코딩에 적합한 동시에 저비용 고효율을 가지는 CAVLC 디코더를 제공할 수 있다.
또한, coeff_token, total_zeros 및 run_before 디코더에 대하여 간단한 심볼 길이 생성방법을 제공하는 동시에, total_zeros 디코더에 있어서, 고효율 하이브리드 디코딩 및 LUT 사이즈 소형화를 위해 산술 디코딩을 확장함으로써, 각각의 서브 디코더에서 Exp-Golomb 코드의 leading_zeros를 검출하기 위해 각각의 리딩 제로 디텍터를 구비하였던 종래기술의 단점을 해결하여, 공유된 리딩 제로 디텍터를 가짐으로써 H/W 사이즈를 감소하는 동시에 서브 디코더들에 부가적인 정보를 제공할 수 있는 CAVLC 디코더를 제공할 수 있다.
아울러, 본 발명에 따른 CAVLC 디코더는, 상술한 멀티 심볼 run_before 디코더 및 새로운 플러시 유닛을 포함하여, 비트스트림 버퍼 리뉴얼에 추가적인 사이클을 요구하지 않고, 그 결과, 스루풋이 높아지므로 고품질 영상 시퀀스를 효율적으로 처리할 수 있으며, 또한, 저비용으로 설계 가능하여 휴대용 기기에 적합한 특징을 가진다.
이상, 상기한 바와 같은 본 발명의 실시예를 통하여 본 발명에 따른 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기의 상세한 내용에 대하여 설명하였으나, 본 발명은 상기한 실시예에 기재된 내용으로만 한정되는 것은 아니며, 따라서 본 발명은, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 설계상의 필요 및 기타 다양한 요인에 따라 여러 가지 수정, 변경, 결합 및 대체 등이 가능한 것임은 당연한 일이라 하겠다.

Claims (15)

  1. H.264/AVC를 위한 문맥 적응적 가변 길이(Context-based Adaptive Variable Length Coding ; CAVLC) 복호화기(decoder)에 있어서,
    비트스트림의 값을 저장하는 비트스트림 레지스터(bitstream register)와,
    상기 비트스트림 레지스터의 리뉴얼(renewal)을 위해 추가적인 사이클을 요구하지 않고 상기 비트스트림 레지스터를 리뉴얼 하는 플러시 유닛(flush unit)과,
    리딩 제로(leading_zeros)를 검출하는 리딩 제로 검출기(leading_zero detector)와,
    상기 비트스트림으로부터 서픽스 비트스트림(suffix bit-stream)을 생성하는 정보 생성기와,
    coeff_token & Tls sign 디코더, total_zeros 디코더, 레벨(levels) 디코더, 멀티 심볼(multi-symbol) run_before 디코더를 포함하는 서브 디코더 블록 및
    상기 서브 디코더 블록을 제어하기 위한 컨트롤러(controller)를 포함하여 구성되고,
    상기 서브 디코더 블록의 각각의 디코더들은, 각각의 디코딩 과정에서 상기 리딩 제로(leading_zeros)의 값을 공유하도록 구성된 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  2. 제 1항에 있어서,
    상기 플러시 유닛은,
    현재의 심볼 길이(symbol_length) 및 마지막 심볼 디코딩까지 소비된 비트스트림 길이를 계산하기 위한 가산기(accumulator), 시프터(shifter) 및 레지스터를 포함하고,
    상기 소비된 비트스트림의 길이가 32를 초과하면, 비트스트림 레지스터의 리뉴얼(renewal)을 위한 비트스트림 요청신호를 생성하는 부가적인 가산기를 더 포함하도록 구성되어,
    상기 비트스트림 요청신호가 현재의 디코딩 처리에서 생성됨으로써, 상기 비트스트림 레지스터의 리뉴얼을 위해 추가적인 사이클을 요구하지 않고 리프레시된(refreshed) 비트스트림으로 디코딩 처리가 이루어지는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  3. 제 1항에 있어서,
    상기 정보 생성기는,
    현재의 비트스트림을 leading_zeros + 1 만큼 천이(shifting) 시킴으로써 상기 서픽스 비트스트림을 생성하는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  4. 제 1항에 있어서,
    상기 coeff_token & Tls_sign 디코더는,
    VLCTs 억세스를 위한 주소생성을 위해, suffix_len 디코딩을 행하는 단계 및 addr_gen 디코딩을 행하는 단계와,
    상기 리딩 제로(leading_zero), 상기 서픽스 길이(suffix length) 및 LUTs의 디코드된 성분(decoded elements)으로 심볼 길이를 디코드하는 단계와,
    트레일링 원(trailing ones)의 신호를 디코드하는 단계를 수행하도록 구성됨으로써, 총 계수(total coefficient), 트레일링 원(trailing ones) 및 트레일링 원의 신호를 디코드하는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  5. 제 4항에 있어서,
    상기 suffix_len 디코딩을 행하는 단계는, coeff_token 심볼의 서픽스 길이를 논리 연산으로 디코드하며,
    상기 논리 연산은 이하의 [수학식 1] 내지 [수학식 3]을 이용하여 이루어지는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 1]
    Figure 112011022919515-pat00044

    [수학식 2]
    Figure 112011022919515-pat00045

    [수학식 3]
    Figure 112011022919515-pat00046


    (여기서, 기호 & 및 │는 비트와이즈(bit-wise) AND 및 OR 연산을 각각 나타내며, 중괄호({ })는 베릴로그(Verilog) HDL 신택스(syntax)를 의미하고, 또한, 소문자 a, b, c, d는 4비트 폭(4-bits width) 리딩 제로 신호의 MSB부터 LSB를 의미하고, a', b', c', d'로 나타낸 상보(complement)는 NOT 함수로 반전된 신호이며, nC가 -1일 때, 즉, 고정길이코드(Fixed Length Code ; FLC) 디코딩일 때 서픽스 길이(suffix_length)는 2이다.)
  6. 제 4항에 있어서,
    상기 addr_gen 디코딩을 행하는 단계는,
    이전 단계에서 얻어진 리딩 제로의 수, 서픽스 비트스트림(info) 및 서픽스 길이를 이용하여 상기 LUT 억세스를 위한 주소를 디코드하고,
    VLCT0, VLCT1, VLCT2 및 크로마 DC에 대한 주소 디코딩은 이하의 [수학식 4] 내지 [수학식 7]에 나타낸 바와 같은 연산을 통하여 이루어지고,
    디코드된 주소는 상기 suffix_len 디코딩을 행하는 단계에서 디코드된 서픽스 길이에 따라 조정되는(adjusted) 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 4]
    Figure 112011022919515-pat00047

    [수학식 5]
    Figure 112011022919515-pat00048

    [수학식 6]
    Figure 112011022919515-pat00049

    [수학식 7]
    Figure 112011022919515-pat00050


    (여기서, 기호 '<<'는, 좌측 시프트 연산(left shift operation)을 의미함.)
  7. 제 6항에 있어서,
    상기 addr_gen 디코딩을 행하는 단계는,
    상기 suffix_len이 3이면, 서픽스 비트스트림(info[0])의 MSB 비트는 반전되고, 그 후 최종 주소를 만들기 위해 주소값과 더해지며,
    그렇지 않으면, 상기 [수학식 4] 내지 상기 [수학식 7]에서 얻어진 주소값이 최종 주소값이 되도록 구성된 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  8. 제 7항에 있어서,
    상기 복호화기는, 4개의 룩업 테이블(look-up table)에 4개의 VLCTs를 저장하고,
    상기 룩업 테이블은, Tc와 Tls로 구성되는 4개의 성분이 일렬로(in a row) 삽입되며, 주소로 디코드된 성분들 사이에서 coeff_token(Tc 및 Tls)이 서픽스 비트스트림(info)으로 최종 결정되는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  9. 제 8항에 있어서,
    상기 서픽스 비트스트림은, 일렬로 삽입된 4개의 성분 중에서 하나를 선택하도록 하는 서브어드레스(sub-address)를 위해 사용되고,
    상기 sub_addr는 상기 suffix_len의 값에 의존하는 서픽스 비트스트림 중에서 선택되도록 구성되어,
    상기 suffix_len가 3이면 상기 정보 생성기에서 생성된 상기 서픽스 비트스트림의 제 2 및 제 3 비트(info[1:2])가 sub_addr로서 선택되고,
    그렇지 않으면, 제 1 및 제 2 비트(info[0:1])가 sub_addr로서 선택되는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  10. 제 9항에 있어서,
    유효한(valid) 서픽스 비트스트림 길이가 2보다 짧으면, 유효하지 않은 서픽스 비트스트림에 상관없이 올바른 성분(correct element)을 디코드하기 위해 인접하는 성분이 복사되도록(copied) 구성되어,
    상기 suffix_len가 3이면, 8개의 성분이 상기 룩업 테이블의 2개의 연속하는 열(consecutive row)에 저장되는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.
  11. 제 4항에 있어서,
    상기 심볼 길이를 디코드하는 단계는,
    LUTs에 억세스 할 때 총 계수의 수와 트레일링 원의 수를 선택하기 위해 사용되는 4개의 성분이 addr로서 얻어지고,
    유효한 서픽스 길이를 찾기 위해, sub_addr 값이 '10' 및 '01'인 2개의 원소를 비교하거나,
    또는, sub_addr의 제 1 비트(sub_addr[0])가 '1'일 때 sub_addr가 '11' 및 '10'인 상위 2개의 원소(upper two elements)를 비교하거나, 아니면, 두 번째 비교에 대하여 하위의(lower) 2개의 원소가 이용되고,
    선택된 2개의 값이 동일하면 비교결과는 '1'이며, 선택된 2개의 값이 다르면 비교 결과는 '0'으로 하여, 이하의 [수학식 8]에 compare0 및compare1로서 이용함으로써 상기 심볼 길이를 디코드하는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 8]
    Figure 112011022919515-pat00051

  12. 제 11항에 있어서,
    불규칙한(irregular) 심볼(nC = -1. 비트스트림 = 000_0000...)이 존재하는 경우에도 정확한 결과를 얻기 위해, symbol_len 계산을 위해 사용되는 leading_zeros를 수정하는 예외(exception) 처리를 더 포함하고,
    FLCT(8 ≤ nC)의 심볼이 6비트 고정 길이를 가질 때, 고정 길이 코드(FLC) 디코딩은 이하의 [수학식 9]와 같이 정의되는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 9]
    Figure 112011022919515-pat00052


    (여기서, bs는 시프트기로부터 생성된 현재 유효한 비트스트림을 의미하고, 대괄호 안의 숫자는 Tc와 Tls 계산을 위해 사용되는 비트스트림 내의 비트의 위치이다.)
  13. 제 1항에 있어서,
    상기 total_zeros 디코더는,
    상기 coeff_token 디코더에서 LTUs를 위해 사용된 것과 동일한 방식으로 설계된 LTUs를 가지고,
    심볼 길이 디코딩 방법으로 디코드 될 수 없는 제로 시퀀스 심볼(zero sequence symbol)에 대하여, 이하의 [수학식 10]을 이용하여 주소 디코딩 전에 제로 시퀀스의 최대 길이를 계산하며,

    [수학식 10]
    Figure 112011022919515-pat00053


    (여기서, i는 Tc/8이고, i가 1일 때 k는 Tc-6이며, 아니면 k는 Tc이다. m은 k/4이고, j는 j=(k-2)/4이다. 기호 '/'는 0(zero) 쪽으로 결과의 절사(truncation)를 가지는 정수 분할(integer division)이다.)

    얻어진 leading_zeros가 제로 시퀀스의 최대 길이보다 크면, leading_zeros는 max_zero_len으로 대체하고,
    Tc가 1, 14 또는 15일 때 total_zeros 심볼을 디코드하기 위해, Tc가 2일때 적용 가능한 이하의 [수학식 11]에 나타낸 바와 같은 간단한 산술연산을 이용하며,

    [수학식 11]
    Figure 112011022919515-pat00054


    2×2 크로마 잔여 데이터(chroma residual data)에 대한 룩업 테이블은 이하의 [수학식 12]와 같은 산술 디코딩 연산으로 대체하는 디코딩 처리를 수행하도록 구성된 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 12]
    Figure 112011022919515-pat00055

  14. 제 1항에 있어서,
    상기 멀티 심볼 run before 디코더는,
    3개의 run_before 디코더와,
    각각의 상기 run_before 디코더의 동작을 제어하는 run_before 컨트롤러(controller)를 포함하여 구성되며,
    상기 run before 디코더는,
    3개의 가산기(adder)와 3개의 2 입력(2-input) MUX를 대체하는 5개의 게이트를 포함하여 구성되고,
    run before 디코딩은, zeroLeft = (1, 2)인 경우, zeroLeft = (3, 4, 5)인 경우, zeroLeft = 6인 경우 및 zeroLeft > 6인 네 가지 경우에 대하여, 이하의 [수학식 13] 내지 [수학식 16]을 이용하여 수행되는 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 13]
    Figure 112011022919515-pat00056

    [수학식 14]
    Figure 112011022919515-pat00057

    [수학식 15]
    Figure 112011022919515-pat00058

    [수학식 16]
    Figure 112011022919515-pat00059


    (여기서, 최종 run_before는 zeroLeft에 의해 선택되며, [수학식 15]에서, 기호 "∧"는 배타적 OR(exclusive OR) 게이트 연산을 의미한다.)
  15. 제 14항에 있어서,
    각각의 상기 run before 디코더는, 상기 run_before 컨트롤러에 의해 이전의 zeroLeft가 zero보다 크고 run before 실행(execution)의 수가 Tc-1보다 작을 때 실행되며,
    두 번째 및 세 번째 run_before 디코더에 대한 디코딩 연산은 이하의 [수학식 17]을 이용하여 수행됨으로써,
    2번째(2nd) run_before decoder에 입력되는 심볼은, 첫 번째(1st) run_before 심볼 길이 디코딩이 심볼 디코딩(symbol decoding) 과정과 동시에 이루어지므로, 2개의 run_before 심볼에 대하여는 100% 정확도를 가지고 디코딩이 가능하며, 남아 있는 run_before 심볼이 있을 경우, 잔여 동작(redundant operation)이 없이 최소 2개 이상의 디코딩을 수행할 수 있도록 구성된 것을 특징으로 하는 H.264/AVC를 위한 문맥 적응적 가변 길이 복호화기.

    [수학식 17]
    Figure 112011022919515-pat00060

KR1020110028297A 2011-03-29 2011-03-29 H.264/avc를 위한 문맥 적응적 가변 길이 복호화기 KR101151352B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110028297A KR101151352B1 (ko) 2011-03-29 2011-03-29 H.264/avc를 위한 문맥 적응적 가변 길이 복호화기

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110028297A KR101151352B1 (ko) 2011-03-29 2011-03-29 H.264/avc를 위한 문맥 적응적 가변 길이 복호화기

Publications (1)

Publication Number Publication Date
KR101151352B1 true KR101151352B1 (ko) 2012-06-08

Family

ID=46688542

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110028297A KR101151352B1 (ko) 2011-03-29 2011-03-29 H.264/avc를 위한 문맥 적응적 가변 길이 복호화기

Country Status (1)

Country Link
KR (1) KR101151352B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486624A (zh) * 2014-12-18 2015-04-01 中国科学院自动化研究所 Cavlc熵解码器及熵解码方法
US9088297B2 (en) 2013-06-20 2015-07-21 International Business Machines Corporation High throughput decoding of variable length data symbols
KR20160105516A (ko) * 2014-01-03 2016-09-06 지이 비디오 컴프레션, 엘엘씨 웨지렛 기반 코딩 개념

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100801155B1 (ko) 2006-08-24 2008-02-05 한양대학교 산학협력단 H.264에서의 저복잡도를 가지는 공간적 에러 은닉방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100801155B1 (ko) 2006-08-24 2008-02-05 한양대학교 산학협력단 H.264에서의 저복잡도를 가지는 공간적 에러 은닉방법

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9088297B2 (en) 2013-06-20 2015-07-21 International Business Machines Corporation High throughput decoding of variable length data symbols
US9100042B2 (en) 2013-06-20 2015-08-04 International Business Machines Corporation High throughput decoding of variable length data symbols
KR20160105516A (ko) * 2014-01-03 2016-09-06 지이 비디오 컴프레션, 엘엘씨 웨지렛 기반 코딩 개념
US10244235B2 (en) 2014-01-03 2019-03-26 Ge Video Compression, Llc Wedgelet-based coding concept
KR101994870B1 (ko) * 2014-01-03 2019-07-01 지이 비디오 컴프레션, 엘엘씨 웨지렛 기반 코딩 개념
KR20190079690A (ko) * 2014-01-03 2019-07-05 지이 비디오 컴프레션, 엘엘씨 웨지렛 기반 코딩 개념
KR102105535B1 (ko) 2014-01-03 2020-04-29 지이 비디오 컴프레션, 엘엘씨 웨지렛 기반 코딩 개념
US11128865B2 (en) 2014-01-03 2021-09-21 Ge Video Compression, Llc Wedgelet-based coding concept
US12081760B2 (en) 2014-01-03 2024-09-03 Ge Video Compression, Llc Wedgelet-based coding concept
CN104486624A (zh) * 2014-12-18 2015-04-01 中国科学院自动化研究所 Cavlc熵解码器及熵解码方法
CN104486624B (zh) * 2014-12-18 2018-05-15 北京思朗科技有限责任公司 一种cavlc熵解码器

Similar Documents

Publication Publication Date Title
US8306125B2 (en) 2-bin parallel decoder for advanced video processing
Kim et al. A lossless embedded compression using significant bit truncation for HD video coding
Moon et al. An efficient decoding of CAVLC in H. 264/AVC video coding standard
US7079057B2 (en) Context-based adaptive binary arithmetic coding method and apparatus
Chang et al. A novel low-cost high-performance VLSI architecture for MPEG-4 AVC/H. 264 CAVLC decoding
US9001882B2 (en) System for entropy decoding of H.264 video for real time HDTV applications
TW201240471A (en) Method and apparatus for frame memory
GB2530312A (en) Data compression
US20120086587A1 (en) System and method for optimizing context-adaptive binary arithmetic coding
US20080075173A1 (en) Systems and Methods for Context Adaptive Video Data Preparation
KR102123620B1 (ko) 대용량 병렬 처리를 위해 비디오 신호를 엔트로피 인코딩 또는 엔트로피 디코딩하는 방법 및 장치
Fei et al. A 1 gbin/s cabac encoder for h. 264/avc
Tsai et al. Design and analysis of high-throughput lossless image compression engine using VLSI-oriented FELICS algorithm
KR101151352B1 (ko) H.264/avc를 위한 문맥 적응적 가변 길이 복호화기
Liao et al. A highly efficient VLSI architecture for H. 264/AVC level 5.1 CABAC decoder
Zhang et al. Variable-bin-rate CABAC engine for H. 264/AVC high definition real-time decoding
Lee et al. New lookup tables and searching algorithms for fast H. 264/AVC CAVLC decoding
Lee et al. A design of high-performance pipelined architecture for H. 264/AVC CAVLC decoder and low-power implementation
Lee et al. High-throughput low-cost VLSI architecture for AVC/H. 264 CAVLC decoding
Wang et al. A novel low-cost high-throughput CAVLC decoder for H. 264/AVC
Huang et al. Very-large-scale integration design of a low-power and cost-effective context-based adaptive variable length coding decoder for H. 264/AVC portable applications
Tsai et al. A novel design of CAVLC decoder with low power and high throughput considerations
Zhao et al. A 610 Mbin/s CABAC decoder for H. 265/HEVC level 6.1 applications
US20110007082A1 (en) Macroblock grouping in a destination video frame to improve video reconstruction performance
Tsai et al. Highly efficient cavlc encoder for mpeg-4 avc/h. 264

Legal Events

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

Payment date: 20150216

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160404

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee