KR20090089414A - 메모리 효율적인 적응성 블록 코딩 - Google Patents

메모리 효율적인 적응성 블록 코딩 Download PDF

Info

Publication number
KR20090089414A
KR20090089414A KR1020097012290A KR20097012290A KR20090089414A KR 20090089414 A KR20090089414 A KR 20090089414A KR 1020097012290 A KR1020097012290 A KR 1020097012290A KR 20097012290 A KR20097012290 A KR 20097012290A KR 20090089414 A KR20090089414 A KR 20090089414A
Authority
KR
South Korea
Prior art keywords
codewords
subgroup
codeword
value
groups
Prior art date
Application number
KR1020097012290A
Other languages
English (en)
Other versions
KR101095335B1 (ko
Inventor
유리 레즈니크
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20090089414A publication Critical patent/KR20090089414A/ko
Application granted granted Critical
Publication of KR101095335B1 publication Critical patent/KR101095335B1/ko

Links

Images

Classifications

    • 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

Landscapes

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

Abstract

일반적으로, 본 발명은, 디지털 비디오, 이미지, 오디오, 또는 스피치 데이터의 코딩과 같은 다양한 애플리케이션들에 대한 데이터의 메모리 효율적이고 낮은 복잡도의 적응성 가변 길이 코딩 (VLC) 을 위한 기술들에 관한 것이다. 몇몇 양태에서, 그 기술들은 코드워드들의 특정 세트들의 특성들을 이용하여, 매우 콤팩트한 데이터 구조를 지원할 수도 있다. 다른 양태에서, 그 기술들은, 무메모리 소스들에 의해 생성된 바이너리 시퀀스들의 낮은-복잡도 적응성 인코딩 및 디코딩을 지원할 수도 있다.
코드워드, 코딩 트리, 코드 구조, 가변 길이 코딩

Description

메모리 효율적인 적응성 블록 코딩{MEMORY EFFICIENT ADAPTIVE BLOCK CODING}
본 특허 출원은, 2006년 11월 14일자로 출원된 미국 가출원 제 60/865,827 호, 및 2006년 11월 22일자로 출원된 미국 가출원 제 60/867,081 호를 우선권 주장하며, 이들 각각의 전체 내용은 여기에 참조로서 포함된다.
기술분야
본 발명은 데이터 압축에 관한 것으로, 더 상세하게는, 가변 길이 코드 (VLC) 를 사용하는 데이터 압축에 관한 것이다.
배경기술
데이터 압축은, 데이터 저장 공간, 송신 대역폭 또는 그 양자의 소비를 감소시키기 위하여 다양한 애플리케이션에서 광범위하게 사용된다. 데이터 압축의 예시적인 애플리케이션은, 디지털 비디오, 이미지, 스피치, 및 오디오 코딩을 포함한다. 디지털 비디오 코딩은, 예를 들어, 디지털 텔레비전, 디지털 다이렉트 (direct) 브로드캐스트 시스템, 무선 통신 디바이스, 개인 휴대 정보 단말기 (PDA), 랩탑 또는 데스크탑 컴퓨터, 디지털 카메라, 디지털 레코딩 디바이스, 비디오 게이밍 디바이스, 셀룰러 또는 위성 무선 전화기 등을 포함하는 광범위한 범위의 디바이스들에서 사용된다. 디지털 비디오 디바이스들은, 디지털 비디오를 더 효율적으로 송신 및 수신하기 위해, MPEG-2, MPEG-4, 또는 H.264/MPEG-4 진보된 비디오 코딩 (AVC) 과 같은 비디오 압축 기술들을 구현한다.
일반적으로, 비디오 압축 기술들은, 비디오 데이터에서 고유한 리던던시 (redundancy) 를 감소시키거나 제거하기 위해, 공간 예측, 모션 추정 및 모션 보상을 수행한다. 특히, 인트라-코딩은, 소정의 비디오 프레임내의 비디오에서 공간 리던던시를 감소시키거나 제거하기 위해 공간 예측에 의존한다. 인터-코딩은, 인접한 프레임들내의 비디오에서 시간 리던던시를 감소시키거나 제거하기 위해 시간 예측에 의존한다. 인터-코딩에 있어서, 비디오 인코더는, 2개 이상의 인접한 프레임들 사이의 매칭 비디오 블록들의 이동을 추적하기 위해 모션 추정을 수행한다. 모션 추정은, 하나 이상의 레퍼런스 프레임들내의 대응하는 비디오 블록들에 대한 비디오 블록들의 변위를 나타내는 모션 벡터들을 생성한다. 모션 보상은 그 모션 벡터를 사용하여, 레퍼런스 프레임으로부터 예측 비디오 블록을 생성한다. 모션 보상 이후, 잔여 비디오 블록은, 본래의 비디오 블록으로부터 그 예측 비디오 블록을 감산함으로써 형성된다.
비디오 인코더는, 변환, 양자화 및 엔트로피 코딩 프로세스를 적용하여, 비디오 코딩 프로세스에 의해 생성된 잔여 블록의 비트 레이트를 추가적으로 감소시킨다. 엔트로피 인코딩 기술들은, 인코딩된 데이터의 저장 또는 송신 이전에, 비디오 인코더-디코더 (코덱) 의 최종 스테이지, 및 다양한 다른 코딩 애플리케이션들에서 사용된다. 일반적으로, 엔트로피 인코딩은 산술 코드들 또는 가변 길이 코드 (VLC) 들의 애플리케이션에 관련되어, 변환 및 양자화 동작에 의해 생성되 는 잔여 계수들을 추가적으로 압축한다. 엔트로피 코딩 기술들의 예들은, 콘텍스트-적응성 바이너리 산술 코딩 (CABAC) 및 콘텍스트-적응성 가변 길이 코딩 (CAVLC) 을 포함하며, 이들은 몇몇 인코더에서 대안적인 엔트로피 코딩 모드들로서 사용될 수도 있다. 비디오 디코더는 블록들 각각에 대한 잔여 정보를 압축해제하기 위해 엔트로피 디코딩을 수행하며, 모션 정보 및 그 잔여 정보를 사용하여 그 인코딩된 비디오를 복원한다.
요약
일반적으로, 본 발명은, 디지털 비디오, 이미지, 오디오, 또는 스피치 데이터의 코딩과 같은 다양한 애플리케이션에 대한 데이터의 메모리 효율적이고 낮은 복잡도의 적응성 가변 길이 코딩 (VLC) 을 위한 기술들에 관한 것이다. 제 1 일반적인 양태에서, 그 기술들은 코드워드들의 특정 세트들의 특성들을 이용하여, 매우 콤팩트한 데이터 구조를 지원할 수도 있다. 제 2 일반적인 양태에서, 그 기술들은 무메모리 (memoryless) 소스에 의해 생성되는 바이너리 시퀀스들의 낮은-복잡도 적응성 인코딩 및 디코딩을 지원할 수도 있다.
제 1 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들을 생성하는 단계, 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 생성하는 단계, 및 그 부분값들 및 그 스킵 표시자를 메모리내의 데이터 구조에 저장하는 단계를 포함하는 방법을 제공한다.
또 다른 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리 의 레벨들에 대한 베이스 코드워드들의 부분값들을 저장하는 데이터 구조, 및 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 포함하는 유형의 (tangible) 컴퓨터-판독가능 매체를 제공한다.
부가적인 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들을 생성하고, 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 생성하도록 구성된 프로세서, 및 그 부분값들 및 그 스킵 표시자를 데이터 구조에 저장하는 메모리를 포함하는 디바이스를 제공한다.
또 다른 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들, 및 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 포함하는 데이터 구조를 저장하는 메모리, 및 그 저장된 데이터 구조내의 부분값들 및 스킵 표시자에 기초하여, 비트스트림으로부터의 코드워드들 중 하나를 디코딩하기 위해 그 메모리에 액세스하는 디코더를 포함하는 디코딩 디바이스를 제공한다.
또 다른 양태에서, 본 발명은, 메모리내에 저장된 데이터 구조에 액세스하는 단계로서, 그 데이터 구조는, 가변 길이 코드워드를 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들, 및 그 코딩 트리의 선택된 레벨로 진행하 기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 포함하는, 상기 액세스 하는 단계, 및 그 저장된 데이터 구조내의 부분값들 및 스킵 표시자에 기초하여 비트스트림으로부터의 코드워드들 중 하나를 디코딩하는 단계를 포함하는 디코딩 방법을 제공한다.
또 다른 양태에서, 본 발명은, 프로세서로 하여금, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들, 및 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 포함하는, 메모리내에 저장된 데이터 구조에 액세스하게 하고, 그 저장된 데이터 구조내의 부분값들 및 스킵 표시자에 기초하여 비트스트림으로부터의 코드워드들 중 하나를 디코딩하게 하는 명령어들을 포함하는 유형의 컴퓨터-판독가능 매체를 제공한다.
부가적인 양태에서, 본 발명은, 코드 구조에 따라 가변 길이 코딩을 수행하는 단계, 및 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 가변 길이 코딩의 결과를 생성하는 단계를 포함하는 방법을 제공하며, 여기서, 그 코드 구조는 코딩 트리내의 코드워드들의 그룹들 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하고, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현되는 값들에 관해 사전 편찬적으로 (lexicographically) 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드를 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드 워드를 포함한다.
부가적인 양태에서, 본 발명은, 프로세서로 하여금, 코드 구조에 따라 가변 길이 코딩을 수행하게 하고, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 가변 길이 코딩의 결과를 생성하게 하는 명령어들을 포함하는 유형의 컴퓨터-판독가능 매체를 제공하며, 여기서, 그 코드 구조는 코딩 트리내의 코드워드들의 그룹들 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하고, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드를 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드를 포함한다.
부가적인 양태에서, 본 발명은, 코드 구조에 따라 가변 길이 코딩을 수행하고, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 가변 길이 코딩의 결과를 생성하도록 구성되는 프로세서를 포함하는 디바이스를 제공하며, 여기서, 그 코드 구조는 코딩 트리내의 코드워드들의 그룹들 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하고, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드를 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드를 포함한다.
부가적인 양태에서, 본 발명은, 코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹을 정의하는 단계, 및 그 서브그룹들 각각에 대한 베이스 코드워드들, 그 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 그 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하는 단계, 및 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하는 단계를 포함하는 방법을 제공하며, 여기서, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
부가적인 양태에서, 본 발명은, 코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하는 수단, 및 그 서브그룹들 각각에 대한 베이스 코드워드들, 그 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 그 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하는 수단, 및 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하는 수단을 포함하는 디바이스를 제공하며, 여기서, 그 그룹들 각각은 동일한 가중치들 을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
부가적인 양태에서, 본 발명은, 프로세서로 하여금, 코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하게 하고, 그 서브그룹들 각각에 대한 베이스 코드워드들, 그 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 그 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하게 하며, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하게 하는 명령어들을 포함하는 유형의 컴퓨터-판독가능 매체를 제공하며, 여기서, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
부가적인 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하는 코드 구조에 대하여, 그 서브그룹들 각각에 대한 베이스 코드 워드들, 그 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 그 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하며, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하도록 구성되는 프로세서를 포함하는 디바이스를 제공하며, 여기서, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
또 다른 양태에서, 본 발명은, 코딩 트리내의 코드워드들의 그룹들 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하는 가변 길이 코드 구조를 사용하는 가변 길이 코딩을 위한 데이터 구조를 포함하는 유형의 컴퓨터-판독가능 매체를 제공하며, 여기서, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현되는 값들에 관해 사전 편찬적으로 순서화되며, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
또 다른 양태에서, 본 발명은, 코드 구조에 따라 가변 길이 코딩을 수행하도록 구성되는 프로세서를 포함하는 집적 회로 디바이스를 제공하며, 여기서, 그 코드 구조는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들 의 제 1 및 제 2 서브그룹을 정의하고, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되고, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하며, 그 프로세서는, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하도록 구성된다.
또 다른 양태에서, 본 발명은, 코드 구조에 따라 가변 길이 코딩을 수행하도록 구성되는 프로세서를 포함하는 무선 통신 디바이스 핸드셋을 제공하며, 여기서, 그 코드 구조는 코딩 트리내의 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹을 정의하고, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 그 그룹들 각각내의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되고, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하며, 그 프로세서는, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 그 가변 길이 코딩의 결과를 생성하도록 구성된다.
또 다른 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들, 및 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에 게 명령하는 스킵 표시자를 포함하는 데이터 구조를 저장한 메모리, 및 그 저장된 데이터 구조내의 부분값들 및 스킵 표시자에 기초하여 그 비트스트림으로부터의 코드워드들 중 하나를 디코딩하기 위해 그 메모리에 액세스하는 디코더를 포함하는 집적 회로 디바이스를 제공한다.
또 다른 양태에서, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들, 및 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 포함하는 데이터 구조를 저장한 메모리, 그 저장된 데이터 구조내의 부분값들 및 스킵 표시자에 기초하여 그 비트스트림으로부터의 코드워드들 중 하나를 디코딩하기 위해 그 메모리에 액세스하는 디코더, 무선 통신에 의해 인코더로부터 그 코드워드들을 수신하는 수신기, 및 그 디코딩된 코드워드들에 적어도 부분적으로 기초하여 사용자에게 출력을 제공하는 출력 디바이스를 포함하는 무선 통신 디바이스 핸드셋을 제공한다.
본 발명에서 설명된 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 그 소프트웨어는, 마이크로프로세서, 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA), 또는 디지털 신호 프로세서 (DSP) 와 같은 하나 이상의 프로세서들, 또는 다른 동등한 집적 또는 별개의 로직 회로에서 실행될 수도 있다. 그 기술들을 실행하는 소프트웨어는, 먼저, 컴퓨터-판독가능 매체에 저장되고 로딩되어 프로세서에 의해 실행될 수도 있다. 따라서, 본 발명은, 프로세서로 하여금 본 발명 에 설명된 바와 같은 다양한 기술들 중 임의의 기술을 수행하게 하는 명령어들을 포함한 컴퓨터-판독가능 매체를 포함하는 컴퓨터 프로그램 제품을 또한 고려한다.
본 발명의 하나 이상의 양태들의 세부사항들은 첨부한 도면 및 아래의 설명에 개시된다. 본 발명에서 설명된 기술들의 다른 특성들, 목적들, 및 이점들은 설명 및 도면, 및 청구항으로부터 명백해질 것이다.
도면의 간단한 설명
도 1은 비디오 인코딩 및 디코딩 시스템을 도시한 블록도이다.
도 2는 비디오 인코더의 일 예를 도시한 블록도이다.
도 3은 비디오 디코더의 일 예를 도시한 블록도이다.
도 4는 바이너리 코딩 트리의 일 예를 도시한 다이어그램이다.
도 5는 점근적 작동 (asymptotic behavior) 을 갖는 적응성 블록 코드의 리던던시 레이트를 도시한 그래프이다.
도 6은 블록 그룹들, 서브그룹들 및 베이스 코드워드들을 도시한 바이너리 트리의 다이어그램이다.
도 7a 및 도 7b는, 상이한 값들의 p와 적응성 블록 코드의 리던던시 레이트와의 비교를 도시한 그래프이다.
도 8은 소스 데이터의 비대칭에 대한 리던던시의 민감도를 도시한 그래프이다.
도 9는 본 발명의 일 양태에 따른 단조적인 (monotonic) 분포에 대한 메모리 효율적인 가변 길이 코딩을 구성하기 위한 방법을 도시한 흐름도이다.
도 10은 도 9의 방법에 따라 구성된 가변 길이 코드들을 사용하여 심볼들을 인코딩하기 위한 방법을 도시한 흐름도이다.
도 11은 도 9의 방법에 따라 구성된 가변 길이 코드들을 디코딩하기 위한 방법을 도시한 흐름도이다.
도 12는 본 발명의 또 다른 양태에 따라 적응성 블록 코드들을 구성하기 위한 방법을 도시한 흐름도이다.
도 13은 도 12의 방법에 따라 구성된 가변 길이 코드들을 사용하여 블록들을 인코딩하기 위한 방법을 도시한 흐름도이다.
도 14는 도 12의 방법에 따라 구성된 가변 길이 코드들을 디코딩하기 위한 방법을 도시한 블록도이다.
상세한 설명
일반적으로, 본 발명은, 디지털 비디오, 이미지, 오디오, 또는 스피치 데이터의 코딩과 같은, 다양한 애플리케이션에 대한 데이터의 메모리 효율적이고 낮은 복잡도의 적응성 가변 길이 코딩 (VLC) 을 위한 기술들에 관한 것이다. 몇몇 양태에서, 그 기술들은 매우 콤팩트한 데이터 구조들을 지원하기 위해 코드워드들의 특정 세트의 특성을 이용할 수도 있다. 다른 양태에서, 그 기술들은 무메모리 소스들에 의해 생성된 바이너리 시퀀스들의 낮은-복잡도 적응성 인코딩 및 디코딩을 지원할 수도 있다. 본 발명에 설명된 기술들이 일반적인 데이터 압축 및 코딩을 포함하는 광범위하게 다양한 실제 애플리케이션들에 적용가능할 수도 있지만, 본 발명은 예 및 예시의 목적을 위해 디지털 비디오 코딩 및 디코딩을 지칭할 것이다.
본 발명의 제 1 일반적인 양태에 따르면, 콤팩트한 데이터 구조를 지원하기 위해, 개시된 기술들은 임의의 특정 코드 구조 방식에 의존할 필요가 없다. 예를 들어, 호프만 (Huffman), 샤논 (Shannon), 샤논-파노 (Shannon-Fano), 길버트-무어 (Gilbert-Moore) 또는 다른 코드 구성 방식들이 사용될 수도 있다. 그러나, 이러한 제 1 일반적인 양태에 있어서, 심볼들의 입력 알파벳으로부터의 심볼들의 단조적으로 증가하는 확률들을 갖는 소스에 대해 그러한 코드가 구성된다고 가정한다. 더 상세하게, 코드워드들이 단조적으로 감소하는 길이 또는 적어도 증가하지 않는 길이를 가지며, 동일한 길이의 코드워드들이 표현하는 입력 알파벳에서의 심볼들과 동일한 사전 편찬적 순서를 그 동일한 길이의 코드워드들이 갖는다고 가정한다.
원하는 사전 편찬적 순서는 입력 알파벳의 재순서화에 의해 달성될 수도 있다. 그러한 코드워드에 있어서, 베이스 코드워드 값들은 코딩 트리의 각각의 레벨에 대해 계산될 수도 있다. 베이스 코드워드 값들은 그 코딩 트리의 각각의 레벨에서 사전 편찬적으로 최소의 정준 (canonical) 코드워드들을 나타낸다. 베이스 코드워드 값들 및 그들 각각의 심볼들의 인덱스들은 재순서화된 어레이에 저장될 수도 있다. 그 인덱스들은 트리에서의 각각의 상주 레벨에 대한 오프셋 값들로서 저장될 수도 있다. 디코딩 프로세스는, 디코딩된 심볼의 인덱스의 간단한 직접 계산에 선행하는, 좌측-정렬된 (left-justified) 베이스 코드워드 값들과 비트스트림 버퍼와의 비교를 포함한다.
상기 특성들은, 가변 길이 코드들의 증분적인 디코딩을 용이하게 하는 매우 콤팩트한 데이터 구조를 생성하도록 추가적으로 압축될 수 있는 데이터 구조를 갖는 그러한 코드를 고유하게 설명하는데 사용될 수 있다. 예를 들어, 통상적으로, 좌측-정렬된 베이스 코드워드 값들은 우측으로부터 좌측으로 큰 양의 선행 제로 (leading zero) 들을 가질 것이다. 프로세스가 적용가능한 코딩 트리에서의 더 깊은 층들로 이동함에 따라, 선행 제로들의 수가 단조적으로 감소한다. 따라서, 맨 처음 층으로 시작하여 아래 방향으로 이동하면서 비트들이 순차적으로 디코딩될 경우, 선행 제로 비트들 중 일부는 디코딩 프로세스의 정확도에 영향을 주지 않으면서 스킵될 수 있다.
선행 제로들은 고정된 증분, 예를 들어, 8비트 증분으로 제거될 수도 있으며, 이는 종래의 8비트/바이트 컴퓨터 상에서의 비트스트림 버퍼 관리에 편리하다. 하나 이상의 스킵 표시자들의 부가적인 표가 이러한 프로세스를 관리하기 위해 제공될 수 있다. 일 예로서, 스킵 표시자는, 선행 제로들이 드롭될 경우 상이한 베이스 코드워드 값들이 구별될 수 있기 위해, 고정된 증분만큼 비트스트림 버퍼에서 앞으로 스크롤하도록 디코더에게 지시한다. 선행 제로들의 제거에 의해, 변형된 베이스 코드워드 값들의 결과적인 어레이의 폭이 실질적으로 감소될 수 있으며, 그에 의해, 메모리 이용도를 보존한다.
따라서, 제 1 일반적인 양태에서, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들을 생성하는 단계, 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비 트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 생성하는 단계, 및 그 부분값들 및 그 스킵 표시자를 메모리내의 데이터 구조에 저장하는 단계를 포함하는 방법을 고려한다. 그 데이터 구조는, 표, 링크된 리스트, 바이너리 트리, 라딕스 트리 (radix tree), 플랫 파일 등과 같은 광범위하게 다양한 데이터 구조들 중 임의의 데이터 구조일 수도 있으며, 많은 형태의 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 또는 그들 양자와 같은 다양한 서로 다른 메모리 디바이스들 중 임의의 메모리 디바이스에 저장될 수도 있다. 데이터 구조는 인코더 또는 디코더내의 그러한 메모리에 저장될 수도 있다. 예를 들어, 디코더는, 그 디코더와 연결된 메모리로부터의 데이터 구조, 또는 그 데이터 구조의 콘텐츠의 일부에 액세스하여, 메모리 효율적인 방식으로 코드워드들의 가변 길이 디코딩을 수행할 수도 있다.
이러한 제 1 일반적인 양태에 따르면, 본 발명은, 가변 길이 코드워드들을 특정하는 코딩 트리의 레벨들에 대한 베이스 코드워드들의 부분값들을 생성하며, 그 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 스킵하도록 디코더에게 명령하는 스킵 표시자를 생성하도록 구성된 프로세서뿐만 아니라, 그 부분값들 및 그 스킵 표시자를 데이터 구조에 저장하는 메모리를 또한 고려한다. 그러한 정보는 단일 데이터 구조 또는 다중의 데이터 구조에 저장될 수도 있다. 따라서, 데이터 구조에 대한 참조는, 본 발명에서 고려된 정보를 저장하는 하나 이상의 데이터 구조들을 포함할 수도 있다. 가변 길이 코딩을 수행하기 위해 데이터 구조에 액세스하도록 구성된 프로세서는, 소스 디 바이스 또는 수신 디바이스, 또는 가변 길이 코딩을 수행할 시에 인코더 및/또는 디코더에 의한 사용을 위하여 코드 구조들을 정의하는 데이터 구조들을 생성하는 별개의 디바이스내에 구현될 수도 있다.
본 발명의 제 1 일반적인 양태에 부합되는 콤팩트한 데이터 구조를 달성하기 위한 이러한 기술에 따르면, 각각의 유효한 코드워드 길이는 코드 트리에서의 외부 노드에 관한 레벨에 대응할 수도 있다. 상술된 바와 같이, 데이터 구조는 베이스 코드워드들의 부분값들 및 하나 이상의 스킵 표시자들을 포함할 수도 있다. 더 상세하게, 몇몇 실시형태에서, 데이터 구조는 각각의 유효한 코드워드 길이에 대해 다음의 정보, 즉, (a) 코드 트리의 현재 레벨에서의 사전 편찬적으로 최소의 (또는 최대인) 코드워드의 부분값, (b) 그 부분값에서의 비트들의 수, (c) 그 사전 편찬적으로 최소의 (또는 최대의) 코드워드에 대응하는 심볼의 값, 및 (d) 그 코드 트리의 다음 레벨로 진행하기 전에 특정 수의 비트를 스킵하도록 디코더에게 명령하는 표시자를 포함할 수도 있다. 따라서, 데이터 구조는, 베이스 코드워드들에 의해 표현된 심볼들에 대한 값들 및 베이스 코드워드들의 부분값들의 길이들, 즉, 베이스 코드워드의 각각의 부분값에서의 비트의 수를 더 포함할 수도 있다. 인코딩 및 디코딩 기술들은, 생성될 또는 디코딩될 코드워드에 대응하는 레벨을 식별하기 위해 이러한 데이터 구조를 사용할 수도 있으며, 그 후, 코드워드 또는 디코딩된 심볼의 값을 직접 계산할 수도 있다. 따라서, 데이터 구조는 비디오 인코더 또는 디코더, 이미지 인코더 또는 디코더, 오디오 인코더 또는 디코더, 또는 스피치 인코더 또는 디코더의 메모리에 저장될 수도 있으며, 이들 중 일부는 결 합된 코덱으로서 구성될 수도 있다.
가변 길이 코드들의 인코딩 또는 디코딩을 위한 종래 기술들의 예는, A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45(10)(1997) 1200-1207, J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047, 및 A. Brodnik and S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJ 에 설명되어 있다. 이들 종래의 기술들과 비교하면, 콤팩트한 데이터 구조를 달성하기 위한 개시된 기술들은 특정한 이점들을 제공할 수도 있다.
제 1 예로서, 개시된 기술에 의해 생성된 데이터 구조는, 사전 편찬적으로 최소의 코드워드들의 부분값들만이 저장되고, 예를 들어, 비디오 디코더에 의해 사용된다는 사실로 인해 훨씬 더 적은 양의 메모리를 사용할 수도 있다. 또 다른 예로서, 개시된 기술은, 비트스트림 버퍼가, 합리적으로 짧은 레지스터에 의해 제공되게 하고 임의의 편리한 간격으로, 예를 들어, 스킵 표시를 통해 업데이트되게 하며, 추가적으로 구현의 복잡도를 낮추는 비트스트림 데이터에 대한 증분적인 액세스를 사용할 수도 있다.
예를 들어, 몇몇 구현에서, 32비트 레지스터가 매우 긴 코드에 대해서도 충분할 수도 있다. 또한, 8비트 간격으로 업데이트가 행해질 수도 있다. 전반적으로, 개시된 기술은 가변 길이 코드들의 인코딩/디코딩 및 표현의 복잡도를 현저하게 감소시킬 수도 있으며, 이는 압축 알고리즘의 설계자가 훨씬 더 크고 이에 따라 더 효율적인 코드북을 이용할 수 있게 할 수 있다.
본 발명의 제 2 일반적인 양태에 따르면, 무메모리 소스에 의해 생성된 바이너리 시퀀스들의 낮은-복잡도 적응성 인코딩 및 디코딩을 지원하기 위해, 개시된 기술들은, 시퀀스의 이전 비트에서의 0-아닌 비트들의 수에 의해 식별된 콘텍스트의 세트에 대해 구성되는 유니버셜 블록 코드들을 구현할 수도 있다. 이러한 제 2 일반적인 양태는 매우 콤팩트한 데이터 구조의 생성에 관해 상술된 제 1 일반적인 양태와는 독립적으로 또는 그 양태와 함께 제공되거나 실시될 수도 있다. 이러한 제 2 일반적인 양태에 따르면, 낮은-복잡도 적응성 인코딩 및 디코딩을 위한 기술들은, 그러한 코드들의 점근적인 리던던시에 대한 개시된 식에 의존할 수도 있으며, 이는, R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27(1981) 199-207 에서 설명된 추정치를 개량한다.
이러한 제 2 일반적인 양태에 따른 기술들은, 수 개의 추정된 밀도들에 대해 설계되고, 시퀀스의 이전 블록들 (콘텍스트들) 에서의 0-아닌 비트들의 수에 의해 인덱싱된 호프만 코드들의 어레이를 사용할 수도 있다. 비트들 n=8 ...16 의 좀 더 적당히 사이즈된 블록을 사용 (및 대응하는 1.5 ...5k 바이트의 메모리를 사용) 함으로써, 그러한 기술들은, JBIG 이미지 코딩 표준에서 사용되는, W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J. Res. Dev., 32(6) (1988) 717 에 설명되어 있는 Q-코더 알고리즘, 또는 비디오 압축을 위한 ITU-T H.264/MPEG AVC 표준에서 사용되는, D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620 636, July 2003 에 설명되어 있는 CABAC 알고리즘과 같은 다른 종래의 알고리즘들에 필적하거나 우월한 압축 성능을 달성할 수도 있다.
본 발명의 이러한 제 2 일반적인 양태에 따른 낮은 복잡도의 적응성 인코딩 및 디코딩은, 무메모리 모델에서, 비트들의 블록의 확률 또는 그의 추정이 그의 비트들의 실제 패턴이 아니라 그의 가중치 (0-아닌 비트들의 수) 에 의존한다는 인식에 기초할 수도 있다. 따라서, 몇몇 고정된 길이의 모든 가능한 블록들의 세트는, 동일한 가중치 (및 이에 따라 동일한 확률) 의 블록들을 포함하는 상이한 그룹들로 분할될 수 있다. 자연적으로 또는 재순서화함으로써, 각각의 그룹이 사전 편찬적 순서로 저장된다고 가정할 수도 있다.
확률이 같은 블록 (equiprobable block) 들의 각각의 그룹이 최대 2개의 서브-그룹들을 포함할 수도 있다는 것은 (호프만 또는 샤논 코드와 같은) 최소-리던던시 코드의 알려진 특성이며, 여기서, 각각의 그러한 서브-그룹에서의 블록들은 동일한 길이의 코드워드들에 의해 인코딩된다. 일반성에 대한 제약없이, 제 1 서브-그룹에서의 코드워드들의 길이가 제 2 서브-그룹에서의 코드워드들의 길이보다 짧다는 것을 또한 가정할 수 있다. 그룹내의 블록들 (또는 워드들) 이 사전 편찬적 순서를 따르기 때문에, 그것은 더 큰 코드워드 길이를 갖는 서브그룹과 더 짧은 코드워드 길이를 갖는 서브그룹 사이에서 간단히 분할될 수 있다. 인덱스 값은 그룹내의 블록의 위치를 나타낸다. 각각의 서브그룹에서의 사전 편찬적으로 최소의 블록 (또는 워드) 는 베이스 코드워드를 할당받는다. 베이스 코드워드가 주어지면, 각각의 서브그룹에서의 나머지 코드워드들이 용이하게 계산될 수 있다.
따라서, 본 발명의 이러한 제 2 일반적인 양태에 따르면, 예를 들어, 입력 블록들 또는 워드들 및 코딩 트리에서의 그들 각각의 출력 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의하는 코드 구조를 사용하여 인코더 또는 디코더에 의해 가변 길이 코딩이 수행될 수도 있으며, 여기서, 그 그룹들 각각은 동일한 가중치들을 갖는 블록들 (또는 워드들) 을 표현하는 코드워드들을 포함하고, 그 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 그 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다. 그 그룹들 각각내의 블록들은 사전 편찬적으로 순서화된 후 서브그룹들로 분할되어, 사전 편찬적 순서가 그 서브그룹들 각각내에서 유지되게 한다. 또한, 서브그룹내의 각각의 블록에 대응하는 코드워드들이 할당되어, 그들이 또한 동일한 사전 편찬적 순서를 따르게 하고, 직접 계산에 의해 인코딩 및 디코딩을 용이하게 한다.
블록들 및 그들의 그룹들 및 서브그룹들의 이러한 배열에 기초하여, 코드워드들은 간략화된 프로세스를 사용하여 직접 계산될 수 있다. 예를 들어, 블록에 대한 인덱스 값 및 가중치를 획득할 시에, 그 인덱스 값이 제 1 서브-그룹에서 의 블록들의 최대 수보다 작으면, 코드워드를 위치시키기 위해 제 1 서브그룹이 선택된다. 그렇지 않으면, 코드워드들을 위치시키기 위해 제 2 서브그룹이 선택된다. 그 후, 그 선택된 서브그룹에 대한 베이스 코드워드를 검색할 시에, 그 선택된 서브그룹내의 블록의 인덱스 값에 기초하여 결정된 값과 그 베이스 코드워드 값을 합산함으로써 코드워드가 용이하게 계산된다. 본 발명의 이러한 제 2 일반적인 양태의 목적을 위해, 코딩 방식에 따라 코딩되는 입력 양들을 일반적으로 지칭하도록, 블록들 또는 워드들이라는 용어가 상호교환적으로 사용될 수도 있다. 블록 또는 워드는, 바이너리 알파벳 {0, 1} 과 같은 입력 알파벳으로부터 형성될 수도 있는 심볼들의 시퀀스를 포함할 수도 있다. 일반적으로, 코드워드들은, 코딩 방식의 결과로서 블록들 (또는 워드들) 에 할당되는 출력 양들을 지칭한다.
본 발명에서 설명되는 기술들의 이들 및 다른 양태들이 더 상세히 후술될 것이다. 그 기술들은 함께 또는 독립적으로 사용될 수도 있으며, 디지털 비디오, 이미지, 오디오 또는 스피치 데이터의 인코딩 또는 디코딩을 위해 구성되는 시스템 및 디바이스를 포함하는 다양한 인코딩 및 디코딩 시스템 및 디바이스 중 임의의 인코딩 및 디코딩 시스템 및 디바이스로 구현될 수도 있다. 예 및 예시의 목적을 위해, 본 발명은, 데이터 압축 및 코딩의 일반적인 실시 애플리케이션에 관한 제한없이, 디지털 비디오 코딩 및 디코딩에 대한 그러한 기술들의 애플리케이션, 또는 상이한 타입의 데이터에 대한 다른 특정한 애플리케이션을 설명할 것이다.
도 1은 비디오 인코딩 및 디코딩 시스템 (10) 을 도시하는 블록도이다. 도 1에 도시된 바와 같이, 시스템 (10) 은, 통신 채널 (16) 을 통해 수신 디바이스 (14) 로 인코딩된 비디오를 송신하는 소스 디바이스 (12) 를 포함한다. 소스 디바이스 (12) 는, 비디오 소스 (18), 비디오 인코더 (20) 및 송신기 (22) 를 포함할 수도 있다. 수신 디바이스 (14) 는, 수신기 (24), 비디오 디코더 (26) 및 비디오 디스플레이 디바이스 (28) 를 포함할 수도 있다. 시스템 (10) 은, 디지털 비디오 데이터의 메모리 효율적이고 낮은 복잡도의 적응성 가변 길이 코딩 (VLC) 을 위한 기술들을 적용하도록 구성될 수도 있다. 특히, 메모리 효율적이고 낮은 복잡도의 적응성 VLC 기술들은, 예측 비디오 코딩 프로세스에 의해 생성된 잔여 블록 계수들의 엔트로피 코딩을 위해 사용될 수도 있다. 그 기술들은, 제로들의 런 (run) 을 사용하여 0-아닌 변환 계수들의 위치를 코딩하는 비디오 코딩 방식, 또는 다른 비디오 코딩 방식에 적용될 수도 있다.
도 1의 예에서, 통신 채널 (16) 은, 무선 주파수 (RF) 스펙트럼 또는 하나 이상의 물리적인 송신선과 같은 임의의 무선 또는 유선 통신 매체, 또는 무선 및 유선 매체의 임의의 조합을 포함할 수도 있다. 채널 (16) 은, 로컬 영역 네트워크, 와이드-영역 네트워크, 또는 인터넷과 같은 글로벌 네트워크와 같은 패킷-기반 네트워크의 일부를 형성할 수도 있다. 일반적으로, 통신 채널 (16) 은, 소스 디바이스 (12) 로부터 수신 디바이스 (14) 로 비디오 데이터를 송신하기 위한 임의의 적절한 통신 매체, 또는 상이한 통신 매체의 집합을 나타낸다.
소스 디바이스 (12) 는 목적지 디바이스 (14) 로의 송신을 위한 비디오를 생성한다. 그러나, 몇몇 경우, 디바이스들 (12, 14) 은 실질적으로 대칭적인 방 식으로 동작할 수도 있다. 예를 들어, 디바이스들 (12, 14) 각각은 비디오 인코딩 및 디코딩 컴포넌트들을 포함할 수도 있다. 따라서, 시스템 (10) 은, 예를 들어, 비디오 스트리밍, 비디오 브로드캐스팅, 또는 비디오 전화를 위해 비디오 디바이스들 (12, 14) 사이에서 단-방향 또는 양-방향 비디오 송신을 지원할 수도 있다. 다른 데이터 압축 및 코딩 애플리케이션에 있어서, 디바이스들 (12, 14) 은, 이미지, 스피치 또는 오디오 데이터와 같은 다른 타입의 데이터, 또는 비디오, 이미지, 스피치 및 오디오 데이터 중 2개 이상의 조합들을 전송 및 수신, 또는 교환하도록 구성될 수 있다. 따라서, 비디오 애플리케이션의 설명은 예시의 목적을 위해 제공되며, 여기에 광범위하게 설명된 바와 같은 본 발명의 다양한 양태들의 제한을 고려하지는 않아야 한다.
비디오 소스 (18) 는, 하나 이상의 비디오 카메라들과 같은 비디오 캡쳐 디바이스, 이전에 캡쳐된 비디오를 포함하는 비디오 아카이브 (archive), 또는 비디오 콘텐츠 제공자로부터 공급된 라이브 비디오를 포함할 수도 있다. 또 다른 대안으로서, 비디오 소스 (18) 는, 소스 비디오로서 컴퓨터 그래픽-기반 데이터, 또는 라이브 비디오와 컴퓨터-생성된 비디오의 조합을 생성할 수도 있다. 몇몇 경우, 비디오 소스 (18) 가 카메라이면, 소스 디바이스 (12) 및 수신 디바이스 (14) 는 소위 카메라 전화기 또는 비디오 전화기를 형성할 수도 있다. 따라서, 몇몇 양태에서, 소스 디바이스 (12), 수신 디바이스 (14) 또는 그들 양자는 이동 전화기와 같은 무선 통신 디바이스 핸드셋을 형성할 수도 있다. 각각의 경우에서, 캡쳐된, 사전-캡쳐된 또는 컴퓨터-생성된 비디오는, 송신기 (22), 채널 (16) 및 수신기 (24) 를 통한 비디오 소스 디바이스 (12) 로부터 비디오 수신 디바이스 (14) 의 비디오 디코더 (26) 로의 송신을 위하여 비디오 인코더 (20) 에 의해 인코딩될 수도 있다. 디스플레이 디바이스 (28) 는, 액정 디스플레이 (LCD), 플라즈마 디스플레이 또는 유기 광방출 다이오드 (OLED) 디스플레이와 같은 다양한 디스플레이 디바이스들 중 임의의 디스플레이 디바이스를 포함할 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (26) 는, 공간, 시간 및/또는 신호-대-잡음비 (SNR) 스케일러빌리티 (scalability) 를 위한 스케일러블 (scalable) 비디오 코딩을 지원하도록 구성될 수도 있다. 몇몇 양태에서, 비디오 인코더 (20) 및 비디오 디코더 (22) 는, SVC에 대한 정밀한 입도 SNR 스케일러빌러티 (FGS) 코딩을 지원하도록 구성될 수도 있다. 인코더 (20) 및 디코더 (26) 는, 기본 레이어 (base layer) 및 하나 이상의 스케일러블 확장 레이어 (enhancement layer) 들의 인코딩, 송신 및 디코딩을 지원함으로써, 다양한 정도의 스케일러빌리티를 지원할 수도 있다. 스케일러블 비디오 코딩에 있어서, 기본 레이어는 최소 레벨의 품질을 갖는 비디오 데이터를 운반한다. 하나 이상의 확장 레이어들은 부가적인 비트스트림을 운반하여, 더 높은 공간, 시간, 및/또는 SNR 레벨들을 지원한다.
비디오 인코더 (20) 및 비디오 디코더 (26) 는, MPEG-2, MPEG-4, ITU-T H.263, 또는 ITU-T H.264/MPEG-4 AVC (Advanced Video Coding) 와 같은 비디오 압축 표준에 따라 동작할 수도 있다. 도 1에 도시되지는 않았지만, 몇몇 양태에서, 비디오 인코더 (20) 및 비디오 디코더 (26) 는 각각 오디오 인코더 및 디코더 와 통합될 수도 있으며, 공통 데이터 스트림 또는 별개의 데이터 스트림에서 오디 및 비디오 양자의 인코딩을 처리하기 위해 적절한 MUX-DEMUX 유닛, 또는 다른 하드웨어 및 소프트웨어를 포함할 수도 있다. 적용가능하다면, MUX-DEMUX 유닛은, ITU H.223 멀티플렉서 프로토콜, 또는 사용자 데이터그램 프로토콜 (UDP) 과 같은 다른 프로토콜에 따를 수도 있다.
H.264/MPEG-4 (AVC) 표준은, JVT (Joint Video Team) 으로서 알려진 공동 파트너쉽의 산물로서, ISO/IEC MPEG (Moving Picture Experts Group) 와 함께 ITU-T VCEG (Video Coding Experts Group) 에 의해 공식화되었다. H.264 표준은, 여기에서 H.264 표준 또는 H.264 규격, 또는 H.264/AVC 표준 또는 규격으로서 지칭될 수도 있는, 2005년 3월자의 ITU-T Study Group에 의한, ITU-T Recommendation H.264, Advanced video coding for generic audiovisual services에 설명되어 있다.
JVT (Joint Video Team) 은 H.264/MPEG-4 AVC 로의 스케일러블 비디오 코딩 (SVC) 확장에 대해 계속 작업해왔다. 발전한 SVC 확장의 규격은 JD (Joint Draft) 의 형태로 존재한다. JVT에 의해 생성된 JSVM (Joint Scalable Video Model) 은 스케일러블 비디오에서의 사용을 위한 툴을 구현하며, 본 발명에서 설명된 다양한 코딩 태스크들을 위해 시스템 (10) 내에서 사용될 수도 있다. 정밀한 입도 SNR 스케일러빌러티 (FGS) 코딩에 관한 상세한 정보는, Joint Draft 문서, 예를 들어, Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, and Mathias Wien, "Joint Draft 6: Scalable Video Coding", JVT-S 201, April 2006, Geneva 의 Joint Draft 6 (SVC JD6), 및 Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz, and Mathias Wien, "Joint Draft 9 of SVC Amendment", JVT-V 201, January 2007, Marrakech, Morocco 의 Joint Draft 9 (SVC JD9) 에서 발견될 수 있다.
몇몇 양태에서, 비디오 브로드캐스팅에 있어서, 기술 표준 TIA-1099 ("FLO 규격") 로서 공개된 지상 이동 멀티미디어 멀티캐스트를 위한 순방향 링크 전용 (FLO) 공중 인터페이스 규격, "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast" 를 사용하여, 예를 들어, 무선 비디오 브로드캐스트 서버 또는 무선 통신 디바이스 핸드셋을 통해 지상 이동 멀티미디어 멀티캐스트 (TM3) 시스템에서 실-시간 비디오 서비스를 전달하기 위해 인헨스드 (Enhanced) H.264 비디오 코딩에 여기에 설명된 기술들이 적용될 수도 있다. FLO 규격은, FLO 공중 인터페이스에 적합한 비트스트림 신택스 및 세만틱 (semantic) 및 디코딩 프로세스들을 정의하는 예들을 포함한다. 다른 방법으로, 비디오는, DVB-H (디지털 비디오 브로드캐스트-핸드헬드), ISDB-T (통합된 서비스 디지털 브로드캐스트 - 지상), 또는 DMB (디지털 미디어 브로드캐스트) 와 같은 다른 표준들에 따라 브로드캐스팅될 수도 있다. 따라서, 소스 디바이스 (12) 는 이동 무선 단말기, 비디오 스트리밍 서버, 또는 비디오 브로드캐스트 서버일 수도 있다. 그러나, 본 발명에서 설명된 기술들은 임의의 특정한 타입의 브로드캐스트, 멀티캐스트, 또는 포인트-투-포인트 시스템에 제한되지는 않는다. 브로드캐스트의 경우, 소스 디바이스 (12) 는 비디오 데이터의 수 개의 채널들을 다수의 수신 디바이스들로 브로드캐스팅할 수도 있으며, 그 다수의 수신 디바이스들 각각은 도 1의 수신 디바이스 (14) 와 유사할 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (26) 각각은, 하나 이상의 마이크로프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA), 별개의 로직, 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의의 조합으로서 구현될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (26) 각각은 하나 이상의 인코더들 또는 디코더들에 포함될 수도 있으며, 이들 중 어느 하나는 각각의 이동 디바이스, 가입자 디바이스, 브로드캐스트 디바이스, 서버 등에서 결합된 인코더/디코더 (코덱) 의 일부로서 통합될 수도 있다. 또한, 적용가능한 바와 같이, 소스 디바이스 (12) 및 수신 디바이스 (14) 각각은, 무선 통신을 지원하는데 충분한 무선 주파수 (RF) 무선 컴포넌트들 및 안테나들을 포함하는, 인코딩된 비디오의 송신 및 수신을 위한 적절한 변조, 복조, 주파수 변환, 필터링, 및 증폭기 컴포넌트들을 포함할 수도 있다. 그러나, 예시의 용이함을 위해, 그러한 컴포넌트들은 도 1에 도시되지 않았다.
비디오 시퀀스는 일련의 비디오 프레임들을 포함한다. 비디오 인코더 (20) 는, 비디오 데이터를 인코딩하기 위해 개별 비디오 프레임들내의 픽셀 블록들에 대해 동작한다. 비디오 블록들은 고정된 또는 가변 사이즈를 가질 수도 있으며, 특정된 코딩 표준에 따라 사이즈에서 상이할 수도 있다. 각각의 비디오 프레임은 일련의 슬라이스들을 포함한다. 각각의 슬라이스는, 서브-블록들로 배열될 수도 있는 일련의 매크로블록들을 포함할 수도 있다. 일 예로서, ITU-T H.264 표준은, 루마 컴포넌트를 위한 16×16, 8×8, 4×4, 크로마 컴포넌트를 위한 8×8 과 같은 다양한 블록 사이즈들에서의 인트라 예측뿐만 아니라, 루마 컴포넌트를 위한 16×16, 16×8, 8×16, 8×8, 8×4, 4×8 및 4×4 및 크로마 컴포넌트를 위한 대응하는 스케일링된 사이즈들과 같은 다양한 블록 사이즈들에서의 인터 예측을 지원한다.
더 작은 비디오 블록들은 더 양호한 해상도를 지원할 수 있으며, 더 높은 레벨의 세부사항을 포함하는 비디오 프레임의 위치결정을 위해 사용될 수도 있다. 일반적으로, 매크로블록 (MB) 및 다양한 서브-블록은 비디오 블록들로 고려될 수도 있다. 또한, 슬라이스는, MB 및/또는 서브-블록과 같은 일련의 비디오 블록들로 고려될 수도 있다. 각각의 슬라이스는 독립적으로 디코딩가능한 유닛일 수도 있다. 예측 이후에, 8×8 잔여 블록 또는 4×4 잔여 블록에 대해 변환이 수행될 수도 있으며, 인트라_16×16 예측 모드가 사용되면, 크로마 컴포넌트 또는 루마 컴포넌트를 위한 4×4 블록의 DC 계수들에 부가적인 변환이 적용될 수도 있다.
도 1의 시스템 (10) 의 비디오 인코더 (20) 및 비디오 디코더 (26) 는, 본 발명에서 설명된 바와 같은 메모리 효율적이고 낮은 복잡도의 적응성 가변 길이 코딩 (VLC) 을 위한 기술들을 이용하도록 구성될 수도 있다. 특히, 비디오 인코더 (20) 및/또는 비디오 디코더 (26) 는, 각각, 메모리 이용도, 프로세싱 오버헤드, 프로세싱 복잡도, 대역폭 소비, 데이터 저장 공간, 및/또는 전력 소비를 감소시키기 위한 그러한 기술들 중 적어도 일부를 적용하는 엔트로피 인코더 및 엔트로 피 디코더를 포함할 수도 있다.
도 2는 도 1에 도시된 바와 같은 비디오 인코더 (20) 의 일 예를 도시한 블록도이다. 비디오 인코더 (20) 는, 집적 회로 디바이스로서 총괄적으로 지칭될 수도 있는 하나 이상의 집적 회로 디바이스들로서 적어도 부분적으로 형성될 수도 있다. 몇몇 양태에서, 비디오 인코더 (20) 는 무선 통신 디바이스 핸드셋 또는 브로드캐스트 서버의 일부를 형성할 수도 있다. 비디오 인코더 (20) 는 비디오 프레임들내의 블록들의 인트라-코딩 및 인터-코딩을 수행할 수도 있다. 인트라-코딩은 소정의 비디오 프레임내의 비디오에서 공간 리던던시를 감소 또는 제거하기 위해 공간 예측에 의존한다. 인터-코딩은 비디오 시퀀스의 인접한 프레임들내의 비디오에서 시간 리던던시를 감소 또는 제거하기 위해 시간 예측에 의존한다. 인터-코딩에 있어서, 비디오 인코더 (20) 는 모션 추정을 수행하여, 인접한 프레임들 사이의 매칭 비디오 블록들의 이동을 추적한다.
도 2에 도시된 바와 같이, 비디오 인코더 (20) 는 인코딩될 비디오 프레임내의 현재의 비디오 블록 (30) 을 수신한다. 도 2의 예에서, 비디오 인코더 (20) 는, 모션 추정 유닛 (32), 레퍼런스 프레임 저장부 (34), 모션 보상 유닛 (36), 블록 변환 유닛 (38), 양자화 유닛 (40), 역양자화 유닛 (42), 역변환 유닛 (44), 및 엔트로피 코딩 유닛 (46) 을 포함한다. 엔트로피 코딩 유닛 (46) 은, 코딩에 유용한 데이터를 획득하기 위해 메모리 (45) 에 저장된 하나 이상의 데이터 구조들에 액세스할 수도 있다. 인-루프 디블록킹 필터 (in-loop deblocking filter; 미도시) 는 블록킹 아티팩트들을 제거하기 위해 블록들을 필터링하도록 적용될 수 도 있다. 또한, 비디오 인코더 (20) 는 합산기 (48) 및 합산기 (50) 를 포함한다. 도 2는 비디오 블록들의 인터-코딩을 위한 비디오 인코더 (20) 의 시간 예측 컴포넌트들을 도시한다. 설명의 용이함을 위해 도 2에 도시되지는 않았지만, 비디오 인코더 (20) 는 몇몇 비디오 블록들의 인트라-코딩을 위한 공간 예측 컴포넌트들을 또한 포함할 수도 있다.
모션 추정 유닛 (32) 은, 하나 이상의 모션 벡터들을 생성하기 위해 하나 이상의 인접한 비디오 프레임들에서의 블록들과 비디오 블록 (30) 을 비교한다. 인접한 프레임 또는 프레임들은, 이전에 인코딩된 블록들로부터 복원된 비디오 블록들을 저장하기 위한 임의의 타입의 메모리 또는 데이터 저장 디바이스를 포함할 수도 있는 레퍼런스 프레임 저장부 (34) 로부터 검색될 수도 있다. 모션 추정은 가변 사이즈, 예를 들어, 16×16, 16×8, 8×16, 8×8 또는 더 작은 블록 사이즈들의 블록들에 대해 수행될 수도 있다. 모션 추정 유닛 (32) 은, 예를 들어, 레이트 왜곡 모델에 기초하여 현재의 비디오 블록 (30) 에 가장 근접하게 매칭하는 인접한 프레임들에서의 하나 이상의 블록들을 식별하고, 그 인접한 프레임들에서의 블록들과 그 현재의 비디오 블록 사이의 변위를 결정한다. 이를 기초로 하여, 모션 추정 유닛 (32) 은, 현재의 비디오 블록 (30) 을 코딩하는데 사용되는 레퍼런스 프레임들로부터의 하나 이상의 매칭 블록들과 현재의 비디오 블록 (30) 사이의 변위의 크기 및 궤적을 나타내는 하나 이상의 모션 벡터 (MV) 들을 생성한다.
모션 벡터들은, 비디오 인코더 (20) 로 하여금 정수 픽셀 위치보다 더 높은 정확도로 모션을 추적하게 하고 더 양호한 예측 블록을 획득하게 하는, 하프-픽셀 (half-pixel) 또는 1/4-픽셀 (quarter-pixel) 정확도, 또는 훨씬 더 정밀한 정확도를 가질 수도 있다. 분수 픽셀값들을 갖는 모션 벡터들이 사용될 경우, 모션 보상 유닛 (36) 에서 보간 동작이 수행된다. 모션 추정 유닛 (32) 은, 레이트-왜곡 모델과 같은 특정한 기준을 사용하여 비디오 블록에 대한 모션 벡터 또는 모션 벡터들 및 최상의 블록 파티션들을 식별한다. 예를 들어, 양방향 예측의 경우에서는 더 많은 모션 벡터가 존재할 수도 있다. 결과적인 블록 파티션들 및 모션 벡터들을 사용하여, 모션 보상 유닛 (36) 은 예측 비디오 블록을 형성한다.
비디오 인코더 (20) 는, 합산기 (48) 에서, 모션 보상 유닛 (36) 에 의해 생성된 예측 비디오 블록을 본래의 현재 비디오 블록 (30) 으로부터 감산함으로써 잔여 비디오 블록을 형성한다. 블록 변환 유닛 (38) 은 H.264/AVC 에서 사용되는 4×4 또는 8×8 정수 변환과 같은 변환을 그 잔여 블록에 적용하며, 잔여 변환 블록 계수들을 생성한다. 양자화 유닛 (40) 은 그 잔여 변환 블록 계수들을 양자화하여, 비트 레이트를 추가적으로 감소시킨다. 엔트로피 코딩 유닛 (46) 은 그 양자화된 계수들을 엔트로피 코딩하여, 비트 레이트를 더욱 더 감소시킨다.
엔트로피 코딩 유닛 (46) 은, 양자화된 블록 계수들에 가변 길이 코딩 (VLC) 을 적용하기 위해 VLC 유닛으로서 동작한다. 특히, 엔트로피 코딩 유닛 (46) 은, 본 발명에서 설명된 바와 같은 메모리 효율적이고 낮은 복잡도의 적응성 VLC 기술들을 사용하여 디지털 비디오 블록 계수들의 VLC 코딩을 수행하도록 구성될 수도 있다. 따라서, 본 발명에서 설명된 다양한 인코딩 프로세스들은, 비디오 데이터의 코딩을 수행하기 위해 엔트로피 코딩 유닛 (46) 내에서 구현될 수도 있다. 다른 방법으로, 그러한 엔트로피 코딩 유닛 (46) 은, 비디오, 이미지, 스피치 및 오디오 데이터를 포함하지만 이에 제한되지는 않는 다양한 데이터 중 임의의 데이터를 코딩하기 위하여, 본 발명에서 설명된 프로세스들을 수행할 수도 있다. 일반적으로, 예를 들어, 도 3을 참조하여 설명될 바와 같이, 비디오 디코더 (26) 는 인코딩된 비디오를 디코딩 및 복원하기 위해 VLC 디코딩을 포함하는 역동작을 수행한다.
역양자화 유닛 (42) 및 역변환 유닛 (44) 은, 각각, 역양자화 및 역변환을 적용하여, 잔여 블록을 복원한다. 합산기 (50) 는, 모션 보상 유닛 (36) 에 의해 생성된 모션 보상된 예측 블록에 그 복원된 잔여 블록을 부가하여, 레퍼런스 프레임 저장부 (34) 에서의 저장을 위한 복원된 비디오 블록을 생성한다. 그 복원된 비디오 블록은 모션 추정 유닛 (32) 및 모션 보상 유닛 (36) 에 의해 사용되어, 후속 비디오 프레임에서의 블록을 인코딩한다.
도 3은 비디오 디코더 (26) 의 일 예를 도시한 블록도이다. 비디오 디코더 (26) 는, 집적 회로 디바이스로서 총괄적으로 지칭될 수도 있는 하나 이상의 집적 회로 디바이스들로서 적어도 부분적으로 형성될 수도 있다. 몇몇 양태에서, 비디오 디코더 (26) 는 무선 통신 디바이스 핸드셋의 일부를 형성할 수도 있다. 비디오 디코더 (26) 는 비디오 프레임들내의 블록들의 인트라-디코딩 및 인터-디코딩을 수행할 수도 있다. 도 3에 도시된 바와 같이, 비디오 디코더 (26) 는, 비디오 인코더 (20) 에 의해 인코딩되었던 인코딩된 비디오 비트스트림을 수신한다. 도 3의 예에서, 비디오 디코더 (26) 는, 엔트로피 디코딩 유닛 (52), 모션 보상 유닛 (54), 역양자화 유닛 (56), 역변환 유닛 (58), 및 레퍼런스 프레임 저장부 (62) 를 포함한다. 또한, 비디오 디코더 (26) 는, 합산기 (64) 의 출력을 필터링하는 인-루프 디블록킹 필터 (미도시) 를 포함할 수도 있다. 또한, 비디오 디코더 (26) 는 합산기 (64) 를 포함한다. 도 3은 비디오 블록들의 인터-디코딩을 위한 비디오 디코더 (26) 의 시간 예측 컴포넌트들을 도시한다. 도 3에 도시되지는 않았지만, 비디오 디코더 (26) 는 일부 비디오 블록들의 인트라-디코딩을 위한 공간 예측 컴포넌트들을 또한 포함할 수도 있다.
엔트로피 디코딩 유닛 (52) 은 인코딩된 비디오 비트스트림을 수신하고, 그 비트스트림으로부터, 모션 벡터들 및 블록 파티션들을 포함할 수도 있는 양자화된 잔여 계수들, 매크로블록 코딩 모드 및 모션 정보를 디코딩한다. 따라서, 엔트로피 디코딩 유닛 (52) 은 VLC 디코딩 유닛으로서 기능한다. 예를 들어, 인코딩된 비트스트림으로부터의 양자화된 잔여 계수들을 디코딩하기 위해, 도 2의 엔트로피 인코딩 유닛 (46) 과 유사하게, 도 3의 엔트로피 디코딩 유닛 (52) 은, 본 발명에 설명된 바와 같이, 디지털 비디오 블록 계수들의 메모리 효율적이고 낮은 복잡도의 적응성 VLC 디코딩을 수행할 수도 있다. 그러나, 엔트로피 디코딩 유닛 (52) 은, 인코딩된 비트스트림으로부터 양자화된 블록 계수들을 복구하기 위하여, 도 2의 엔트로피 인코딩 유닛 (46) 에 관해 역방식으로 VLC 디코딩을 수행할 수도 있다. 따라서, 본 발명에서 설명된 다양한 디코딩 프로세스들은, 비디오 데이터의 디코딩을 수행하기 위해 엔트로피 디코딩 유닛 (52) 내에서 구현될 수도 있다. 다른 방법으로, 그러한 엔트로피 디코딩 유닛 (52) 은, 비디오, 이미지, 스피치 및 오디오 데이터를 포함하지만 이에 제한되지는 않는 다양한 데이터 중 임의의 데이터를 디코딩하기 위하여, 본 발명에서 설명된 프로세스들을 수행할 수도 있다. 어느 경우에서든지, 엔트로피 디코딩 유닛 (52) 에 의해 수행된 가변 길이 코딩의 결과는, 사용자로 출력되고, 메모리에 저장되며, 및/또는 또 다른 디바이스 또는 프로세싱 유닛으로 송신될 수도 있다.
모션 보상 유닛 (54) 은 레퍼런스 프레임 저장부 (62) 로부터 하나 이상의 복원된 레퍼런스 프레임들 및 모션 벡터들 및 블록 파티션들을 수신하여, 예측 비디오 블록을 생성한다. 역양자화 유닛 (56) 은 양자화된 블록 계수들을 역양자화, 즉, 디-양자화 (de-quantize) 한다. 역변환 유닛 (58) 은 역변환, 예를 들어, 역 DCT 또는 역 4×4 또는 8×8 정수 변환을 계수들에 적용하여, 잔여 블록들을 생성한다. 그 후, 예측 비디오 블록들은 합산기 (64) 에 의해 잔여 블록들과 합산되어, 디코딩된 블록들을 형성한다. 디블록킹 필터 (미도시) 는 블록킹 아티팩트들을 제거하기 위해 그 디코딩된 블록들을 필터링하도록 적용될 수도 있다. 그 후, 필터링된 블록들은, 후속 비디오 프레임들의 디코딩을 위한 레퍼런스 프레임을 제공하고, 또한, 디스플레이 디바이스 (28; 도 1) 를 구동시키기 위한 디코딩된 비디오를 생성하는 레퍼런스 프레임 저장부 (62) 에 배치된다.
가변 길이 코드들의 메모리 효율적인 코딩
다음으로, 본 발명의 제 1 일반적인 양태에 따르면, 콤팩트한 데이터 구조들을 지원하는 가변 길이 코딩을 위한 메모리 효율적인 기술의 일 예가 더 상세히 설명될 것이다. 그 기술은, 호프만, 샤논, 샤논-파노, 길버트-무어, 또는 다른 코드들과 같이 임의의 특정한 코드 구성 방식에 의존할 필요는 없다. 그러나, 그 기술은, 단조적으로 증가하는 확률의 심볼들을 갖는 소스에 대해 코드가 구성된다고 가정한다. 더 상세하게, 코드워드들이 단조적으로 감소하는 (또는 적어도 증가하지는 않는) 길이를 갖고, 동일한 길이의 코드워드들이 표현하는 입력 알파벳에서의 심볼들과 동일한 사전 편찬적 순서를 그 동일한 길이의 코드워드들이 갖는다고 가정한다.
비디오 코딩 또는 다른 애플리케이션에 적용되는 이러한 기술은 상기 특성들을 사용하여, 매우 콤팩트한 데이터 구조를 갖는 그러한 코드를 고유하게 설명한다. 상술된 바와 같이, 각각의 유효한 코드워드 길이, 즉, 코드 트리에서의 외부 노드들에 관한 레벨에 대해 데이터 구조는 다음의 정보를 포함할 수도 있다.
a. 코드 트리에서 현재 레벨에서의 사전 편찬적으로 최소의 (또는 최대의) 코드워드의 부분값,
b. 그 부분값에서의 비트들의 수,
c. 그 사전 편찬적으로 최소의 (또는 최대의) 코드워드에 대응하는 심볼값, 및
d. 그 코드 트리의 다음 레벨로 진행하기 전에 특정수의 비트들을 스킵하도록 디코더에게 명령하는 표시자.
인코딩 및 디코딩 프로세스는 생성될 (또는 디코딩될) 코드워드에 대응하는 코드 트리의 레벨을 식별하기 위해 이러한 구조를 사용할 수도 있으며, 그 후, 그 코드워드 (또는 디코딩된 심볼) 의 값을 직접 계산할 수도 있다.
이러한 기술은, 사전 편찬적으로 최소의 코드워드들의 부분값들만이 저장된다는 사실로 인하여, 코딩 및 디코딩을 위한 훨씬 더 적은 양의 메모리의 사용을 허용할 수도 있다. 데이터 구조는, 표, 링크된 리스트, 바이너리 트리, 라딕스 트리, 플랫 파일 등과 같은 광범위하게 다양한 데이터 구조들 중 임의의 데이터 구조일 수도 있으며, 많은 형태의 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 또는 그 양자와 같은 다양한 서로 다른 메모리 디바이스들 중 임의의 메모리 디바이스에 저장될 수도 있다. 데이터 구조는 인코더 또는 디코더내의 그러한 메모리, 예를 들어, 각각, 도 2 및 도 3에 도시된 메모리 (45) 또는 메모리 (51) 내에 저장될 수도 있다. 또한, 코딩 트리의 레벨들의 적어도 일부는, 코드워드들에 의해 표현된 심볼값들의 순서에 관해 사전 편찬적 순서로 배열되는 코드워드들을 포함한다. 따라서, 베이스 코드워드들 각각은 코딩 트리에서의 대응하는 레벨에서 사전 편찬적으로 최소의 코드워드이다. 또한, 이러한 기술은 비트스트림 데이터에 대한 증분적인 액세스의 사용을 허용하며, 비트스트림 버퍼가 합리적으로 짧은 레지스터에 의해 제공되게 한다. 예를 들어, 32비트 레지스터는 매우 긴 코드들에 대해서도 충분할 수 있다. 그 레지스터는 편리한 간격 (예를 들어, 8비트) 으로 업데이트될 수도 있으며, 구현의 복잡도를 추가적으로 낮춘다. 종합적으로, 다양한 양태에서, 그 기술은 가변 길이 코드들의 인코딩/디코딩 및 표현의 복잡도를 현저하게 감소시킬 수 있을 수도 있으며, 이는 압축 알고리즘의 설계자들이 더 크고 더 효율적인 코드북들을 이용할 수 있게 할 수 있다.
다음으로, 본 발명에서 설명된 기술들의 예시를 보조하기 위해 가변 길이 코 드들의 일반적인 설명이 제공된다. 가변 길이 코드들은 데이터 압축에서의 기본적인 툴을 표현한다. 일반적으로, 가변 길이 코드들은, 일부 알려지고 통상적으로 매우 언밸런스 (unbalance) 된 분포를 갖는 심볼들의 시퀀스들을 표현하기 위해 사용된다. 그러한 시퀀스들은 훨씬 더 짧은 전체 길이의 바이너리 시퀀스들 또는 코드들에 의해 표현될 수도 있다. 더 빈번하게 발생하는 심볼들을 더 짧은 코드들로 대체하고, 덜 빈번한 심볼들을 더 긴 코드들로 대체함으로써 길이에서의 감소가 달성된다.
데이터 압축에서 사용되는 가변-길이 코드들의 예들은, 예를 들어, D. A. Huffman. A method for the construction of minimum-redundancy codes. Proc. IRE, vol. 40, pp. 1098-1101, Sept. 1952 에서 설명된 바와 같은 호프만 코드들, 예를 들어, C. E. Shannon, A mathematical theory of communication, Bell Syst. Tech J. Vol. 27. pp. 379-423, July 1948 에서 설명된 바와 같은 샤넌 코드들, 예를 들어, RM. Fano, The transmission of information, Res. Lab. Electronics, Massachusetts Inst. of Technology, Cambridge, Mass. Tech. Rep. No. 65, 1949 에서 설명된 바와 같은 샤넌-파노 코드들, 및 예를 들어, E. N. Gilbert and E. F. Moore, Variable-Length Binary Encodings, Bell Syst. Tech. J., Vol. 7, pp. 932-967, 1959 에 설명된 바와 같은 길버트-무어 코드들 (또한, 종종 샤넌-파노-엘리아스 코드들로서 지칭됨) 이다.
상술된 코드들은, 예를 들어, T. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991 에서 설명된 바와 같은 프리픽스-프리 코드 (prefix-free code) 들의 클래스에 속한다. 도 4는 바이너리 코딩 트리의 일 예를 도시한 다이어그램이다. 상술된 코드들은 도 4에 도시된 것과 같은 바이너리 트리에 의해 편리하게 표현될 수 있다. 따라서, 인코더는 코딩 트리에 부합하여 심볼값들을 인코딩할 수도 있다. 그 트리에 따른 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터와 같은 다양한 데이터들 중 임의의 데이터를 표현할 수도 있다. 그러한 트리에서의 각각의 내부 노드는, 0 값이 트리에서 우측의 자식 노드 (child node) 로 이동하게 하고, 1 값이 트리에서 좌측의 자식 노드로 이동하게 하는 바이너리 디지트 (binary digit) 에 대응한다. 최상단 노드는, 인코딩/디코딩이 시작하는 노드인 루트 노드로 지칭된다.
트리에서의 각각의 외부 노드는, 인코딩/디코딩 프로세스가 재시작할 경우, 코드워드, 또는 현재의 코드워드와 관련된 심볼의 디코딩된 값 중 어느 하나를, 즉, 루트로부터 현재의 노드로의 비트들의 시퀀스로서 생성한다. 도 4의 예시적인 코딩 트리에서, 0 내지 15 까지 인덱싱된 심볼들에 대응하는 16개의 코드워드들이 존재한다. 이러한 예에서, 가장 짧은 코드워드는 1비트의 길이를 갖고, 가장 긴 코드워드들은 각각 10비트의 길이를 갖는다. 이러한 트리에서 외부 노드들 (코드워드들) 을 포함하는 레벨들의 수는 7, 즉, 제 1, 제 3, 제 4, 제 6, 제 7, 제 9 및 제 10 레벨이다.
도 4를 추가적으로 참조하면, n이 코딩 트리에서의 외부 노드들의 수 (및 대응하여 그 코드에서의 코드워드들의 수) 를 나타낸다고 하고, L이 가장 긴 코드워드의 길이를 나타낸다고 하며, K가 코딩 트리에서의 외부 노드들에 상주하는 레벨 들의 수를 나타낸다고 한다. 다음의 설명은 P. Bachmann 의 O-표기법 (O-notation) 을 사용한다. 예를 들어, 식 y(n)=O(x(n)) 은, 충분히 큰 모든 n에 대해
Figure 112009035711493-PCT00001
이도록 하는 M>0 인 몇몇 상수 M의 존재를 나타낸다.
코딩 프로세스를 지원하기 위해, 엔트로피 인코딩 유닛 (46) 또는 엔트로피 디코딩 유닛 (52) 과 같은 인코더 또는 디코더는, 일반적으로, 메모리 (45) 또는 메모리 (51) 와 같은 컴퓨터 메모리에 바이너리 트리를 저장할 필요가 있다. 또한, 인코딩 및 디코딩 프로세스는, 메모리에 저장된 코딩 트리의 비트 단위 (즉, 노드 단위) 횡단을 포함해야 한다. 따라서, 그러한 구현은 O(n) 저장 비용을 포함해야 하며, O(L) 단계까지 취할 수 있다. 그럼에도, 몇몇 특수한 경우에서, 코딩 트리가 몇몇 특정한 구조를 가질 경우, 그러한 코드 구조를 저장하고 인코딩 또는 디코딩 동작을 수행하는 더 효율적인 방식이 존재할 수도 있다.
예를 들어, 도 4의 예시적인 코딩 트리에서 제공된 코드를 고려하면, 코드워드들이 길이에서 감소되지 않고, 코딩 트리의 동일한 레벨상의 모든 코드워드들이 인접한 값들을 갖는다는 것이 관측될 수 있다. 예를 들어, 도 4에서의 트리의 제 4 레벨상의 코드워드들은 그 트리의 제 3 레벨상의 코드워드들보다 더 길며, 즉, 0001 대 011, 010, 001 및 000 이다. 또한, 제 3 레벨의 코드워드들은 011, 010, 011, 000 의 인접한 값들을 갖는다. 따라서, 모든 코드들을 저장하는 것 대신에, 코딩 트리의 각각의 레벨에 대한 최소 또는 최대의 코드워드만을, 즉, 인접한 코드워드들이 계산될 수 있는 베이스 코드워드로서 저장하기에 충분할 수도 있다.
상기 관측은, 예를 들어, A. Moffat, A. Turpin 의 On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45(10)(1997) 1200-1207 에서 설명된 바와 같은 소위 정준 형식 (canonical form) 으로의 가변-길이 코드들의 변환에 기초한 그 가변-길이 코드들의 디코딩을 위한 기술들을 이해하는데 핵심이다. 간단한 관점에서, 정준 코드는 길이의 증가하지 않는 분포를 가지며, 그의 노드들에 할당된 인덱스들에 관해 사전 편찬적인 순서를 유지한다. 결과적인 코드가 상기 특성들을 갖도록 임의의 소정의 소스가 재순서화될 수 있다는 것을 나타내는 것은 매우 간단하다.
예를 들어, 다음의 표 1에 나타낸 바와 같이, 도 4의 코딩 트리에서 도시된 코드는, 비-단조적인 분포를 갖는 소스에 대한 재순서화된 코드를 표현한다. 상세하게, 표 1은 재순서화된 정준 가변 길이 코드의 일 예이다.
Figure 112009035711493-PCT00002
상기 표 1에서, 심볼 0은 가장 높은 확률을 가지며, 심볼 1 및 심볼 2가 그에 후속한다. 그러나, 심볼 3은 심볼 4보다 더 낮은 확률을 가지며, 심볼 4 및 심볼 8은 심볼 1 및 심볼 2와 동일한 확률을 갖는다. 재순서화한 이후, 모든 심볼 확률들은 단조적으로 증가하며 (감소되지 않으며), 도 4의 코딩 트리에서 나타낸 정준 코드를 초래한다. A. Moffat and A. Turpin, On the Implementation of Minimum-Redundancy Prefix Codes, IEEE Trans. Communications, 45(10)(1997) 1200-1207 에서 설명된 바와 같은 소위 모팟-터핀 알고리즘은 정준 코드들을 디코딩하기 위한 기술을 제공한다. 본 발명에서 설명된 기술들은 모팟-터핀 알고리즘보다 우월한 개선점들을 제공할 수도 있다. J. B. Connell, A Huffman-Shannon-Fano Code, Proc. IEEE, July 1973, 1046-1047, 및 A. Brodnik and S. Carlsson, Sublinear Decoding of Huffman Codes Almost in Place, DIMACS Workshop on Codes and Trees: Algorithmic and information Theoretic Approaches, October 1998, Rutgers University, DIMACS Center, NJ 에 설명된 것과 같은 다른 알고리즘들은 모팟-터핀 알고리즘과 유사하며, 또한, 개시된 기술들을 유사한 방식으로 사용함으로써 개선될 수도 있다.
가변 길이 코드들의 디코딩을 위한 모팟-터핀 알고리즘이 아래에서 설명된다. 입력 알파벳 A 가 n 개의 문자들을 포함한다고 가정하면, 즉,
Figure 112009035711493-PCT00003
이라고 가정하면, 결과적인 확률들이
Figure 112009035711493-PCT00004
를 만족하도록 재순서화
Figure 112009035711493-PCT00005
가 적용된다. 그 후, 각각의 인덱스 1≤i≤L 에 대해 코드워드들의 길이들 li 을 할당하는 호프만 또는 다른 최소 리던던시 구성 알고리즘이 적용될 수 있으며, 여기서, L 은 가장 긴 코드워드의 길이이다. 결과로서, "상주 수 (populatoin number)" 가 ml, 즉, 길이 l의 코드워드들의 수로서 생성된다.
이들 파라미터들을 사용하여, 소위 "베이스" 값들이 트리에서의 각각의 레벨에 대해 다음과 같이 계산된다.
Figure 112009035711493-PCT00006
이들 베이스 코드워드 값들은 트리의 각각의 레벨에서 사전 편찬적으로 최소의 정준 코드워드들을 표현한다. 다음으로,
Figure 112009035711493-PCT00007
의 베이스 코드워드 값이 주어지면, 길이 l 의 ml 개의 코드워드들 중에서 j+1 번째 코드워드의 값이 계산될 수 있으며, 즉, 다음과 같다.
Figure 112009035711493-PCT00008
디코더 동작에 있어서,
Figure 112009035711493-PCT00009
와 같은 베이스 코드워드 값의 좌측-정렬된 버전을 저장하는 것이 더 편리하며, 여기서, W는 비트스트림으로부터 가장 최근에 로딩된 비트들을 유지하는데 사용되는 비트-버퍼 또는 레지스터의 길이이다. W>=L 로 가정한다.
최종적으로, 베이스 코드워드 값에 부가하여, 모팟-터핀 디코더는 각각의 심볼들의 인덱스들을 재순서화된 어레이에 또한 저장한다. 이들 인덱스들은 트리에서 각각의 상주 레벨에 대한
Figure 112009035711493-PCT00010
값들로서 저장된다. 도 4의 트리에 의해 표현되는 코드에 대하여 모팟-터핀 알고리즘에 의해 유지되는 완전한 예시적인 구조가 다음의 표 2에서 제공된다.
Figure 112009035711493-PCT00011
표 2의 구조를 사용하는 모팟-터핀 디코딩 알고리즘의 구현에 대한 예시적인 의사-코드가 다음의 표 3에서 제공된다.
Figure 112009035711493-PCT00012
상기 표 3으로부터, 전체 디코딩 프로세스가 좌측-정렬된 베이스 코드워드 값들과 현재의 비트스트림 버퍼와의 최대 K (W 비트) 번의 비교 및 그에 후속하는 디코딩된 심볼의 인덱스의 간단한 직접 계산을 포함한다는 것이 관측될 수 있다. 또한, 그러한 구조에 의해 이용되는
Figure 112009035711493-PCT00013
어레이가 메모리의 O(K*W) 비트들을 요구한다는 것이 관측될 수 있으며, 이는, W>=l 이도록 W 가 사용되어야 하므로, 코드워드들이 길면 문제가 될 수도 있다.
표 3의 예에서, 디코더는 비트스트림으로부터 W 비트를 V 로서 수신하고, 코딩 트리의 연속하는 레벨들 i 에 대한 베이스 코드워드들
Figure 112009035711493-PCT00014
과 그 V 를 비교한다. V 이하인 베이스 코드워드가 발견될 경우, 코드워드의 레벨에 대한 탐색이 종료된다. 그 후, 디코더는 레벨 i와 관련된 길이를 결정하고, l 비트만큼 비트스트림을 스크롤하며, 심볼을 디코딩한다. 특히, 레벨 i에 대한 오프셋 값과, W-I 비트만큼 우측으로 시프트되는, 비트스트림으로부터의 코드워드 V와 레벨 i에 대한 베이스 코드워드 사이의 차이와의 합산에 의해 그 디코딩된 심볼이 결정된다.
일반적인 셋팅에서, 모팟-터핀 디코딩이 수반될 경우, 역매핑이 룩업되며, 즉,
Figure 112009035711493-PCT00015
이다. 이러한 경우, 최종 동작은, 그 동작이 O(n) 공간을 요구하므로, 가장 메모리-비경제적인 동작이 된다. 그러나, 많은 실시의 경우, 변환 또는 예측기의 런-렝스 (run-length) 또는 출력과 관련된 상황과 같이, 인코딩될 필요가 있는 소스는 이미 순서화되어 있다. 따라서, 모팟-터핀 구조에서
Figure 112009035711493-PCT00016
어레이에 의해 사용된 메모리가 전체 저장 비용에서 주요한 인자가 된다.
제 1 일반적인 양태에 따르면, 본 발명에서 설명된 기술들은, 모팟-터핀 알고리즘 또는 다른 알고리즘에서 사용되는 데이터 구조들의 추가적인 압축을 허용하는 개량예를 제공하고, 가변 길이 코드들의 증분적인 디코딩을 지원한다. 다음으로, 그 개량예들이 더 상세히 설명될 것이다. 표 2를 참조하면,
Figure 112009035711493-PCT00017
값들이 우측으로부터 좌측으로의 큰 양의 선행 비트 (leading bit) 들을 갖는다는 것이 명백하다. 따라서, 베이스 코드워드들의 부분값들은 베이스 코드워드들로부터 고정된 수의 선행 비트들의 제거를 표현한다. 대부분의 경우, 제거되는 선행 비트들은 제로일 것이다. 코딩 트리가 더 깊은 층으로 확장함에 따라, 그러한 제로들의 수는 단조적으로 증가한다. 따라서, 코딩 트리의 맨 첫번째 층으로 시작하여 아랫 방향으로 이동하면서 비트들이 순차적으로 디코딩되면, 디코딩의 정확도에 영향을 주지 않으면서 선행 제로 비트들 중 일부를 스킵하는 것이 가능하다. 선행 제로들 중 적어도 일부를 스킵함으로써, 본 발명에서 설명된 기술들은 매우 압축된 데이터 구조 및 가변 길이 코드들의 증분적인 디코딩을 허용한다.
그러나, 선행 비트들이 제거될 경우, 코딩 트리의 더 낮은 레벨에서의 몇몇 적법한 코드들이, 제거되는 선행 비트들의 범위로 확장할 수도 있는 것이 가능하다. 따라서, 그러한 코드들을 손실하는 것을 회피하기 위해, 스킵 표시자들의 표가 제공된다. 스킵 표시자는, 코딩 트리의 선택된 레벨로 진행하기 전에 디코딩될 비트스트림내의 다수의 비트들을 디코더가 스킵하도록 명령한다. 특히, 스킵 표시자는, 코딩 트리의 선택된 레벨로 진행하기 전에 코드워드 비트스트림내의 고정된 수의 비트들, 예를 들어, 8비트를 스킵하도록 디코더에게 명령할 수도 있다. 이러한 방식으로, 트리의 선택된 레벨에서의 베이스 코드워드의 부분값은, 고정된 수의 비트들에 의한 베이스 코드워드의 시프트에 기초한다. 그 시프트가 없다면, 트리의 선택된 레벨에서의 베이스 코드워드는 제거된 수의 선행 비트들로 적어도 부분적으로 확장할 것이다.
아래의 표 4는, 코드워드들을 표현 및 프로세싱하는데 사용되는 데이터 구조를 추가적으로 압축하기 위해, 본 발명의 일 양태에 따른, 선행 제로들이 제거되는 코딩 프로세스의 예시적인 구현을 나타낸다. 표 4의 예에서, 종래의 8비트/바이트 컴퓨터상에서의 비트스트림 버퍼 관리에 편리한 8의 증분으로 선행 제로들이 제거된다. 상술된 바와 같이, 선행 제로들의 제거를 관리하기 위해, 표시자들의 부가적인 표
Figure 112009035711493-PCT00018
가 제공된다. 따라서, 표 4는 일반적으로 표 2를 따르지만, 코드워드들 각각으로부터 선행 제로들을 제거하고, 스킵 표시자 열을 부가한다.
Figure 112009035711493-PCT00019
표 4의 예에서, 값
Figure 112009035711493-PCT00020
은 각각의 인덱스 위치에서의 베이스 코드워드 값을 나타내고, 값
Figure 112009035711493-PCT00021
은 그 인덱스 위치에 대한 코딩 트리내의 레벨 및 그 레벨에서의 코드워드들의 길이를 나타내고, 값
Figure 112009035711493-PCT00022
은 그 베이스 코드워드 값에 대한 우측으로부터 좌측으로의 선행 제로들의 수를 나타내고, 값
Figure 112009035711493-PCT00023
은 디코더가 다음의 베이스 코드워드 값에 대해 8비트를 스킵해야 하는지를 나타내며, 1 은 스킵을 지정하고 0은 스킵하지 않음을 지정한다. 이러한 스킵 동작은 선택된 간격으로 비트 버퍼를 주기적으로 리프레시 (refresh) 하여, 선행 제로들이 제거될 경우 손실될 코드워드들을 디코더가 식별하게 한다. 예를 들어, 좌측-정렬된 코드워드의 최우측 8개의 선행 제로들이 제거되면, 최우측 8비트로 확장하는 코드워드는 부분적으로 또는 완전히 손실될 것이다. 따라서, 스킵 표시에 응답하여 최좌측 8비트를 스킵하는 것은 제거되지 않는 비트 범위로 코드워드를 이동시킬 것이며, 그에 의해, 디코딩시에 사용하기 위해 코드워드를 보존한다.
따라서, 디코더가 코드의 다음 레벨에 대한 특정된 스킵 증분, 예를 들어, 표 4의 예에서는 8만큼 앞으로 스킵해야 할 경우, 스킵 표시자가 시그널링한다. 일 예로서, 표 2에서, 인덱스 위치 5 및 6 (트리 레벨 9 및 10) 에서의 베이스 코드워드 값들은, 각각, 0000000010000000 및 0000000000000000 이다. (좌측 정렬되는) 최우측 8개의 선행 제로들이 이들 베이스 코드워드 값들로부터 제거될 경우, 8개의 선행 제로들이 제거될 때 실제 베이스 코드워드 값 (0000000010000000) 이 손실되지 않도록 디코더가 8비트 앞으로 스킵할 필요가 있다. 대신, 실제 베이스 코드워드 값 (0000000010000000) 은, 첫번째 8비트 (00000000) 를 스킵하고, 그 후, 최우측 8개의 선행 제로들을 제거함으로써 상이한 베이스 코드워드값 (10000000) 으로 변환된다.
선행 제로들의 제거로 인해, 변형된
Figure 112009035711493-PCT00024
어레이의 폭이 훨씬 더 작아진다. 표 4의 코드에서, 일 예로서, 변형된
Figure 112009035711493-PCT00025
어레이의 폭 W 는, 표 2의 경우에서의 W=16 대신에 W=8 이다. 비트-버퍼를 주기적으로 리프레시하기 위해 그러한 여분의 스킵 표를 사용하는 알고리즘의 일 구현의 일 예를 아래의 표 5에서 나타낸다. 표 5에 나타낸 바와 같이 구성된 알고리즘은, 매우 긴 코드워드들 또는 매우 콤팩트한 베이스 코드워드 값 (
Figure 112009035711493-PCT00026
) 표들을 지원하도록 구성될 수도 있다.
Figure 112009035711493-PCT00027
표 5에 나타낸 바와 같이, 디코더는, 값
Figure 112009035711493-PCT00028
에 의해 표현되는 비트스트림으로부터 최종 W 비트를 획득한다. 그 후, 디코더는, 비트스트림 버퍼로부터의 코드워드 V 이하인 베이스 코드워드 값
Figure 112009035711493-PCT00029
에 대한 코딩 트리의 레벨들 i를 탐색한다. 예를 들어, 표 5에 나타낸 바와 같이, 트리의 현재 레벨 i가 스킵 레벨 (
Figure 112009035711493-PCT00030
) 에 대응하면, 디코더는 B 비트, 예를 들어, 몇몇 구현에서는 8 비트만큼 우측으로 비트스트림을 스크롤하여, 디코더에 의해 탐색된 다음 레벨에서의 코드워드가 B 개의 최우측 선행 제로들의 제거에 의해 손실되기보다는 유지될 수 있게 한다.
예를 들어, 표 5에 나타낸 바와 같이, 트리의 현재 레벨에서의 코드워드들에 대한 잔여 길이
Figure 112009035711493-PCT00031
를 결정할 시에, 디코더는 비트스트림을 길이 l 만큼 스크롤한다. 그 후, 디코더는, 현재 레벨 i에 대한 오프셋과, W-l 비트만큼 우측으로 시프트되는, 비트스트림 버퍼 콘텐츠 V와 현재 레벨 i에 대한 베이스 코드워드 사이의 차이와의 합산에 기초하여 심볼 인덱스를 직접 계산한다.
디코더는, 베이스 코드워드들의 부분값들, 스킵 표시자, 베이스 코드워드에 의해 표현된 값들, 및 그 베이스 코드워드들의 부분값들의 길이 (즉, 비트 수) 를 특정하는 저장된 데이터 구조를 사용하여 코드워드 비트스트림으로부터의 코드워드를 디코딩한다. 일반적으로, 엔트로피 디코딩 유닛 (52) 과 같은 디코더와 연결된 프로세서는, 코드워드 비트스트림으로부터의 코드워드 이하인 베이스 코드워드들의 부분값들 중 선택된 하나에 대한 코딩 트리의 레벨들을 탐색한다. 프로세서는 스킵 표시자에 응답하여 코딩 트리의 선택된 레벨로 진행하기 전에 코드워드 비트스트림내의 다수의 비트들을 스킵하고, 코드워드 이하인 베이스 코드워드들의 부분값들 중 선택된 하나와 그 코드워드 사이의 차이, 및 그 코드워드 이하인 베이스 코드워드들의 부분값들 중 선택된 하나의 인덱스에 기초하여, 그 코드워드에 대응하는 복수의 값들 중 하나를 계산한다. 프로세서는, 메모리내의 저장, 상이한 디바이스 또는 프로세싱 유닛으로의 송신, 또는 사용자로의 제공을 위해 디코딩의 결과를 생성한다. 예를 들어, 디코딩된 결과들은, 비디오 또는 이미지를 제공하기 위해 디스플레이 디바이스 (28) 및/또는 오디오 또는 스피치 출력을 제공하기 위해 오디오 출력 디바이스를 구동시키는데 사용될 수도 있다.
표 5의 예에서, 디코더는 스킵 동작을 통해 비트스트림 버퍼의 증분적인 업데이트를 수행하여, 선행 제로들이 제거될 때 손실될 코드워드들을 유지한다. 또한, 디코더가 코드의 각각의 레벨에서 비교하는 베이스 코드워드 값들이 훨씬 더 짧아질 수 있다. 다음으로, 베이스 코드워드 값 길이에서의 감소의 잠재적인 양이 설명될 것이다. 본 발명에서 설명되는 변형된 알고리즘으로 그러한 양들의 동적 범위를 분석하기 위해, 2개의 인접한 레벨들 사이의 차이가 다음과 같이 고려된다.
Figure 112009035711493-PCT00032
i가 다음의 비어있지 않은 레벨의 인덱스이면, 다음과 같다.
Figure 112009035711493-PCT00033
여기에서, 관심 주요 양은, 이러한 차이에 영향을 주는 ml+i2-i 이다. 가장 간단한 경우에서, i=1 일 경우, 이러한 차이가 외부 노드들의 수에 간단히 의존한다는 것이 명백하며, 따라서, W는, 대부분의 실시의 경우 L보다 현저하게 더 작은 양인
Figure 112009035711493-PCT00034
이도록 선택될 수 있다. 이러한 차이는 매우 언밸런스된 분포에 대해 특히 커야한다.
예를 들어, 입력 심볼들이 베르누이 확률 pm(1-p)m-k 을 갖는 m비트의 블록이면, 대부분의 상주 레벨은 약
Figure 112009035711493-PCT00035
코드워드를 포함해야 하며, 이는, 약 H(p)m 비트가 코드워드들을 구별하기 위해 사용되어야 한다는 것을 의미하고, 여기서, H(p) 는, 예를 들어, T. Cover and J. Thomas, Elements of Information Theory, Wiley, 1991 에 설명된 바와 같은 엔트로피 함수이다.
한편, 이러한 경우에서 가장 긴 코드워드는 약
Figure 112009035711493-PCT00036
비트를 가질 것이며, 여기서, 비대칭적인 분포에 대하여,
Figure 112009035711493-PCT00037
가 주지되어 있고, 여기서,
Figure 112009035711493-PCT00038
는, 예를 들어, W. Szpankowski, Average Case Analysis of Algorithms on Sequences (New York, John Wiley & Sons, 2001) 에 설명된 바와 같은 레니 (Renyi) 엔트로피의 특수한 경우이다. 이러한 차이는
Figure 112009035711493-PCT00039
또는
Figure 112009035711493-PCT00040
로 임의적으로 클 수 있다.
상기 설명에 기초하여, 제안된 기술이 크고 비대칭적인 코드 구조들을 처리하는데 효율적이어야 한다. 통상적으로, 그러한 구조들은 종래의/기존의 기술들의 사용과 함께 작동하기 어려우며, 많은 경우, 엔지니어들은 코드들을 더 실용적으로 하기 위해 그 코드들의 압축 성능에 영향을 주는 다양한 간략화를 사용하는 것에 의지한다.
예를 들어, S. Golomb, "Run-length coding," IEEE Trans. Inform. Theory, vol. IT-12, pp. 399-401, July 1966, 및 R. Gallager and D. van Voorhis, "Optimal source codes for geometrically distributed integer alphabets," IEEE Trans. Inform. Theory, vol. IT-21, pp. 228-230, Mar. 1975 에 설명된 바와 같은 매우 일반적인 Golomb 코드들은 특히 간단한 구조를 갖는 가변-길이 코드들을 표현하지만, 그들은 단지 지리적인 분포의 클래스, 및 그러한 분포의 파라미터들의 가산가능 값 (countably-many value) 에만 최적하다. 엔지니어들은, 복잡도 고려사항에 의해 주로 동기된 (motivated) 현저하게 발산하는 분포에 대해서도 그들을 사용하는 경향이 있다. 그러한 솔루션은 준-최적 (sub-optimal) 하게 될 수 있으며, 그러한 코드들의 내재하는 성능 제약 때문에 확장하거나 변형하기 매우 어려울 수 있다.
T. J. Lynch, Sequence time coding for data compression, Proc. IEEE(Lett.), 54(1966) 1490-1491, 및 L. D. Davission, Comments on Sequence time coding for data compression, Proc. IEEE(Lett.), 54(1966) 2010-2011 에 설명된 바와 같은 린치-데이비슨 (Lynch-Davission) 코드들의 설계와 관련된 또 다른 솔루션은 2개의 파트로 코드들을 분할하는 것이며, 여기서, 제 1 부분만이 가변-길이 인코딩에 영향을 주고, 나머지 부분은 고정된 수의 비트를 사용하여 확장으로서 송신된다. 불운하게도, 그러한 분할에서 종종 심볼 당 1.5 내지 2 비트만큼 큰 효율도의 손실이 존재한다.
더 정교한 버전의 코드북-분할 기술은, 예를 들어, Boris Ryabko, Jaakko Astola, Karen Egiazarian, Fast Codes for Large Alphabets, Communications in Information and Systems, v.3, n.2, pp. 139-152, 및 Boris Ryabko, Jorma Rissanen, Fast Adaptive Arithmetic Code for Large Alphabet Sources with Asymmetrical Distributions, IEEE Communications Letters, v.7, no.1, 2003, pp. 33-35 에서 설명된 바와 같은 알파벳 그룹화의 명칭하에서 개발되었다. 그러나, 이러한 접근법은 또한 압축 효율도에서 몇몇 손실을 초래한다.
상술된 기술과 유사하지 않게, 본 발명에서 설명된 기술들은 코드의 구조 및 최적화를 완전하게 보존하도록 구성될 수도 있으며, 따라서, 디지털 비디오, 이미지, 오디오 또는 스피치 데이터의 인코딩 및 디코딩과 같은 데이터 압축 및 인코딩에서의 광범위하게 다양한 실용적인 애플리케이션에 유용한 툴일 수도 있다.
바이너리 적응성 블록 코딩
다음으로, 무메모리 소스들에 의해 생성된 바이너리 시퀀스의 적응성 가변 길이 코딩을 위한, 본 발명의 제 2 일반적인 양태에 따른 낮은 복잡도의 기술의 일 예가 더 상세히 설명될 것이다. 이러한 개시된 기술은, 시퀀스의 이전 비트에서의 0-아닌 비트들의 수에 의해 식별된 콘텍스트의 세트에 대해 구성되는 유니버셜 블록 코드들을 구현할 수도 있다. 본 발명의 이러한 제 2 일반적인 양태는, 매우 콤팩트한 데이터 구조의 생성에 관해 상술된 제 1 일반적인 양태와 독립적으로 또는 그 양태와 함께 제공되거나 실시될 수도 있다. 데이터 구조는, 표, 링크된 리스트, 바이너리 트리, 라딕스 트리, 플랫 파일 등과 같은 광범위하게 다양한 데이터 구조들 중 임의의 데이터 구조일 수도 있으며, 많은 형태의 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 또는 그 양자와 같은 다양한 서로 다른 메모리 디바이스들 중 임의의 메모리 디바이스에 저장될 수도 있다. 데이터 구조는 인코더 또는 디코더내의 그러한 메모리에 저장될 수도 있다. 이러한 제 2 일반적인 양태에 따르면, 낮은-복잡도 적응성 인코딩 및 디코딩을 위한 기술은, 그러한 코드들의 점근적인 리던던시에 대한 식에 적어도 부분적으로 의존할 수도 있으며, 이는, R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27(1981) 199-207 에서 설명된 추정치를 개량한다.
데이터 압축 알고리즘은 몇몇 미지의 분포를 갖는 비트들의 입력 시퀀스들을 디코딩가능한 비트스트림으로 변환한다. 예를 들어, 이미지 또는 비디오 코덱의 설계, 오디오 코덱에서의 스펙트럼의 스케일러블 (비트-슬라이스 기반) 인코딩, 및 다른 애플리케이션에서 데이터 압축이 사용된다. 대부분의 그러한 경우, 인코딩될 비트들은, 변환, 예측 필터 등과 같은 다양한 신호 프로세싱 툴에 의해 생성된 값들로부터 취해지며, 이는, 그 비트들이 이미 상당히 역상관 (decorrelate) 되고, 그러한 소스의 무메모리성의 가정이 정당화된다는 것을 의미한다.
통상적으로, 그러한 바이너리 적응성 알고리즘의 가장 공통적으로 사용되는 구현은, 그들의 복잡도를 감소시키기 위해 적용되는 숏-컷 (short-cut) 및 몇몇 근사화를 갖는 알고리즘 코드들에 기초한다. 그러한 알고리즘의 2개의 주지된 예는, JBIG 이미지 코딩 표준에서 사용되는, W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J, Res. Dev., 32(6) (1988) 717에 설명되어 있는 Q-코더 알고리즘, 또는 비디오 압축을 위한 ITU-T H.264/MPEG AVC 표준에서 사용되는, D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620 636, July 2003에 설명되어 있는 CABAC 알고리즘이다.
본 발명의 이러한 제 2 일반적인 양태에 따르면, 대안적인 구현은, 수 개의 추정된 밀도들에 대해 설계되고, 시퀀내의 이전 블록들 (콘텍스트들) 에서의 0-아닌 비트들의 수에 의해 인덱스된 호프만 코드들의 어레이를 사용한다. 효율도 및 구현 양자의 관점에서, 그러한 기술은, 좀 더 적당히 사이즈된 비트 블록들, 예를 들어, n=8 ...16 을 사용하고 대응하는 양의 메모리, 예를 들어, 1.5k 바이트 ...5k 바이트를 사용하여, 바람직한 압축 성능을 달성할 수 있다.
이러한 기술은, 확률 p 및 대응하는 q=1-p 을 갖는 바이너리 알파벳 {0, 1} 으로부터 심볼들을 생성하는 무메모리 소스의 콘텍스트에서 고려될 수도 있다. ω가 이러한 소스에 의해 생성된 길이 n의 워드이면, 그의 확률은,
Figure 112009035711493-PCT00041
이며, 여기서, k는 이러한 워드에서 1들의 개수를 나타낸다. 또한, 값 k는 ω의 가중치로서 지칭될 수도 있다.
블록 코드 φ는 길이 │ω│=n 의 워드 ω와 바이너리 시퀀스 (또는 코드워드) φ(ω) 사이의 1 대 1 매핑 (injective mapping) 이며, 즉,
Figure 112009035711493-PCT00042
이고, 여기서, 코드워드 φ(ω) 는, 예를 들어, T. Cover and J. M. Thomas, Elements of Information Theory, (John Wiley & Sons, New york, 1991) 에서 설명된 바와 같은 고유하게 디코딩가능한 세트를 나타낸다.
통상적으로, 소스 (즉, 그의 확률 p) 가 공지될 경우, 그러한 코드는 그의 평균 길이, 또는 상대적인 관점에서는 그의 평균 리던던시를 최소화하도록 설계되며, 그 평균 리던던시는 다음과 같다.
Figure 112009035711493-PCT00043
상기 수학식에서,
Figure 112009035711493-PCT00044
는 소스의 엔트로피를 나타낸다.
이러한 문제를 풀기 위해 제안된 코드들 및 알고리즘들의 고전적인 예는, 호프만, 샤넌, 샤넌-파노, 및 길버트-무어 코드들 및 그들의 변형을 포함한다. 그러한 코드들의 성능은 충분히 연구되어 있으며, 그러한 코드들에 대한 많은 유용한 실용적인 구현 기술들이 또한 보고되어 있다.
소스가 공지되어 있지 않은 경우, 이용가능한 최상의 옵션은, 예를 들어, B. M. Fitingof, Optimal Coding in the Case of Unknown and Changing Message Statistics, Probl. Inform. Transm., 2, (2)(1965)3{11 (러시아판) 1-7 (영어 변역판)}, L. D. Davission, Universal Noiseless Coding, IEEE Trans. Inform. Theory, 19(6)(1973), 783-795, 및 R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27(1981) 199-207 에 설명된 바와 같이, 소스의 클래스에 대한 최악의 경우의 리던던시를 최소화하는 유니버셜 코드
Figure 112009035711493-PCT00045
를 설계하는 것이며, 다음과 같이 나타낸다.
Figure 112009035711493-PCT00046
그러한 코드의 일 예는,
Figure 112009035711493-PCT00047
와 같은 워드 확률들의 추정치들을 사용하여 구성될 수 있으며, 여기서,
Figure 112009035711493-PCT00048
는 Γ-함수이고, k는 워드 ω의 가중치이며, n은 그의 길이이다. 상기 식은, R. E. Krichevsky and V. K. Trofimov, The Performance of Universal Encoding, IEEE Trans. Information Theory, 27(1981) 199-207 에 설명되어 있으며, n이 무한대로 접근함에 따라
Figure 112009035711493-PCT00049
실제 확률들로의 (p에서의) 균일한 수렴을 보장한다.
소스의 파라미터의 정확한 값이 공지되어 있지 않은 상황에서, 과거에 이러한 소스에 의해 생성된 심볼들 u 의 시퀀스에 액세스하는 것이 가능하다. 그러한 시퀀스는 샘플로서 지칭될 수도 있으며,
Figure 112009035711493-PCT00050
비트 길이라고 가정될 수 있다. 다음에 나타낸 바와 같이, 여기에서 태스크는, 인덱스된 코드들
Figure 112009035711493-PCT00051
의 결과적인 최악의 경우의 평균 리던던시가 최소가 되도록 이러한 샘플의 상이한 값들에 의해 그 인덱스된 코드들
Figure 112009035711493-PCT00052
의 세트를 설계하는 것이다.
Figure 112009035711493-PCT00053
그러한 코드들은 샘플-기반 또는 적응성 유니버셜 블록 코드들로 지칭된다. 본 발명에서, 적응성 블록 코드들의 특정한 구현들은,
Figure 112009035711493-PCT00054
와 같이 샘플 u가 주어질 때의 워드 ω의 확률들의 추정치들을 사용하여 설명되며, 여기서, s는 샘플 u의 가중치이고, t는 그의 길이이다.
직전의 추정기 함수 (1) 을 이용하는 샘플-기반 코드들의 개념 및 분석은, R. E. Krichevsky, Universal Data Compression and Retrieval (Kluwer, Norwell, MA, 1993) 에서 R. E. Krichevsky 에 의해 설명된다. 적응성 블록 코드의 평균 리던던시 레이트는,
Figure 112009035711493-PCT00055
와 같이 점근적이며, 여기서, n은 블록 사이즈이고, t는 샘플들의 사이즈이다.
상기 수학식 (2) 로부터, 길이 t=O(n) 의 샘플들을 사용함으로써, 공지된 소스들에 대한 블록 코드들의 리던던시 레이트의 차수에 매칭하는 O(1/n) 으로 그러한 코드들의 리던던시 레이트를 낮추는 것이 가능하다는 것이 명백하다. 그러나, 그러한 코드들의 전체의 잠재성을 이해할 수 있기 위해, 호프만, 샤넌 등과 같은 실제 코드-구성 알고리즘의 선택에 의해 영향을 받는 항들을 포함하는, 그들의 리던던시에 대한 더 정확한 표현을 알 필요가 있다.
이러한 제 2 일반적인 양태에 따르면, 본 발명은 Krichevsky 의 정리 2의 다음의 개량예를 제공한다. 특히, 다음의 정리 1은 다음과 같이 적응성 블록 코드
Figure 112009035711493-PCT00056
에 대한 평균 리던던시 레이트 정리를 개량하며, 즉,
정리 1: 적응성 블록 코드
Figure 112009035711493-PCT00057
의 평균 리던던시 레이트는 다음의 점근적인 작동을 갖는다
Figure 112009035711493-PCT00058
.
Figure 112009035711493-PCT00059
여기서, n은 블록 사이즈이고, t는 샘플 사이즈이고, p, q=1-p 는 입력 소스의 심볼들의 확률들이며, 여기서,
Figure 112009035711493-PCT00060
는 상기 수학식 (1) 에서의 추정된 분포에 관한 코드
Figure 112009035711493-PCT00061
의 평균 리던던시이다.
Figure 112009035711493-PCT00062
의 정확한 작동은 알고리즘-특정적이다. 그러나, 종래의 호프만 및 샤넌 코드들을 포함하는 최소-리던던시 기술들의 큰 클래스에 있어서, 이러한 항은,
Figure 112009035711493-PCT00063
와 같이 크기에서 제한되며, 파라미터 p의 값에 의존하여 몇몇 상수에 수렴할 수도 있거나 수렴하지 않을 수도 있는 진동 (oscillating) 작동을 나타낸다. 또한, t 및 n의 짧은 값들에 있어서, 그러한 코드들의 리던던시는, 소스 p의 파라미터의 함수인 다음의 항에 의해 영향을 받을 수 있다.
Figure 112009035711493-PCT00064
도 5는 점근적인 작동을 갖는 적응성 블록 코드의 리던던시 레이트를 도시한 그래프이며, 이러한 양을 도시한다. 짧은 블록들/샘플들에 있어서, 그러한 코드들의 성능은 소스의 비대칭에 민감하게 된다. 이러한 정리의 증명은, 예를 들어, Asymptotic average redundancy of adaptive block codes, Y. A. Reznik, W. Szpankowski, Proceedings of IEEE International Symposium on Information Theory (ISIT), 2003 에서 발견될 수도 있다.
다음으로, 상술된 코드들을 구현하기 위한 효율적인 알고리즘들의 예가 설명될 것이다. 무메모리 모델에서, 워드 ω 의 확률 (또는 그의 추정치) 은 그의 비트들의 실제 패턴이 아니라 그의 가중치 k에 의존한다. 따라서, 모든 가능한 n-비트 워드들의 세트를 고려하면, 동일한 가중치 (k=0,...,n) 의 워드들 및 동일한 확률을 포함하는 n+1개의 그룹들, 즉,
Figure 112009035711493-PCT00065
로 그 세트를 분할할 수 있다. 그러한 그룹들의 사이즈들은
Figure 112009035711493-PCT00066
이다. 추가적인 편의를 위해, 각각의 그룹 Wn,k 는 사전 편찬적 순서로 워드들을 저장한다고 가정한다. 값 In,k(ω) 는 그룹 Wn,k 에서의 워드 ω의 인덱스 (위치) 를 나타낸다. 아래의 표 6은 베르누이 확률, 즉, pkqn-k,p=0.9를 갖는 4-비트 블록에 대해 구성된 코드의 일 예이다.
Figure 112009035711493-PCT00067
표 6의 예시적인 코드는, 본 발명의 특정한 양태에 따라, 그룹 Wn,k 에서의 워드들과 그들의 코드워드들 사이의 제안된 매핑의 구조를 설명하기 위해 사용될 것이다. 그 코드는 호프만 알고리즘의 변형을 사용하여 구성되었으며, 그 알고리즘에서, 동일한 레벨에 위치된 코드워드들이 표현하는 입력 블록들과 동일한 사전 편찬적 순서를 그 코드워드들이 갖는다는 것을 보장하기 위해 부가적인 단계들이 취해졌다. 압축 효율도의 임의의 손실없이 그러한 재순서화가 가능하다는 것은 주지되어 있다. 이러한 재순서화 개념을 사용한 종래의 알고리즘들의 예는, 모팟 및 터핀에 의해 설명된 정준 코드들 및 호프만-샤넌-파노 코드들을 포함한다.
도 6은, 표 6의 예시적인 블록 코드들의 구조를 나타낸 코딩 트리를 도시한 다이어그램이다. 기대된 바와 같이, 각각의 그룹 Wn,k 은, 동일한 길이의 코드워드들을 포함하는 최대 2개의 서브-그룹들로 이루어진다. 일반적으로, 도 6의 코딩 트리에 의해 표현된 코드 구조 및 표 6의 블록 코드들은, 코드워드들의 그룹들, 및 그 그룹들 각각내의 코드워드들의 제 1 및 제 2 서브그룹들을 정의한다. 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함한다. 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다. 그 그룹들 각각에서의 코드워드들은, 직접 계산에 의한 인코딩 및 디코딩을 용이하게 하기 위해, 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화된다.
그룹의 일 예는 도 6의 참조 부호 (66) 에 의해 지정된다. 제 1 및 제 2 서브-그룹들의 예는, 도 6에서 각각 참조 부호 (68A, 68B) 에 의해 지정된다. 코딩 트리내의 각각의 가중치에 대해 유사한 그룹들 및 서브-그룹들이 제공된다. 그룹은 동일한 가중치 k를 갖는 블록들을 포함한다. 서브-그룹은 코딩 트리에서 동일한 레벨 및 동일한 가중치를 갖는 블록들을 포함한다. 이는, 그룹 Wn,k 의 모든 워드들이 동일한 확률 및 호프만 코드들의 소위 형제 (sibling) 특성을 갖는다는 사실로부터 명백하다. 이러한 관측은 샤넌 코드, 일반화된 샤넌 코드, 및 가능하게는 다른 알고리즘에 대해서도 참이다. 상술된 바와 같이, 그룹 Wn,k 는 동일한 길이의 코드워드들을 포함하는 최대 2개의 서브-그룹들을 포함하고,
Figure 112009035711493-PCT00068
와 같이 표현될 수 있으며, 여기서, l은 그룹 Wn,k 로부터의 블록들에 할당될 수 있는 가장 짧은 코드 길이이다. 또한, 그룹 Wn,k 내의 워드들이 사전 편찬적 순서를 따르기 때문에, Wn,k,l 과 Wn,k,l+1 사이의 분할은 간단히
Figure 112009035711493-PCT00069
와 같으며, 여기서, nk는 더 짧은 코드워드들을 갖는 서브그룹의 사이즈를 나타낸다. 따라서, 제 1 서브그룹이 3의 길이를 갖는 3개의 코드워드들을 갖고 동일한 그룹내의 제 2 서브그룹이 4의 길이를 갖는 하나의 코드워드를 가지면, nk (더 짧은 코드워드들을 갖는 서브그룹, 즉, 제 1 서브그룹의 사이즈) 는 3과 동일하다. 이러한 예는 도 6의 코딩 트리의 레벨 3 및 레벨 4와 관련된 그룹내의 서브그룹들에 대응하며, 여기서, 서브그룹 (68A) 은 각각 3의 길이를 갖는 코드워드들 001, 010 및 011를 갖고, 서브그룹 (68B) 은 4의 길이를 갖는 코드워드 0001을 갖는다.
예를 들어, 본 발명의 제 1 양태와 관련하여 상술된 바와 같이, 각각의 서브그룹에서 사전 편찬적으로 최소의 코드워드들은 베이스 코드워드들로서 지칭될 수도 있고,
Figure 112009035711493-PCT00070
와 같이 표현될 수도 있으며, 여기서, ωi는 그룹 Wn,k 에서 i번째 블록이다. 상기 설명된 바와 같이, 양자의 서브그룹들에서의 나머지 코드워드들은 다음과 같이 계산될 수 있음을 유의한다.
Figure 112009035711493-PCT00071
일 예시로서, 도 6의 코딩 트리의 레벨 3 및 4의 예에서와 같이, 길이 3의 3개의 코드워드들을 갖는 제 1 서브그룹 (68A) 및 길이 4의 하나의 코드워드를 갖는 제 2 서브그룹 (68B) 가 존재한다고 가정한다. 이러한 경우, 소정의 블록의 위치가 i=2이면, i<nk (nk는 3과 동일함) 이고, 결과적인 코드워드는 적용가능한 베이스 코드워드+i 이다. 이러한 예에서, 서브그룹에 대한 베이스 코드워드는 001이며, 결과적인 코드워드는 001+2=011 이다. 도 6의 코딩 트리의 레벨 3 및 4에 있어서, 적용가능한 코드워드의 위치가 i>= nk이면, 그 코드워드는 제 2 서브그룹에 존재할 것이며, 0000+4-3=0001과 동일한 0000+i-nk의 베이스 코드워드와 동일할 것이다.
베이스 코드워드들은 비어있지 않은 서브-그룹들에 의해서만 정의되며, n 비트 블록들에 대해 구성된 트리에서의 그러한 서브그룹들 S의 수는 다음의 범위내에 존재한다.
Figure 112009035711493-PCT00072
또한, 다수의 서브그룹들이 동일한 레벨상에 상주할 수 있으며, 그러한 병치된 서브-그룹들의 수는 n+1 보다 클 수 없다. 예를 들어, 도 6의 트리의 제 10 레벨에서, 코드워드들 1110 및 1111에 대응하는 2개의 서브그룹들이 존재한다. 그러나, 이들 서브-그룹들은 동일한 그룹에 속하지는 않는다. 이것은, 각각의 레벨에 대해 고유한 베이스 코드워드들을 할당하지만 그 후 그러한 코드들로 작동하기 위해 O(n2n)-큰 재순서화 표를 요구하는 다른 알고리즘들과는 현저한 차이이다. 이러한 경우, 전체 구조는 O(n2) 비트만큼 크다.
일반적으로, 이러한 코드 구조는 그룹들 W 및 서브그룹들 S를 정의한다. 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함한다. 그 그룹들 각각에서의 코드워드들은 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화된다. 또한, 각각의 그룹에서의 제 1 서브그룹은 제 1 길이를 갖는 코드워드를 포함하고, 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다. 코드 구조는, 가변 길이 코딩을 수행하기 위해 인코더에 의하여 액세스될 수 있는 데이터 구조에 의해 표현될 수도 있다. 본 발명은 가변 길이 인코딩 또는 디코딩에서의 그러한 코드 구조의 사용뿐만 아니라, 그러한 코드 구조를 정의하는 데이터 구조를 포함하는 컴퓨터-판독가능 매체를 고려한다.
다음으로, 상기 설명을 가정하여, 블록 코드들의 직접 계산을 위한 간단한 알고리즘이 설명될 것이다. 파라미터들
Figure 112009035711493-PCT00073
이 이용가능하고, 레벨 l 및 베이스 코드워드 Bn,k,l 이 각각의 비어있지 않은 서브-그룹에 대해 획득될 수 있다고 가정한다. 그 후, 블록 ω를 인코딩하는 프로세스는 다음의 단계들의 세트에 의해 본질적으로 달성될 수 있다.
1. 블록 ω가 주어지면, 그의 가중치 k 및 인덱스 In,k(ω) 를 획득한다.
2. In,k(ω)<nk 이면, 제 1 서브그룹 Wn,k,l 을 선택하고, 그렇지 않으면, 제 2 서브그룹 Wn,k,l+1 을 선택한다.
3. 그 후, 선택된 서브그룹 (Wn,k,l 또는 Wn,k,l+1) 에 대한 베이스 코드워드 (Bn,k,l 또는 Bn,k,l-1) 를 검색하고, 다음의 수학식에 따라 관련 코드를 계산한다.
Figure 112009035711493-PCT00074
상기 수학식에 따르면, 선택된 서브그룹 (Wn,k,l 또는 Wn,k,l+1) 에서의 블록 ω의 위치 i=In,k(ω) 가 서브그룹에서의 블록들의 수 nk 보다 작으면, 코드워드는 Bn,k,l+i 이다. 다른 방법으로, 선택된 서브그룹 (Wn,k,l 또는 Wn,k,l+1) 에서의 블록 ω의 위치 i가 서브그룹에서의 블록들의 수 nk 이상이면, 코드워드는 Bn,k,l+1+i-nk 이다.
상술된 바와 같이, 일 예로서, 도 6의 코딩 트리의 레벨 3 및 4에 있어서, 소정의 블록 코드의 위치가 i=2<nk 일 경우 상기 프로세스는 011의 코드워드를 산출하고, 소정의 코드의 위치가 i=3>=nk 일 경우 0001의 코드워드를 산출한다. 이러한 예에서, nk 는 3, 즉, 가중치 k=1에 대한 제 1 서브그룹 (68A) 에서의 코드워드들의 수이다. 위치 i의 순서는, 예를 들어, 도 6의 예에서 가중치 k=1의 경우 0으로부터 3까지의 베이스 코드워드로 사전 편찬적으로 시작하여 진행한다. 특히, 위치 0은 베이스 코드워드 001에 대응하고, 위치 1은 코드워드 010에 대응하고, 위치 2는 코드워드 011에 대응하고, 이들 모두는 제 1 서브그룹 (68A) (i<nk) 에 존재하며, 위치 3은 서브그룹 (68B) (i>=nk) 에서의 코드워드 0001에 대응한다.
이러한 프로세스는, 동일한 레벨에 위치된 코드워드들이 표현하는 입력 블록들과 동일한 사전 편찬적 순서를 그 코드워드들이 갖도록 그 코드워드들이 재순서화되는 것을 보장함으로써 용이하게 달성될 수 있다. 예를 들어, 상술된 코드워드들은 입력 블록들 0001, 0010, 0100, 및 1000 의 사전 편찬적 순서를 따른다. 그 후, 각각의 서브그룹에서의 사전 편찬적으로 최소의 코드워드들, 예를 들어, 서브그룹 (68A) 에서는 001 또는 서브그룹 (68B) 에서는 0001은, 상술된 코드워드 계산을 위해 베이스 코드워드들로서 사용될 수 있다. 상술된 바와 같은 블록 코드들의 직접 구성을 위한 프로세스의 일 예시적인 구현을 표현하는 C 언어 프로그램 코드가 아래의 표 7에서 개시된다.
Figure 112009035711493-PCT00075
상기 C-언어 코드에서, 값 k는 블록 ω의 가중치를 나타내고, 값 i는 가중치 k를 갖는 그룹내의 블록의 위치 (In,k(ω)) 를 나타내며, nk[k] 는 가중치 k를 갖는 그룹의 제 1 서브그룹에서의 코드워드들의 수를 나타낸다. i가 nk[k] 이상이면, i는 인덱스를 조정하도록 감분되며, 서브그룹은 적용가능한 가중치 k에 대해 제 2 서브그룹 (1) 으로 셋팅된다. 이러한 제 2 서브그룹은 j=sg[k][1] 에 의해 식별된다. i가 nk[k] 보다 작으면, i는 감분되지 않으며, 서브그룹은 적용가능한 가중치 k에 대해 제 1 서브그룹 (0) 으로 셋팅된다. 이러한 제 1 서브그룹은 j=sg[k][0] 에 의해 식별된다.
그 후, 적용가능한 서브그룹에 대한 베이스 코드워드 j(base[j]) 와 i의 값의 합산으로서 코드워드가 생성된다. 도 6의 예에 있어서, i의 값이 2이면, 코드는 서브그룹 (68A) 에 대한 베이스 코드워드 001 과 i의 값 (2) 의 합산일 것이며, 그 합산은 001+010=011 과 동일하다. 상기 수학식 (13) 을 참조하면, 서브그룹에 의존하여, 베이스 코드워드는 Bn,k,l 또는 Bn,k,l+1 중 어느 하나이고, i의 값은 i 또는 i-nk[k] 중 어느 하나이다. 따라서, 상기 코드는 일반적으로 수학식 (13) 에 의해 제공되는 결과에 대응한다. 코드워드 (code) 를 계산할 시에, 그 코드워드의 길이 (len) 는 적절한 서브그룹에 대한 코드 길이인 len[j] 로서 특정되며, 여기서, 제 2 서브그룹은 그 제 1 서브그룹보다 1 더 큰 코드 길이를 갖는다. 그 후, 인코딩 프로세스는 동작 put_bits(code, len, bs) 을 통해 비트스트림에 그 코드들을 기입하며, 그 동작은 codelen의 값을 비트스트림 bs에 기입한다. 그 비트스트림은 또 다른 디바이스에 의한 디코딩을 위해 송신된다. 그 프로세스는 다음 코드워드의 계산을 위해 가중치 k를 리턴한다.
상기 기술된 인코딩 프로세스는, 인코딩될 값의 가중치에 기초하여 그룹들 중 하나의 그룹을 선택하는 단계, 그 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 그 인코딩될 값의 사전 편찬적 위치에 기초하여 서브그룹들 중 하나의 서브그룹을 선택하는 단계, 그 선택된 서브그룹에 대한 베이스 코드워드 및 그 인코딩될 값의 사전 편찬적 위치에 기초하여 그 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하는 단계, 및 그 인코딩될 값을 그 선택된 코드워드로 인코딩하는 단계를 포함할 수도 있다. 서브그룹들 각각에 대한 베이스 코드워드, 그룹들 각각내의 코드워드들의 위치, 제 1 서브그룹 각각내의 코드워드들의 수, 및 서브그룹들 각각내의 코드워드들의 길이는, 가변 길이 코딩을 지원하기 위하여 인코더에 의해 액세스될 수 있는 데이터 구조에 저장될 수도 있다.
메모리 견지에서, 표 7에 나타낸 바와 같은 프로세스는 단지, S개의 베이스 코드워드들 (O(n)-비트 길이), n+1개의 값들 nk(O(n)-비트 길이), S개의 코드 길이들 (O(log n)-비트 길이), 및 2(n+1) 개의 서브그룹 인덱스들 (O(log n)-비트 길이) 만을 필요로 한다. 본 명세서의 다른 곳에서 설명된 바와 같이 베이스 코드워드들의 증분적인 값들을 저장함으로써, 부가적인 메모리 감소가 가능하다. S=O(n) 을 가정하면, 전체 데이터 구조는 단지 O(n2) 비트만을 필요로 한다. 표 7에 나타낸 특정 구현에서, 예를 들어, n-20 및 S=32를 가정하면, 이러한 데이터 구조의 사이즈는 244 바이트가 된다. 이것은, 직접 표 (direct table) 의 형태로 이러한 코드를 제공하는데 필요할 220 워드보다 훨씬 더 작다. 합리적으로 짧은 블록들, 예를 들어, n<=12...16에 있어서, 가중치들 및 인덱스들의 계산 (표 7의 프로세스에서 함수 weight(.) 및 index(.,.)) 은 단일 룩업의 문제일 수 있다. 이러한 경우, 전체 인코딩 프로세스는, 최대 1개의 비교, 2개의 부가 및 4개의 룩업을 필요로 할 수도 있다.
더 큰 블록에 있어서,
Figure 112009035711493-PCT00076
와 같은 주지된 조합식 (combinatorial formula) 이 사용될 수 있으며, 여기서, ωj 는 워드 ω의 개별 비트들을 나타내고, 모든 k>n에 대해
Figure 112009035711493-PCT00077
을 가정한다. 이러한 식을 구현하기 위해, 파스칼 삼각형에서의 레벨 n까지 모든 이항 계수 (binomial coefficient) 들을 사전-계산하거나,
Figure 112009035711493-PCT00078
Figure 112009035711493-PCT00079
와 같은 간단한 항등식을 사용하여 그들을 동적으로 계산할 수 있다. 사전-계산된 계수들에 기초한 구현은, 메모리의
Figure 112009035711493-PCT00080
워드들 (O(n3) 비트) 및 O(n) 부가를 요구한다. 계수들의 동적 계산은, O(n) 부가, 승산, 및 제산을 요구할 것이다. 그러나, 전체 프로세스는 정적 메모리가 아닌 몇몇 레지스터들만을 요구할 수도 있다. 인덱스 계산의 복잡도에 대한 부가적인 설명은, T. Tjalkens, Implementation cost of the Huffman-Shannon-Fano code, in Proc. Data Compression Conference (DCC'05)(Snowbird, Utah, March 29-31, 2005) 123-132 에서 발견될 수 있다.
다음으로, 상기 기술들을 구현하는 디코더 설계의 일 예가 설명될 것이다. 상술된 인코딩된 프로세스와 유사하게, 디코딩 프로세스는, 파라미터들 nk, 베이스 코드워드들 및 관련 길이들을 사용할 수도 있다. 편의를 위해, 다음의 설명은,
Figure 112009035711493-PCT00081
와 같은 베이스 코드워드 값들의 좌측-정렬된 버전에 의존할 것이며, 여기서, T는 머신 워드의 길이이다 (T>max l). 그 후, 예시적인 디코딩 프로세스는 다음과 같이 설명될 수 있다.
1. 비트스트림에서 T 비트보다 작은
Figure 112009035711493-PCT00082
를 갖는 최상단 서브그룹을 발견함;
2. 상기 수학식 (13) 에 기초하여 블록의 인덱스 In,k(ω) 를 디코딩함; 및
3. 그 블록의 가중치 k 및 인덱스를 사용하여 복원된 블록을 생성함.
상술된 바와 같은 디코딩 프로세스의 예시적인 구현을 나타내는 C 언어 코드가 아래의 표 8에서 제공된다.
Figure 112009035711493-PCT00083
표 8에 나타낸 예시적인 디코딩 프로세스는 좌측-정렬된 베이스 코드워드들 lj_base[S] 를 이용한다. 동작에서, 디코딩 프로세스는 비트스트림 버퍼의 콘텐츠 val을 수신하고, 그 비트스트림 버퍼 콘텐츠 val에 대응하는 베이스 코드워드를 갖는 코딩 트리내의 서브그룹을 식별한다. 예를 들어, 베이스 코드워드가 수신 코드워드 val보다 더 크게 되는 한, 그 프로세스는 코딩 트리내의 상이한 레벨에서의 서브그룹들을 통해 아래 방향으로 계속 횡단한다. 그러나, val 이하인 베이스 코드워드를 갖는 서브그룹에 도달할 경우, 그 서브그룹이 선택된다. 적절한 서브그룹을 발견할 시에, 그 프로세스는 그 서브그룹에 대한 코드 길이를 결정하고, 그 후, 디코딩된 비트들을 스킵하고 그 코드워드를 격리하기 위해 그 길이만큼 비트스트림을 스크롤한다. 디코딩 프로세스는, 비트스트림 버퍼 콘텐츠로부터 베이스 코드워드 값을 감산함으로써, 서브그룹내의 코드워드의 인덱스 위치 i를 결정한다.
예를 들어, 코드워드가 011이고 베이스 코드워드가 010이면, 이러한 차이의 결과는 2이며, 이는 그 코드워드가 서브그룹내의 가능한 위치들 0, 1, 및 2 중에서 위치 2에 존재한다는 것을 나타낸다. 32비트 와이드 레지스터의 예에 있어서, 이러한 차이는 32 마이너스 코드 길이 len 만큼 우측으로 시프트될 수도 있다. 그 후, 디코딩 프로세스는 관련 가중치 k 및 서브-그룹 인덱스 j를 검색하고, 인덱스 i를 복원한다. 그 후, 그 프로세스는 선택된 그룹내의 i번째 워드를 코드워드로서 생성하며, 가중치 k를 리턴한다. 식 kj[j].k 는 서브그룹의 가중치를 리턴하며, 식 kj[j].j 는, 소정의 가중치에 대한 제 1 서브그룹 (0) 또는 제 2 서브그룹 (1) 중 어느 하나를 나타내는 0 또는 1 중 어느 하나로서 서브그룹의 인덱스를 리턴한다. j=1 이도록 제 2 서브그룹이 선택되면, 인덱스 i는 nk[k] 의 값을 부가함으로써 조정된다. 그렇지 않고, 제 1 서브그룹이 선택되면, 인덱스 i는 조정되지 않는다. 함수 word() 는, 예를 들어, 상기 수학식 (13) 을 사용하여, 디코딩된 워드값으로서 n,k 그룹내의 i번째 워드를 리턴한다.
일반적으로, 인코더는 상술된 코드 구조에 따라 가변 길이 코딩을 수행할 수도 있으며, 여기서, 그 코드 구조는 그룹들 및 서브그룹들을 정의한다. 또한, 그 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함한다. 그 각각의 그룹내의 코드워드들은, 그 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화된다. 또한, 각각의 그룹내의 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 제 2 서브그룹은 그 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함한다.
코드 구조는, 가변 길이 코딩을 수행하기 위해 인코더 또는 디코더에 의하여 액세스될 수 있는 데이터 구조에 의해 표현될 수도 있다. 상술된 바와 같이, 데이터 구조는, 서브그룹들 각각에 대한 베이스 코드워드들, 그룹들 각각내의 코드워드들의 위치, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 서브그룹들 각각내의 코드워드들의 길이를 특정할 수도 있다. 이러한 데이터 구조는, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더, 또는 스피치 디코더 중 하나와 연결된 메모리에 저장될 수도 있으며, 필요에 따라 코딩 동작을 지원하기 위해 액세스될 수도 있다.
상술된 바와 같이, 엔트로피 디코딩 유닛 (52) 과 같은 디코더는, 코딩 트리의 하향 (상단으로부터 하단으로의) 탐색으로, 디코딩될 코드워드 이하인 베이스 코드워드를 갖는 서브그룹들 중 첫번째 서브그룹을 선택할 수도 있다. 그 후, 디코더는, 디코딩될 코드워드와 그 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 그 선택된 서브그룹내의 디코딩될 코드워드의 위치, 즉, 서브그룹 인덱스를 결정할 수도 있다. 디코더는, 그 선택된 서브그룹이 상주하는 그룹에 기초하여, 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하며, 그 선택된 서브그룹이 그룹에 대한 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 그 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치, 즉, 그룹 인덱스를 결정한다. 그 후, 디코더는, 그 디코딩될 코드워드에 의해 표현된 값의 가중치, 및 그 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치에 기초하여, 값들 중 하나의 값을 선택하며, 그 디코딩될 코드워드를 그 선택된 값으로 디코딩한다. 예를 들어, 그 값은 표 6의 블록 코드들 중 하나의 블록 코드에 대응할 수도 있다.
본 발명의 이러한 양태에 따라 고려되는 코드 구조 및 데이터 구조는, 계산 오버헤드, 메모리 이용도, 및 프로세싱 시간의 관점에서 효율도를 지원할 수도 있다. 예를 들어, 표 8의 예시적인 디코딩 프로세스는, 서브그룹을 발견하기 위한 1 내지 S개의 비교들 및 룩업들, 하나 또는 2개의 부가, 하나의 시프트 동작, 하나의 여분 비교, 및 3개의 여분 룩업들을 요구한다. 서브그룹을 탐색하기 위해 필요로 하는 단계들의 수는, 바이너리 탐색 트리에 베이스 코드워드들을 배치하거나 여분의 룩업 표를 사용함으로써 추가적으로 감소될 수 있지만, 이들 양자의 경우는 여분의 메모리를 희생한다.
디코딩 프로세스의 종료시에, 상술된 바와 같이, 코드워드에 대한 가중치 k 및 인덱스 In,k(ω) 는 (예를 들어, 표 8의 함수 word() 에 의해) 실제값들로 변환된다. 블록들이 합리적으로 짧으면, 이것은 간단한 룩업에 의해 달성될 수 있다. 그렇지 않으면, 예를 들어, D. A. Huffman, A method for the construction of minimum-redundancy codes. Proc. IRE, 40(Sept. 1952) 1098-1101 에서 설명된 바와 같은 열거식 (enumeration formula) 을 사용함으로써, 워드가 통합될 수 있다. 복잡도 관점에서, 이러한 프로세스는 인코더에서의 인덱스 계산과 유사하다.
상술된 인코딩 및 디코딩 프로세스를 사용하여, 데이터 블록들의 적응성 인코딩 및 디코딩을 위한 시스템이 정의될 수 있다. 이러한 예에 있어서, 입력 블록들이 다음의 조건하에서 인코딩될 수 있다고 가정한다.
1. 콘텍스트가 존재하지 않으며, 즉, 유니버셜 코드가 구현된다;
2. 콘텍스트가 이전에 관측된 하나의 블록에 의해 주어지며, 즉, t=n 이다;
3. 콘텍스트가 이전에 관측된 2개의 블록들에 의해 주어지며, 즉, t=2n 이다.
콘텍스트들로서 실제 블록들을 사용하는 것 대신에, (소스의 비메모리 특성으로 인해) 그들의 가중치들을 사용하기에 충분하다. 이것은, t비트 샘플들에 있어서, 그들의 가중치들 s에 의해 인덱스된 t+1개의 코드 구조들의 제공된 어레이가 존재한다는 것을 의미한다. 공간을 추가적으로 절약하기 위해, s 및 k에 관한 KT-분포의 대칭성이 사용될 수 있다. 특히, s>t/2 인 경우 매 시간마다 프로세스는 s=t-s를 대체하고 비트들을 플립 (즉, k=n-k 하게) 할 수도 있다. 이러한 방식으로, t/2+1 개의 표들을 정의하는 것만이 필요하다. 이러한 예에서, 적응성 코드에 의해 필요로 하는 메모리의 전체량은, 1+n/2+1+n+1 = 1.5n+3 개의 표들이 된다. 블록 사이즈들 n=8...20에 대한 특정한 메모리 추정치들을 아래의 표 9에 나타낸다.
Figure 112009035711493-PCT00084
상기 표들은, KT-추정된 밀도들을 사용하고, 본 발명에 따른 변형된 호프만 코드 구성 알고리즘을 사용하여 생성되었다. 본 발명에서 설명된 바와 같은 적응성 블록 코더를 구현하는 프로그램에 대한 컴퓨터 코드의 일 예가 아래에 개시된다.
Figure 112009035711493-PCT00085
Figure 112009035711493-PCT00086
Figure 112009035711493-PCT00087
Figure 112009035711493-PCT00088
Figure 112009035711493-PCT00089
Figure 112009035711493-PCT00090
Figure 112009035711493-PCT00091
Figure 112009035711493-PCT00092
다음으로, 블록 사이즈 n=16에 대한 여기에 설명된 바와 같은 적응성 코딩 프로세스의 성능 평가의 실험 결과가 설명될 것이고, 다른 주지된 알고리즘들과 비교될 것이다. 특히, 적응성 코딩 프로세스는, JBIG 이미지 코딩 표준에서 사용되는, W. B. Pennebaker, J. L. Mitchell, G. G. Langdon, Jr., R. B. Arps, An overview of the basic principles of the Q-Coder adaptive binary arithmetic coder, IBM J, Res. Dev., 32(6) (1988) 717에 설명되어 있는 Q-코더 알고리즘, 및 비디오 압축을 위한 ITU-T H.264/MPEG AVC 표준에서 사용되는, D. Marpe, H. Schwartz, and T. Wiegand, Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC video compression standard, IEEE Trans. on CSVT, 13(7):620-636, July 2003에 설명되어 있는 CABAC 알고리즘과 비교된다.
테스트들을 수행하기 위해, 확률 p를 갖는 바이너리 베르누이 소스로부터의 출력을 시뮬레이션하도록 컴퓨터-생성된 비트 시퀀스들이 사용되었다. 16 내지 1024 범위의 그러한 시퀀스들의 길이, 및 각각의 특정한 길이에 대하여, 그러한 시퀀스들의 Q=1000000 샘플들이 생성되었다. 상대적인 리던던시 레이트가 다음과 같이 계산되었다.
레이트=
Figure 112009035711493-PCT00093
본 발명에서 설명된 적응성 코딩 프로세스에 있어서, 콘텍스트들의 다음의 구조가 사용되었다.
1. 제 1의 16비트 블록이 콘텍스트 (유니버셜 코드) 없이 인코딩된다.
2. 그의 콘텍스트 (t=16을 갖는 코드) 로서 제 1 블록을 사용하여, 제 2 블록이 인코딩된다.
3. 시퀀스내의 2개의 이전 블록들을 콘텍스트 (t=32를 갖는 샘플-기반 코드) 로서 사용하여 제 3 및 모든 후속 블록들이 인코딩된다.
도 7a 및 7b는 p의 상이한 값들을 갖는 Q-코더 및 CABAC 기술들과 적응성 블록 코드의 리던던시 레이트들과의 비교를 도시한 그래프이다. 도 7a는 p=0.1 에 대한 결과를 도시하지만, 도 7b는 p=0.5 에 대한 결과를 도시한다. 도 8은, 적응성 블록 코드, Q-코더 및 CABAC 기술들에 대한 소스 데이터의 비대칭성에 대한 리던던시 민감도를 도시한 그래프이다. 실험 연구의 결과들이 도 7a, 7b 및 8에 도시되어 있다. 도 7a 및 7b는, y-축 상의 (평균 코드 길이-엔트로피)/엔트로피에 대한 x-축 상의 인코딩된 비트 수를 도시한다.
도 8은, y-축 상의 (평균 코드 길이-엔트로피)/엔트로피에 대한 x-축 상의 확률을 도시한다. 도 7a, 7b 및 8에서의 각각의 그래프는, 대응하는 라벨로, Q-코더, CABAC 및 적응성 코딩에 대한 플롯 (plot) 을 도시한다. 실험 결과들로부터, 본 발명에서 설명된 적응성 코드가 Q-코더 및 CABAC 알고리즘들 양자보다 훨씬 더 신속한 수렴 레이트를 가질 수도 있다는 것이 관측될 수 있다. 적응성 코딩 프로세스는 더 짧은 시퀀스들에 대해 Q-코더 및 CABAC 알고리즘들보다 성능이 뛰어나며, 인코딩된 비트들의 총 길이가 1024에 도달할 경우, Q-코더 및 CABAC 알고리즘들에 필적하게 된다. 도 8에 추가적으로 도시된 바와 같이, 160개의 인코딩된 비트들 (또는 그 후 16비트 블록) 이후, 적응성 코딩 프로세스는 Q-코더 및 CABAC 알고리즘과 비교하여 더 낮은 리던던시를 전달할 수 있다. 이러한 작동은 상술된 정리 1에 부합된다.
도 9는, 본 발명의 제 1 일반적인 양태에 따라 단조적인 분포에 대해 메모리 효율적인 가변 길이 코딩을 구성하기 위한 방법을 도시한 흐름도이다. 그 방법은, 인코더, 디코더, 또는, 도 2 및 3에 도시된 바와 같은 엔트로피 인코딩 유닛 (46) 및 엔트로피 디코딩 유닛 (52) 에 의한 사용을 위해 코드들을 구성하기 위한 또 다른 디바이스와 연결된 프로세서에 의해 구현될 수도 있으며, 비디오, 이미지, 스피치 및 오디오 데이터를 포함하지만 이에 제한되지는 않는 다양한 데이터 중 임의의 데이터의 압축 및 코딩을 지원할 수도 있다. 예를 들어, 그러한 프로세서는, 예를 들어, 가변 길이 코딩에 유용한 코드 구조 속성들을 정의하는 데이터 구조를 준비하기 위해, 인코더 또는 디코더 또는 범용 컴퓨팅 시스템 내에 제공될 수도 있다.
도 9에 도시된 바와 같이, 프로세서는 코딩될 입력 심볼들의 알파벳을 획득한다 (70). 그 심볼들은, 소정의 데이터 세트 또는 시퀀스내의 심볼들의 존재 또는 사용 빈도 또는 확률을 나타내는 각각의 가중치들을 갖는다. 관련 심볼 가중치들을 결정 (72) 할 시에, 프로세스는 심볼들의 가중치들에 기초하여 그 심볼들에 인덱스들을 할당하고 (74), 그 심볼들의 인덱스들 및 사전 편찬적 순서에 기초하여 그 심볼들에 코드들을 할당한다 (76). 따라서, 동일한 가중치들을 갖는 심볼들은, 본 발명에서 설명된 바와 같은 코딩 기술들을 용이하게 하기 위해 사전 편찬적으로 순서화될 수도 있다.
바이너리 코딩 트리에 의해 표현된 코드 구조에 따라 코드들이 구성될 수도 있다. 프로세서는 코딩 트리에서의 각각의 레벨에 대한 베이스 코드워드를 식별한다 (78). 그 베이스 코드워드는 트리내의 소정의 레벨에서 최소의 코드워드이며, 트리내의 그 레벨에서의 심볼들 중 사전 편찬적으로 가장 초기의 심볼에 대응한다. 콤팩트한 데이터 구조를 제공하기 위해, 프로세서는 베이스 코드워드들로부터 고정된 수 B의 선행 비트들을 제거하여, 부분적인 베이스 코드워드들을 생성한다 (80). 그 베이스 코드워드들은 좌측-정렬된 코드워드들로서 공식화될 수도 있으며, 선행 비트들은 좌측-정렬된 코드워드들에서 우측으로부터 좌측으로 진행하는 M개의 선행 비트일 수도 있다. 몇몇 구현에서, 제거되는 선행 비트들의 수는 8일 수도 있다. 다른 구현에서, 제거되는 선행 비트들의 수는 8보다 작거나 클 수도 있다.
코딩 트리의 많은 레벨에 있어서, M개의 선행 비트들은 제로일 것이다. 그러나, 몇몇 레벨에서, 선행 비트들은 트리내의 각각의 레벨에 대해 베이스 코드의 전부 또는 일부를 형성할 수도 있다. 이들 선택된 레벨에서, 프로세서는 스킵 표시자들을 생성한다 (82). 그 스킵 표시자들은, 선행 B 비트들의 제거시에 베이스 코드가 손실되지 않도록 디코더가 B 비트만큼 비트스트림을 스크롤하기 위한 명령을 제공한다. 프로세스는, 결과적인 부분적인 베이스 코드워드들, 코딩 트리의 각각의 레벨에서 코드워드들과 관련된 길이, 코딩 트리내의 코드워드들과 관련된 각각의 심볼들의 인덱스들을 나타내는 오프셋들, 및 선행 B 비트내에 적어도 부분적으로 존재하는 베이스 코드워드의 손실을 방지하기 위해 B 비트만큼 비트스트림이 스크롤되어야 할 때를 나타내는 하나 이상의 스킵 표시자들을 데이터 구조에 저장할 수도 있다 (84). 그 데이터 구조는 엔트로피 인코딩 유닛 (46) 및 엔트로피 디코딩 유닛 (52) 에 제공되어, 구성된 가변 코드들로 엔트로피 인코딩 및 디코딩 동작을 수행하는 것을 보조할 수도 있다. 데이터 구조는, 하나 이상의 단차 또는 다차 룩업 표들, 링크 리스트, 바이너리 트리, 라딕스 트리, 플랫 파일 등을 포함하는 다양한 형태를 취할 수도 있다.
도 10은 본 발명의 제 1 일반적인 양태에 따라서, 도 9의 방법에 따라 구성된 가변 길이 코드들을 사용하여 심볼들을 인코딩하기 위한 방법을 도시한 흐름도이다. 도 10에 도시된 바와 같이, 엔트로피 인코딩 유닛 (46) 은 심볼을 수신하고 (86), 그 심볼에 대한 인덱스를 결정하며 (87), 코딩 트리내의 대응하는 레벨을 식별하기 위해 그 심볼 인덱스를 오프셋 표와 비교한다. 특히, 엔트로피 인코딩 유닛 (46) 은, 그 심볼 인덱스가 트리의 소정의 레벨에 대해 오프셋 이상인지를 판정한다 (88). 그 심볼 인덱스는 가중치의 순서로 랭크되는 다른 심볼들 사이에서 심볼의 순서를 나타내며, 동일한 가중치의 심볼들은 심볼 알파벳과 부합하여 사전 편찬적으로 순서화된다. 오프셋은, 트리의 관련 레벨에 대한 코드 또는 코드들의 길이와 최대 코드 길이 사이의 차이이다. 도 4의 트리에서, 예를 들어, 최대 코드 길이가 16이고 그 트리의 레벨 3에서의 코드 길이가 3이면, 베이스 코드워드에 대한 관련 오프셋은 12이다.
심볼 인덱스가 트리의 현재 레벨에 대한 오프셋을 초과하지 않으면, 엔트로피 인코딩 유닛 (46) 은 하향 탐색으로 코딩 트리의 다음 레벨 (90) 로 아랫 방향으로 진행하며, 그 다음 레벨에 대한 오프셋과 심볼 인덱스와의 비교를 반복한다 (88). 심볼 인덱스가 코딩 트리의 특정 레벨에 대한 오프셋 이상이라고 엔트로피 인코딩 유닛 (46) 이 결정할 경우 (88), 엔트로피 코딩 유닛은 심볼에 대한 적절한 코드워드를 계산한다. 특히, 엔트로피 코딩 유닛 (46) 은, 트리의 현재 레벨에 대한 베이스 코드워드 플러스, 심볼 인덱스와 그 레벨에 대한 오프셋 사이의 차이와의 합산에 그 심볼에 대한 코드워드를 셋팅한다 (92).
도 4의 예시적인 트리를 사용할 경우, 심볼 인덱스가 14이면, 엔트로피 코딩 유닛 (46) 은, 트리의 레벨 3에 대한 베이스 코드워드에 할당된 12의 오프셋보다 14가 더 크기 때문에 심볼에 대한 코드가 그 레벨에 상주한다고 결정한다. 그 후, 엔트로피 코딩 유닛 (46) 은, 베이스 코드워드 (001)+(심볼 인덱스 (14)-오프셋 (12)) 로서 코드워드를 계산하며, 즉, 001+2=001+010=011 이다. 수신 심볼에 대한 코드를 셋팅 (92) 할 시에, 엔트로피 인코딩 유닛 (46) 은, 예를 들어, 엔트로피 디코딩 유닛 (52) 을 갖는 수신 디바이스로의 송신을 위해 비트스트림에 코드워드를 출력한다 (94). 그 후, 엔트로피 코딩 유닛 (46) 은 관련 데이터 시퀀스에서의 다음 심볼에 대해 그 프로세스를 반복한다.
도 11은 본 발명의 제 1 일반적인 양태에 따라서, 도 9의 방법에 따라 구성된 가변 길이 코드들을 디코딩하기 위한 방법을 도시한 블록도이다. 도 11에 도시된 방법은, 표 5에 나타낸 알고리즘과 동일 또는 유사한 알고리즘을 사용하여 수행될 수도 있다. 예시적인 구현에서, 엔트로피 디코딩 유닛 (52) 에 의해 코드들이 수신될 수도 있으며, 도 10을 참조하여 설명된 바와 같이 엔트로피 코딩 유닛 (46) 에 의해 인코딩될 수도 있다. 도 11에 도시된 방법은, 본 발명에 설명된 바와 같은 메모리 효율적인 디코딩 기술들을 사용할 수도 있으며, 그러한 코드들이 구성될 수 있는 콤팩트한 데이터 구조를 이용할 수도 있다. 도 11에 도시된 바와 같이, 엔트로피 디코딩 유닛 (52) 은 인커밍 비트스트림으로부터 코드워드를 수신한다 (96). 그 코드워드는, 비트스트림 버퍼로부터 검색되는 고정된 폭 W의 비트로부터 획득될 수도 있다. 그 코드워드는 좌측 정렬되거나 좌측 정렬된 포맷으로 변환될 수도 있으며, 폭 W는 우측으로부터 좌측으로 그 코드워드로부터 B 선행 비트들을 제거함으로써 감소될 수도 있다.
엔트로피 디코딩 유닛 (52) 은, 적절한 베이스 코드워드가 발견될 때까지 상단 레벨로부터 시작하고 하향 탐색으로 트리에 더 깊게 진행하여 코딩 트리의 상이한 레벨들에 대한 베이스 코드워드들과 그 코드워드를 비교한다. 특히, 엔트로피 디코딩 유닛 (52) 은, 트리의 현재 레벨에 대한 베이스 코드워드가 그 코드워드 이하인지를 판정할 수도 있다 (98). 그렇지 않다면, 디코딩 유닛은 트리의 다음 레벨 (100) 로 아랫 방향으로 계속되며, 그 다음 레벨과 관련된 베이스 코드워드에 대한 비교 (98) 를 반복한다. 그러나, 다음 레벨로 진행할 시에, 엔트로피 디코딩 유닛 (52) 은, 스킵 표시자가 그 현재 레벨과 관련되는지를 판정한다 (102). 관련된다면, 엔트로피 디코딩 유닛 (52) 은, 다음 레벨 (100) 로 진행하기 전에 고정된 증분만큼 비트스트림 버퍼를 스크롤한다 (104). 특히, 엔트로피 디코딩 유닛 (52) 은, 선행 M 비트를 드롭함으로써 코드워드가 손실되지 않도록 M 비트만큼 비트스트림 버퍼를 스크롤할 수도 있다. 스킵 표시 (102) 가 존재하지 않으면, 엔트로피 디코딩 유닛 (52) 은 다음 레벨 (100) 로 간단히 진행한다.
어느 경우이든, 엔트로피 디코딩 유닛 (52) 은 현재 레벨에 대한 베이스 코드워드와 코드워드를 다시 비교한다 (98). 베이스 코드워드가 그 코드워드 이하 (98) 인 레벨을 엔트로피 디코딩 유닛 (52) 이 발견할 경우, 엔트로피 디코딩 유닛 (52) 은 각각의 레벨에서 베이스 코드워드들의 잔여 길이를 결정하고 (106), 그 잔여 길이만큼 비트스트림을 스크롤한다 (108). 그 후, 엔트로피 디코딩 유닛 (52) 은, 그 레벨에 대한 오프셋, 및 그 베이스 코드워드와 디코딩될 코드워드 사이의 차이에 기초하여, 그 코드워드와 관련된 심볼을 계산한다 (110).
예를 들어, 도 4의 트리를 참조할 경우, 그 코드워드가 0110000000000000 이면, 드롭된 8개의 선행 비트들을 갖는 부분적인 절단 (truncated) 코드워드는 01100000 이다. 이러한 경우, 엔트로피 디코딩 유닛 (52) 은 그 코드워드 이하인 레벨 3에서 부분적인 베이스 코드워드 (00100000) 를 식별할 것이고, 3의 잔여 길이를 식별할 것이다. 엔트로피 디코딩 유닛 (52) 은 다음 코드워드를 수신하기 전에 비트스트림을 3비트 스크롤한다. 또한, 엔트로피 디코딩 유닛 (52) 은, 비트스트림 버퍼에서의 코드워드와 레벨 3에 대한 베이스 코드워드 사이의 차이에 그 레벨에 대한 오프셋을 부가함으로써, 그 코드워드에 대한 심볼을 계산한다. 예를 들어, 엔트로피 디코딩 유닛 (52) 은, offset[3]=12 플러스 코드워드 01100000 마이너스 00100000, 즉, 12 플러스 2=14 로서 코드를 계산한다. 이러한 경우, 14는 코드 011에 의해 표현되는 심볼의 인덱스이다.
도 11에 도시된 방법은, 본 명세서의 다른 곳에서 설명된 바와 같이, 매우 콤팩트한 데이터 구조 및 현저한 메모리 효율도를 이용할 수도 있다. 그 결과, 그러한 방법을 구현함으로써, 엔트로피 디코딩 유닛 (52) 은, 감소된 프로세싱 오버헤드, 감소된 메모리 이용도, 및 증가된 프로세싱 스피드를 포함하는 증가된 효율도를 제공할 수도 있으며, 이들 모두는 비디오 디코딩 디바이스, 또는 데이터 압축 및 디코딩을 위해 구성되는 다른 디바이스들에 바람직할 수도 있다.
도 12는 본 발명의 제 2 일반적인 양태에 따라 적응성 블록 코드들을 구성하기 위한 방법을 도시한 흐름도이다. 도 12의 방법은, 적응성 블록 코드들의 효율적인 직접 구성을 지원하기 위해, 코딩 디바이스내의 프로세서 또는 범용 프로세서내에 구현될 수도 있다. 도 12에 도시된 바와 같이, 프로세서는 코딩될 워드들의 세트를 획득한다 (112). 결과적인 코드 구조를 표현하는 데이터 구조는, 인코딩 디바이스, 디코딩 디바이스 또는 그 양자내의 메모리에 저장될 수도 있다. 그 워드들은 바이너리 코드들의 블록들일 수도 있다. 워드들의 가중치들을 결정 (114) 할 시에, 프로세서는 그 가중치들에 기초하여 그 워드들에 코드워드 그룹들을 할당한다 (116). 그 코드워드 그룹들은 동일한 가중치 k의 워드들에 대한 코드워드들을 포함하며, 예를 들어, 도 6에 도시된 바와 같이, 코딩 트리의 2개의 인접한 레벨들에 걸쳐있을 수도 있다.
도 12에 추가적으로 도시되어 있는 바와 같이, 프로세서는, 워드들의 길이에 기초하여 동일한 그룹들내의 워드들에 서브그룹들을 할당한다 (118). 특히, 그룹은 제 1 서브그룹 및 제 2 서브그룹을 포함할 수도 있다. 제 1 서브그룹은 동일한 길이 및 동일한 가중치를 갖는 하나 이상의 코드워드들을 포함한다. 유사하게, 제 2 서브그룹은 동일한 길이 및 동일한 가중치를 갖는 하나 이상의 코드워드들을 포함한다. 그러나, 제 1 서브그룹내의 코드워드들의 길이는, 제 2 서브그룹내의 코드워드들의 길이보다 작다. 따라서, 각각의 서브그룹은 동일한 가중치를 갖고 코딩 트리내의 동일한 레벨에 존재하는 코드워드들을 포함한다.
프로세서는 각각의 서브그룹에 대한 베이스 코드워드를 식별한다 (120). 그 베이스 코드워드는 서브그룹에서 최소의 코드워드이다. 도 6의 예에서, 서브그룹 (68A) 에 대한 베이스 코드워드는 001 이다. 그러나, 서브그룹 (68A) 은, 001의 베이스 코드워드 이외에 코드워드들 010 및 011 을 더 포함한다. 이러한 예에서, 비교적 적은 양의 계산이 주어져 코드들이 용이하고 직접적으로 계산될 수 있도록, 서브그룹내의 코드워드들은 그 코드워드들이 표현하는 워드들의 사전 편찬적 순서의 관점으로 순서화된다.
각각의 그룹의 제 1 서브그룹내의 엘리먼트들의 수는 코드워드들을 계산하기 위해 사용될 수도 있다. 그러한 목적으로, 프로세서는 각각의 그룹의 제 1 서브그룹에 엘리먼트들의 수를 저장하고 (122), 그룹 인덱스 매칭 (124), 서브그룹 코드 길이 매핑 (126), 및 서브그룹 베이스 코드워드 매핑 (128) 을 또한 저장한다. 그룹 인덱스 매핑은, 코드워드가 상주하는 그룹내의 워드에 대한 코드워드의 위치를 식별할 수도 있다. 서브그룹 코드 길이 매핑은 특정한 서브그룹내의 코드들의 길이를 식별할 수도 있다. 서브그룹 베이스 코드워드 매핑은 각각의 서브그룹과 관련된 베이스 코드워드를 식별할 수도 있다. 일반적으로, 그룹내의 워드의 인덱스가 주어지면, 특정한 서브그룹에 대한 베이스 코드워드로부터 코드가 복원될 수 있다. 저장된 정보는, 인코더, 디코더, 또는 그 양자에 의해 액세스될 수 있는 데이터 구조에 저장될 수도 있다.
도 13은 본 발명의 제 2 일반적인 양태에 따라서, 도 12의 방법에 따라 구성된 가변 길이 코드들을 사용하여 블록들을 인코딩하기 위한 방법을 도시한 흐름도이다. 도 13의 방법은, 예를 들어, 도 2의 엔트로피 인코딩 유닛 (46) 과 같은 엔트로피 인코딩 유닛내에서 구현될 수도 있다. 도 13에 도시된 방법은, 표 7에 도시된 알고리즘과 동일 또는 유사한 알고리즘을 사용하여 수행될 수도 있다. 도 13에 도시된 바와 같이, 소정의 워드를 인코딩하기 위해, 엔트로피 인코딩 유닛 (46) 은 그 워드의 가중치 (130) 및 그룹 인덱스 (132) 를 획득한다. 그 워드 가중치를 사용하여, 엔트로피 인코딩 유닛 (46) 은 적용가능한 코딩 트리내의 워드에 대한 그룹 인덱스 (132) 를 결정한다. 그룹 인덱스 In,k(ω) 는, 사전 편찬적 순서로 워드들을 저장하는 그룹 Wn,k 에서 워드 w 의 인덱스 (위치) 를 특정한다.
엔트로피 인코딩 유닛 (46) 은, 입력 워드에 대한 코드워드가 상주하는 그룹의 제 1 서브그룹내의 엘리먼트들의 수 nk 와 그룹 인덱스를 비교한다. 특히, 엔트로피 인코딩 유닛 (46) 은, 그 그룹 인덱스가 제 1 서브그룹내의 엘리먼트들의 수 이상인지를 판정한다 (134). 이상이라면, 엔트로피 인코딩 유닛 (46) 은 그룹에서 제 2 서브그룹, 즉, 서브그룹 1을 선택하고 (138), 그룹 인덱스 값을 감분시킨다 (140). 특히, 그룹 인덱스 값은 제 1 서브그룹내의 엘리먼트들의 수 nk만큼 감분된다. 그룹 인덱스가 제 1 서브그룹내의 엘리먼트들의 수보다 크지 않거나 동일하다면 (134), 엔트로피 인코딩 유닛 (46) 은 제 1 서브그룹, 즉, 서브그룹 0을 선택한다 (136). 각각의 서브그룹은 그 자신의 베이스 코드워드를 갖는다. 엔트로피 인코딩 유닛 (46) 은 그 선택된 서브그룹에 대한 베이스 코드워드를 획득하고 (142), 베이스 코드워드와 그룹 인덱스 값의 합산에 기초하여 코드워드를 계산한다 (144).
도 6의 예시적인 코딩 트리를 참조할 경우, 일 예시로서, 인코딩될 워드의 가중치가 2라고 가정하면, 그룹 인덱스 값은 2이고, 제 1 서브그룹내의 엘리먼트들의 수는 3이며, 예를 들어, 이는 코딩 트리의 레벨 3 및 4에서의 그룹에 대응한다. 이러한 경우, 엔트로피 인코딩 유닛 (46) 은, 그룹 인덱스 값 (2) 이 제 1 서브그룹내의 엘리먼트들의 수 (3) 보다 작기 때문에, 제 1 서브그룹 (서브그룹 0) 을 선택한다. 그 결과, 베이스 코드워드는 001이다. 워드를 인코딩하기 위해, 엔트로피 인코딩 유닛 (46) 은 001의 베이스 코드워드에 2의 그룹 인덱스 값을 부가하며, 011의 코드워드를 생성한다.
동일한 그룹에 있어서, 그룹 인덱스 값이 3이었다면, 엔트로피 코딩 유닛 (46) 은 제 2 서브그룹 (서브그룹 1) 을 선택할 것이다. 그러나, 엔트로피 코딩 유닛 (46) 은, 제 1 서브그룹 (서브그룹 0) 내의 엘리먼트들의 수 nk에 의해 그룹 인덱스 값만큼 감분될 것이다. 이러한 경우, 3의 그룹 인덱스 값은 3만큼 감소되어 제로가 될 것이며, 코드워드는 제 2 서브그룹에 대한 001의 베이스 코드워드 플러스 0의 그룹 인덱스 값으로서 계산될 것이며, 0001의 코드워드를 생성한다.
입력 워드에 대한 코드워드를 계산하는 것 이외에, 엔트로피 코딩 유닛 (46) 은 선택된 서브그룹내의 코드들의 길이를 획득할 수도 있다 (146). 상기 예에서, 레벨 3에서의 서브그룹 0에 대해, 그 코드들의 길이는 3일 것이다. 엔트로피 인코딩 유닛은, 엔트로피 디코딩 유닛 (52) 과 같은 엔트로피 디코딩 유닛을 포함하는 디코딩 디바이스와 같은 또 다른 디바이스로의 송신 및/또는 저장을 위해, 계산된 코드워드 및 서브그룹 코드 길이를 비트스트림으로 출력한다.
도 14는 본 발명의 제 2 일반적인 양태에 따라, 도 12 및 도 13의 방법들에 따라 구성된 가변 길이 코드들을 디코딩하기 위한 방법을 도시한 블록도이다. 도 14에 도시된 방법은, 표 8에 나타낸 알고리즘과 동일 또는 유사한 알고리즘을 사용하여 수행될 수도 있다. 가변 길이 코드들은 엔트로피 인코딩 유닛 (46) 을 포함하는 인코딩 디바이스와 같은 인코딩 디바이스로부터 수신될 수도 있다. 가변 길이 코드들은 엔트로피 디코딩 유닛 (52) 에 의해 수신 및 디코딩될 수도 있다. 도 14에 도시된 바와 같이, 엔트로피 디코딩 유닛 (52) 은 인커밍 비트스트림으로부터 코드워드를 수신하고 (150), 서브그룹 베이스 코드워드와 그 코드워드를 비교한다. 특히, 엔트로피 디코딩 유닛 (52) 은, 비트스트림 버퍼로부터 획득된 코드워드 콘텐츠들 이하인 좌측-정렬된 서브그룹 베이스 코드워드를 식별하기 위해, 적용가능한 코딩 트리를 탐색할 수도 있다 (152).
트리에서 소정의 레벨의 서브그룹에서의 서브그룹 베이스 코드워드가 코드워드보다 작지 않거나 동일하면 (152), 엔트로피 디코딩 유닛 (52) 은 트리에서의 다음 레벨 (154) 로 진행하고, 그 비교를 반복한다. 이러한 프로세스는, 베이스 코드워드가 비트스트림으로부터 수신된 코드워드보다 크게 유지되는 한, 즉, 서브그룹 베이스 코드워드가 그 코드워드 이하인 레벨에 엔트로피 디코딩 유닛 (52) 이 도달할 때까지, 반복적으로 계속된다. 코드워드와 베이스 코드워드를 비교할 시에, 엔트로피 디코딩 유닛 (52) 은, 본 발명의 제 1 양태에 따른 부가적인 메모리 감소를 위해 베이스 코드워드들의 부분적인 증분 값들을 사용할 수도 있다. 특히, 상술된 바와 같이, 다수의 선행 비트들이 드롭되어, 메모리 효율도를 개선시킬 수도 있다.
서브그룹 베이스 코드워드가 코드워드 이하인 코딩 트리의 레벨에 엔트로피 디코딩 유닛이 도달할 경우, 그 엔트로피 디코딩 유닛 (52) 은 서브그룹에 대한 코드 길이를 결정하고 (156), 디코딩된 비트들을 스킵하고 코드워드를 격리하기 위해 그 길이만큼 비트스트림을 스크롤한다. 엔트로피 디코딩 유닛 (52) 은, 베이스 코드워드를 사용하여 서브그룹내의 코드워드의 위치를 결정할 수도 있다 (158). 예를 들어, 엔트로피 디코딩 유닛 (52) 은 베이스 코드워드로부터 비트스트림 코드워드를 감산하여, 그 코드워드와 그 베이스 코드워드 사이의 위치 차이를 생성할 수도 있다.
일 예로서, 도 6의 코딩 트리를 참조할 경우, 인커밍 코드워드가 0110000000000000 이면, 엔트로피 디코딩 유닛 (52) 은, 그 코드워드 이하인 최상단 서브그룹 베이스 코드워드로서 베이스 코드워드 0010000000000000 를 식별할 것이다. 이러한 베이스 코드워드는 레벨 3 및 4의 그룹내의 제 1 서브그룹과 관련된다. 그 베이스 코드워드와 관련된 서브그룹의 코드 길이 (3) 를 결정할 시에, 엔트로피 디코딩 유닛 (52) 은, 디코딩된 비트들을 스킵하기 위해 비트스트림을 스크롤할 수도 있다. 엔트로피 디코딩 유닛 (52) 은, 비트스트림으로부터의 코드워드로부터 베이스 코드워드를 감산함으로써, 그 코드워드의 그룹 인덱스를 결정할 수도 있다. 이러한 예에서, 011 마이너스 001 은 010 을 산출하며, 이는 2의 그룹 인덱스 값을 생성한다.
또한, 엔트로피 디코딩 유닛 (52) 은, 예를 들어, 코딩 트리내의 서브그룹의 레벨에 기초하여, 코드워드의 가중치를 결정할 수도 있다 (160). 또한, 엔트로피 디코딩 유닛 (52) 은 서브그룹 인덱스, 즉, 코딩 트리내의 선택된 서브그룹의 인덱스를 결정할 수도 있다 (162). 가중치, 위치 및 서브-그룹 인덱스를 사용하여, 엔트로피 디코딩 유닛 (52) 은 워드 인덱스를 결정하며 (164), 그에 의해, 비트스트림으로부터의 코드워드를 디코딩하여, 그 코드워드에 의해 표현되는 워드를 생성한다. 또한, 몇몇 구현에서, 엔트로피 디코딩 유닛 (52) 에 의해 수행되는 디코딩 방법은 표 8에 나타낸 프로세스에 대응할 수도 있다.
당업자는, 정보 및 신호들이 다양한 서로 다른 기술들 및 기법들 중 임의의 것을 사용하여 표현될 수도 있다는 것을 이해할 것이다. 예를 들어, 상세한 설명 전반에 걸쳐 참조될 수도 있는 데이터, 명령어, 명령, 신호, 비트, 심볼, 및 칩은, 전압, 전류, 전자기파, 자기장 또는 자기 입자, 광학 필드 또는 광학 입자, 또는 이들의 임의의 조합에 의해 표현될 수도 있다.
또한, 당업자는, 여기에 개시된 실시형태들과 관련하여 설명된 다양한 예시적인 로직 블록, 모듈, 회로, 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 양자의 조합으로서 구현될 수도 있다는 것을 인식할 것이다. 하드웨어와 소프트웨어의 이러한 상호교환성을 명확히 나타내기 위해, 다양한 예시적인 컴포넌트, 블록, 모듈, 회로, 및 단계들이 그들의 기능의 관점에서 일반적으로 상술되었다. 그러한 기능이 하드웨어 또는 소프트웨어로서 구현될지는 전체 시스템에 부과된 특정 애플리케이션 및 설계 제약 조건에 의존한다. 당업자는 설명된 기능을 각각의 특정 애플리케이션에 대하여 다양한 방식으로 구현할 수도 있지만, 그러한 구현 결정이 본 발명의 범위를 벗어나게 하는 것으로 해석하지는 않아야 한다.
여기에 설명된 기술들은, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 그러한 기술들은, 범용 컴퓨터, 무선 통신 디바이스 핸드셋과 같은 다양한 디바이스들, 또는 무선 통신 디바이스 핸드셋 및 다른 디바이스들에서의 애플리케이션을 포함하는 다수의 사용법을 갖는 다양한 집적 회로 디바이스들 중 임의의 디바이스로 구현될 수도 있다. 모듈 또는 컴포넌트로서 설명된 임의의 피처들은, 집적 로직 디바이스에서 함께 또는 이산이지만 상호동작가능한 로직 디바이스들로서 개별적으로 구현될 수도 있다. 소프트웨어로 구현되면, 기술들은, 실행될 때 상술된 방법들 중 하나 이상을 수행하는 명령어들을 포함한 프로그램 코드를 포함하는 컴퓨터-판독가능 데이터 저장 매체에 의해 적어도 부분적으로 실현될 수도 있다. 컴퓨터-판독가능 데이터 저장 매체는 컴퓨터 프로그램 제품의 일부를 형성할 수도 있다. 컴퓨터-판독가능 매체는, 동기식 동적 랜덤 액세스 메모리 (SDRAM) 과 같은 랜덤 액세스 메모리 (RAM), 판독-전용 메모리 (ROM), 비-휘발성 랜덤 액세스 메모리 (NVRAM), 전기적으로 소거가능한 프로그래밍가능 판독-전용 메모리 (EEPROM), 플래시 메모리, 자성 또는 광 데이터 저장 매체 등을 포함할 수도 있다. 다른 방법으로 또는 부가적으로, 기술들은, 전파 신호 또는 파와 같이, 명령어 또는 데이터 구조의 형태로 프로그램 코드를 운반 또는 전달하고, 컴퓨터에 의해 액세스, 판독, 및/또는 실행될 수 있는 컴퓨터-판독가능 통신 매체에 의해 적어도 부분적으로 실현될 수도 있다.
프로그램 코드는, 하나 이상의 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 로직 어레이, 또는 다른 등가의 집적 또는 별개의 로직 회로와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 다른 방법으로, 그 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 또한, 프로세서는 컴퓨팅 디바이스들의 결합, 예를 들어, DSP와 마이크로프로세서의 결합, 복수의 마이크로프로세서들, DSP 코어와 결합한 하나 이상의 마이크로프로세서들, 또는 임의의 다른 그러한 구성으로서 구현될 수도 있다. 따라서, 여기에 사용된 바와 같은 "프로세서" 라는 용어는, 전술한 구조 또는 여기에 설명된 기술들의 구현에 적합한 임의의 다른 구조 중 임의의 구조를 지칭할 수도 있다. 또한, 몇몇 양태에서, 여기에 설명된 기능은, 인코딩 및 디코딩을 위해 구성되거나, 결합된 비디오 인코더-디코더 (코덱) 에 포함된 전용 소프트웨어 모듈 또는 하드웨어 모듈내에서 제공될 수도 있다.
본 발명의 다양한 실시형태들이 설명되었다. 이들 및 다른 실시형태들은 다음의 청구항의 범위내에 존재한다.

Claims (82)

  1. 코드 구조에 따라 가변 길이 코딩을 수행하는 단계로서, 상기 코드 구조는, 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하며, 상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 (lexicographically) 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 상기 가변 길이 코딩을 수행하는 단계; 및
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 가변 길이 코딩을 수행하는 단계는,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하는 단계; 및
    상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하는 단계를 포함하는, 방법.
  3. 제 2 항에 있어서,
    상기 데이터 구조는, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결된 메모리에 저장되는, 방법.
  4. 제 2 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 방법.
  5. 제 2 항에 있어서,
    상기 가변 길이 코딩을 수행하는 단계는 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하는 단계를 포함하며,
    상기 인코딩하는 단계는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하는 단계;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하는 단계;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하는 단계; 및
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는 단계를 포함하는, 방법.
  6. 제 5 항에 있어서,
    상기 인코딩된 값을 디코더에 송신하는 단계를 더 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 가변 길이 코딩을 수행하는 단계는 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하는 단계를 포함하며,
    상기 디코딩하는 단계는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하는 단계;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하는 단계;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하는 단계;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그 룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하는 단계;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하는 단계; 및
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는 단계를 포함하는, 방법.
  8. 제 7 항에 있어서,
    상기 선택된 값에 적어도 부분적으로 기초하여, 출력을 사용자에게 제공하는 단계를 더 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 방법.
  10. 코드 구조에 따라 가변 길이 코딩을 수행하는 수단으로서, 상기 코드 구조는, 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하며, 상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드 들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 상기 가변 길이 코딩을 수행하는 수단; 및
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하는 수단을 포함하는, 디바이스.
  11. 제 10 항에 있어서,
    상기 가변 길이 코딩을 수행하는 수단은,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하는 수단; 및
    상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하는 수단을 포함하는, 디바이스.
  12. 제 11 항에 있어서,
    비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결된 메모리에 상기 데이터 구조를 저장하는 수단을 더 포함하는, 디바이스.
  13. 제 11 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 디바이스.
  14. 제 11 항에 있어서,
    상기 가변 길이 코딩을 수행하는 수단은 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하는 수단을 포함하며,
    상기 인코딩하는 수단은,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하는 수단;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하는 수단;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하는 수단; 및
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는 수단을 포함하는, 디바이스.
  15. 제 14 항에 있어서,
    상기 인코딩된 값을 디코더에 송신하는 수단을 더 포함하는, 디바이스.
  16. 제 11 항에 있어서,
    상기 가변 길이 코딩을 수행하는 수단은 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하는 수단을 포함하며,
    상기 디코딩하는 수단은,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하는 수단;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하는 수단;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하는 수단;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하는 수단;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하는 수단; 및
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는 수단을 포함하는, 디바이스.
  17. 제 16 항에 있어서,
    상기 선택된 값에 적어도 부분적으로 기초하여, 사용자에게 출력을 제공하는 수단을 더 포함하는, 디바이스.
  18. 제 10 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 디바이스.
  19. 유형의 컴퓨터-판독가능 매체로서,
    프로세서로 하여금,
    코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하는 코드 구조에 따라 가변 길이 코딩을 수행하게 하며;
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하게 하는 명령어들을 포함하며;
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 컴퓨터-판독가능 매체.
  20. 제 19 항에 있어서,
    상기 프로세서로 하여금,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하게 하며;
    상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하게 하는 명령어들을 더 포함하는, 컴퓨터-판독가능 매체.
  21. 제 20 항에 있어서,
    상기 프로세서로 하여금, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결된 메모리에 상기 데이터 구조를 저장하게 하는 명령어들을 더 포함하는, 컴퓨터-판독가능 매체.
  22. 제 20 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 컴퓨터-판독가능 매체.
  23. 제 21 항에 있어서,
    상기 프로세서로 하여금, 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하게 하는 명령어들을 더 포함하며,
    상기 명령어들은 상기 프로세서로 하여금,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하게 하고;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하게 하고;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하게 하며;
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하게 하는, 컴퓨터-판독가능 매체.
  24. 제 23 항에 있어서,
    상기 프로세서로 하여금 상기 인코딩된 값을 디코더에 송신하는 송신기를 제어하게 하는 명령어들을 더 포함하는, 컴퓨터-판독가능 매체.
  25. 제 21 항에 있어서,
    상기 프로세서로 하여금, 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하게 하는 명령어들을 더 포함하며,
    상기 명령어들은 상기 프로세서로 하여금,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하게 하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하게 하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하게 하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하게 하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하게 하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하게 하는, 컴퓨터-판 독가능 매체.
  26. 제 25 항에 있어서,
    상기 프로세서로 하여금, 상기 선택된 값에 적어도 부분적으로 기초하여, 사용자에게 출력을 제공하는 출력 디바이스를 제어하게 하는 명령어들을 더 포함하는, 컴퓨터-판독가능 매체.
  27. 제 19 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 컴퓨터-판독가능 매체.
  28. 코드 구조에 따라 가변 길이 코딩을 수행하도록 구성되는 프로세서를 포함하며,
    상기 코드 구조는, 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하고, 상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되고, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들 을 포함하며,
    상기 프로세서는, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하도록 구성되는, 디바이스.
  29. 제 28 항에 있어서,
    상기 프로세서는,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하며;
    상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하는, 디바이스.
  30. 제 29 항에 있어서,
    상기 데이터 구조는, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결된 메모리에 저장되는, 디바이스.
  31. 제 29 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 디바이스.
  32. 제 29 항에 있어서,
    상기 프로세서는 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하며,
    상기 프로세서는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하고,
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하고,
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하며,
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는, 디바이스.
  33. 제 32 항에 있어서,
    상기 인코딩된 값을 디코더에 송신하는 송신기를 더 포함하는, 디바이스.
  34. 제 29 항에 있어서,
    상기 프로세서는, 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하며,
    상기 프로세서는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는, 디바이스.
  35. 제 34 항에 있어서,
    상기 선택된 값에 적어도 부분적으로 기초하여, 사용자에게 출력을 제공하는 출력 디바이스를 더 포함하는, 디바이스.
  36. 제 28 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 디바이스.
  37. 코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하는 단계,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하는 단계, 및
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하는 단계를 포함하며,
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 방법.
  38. 제 37 항에 있어서,
    상기 가변 길이 코딩을 수행하는 단계는 상기 값들 중 적어도 일부를 인코딩하는 단계를 포함하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 코드워드들인, 방법.
  39. 제 38 항에 있어서,
    상기 인코딩하는 단계는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하는 단계;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하는 단계;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하는 단계; 및
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는 단계를 포함하는, 방법.
  40. 제 37 항에 있어서,
    상기 가변 길이 코딩을 수행하는 단계는 상기 코드워드들 중 적어도 일부를 디코딩하는 단계를 포함하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 값들인, 방법.
  41. 제 40 항에 있어서,
    상기 디코딩하는 단계는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하는 단계;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하는 단계;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하는 단계;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하는 단계;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하는 단계; 및
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는 단계를 포함하는, 방법.
  42. 제 37 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 방법.
  43. 제 37 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 방법.
  44. 코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하는 수단,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하는 수단, 및
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하는 수단을 포함하며,
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길 이를 갖는 코드워드들을 포함하는, 디바이스.
  45. 제 44 항에 있어서,
    상기 가변 길이 코딩을 수행하는 수단은 상기 값들 중 적어도 일부를 인코딩하는 수단을 포함하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 코드워드들인, 디바이스.
  46. 제 45 항에 있어서,
    상기 인코딩하는 수단은,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하는 수단;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하는 수단;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하는 수단; 및
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는 수단을 포함하는, 디바이스.
  47. 제 44 항에 있어서,
    상기 가변 길이 코딩을 수행하는 수단은 상기 코드워드들 중 적어도 일부를 디코딩하는 수단을 포함하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 값들인, 디바이스.
  48. 제 47 항에 있어서,
    상기 디코딩하는 수단은,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하는 수단;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하는 수단;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하는 수단;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하는 수단;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하는 수단; 및
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는 수단을 포함하는, 디바이스.
  49. 제 44 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 디바이스.
  50. 제 44 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 디바이스.
  51. 유형의 컴퓨터-판독가능 매체로서,
    프로세서로 하여금,
    코드 구조에 대하여, 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하게 하고,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하게 하며,
    메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나 를 위해 상기 가변 길이 코딩의 결과를 생성하게 하는 명령어들을 포함하며,
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 컴퓨터-판독가능 매체.
  52. 제 51 항에 있어서,
    상기 명령어들은 상기 프로세서로 하여금 상기 값들 중 적어도 일부를 인코딩하게 하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 코드워드들인, 컴퓨터-판독가능 매체.
  53. 제 52 항에 있어서,
    상기 명령어들은 상기 프로세서로 하여금,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하게 하고;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하게 하고;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하게 하며;
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하게 하는, 컴퓨터-판독가능 매체.
  54. 제 51 항에 있어서,
    상기 명령어들은 상기 프로세서로 하여금 상기 코드워드들 중 적어도 일부를 디코딩하게 하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 값들인, 컴퓨터-판독가능 매체.
  55. 제 54 항에 있어서,
    상기 명령어들은 상기 프로세서로 하여금,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하게 하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하게 하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하게 하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하게 하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하게 하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하게 하는, 컴퓨터-판독가능 매체.
  56. 제 51 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 컴퓨터-판독가능 매체.
  57. 제 51 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 컴퓨터-판독가능 매체.
  58. 가변 길이 코드워드들을 특정하는 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하는 코드 구조에 대하여,
    상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹들 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 사용하여 가변 길이 코딩을 수행하고, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하도록 구성되는 프로세서를 포함하며,
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 디바이스.
  59. 제 58 항에 있어서,
    상기 프로세서는 상기 값들 중 적어도 일부를 인코딩하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 코드워드들인, 디바이스.
  60. 제 59 항에 있어서,
    상기 프로세서는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하고;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들에 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하고;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하며;
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는, 디바이스.
  61. 제 58 항에 있어서,
    상기 프로세서는 상기 코드워드들 중 적어도 일부를 디코딩하며,
    상기 가변 길이 코딩의 결과는 하나 이상의 값들인, 디바이스.
  62. 제 61 항에 있어서,
    상기 프로세서는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드 에 의해 표현되는 값의 가중치를 결정하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는, 디바이스.
  63. 제 58 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 디바이스.
  64. 제 58 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 디바이스.
  65. 유형의 컴퓨터-판독가능 매체로서,
    코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하는 가변 길이 코드 구조를 사용한 가변 길이 코딩을 위한 데이터 구조를 포함하며,
    상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되며, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고, 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하는, 컴퓨터-판독가능 매체.
  66. 제 65 항에 있어서,
    상기 데이터 구조는, 상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는, 컴퓨터-판독가능 매체.
  67. 코드 구조에 따라 가변 길이 코딩을 수행하도록 구성되는 프로세서를 포함하며,
    상기 코드 구조는, 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하고, 상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되고, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하 고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들을 포함하며,
    상기 프로세서는, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하도록 구성되는, 무선 통신 디바이스 핸드셋.
  68. 제 67 항에 있어서,
    상기 프로세서는, 상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하며, 상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하는, 무선 통신 디바이스 핸드셋.
  69. 제 68 항에 있어서,
    메모리를 더 포함하며,
    상기 데이터 구조는 상기 메모리에 저장되고, 상기 메모리는, 상기 무선 통신 디바이스 핸드셋 내에서, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결되는, 무선 통신 디바이스 핸드셋.
  70. 제 68 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 무선 통신 디바이스 핸드셋.
  71. 제 68 항에 있어서,
    상기 프로세서는 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하며,
    상기 프로세서는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하고;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하고;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하며;
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는, 무선 통신 디바이스 핸드셋.
  72. 제 71 항에 있어서,
    상기 인코딩된 값을 디코더로 송신하는 무선 송신기를 더 포함하는, 무선 통신 디바이스 핸드셋.
  73. 제 68 항에 있어서,
    상기 프로세서는, 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하며,
    상기 프로세서는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는, 무선 통신 디바이스 핸드셋.
  74. 제 73 항에 있어서,
    상기 선택된 값에 적어도 부분적으로 기초하여, 사용자에게 출력을 제공하는 출력 디바이스를 더 포함하는, 무선 통신 디바이스 핸드셋.
  75. 제 67 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 무선 통신 디바이스 핸드셋.
  76. 코드 구조에 따라 가변 길이 코딩을 수행하도록 구성되는 프로세서를 포함하며,
    상기 코드 구조는, 코딩 트리내의 코드워드들의 그룹들, 및 상기 그룹들 각각내의 코드워드들의 제 1 서브그룹 및 제 2 서브그룹을 정의하고, 상기 그룹들 각각은 동일한 가중치들을 갖는 값들을 표현하는 코드워드들을 포함하고, 상기 그룹들 각각내의 코드워드들은 상기 코드워드들에 의해 표현된 값들에 관해 사전 편찬적으로 순서화되고, 상기 제 1 서브그룹은 제 1 길이를 갖는 코드워드들을 포함하고 상기 제 2 서브그룹은 상기 제 1 길이와는 상이한 제 2 길이를 갖는 코드워드들 을 포함하며,
    상기 프로세서는, 메모리내의 저장, 디바이스로의 송신, 또는 사용자로의 제공 중 적어도 하나를 위해 상기 가변 길이 코딩의 결과를 생성하도록 구성되는, 집적 회로 디바이스.
  77. 제 76 항에 있어서,
    상기 프로세서는, 상기 서브그룹들 각각에 대한 베이스 코드워드들, 상기 그룹들 각각내의 코드워드들의 위치들, 제 1 서브그룹 각각내의 코드워드들의 수, 및 상기 서브그룹들 각각내의 코드워드들의 길이들을 특정하는 데이터 구조에 액세스하며, 상기 데이터 구조를 사용하여 상기 가변 길이 코딩을 수행하는, 집적 회로 디바이스.
  78. 제 77 항에 있어서,
    메모리를 더 포함하며,
    상기 데이터 구조는 상기 메모리에 저장되고, 상기 메모리는, 핸드셋내에서, 비디오 인코더, 이미지 인코더, 오디오 인코더, 스피치 인코더, 비디오 디코더, 이미지 디코더, 및 오디오 디코더 또는 스피치 디코더 중 하나와 연결되는, 집적 회로 디바이스.
  79. 제 77 항에 있어서,
    상기 베이스 코드워드들 각각은 각각의 서브그룹내의 사전 편찬적으로 최소의 코드워드인, 집적 회로 디바이스.
  80. 제 77 항에 있어서,
    상기 프로세서는 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 상기 값들 중 하나의 값을 인코딩하며,
    상기 프로세서는,
    인코딩될 상기 값의 가중치에 기초하여 상기 그룹들 중 하나의 그룹을 선택하고;
    상기 선택된 그룹의 제 1 서브그룹내의 코드워드들의 수에 관한 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 서브그룹들 중 하나의 서브그룹을 선택하고;
    상기 선택된 서브그룹에 대한 베이스 코드워드 및 상기 인코딩될 값의 사전 편찬적 위치에 기초하여, 상기 선택된 서브그룹내의 코드워드들 중 하나의 코드워드를 선택하며;
    상기 선택된 코드워드로 상기 인코딩될 값을 인코딩하는, 집적 회로 디바이스.
  81. 제 77 항에 있어서,
    상기 프로세서는, 상기 가변 길이 코딩을 수행하기 위해 상기 데이터 구조를 사용하여 코드워드들 중 하나의 코드워드를 디코딩하며,
    상기 프로세서는,
    코딩 트리의 하향 탐색으로, 서브그룹들 중에서, 디코딩될 상기 코드워드 이하인 베이스 코드워드를 갖는 첫번째 서브그룹을 선택하고;
    상기 디코딩될 코드워드와 상기 선택된 서브그룹에 대한 베이스 코드워드 사이의 차이에 기초하여, 상기 선택된 서브그룹내의 상기 디코딩될 코드워드의 위치를 결정하고;
    상기 선택된 서브그룹이 상주하는 그룹에 기초하여, 상기 디코딩될 코드워드에 의해 표현되는 값의 가중치를 결정하고;
    상기 선택된 서브그룹이 상기 그룹에 대해 제 1 서브그룹 또는 제 2 서브그룹인지의 여부에 기초하여, 상기 선택된 서브그룹이 상주하는 그룹내의 코드워드의 위치를 결정하고;
    상기 디코딩될 코드워드에 의해 표현되는 값의 가중치, 및 상기 선택된 서브그룹이 상주하는 그룹내의 상기 코드워드의 위치에 기초하여, 상기 값들 중 하나의 값을 선택하며;
    상기 선택된 값으로 상기 디코딩될 코드워드를 디코딩하는, 집적 회로 디바이스.
  82. 제 76 항에 있어서,
    상기 코드워드들에 의해 표현된 값들은, 비디오 데이터, 이미지 데이터, 스 피치 데이터 또는 오디오 데이터 중 적어도 하나를 표현하는, 집적 회로 디바이스.
KR1020097012290A 2006-11-14 2007-11-14 메모리 효율적인 적응성 블록 코딩 KR101095335B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US86582706P 2006-11-14 2006-11-14
US60/865,827 2006-11-14
US86708106P 2006-11-22 2006-11-22
US60/867,081 2006-11-22
US11/840,406 US7573407B2 (en) 2006-11-14 2007-08-17 Memory efficient adaptive block coding
US11/840,406 2007-08-17
PCT/US2007/084682 WO2008061143A2 (en) 2006-11-14 2007-11-14 Memory efficient adaptive block coding

Publications (2)

Publication Number Publication Date
KR20090089414A true KR20090089414A (ko) 2009-08-21
KR101095335B1 KR101095335B1 (ko) 2011-12-16

Family

ID=39267977

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097012290A KR101095335B1 (ko) 2006-11-14 2007-11-14 메모리 효율적인 적응성 블록 코딩

Country Status (11)

Country Link
US (1) US7573407B2 (ko)
EP (1) EP2095511B1 (ko)
JP (1) JP4897888B2 (ko)
KR (1) KR101095335B1 (ko)
CN (1) CN101542911B (ko)
AT (1) ATE485634T1 (ko)
BR (1) BRPI0718628A2 (ko)
CA (1) CA2668229A1 (ko)
DE (1) DE602007010034D1 (ko)
TW (1) TWI353120B (ko)
WO (1) WO2008061143A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013162283A1 (ko) * 2012-04-24 2013-10-31 엘지전자 주식회사 비디오 신호 처리 방법 및 장치

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8120515B2 (en) * 2006-09-29 2012-02-21 Agiledelta, Inc. Knowledge based encoding of data with multiplexing to facilitate compression
US8189683B2 (en) * 2006-11-28 2012-05-29 General Instrument Corporation Method and system for providing single cycle context weight update leveraging context address look ahead
US8411734B2 (en) 2007-02-06 2013-04-02 Microsoft Corporation Scalable multi-thread video decoding
JP2008227946A (ja) * 2007-03-13 2008-09-25 Toshiba Corp 画像復号装置
US20080247459A1 (en) * 2007-04-04 2008-10-09 General Instrument Corporation Method and System for Providing Content Adaptive Binary Arithmetic Coder Output Bit Counting
US8213499B2 (en) * 2007-04-04 2012-07-03 General Instrument Corporation Method and apparatus for context address generation for motion vectors and coefficients
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8228991B2 (en) * 2007-09-20 2012-07-24 Harmonic Inc. System and method for adaptive video compression motion compensation
US7609182B2 (en) * 2007-11-30 2009-10-27 Comtech Aha Corporation Generating dynamic huffman codes
US7663512B2 (en) * 2008-07-21 2010-02-16 Hon Hai Precision Industry Co., Ltd. Decoder and method for decoding a message using an arbitrary-side growing Huffman tree
US8554773B2 (en) * 2008-09-08 2013-10-08 Mobile Imaging In Sweden Ab Method for indexing images and for reading an index of an image
KR101738173B1 (ko) * 2008-09-28 2017-05-19 라모트 앳 텔-아비브 유니버시티 리미티드 플래시 메모리에서의 적응형 코딩 방법 및 시스템
US8671327B2 (en) 2008-09-28 2014-03-11 Sandisk Technologies Inc. Method and system for adaptive coding in flash memories
US8503527B2 (en) 2008-10-03 2013-08-06 Qualcomm Incorporated Video coding with large macroblocks
US8335256B2 (en) * 2008-11-14 2012-12-18 General Instrument Corporation Motion compensation in video coding
KR101118089B1 (ko) * 2008-12-10 2012-03-09 서울대학교산학협력단 가변장 복호화 장치 및 방법
US9076239B2 (en) * 2009-04-30 2015-07-07 Stmicroelectronics S.R.L. Method and systems for thumbnail generation, and corresponding computer program product
CN102461172B (zh) * 2009-06-18 2015-03-11 株式会社东芝 运动图像编码装置
US9628794B2 (en) 2009-06-18 2017-04-18 Kabushiki Kaisha Toshiba Video encoding apparatus and a video decoding apparatus
KR101675118B1 (ko) * 2010-01-14 2016-11-10 삼성전자 주식회사 스킵 및 분할 순서를 고려한 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
US7990297B1 (en) * 2010-02-26 2011-08-02 Research In Motion Limited Encoding and decoding methods and devices employing dual codesets
US8063801B2 (en) * 2010-02-26 2011-11-22 Research In Motion Limited Encoding and decoding methods and devices using a secondary codeword indicator
US8233534B2 (en) * 2010-04-09 2012-07-31 Newport Media, Inc. Frame buffer compression and memory allocation in a video decoder
CA2799763A1 (en) 2010-07-13 2012-01-19 Research In Motion Limited Methods and devices for data compression using context-based coding order
EP2599227B1 (en) 2010-07-28 2020-04-01 BlackBerry Limited Method and device for compression of binary sequences by grouping multiple symbols
US8879634B2 (en) 2010-08-13 2014-11-04 Qualcomm Incorporated Coding blocks of data using one-to-one codes
US8885704B2 (en) * 2010-10-01 2014-11-11 Qualcomm Incorporated Coding prediction modes in video coding
JP2012094959A (ja) * 2010-10-25 2012-05-17 Sony Corp 画像処理装置と画像処理方法およびプログラム
US9172963B2 (en) * 2010-11-01 2015-10-27 Qualcomm Incorporated Joint coding of syntax elements for video coding
US8885729B2 (en) 2010-12-13 2014-11-11 Microsoft Corporation Low-latency video decoding
US9706214B2 (en) 2010-12-24 2017-07-11 Microsoft Technology Licensing, Llc Image and video decoding implementations
US8755620B2 (en) 2011-01-12 2014-06-17 Panasonic Corporation Image coding method, image decoding method, image coding apparatus, image decoding apparatus, and image coding and decoding apparatus for performing arithmetic coding and/or arithmetic decoding
US8687904B2 (en) 2011-01-14 2014-04-01 Panasonic Corporation Image coding method, image coding apparatus, image decoding method, image decoding apparatus, and image coding and decoding apparatus which include arithmetic coding or arithmetic decoding
KR101955374B1 (ko) * 2011-06-30 2019-05-31 에스케이 텔레콤주식회사 고속 코딩 단위(Coding Unit) 모드 결정을 통한 부호화/복호화 방법 및 장치
SG10201408609SA (en) 2011-06-30 2015-02-27 Microsoft Technology Licensing Llc Reducing latency in video encoding and decoding
US9094689B2 (en) * 2011-07-01 2015-07-28 Google Technology Holdings LLC Motion vector prediction design simplification
US9338456B2 (en) * 2011-07-11 2016-05-10 Qualcomm Incorporated Coding syntax elements using VLC codewords
US8731067B2 (en) 2011-08-31 2014-05-20 Microsoft Corporation Memory management for video decoding
BR112014010539A2 (pt) 2011-11-04 2017-04-18 Motorola Mobility Llc escalonamento de vetor de movimento para rede de vetor de movimento não uniforme
US9819949B2 (en) 2011-12-16 2017-11-14 Microsoft Technology Licensing, Llc Hardware-accelerated decoding of scalable video bitstreams
US9172970B1 (en) 2012-05-29 2015-10-27 Google Inc. Inter frame candidate selection for a video encoder
US11317101B2 (en) 2012-06-12 2022-04-26 Google Inc. Inter frame candidate selection for a video encoder
US9491461B2 (en) * 2012-09-27 2016-11-08 Qualcomm Incorporated Scalable extensions to HEVC and temporal motion vector prediction
KR101650742B1 (ko) * 2012-09-28 2016-08-24 인텔 코포레이션 인터-레이어 인트라 모드 예측
KR102379609B1 (ko) 2012-10-01 2022-03-28 지이 비디오 컴프레션, 엘엘씨 향상 레이어 모션 파라미터들에 대한 베이스-레이어 힌트들을 이용한 스케일러블 비디오 코딩
US9503746B2 (en) 2012-10-08 2016-11-22 Google Inc. Determine reference motion vectors
US9485515B2 (en) 2013-08-23 2016-11-01 Google Inc. Video coding using reference motion vectors
JP5872513B2 (ja) * 2013-09-17 2016-03-01 株式会社東芝 符号化装置、復号化装置およびデータ処理システム
US9337862B2 (en) * 2014-06-09 2016-05-10 Tidal Systems, Inc. VLSI efficient Huffman encoding apparatus and method
US20160092492A1 (en) * 2014-09-27 2016-03-31 Qualcomm Incorporated Sharing initial dictionaries and huffman trees between multiple compressed blocks in lz-based compression algorithms
WO2016074147A1 (en) 2014-11-11 2016-05-19 Mediatek Singapore Pte. Ltd. Separated coding tree for luma and chroma
US10873437B2 (en) * 2016-08-11 2020-12-22 Sharp Kabushiki Kaisha Systems and methods for frequency-division duplex transmission time interval operation
US10547869B2 (en) 2017-12-08 2020-01-28 Google Llc Template-based entropy coding of quantized transform coefficients
US10609421B2 (en) 2018-07-12 2020-03-31 Google Llc Context derivation for coefficient coding
RU2701711C1 (ru) * 2019-01-09 2019-09-30 федеральное государственное автономное образовательное учреждение высшего образования "Национальный исследовательский ядерный университет МИФИ" (НИЯУ МИФИ) Устройство для упаковки данных
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11106437B2 (en) * 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11093682B2 (en) 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
WO2020194292A1 (en) * 2019-03-25 2020-10-01 Ariel Scientific Innovations Ltd. Systems and methods of data compression
TWI714184B (zh) * 2019-07-25 2020-12-21 中華電信股份有限公司 多階層網路樣式比對方法
IL294187A (en) 2019-12-23 2022-08-01 Ariel Scient Innovations Ltd Methods and systems for information compression

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0311883A (ja) * 1989-06-09 1991-01-21 Hitachi Ltd 可変長符号の復号化方式とファクシミリ装置、および静止画像伝送システム
US5226082A (en) * 1992-07-02 1993-07-06 At&T Bell Laboratories Variable length decoder
JP3278297B2 (ja) * 1994-07-20 2002-04-30 富士通株式会社 データ圧縮方法及びデータ復元方法並びにデータ圧縮装置及びデータ復元装置
JP3220598B2 (ja) * 1994-08-31 2001-10-22 三菱電機株式会社 可変長符号テーブルおよび可変長符号化装置
US5696507A (en) 1996-05-31 1997-12-09 Daewoo Electronics Co., Inc. Method and apparatus for decoding variable length code
US6188797B1 (en) 1997-05-27 2001-02-13 Apple Computer, Inc. Decoder for programmable variable length data
JP2003273746A (ja) * 2002-03-18 2003-09-26 Mitsubishi Electric Corp 可変長符号復号装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013162283A1 (ko) * 2012-04-24 2013-10-31 엘지전자 주식회사 비디오 신호 처리 방법 및 장치

Also Published As

Publication number Publication date
JP2010509895A (ja) 2010-03-25
WO2008061143A2 (en) 2008-05-22
KR101095335B1 (ko) 2011-12-16
TW200835175A (en) 2008-08-16
CN101542911A (zh) 2009-09-23
EP2095511A2 (en) 2009-09-02
CN101542911B (zh) 2012-11-07
DE602007010034D1 (de) 2010-12-02
TWI353120B (en) 2011-11-21
ATE485634T1 (de) 2010-11-15
US20080111722A1 (en) 2008-05-15
EP2095511B1 (en) 2010-10-20
US7573407B2 (en) 2009-08-11
CA2668229A1 (en) 2008-05-22
BRPI0718628A2 (pt) 2013-11-26
JP4897888B2 (ja) 2012-03-14
WO2008061143A3 (en) 2008-07-10

Similar Documents

Publication Publication Date Title
KR101095335B1 (ko) 메모리 효율적인 적응성 블록 코딩
KR101108465B1 (ko) 가변 길이 코드들의 메모리 효율적인 적응성 블록 코딩
RU2426227C2 (ru) Кодирование кодов переменной длины с эффективным использованием памяти
JP2010509895A5 (ko)
JP2010509893A5 (ko)
JP5313362B2 (ja) 可変長固定長コードの高速パーシング
US9768804B1 (en) Context initialization in entropy coding
US7626522B2 (en) Data compression using variable-to-fixed length codes
US11516474B2 (en) Context initialization in entropy coding
AU2019203279B2 (en) Context initialization in entropy coding

Legal Events

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

Payment date: 20141128

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161125

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170929

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee