KR101187243B1 - 가변-대-고정 길이 코드들의 빠른 분석 - Google Patents

가변-대-고정 길이 코드들의 빠른 분석 Download PDF

Info

Publication number
KR101187243B1
KR101187243B1 KR1020117015942A KR20117015942A KR101187243B1 KR 101187243 B1 KR101187243 B1 KR 101187243B1 KR 1020117015942 A KR1020117015942 A KR 1020117015942A KR 20117015942 A KR20117015942 A KR 20117015942A KR 101187243 B1 KR101187243 B1 KR 101187243B1
Authority
KR
South Korea
Prior art keywords
fixed length
code
length code
word
codes
Prior art date
Application number
KR1020117015942A
Other languages
English (en)
Other versions
KR20110102451A (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 KR20110102451A publication Critical patent/KR20110102451A/ko
Application granted granted Critical
Publication of KR101187243B1 publication Critical patent/KR101187243B1/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

Abstract

압축된 데이터를 분석 및 디코딩하기 위한 방법 및 시스템이 제공된다. 압축된 데이터의 랜덤한 세그먼트들은 대응하는 압축되지 않은 데이터 세트에서 압축해제될 수도 있고 적절히 위치할 수도 있다. 방법 및 시스템은 가변 대 고정 길이 (VF) 코딩 기술들을 이용한다. 몇몇 애플리케이션에 있어서, VF 코딩 기술들은 매체 인코더, 디코더, 또는 결합형 인코더-디코더 (CODEC) 내에서 구현될 수도 있다.

Description

가변-대-고정 길이 코드들의 빠른 분석{FAST PARSING OF VARIABLE-TO-FIXED-LENGTH CODES}
본 출원은 2008 년 12 월 9 일자로 출원된 미국 가출원 제 61/121,147 호에 우선권을 주장하고, 그 전체 내용은 참조로서 본원에 포함된다.
기술 분야
본 개시물은 데이터의 빠른 분석, 보다 구체적으로는 가변-대-고정-길이 코드들을 이용하여 압축된 데이터의 분석에 관한 것이다.
데이터 압축은 데이터 저장 공간, 송신 대역폭, 또는 양자 모두의 소비를 감소시키기 위해 다양한 애플리케이션들에서 널리 이용된다. 데이터 압축의 예시의 애플리케이션은 디지털 비디오, 이미지, 스피치 및 오디오 코딩을 포함한다. 디지털 비디오 코딩은, 예를 들어 디지털 텔리비전, 디지털 직접 방송 시스템, 무선 통신 디바이스, 개인 휴대 정보 단말기 (PDA), 랩톱 또는 데스크톱 컴퓨터, 디지털 카메라, 디지털 레코딩 디바이스, 비디오 게이밍 디바이스, 셀룰러 또는 위성 무선 전화기 등을 포함하는 괌범위한 디바이스들에서 이용된다. 디지털 비디오 디바이스는 MPEG-2, MPEG-4, 또는 H.264/MPEG-4 AVC (Advanced Video Coding) 와 같은 비디오 압축 기술들을 구현하여, 디지털 비디오를 더욱 효율적으로 송신 및 수신한다.
일반적으로, 비디오 압축 기술은 공간 예측, 모션 추정 및 모션 보상을 수행하여, 비디오 데이터에 내재하는 리던던시 (redundancy) 를 감소 또는 제거한다. 특히, 인트라-코딩은 공간 예측에 의존하여 주어진 비디오 프레임 내의 비디오에서의 공간적 리던던시를 감소 또는 제거한다. 인터-코딩은 시간 예측에 의존하여, 인접한 프레임들 내의 비디오에서의 시간적 리던던시를 감소 또는 제거한다. 인터-코딩에 있어서, 비디오 인코더는 모션 추정을 수행하여 2 이상의 인접한 프레임들 간의 매칭되는 비디오 블록들의 이동을 추적한다. 모션 추정은, 하나 이상의 참조 프레임들에서의 대응하는 블록들에 대하여 비디오 블록들의 변위를 나타내는 모션 벡터를 생성한다. 모션 보상은 모션 벡터를 이용하여 참조 프레임으로부터 예측 비디오 블록을 생성한다. 모션 보상 후에, 오리지널 비디오 블록으로부터 예측 비디오 블록을 차감함으로써 잔여 비디오 블록이 형성된다.
비디오 인코더는 비디오 코딩 프로세스에 의해 생성된 잔여 블록의 비트 레이트를 또한 감소시키기 위해 변환, 양자화 및 무손실 소스 코딩 프로세스들 (즉, 엔트로피 코딩) 을 적용한다. 무손실 코딩 기술들은 인코딩된 데이터의 저장 또는 송신 전에, 비디오 인코더의 최종 스테이지들에서 그리고 각종 다른 코딩 애플리케이션에서 이용된다. 무손실 소스 코딩은 일반적으로, 변환 및 양자화 동작에 의해 생성된 잔여 계수들을 또한 압축하기 위해 산술적 코드 또는 가변 길이 코드 (VLC) 의 애플리케이션을 포함한다. 무손실 코딩 기술들의 예들로는 콘텍스트 적응형 바이너리 산술 코딩 (context-adaptive binary arithmetic coding; CABAC) 및 콘텍스트 적응형 가변 길이 코딩 (context-adaptive variable length coding; CAVLC) 이 있고, 이는 몇몇 인코더에서 대안의 무손실 코딩으로서 이용될 수도 있다. 다른 가능한 무손실 코딩 기술들은, 가끔 VF 코드들로서 지칭된 가변-대-고정 길이 코드 (variable-to-fixed length code) 를 포함한다. 잘 알려진 VF 코드들의 예들은 턴스털 (Tunstall) 코드들 및 코닥 (Khodak) 코드들을 포함한다. 비디오 디코더는 무손실 디코딩을 수행하여 블록들 각각에 대한 잔여 정보를 압축해제하고, 모션 정보 및 잔여 정보를 이용하여 인코딩된 비디오를 재구성한다.
일반적으로, 본 개시물은, 데이터 압축과 같은, 각종 애플리케이션들에 대한 VF 코드들의 빠른 분석을 위한 기술에 관련된다. 예를 들어, 이러한 기술들은 압축된 데이터 세트의 랜덤한 세그먼트들을 디코딩하는데 적용될 수도 있다. 본원에 이용된 바와 같이, 코딩이란 용어는 일반적으로 인코딩, 디코딩, 또는 양자 모두를 지칭할 수도 있다. 본 개시물에 설명된 기술들은 턴스털 또는 코닥 알고리즘을 이용하여 구성된 VF 코딩 트리들의 산술적 특성을 이용할 수도 있고, 코드워드들의 구성, 인코딩, 및 디코딩을 위한 결합식 계산 (combinatorial enumeration) 을 이용할 수도 있다. 몇몇 애플리케이션에 있어서, VF 코딩 기술들은 매체 인코더, 디코더, 또는 결합형 인코더-디코더 (CODEC) 내에서 구현될 수도 있다. 또한, 몇몇 양태에서, 본 개시물에 따라 구성된 VF 코딩 트리를 정의하는 각종 속성들은 코딩 디바이스와 연관된 메모리 내에 저장된 메모리 효율적 데이터 구조에 제공될 수도 있다.
도 1 은 비디오 인코딩 및 디코딩 시스템을 나타내는 블록도이다.
도 2 는 비디오 인코더의 예를 나타내는 블록도이다.
도 3 은 비디오 디코더의 예를 나타내는 블록도이다.
도 4 는 VF 코딩 트리의 예를 나타내는 도면이다.
도 5 는 도 4 의 VF 코딩 트리의 도면이다.
도 6 은 VF 코드들의 메모리 효율적 구성을 위한 방법을 나타내는 흐름도이다.
도 7 은 도 6 의 방법에 따라 구성된 VF 코드들을 이용하여 워드들을 인코딩하기 위한 방법을 나타내는 흐름도이다.
도 8 은 도 6 의 방법에 따라 구성된 VF 코드들을 디코딩하기 위한 방법을 나타내는 흐름도이다.
도 9 는 도 6 의 방법에 따라 구성된 VF 코드들을 디코딩하기 위한 다른 방법을 나타내는 흐름도이다.
도 10 은 도 6 의 방법에 따라 구성된 VF 코드들에 대응하는 워드들의 길이를 결정하기 위한 방법의 형태에서 VF 분석을 나타내는 흐름도이다.
일반적으로, 본 개시물은 다양한 애플리케이션들, 예컨대 디지털 비디오, 이미지, 오디오, 또는 스피치 데이터의 코딩에 대해 가변 대 고정 길이 (VF) 코드들의 빠른 분석을 위한 기술에 관한 것이다. 본원에 이용된 바와 같은 "코딩" 이란 용어는 인코딩, 디코딩 또는 양자 모두를 지칭할 수도 있다. 본 개시물에 설명된 기술은 일반적인 데이터 압축 및 코딩을 포함하는 광범위한 실용적인 애플리케이션들에 적용 가능할 수도 있고, 본 개시물은 예시 및 도시의 목적을 위해 디지털 비디오 인코딩 및 디코딩을 지칭한다.
VF 코드들을 이용하는 코딩의 프로세스는 가변 길이의 워드들을 고정 길이 코드들로 인코딩하는 단계를 포함한다. 이들 고정 길이의 코드들은 저장되거나 다른 디바이스로 송신될 수도 있다. 고정 길이 코드들은 그 다음에, 가변 길이 코드들로 다시 디코딩될 수 있다. 이러한 기술들은 데이터 압축의 형태로서 유용할 수도 있다. 예를 들어, 압축되지 않은 비트 스트링 111011000011 은 하나 이상의 데이터 구조들 (예를 들어, 어레이) 의 표현일 수도 있다. 비트 스트링은 워드들 {11, 101, 1000, 011} 로서 지칭된 보다 짧은 비트 스트링의 시퀀스에 의해 표현될 수도 있다. 이들 워드들 각각은 VF 코드를 이용하여, 대응하는 고정 길이 코드로 인코딩될 수 있다. 예를 들어, 코드들이 워드들: {11 -> 0, 101->l, 1000->2, 011->3} 에 할당되면, 예시의 시퀀스는 0,1,2,3 으로서 인코딩될 수 있고, 여기서 각각의 코드워드는 2-비트 코드이다.
VF 코드는 VF 코드 트리에 의해 표현될 수 있다. 도 4 는 바이너리 VF 코드 트리 (400) 의 예이다. VF 코드는 복수의 워드들과 복수의 고정 길이 코드들 간의 한 쌍을 포함할 수도 있다. VF 코드 트리 (400) 에서의 리프 (leaf) 노드들 각각은 VF 코드에서의 워드를 표현한다. 내부 노드들은 VF 코드로 표현되지 않는다. 트리는 루트 노드 (64) 에서 시작하여 구성된다. 링크를 우측으로 하향 이동시키는 것은 0 의 비트 값을 표현한다. 링크를 좌측으로 하향 이동시키는 것은 1 의 비트 값을 표현한다. 따라서, 워드 11 은 루트 노드 (64) 에서 시작하여 2 개의 링크들을 좌측으로 하향 이동시킴으로써 표현된다.
트리 (400) 의 리프 노드들 각각은 넘버 0-16 으로 라벨링된다. 라벨링된 넘버는, 리프 노드가 표현하는 워드와 연관된 고정 길이 코드에 대응한다. 정의에 의해, 고정 길이 코드들은 동일한 길이의 코드 값들에 의해 표현된다. 몇몇 실시형태에서, 고정 길이 코드의 넘버들은 바이너리 스트링들이다. 넘버들 0-16 을 바이너리로 표현하기 위해서, 고정 길이 코드들 각각은 5 비트로 표현된다.
따라서, VF 코드 트리 (400) 에 따라, 워드 11 은 고정 길이 코드 00000 로 표현된다. 워드들 {101, 1000, 011} 은 고정 길이 코드들 {00010, 00110, 00001} 로 각각 표현된다. 따라서, 압축되지 않은 비트 스트링 111011000011 은 트리 (400) 의 VF 코드에 의해 압축된 비트 스트링 00000000100011000001 으로 인코딩될 수도 있다. 고정 길이 코드의 이용은 압축된 비트 스트링에서 고정 길이 코드들 중 어느 하나의 임의의 디코딩을 허용한다. 본 예에서 5-비트인, 고정 길이 코드 각각의 길이가 알려져 있기 때문에, 새로운 고정 길이 코드는 5-비트마다 시작한다. 따라서, 압축된 비트 스트링에서, 고정 길이 코드들은 위치들 0, 5, 10, 및 15 에서 시작한다. 따라서, 압축된 비트 스트링의 위치 5 에서 시작하는 고정 길이 코드 00010 은, 압축된 비트 스트링에서 남아있는 고정 길이 코드들을 디코딩하지 않고, 대응하는 워드 101 로 바로 디코딩될 수 있다.
그러나, 압축된 비트 스트링 00000000100011000001 에서 고정 길이 코드 00010 의 디코딩이 워드 101 을 생성하더라도, 압축되지 않은 비트 스트링에서 디코딩된 워드가 어디에 위치될지를 결정하지 않는다. 예를 들어, 오리지널 압축되지 않은 비트 스트링 111011000011 은 메모리 어레이의 콘텐츠에 대응할 수도 있다. 따라서, 본 예에서 어레이는 12 비트 길이이다. 전술된 바와 같이, 어레이는 압축된 비트 스트링으로 인코딩될 수도 있다. 압축된 비트 스트링을 디코딩하는 것은 그 다음에, 어레이에서의 정확한 위치에서 비트를 갖는 동일한 12-비트 어레이의 감소를 초래할 것이다. 본원에 설명된 분석 기술들은 압축되지 않은 비트 스트링에서 디코딩된 워드의 위치를 결정하는 신속한 방법을 제공한다.
본원에 설명된 바와 같은 분석 기술들은 임의로 디코딩된 고정 길이 코드에서 기인하는 워드의 위치를 결정하기 위해, 단지 디코딩된 고정 길이 코드 전에 오는 고정 길이 코드들과 연관되는 워드들 각각의 길이를 알 필요가 있다는 개념에 기초한다. 예를 들어, 상기 예에서, 하나의 고정 길이 코드 (00000) 는 압축된 비트 스트림에서 선택된 고정 길이 코드 (00010) 전에 위치한다. 선택된 고정 길이 코드 00010 에 대응하는 워드 101 의 위치를 결정하기 위해, 단지 고정 길이 코드 00000 과 연관된 워드 (11) 의 길이는 2 임을 알 필요가 있다. 따라서, 워드 101 은 압축되지 않은 비트 스트링의 위치 2 에서 시작한다고 알려져 있고, 여기서 제 1 위치는 위치 0 이다.
각각의 고정 길이 코드와 연관된 각 워드의 길이를 저장하는 것은 큰 메모리 저장장치를 필요로 한다. 그러나, 본원에 설명된 기술들은 고정 길이 코드들의 서브세트에 대해서만 알려지는 길이를 필요로 한다. 이 서브세트에서의 고정 길이 코드들 각각은 베이스 코드워드로서 지칭된다.
베이스 코드워드의 선택은 트리 (400) 와 같은 VF 코드 트리의 특성에 기초한다. 트리에서 각 워드의 길이는 트리에서 워드가 발견되는 레벨과 같다. 예를 들어, 워드 11 은 트리의 레벨 2 에서 발견되고, 1001 은 트리의 레벨 4 에서 발견된다. 따라서, 고정 길이 코드가 VF 코드 트리 상에서 연관되는 레벨을 결정함으로써, 고정 길이 코드와 연관된 워드의 길이는 확인 가능하다.
워드들과 연관된 고정 길이 코드들은 사전적인 (lexicographical) 순서로 할당된다. 따라서, 특정 레벨에서 주어진 리프 노드와 연관된 고정 길이 코드들은 임의의 보다 낮은 레벨 상의 고정 길이 코드들보다 값이 더 크다. 예를 들어, 고정 길이 코드 6 은 레벨 4 에 있다. 따라서, 트리의 특성에 의해, 고정 길이 코드 6 은 레벨 3, 2, 또는 1 상의 임의의 코드들보다 더 크다. 또한, 고정 길이 코드 6 은 보다 높은 레벨 상의 임의의 코드보다 작다. 상기 특성들을 이용하여, 임의의 고정 길이 코드와 연관된 워드의 길이는 트리의 각 레벨에서 가장 작은 사전적으로 오더링된 리스트를 이용하여 획득될 수 있다. 트리 (400) 에서, 가장 작은 사전적으로 오더링된 고정 길이 코드는 적어도 하나의 리프 노드를 포함하는 트리의 각 레벨에서 가장 우측 리프 노드와 연관된다.
예를 들어, 도 4 의 트리에서, 트리의 각 레벨에 대해 가장 작은 사전적으로 오더링된 고정 길이 코드들의 리스트는 {0, 1, 3, 10, 11, 12, 13, 14, 15} 이다. 이들 고정 길이 코드들 각각이 베이스 코드워드이다. 각각의 베이스 코드워드와 연관된 워드의 길이는 베이스 코드워드와 저장될 수 있다. 따라서, 모든 베이스 코드워드들과 연관된 워드들의 길이는 리스트를 이용하여 직접적으로 맵핑될 수 있다. 또한, 전술된 특성들을 이용하여, 임의의 고정 길이 코드와 연관된 워드의 길이가 결정될 수 있다. 선택된 고정 길이 코드와 동일하거나 작은 가장 큰 베이스 코드워드는 선택된 고정 길이 코드와 같은 VF 코드 트리의 동일한 레벨 상에 있다. 따라서, 선택된 고정 길이 코드와 연관된 워드의 길이는 선택된 고정 길이 코드와 동일하거나 작은 가장 큰 베이스 코드워드와 함께 저장된 길이와 동일하다. 예를 들어, 고정 길이 코드 6 과 동일하거나 작은 가장 큰 베이스 코드워드는 베이스 코드워드 3 이다. 베이스 코드워드 3 은 트리 (400) 의 레벨 4 상에 있고, 따라서 4 의 연관된 워드 길이를 갖는다. 따라서, 고정 길이 코드 6 은 4 의 연관된 워드 길이를 갖는다. 따라서, 베이스 코드워드들의 간단한 리스트를 저장하고 간단한 검색을 수행함으로써, 임의의 고정 길이 코드의 연관된 워드 길이가 결정될 수 있다.
상기는 VF 코딩 및 분석 기술들의 실시형태의 단지 일 예이다. 이 실시형태 및 다른 실시형태들이 이하에서 보다 상세히 설명된다.
본 개시물의 몇몇 양태에 따르면, VF 코딩 기술들은 감소된 양의 메모리 공간으로 VF 코드들의 인코딩 및 디코딩을 지원할 수도 있다. 예를 들어, 이러한 기술들은 바크만의 O 표기법 (Bachmann's O notation) 으로 최대 공간의 이차 양 (quadratic amount of space) O(L2) 을 필요로 하고, 여기서 L 은 VF 코딩 트리의 깊이이다. 공간의 이차 양 O(L2) 의 이용은, 컴퓨터 메모리에서의 코딩 트리들의 완전한 표현을 이용하는 다른 기술들에 의한, 공간의 익스포넨셜 사용 O(2L) 에 비해 실질적인 향상을 나타낼 수도 있다.
메모리 공간의 감소는, 본 개시물의 양태에 따라, 턴스털 또는 코닥 알고리즘을 이용하여 구성된, VF 코딩 트리들의 대수적 특성들을 이용하고, 코드워드들의 인코딩 및 디코딩을 위해 결합식 계산을 이용함으로써 달성될 수도 있다. 본 개시물에 설명된 기술들의 인코딩/디코딩 복잡도는 이러한 기술들에 의해 프로세싱된 심볼들의 수와 선형적일 수도 있다. 감소된 메모리 요건은 보다 큰 VF 코딩 트리들의 이용을 인에이블할 수도 있고, 또한 인코딩의 강화된 효율성 (즉, 보다 낮은 리던던시) 을 가져올 수도 있다.
본 개시물의 몇몇 다른 양태들에 따르면, VF 코딩 기술들은 빠른 분석 기술들을 이용하여 압축된 비트스트림에서 랜덤하게 선택된 코드워드들의 빠른 디코딩을 지원할 수도 있다. 예를 들어, 이러한 기술들은 압축되지 않은 비트스트림에서의 코드워드에 의해 표현된 문구의 위치를 결정하기 위한 동작들의 최대 O(log(D)) 수를 필요로 할 수도 있고, 여기서 압축된 비트스트림은 압축되지 않은 비트스트림의 인코딩된 표현이고, D 는 평균 디코딩된 문구 길이이다. 위치를 결정하기 위해 코드들의 풀 (full) 디코딩을 이용하는 다른 기술들은 O(D) 복잡도이다.
본 개시물의 각종 양태들이 더 상세히 설명될 것이다. 이하, 본 개시물에 설명된 VF 코드 구조들 및 VF 코딩 기술들과의 이용에 적합한 예시적인 비디오 코딩 시스템들의 설명이 제시된다. 이러한 코딩 시스템들 및 기술들은 인코딩, 디코딩 또는 양자 모두를 포함하는 코딩에 유용할 수도 있다.
도 1 은 비디오 인코딩 및 디코딩 시스템 (10) 을 나타내는 블록도이다. 도 1 에 도시된 바와 같이, 시스템 (10) 은 통신 채널 (16) 을 통해 수신 디바이스 (14) 로 인코딩된 비디오를 송신하는 소스 디바이스 (12) 를 포함한다. 소스 디바이스 (12) 는 비디오 소스 (18), 비디도 인코더 (20) 및 송신기 (22) 를 포함할 수도 있다. 수신 디바이스 (14) 는 수신기 (24), 비디오 디코더 (26) 및 비디오 디스플레이 디바이스 (28) 를 포함할 수도 있다. 시스템 (10) 은 본 개시물에 따라 디지털 비디오 데이터의 메모리 효율적 VF 코딩을 위한 기술을 적용하도록 구성될 수도 있다. 예를 들어, 메모리 효율적 VF 코딩 기술들은 예측 비디오 코딩 프로세스에 의해 생성된 잔여 블록 계수들의 무손실 코딩에 이용될 수도 있다. 예시로서, 기술들은 제로의 런 (runs of zero) 을 이용하여 넌제로 변환 계수들의 위치들을 코딩하는 비디오 코딩 방식들, 또는 다른 비디오 코딩 방식들에 적용될 수도 있다.
도 1 의 예에서, 통신 채널 (16) 은 무선 주파수 (RF) 스펙트럼 또는 하나 이상의 물리적 송신 라인들과 같은 임의의 무선 또는 유선 통신 매체, 또는 무선 및 유선 매체의 임의의 조합을 포함할 수도 있다. 채널 (16) 은 로컬 영역 네트워크, 와이드 영역 네트워크와 같은 패킷-기반 네트워크, 또는 인터넷과 같은 글로벌 네트워크의 일부를 형성할 수도 있다. 통신 채널 (16) 은 일반적으로, 소스 디바이스 (12) 로부터 수신 디바이스 (14) 로 비디오 데이터를 송신하기 위한 임의의 적합한 통신 매체, 또는 상이한 통신 매체의 집합을 나타낸다.
소스 디바이스 (12) 는 착신 디바이스 (14) 로의 송신을 위한 비디오를 생성한다. 그러나, 몇몇 경우, 디바이스들 (12, 14) 은 실질적으로 대칭적인 방식으로 동작할 수도 있다. 예를 들어, 디바이스들 (12, 14) 각각은 비디오 인코딩 컴포넌트 및 디코딩 컴포넌트를 포함할 수도 있다. 따라서, 시스템 (10) 은, 예를 들어 비디오 스트리밍, 비디오 브로드캐스팅, 또는 비디오 텔레포니를 위해 비디오 디바이스들 (12, 14) 간의 일방 또는 양방의 비디오 송신을 지원할 수도 있다. 다른 데이터 압축 및 코딩 애플리케이션에 있어서, 디바이스들 (12, 14) 은 이미지, 스피치 또는 오디오 데이터, 또는 2 이상의 비디오, 이미지, 스피치 및 오디오 데이터의 조합들과 같은 다른 유형의 데이터를 전송 및 수신, 또는 교환하도록 구성될 수 있다. 따라서, 비디오 인코딩 및 디코딩 애플리케이션의 논의는 예시의 목적으로 제공되고, 본원에 광범위하게 설명된 바와 같이 개시물의 각종 양태들의 한정으로 고려되지 않지 않아야 한다.
비디오 소스 (18) 는 하나 이상의 비디오 카메라들, 이전에 캡처된 비디오를 포함하는 비디오 아카이브, 또는 비디오 콘텐츠 제공자로부터 공급된 라이브 비디오와 같은 비디오 캡처 디바이스를 포함할 수도 있다. 다른 대안으로서, 비디오 소스 (18) 는 소스 비디오, 또는 라이브 비디오 및 컴퓨터 생성된 비디오의 조합과 같은 컴퓨터 그래픽 기반 데이터를 생성할 수도 있다. 몇몇 경우에서, 비디오 소스 (18) 가 카메라이면, 소스 디바이스 (12) 및 수신 디바이스 (14) 는 소위 카메라 폰 또는 비디오 폰을 형성할 수도 있다. 따라서, 몇몇 양태에서, 소스 디바이스 (12), 수신 디바이스 (14) 또는 양자 모두는 모바일 전화기 핸드셋과 같은 무선 통신 디바이스 핸드셋을 형성할 수도 있다. 각 경우에서, 캡처되고, 미리-캡처되고 또는 컴퓨터 생성된 비디오는 송신기 (22), 채널 (16) 및 수신기 (24) 를 통해 비디오 소스 디바이스 (12) 로부터 비디오 수신 디바이스 (14) 의 비디오 디코더 (26) 로의 송신을 위해 비디오 인코더 (20) 에 의해 인코딩될 수도 있다. 디스플레이 디바이스 (28) 는 액정 디스플레이 (LCD), 플라즈마 디스플레이 또는 유기 발광 다이오드 (OLED) 디스플레이와 같은 다양한 디스플레이 디바이스들 중 어느 하나를 포함할 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (26) 는 공간, 시간 및/또는 신호-대-잡음비 (SNR) 스케일러빌리티를 위해 스케일러블 비디오 코딩 (SVC) 을 지원하도록 구성될 수도 있다. 몇몇 양태에서, 비디오 인코더 (20) 및 비디오 디코더 (22) 는 SVC 에 대한 미세 입도 SNR 스케일러빌리티 (FGS) 를 지원하도록 구성될 수도 있다. 인코더 (20) 및 디코더 (26) 는 베이스 층 및 하나 이상의 스케일러블 강화 층들의 인코딩, 송신 및 디코딩을 지원함으로써 다양한 정도의 스케일러빌리티를 지원할 수도 있다. 스케일러블 비디오 코딩에 있어서, 베이스 층은 최소 레벨의 품질을 갖는 비디오 데이터를 반송한다. 하나 이상의 강화 층들은 보다 높은 공간, 시간 및/또는 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 멀티플렉서 프로토콜, 또는 사용자 데이터그램 프로토콜 (user datagram protocol; 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 표준은, 2005 년 3 월자, ITU-T 스터디 그룹에 의해, ITU-T 추천 H.264, 일반적 시청각 서비스를 위한 진보된 비디오 코딩에서 설명되고, 이는 본원에서 H.264 표준 또는 H.264 규격, 또는 H.264/AVC 표준 또는 규격으로서 지칭될 수도 있다.
몇몇 양태에 있어서, 비디오 방송을 위해, 본 개시물에 설명된 기술들은, 예를 들어 무선 비디오 브로드캐스트 서버 또는 무선 통신 디바이스 핸드셋을 통해, 기술 표준 TIA-1099 로서 공개된 FLO (Forward Link Only) 무선 인터페이스 규격인 "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast" ("FLO 규격") 을 이용하는 지상 모바일 멀티미디어 멀티캐스트 (TM3) 시스템에서 실시간 비디오 서비스를 전달하기 위해 강화된 H.264 비디오 코딩에 적용될 수도 있다. FLO 규격은 FLO 무선 인터페이스에 적합한 비트스트림 신택스와 시맨틱 (semantic) 및 디코딩 프로세스를 정의하는 예들을 포함한다. 다르게는, 비디오는 DVB-H (digital video broadcast-handheld), ISDB-T (integrated services digital broadcast-terrestrial), 또는 DMB (digital media broadcast) 와 같은 다른 표준들에 따라 브로드캐스트될 수도 있다. 따라서, 소스 디바이스 (12) 는 모바일 무선 단말기, 비디오 스트리밍 서버, 또는 비디오 브로드캐스트 서버일 수도 있다. 그러나, 본 개시물에 설명된 기술들은 임의의 특정 유형의 브로드캐스트, 멀티캐스트, 또는 포인트-대-포인트 시스템에 한정되지 않는다. 브로드캐스트의 경우에서, 소스 디바이스 (12) 는 다수의 수신 디바이스로 비디오 데이터의 여러 채널들을 브로드캐스트할 수도 있고, 수신 디바이스들 각각은 도 1 의 수신 디바이스 (14) 와 유사할 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (26) 각각은 하나 이상의 마이크로프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그래머블 게이트 어레이 (FPGA), 이산 로직, 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의의 조합으로서 구현될 수도 있다. 따라서, 비디오 인코더 (20) 및 비디오 디코더 (26) 의 각각은 집적 회로 (IC) 칩 또는 디바이스로서 적어도 부분적으로 구현될 수도 있고 하나 이상의 인코더들 또는 디코더들에 포함될 수도 있고, 이들 중 어느 하나는 각각의 모바일 디바이스, 가입자 디바이스, 방송 디바이스, 서버 등 내의 결합형 인코더/디코더 (CODEC) 의 일부로서 통합될 수도 있다. 또한, 소스 디바이스 (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) 는 본 개시물에 설명된 바와 같은 메모리 효율적 VF 코딩 기술들 및 VF 코드들의 빠른 분석을 위한 기술을 이용하도록 구성될 수도 있다. 특히, 비디오 인코더 (20) 및/또는 비디오 디코더 (26) 는, 메모리 활용, 프로세싱 오버헤드, 프로세싱 복잡도, 대역폭 소비, 데이터 저장 공간, 및/또는 전력 소비를 감소시키기 위해 이러한 기술들 중 적어도 일부를 적용하는 엔트로피 인코더 및 엔트로피 디코더 각각을 포함할 수도 있다.
도 2 는 도 1 에 도시된 비디오 인코더 (20) 의 예를 나타내는 블록도이다. 비디오 인코더 (20) 는 집적 회로 디바이스로서 총괄하여 지칭될 수도 있는 하나 이상의 집적 회로 디바이스들로서 적어도 부분적으로 형성될 수도 있다. 몇몇 양태에서, 비디오 인코더 (20) 는 무선 통신 디바이스 핸드셋 또는 브로드캐스트 서버의 일부를 형성할 수도 있다. 비디오 인코더 (20) 는 비디오 프레임들 내의 블록들의 인트라 코딩 및 인터 코딩을 수행할 수도 있다. 인트라 코딩은 공간 예측에 의존하여, 주어진 비디오 프레임에서의 비디오의 공간적 리던던시를 감소시키거나 제거한다. 인터 코딩은 시간 예측에 의존하여, 비디오 시퀀스의 인접한 프레임 내의 비디오에서의 시간적 리던던시를 감소시키거나 제거한다. 인터 코딩에 있어서, 비디오 인코더 (20) 는 모션 추정을 수행하여 인접한 프레임들 간의 매칭되는 비디오 블록의 이동을 추적한다.
도 2 에 도시된 바와 같이, 비디오 인코더 (20) 는 인코딩될 비디오 프레임 내의 현재 비디오 블록 (30) 을 수신한다. 도 2 의 예에서, 비디오 인코더 (20) 는 모션 추정 유닛 (32), 참조 프레임 저장부 (34), 모션 보상 유닛 (36), 블록 변환 유닛 (38), 양자화 유닛 (40), 역 양자화 유닛 (42), 역 변환 유닛 (44) 및 엔트로피 인코딩 유닛 (46) 을 포함한다. 비디오 인코더 (20) 는 또한, 메모리 (47) 를 포함하는 메모리를 포함할 수도 있고, 메모리는 본 개시물의 각종 양태에 따른 인코딩 또는 디코딩을 포함하는, VF 코딩에서의 이용을 위해 VF 코딩 트리에 의해 표현된 VF 코드 구조의 배열을 정의하는 속성들을 포함하는 하나 이상의 데이터 구조들의 콘텐츠를 포함하는 코딩 데이터의 저장 및 검색을 위한 엔트로피 인코딩 유닛 (46) 에 의해 이용될 수도 있다. 인-루프 디블록킹 필터 (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) 가 정수 픽셀 로케이션들보다 더 높은 정밀도로 모션을 추적하고 더 좋은 예측 블록을 획득하는 것을 허용하는, 하프 또는 쿼터 픽셀 정밀도, 또는 더 미세한 정밀도를 가질 수도 있다. 분수 픽셀 값을 갖는 모션 벡터들이 이용될 때, 모션 보상 유닛 (36) 에서 보간 동작이 수행된다. 모션 추정 유닛 (32) 은 레이트-왜곡 모델과 같은 특정 기준을 이용하는 비디오 블록에 대한 모션 벡터 또는 모션 벡터들 및 최선의 블록 분할을 식별한다. 예를 들어, 양방향 예측의 경우에서의 모션 벡터보다 더 많이 존재할 수도 있다. 결과의 블록 분할 및 모션 벡터들을 이용하여, 모션 보상 유닛 (36) 은 예측 비디오 블록을 형성한다.
비디오 인코더 (20) 는 합산기 (48) 에서 오리지널, 현재 비디오 블록 (30) 으로부터 모션 보상 유닛 (36) 에 의해 생성된 예측 비디오 블록을 감산함으로써 잔여 비디오 블록을 형성한다. 블록 변환 유닛 (38) 은 H.264/AVC 에서 이용된 4×4 또는 8×8 정수 변환과 같은 변환을 잔여 블록에 적용하여, 잔여 변환 블록 계수들을 생성한다. 양자화 유닛 (40) 은 잔여 변화 블록 계수들을 양자화하여, 비트 레이트를 또한 감소시킨다. 무손실 인코딩 유닛 (46) 은 양자화된 계수들을 엔트로피 코딩하여, 비트 레이트를 또한 감소시킨다.
무손실 인코딩 유닛 (46) 은 VF 인코딩 유닛과 같이 동작하여 양자화된 블록 계수들에 VF 인코딩을 적용한다. 특히, 엔트로피 인코딩 유닛 (46) 은 본 개시물에 설명된 바와 같은 메모리 효율적 VF 인코딩 기술들을 이용하여 디지털 비디오 블록 계수들의 VF 인코딩을 수행하도록 구성될 수도 있다. 따라서, 본 개시물에 설명된 각종 VF 인코딩 프로세스는 무손실 인코딩 유닛 (46) 에서 구현되어 비디오 데이터의 인코딩을 수행할 수도 있다. 다르게는, 이러한 무손실 인코딩 유닛 (46) 은 본 개시물에 설명된 프로세스들을 수행하여, 비제한적으로 비디오, 이미지, 스피치 및 오디오 데이터를 포함하는 다양한 데이터 중 어느 하나를 인코딩할 수도 있다. 일반적으로, 비디오 디코더 (26) 는, 예를 들어 도 3 을 참조하여 설명되는 바와 같이 인코딩된 비디오를 디코딩 및 재구성하기 위해 VF 디코딩 및 분석을 포함하는 역 동작들을 수행한다.
역 양자화 유닛 (42) 및 역 변환 유닛 (44) 은 역 양자화 및 역 변환을 각각 적용하여 잔여 블록을 재구성한다. 추가기 (50) 는 모션 보상 유닛 (36) 에 의해 생성된 모션 보상 예측 블록에 재구성된 잔여 블록을 추가하여, 참조 프레임 저장부 (34) 내의 저장을 위한 재구성된 비디오 블록을 생성한다. 재구성된 비디오 블록은 모션 추정 유닛 (32) 및 모션 보상 유닛 (36) 에 의해 이용되어, 후속하는 비디오 프레임 내의 블록을 인코딩한다.
도 3 은 비디오 디코더 (26) 의 예를 나타내는 블록도이다. 비디오 디코더 (26) 는, 집적 회로 디바이스로서 총괄하여 지칭될 수도 있는 하나 이상의 집적 회로 디바이스들로서 적어도 부분적으로 형성될 수도 있다. 몇몇 양태에서, 비디오 디코더 (26) 는 무선 통신 디바이스 핸드셋의 일부를 형성할 수도 있다. 비디오 디코더 (26) 는 비디오 프레임들 내의 블록들의 인트라 및 인터 디코딩을 수행할 수도 있다. 도 3 에 도시된 바와 같이, 비디오 디코더 (26) 는 비디오 인코더 (20) 에 의해 인코딩되어 있는 인코딩된 비디오 비트스트림을 수신기 (24)(도 1) 로부터 수신한다. 도 3 의 예에서, 비디오 디코더 (26) 는 엔트로피 디코딩 유닛 (52), 모션 보상 유닛 (54), 역 양자화 유닛 (56), 역 변환 유닛 (58), 및 참조 프레임 저장부 (62) 를 포함한다. 비디오 디코더 (26) 는 또한, VF 디코딩에서의 이용을 위해 VF 코딩 트리의 배열을 정의하는 속성들을 포함하는 하나 이상의 데이터 구조들의 콘텐츠들을 포함하는 코딩 데이터의 저장 및 검색을 위해 엔트로피 디코딩 유닛 (52) 에 의해 이용될 수도 있는, 메모리 (53) 를 포함하는 메모리를 포함할 수도 있다. 비디오 디코더 (26) 는 또한, 합산기 (64) 의 출력을 필터링하는 인-루프 디블록킹 필터 (미도시) 를 포함할 수도 있다. 비디오 디코더 (26) 는 또한, 합산기 (64) 를 포함한다. 도 3 은 비디오 블록들의 인터 디코딩을 위한 비디오 디코더 (26) 의 시간적 예측 컴포넌트들을 나타낸다. 도 3 에 도시되지 않았으나, 비디오 디코더 (26) 는 또한, 몇몇 비디오 블록들의 인트라 디코딩을 위한 공간 예측 성분들을 포함할 수도 있다.
무손실 디코딩 유닛 (52) 은 인코딩된 비디오 비트스트림을 수신하고, 모션 벡터 및 블록 파티션들을 포함할 수도 있는 비트스트림 양자화된 잔여 계수들, 매크로블록 코딩 모드 및 모션 정보로부터 디코딩한다. 따라서, 엔트로피 디코딩 유닛 (52) 은 VF 디코딩 유닛으로서 기능하고, VF 코딩 트리의 각종 속성들을 정의하도록 메모리 (53) 내에 저장된 데이터 구조에 의존할 수도 있다. 예를 들어, 도 2 의 무손실 인코딩 유닛 (46) 과 같이 인코딩된 비트스트림으로부터 양자화된 잔여 계수들을 디코딩하기 위해서, 도 3 의 엔트로피 디코딩 유닛 (52) 은 본 개시물에 설명된 바와 같은 디지털 비디오 블록 계수들의 메모리 효율적 VF 디코딩을 수행할 수도 있다. 그러나, 무손실 디코딩 유닛 (52) 은 인코딩된 비트스트림으로부터 양자화된 블록 계수들을 검색하기 위해서 도 2 의 무손실 인코딩 유닛 (46) 에 대하여 역 방식으로 VF 디코딩을 수행할 수도 있다. 무손실 디코딩 유닛 (52) 은 인코딩된 비트스트림에서 랜덤하게 선택된 코드워드들의 빠른 디코딩을 위해 VF 분석 기술들을 수행할 수도 있다. 본 개시물에 설명된 각종 디코딩 및 분석 프로세스들은 엔트로피 디코딩 유닛 (52) 내에서 구현되어, 비디오 데이터의 디코딩을 수행할 수도 있다. 다르게는, 이러한 무손실 디코딩 유닛 (52) 은 본 개시물에 설명된 프로세스들을 수행하여, 비제한적으로 비디오, 이미지, 스피치 및 오디오 데이터를 포함하는 다양한 데이터 중 어느 하나를 디코딩할 수도 있다. 어느 한 경우에서, 엔트로피 디코딩 유닛 (52) 에 의해 수행된 가변 길이 코딩의 결과는 사용자에게 출력되고, 메모리에 저장되며/되거나 다른 디바이스 또는 프로세싱 유닛들로 송신될 수도 있다.
모션 보상 유닛 (54) 은 모션 벡터 및 블록 파티션 및 참조 프레임 저장부 (62) 로부터의 하나 이상의 재구성된 참조 프레임들을 수신하여, 예측 비디오 블록을 생성한다. 역 양자화 유닛 (56) 은 역 양자화, 즉 양자화된 블록 계수들을 양자화 복원한다 (de-quantize). 역 변환 유닛 (58) 은 역 변환, 예를 들어 역 DCT 또는 역 4×4 또는 8×8 정수 변환을 계수들에 적용하여, 잔여 블록들을 생성한다. 예측 비디오 블록은 그 후, 잔여 블록들과 함께 합산기 (64) 에 의해 합산되어, 디코딩된 블록들을 형성한다. 디블록킹 필터 (미도시) 는 디코딩된 블록들을 필터링하도록 적용되어 블록킹 인공물을 제거할 수도 있다. 필터링된 블록들은 그 후, 후속하는 비디오 프레임들의 디코딩을 위해 참조 프레임을 제공하고 또한 디스플레이 디바이스 (28)(도 1) 를 구동하기 위해 디코딩된 비디오를 생성하는 참조 프레임 저장부 (62) 에 배치된다.
각종 데이터 구조를 지원하기 위한 VF 코딩의 메모리 효율적 기술들의 예들을 더 상세히 설명한다. 이들 코딩 기술들은 전술된 인코더 및 디코더 내에서 구현될 수도 있다. 무기억 소스 S 를 고려하자. 소스 S 는 입력 알파벳 A={a1,..., am}(2≤m<∞) 로부터 심볼들을 생성하고, 여기서 생성되는 각 심볼의 확률은 확률 {pi=P(ai), i=1,...,m} 을 갖는다. 생성되는 각 심볼의 확률들 모두의 합은 1 이다. 예를 들어, m=2 에서, a1 및 a2 에 대한 심볼은 각각 0 및 1 일 수도 있다. (P(1)) 의 확률은 0.6 일 수도 있고, P(O) 은 0.4 이다. 값들 Pmin, Pmax 는, 0<pmin≤pmax<1 라는 가정에서, 대응되어 최소 및 최대일 것 같은 심볼들의 확률을 가리킨다.
메시지
Figure 112011052609244-pct00001
은 소스 S 에 의해 생성된 심볼들의 무한-길이 시퀀스인 것으로 가정된다. 가변 길이 코딩의 주요 개념은, 워드들의 세트
Figure 112011052609244-pct00002
를 정의하기 위한 것이므로, 임의의 메시지
Figure 112011052609244-pct00003
는 X 로부터의 워드들의 시퀀스에 의해 고유하게 표현될 수 있고, 그 다음에 워드들 xj 을 출력 알파벳
Figure 112011052609244-pct00004
의 문자들로부터 형성된 코드워드들
Figure 112011052609244-pct00005
로 맵핑한다:
Figure 112011052609244-pct00006
맵핑
Figure 112011052609244-pct00007
은, 예를 들어, T. M. Cover 및 J. M. Thomas 의 Elements of Information Theory, (John Wiley & Sons, 뉴욕, 1991) 에서 설명된 바와 같이, 단사상 (injective) 이고, 출력 코드
Figure 112011052609244-pct00008
는 고유하게 디코딩가능한 것으로 가정된다.
본 개시물에 따르면, VF 코딩 기술들은 동일한 길이를 갖는 코드워드들
Figure 112011052609244-pct00009
을 생성하는 코딩 시스템에 적용될 수도 있다. 예를 들어,
Figure 112011052609244-pct00010
을 간단히 선택하고, 워드들 xj 의 인덱스들을 이용하여 이러한 워드들에 대한 코드를 생성하는 것이 가능하다. 이러한 코딩 시스템들에 의해 생성된 코드들은 가변-길이-대-블록 (VB) 또는 가변-대-고정-길이 (VF) 코드로서 지칭될 수도 있다. 일반적으로, 용어 VF 가 본 개시물에서 이용될 것이다.
주어진 소스 S 에 대한 VF 코드의 구성의 문제는 제약된 크기
Figure 112011052609244-pct00011
의 프리픽스-프리 세트 X 를 찾는 것을 포함하므로, 다음 소스의 인코딩의 평균 리던던시:
Figure 112011052609244-pct00012
(1)
는 최소이다. 이 경우, d(X, S) 는 평균 지연 (또는 X 에서의 워드의 평균 길이) 을 나타내고:
Figure 112011052609244-pct00013
(2)
h(S) 는 소스의 엔트로피이다:
Figure 112011052609244-pct00014
(3)
몇몇 경우에서, 이상적인 평균 리던던시를 최소화하는 프리픽스 세트 X 를 찾는 것이 충분할 수도 있다:
Figure 112011052609244-pct00015
(4)
상기 문제들은 유사하다.
무기억 소스들에 대한 최적의 VF-코드들의 구성을 위한 최선의 알려진 알고리즘은 B. P. 턴스털에 의해, B. P. Tunstall, Synthesis of Noiseless Compression Codes, Ph.D. dissertation,(Georgia Inst. Tech., Atlanta, Ga., 1968) 에서 설명되었다. 턴스털 코딩은 또한, F. Jelinek, 및 K. S. Schneider, On Variable-Length-to-Block Coding, IEEE Trans. Inf. Theory, 18 (6) (1972) 765-774 에서 설명 및 분석된다. 턴스털 코딩 프로세스는 입력 알파벳 A 의 문자들에 대응하는 m 개의 리프들에 연결된 단일 노드를 구성하는 트리
Figure 112011052609244-pct00016
를 이용하여 시작한다. 예를 들어, 도 4 의 노드 64 는 단일 시작 노드일 것이다. 도 4 는 바이너리 트리이고, 따라서 m=2 이며 제 1 단계에서, 노드 64 는 링크들 (66 및 68) 을 통해 2 개의 리프들에 연결된다. 그 다음에, 코딩 프로세스는 가장 높은 확률을 갖는 문자에 대응하는 리프를 골라내고 (pick), 새로운 리프들에 연결된 노드로 그것을 대체한다. 이 프로세스는, 각 단계에서 가장 높은 확률을 갖는 워드에 대응하는 리프를 골라내면서 연속적으로 반복된다. i 단계 후에, 이 코딩 프로세스는 (m-1)i+1 개의 리프들을 갖는 트리
Figure 112011052609244-pct00017
을 생성하는 것으로 보여질 수 있다. 이 트리는, [log((m-1)i+1)]-디짓 코드들로 용이하게 열거 및 맵핑될 수 있는, 워드들 X(
Figure 112011052609244-pct00018
) 의 프리픽스-프리 세트에 대응한다.
도 4 는 VF 코딩 트리의 예를 나타내는 도면이다. 도 4 의 VF 코딩 트리는 16 번의 반복 후에 확률 Pr(1)=O.2 를 갖는 바이너리 무기억 소스에 대한 턴스털 알고리즘에 의해 생성된 코딩 트리의 예이다. 표 1 은 도 4 의 트리의 노드들에 대한 코드들, 워드들, 및 확률 (Pr) 값들을 나타낸다.
Figure 112011052609244-pct00019
도 4 에 도시된 바와 같이, 코딩 프로세스는 루트 노드 (64) 로부터 외측으로 그리고 좌측 브랜치 (66) 및 우측 브랜치 (68) 를 따라 각각 확장된다. 코딩 프로세스는 표 1 의 가변 길이 워드들 각각에 고정 길이 코드를 할당하도록 트리의 브랜치들을 트레이싱한다 (trace). 도 4 의 트리에서 노드들 (0 내지16) 은 상기 표 1 에 나타난 각각의 가변 길이 입력 워드들에 대해 대응하는 고정 길이 코드들을 지정한다. 워드들은, 몇몇 워드들이 다른 워드들 보다 더 많은 심볼을 포함하도록 가변 길이를 갖는다. 도 4 및 표 1 의 VF 코드에서 코드 넘버들의 할당은 본 개시물에 따른 예시적인 기술들을 설명하는데 편리한 특정 순서로 행해진다. 그러나, 보다 일반적인 경우에서, 코드 넘버들의 할당은, 코드 넘버들의 모든 가능한 치환을 허용하면서 상이하게 행해질 수 있다.
턴스털 코딩 프로세스는 코딩 이론 및 그 이상에서 다수의 애플리케이션들을 위해 매우 잘 연구되고 이용되고 있다. 그 리던던시에 대한 단순한 바운드들은 G. L. Khodak 의 Connection Between Redundancy and Average Delay of Fixed-Length Coding, All-Union Conference on Problems of Theoretical Cybernetics (Novosibirsk, USSR, 1969) 12 (러시아), 및 F. Jelinek 및 K. S. Schneider 의 On Variable-Length-to-Block Coding, IEEE Trans. Inf. Theory, 18 (6) (1972) 765-774 에서 독립적으로 획득되고 설명되어 있다. 메모리를 갖는 소스들에 대한 턴스털 코드들의 일반화는 T. J. Tjalkens 및 F. M. J. Willems 의 Variable to Fixed- length codes for Markov sources," I.E.E.E. Trans. Inf. Theory IT-33, 246-257, 1987, 및 S. A. Savari, Robert G. Gallager 의 1997 년 3 월자, Generalized Tunstall codes for sources with memory, IEEE Trans. Info. Theory, vol. IT-43, pp. 658-668 에 의해 제안되고 있다. 그 리던던시 (4) 의 더욱 정확하고 점근적인 분석은 S. A. Savari 의 1998 년 4 월 30 일자, Variable-to-Fixed Length Codes for Predictable Sources, Proc IEEE Data Compression Conference, Snowbird, Utah, pp. 481-490, 및 M. Drmota, Y. A. Reznik, S. A. Savari, 및 W. Szpankowski 의 2006 년 7 월 9-14 일자, Precise Asymptotic Analysis of the Tunstall Code, IEEE International Symposium on Information Theory (ISIT06), Seattle, Wash., 에 의해 제공되고 있다. 균일한 분배의 근사치, 랜덤한 넘버 생성, 및 관련 문제를 위한 턴스털 알고리즘의 애플리케이션들이 논의되고 있다.
턴스털 코딩 프로세스 만이 가변-대-고정 길이 (VF) 코드들의 구성에 이용 가능한 기술은 아니다. G. L. Khodak 은, G. L. Khodak 의 Connection Between Redundancy and Average Delay of Fixed-Length Coding, All-Union Conference on Problems of Theoretical Cybernetics (Novosibirsk, USSR, 1969) 12 (러시아) 에서 다른 코드 구성 기술을 설명하였다. 코닥 프로세스는 또한, G. L. Khodak 의 Redundancy Estimates for Word-Based Encoding of Messages Produced by Bernoulli Sources, Probl. Inf. Trans., 8, (2) (1972) 21-32 (러시아), 및 R. E. Rrichevsky 의 Universal Data Compression and Retrieval. (Kluwer, 1993) 에서 설명된다. 코닥 프로세스는 도 4 의 노드 (64) 와 같은 단일 노드를 포함하는 트리를 이용하여 시작하고, 모든 트리의 리프들 x 가 다음을 만족할 때까지 계속해서 트리를 성장시킨다:
Figure 112011052609244-pct00020
(5)
여기서 N 은 고정된 실수 (N>l/pmin) 이다. 상기 컨디션 (5) 는, 결과의 트리
Figure 112011052609244-pct00021
에서의 리프들의 총 수가 다음을 만족한다는 것을 시사한다:
Figure 112011052609244-pct00022
(6)
상이한 N 의 값들을 선택함으로써, 컨디션 (5) 가 모든 리프들에 적용하기 때문에 소정의 입도 (granularity) 를 갖더라도 결과의 트리의 크기를 제어할 수 있다. 또한, 파라미터 N 을 갖는 코닥 기술을 이용하여 구성된 트리 ΔN
Figure 112011052609244-pct00023
단계들 후에 턴스털 기술을 이용하여 구성된 트리
Figure 112011052609244-pct00024
와 정확하게 동일한 것으로 보여질 수 있다. 따라서, 도 4 의 트리 (400) 는 턴스털 또는 코닥 기술 중 어느 하나를 이용하여 구성될 수 있다.
따라서, 턴스털 및 코닥 기술들은 동일한 문제를 해결하는데 이용될 수 있다. 턴스털 기술은 결과의 트리에서 리프들의 수에 대한 명백한 제어를 제공하는 이점을 갖는다. 한편, 코닥 방식은, 코딩 트리의 직접적인 구성을 수행하는데 이용될 수 있는, 표현식 (5) 마다, 코딩 트리의 간단한 대수적 특징을 제공한다. 턴스털 코드와 유사하게, 코드 인덱스들이 할당되는 순서를 선택하는데 있어서 유연성이 존재하고, 본 개시물의 양태들 중 하나는 이러한 할당의 특정 순서를 정의한다.
본 개시물에 따르면, VF 코드들의 효율적인 인코딩 및/또는 디코딩을 위한 기술들이 제공된다. 이러한 기술들은 비디오 코딩, 오디오 코딩, 보이스 코딩, 스피치 코딩 또는 다른 애플리케이션들에 적용될 수도 있다. 예를 들어, 턴스털 또는 코닥 알고리즘을 이용하여 구성된 VF 코딩 트리들의 대수적 특성들을 이용하고, 코드워드들의 인코딩 및/또는 디코딩을 위한 결합식 계산 기술들의 이용을 허용하면서 그 코드 인덱스들을 특정 순서로 재배열하여, 이 기술들은 실질적인 메모리 저장을 지원할 수도 있다. 예를 들어, 몇몇 양태에서, 이러한 기술들은 최대 메모리 공간의 이차 양 O(L2) 을 필요로 할 수도 있고, 여기서 L 은 코딩 트리의 깊이이다. 또한, 이러한 기술들의 코딩 복잡도는 기술들이 프로세싱하는 심볼들의 수와 선형적일 수도 있다.
2 개의 단순한 정리 (lemma) 는 본 개시물에 따른 VF 코딩 트리에서의 내부 코드들의 직접적인 계산을 지원한다.
정리 1 에 따르면, 코닥 컨디션 (5) 를 만족하는 트리
Figure 112011052609244-pct00025
에서의 내부 노드들
Figure 112011052609244-pct00026
의 확률은 다음의 특성을 갖는다:
Figure 112011052609244-pct00027
(7)
증명: 컨디션 (5) 및 P(ω) 은 리프의 확률보다 커야 한다는 사실로부터 바로 뒤따른다.
정리 2, 임의의 스트링
Figure 112011052609244-pct00028
에 따르면,
Figure 112011052609244-pct00029
(8)
은 상기 코닥 컨디션 (5) 를 만족하는, 트리
Figure 112011052609244-pct00030
의 기존의 내부 노드를 초래한다.
증명: 이것이 정확하지 않으면, 외부 노드를 초래하는 프리픽스 u:ω=uv,|u|>0, |v|>0 이 존재해야 한다. 그 다음에, 상기 컨디션 (5) 에 따르면, P(u) <
Figure 112011052609244-pct00031
가 사실 (true) 이어야 한다. 그러나, 이것은 상기 식 (8) 및 P(ω)=P(u)P(v)<P(u) 인 사실을 부정한다.
코닥 알고리즘을 이용하여 구성된 트리들에서의 리프들의 확률들에 대한 보다 타이트한 바운드들은 다음의 정리들에 따라 도출될 수 있다. 정리 3 에 따르면, 상기 컨디션 (5) 를 만족하는 트리
Figure 112011052609244-pct00032
의 α-브랜치들 (
Figure 112011052609244-pct00033
) 에 부착된 리프들 x 는 다음의 특성들을 갖는다:
Figure 112011052609244-pct00034
(9)
증명: 스트링 ω 에 대응하는 내부 노드를 고려하자. 그것의 칠드런은 ω:ωα,
Figure 112011052609244-pct00035
의 단일-문자 확장들에 대응한다. 노드 ωα 가 외부 노드가 되면, 상기 코닥 컨디션 (5) 에 따라 다음을 만족한다:
Figure 112011052609244-pct00036
(10)
ω 가 내부이기 때문에 (cf. 정리 1):
Figure 112011052609244-pct00037
(11)
이다.
상기 표현식들 양자 모두를 결합하여 표현식 (9) 를 생성한다.
정리 4, 모든 스트링
Figure 112011052609244-pct00038
에 따르면:
Figure 112011052609244-pct00039
(12)
은 코닥 컨디션 (5) 를 만족하는 트리
Figure 112011052609244-pct00040
에서의 리프들에 바로 연결되는 α-브랜치들을 갖는 내부 노드들에 대응한다. 증명: 표현식 (12) 의 좌측은 ω 가 트리
Figure 112011052609244-pct00041
에서의 유효한 내부 노드인 것을 보장한다 (cf. 정리 2). 또한, 컨디션 (5) 가 ωα 에 대해 만족되므로, 리프이어야 한다는 것을 시사한다. 코닥의 컨디션 (5) 는 리프들의 확률 상의 제한으로서 포뮬레이팅되지만, 그 직접적인 계산에 이용될 수 없다. 컨디션 (5) 를 이용하기 위해서, 바이너리 트리 구조를 유지해야 하고 그 리프들 모두가 컨디션 (5) 를 만족할 때까지 계속해서 바이너리 트리 구조를 성장시켜야 한다. 상기 컨디션 (12) 는 트리 구조를 구축하지 않고 직접적으로 이용될 수 있다.
본 개시물에 제시된 계산적인 (enumerative) 코딩 기술들에 따라, VF 코딩 트리의 예의 구조가 설명될 것이다. 상기 정리 4 는, 무기억 소스에 대한 VF 코드 트리
Figure 112011052609244-pct00042
에서의 모든 워드들은 다음과 같이 계산될 수 있음을 시사한다:
Figure 112011052609244-pct00043
(13)
여기서, 각 그룹
Figure 112011052609244-pct00044
은 i 번째 심볼상에서의 종료하고 확률
Figure 112011052609244-pct00045
을 갖는, 길이 l+1 의
Figure 112011052609244-pct00046
워드들을 포함하고, 여기서
Figure 112011052609244-pct00047
은 그 첫 번째 1 위치들에서 각 종류의 심볼들의 넘버를 나타낸다.
바이너리 경우에서, Pr(1)=p, Pr(0)=q, p<q 이면, 식 (13) 은 다음과 같이 재기록될 수 있다:
Figure 112011052609244-pct00048
(14)
여기서 그룹들 X.sub.l,k,a 는 길이 l+1 의
Figure 112011052609244-pct00049
워드에 의해 형성되고, 여기서 첫 번째 l 비트는 k 비트들을 포함하고, 최종 심볼은 a 이다.
그룹들의 이 분리에 추가하여, 본 개시물에 설명된 기술들은 또한, 모든 워드들
Figure 112011052609244-pct00050
이 각 서브그룹에서 사전적 순서, 또는 보다 일반적으로 이러한 서브그룹들에서의 블록들의 인덱스들의 빠른 결합적 연산을 허용하는 임의의 다른 순서로 배열된다는 것을 명시할 수도 있다. 이 방식으로, 기술들은 빠른 결합적 연산을 허용하는 VF 코드들의 특정 변형을 생성할 수도 있다.
상당히 짧은, 예를 들어 대략 12 와 같거나 작은 워드들에 대해, 그 사전적 인덱스들 (또는 그 인덱스들을 이용하는 워드들의 합성) 의 연산은 단일의 색인 (lookup) 의 사안일 수 있다. 보다 긴 워드들에 대해, 다음의 잘 알려진 결합적 공식
Figure 112011052609244-pct00051
을 이용하는 것이 가능하고, 여기서 ωj 는 워드 ω 의 개별적인 비트들이고, 모든 k>l 에 대해
Figure 112011052609244-pct00052
인 것으로 가정된다. 이 방식으로, 코드는 서브그룹들에서의 블록들의 인덱스들의 빠른 연산을 위한 효율적인 결합식 계산을 지원할 수도 있다.
도 5 는 계산적인 VF 코딩 방식에 따라 노드들이 그룹들로 배열되는 상태에서 도 4 의 VF 코딩 트리의 도면이다. VF 코딩 트리는 예시적인 코드 구조를 나타낸다. 특히, 도 5 는 식 (14) 에 의해 정의된 바와 같은 파티션의 구조를 나타낸다. 도 5 의 트리에서 VF 코드 구조는 도 4 의 예에서의 VF 코드 구조와 동일하지만, 트리 내의 코드들의 그룹들의 리스트들을 지정하는 관점에서 계산적인 코딩 방식을 나타낸다. 특히, 코딩 트리의 각 레벨 l 에 대해, 그 레벨에 속하는 그룹들 Xl ,k, a 의 수는 최대 2*(l+1) 이다. 이 수는, 트리가 레벨 l 에 위치한 모든 리프들을 갖는 완전한 트리인 경우에 대응한다. 따라서, 트리 ΔN 의 L 레벨에 포함된 그룹들의 총 수는, 바크만의 O 표기법을 이용하면, 최대 O(L2) 이다. 이 수는, 통상적으로 익스포넨셜, 즉 O(2L) 인 동일한 깊이의 종래의 트리에 포함된 노드들 또는 리프들의 총 수보다 상당히 작다.
도 5 의 예에 나타난 바와 같이, VF 코딩 트리는, 프리픽스 길이, 프리픽스에서의 1 의 넘버, 및 종료 심볼 (예를 들어, 0 또는 1 비트) 를 각각 나타내는 관련있는 l, k 및 a 값들을 참조하여 식별될 12 개의 그룹들 Xl ,k,a, 을 포함한다. l 의 값은 또한 트리 내에서의 레벨을 나타낸다. 도 5 의 VF 코딩 트리에는 레벨 1 에서 단일의 그룹이 존재한다. 그룹 (1, 1), 1 은 코드 0 및 워드 11 에 대응하는 단일의 리프를 포함한다. 이 경우, l=1 은 프리픽스의 길이이고, k=1 은 프리픽스에서의 1 의 넘버이며, a=1 은 종료 비트이다. VF 코딩 트리의 레벨 2 에서, 하나의 그룹이 존재한다. 그룹 (2, 1), 1 은 코드 1 및 워드 011 및 코드 2 및 워드 101 에 속하는 2 개의 리프들을 포함한다. 이 경우, l=2 는 프리픽스의 길이이고, k=1 은 프리픽스에서의 1 의 넘버이며, a=1 은 종료 비트이다.
VF 코딩 트리의 레벨 3 에서, 3 개의 그룹들의 존재한다. 그룹 (3, 1), 1 은 코드 7 및 워드 0011, 코드 8 및 워드 0101, 및 코드 9 및 워드 1001 에 속하는 3 개의 리프들을 포함한다. 이 그룹에 있어서, l=3 은 프리픽스의 길이이고, k=1 은 프리픽스에서의 1 의 넘버이며, a=1 은 종료 비트이다. 그룹 (3, 1), 0 은 코드 4 및 워드 0010, 코드 5 및 워드 0100, 및 코드 6 및 워드 1000 에 속하는 3 개의 리프들을 포함한다. 이 그룹에 있어서, l=3 은 프리픽스의 길이이고, k=1 은 프리픽스에서의 1 의 넘버이며, a=0 은 종료 비트이다. 그룹 (3, 0), 1 은 코드 3 및 워드 0001 에 속하는 단일의 리프를 포함한다. 이 그룹에 있어서, l=3 은 프리픽스의 길이이고, k=0 은 프리픽스에서의 1 의 넘버이며, a=1 은 종료 비트이다. 트리의 나머지들은 유사한 방식으로 추가의 그룹들 Xl,k,a 에 의해 식별된다.
l, k 및 값들, 뿐만 아니라 오프셋 또는 각 그룹에서의 코드와 연관된 사전적으로 첫 번째 워드의 값을 나타내는 "베이스" 값은 VF 코딩 트리 내에서 코드들의 이용 및 계산적인 해석 (enumerative construction) 을 지원한다. 또한, 그룹들은, 코드 0 을 포함하는 제 1 그룹이 그룹 (1, 1), 1 이고, 코드들 1 및 2 를 포함하는 제 2 그룹이 그룹 (2, 1), 1 이고, 코드 3 을 포함하는 제 3 그룹이 그룹 (3, 0), 1 이고, 코드들 4, 5 및 6 을 포함하는 제 4 그룹이 그룹 (3, 1), 0 이고, 코드들 7, 8 및 9 를 포함하는 제 5 그룹이 그룹 (3, 1), 1 등 이도록 고정 길이 코드들의 순서에 따라 오더링될 수도 있다. 그룹 인덱스 j 는 주어진 이 오더링에서 VF 코딩 트리에 대한 그룹들의 리스트 내에서 그룹들을 용이하게 식별하도록 확립될 수도 있다.
VF 코드들의 계산적인 해석에 대한 기술의 설계는 도 5 를 또한 참조하여 설명될 것이다. 바이너리 무기억 소스에 대한 구성 절차의 C 코드 및 컴팩트 데이터 구조의 예가 또한 제공된다. 도 5 를 참조하면, 각 그룹 Xl ,k, a 의 식별을 위한 파라미터들 l, k 및 a 에 추가하여, 계산적인 해석 기술이 또한 각각의 그룹에서 첫 번째 코드의 값을 나타내는, 각 그룹에 대해 오프셋된 값을 저장할 수도 있다. 각 그룹에서 (오프셋에 의해 지정된) 첫 번째 코드는 오프셋 또는 베이스 코드로서 지칭될 수도 있다. 도 5 에 나타난 바와 같이, 베이스 코드들 각각은 원형으로 그려진다. 전술된 바와 같이, 컴퓨터 메모리에서 결과의 VF 코딩 트리 표현의 크기는 최대 O(L2) 일 수도 있고, 여기서 L 은 트리의 높이, 즉 트리에서의 레벨 l 의 수이다.
일반적으로, 몇몇 양태에서 VF 코드들의 구성을 위한 기술들은 사전적 순서를 갖는 가변 길이 워드들을 나타내는 고정 길이 코드들의 세트를 생성하는 것을 포함할 수도 있다. 표 1 을 참조하면, 예를 들어 입력 워드들의 세트는 첫 번째 워드 11 에서 최종 워드 0000000001 의 사전적 순서를 갖는다. 코드들 0 내지 16 이 이용되어 워드들 11 내지 0000000001 을 각각 인코딩한다. VF 코드들의 구성은, 예를 들어 도 5 의 VF 코딩 트리에 대하여 전술된 바와 같이 그룹들 Xl,k,a 에서의 고정 길이 코드들을 배열하는 것을 더 포함할 수도 있다. 그룹들 각각은 하나 이상의 고정 길이 코드들을 포함한다. 주어진 그룹에서의 하나 이상의 고정 길이 코드들은 확률이 동일하며 종료 심볼이 동일한 가변 길이 워드들을 나타낸다.
표 1 및 도 5 를 참조하면, 예를 들어 코드들 7, 8 및 9 는 가변 길이 워드들 0011, 0101 및 1001 을 표현한다. 워드들 0011, 0101 및 1001 각각은, 예를 들어 언더라인에 의해 표시된 바와 같이 1 의 종료 비트인 종료 심볼을 갖는다. 또한, 표 1 에 나타난 바와 같이, 워드들 0011, 0101 및 1001 각각은 0.0256 의 확률을 갖는다. 따라서, 코드들 7, 8 및 9 는, 다르게는 그룹 (3, 1), 1 으로서 지정될 수도 있는 동일한 그룹 Xl ,k,a=X3 ,1,1 내에 배치된다. 또한, 표 1 을 참조하면, 코드들 4, 5 및 6 은 코드들 7, 8 및 9 에 의해 표현된 워드들과 동일한 길이를 갖는 입력 워드들 (0010, 0100, 1000) 을 표현한다. 그러나, 코드들 4, 5 및 6 에 의해 표현된 입력 워드들은 상이한 종료 비트 (0) 및 상이한 확률 (0.1024) 을 갖는다.
따라서, 코드들 4, 5 및 6 은, 다르게는 그룹 (3, 1), 0 으로서 지정될 수도 있는 상이한 그룹 Xl ,k,a=X3 ,1,0 에 배치된다. 코드 3 은 코딩 트리의 레벨 3 에서 다른 코드들에 의해 표현된 입력 워드들과 동일한 길이를 갖는 입력 워드 (0001) 을 표현한다. 또한, 코드 3 에 의해 표현된 입력 워드 0001 의 확률은 코드들 4, 5 및 6 에 의해 표현된 입력 워드들의 확률과 동일하다. 그러나, 코드 3 은 상이한 종료 비트 (1) 을 갖는 코드를 표현한다. 따라서, 코드 3 은, 다르게는 그룹 (3, 0), 1 로서 지정될 수도 있는 상이한 그룹 Xl ,k,a=X3 ,0,1 에 상주한다.
가변 길이 워드들의 세트는, 예를 들어 표 1 에 나타난 바와 같이 사전식 순서를 갖는다. VF 그룹들 각각에서, 하나 이상의 고정 길이 코드들은 그들이 표현하는 가변 길이 워드들의 사전식 순서로 배열된다. 그룹이 단지 단일의 고정 길이 코드를 포함하면, 사전식 순서는 일반적으로 중요하지 않다. 그러나, 그룹이 2 이상의 고정 길이 코드들을 포함하면, 그룹 내의 고정 길이 코드들은 고정 길이 코드들에 의해 표현된 가변 길이 입력 워드들의 사전식 순서에 따라 오더링된다. 그룹 (3, 1), 0 에 대하여, 예를 들어 코드 4 는 워드 0010 을 표현하고, 코드 5 는 0100 을 표현하며, 코드 6 은 워드 1000 을 표현한다. 워드 0010 은 입력 워드 세트의 사전식 순서에서 첫 번째 워드이고, 워드 0100 은 두 번째 워드이며, 워드 1000 은 세 번째 워드이다. 그들이 표현하는 워드들의 사전식 순서에 따른 그룹내에서의 코드들의 배열은, 오프셋 또는 베이스 코드로서 본원에서 상호교환적으로 지칭될 수도 있는 사전식으로 제 1 코드의 값에 기초하여 그룹에서의 코드들의 방향 계산을 지원하고, 그룹 내의 다른 코드들의 위치들을 인덱싱할 수도 있다.
l, k, 상기 표기법에 따라, 그룹들 각각은, 그룹에서의 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 프리픽스의 길이 l, 그룹에서의 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 프리픽스에서의 1 의 넘버 k, 및 그룹에서의 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 종료 심볼 a 로 표현될 수도 있다. 종료 심볼은 0 또는 1 의 하나의 비트 값일 수도 있다. 프리픽스는 최종, 종료 심볼 전의 워드의 일부를 지칭하고, 가변 길이 워드의 전체 길이에 따라 길이 면에서 변한다. 또한, 그룹들 각각에서 고정 길이 코드들 각각은, 전술된 바와 같이 각 그룹에서, 사전적으로 오더링된 첫 번째 고정 길이 코드, 즉, 오프셋 또는 베이스 코드에 대하여 고정 길이 코드들의 사전적 오더링에 기초하여 또한 표현될 수 있다.
예를 들어, 그룹 (3, 1), 0 에서의 워드 0010 에 대응하는 사전적 순서 첫 번째 고정 길이 코드 4 가 주어지고, 그룹 내의 코드 6 으로 표현된 워드 1000 의 인덱스 위치, 즉 가능한 인덱스 위치들 0, 1 및 2 중 2 가 주어지면, 코드 6 에 대한 워드는 첫 번째 워드 0010 에 4 를 단순히 곱함으로써, 또는 몇몇 다른 수학적 연산에 의해 직접적으로 계산될 수 있다. 이 대수적인 특성은, 첫 번째 고정 길이에 대하여 코드들의 사전적 순서 내에서 코드들 또는 각 그룹에서의 "베이스 코드" 의 인덱스 위치들이 주어지면, 디코딩 동작 도안 코드들로부터 워드들의 직접적인 연산을 용이하게 할 수도 있다.
계산적인 코딩 기술들을 용이하게 하기 위해, 본 개시물에 따르면, 프리픽스의 길이, 프리픽스에서의 1 의 넘버, 및 각 그룹에서의 하나 이상의 코드들에 대한 종료 심볼이 메모리 내에 데이터 구조로 저장될 수도 있다. 본 개시물의 몇몇 양태에서, 메모리는 매체 코딩 디바이스와 같은 코딩 디바이스 내에 상주할 수도 있고, 또는 다르게는 이와 연관될 수도 있다. 예를 들어, 데이터 구조로 표현된 고정 길이 코드는 비디오 데이터, 이미지 데이터, 오디오 데이터 또는 스피치 데이터 중 적어도 하나를 인코딩 및 디코딩하는 것 중 적어도 하나에 매체 코더에 의해 적용될 수도 있다. 도 1-3 의 비디오 코딩 예들을 참조하면, 데이터 구조는 비디오 인코더 (20), 비디오 디코더 (26) 또는 양자 모두 내에 상주하거나 이와 연관될 수도 있다. 예를 들어, 데이터 구조는 도 2 및 3 의 메모리 (47) 또는 메모리 (53) 에 각각 저장될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (26) 는 데이터 구조를 액세스하여 가변 길이 워드들을 고정 길이 코드들로 인코딩할 수도 있고, 고정 길이 코드들을 디코딩하여 가변 길이 워드를 생성할 수도 있다. 보다 구체적으로, 엔트로피 인코딩 유닛 (46) 및 엔트로피 디코딩 유닛 (52) 과 연관된 하나 이상의 프로세서들은, 예를 들어 각각의 메모리들 (47 및 53) 내의 이러한 데이터 구조를 액세스하여 엔트로피 인코딩 및 디코딩을 각각 수행할 수도 있다.
도 4 및 도 5 및 표 1 의 예에서, VF 코딩 트리는 설명의 편의를 위해 비교적 짧은 길이들을 갖는 입력 워드들 및 작은 수의 코드들을 포함한다. 그러나, 실제로, 본 개시물의 각종 양태들에 따라 구성된 VF 코딩 트리는, 일부가 보다 긴 코드 및/또는 워드 길이들을 포함할 수도 있는, 입력 워드들 및 수백 또는 수천의 코드들을 포함할 수도 있다. 따라서, VF 코드들 세트를 표현하기 위한 메모리 공간의 소비가 관심사일 수도 있다. 본 개시물에 설명된 바와 같이, VF 코딩 트리의 대수적 특성들을 이용하는, 계산적인 기술들의 애플리케이션은 메모리 효율적 데이터 구조의 이용을 허용할 수도 있고, 이에 의해 메모리 공간을 보존한다. 예를 들어, 데이터 구조가 바크만의 O 표기법으로 메모리 내의 공간의 최대 양 O(L2) 을 필요로 하는 것이 가능하고, 여기서 L 은 무기억 소스에 대한 고정 길이 코드들의 배열을 정의하는 가변-대-고정 길이 코딩 트리의 깊이이다.
바이너리 무기억 소스를 위한 구성 절차를 구현하기 위한 C 코드 및 컴팩트 데이터 구조의 애플리케이션의 예가 이하에서 설명된다. 일반적으로, 이하에서 C 코드는 데이터 구조에 의해 정의된 VF 코딩 트리에 따라 VF 코드들을 구성하기 위한 프로세스를 요약한다. 전술된 바와 같이, 데이터 구조는 그룹에서 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 프리픽스의 길이 l, 그룹에서 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 프리픽스에서의 1 의 넘버 k, 및 그룹에서 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 종료 심볼 a 를 지정할 수도 있다. 이하 예시의 코드에서, l 및 값들은 각각 "l" 및 "a" 로서 나타낸다.
또한, 데이터 구조는 각 그룹에서 사전적으로 첫 번째 워드를 나타내는 코드를 나타내는 오프셋을 지정할 수도 있다. 각 그룹에서 사전적으로 첫 번째 워드는 그룹에서 가장 작은 워드일 수도 있다. 그러나, 다른 구현에서, 각 그룹에서 사전적으로 첫 번째 워드는 그룹에서 가장 큰 워드일 수도 있다. 설명을 위해, 본 개시물에서 오프셋과 같이 사전적으로 가장 작은 워드의 코드의 이용이 설명될 것이다. 그러나, 전술된 바와 같이, 그룹의 오더링은, 오프셋이 그룹에서 사전적으로 가장 큰 워드의 코드를 지정하도록 역전될 수 있다. 따라서, 본 예시적인 설명은 본 개시물에서 광범위하게 설명된 기술들을 제한하는 것으로 고려되어서는 안된다.
VF 코드들의 계산적인 해석
Figure 112011052609244-pct00053
상기 코드는 비디오 데이터, 이미지 데이터, 스피치 데이터 및/또는 보이스 데이터를 코딩하기 위한 매체 코딩 디바이스와 같은 코딩 디바이스들 내에 상주하거나 이와 연관되는 프로세서에 의해 실행될 수도 있다. 다르게는, 또는 부가적으로, 상기 코드는 이러한 코딩 디바이스와 독립적인 하나 이상의 프로세서들에서 실행되어 VF 코딩 트리를 정의하는 콘텐츠들 및 VF 데이터 구조를 생성할 수도 있다. 용어 "프로세서" 는 일반적으로 본 개시물에 설명된 각종 기능들이 단일의 프로세싱 유닛에 의해 수행될 수 있으나, 수행될 필요가 없다는 이해와 함께 하나 이상의 프로세서들을 지칭할 수도 있다. 따라서, 용어 "프로세서" 는 하나 이상의 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문형 집적 회로 (ASIC), 필드 프로그래머블 로직 어레이 (FPGA), 이들의 임의의 조합, 또는 등가의 집적 또는 이산 로직 회로의 다른 조합들과 같은 각종 형태들 중 어느 하나를 취할 수도 있는, 다수의 프로세서들 또는 단일 프로세서를 지칭하도록 본원에서 이용된다.
VF 코드들의 계산적인 해석 시에, 결과의 VF 데이터 구조 및 그 콘텐츠들은 그 다음에, 예를 들어 VF 인코딩, VF 디코딩, 또는 양자 모두를 수행하도록 구성된 하나 이상의 프로세서들에 의한 이용 및 액세스를 위해, 코딩 디바이스와 연관된 메모리 내에 로딩될 수도 있다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (26) 내에 상주하는 또는 이와 연관된 메모리는 인코딩 및 디코딩 각각에서의 이용을 위해 연관된 콘텐츠 및 데이터 구조를 저장할 수도 있다. 몇몇 경우에서, 비디오 인코더 (20) 및 비디오 디코더 (26) 에 저장된 데이터 구조는 적용 가능한 것과 같은 인코딩 또는 디코딩을 허용하기에 충분한 정보를 전달하는 상이한 데이터 구조 또는 동일한 데이터 구조일 수도 있다.
상기 코드에서, VF 코딩 트리는 트리에서의 L 레벨의 최대치를 갖는 것으로 가정된다. VF 코딩 데이터 구조에서 프리픽스 길이 l 은 트리에서 대응하는 레벨을 동시에 지정한다. 프리픽스 길이 l 이 최대 길이 L 보다 크지 않은 동안, 프로세서는 상기 코드를 실행하고 각각의 워드의 프리픽스에서 0 리프들 및 1 리프를 갖는 프리픽스들을 갖는 워드를 고려한다. 프로세서는 이중 정확도 값 Pr=pow(p,k)*pow(l-p,l-k) 로 k 1 들을 갖는 각각의 적용 가능한 l-비트 워드의 확률을 계산하고, 여기서 p 는 1s 의 확률이다.
확률 Pr 이 1/(N*p) 과 동일하거나 크면, 상기 코드를 실행하는 프로세서는 VF 코딩 트리 내에서 좌측 연장이 리프들로 턴하는지를 알기 위해 체크한다. 예를 들어, 상기 코드에 의해 나타난 바와 같이, 확률이 1/(N*p*p) 보다 작으면, 프로세서는 l, k, 0 그룹, 즉 프리픽스 길이 l, 프리픽스 k 에서의 리프들의 수, 및 0 의 종료 심볼 a 를 갖는 그룹을 등록한다. l, k 및 a 의 값들은 vfcg[j].l, vfcg[j].k and vfcg[j].a 에 의해 각각 지정된 어레이에서 프로세서에 의해 레코딩되고, 여기서 j 는 그룹 넘버 또는 인덱스이고 vfcg 는 VF 코드 그룹 파라미터들의 어레이를 표현한다. 또한, 프로세서는 vfcg[j].offset 에 의해 지정된 바와 같은 어레이에서 특정 코드의 넘버, 오프셋 값 M 을 레코딩한다. 프로세서는 그 다음에, 그룹 넘버 j 및 코드 넘버 M 을 증분하고, 여기서 코드 넘버 M 은 l 및 k 의 이항 함수이다.
좌측 확장들이 리프로 턴하지 않으면, 즉 Pr 이 1/(N*p*p) 보다 작지 않으면, 프로세서는 우측 확장들이 리프들로 턴하는지 여부를 결정한다. 예시의 코드에서, 프로세서는 Pr 이 1/(N*p*(1-p)) 보다 작은지 여부를 결정한다. 그렇다면, 프로세서는 l, k, 1 그룹, 즉 프리픽스 길이 l, 프리픽스에서의 1 의 넘버 k, 및 1 의 종료 심볼을 갖는 그룹을 등록한다. 프로세서는 그 다음에, vfcg[j].l, vfcg[j].k 및 vfcg[j].a 에 의해 각각 지정된 어레이에서의 l, k 및 a 값들을 레코딩한다. 프로세서는 또한, vfcg[j].offset 에 의해 지정된 어레이에서 특정 코드의 넘버, 오프셋 값 M 을 레코딩한다. 프로세서는 그 다음에, 그룹 넘버 j 및 코드 넘버 M 을 증분하고, 여기서 코드 넘버 M 은 l 및 k 의 이항함수이다. 프로세스는 트리의 연속적인 레벨들, 및 연속적인 그룹들에 대해 계속하여, 중간 리프들에 대해 vcfg[j] 값들 및 최종 리프에 대해 M 의 그후-현재 값과 동일한 vcfg[j].offset 값을 초래한다.
본 개시물에 따라 구성된 VF 코딩을 이용하는 예시의 인코딩 절차가 설명될 것이다. 일반적으로, 인코딩 절차는 사전적 순서를 갖는 가변 길이 워드들을 획득하는 단계, 및 가변 길이 워드들 각각을 복수의 고정 길이 코드들 중 하나로 인코딩하는 단계를 포함할 수도 있다. VF 코딩 트리에 따르면, 고정 길이 코드들은 그룹들로 배열되고, 그룹들 각각은 확률이 동일하고 종료 심볼이 동일한 가변 길이 워드들을 나타내는 하나 이상의 고정 길이 코드들을 포함한다. 그룹들 각각에서 하나 이상의 고정 길이 코드들은 그들이 표현하는 가변 길이 워드들의 사전적 순서로 배열된다.
가변 길이 워드들을 인코딩하는 것은 각 그룹에서 고정 길이 코드로 표현된 가변 길이 워드들 각각의 프리픽스의 길이, 각 그룹에서 고정 길이 코드들로 표현된 각변 길이 워드들 각각의 프리픽스에서의 1 의 넘버, 및 각 그룹에서 고정 길이 코드들로 표현된 가변 길이 워드들 각각의 종료 심볼에 기초하여 고정 길이 코드들을 선택하는 것을 포함할 수도 있다. 프리픽스 길이, 리프들의 수, 및 VF 코딩 트리를 구성하는 그룹들의 리스트들과 연관된 종료 심볼은 하나 이상의 데이터 구조에 저장될 수도 있다. 데이터 구조들은, 인코딩 절차 동안 검색을 위해 도 2 의 비디오 인코더 (20) 와 같은 매체 코더일 수도 있는, 인코딩 디바이스 내에 상주하거나 다른 액세스 가능한 메모리에 저장될 수도 있다. 보다 구체적으로, 인코딩 디바이스는 도 2 의 엔트로피 인코딩 유닛 (46) 과 같은 엔트로피 코딩 디바이스와 연관된 하나 이상의 프로세서일 수도 있다.
코딩 디바이스는 각 그룹에서 사전적으로 오더링된 첫 번째 고정 길이 코드에 대하여 고정 길이 코드들의 사전적 오더링에 기초하여 그룹들 각각에서 고정 길이 코드들 각각을 선택할 수도 있다. 사전적으로 오더링된 첫 번째 고정 길이 코드는 그룹의 오프셋 코드 또는 베이스 코드로 고려될 수도 있다. 오프셋 또는 베이스 코드는 특정 그룹에서의 코드들에 의해 표현된 워드들 중에서 사전적으로 오더링된 첫 번째 가변 길이 워드를 표현한다. 오프셋 코드 또는 베이스 코드는 코드 그룹에 대한 첫 번째 인덱스 위치에서 베이스 코드에 대하여 코드 그룹에서의 코드들의 인덱스 위치들에 기초하여 코드들의 계산을 허용할 수도 있다.
일반적으로, 프리픽스 길이, 프리픽스에서의 1 의 넘버, 및 가변 길이 워드에 대한 종료 심볼은 이들 특징들과 연관된 고정 길이 코드들의 그룹을 선택하는데 이용될 수도 있다. 그룹에서의 첫 번째, 오프셋 또는 베이스 코드와 연관된 가변 길이 워드의 사전적으로 오더링된 위치에 대한 가변 길이 워드의 사전적 오더링된 위치를 이용하여, 코딩 디바이스는 코드의 인덱스 위치를 선택할 수 있다. 인덱스 위치를 이용하여, 코딩 디바이스는, 예를 들어 코드의 인덱스 위치와 베이스 코드의 인덱스 위치 사이의 차이를 베이스 코드에 추가함으로써, 적합한 코드를 계산할 수 있다. 그 결과는 가변 길이 입력 워드에 대해 정확한 고정 길이 코드이다.
전술된 바와 같이, 프리픽스 길이, 프리픽스에서의 1 의 넘버, 및 그룹에 대한 종료 심볼은 메모리에 저장된 데이터 구조로부터 저장될 수도 있다. 특히, 계산적인 해석 기술의 결과로서, 데이터 구조에 의해 정의된 그룹 리스트는 바크만의 O 표기법으로, 메모리 내의 최대 공간의 양 O(L2) 을 필요로 할 수도 있고, 여기서 L 은 무기억 소스를 위한 고정 길이 코드들의 배열을 정의하는 가변-대-고정 길이 코딩 트리의 깊이이다. 몇몇 애플리케이션에서, 인코딩 절차는 일반적으로 각종 데이터에 적용 가능할 수도 있으나, 가변 길이 워드들은 비디오 데이터, 이미지 데이터, 오디오 데이터 또는 스피치 데이터 중 적어도 하나를 표현할 수도 있고, 인코딩 절차는 비디오 데이터, 이미지 데이터, 오디오 데이터 또는 스피치 데이터를 인코딩하도록 가변 길이 워드들을 인코딩하는 것을 더 포함할 수도 있다.
본 개시물에 설명된 바와 같이 구성된 데이터 구조를 이용하여 VF 코드들을 인코딩 및 디코딩하기 위한 절차를 구현하는 C 코드의 예가 이하에서 설명된다. 간략함을 위해, 인코딩 및 디코딩 절차는 매칭 그룹들을 식별하기 위한 단순한 선형 검색 기술들을 이용하여 설명된다. 인코딩 및 디코딩 각 경우에서, 검색 아이템들의 수는 바크만의 표기법으로 최대 O(L2) 이고, 여기서 L 은 VF 코딩 트리의 깊이를 나타낸다.
디코딩 절차에서 적용하기에 특히 용이한 바이너리 검색의 이용은 O(log L) 단계들을 초래할 것이고, 이는 종래의 VF 코딩 트리를 분석하는데 정상적으로 필요한 O(L) 단계들 보다 더욱 빠르다. 그룹 Xl ,k,a 에 속한 워드 w 에 대한 코드를 계산하기 위해서, 인코딩 절차는 k 1 들을 갖는 모든 1-비트 길이의 워드들의 세트에서 w 의 1-비트 피르픽스의 사전적 인덱스를 계산하도록 구성될 수도 있다. 이 프로세스는 인덱스 (l, k, w) 로서 이하에서 인코딩 절차의 C 코드에서 표시된다. 유사하게, 디코딩 절차는, k 1 들을 갖는 사전적으로 오더링된 1-비트 시퀀스들의 세트로부터 i 번째 워드를 생성하는, 워드 (l, k, i) 로서 이하의 디코딩 절차의 C 코드로 표시된, 역 프로세스를 이용하도록 구성될 수도 있다.
VF 인코딩 절차에 대한 예시의 C 코드는 이하에서 요약된다:
코딩 트리에서의 그룹들의 리스트를 이용하는 VF 코드의 인코딩
Figure 112011052609244-pct00054
상기 C 코드에서, 비디오 인코더 (20) 또는 다른 매체 인코더와 같은 인코더와 연관된 프로세서는 인코딩될 입력 워드 w 를 수신하는데, 여기서 i=get_bit(in) 은 입력 워드 w 로부터의 비트들의 판독을 나타낸다. 프리픽스의 길이 1 이 현재 그룹에 대해 지정된 프리픽스 길이 vfcg[j].l 와 동일하고, 프리픽스에서의 1 의 넘버 k 는 현재 그룹에 대해 지정된 vfcg[j].k 와 동일하고, i 는 현재 그룹에 대해 지정된 종료 비트 vfcg[j].a 와 동일하면, 프로세스는 입력 워드에 대한 매칭 코드를 찾는다. 이 경우, 프로세서는 "찾기" 로 진행되는데, 여기서 i=index (l, k, w) 에 따른 프리픽스의 사전적 인덱스를 결정하고, 입력 워드에 대한 적합한 VF 코드를 연산한다.
예를 들어, 프로세서는 그룹 내의 프리픽스의 사전적 인덱스에 기초하여 코드를 계산할 수도 있다. 이 경우, 코드는 사전적으로 첫 번째 위치 vfcg[j] 오프셋 플러스 인덱스 값 i 에서 코드에 대응한다. 따라서, 도 5 를 참조하여, 현재 그룹이 (3, 1), 1 그룹이고, 코드의 사전적 인덱스가 3 개의 가능한 인덱스 위치들 0, 1 및 2 중에서 2 이면, 코드는 오프셋 (베이스) 코드 7 플러스 인덱스 값 1 이고, 코드 8 과 동일하다. 유사하게, 인덱스 값이 2 이면, 코드는 오프셋 또는 베이스 코드 7 플러스 2, 9 와 동일하다.
길이 1 이 프리픽스 길이 vfcg[j].l 를 매칭하지 않으면, 프로세서는 길이 1(1++) 를 증분한다. 프로세서는 또한, 비트 i(k+=i) 와 k 의 값을 합산하고, 프리픽스 (w=w*2+i) 에 비트 I 를 가산한다. 결과는, 1 번째 비트가 프리픽스에 가산된다는 것이다. 프로세서는 그 다음에, 검색 프로세스를 반복하여 다음 레벨에서 그룹 내의 매치가 존재하는지 여부를 결정한다. 특히, 프로세서는 다시, 프리픽스의 업데이트된 길이 1 이 현재 그룹에 대해 지정된 프리픽스 길이 vfcg[j].l 과 동일한지 여부, 프리픽스에서의 1 들의 업데이트된 넘버 k 가 현재 그룹에 대해 지정된 vfcg[j].k 와 동일한지 여부, 및 업데이트된 종료 비트 i 가 현재 그룹에 대해 지정된 종료 비트 vfcg[j].a 와 동일한지 여부를 결정한다. 그렇다면, 프로세스는 입력 워드에 대한 매칭 코드를 찾고, "찾기" 에 대하여 전술된 바와 같이 코드를 생성한다.
프로세서는 각각의 가변 길이 입력 워드에 대한 동일한 일반적 프로세스를 적용하여 관련있는 고정 길이 코드를 생성할 수도 있다. VF 코드들에 계산적인 해석으로부터 기인한 데이터 구조는 전체 메모리 요건들을 감소시키면서 입력 워드들의 인코딩을 용이하게 할 수 있다. 특히, 코드들을 대응하는 프리픽스 길이, 프리픽스 제로의 넘버, 및 종료 비트들로 배열하는 것은 O(2L) 보다는 O(L2) 의 순서 상에서 메모리 공간을 이용하여 코드들의 비교적 빠른 생성을 허용한다.
본 개시물에 따라 구성된 VF 코딩을 이용하는 예시의 디코딩 절차가 설명될 것이다. 일반적으로, 인코딩 프로세서는 고정 길이 코드들을 획득하는 단계, 및 사전적 순서를 갖는 가변 길이 워드들을 생성하도록 고정 길이 코드들을 디코딩하는 단계를 포함한다. 본 개시물에 설명된 계산적인 해석 기술에 따라, 고정 길이 코드들은 그룹으로 배열될 수도 있다. 그룹들 각각은, 확률이 동일하고 종료 심볼이 동일한 가변 길이 워드들을 나타내는 하나 이상의 고정 길이 코드들을 포함한다. 또한, 그룹들 각각에서의 하나 이상의 고정 길이 코드들은 그들이 표현하는 가변 길이 워드들의 사전적 순서로 배열된다.
도 3 의 비디오 디코더 (26) 와 같은 매체 디코더일 수도 있는 디코딩 디바이스는 VF 코딩 트리의 각종 속성들을 나타내는 데이터 구조를 이용하여 고정 길이 코드들 중 각 하나를 디코딩할 수도 있다. 보다 구체적으로, 코딩 디바이스는 도 2 의 엔트로피 인코딩 유닛 (46) 과 같은 엔트로피 인코딩 디바이스일 수도 있다. 디코딩 디바이스는 식별된 그룹에서 사전적으로 오더링된 제 1 코드에 대한 각 코드의 비교에 기초하여 각각의 고정 길이 코드를 포함하는 그룹들 중 하나를 식별할 수도 있다. 그룹에서 사전적으로 오더링된 제 1 코드는 오프셋 또는 베이스 코드로 고려될 수도 있다. 디코딩 디바이스는 식별된 그룹 내에서 (디코딩될) 각각의 코드의 사전적 인덱스를 결정할 수도 있다.
사전적 인덱스는, 예를 들어 각 그룹에서 사전적으로 오더링된 제 1 베이스 코드 및 각각의 코드 사이의 차이에 기초하여 결정될 수도 있다. 사전적으로 오더링된 제 1 코드는 그룹에서의 고정 길이 코드들에 의해 표현된 가변 길이 워드들의 사전적 순서들 중 제 1 가변 길이 워드를 나타내고, 그룹에 대해 베이스 코드로 고려될 수도 있다. 디코딩 디바이스는 그 다음에, 식별된 그룹 내의 각 코드의 사전적 인덱스에 기초하여 가변 길이 워드들 중 각 워드를 생성할 수도 있다. 예를 들어, 디코딩 디바이스는 사전적 인덱스에 기초하여 각각의 코드에 의해 표현된 가변 길이 워드의 프리픽스를 결정함으로써 디코딩될 고정 길이 코드에 대한 가변 길이 워드를 생성하고, 식별된 그룹에 대해 종료 심볼을 결정하며, 가변 길이 워드를 형성하기 위해 프리픽스에 종료 심볼을 첨부할 수도 있다.
다시, 디코딩을 용이하게 하기 위해, 그룹들 각각은 그룹 내의 고정된 길이 코드들에 의해 표현된 가변 길이 워드들 각각의 프리픽스의 길이, 그룹 내의 고정 길이 코드들에 의해 표현된 가변 길이 워드들 각각의 프리픽스에서의 1 의 넘버, 및 그룹 내의 고정 길이 코드들에 의해 표현된 가변 길이 워드들 각각의 종료 심볼에 의해 정의될 수도 있다. 이들 속성들은 코딩 디바이스 내에 상주하는 또는 이와 연관된 메모리 내의 데이터 구조로 저장될 수도 있다.
전술된 바와 같이, 데이터 구조는 바크만의 O 표기법으로, 메모리 내의 최대 공간의 양 O(L2) 를 필요로 할 수도 있고, 여기서 L 은 무기억 소스에 대한 고정 길이 코드들의 배열을 정의하는 가변-대-고정 길이 코딩 트리의 깊이이다. 몇몇 애플리케이션에서, 디코딩 절차가 일반적으로 각종 데이터에 적용 가능할 수도 있으나, 디코딩 절차에 의해 표현된 가변 길이 워드들은 비디오 데이터, 이미지 데이터, 오디오 데이터 또는 스피치 데이터 중 적어도 하나를 표현할 수도 있다. 따라서, 디코딩 절차는 비디오 데이터, 이미지 데이터, 오디오 데이터 또는 스피치 데이터 중 하나를 나타내는 가변 길이 워드들을 생성하도록 고정 길이 코드들을 디코딩하는 것을 더 포함할 수도 있다.
VF 디코딩 절차에 대한 예시의 C 코드가 이하에서 요약된다:
코딩 트리에서의 그룹들의 리스트를 이용하는 VF 코드의 디코딩
Figure 112011052609244-pct00055
상기 C 코드에서, 비디오 디코더 (26) 또는 다른 매체 디코더와 같은 디코더와 연관된 프로세서는 디코딩될 고정 길이 코드를 수신한다. 프로세서는 본 개시물에 설명된 바와 같이 구성된 데이터 구조를 이용하여 VF 코딩 트리 내의 코드를 포함하는 그룹을 검색한다. VF 코딩 트리에서의 그룹들의 리스트에 대한 그룹 인덱스 j 를 이용하여, 검색은 코드가 오프셋 코드, 즉 다음 (i+1) 그룹에서 사전적으로 첫 번째 코드 vfcg[j+1].offset 보다 적은 것으로 발견될 때까지 계속된다.
프로세서는, 적합한 그룹이 발견될 때까지 그룹 인덱스 j 를 증분한다. 디코딩될 현재 코드가 (i+1) 번째 그룹에 대한 오프셋 코드 vfcg[j+ 1].offset 보다 작은 것으로 발견되면, 프로세서는 코드가 j 번째 그룹, 즉 (i+1) 번째 그룹에 바로 선행하는 그룹에 상주한다고 결정한다. 예로서, 도 5 의 VF 코딩 트리를 참조하면, 코드가 코드 8 이면, 프로세서는 코드 8 을 각각의 (i+1) 번째 그룹에 대한 오프셋과 비교하면서 j 인덱스를 계속해서 증분한다. 코드 8 은, j 인덱스가 10 의 베이스 코드를 갖는, (4,0), 1 그룹을 나타낼 때까지 (i+1) 번째 그룹에 대한 오프셋 코드보다 작아지지 않는다. 이 때, 프로세서는, 코드 8 이 그룹 (3, 1),1 인, j 번째 그룹에 바로 선행하는 그룹에 있다고 결정한다.
프로세서는 그 다음에, 디코딩되는 코드로부터 j 번째 그룹에 대한 오프셋, 오프셋 코드 vfcg[j] 를 감산함으로써 코드의 사전적 인덱스를 결정한다. 그룹 (3, 1), 1 에 대해, 오프셋. 디코딩될 코드가 코드 8 이면, 그룹 (3, 1), 1 내의 코드 8 의 인덱스 i 는 베이스 코드 7 에 대해 가능한 인덱스 0, 코드 8 에 대해 1, 및 코드 9 에 대해 2 중에서, 8-7=1 이다. 인덱스 i 를 이용하여, 프로세서는 (1, k) 세트에서 i 번째 워드 w 를 생성하고, 여기서 w=word (vfcg[j].l, vfcg[j].k, i) 이다. 프로세서는 그 다음에, 그것을 일 장소에서 좌측으로 시프트하도록 워드 w 에 2 를 곱하고, 종료 비트 vfcg[j].a 를 추가함으로써 종료 비트를 첨부한다. 고정 길이 코드로부터 생성된 가변 길이 워드는 그 다음에, 예를 들어 커맨드 풋 (put) 비트(w, vfcg[j].l+1, out) 에 의해 출력된다.
전술된 바와 같이, 합리적으로 짧은 단어, 예를 들어 대략 12 와 동일하거나 이보다 작은 l 에 대해, 그 사전적 인덱스들 (또는 그 인덱스를 이용하는, 워드들의 합성) 의 연산은 단일의 룩업 (lookup) 의 문제일 수도 있다. 보다 긴 단어에 대해, 다음의 잘 알려진 조합적인 공식을 이용하는 것이 가능하다
Figure 112011052609244-pct00056
여기서 wj 는 워드 w 의 개별적인 비트들을 나타내고, 모든 k>1 에 대해
Figure 112011052609244-pct00057
으로 가정된다. 조합적인 공식 (15) 는 예를 들어, V. I. Mudrov 의 An algorithm for enumeration of combinations, Vyc. Math, and Math. Phys., 5 (4) (1965) 776-778 (in Russian); V. F. Babkin 의 A method of universal coding with non-exponent labour consumption, Probl. Inf. Trans., 1 (4) (1971) 13-21 (러시아); J. P. M. Schalkwijk 의 An Algorithm For Source Coding, IEEE Trans. Inf. Theory, 18 (3) (1972), 395-399; T. M. Cover 의 Enumerative Sources Encoding, IEEE Trans. Inf. Theory, 19 (1) (1973) 73-77; TjJ. Tjalkens 의 The Complexity of Minimum Redundancy Coding, in Proc. 21-th Symp. Inf. Theory in the Benelux (May 2000) 247-254; 및 T. Tjalkens 의 Implementation cost of the Huffman-Shannon-Fano code, in Proc. Data Compression Conference (DCC'05) (Snowbird, Utah, Mar. 29-31, 2005) 123-132 에서 논의되었다. 이 조합적인 공식을 구현하기 위해서, 접근법은, 파스칼의 삼각형 (Pascal's triangle) 으로 모든 이항식 계수들을 레벨 1 까지 미리 계산하거나, 다음의 간단한 아이덴티티를 이용하여 모든 이상식 계수들을 동적으로 계산할 것이다:
Figure 112011052609244-pct00058
일반적으로, 미리 연산된 계수들에 기초한 구현은 메모리의
Figure 112011052609244-pct00059
워드들 및 O(l) 추가를 필요로 한다. 계수들의 동적 연산은 일반적으로 O(l) 추가, 곱셈 및 나누기를 필요로 할 것이다. 그러나, 전체 프로세스는 대개는 단지 약간의 레지스터들을 필요로 할 것이다.
도 6 은 VF 코드들의 메모리 효율적인 구성을 위한 방법을 나타내는 흐름도이다. 도 6 에 도시된 방법은 본 개시물에 설명된 VF 코드 구성 기술들의 예이다. 이 방법은 도 2 및 도 3 에 도시된 바와 같은 엔트로피 인코딩 유닛 (46) 및 엔트로피 디코딩 유닛 (52) 에 의한 이용을 위해 VF 코드들을 구성하도록 다른 디바이스와 연관된, 또는 인코더, 디코더와 연관된 하나 이상의 프로세서들에 의해 구현될 수도 있고, 비제한적으로 비디오, 이미지, 스피치 및 오디오 데이터를 포함하는 다양한 데이터 중 어느 하나의 압축 및 코딩을 지원할 수도 있다. 본 개시물 전체에서, 용어 프로세서는 하나 이상의 프로세서들, 및 그 밖에 상세히 설명된 바와 같은 다양한 유형의 프로세서들 중 어느 하나를 지칭할 수도 있다. 임의의 이벤트에서, 예를 들어 VF 코딩에서 유용한 코드 구조 속성들을 정의하는 데이터 구조를 준비하도록 범용의 컴퓨팅 시스템 내에서, 또는 인코더 또는 디코더 내에 제공될 수도 있다.
도 6 에 도시된 바와 같이, 프로세서는 사전적 순서를 갖는 가변 길이 워드들의 세트를 획득하고, 이러한 가변 길이 워드들을 나타내는 고정 길이 코드들의 세트를 생성한다 (82). 워드들은 각각의 프리픽스 길이들, 프리픽스에서의 1 의 넘버들, 종료 심볼들, 및 확률들을 갖는다. 프로세서는 동일한 확률 및 동일한 종료 심볼들을 갖는 가변 길이 워드들을 나타내는 고정 길이 코드들을 포함하는 그룹에서 고정 길이 코드들을 배열한다 (84). 또한, 프로세서는 그들이 표현하는 가변 길이의 사전적 순서로 그룹들 각각에서 고정 길이 코드들을 배열한다 (86).
프로세서는 각 그룹에서 고정 길이 코드들에 의해 표현된 가변 길이 워드들 각각의 프리픽스 길이를 지정한다 (88). 또한, 프로세서는 각 그룹에서 고정 길이 코드들에 의해 표현된 가변 길이 워드들의 프리픽스에서의 1 의 넘버를 지정한다 (90). 프로세서는 또한, 각 그룹에서 고정 길이 코드들에 의해 표현된 가변 길이 워드들과 연관된 종료 심볼을 지정한다 (92). 프로세서는 결과의 프리픽스 길이, 각 그룹에 대한 종료 심볼 및 1 의 넘버를 데이터 구조로 저장한다 (94 ). 데이터 구조는 메모리 내에 저장되고, 인코딩 절차 및 디코딩 절차를 각각 실시하기 위해 VF 코딩 트리를 나타내도록 인코딩 디바이스 또는 디코딩 디바이스와 연관된 프로세서에 의해 이용될 수도 있다.
도 7 은 도 6 의 방법에 따라 구성된 VF 코드들을 이용하여 심볼들을 인코딩하는 형태에서 VF 코딩을 위한 방법을 나타내는 흐름도이다. 도 7 에 도시된 방법은 본 개시물에 설명된 VF 인코딩 기술들의 일 예이다. 도 7 의 방법은 프로세서, 즉 매체 인코딩 디바이스와 같은 인코딩 디바이스와 연관된 하나 이상의 프로세서들에 의해 구현될 수도 있다. 매체 인코딩 디바이스의 예들은 비디오 인코더 (20), 또는 비디오, 이미지, 스피치 및/또는 보이스 데이터와 같은 다양한 데이터를 인코딩하는데 유용한 다른 인코더를 포함한다.
도 7 의 예에 나타난 바와 같이, 인코딩 디바이스는 고정 길이 코드로 인코딩될 가변 길이 워드를 획득할 수도 있다 (96). 가변 길이 워드는 특정한 사전적 순서를 갖는 워드들의 입력 세트의 일부를 형성할 수도 있다. 또한, 워드들은 연관된 프리픽스 길이, 프리픽스에서의 1 의 넘버, 종료 심볼들, 및 예를 들어 표 1 의 예에 나타난 바와 같은 확률을 가질 수도 있다. 가변 길이 워드를 인코딩하기 위해, 인코딩 디바이스는 예를 들어, 본 개시물에 설명된 바와 같은 VF 코딩 트리 내에서 고정 길이 코드 그룹들의 관점에서, 코드 구조를 정의하는 데이터 구조를 액세스할 수도 있다 (98).
데이터 구조를 이용하면, 인코딩 디바이스는 코딩 트리에서의 코드들의 그룹들 중 하나를 선택할 수도 있다. 예를 들어, 인코딩 디바이스는 프리픽스 길이, 프리픽스에서의 1 의 넘버, 및 인코딩될 가변 길이 워드의 종료 심볼에 기초하여 그룹들 중 하나를 선택할 수도 있다 (100). 인코딩 디바이스는 그 다음에, 선택된 그룹에서 고정 길이 코드들 중 하나를 선택할 수도 있다. 예를 들어, 인코딩 디바이스는 선택된 코드 그룹 내의 사전적 오더링에 기초하여 선택된 그룹에서 고정 길이 코드들 중 하나를 선택할 수도 있다 (102).
예시로서, 코드들은 그들이 표현하는 워드들의 사전적 순서로 배열될 수도 있다. 따라서, 그룹에서의 적절한 코드의 위치는 사전적인 위치, 또는 선택된 그룹에서 코드들에 의해 표현된 다른 가변 길이 워드들에 대하여 인코딩될 가변 길이 워드의 프리픽스의 "인덱스" 에 의해 결정될 수도 있다. 이 사전적 인덱스를 이용하여, 인코딩 디바이스는 선택된 고정 길이 코드를 이용하여 가변 길이 워드를 인코딩한다 (104). 인코딩 디바이스는 사전적으로 오더링된 제 1 코드, 즉 그룹에 있어서 베이스 코드를 결정하고, 그 다음에 베이스 코드에 베이스 코드에 의해 표현된 워드의 인덱스와 인코딩될 워드의 인덱스 간의 차이, 또는 베이스 워드 인덱스가 0 인 경우 간단히 인덱스를 추가할 수도 있다.
본 예에서, 인코딩 디바이스는 인코딩될 워드의 사전적 인덱스 및 베이스 코드의 합으로서 워드를 인코딩한다. 전술된 바와 같이, 도 5 를 참조하여, 현재 그룹이 (3, 1), 1 그룹이고 코드의 사전적 인덱스가 3 개의 가능한 인덱스 위치들 0, 1 및 2 중에서, 2 이면, 코드는 인덱스 값 1 플러스 오프셋 코드 7 이고, 코드 8 과 동일하다. 유사하게, 인덱스 값이 2 이면, 코드는 오프셋 코드 7 플러스 2 이고, 9 와 동일하다. 각 경우에서, 메모리 효율적인 데이터 구조 내에 저장된 속성들은 VF 코딩 트리에 따라 가변 길이 워드들을 고정 길이 코드들로 인코딩하는 것을 실시한다.
도 8 은 도 6 의 방법에 따라 구성된 VF 코드들을 디코딩하기 위한 방법의 형태로 VF 코딩을 나타내는 흐름도이다. 도 8 에 도시된 방법은 본 개시물에 설명된 VF 디코딩 기술들의 예이다. 도 8 의 방법은 프로세서, 즉 매체 디코딩 디바이스와 같은 디코딩 디바이스와 연관된 하나 이상의 프로세서들에 의해 구현될 수도 있다. 매체 디코딩 디바이스들의 예들은 비디오 디코더 (26), 또는 비디오, 이미지, 스피치 및/또는 보이스 데이터와 같은 다양한 데이터를 디코딩하는데 유용한 다른 디코더들을 포함한다.
도 8 에 도시된 바와 같이, 디코딩 디바이스는 디코딩될 고정 길이 코드를 획득하여 이 코드에 의해 표현된 대응하는 가변 길이 워드를 생성한다 (106). 디코딩 디바이스는 VF 코딩 트리에 따라 코드 그룹들을 정의하는 데이터 구조를 액세스한다 (108). 데이터 구조는 그룹들 각각에서의 고정 길이 코드들에 의해 표현된 가변 길이 워드들에 대한 확률 및 종료 심볼, 프리픽스에서의 1 의 넘버들, 프리픽스 길이를 지정할 수도 있다. 데이터 구조를 이용하여, 고정 길이 코드를 디코딩하기 위해, 디코딩 디바이스는 트리에서의 그룹들의 베이스 코드에 대한 고정 길이 코드의 비교에 기초하여 그룹을 선택한다 (110).
예를 들어, 디코딩 디바이스는 트리에서의 j 그룹들와 연관된 베이스 코드들을 통해 탑-다운 검색을 행할 수도 있다. 검색은, 디코딩 디바이스가 디코딩될 코드보다 큰 베이스 코드를 식별할 때 종료된다. 식별된 베이스 코드와 연관된 그룹은 (j+1) 번째 그룹이고, 디코딩될 코드는 그 다음에 j 번째 그룹에 속한다. 예시와 같이, 도 5 를 참조하여, 디코딩될 고정 길이 코드가 코드 9 이면, 검색은 제 1 그룹으로 시작하는 그룹들 각각에 대한 베이스 코드들을 검토한다. 검색이 그룹 (3, 0),l 을 조사할 때, 코드 10 은 코드 9 보다 크고, 코드 9 는 따라서, 그룹들에서의 코드들에 의해 표현된 워드들의 사전적 오더링에 따라 그룹들의 오더링이 주어질 때 그룹 (3, 1), 1 인 바로 선행하는 그룹에 속하는 것으로 결정된다.
그룹 선택 시에, 디코딩 디바이스는 그룹의 베이스 코드에 대한 코드의 비교에 의해 선택된 그룹 내의 코드의 사전적 인덱스를 결정한다 (112). 그룹 (3, 1), 1 에 대한 베이스 코드가 7 이고, 디코딩될 코드가 9 이면, 코드 9 의 사전적 인덱스는 2, 즉 7 과 9 사이의 차이이다. 코드의 사전적 인덱스를 이용하여, 디코딩 디바이스는 대응하는 가변 길이 워드를 생성한다. 예를 들어, 디코딩 디바이스는 그룹에 대한 베이스 코드에 의해 표현된 가변 길이 워드, 및 코드의 사전적 인덱스에 기초하여 가변 길이 워드를 생성할 수도 있다 (114).
따라서, 도 5 를 참조하면, 베이스 코드 7 이 001 의 프리픽스를 갖는 가변 길이 워드 0011 을 표현하고, 코드 8 의 사전적 인덱스가 1 이면, 디코딩 디바이스는 프리픽스 001 에 1 의 인덱스를 추가하여 010 을 생성할 수도 있다. 디코딩 디바이스는 그 다음에 그룹에 대한 종료 비트 (1) 을 첨부하여 고정 길이 코드 8 에 대해 0101 의 가변 길이 워드를 생성할 수도 있다. 디코딩 디바이스는 그 다음에, 생성된 가변 길이 워드 (116) 을 이용하여 고정 길이 코드를 디코딩한다. 다시 말하면, 디코딩 디바이스는, 고정 길이 코드, 예를 들어 본 예에서 코드 8 의 디코딩된 출력과 같은, 생성된 가변 길이 워드, 예를 들어 본 예에서 0101 을 출력한다.
코드 구조는 본 개시물에 설명된 바와 같은 메모리 또는 데이터 저장 매체를 포함하는 다양한 컴퓨터 판독가능 매체 중 어느 하나에 거장된 데이터 구조에 의해 정의될 수도 있다. 예를 들어, 컴퓨터 판독가능 매체는 사전적 순서를 갖는 가변 길이 워드들을 나타내는 고정 길이 코드들의 세트를 나타내는 데이터 구조를 포함할 수도 있다. 고정 길이 코드들은 그룹에서 배열되고, 여기서 그룹들 각각은 가변 길이 워드들을 나타내는 하나 이상의 고정 길이 코드들을 포함하며, 가변 길이 워드들에 대해 확률은 동일하고 종료 심볼이 동일하다. 또한, 그룹들 각각에서 하나 이상의 고정 길이 코드들은 그들이 표현하는 가변 길이 워드들의 사전적 순서로 배열된다.
본 개시물에 따르면, VF 코드들을 분석하기 위한 기술이 제공된다. 후술되는 예들은 도 5 의 VF 코딩 트리의 VF 코드를 이용한다. 당업자는, 다른 VF 코드들이 설명된 분석 기술들과 함께 이용될 수도 있음을 인지할 것이다. VF 코드들은 복수의 고정 길이 코드들 (예를 들어, 1, 2, 5, 7, 8) 로 구성되는 압축된 비트스트림에서의 임의의 고정 길이 코드 (및 임의의 고정 길이 코드의 중간 디코딩) 에 대한 액세스를 허용한다. 압축된 비트스트림은 복수의 가변 길이 워드들 (예를 들어, 011, 101, 0100, 0011, 0101) 로 구성되는 압축되지 않은 비트스트림의 인코딩된 표현일 수도 있다. 그러나, 압축되지 않은 비트스트림에서의 생성된 가변 길이 워드의 위치는, 압축되지 않은 비트스트림에서의 생성된 가변 길이 워드에 선행하는 비트들이 알려져 있지 않는 것과 같이 알려져 있지 않다. 예를 들어, 예시의 시퀀스에서 고정 길이 코드 2 가 디코딩되어 워드 101 을 생성할 수도 있다. 그러나, 예시의 시퀀스에서 2 전에 오는 고정 길이 코드 1 을 디코딩하지 않고, 워드 101 이 속하는 압축되지 않은 비트스트림에서의 어느 위치에 있는지 모른다. 워드 101 의 위치를 결정하기 위한 일 방법은 워드 011 을 생성하기 위해 고정 길이 코드 1 을 디코딩하는 것이다. 따라서, 워드 011 이 길이가 3 이기 때문에 위치 워드 101 이 압축되지 않은 비트스트림의 4 번째 비트에서 시작하는 것으로 결정된다. VF 코드를 디코딩하는 복잡도는 바크만의 O 표기법으로 O(D) 이고, 여기서 D 는 기대되는 디코딩된 문구 길이이다.
그러나, 압축되지 않은 비트스트림에서 가변 길이 워드의 위치를 결정하기 위해서, 디코딩되도록 임의로 선택된 고정 길이 코드 전에 오는 고정 길이 코드들에 대응하는 워드들의 길이를 단지 알 필요가 있다. 압축된 스트림을 분석하는 제공된 기술은 고정 길이 코드들을 디코딩하도록 요구하지 않고, 압축된 스트림에서 고정 길이 코드들 각각과 연관된 가변 길이 워드들의 길이를 준다. 몇몇 실시형태에서, 설명된 분석 기술은 표준 검색 알고리즘과 이용될 수도 있다. 따라서, 분석 기술의 복잡도는, 예를 들어 보간 검색 알고리즘이 이용될 때 대략 O(log(log(D))) 이고, 또는 바이너리 검색 알고리즘이 이용될 때 O(log(D)) 일 수도 있다.
VF 분석 절차를 위한 예시의 의사-코드가 아래에서 요약된다. 예시의 절차는 전술된 바와 같은 베이스 코드들을 선택하고, 베이스 코드들에 대응하는 코드 인덱스들을 생성한다. 인덱스들은 어레이 레벨_오프셋[] 에 저장된다.
각 레벨에 대한 베이스 코드들의 리스트를 이용하여 VF 코드를 분석
Figure 112011052609244-pct00060
레벨들에 대한 베이스 코드들의 리스트를 이용하여 VF 코드들을 분석하기 위한 예시의 알고리즘은 아래에 나타난 바와 같다. 이 의사-코드는 VF 코드에 대응하는 워드의 길이를 식별하기 위해 베이스 코드들의 어레이에서 단순한 순차적인 검색을 이용한다. 검색이 순차적이기 때문에, 본 예의 알고리즘의 복잡도는 선형적 0(l) 이고, 여기서 l 은 인코딩된 시퀀스의 길이이다.
Figure 112011052609244-pct00061
제안된 데이터 구조는 또한, VF 코드들의 보다 빠른 분석 기술들을 지원한다. 레벨_오프셋[]은 필수적으로 코드 값들의 오더링된 어레이이기 때문에, 예를 들어 어레이의 2 분법적 검색 (dichotomic search) 이 수행될 수도 있다. 2분법적 검색을 이용하는 예시적인 빠른 분석 루틴에 대한 의사-코드는 아래에 나타난 바와 같다.
Figure 112011052609244-pct00062
2 분법적 검색은 0(l) 에서부터 단지 O(log l) 동작들의 분석의 복잡도를 감소시키고, 여기서 l 은 인코딩된 시퀀스의 길이이다. 이러한 알고리즘은, 임의의 실현 가능한 풀 디코딩 프로세스보다 더욱 빠른 서브-리니어 시간에서 VF 코드들을 분석할 수 있다.
VF 코드들의 분석의 속도에서의 추가의 향상은 전술된 데이터 구조에 의해 완전히 지원되는 것으로 인식된다. 예를 들어, 보간 검색 알고리즘은 워드 길이의 로케이션에 이용될 수도 있다. 이러한 알고리즘의 복잡도는 0 (log log l) 의 순서에 있다. 이러한 알고리즘의 예들은, G.H,Gonnet, "Handbook of algorithms and data structures", Addison- Wesley, 1984, pp 35-37 와 같은 알고리즘에 대한 텍스트북에서 알 수 있다.
분석 기술의 일 실시형태는 도 5 의 VF 코드 트리에 관하여 설명된다. 이 기술은 주어진 VF 코드 트리에 대한 베이스 코드워드들의 세트를 생성하는 것을 필요로 한다. 베이스 코드워드는 주어진 VF 코드에서 이용된 고정 길이 코드들의 세트의 서브세트이다. 단일의 베이스 코드워드는 적어도 하나의 외부 노드를 포함하는 VF 코드 트리의 각 레벨에 대해 선택된다. 몇몇 실시형태에서, VF 코드 트리의 특정 레벨에서 제 1 사전적으로 오더링된 고정 길이 코드는 그 레벨에 대한 베이스 코드워드이다. 예를 들어, 도 5 의 VF 코드 트리의 베이스 코드워드들은 {0, 1, 3, 10, 11, 12, 13, 14, 및 15} 이다. 다른 실시형태에서, 베이스 코드워드는 VF 코드 트리의 특정 레벨에서 제 1 사전적으로 오더링된 그룹일 수도 있다. 예를 들어, 도 5 의 VF 코드 트리의 베이스 코드워드들은 {(1,1),1; (2,1),1; (3,0),1; (4,0),1; (5,0),1; (6,0),1; (7,0),1; (8,0),1; 및 (9,0),0} 이다. 베이스 코드워드들은 그 다음에, 사전적 순서로 리스트에 배열된다. 이 리스트는 링크된 리스트, 어레이, 또는 다른 적합한 데이터 구조로서 메모리 (53) 에 저장될 수도 있다.
몇몇 실시형태에서, 베이스 코드워드는 디코딩된 베이스 코드워드에 대응하는 워드의 길이와 연관될 수도 있다. 주어진 고정 길이 코드와 연관된 가변 길이 워드의 길이는, 고정 길이 코드가 VF 트리 상에 위치하는 레벨이다. 따라서, 주어진 베이스 코드워드와 연관된 가변 길이 워드의 길이는 VF 트리 상의 베이스 코드워드와 같은 동일한 레벨에서 각각의 고정 길이 코드와 연관된 각각의 가변 길이 워드의 길이와 동일하다. 이 특성을 이용하면, 고정 길이 코드와 연관된 가변 길이 워드의 길이는 고정 길이 코드와 같은 VF 트리의 동일한 레벨 상에서의 베이스 코드워드와 연관된 가변 길이 워드의 길이를 결정함으로써 결정될 수 있다.
본 개시물의 디코딩 디바이스의 일 실시형태에서, 디코딩 디바이스는 주어진 VF 코드 트리의 레벨과 연관된 베이스 코드워드들의 리스트를 통해 검색을 행할 수도 있다. 검색은, 디코딩 디바이스가 분석될 코드보다 큰 베이스 코드워드를 식별할 때 종료되고, 여기서 식별된 베이스 코드워드는 리스트 상의 위치 x 에 있다. 디코딩 디바이스는 그 다음에, 리스트 상에서 위치 x-1 에 있는, 식별된 베이스 코드워드보다 작은 가장 큰 베이스 코드워드를 찾을 수도 있다. 이 베이스 코드워드는 분석될 코드와 연관된 것과 동일한 길이의 가변 길이 워드와 연관된다. 예를 들어, 도 5 의 VF 트리에 대한 베이스 코드워드들의 리스트는 (0, 1, 3, 10, 11, 12, 13, 14, 15) 일 수도 있다. 9 가 디코딩될 코드이면, 디코딩 비다이스는 베이스 코드워드 10 이 발견될 때까지 검색한다. 베이스 코드워드 3 은 그 다음에, 10 보다 작은 가장 큰 베이스 코드워드이다. 베이스 코드워드 3 은 크기 4 의 가변 길이 워드와 연관되므로, 9 와 연관된 가변 길이 워드의 길이는 또한 4 이다.
메모리 효율성은, 각각의 고정 길이 코드와 연관된 가변 길이 워드의 길이가 저장될 필요가 없다는 사실로 인해 획득된다. 차라리, 관련있는 정보 만이 각각의 베이스 코드워드에 대해 저장될 필요가 있다. 또한, 압축되지 않은 비트스트림에서 워드의 위치를 결정하는데 있어서 효율성은, 각각의 고정 길이 코드를 디코딩하는 것과는 대조적으로 고정 길이 코드들을 분석함으로써 위치가 결정될 수 있기 때문에 획득된다.
몇몇 실시형태에서, 압축된 비트스트림은 복수의 세그먼트들로 분할된다. 각 세그먼트는 하나 이상의 고정 길이 코드들을 포함할 수도 있다. 몇몇 실시형태에서, 각 세그먼트는 동일한 수의 고정 길이 코드들을 포함한다. 다른 실시형태에서, 상이한 세그먼트들은 상이한 수의 고정 길이 코드들을 포함할 수도 있다. 몇몇 이러한 실시형태들에서, 각 세그먼트는 선택된 세그먼트 전에 오는 압축된 비트스트림의 일부와 연관된 압축되지 않은 비트스트림의 길이와 연관된다. 예를 들어, 압축된 비트스트림 2,3,4,5,2,3,4,2,1 은 3 개의 세그먼트들 {(2,3,4); (5,2,3); (4,2,1)} 로 분할될 수도 있다. 제 1 세그먼트 (2,3,4) 는, 압축된 비트스트림의 일부가 제 1 세그먼트 전에 오지 않기 때문에 0 과 연관된다. 제 2 세그먼트 (5,2,3) 은 11 과 연관된다. 이는, 제 2 세그먼트 전에 압축된 비트스트림의 일부가 11 의 길이를 갖는 압축되지 않은 비트스트림 10100010011 에서 디코딩된 결과인 (2,3,4) 이기 때문이다. 이러한 실시형태에서, 랜덤하게 선택된 고정 길이 코드에 대응하는 워드의 위치를 알기 찾기 위해, 선택된 코드 전에 오는 각각의 고정 길이 코드를 분석할 필요가 없으나 단지 선택된 코드와 같이 동일한 세그먼트에서 선택된 코드 전에 오는 것들을 분석할 필요가 있다. 이는 세그먼트들의 길이를 저장하기 위한 여분의 메모리를 필요로 하지만, 분석될 필요가 있는 고정 길이 코드들의 넘버를 감소시킨다.
도 9 는 도 6 의 방법에 따라 구성된 VF 코드들을 디코딩하는 다른 방법의 형태에서 VF 코딩을 나타내는 흐름도이다. 프로세스 (900) 는, 압축된 비트스트림으로부터 랜덤하게 선택된 고정 길이 코드가 디코딩되고 대응하는 압축되지 않은 비트스트림에 위치하는 방법의 실시형태이다. 몇몇 실시형태에서, 프로세스 (900) 는 엔트로피 디코딩 유닛 (52) 에 의해 수행될 수도 있다. 단계 902 에서, 압축된 비트스트림으로부터 고정 길이 코드가 선택된다. 선택된 고정 길이 코드는, 예를 들어 비디오 스트림에서의 랜덤한 비디오의 프레임의 데이터 표현에 대응할 수도 있다. 다음 단계 904 에서, 선택된 고정 길이 코드가 위치하는 압축된 비트스트림의 세그먼트가 결정된다. 추가의 단계 906 에서, 선택된 고정 길이 코드 전에 오는 압축된 비트스트림의 일부에 대응하는 압축되지 않은 비트스트림의 길이가 결정된다. 전술된 바와 같이, 몇몇 실시형태에서 이 길이 값은 메모리 (53) 에 저장되고, 단계 906 은 메모리 (53) 로부터 길이 값을 검색하는 것을 포함한다. 단계 908 로 계속하여, 세그먼트에 대해, 선택된 고정 길이 코드 전에 오는 각 고정 길이 코드에 대응하는 각 워드의 길이가 결정된다. 일 실시형태에서, 길이들은 도 10 에 대하여 후술되는 프로세스 (1000) 에 의해 결정된다. 다음 단계 910 에서, 고정 길이 코드가 디코딩되어 대응하는 워드를 생성한다. 몇몇 실시형태에서, 디코딩은 도 8 에 대하여 설명된 방법에 의해 수행된다. 또한, 단계 912 에서, 압축되지 않은 비트스트림에서의 워드의 위치가 결정된다. 위치는 단계 908 에서 알아낸 길이 값들 각각을 이용하여 단계 906 에서 알아낸 길이 값을 가산함으로써 결정된다. 압축되지 않은 비트스트림에서의 워드의 시작 위치는 합산된 값 +1 과 동일하다. 몇몇 실시형태에서, 워드의 위치는 비디오의 스트림에서 비디오의 프레임의 위치일 수도 있다.
몇몇 실시형태에서, 압축된 비트스트림은 세그먼트들로 분할되지 않고, 단계들 904-906 이 프로세스 (900) 로부터 생략된다.
도 10 은 도 6 의 방법에 따라 구성된 VF 코드들에 대응하는 워드들의 길이를 결정하는 방법의 형태에서 VF 분석을 나타내는 프로세스 (1000) 의 흐름도이다. 몇몇 실시형태에서, 프로세스 (1000) 는 엔트로피 디코딩 유닛 (52) 에 의해 수행된다. 단계 1002 에서, 고정 길이 코드가 획득된다. 다음 단계 1004 에서, 전술된 바와 같이 베이스 코드워드들을 저장하는 데이터 구조가 액세스된다. 추가의 단계 1006 에서, 구조 내의 베이스 코드워트들에 대한 고정 길이 코드의 비교에 기초하여 데이터 구조로부터 베이스 코드워드가 선택된다. 선택된 베이스 코드워드는 고정 길이 코드보다 작은 사전적으로 가장 큰 베이스 코드워드이다. 다음 단계 1008 에서, 고정 길이 코드에 대응하는 가변 길이 워드의 길이가 결정된다. 길이는 베이스 코드워드와 연관된 가변 길이 워드의 길이와 동일하다. 몇몇 실시형태에서, 베이스 코드워드의 구조에 길이가 저장된다. 이러한 실시형태들에서 결정은 메모리로부터 길이를 검색하는 것을 포함한다.
당업자는, 정보 및 신호들이 다양한 상이한 기술들 및 테크닉들 중 어느 하나를 이용하여 표현될 수도 있음을 이해할 것이다. 예를 들어, 상기 설명 전체에서 참조될 수도 있는 데이터, 명령들, 커맨드들, 정보, 신호들, 비트들, 심볼들, 및 칩들은 전압, 전류, 전자기파, 자기 필드 또는 입자, 광학 필드 또는 입자, 또는 이들의 임의의 조합으로 표현될 수도 있다.
당업자는, 본원에 개시된 실시형태들과 관련하여 설명된 각종 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 단계들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 양자 모두의 조합으로서 구현될 수도 있음을 또한 인식할 것이다. 하드웨어 및 소프트웨어의 이 상호교환성을 명백하게 설명하기 위해, 각종 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 그 기능성에 관하여 일반적으로 전술되고 있다. 이러한 기능성이 하드웨어 또는 소프트웨어로서 구현되는지 여부는 전체 시스템 상에 부과된 설계 제약 및 특정 애플리케이션에 의존한다. 당업자는 각각의 특정 애플리케이션에 대해 변하는 방식으로 설명된 기능성을 구현할 수도 있으나, 이러한 구현 결정은 본 발명의 범위로부터 벗어나는 것으로서 해석되어서는 안 된다.
본원에 설명된 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수도 있다. 이러한 기술들은 범용 컴퓨터, 무선 통신 디바이스 핸드셋, 또는 무선 통신 디바이스 핸드셋 및 다른 디바이스들에서의 애플리케이션을 포함하는 다수의 이용을 갖는 집적 회로 디바이스들과 같은 각종 디바이스들 중 어느 하나로 구현될 수도 있다. 모듈들 또는 컴포넌트들로서 설명된 임의의 피처들은 집적된 로직 디바이스에서 함께 또는 이산적이지만 상호 동작 가능한 로직 디바이스들로서 구현될 수도 있다. 소프트웨어에서 구현되는 경우, 기술들은, 실행 시에 전술된 방법들 중 하나 이상을 수행하는 명령들을 포함하는 프로그램 코드를 포함하는 컴퓨터 판독가능 데이터 저장 매체에 의해 적어도 부분적으로 실현될 수도 있다. 컴퓨터 판독가능 데이터 저장 매체는, 재료들을 패키징하는 것을 포함하는 컴퓨터 프로그램 제품의 일부를 형성할 수도 있다. 컴퓨터 판독가능 매체는 동기식 동적 랜덤 액세스 메모리 (SDRAM) 와 같은 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 비 휘발성 랜덤 액세스 메모리 (NVRAM), 전기적으로 소거 가능한 프로그래머블 판독 전용 메모리 (EEPROM), 플래시 메모리, 자기 또는 광학 데이터 저장 매체, 등과 같은 데이터 저장 매체 또는 메모리를 포함할 수도 있다. 기술들은 부가적으로, 또는 대안적으로, 명령들 또는 데이터 구조들의 형태로 프로그램 코드를 반송 또는 통신하고, 전파된 신호 또는 파동과 같은 컴퓨터에 의해 액세스, 판독, 및/또는 실행될 수 있는 컴퓨터 판독가능 통신 매체에 의해 적어도 부분적으로 실현될 수도 있다.
프로그램 코드는, 하나 이상의 디지털 신호 프로세서들 (DSPs), 범용 마이크로프로세서들, 주문형 집적 회로들 (ASICs), 필드 프로그래머블 로직 어레이들 (FPGAs), 또는 다른 등가의 집적 또는 이산 로직 회로와 같은 하나 이상의 프로세서들을 포함할 수도 있는 프로세서에 의해 실행될 수도 있다. 이러한 프로세서는 본 개시물에 설명된 기술들 중 어느 하나를 수행하도록 구성될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있다; 그러나 다르게는, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 프로세서는 또한, 컴퓨팅 디바이스들의 조합, 예를 들어 DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 관련되는 하나 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성으로서 구현될 수도 있다. 따라서, 본원에 이용된 용어 "프로세서" 는 전술한 구조 중 어느 하나, 전술한 구조의 임의의 조합, 또는 본원에 설명된 기술들의 구현에 적합한 임의의 다른 구조 또는 장치를 지칭할 수도 있다. 또한, 몇몇 실시형태에서, 본원에 설명된 기능성은 인코딩 및 디코딩을 위해 구성된 전용 소프트웨어 모듈 또는 하드웨어 모듈 내에 제공될 수도 있고, 또는 결합형 비디오 인코더-디코더 (CODEC) 에 통합될 수도 있다.
본 발명의 각종 실시형태들이 설명되었다. 이들 및 다른 실시형태들은 다음의 청구범위의 범위 내에 있다.

Claims (25)

  1. 사전적 순서로 베이스 코드워드들의 리스트를 나타내는 데이터 구조를 메모리에 저장하는 단계로서, 고정 길이 코드를 포함하는, 가변 대 고정 길이 코드 트리의 각 레벨에 대해 하나의 베이스 코드워드가 존재하고, 각 베이스 코드워드는 상기 가변 대 고정 길이 코드 트리의 그 주어진 레벨에 대한 가장 작은 고정 길이 코드를 나타내고, 각 베이스 코드워드는 그 주어진 레벨보다 낮은 레벨에서 발견된 임의의 고정 길이 코드보다 크며, 각 베이스 코드워드는 그 주어진 레벨과 동일한 레벨에서 고정 길이 코드들로 표현된 워드들의 길이들과 동일한 길이를 갖는 워드를 나타내는, 상기 데이터 구조를 메모리에 저장하는 단계;
    복수의 고정 길이 코드들을 포함하는 압축된 데이터 세트로부터 제 1 고정 길이 코드를 선택하는 단계로서, 상기 압축된 데이터 세트에서 상기 제 1 고정 길이 코드 앞에 오는 적어도 제 2 고정 길이 코드가 존재하는, 상기 제 1 고정 길이 코드를 선택하는 단계;
    상기 제 2 고정 길이 코드와 연관된 제 1 베이스 코드워드를 결정하는 단계; 및
    상기 제 1 베이스 코드워드로 표현된 제 1 워드의 제 1 길이에 적어도 부분적으로 기초하여 상기 압축된 데이터 세트에 대응하는 압축되지 않은 데이터 세트에서 상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 데이터 구조는 어레이를 포함하는, 방법.
  3. 제 1 항에 있어서,
    상기 데이터 구조는 링크된 리스트를 포함하는, 방법.
  4. 제 1 항에 있어서,
    상기 데이터 구조는 바이너리 검색 트리를 포함하는, 방법.
  5. 제 1 항에 있어서,
    상기 데이터 구조는 디지털 검색 트리를 포함하는, 방법.
  6. 제 1 항에 있어서,
    상기 제 1 고정 길이 코드와 연관된 세그먼트를 결정하는 단계를 더 포함하고,
    상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하는 단계는 상기 세그먼트와 연관된 오프셋에 또한 기초하는, 방법.
  7. 제 1 항에 있어서,
    상기 압축된 데이터 세트는 압축된 비디오 스트림을 포함하는, 방법.
  8. 사전적 순서로 베이스 코드워드들의 리스트를 나타내는 데이터 구조를 저장하도록 구성된 메모리로서, 고정 길이 코드를 포함하는, 가변 대 고정 길이 코드 트리의 각 레벨에 대해 하나의 베이스 코드워드가 존재하고, 각 베이스 코드워드는 상기 가변 대 고정 길이 코드 트리의 그 주어진 레벨에 대한 가장 작은 고정 길이 코드를 나타내고, 각 베이스 코드워드는 그 주어진 레벨보다 낮은 레벨에서 발견된 임의의 고정 길이 코드보다 크며, 각 베이스 코드워드는 그 주어진 레벨과 동일한 레벨에서 고정 길이 코드들로 표현된 워드들의 길이들과 동일한 길이를 갖는 워드를 나타내는, 상기 메모리; 및
    복수의 고정 길이 코드들을 포함하는 압축된 데이터 세트로부터 제 1 고정 길이 코드를 선택하되, 상기 압축된 데이터 세트에서 상기 제 1 고정 길이 코드 앞에 오는 적어도 제 2 고정 길이 코드가 존재하고;
    상기 제 2 고정 길이 코드와 연관된 제 1 베이스 코드워드를 결정하며;
    상기 제 1 베이스 코드워드로 표현된 제 1 워드의 제 1 길이에 적어도 부분적으로 기초하여 상기 압축된 데이터 세트에 대응하는 압축되지 않은 데이터 세트에서 상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하도록 구성된 프로세서를 포함하는, 장치.
  9. 제 8 항에 있어서,
    상기 데이터 구조는 어레이를 포함하는, 장치.
  10. 제 8 항에 있어서,
    상기 데이터 구조는 링크된 리스트를 포함하는, 장치.
  11. 제 8 항에 있어서,
    상기 데이터 구조는 바이너리 검색 트리를 포함하는, 장치.
  12. 제 8 항에 있어서,
    상기 데이터 구조는 디지털 검색 트리를 포함하는, 장치.
  13. 제 8 항에 있어서,
    상기 프로세서는 상기 제 1 고정 길이 코드와 연관된 세그먼트를 결정하도록 또한 구성되고,
    상기 프로세서는 상기 세그먼트와 연관된 오프셋에 더 기초하여 상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하도록 또한 구성되는, 장치.
  14. 제 8 항에 있어서,
    상기 압축된 데이터 세트는 압축된 비디오 스트림을 포함하는, 장치.
  15. 사전적 순서로 베이스 코드워드들의 리스트를 나타내는 데이터 구조를 메모리에 저장하기 위한 수단으로서, 고정 길이 코드를 포함하는, 가변 대 고정 길이 코드 트리의 각 레벨에 대해 하나의 베이스 코드워드가 존재하고, 각 베이스 코드워드는 상기 가변 대 고정 길이 코드 트리의 그 주어진 레벨에 대한 가장 작은 고정 길이 코드를 나타내고, 각 베이스 코드워드는 그 주어진 레벨보다 낮은 레벨에서 발견된 임의의 고정 길이 코드보다 크며, 각 베이스 코드워드는 그 주어진 레벨과 동일한 레벨에서 고정 길이 코드들로 표현된 워드들의 길이들과 동일한 길이를 갖는 워드를 나타내는, 상기 데이터 구조를 메모리에 저장하기 위한 수단;
    복수의 고정 길이 코드들을 포함하는 압축된 데이터 세트로부터 제 1 고정 길이 코드를 선택하기 위한 수단으로서, 상기 압축된 데이터 세트에서 상기 제 1 고정 길이 코드 앞에 오는 적어도 제 2 고정 길이 코드가 존재하는, 상기 제 1 고정 길이 코드를 선택하기 위한 수단;
    상기 제 2 고정 길이 코드와 연관된 제 1 베이스 코드워드를 결정하기 위한 수단; 및
    상기 제 1 베이스 코드워드로 표현된 제 1 워드의 제 1 길이에 적어도 부분적으로 기초하여 상기 압축된 데이터 세트에 대응하는 압축되지 않은 데이터 세트에서 상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하기 위한 수단을 포함하는, 장치.
  16. 제 15 항에 있어서,
    상기 데이터 구조는 어레이를 포함하는, 장치.
  17. 제 15 항에 있어서,
    상기 데이터 구조는 링크된 리스트를 포함하는, 장치.
  18. 제 15 항에 있어서,
    상기 데이터 구조는 바이너리 검색 트리를 포함하는, 장치.
  19. 제 15 항에 있어서,
    상기 데이터 구조는 디지털 검색 트리를 포함하는, 장치.
  20. 제 15 항에 있어서,
    상기 제 1 고정 길이 코드와 연관된 세그먼트를 결정하기 위한 수단을 더 포함하고,
    상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하기 위한 수단은 상기 세그먼트와 연관된 오프셋에 기초하여 상기 위치를 또한 결정하는, 장치.
  21. 제 15 항에 있어서,
    상기 압축된 데이터 세트는 압축된 비디오 스트림을 포함하는, 장치.
  22. 실행 시에 방법을 수행하는 명령들을 포함하는 컴퓨터 판독가능 매체로서,
    상기 방법은,
    사전적 순서로 베이스 코드워드들의 리스트를 나타내는 데이터 구조를 메모리에 저장하는 단계로서, 고정 길이 코드를 포함하는, 가변 대 고정 길이 코드 트리의 각 레벨에 대해 하나의 베이스 코드워드가 존재하고, 각 베이스 코드워드는 상기 가변 대 고정 길이 코드 트리의 그 주어진 레벨에 대한 가장 작은 고정 길이 코드를 나타내고, 각 베이스 코드워드는 그 주어진 레벨보다 낮은 레벨에서 발견된 임의의 고정 길이 코드보다 크며, 각 베이스 코드워드는 그 주어진 레벨과 동일한 레벨에서 고정 길이 코드들로 표현된 워드들의 길이들과 동일한 길이를 갖는 워드를 나타내는, 상기 데이터 구조를 메모리에 저장하는 단계;
    복수의 고정 길이 코드들을 포함하는 압축된 데이터 세트로부터 제 1 고정 길이 코드를 선택하는 단계로서, 상기 압축된 데이터 세트에서 상기 제 1 고정 길이 코드 앞에 오는 적어도 제 2 고정 길이 코드가 존재하는, 상기 제 1 고정 길이 코드를 선택하는 단계;
    상기 제 2 고정 길이 코드와 연관된 제 1 베이스 코드워드를 결정하는 단계; 및
    상기 제 1 베이스 코드워드로 표현된 제 1 워드의 제 1 길이에 적어도 부분적으로 기초하여 상기 압축된 데이터 세트에 대응하는 압축되지 않은 데이터 세트에서 상기 제 1 고정 길이 코드로 표현된 워드의 위치를 결정하는 단계를 포함하는, 컴퓨터 판독가능 매체.
  23. 삭제
  24. 삭제
  25. 삭제
KR1020117015942A 2008-12-09 2009-12-08 가변-대-고정 길이 코드들의 빠른 분석 KR101187243B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US12114708P 2008-12-09 2008-12-09
US61/121,147 2008-12-09
US12/631,215 US8004431B2 (en) 2008-12-09 2009-12-04 Fast parsing of variable-to-fixed-length codes
US12/631,215 2009-12-04
PCT/US2009/067148 WO2010077658A2 (en) 2008-12-09 2009-12-08 Fast parsing of variable-to-fixed-length codes

Publications (2)

Publication Number Publication Date
KR20110102451A KR20110102451A (ko) 2011-09-16
KR101187243B1 true KR101187243B1 (ko) 2012-10-02

Family

ID=42230474

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117015942A KR101187243B1 (ko) 2008-12-09 2009-12-08 가변-대-고정 길이 코드들의 빠른 분석

Country Status (7)

Country Link
US (1) US8004431B2 (ko)
EP (1) EP2377247A2 (ko)
JP (1) JP5313362B2 (ko)
KR (1) KR101187243B1 (ko)
CN (1) CN102239641B (ko)
TW (1) TW201119250A (ko)
WO (1) WO2010077658A2 (ko)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6624761B2 (en) * 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6601104B1 (en) * 1999-03-11 2003-07-29 Realtime Data Llc System and methods for accelerated data storage and retrieval
US7181608B2 (en) 2000-02-03 2007-02-20 Realtime Data Llc Systems and methods for accelerated loading of operating systems and application programs
US9143546B2 (en) 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US8692695B2 (en) 2000-10-03 2014-04-08 Realtime Data, Llc Methods for encoding and decoding data
US7386046B2 (en) 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
CN105828073B (zh) 2009-07-02 2019-09-17 汤姆逊许可证公司 使用自适应树选择来对二进制集进行视频编解码的方法和装置
US20120014433A1 (en) * 2010-07-15 2012-01-19 Qualcomm Incorporated Entropy coding of bins across bin groups using variable length codewords
US8879634B2 (en) 2010-08-13 2014-11-04 Qualcomm Incorporated Coding blocks of data using one-to-one codes
US9042440B2 (en) 2010-12-03 2015-05-26 Qualcomm Incorporated Coding the position of a last significant coefficient within a video block based on a scanning order for the block in video coding
US8976861B2 (en) 2010-12-03 2015-03-10 Qualcomm Incorporated Separately coding the position of a last significant coefficient of a video block in video coding
US20120163456A1 (en) * 2010-12-22 2012-06-28 Qualcomm Incorporated Using a most probable scanning order to efficiently code scanning order information for a video block in video coding
US9195675B2 (en) * 2011-02-24 2015-11-24 A9.Com, Inc. Decoding of variable-length data with group formats
US9106913B2 (en) 2011-03-08 2015-08-11 Qualcomm Incorporated Coding of transform coefficients for video coding
US9338449B2 (en) 2011-03-08 2016-05-10 Qualcomm Incorporated Harmonized scan order for coding transform coefficients in video coding
US9491469B2 (en) 2011-06-28 2016-11-08 Qualcomm Incorporated Coding of last significant transform coefficient
US9407917B2 (en) 2011-06-30 2016-08-02 Samsung Electronics Co., Ltd. Video encoding method with bit depth adjustment for fixed-point conversion and apparatus therefor, and video decoding method and apparatus therefor
US8977065B2 (en) * 2011-07-21 2015-03-10 Luca Rossato Inheritance in a tiered signal quality hierarchy
EP2749023A4 (en) 2011-08-25 2016-04-06 Thomson Licensing HIERARCHICAL ENCODING AND DECODING BY ENTROPY
KR20130050403A (ko) * 2011-11-07 2013-05-16 오수미 인터 모드에서의 복원 블록 생성 방법
WO2013162283A1 (ko) * 2012-04-24 2013-10-31 엘지전자 주식회사 비디오 신호 처리 방법 및 장치
US8754792B2 (en) * 2012-07-14 2014-06-17 Sigma Designs, Inc. System and method for fixed rate entropy coded scalar quantization
WO2014051409A1 (ko) * 2012-09-28 2014-04-03 삼성전자 주식회사 참조 픽처 정보를 이용한 병렬 처리 비디오 부호화 방법 및 장치, 병렬 처리 비디오 복호화 방법 및 장치
US8823557B1 (en) * 2013-05-10 2014-09-02 International Business Machines Corporation Random extraction from compressed data
US10090864B2 (en) 2014-09-22 2018-10-02 Samsung Display Co., Ltd. System and method for decoding variable length codes
US9734595B2 (en) * 2014-09-24 2017-08-15 University of Maribor Method and apparatus for near-lossless compression and decompression of 3D meshes and point clouds
US10283091B2 (en) * 2014-10-13 2019-05-07 Microsoft Technology Licensing, Llc Buffer optimization
US10609421B2 (en) 2018-07-12 2020-03-31 Google Llc Context derivation for coefficient coding
US10547869B2 (en) 2017-12-08 2020-01-28 Google Llc Template-based entropy coding of quantized transform coefficients
US10831653B2 (en) 2018-05-15 2020-11-10 Micron Technology, Inc. Forwarding code word address
US11003375B2 (en) 2018-05-15 2021-05-11 Micron Technology, Inc. Code word format and structure
CN110739974B (zh) * 2018-07-19 2023-11-10 嘉楠明芯(北京)科技有限公司 数据压缩方法及装置和计算机可读存储介质
US11822902B2 (en) * 2020-01-21 2023-11-21 California Institute Of Technology Systems and methods for performing lossless source coding
WO2023107007A2 (en) * 2021-12-06 2023-06-15 Nanyang Technological University Decoders for decoding a codeword of a tunstall code

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5411614A (en) * 1977-06-27 1979-01-27 Nec Corp Code conversion unit for digital signal
US4188669A (en) * 1978-01-13 1980-02-12 Ncr Corporation Decoder for variable-length codes
KR100242635B1 (ko) * 1996-01-25 2000-02-01 윤종용 가변장 부호화 및 가변장 복호화 시스템
JP2002237754A (ja) * 2001-02-07 2002-08-23 Canon Inc 可変長復号化装置及び方法
JP2002261623A (ja) * 2001-02-28 2002-09-13 Canon Inc 復号装置、復号方法、記憶媒体及びプログラムソフトウェア
US20030236793A1 (en) * 2002-06-19 2003-12-25 Ericsson Inc. Compressed prefix tree structure and method for traversing a compressed prefix tree
US6839005B1 (en) * 2003-11-07 2005-01-04 Broadcom Corporation Low memory and MIPS efficient technique for decoding Huffman codes using multi-stage, multi-bits lookup at different levels
US7545293B2 (en) 2006-11-14 2009-06-09 Qualcomm Incorporated Memory efficient coding of variable length codes
JP4703730B2 (ja) * 2007-01-19 2011-06-15 三菱電機株式会社 テーブル装置、可変長符号化装置、可変長復号装置及び可変長符号化復号装置
US7626522B2 (en) 2007-03-12 2009-12-01 Qualcomm Incorporated Data compression using variable-to-fixed length codes

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
T. Algra: "Fast and efficient vari able-to-fi xed length coding algorithm" vol . 28, no. 15, IEE STEVENAGE, ELECTRONICS LETTERS, pages 1399-1401, 16 July 1992

Also Published As

Publication number Publication date
US8004431B2 (en) 2011-08-23
US20100141489A1 (en) 2010-06-10
CN102239641A (zh) 2011-11-09
CN102239641B (zh) 2014-12-10
JP2012511879A (ja) 2012-05-24
WO2010077658A2 (en) 2010-07-08
KR20110102451A (ko) 2011-09-16
EP2377247A2 (en) 2011-10-19
TW201119250A (en) 2011-06-01
JP5313362B2 (ja) 2013-10-09
WO2010077658A3 (en) 2010-10-21

Similar Documents

Publication Publication Date Title
KR101187243B1 (ko) 가변-대-고정 길이 코드들의 빠른 분석
US7626522B2 (en) Data compression using variable-to-fixed length codes
JP4897888B2 (ja) メモリ効率の良い(memoryefficient)適応形ブロックコーディング
JP4897887B2 (ja) 可変長コードのメモリ効率の良いコーディング
RU2426227C2 (ru) Кодирование кодов переменной длины с эффективным использованием памяти
US7932843B2 (en) Parallel CABAC decoding for video decompression
TWI554082B (zh) 於視訊寫碼處理中用於係數階層寫碼之萊斯(rice)參數更新
KR101321012B1 (ko) Cabac 비트스트림의 멀티­스테이지 디코딩을 위한 아키텍처
JP2010509895A5 (ko)
JP2010509893A5 (ko)
WO2012021353A1 (en) Coding blocks of data using one-to-one codes
US10419772B2 (en) Parallel arithmetic coding techniques
WO2020114356A1 (zh) 帧间预测方法和相关装置
US8421655B2 (en) Apparatus for parallel entropy encoding and decoding

Legal Events

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

Payment date: 20160629

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170629

Year of fee payment: 6

LAPS Lapse due to unpaid annual fee