KR20210139398A - 엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스 - Google Patents

엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스 Download PDF

Info

Publication number
KR20210139398A
KR20210139398A KR1020217033607A KR20217033607A KR20210139398A KR 20210139398 A KR20210139398 A KR 20210139398A KR 1020217033607 A KR1020217033607 A KR 1020217033607A KR 20217033607 A KR20217033607 A KR 20217033607A KR 20210139398 A KR20210139398 A KR 20210139398A
Authority
KR
South Korea
Prior art keywords
bitstream
data
data unit
decoder
reverse order
Prior art date
Application number
KR1020217033607A
Other languages
English (en)
Inventor
데이비드 플린
세바스티앙 라쎄르
Original Assignee
블랙베리 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 블랙베리 리미티드 filed Critical 블랙베리 리미티드
Publication of KR20210139398A publication Critical patent/KR20210139398A/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
    • H03M7/4006Conversion to or from arithmetic code
    • 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/3068Precoding preceding compression, e.g. Burrows-Wheeler transformation
    • H03M7/3079Context modeling
    • 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4056Coding table selection
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

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

Abstract

일부 데이터 심볼은 엔트로피 코딩되고 일부 데이터 심볼은 바이패스 코딩되는 데이터 인코딩 및 디코딩 방법이 개시된다. 인코더는 코딩된 심볼을 엔트로피 코딩된 스트림과 바이패스 코딩된 스트림으로 분리한다. 스트림은 포워딩된 오더로 스트림 중 하나를 리버스 오더로 다른 스트림을 포함하도록 구성된 페이로드를 갖는 데이터 유닛에 패키징되며, 리버스 오더 스트림은 데이터 유닛의 끝과 정렬된다. 이러한 방식으로, 디코더에서, 디코더는 시작으로부터 포워드 오더 스트림을 디코딩하고, 리버스 오더로 심볼을 추출함으로써 데이터 유닛의 끝에서 처음부터 리버스 오더 스트림을 디코딩하는 것을 시작할 수도 있다. 데이터 유닛은 스트림의 길이를 시그널링할 필요가 없다. 디코더는 명시적 또는 암시적 시그널링으로부터 데이터 유닛의 길이를 결정한다.

Description

엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스
본 출원은 일반적으로 데이터 압축 그리고 하나의 특정 예에서는, 심볼의 엔트로피 코딩에 관한 것이다. 본 출원은 엔트로피 코딩 시스템에서 동일 확률(equiprobable) 심볼을 처리하기 위한 방법 및 디바이스를 기술한다.
데이터 압축은 정보를 효율적으로 저장, 송신 및 재생하기 위해 통신 및 컴퓨터 네트워킹에서 사용된다. 데이터는 일반적으로 알파벳에서 가져온 심볼의 형태이다. 알파벳은 일부 예에서는 이진수일 수 있지만, 다른 많은 예에서는 이진수가 아닐 수도 있다.
엔트로피 코딩은 다른 방법에 의해 시리즈 또는 시퀀스를 표현하는 데 필요한 비트보다 적은 비트를 요구하는 방식으로 심볼의 시리즈 또는 시퀀스를 인코딩하는 데 종종 사용된다. 엔트로피 코딩은 일부 경우에 있어서 컨텍스트 적응 엔트로피 코딩일 수 있다. 엔트로피 인코딩 프로세스의 예에는 허프만 코드, 산술 코딩 등과 같은 가변 길이 코드가 포함된다.
동일 확률 심볼로 구성된 알파벳은 압축할 수 없다. 따라서, 동일 확률 심볼을 전달하기 위해 산술 코더 또는 기타 복잡한 엔트로피 코더를 사용하는 것은 바람직하지 않다. 그러나, 시스템 설계상의 이유로, 단일 엔트로피 코더를 사용하는 동안 일반 심볼과 동일 확률 심볼을 모두 인터리빙하는 것이 종종 바람직하다.
엔트로피 코딩된 심볼과 동일 확률 심볼 모두를 효율적으로 처리할 수 있는 인코더 및 디코더를 제공하는 것이 유리할 것이다.
이제, 예로서, 본 출원의 예시적인 실시예를 도시하는 첨부 도면을 참조할 것이며, 여기서:
도 1은 엔트로피 코딩 및 바이패스 코딩 모두를 사용하는 엔트로피 코더의 예를 도시한다.
도 2는 예시적인 데이터 유닛의 구조를 도식적으로 도시한다.
도 3은 인코더의 일 예를 블록도 형태로 도시한다.
도 4는 디코더의 일 예를 블록도 형태로 도시한다.
도 5는 하나의 예시적인 인코딩 프로세스를 흐름도 형태로 도시한다.
도 6은 하나의 예시적인 디코딩 프로세스를 흐름도 형태로 도시한다.
도 7은 다른 예시적인 데이터 유닛의 구조를 도식적으로 도시한다.
도 8은 인코더의 예시적인 실시예의 단순화된 블록도를 도시한다.
도 9는 디코더의 예시적인 실시예의 단순화된 블록도를 도시한다.
유사한 구성요소를 나타내기 위해 유사한 참조 번호가 상이한 도면에서 사용될 수 있다.
본 출원은, 바이패스 코딩된 데이터와 함께 엔트로피 코딩된 데이터를 인코딩 및 디코딩하기 위한 방법 및 디바이스를 설명하며, 여기서 바이패스 코딩된 데이터는 동일 확률 심볼의 논-엔트로피 코딩을 포함할 수 있다. 방법 및 디바이스는 개별 스트림의 길이를 시그널링해야 하는 비용을 회피하는 방식으로 페이로드에서 엔트로피 코딩 및 바이패스 코딩된 데이터의 스트림을 함께 패키징하는 단계를 포함할 수 있다.
일 양태에서, 본 출원은 인코딩된 데이터를 재구성하기 위해 데이터 유닛을 디코딩하는 방법을 설명한다. 방법은 프리앰블 및 이에 후속하는 페이로드를 포함하는 데이터 유닛을 수신하는 단계 - 상기 페이로드는 포워드 오더 비트스트림 및 이에 후속하는 리버스 오더 비트스트림을 포함함 -; 데이터 유닛의 길이를 결정하는 단계; 디코딩 유닛으로부터의 심볼에 대한 요청에 응답하여, 포워드 오더 비트스트림으로부터 포워드 오더로 또는 리버스 오더 비트스트림으로부터 리버스 오더로 데이터를 선택적으로 판독하는 단계; 및 심볼을 재구성하도록 디코딩 유닛에서 데이터를 디코딩하는 단계를 포함한다. 포워드 오더 비트스트림 및 리버스 오더 비트스트림 중 하나는, 엔트로피 인코딩된 심볼을 포함하고, 포워드 오더 비트스트림 및 리버스 오더 비트스트림 중 다른 하나는 바이패스 코딩된 심볼을 포함한다.
다른 양태에서, 본 출원은 인코딩된 데이터를 송신하는 방법을 기술하고, 여기서 인코딩된 데이터는 엔트로피 인코딩된 심볼의 제1 비트스트림 및 바이패스 코딩된 심볼의 제2 비트스트림을 포함한다. 방법은 제1 비트스트림 및 제2 비트스트림을 버퍼링하는 단계; 리버스 오더 비트스트림을 생성하기 위해 제1 비트스트림 및 제2 비트스트림 중 하나를 반전시키는 단계 - 여기서 제1 비트스트림 및 제2 비트스트림 중 다른 하나는 포워드 오더 비트스트림임 -; 프리앰블 및 이에 후속하는 포워드 오더 비트스트림을 포함하는 데이터 유닛을 생성하는 단계 - 상기 포워드 오더 비트스트림은 리버스 오더 비트스트림이 후속함 -; 및 데이터 유닛을 출력하는 단계를 포함한다.
추가 양태에서, 본 출원은 이러한 인코딩 및 디코딩 방법을 구현하도록 구성된 인코더 및 디코더를 설명한다.
또 다른 양태에서, 본 출원은 실행될 때 하나 이상의 프로세서로 하여금 설명된 인코딩 및/또는 디코딩 방법을 수행하게 하는 컴퓨터 실행 가능한 프로그램 명령을 저장하는 비일시적 컴퓨터 판독 가능한 매체를 설명한다.
또 다른 양태에서, 본 출원은 컴퓨터에 의해 실행될 때 컴퓨터로 하여금 설명된 인코딩 및/또는 디코딩 방법을 수행하게 하는 프로그램 명령을 포함하는 컴퓨터 판독 가능한 신호를 설명한다.
본 출원의 다른 양태 및 특징은 첨부 도면과 함께 실시예의 다음 설명의 검토로부터 당업자에 의해 이해될 것이다.
본 발명의 일 양태 또는 실시예와 관련하여 설명된 임의의 특징은 또한 하나 이상의 다른 양태/실시예와 관련하여 사용될 수 있다. 본 발명의 이들 및 다른 양태는 본 명세서에 기술된 실시예로부터 명백하고 이를 참조하여 설명될 것이다.
본 출원에서 "및/또는"이라는 용어는, 반드시 추가 요소를 배제하지 않으면서, 나열된 요소만, 이들의 임의의 하위 조합, 또는 모든 요소 중 임의의 하나를 포함하여, 나열된 요소의 모든 가능한 조합 및 하위 조합을 포함하는 것으로 의도된다.
본 출원에서, "... 또는 ... 중 적어도 하나"라는 문구는, 임의의 추가 요소를 반드시 제외하지 않고 그리고 모든 요소를 반드시 요구하지 않으면서, 나열된 요소만, 이들의 임의의 하위 조합, 또는 모든 요소 중 임의의 하나를 포함하여, 나열된 요소 중 임의의 하나 이상의 요소를 포함하는 것으로 의도된다.
먼저, 예시적인 인코더(100)의 블록도를 도시하는 도 1을 참조한다. 인코더(100)는 소스 데이터를 인코딩된 심볼의 비트스트림으로 변환하는 인코딩 유닛(102)을 포함한다. 소스 데이터는 압축 방식에 따라 압축되는 임의의 데이터를 포함할 수 있다. 비제한적인 예로는 이미지 데이터, 오디오 데이터, 비디오 데이터, 포인트 클라우드 데이터, 및 기타 유형의 데이터가 포함된다. 인코딩 유닛(102)으로부터 출력된 비트스트림은, 엔트로피 코딩을 사용하여 코딩된 일부 심볼 및 바이패스 코딩된 일부 심볼을 포함할 수 있다.
페이로드 패키저(packager)(104)는 비트스트림을 수신하고 저장 또는 송신을 위해 비트스트림을 패키징한다. 일부 경우에, 이것은 비트스트림을 부분으로 분할하고 각 데이터 유닛이 프리앰블 및 비트스트림의 일부를 갖는 페이로드를 포함하도록 부분을 패킷화하는 것을 포함한다. 그 후, 데이터 유닛은 저장 또는 송신을 위해 출력된다.
일부 경우에, 산술 코더와 같은 엔트로피 코더는, 동일 확률 심볼을 처리하도록 구성될 수 있다. 예를 들어, 이진 산술 코더에서, 간격의 세분화는 단순화될 수 있다(예를 들어, 비트 시프트로 곱셈 구현). 그러나, 코덱 상태를 업데이트하고 디코딩된 심볼 값을 (디코더에서) 결정하는 데 여전히 계산이 필요하다. 이러한 최적화는, 정적 p = 0.5 확률 모델을 사용하도록 특정 심볼을 지정함으로써 압축 시스템의 설계에서 활용될 수 있으며, 지정된 심볼은 바이패스 코딩되는 것으로 지칭된다. H. 264 | AVC 및 H. 265 | HEVC 비디오 압축 시스템은 모두 이러한 접근 방식을 사용한다.
대안적인 구현에서, 심볼 스트림은 2개의 서브스트림으로 분할될 수 있다. 제1 스트림은 산술적으로 코딩되어 소위 AEC(Arithmetic Entropy Coded) 스트림을 생성하는 논-바이패스 코딩된 심볼로 구성되며, 제2 스트림은 압축되지 않은 바이패스 코딩된 심볼의 시퀀스이다. 2 개의 개별 스트림을 패키징하고 송신하기 위해, 길이 필드는 제1 코딩된 서브스트림의 길이 L을 나타내는 데 사용되며, 이를 통해 디코더는 두 스트림에 동시에 액세스할 수 있고, 디코더는 디코딩 동안에 적절한 시퀀스로 심볼을 리-멀티플렉싱하게 필요가 있다. 이 접근 방식은 길이 필드의 추가 시그널링으로 인해 압축 효율성을 감소시키는 결과를 초래하는 반면에 디코더가 제2 서브스트림의 시작(위치 L + 1에 있음)에 액세스하기 위해 L 길이의 제1 서브스트림의 전체를 버퍼링해야 한다.
일 양태에서, 본 출원은 길이 필드의 시그널링 오버헤드없이 엔트로피-코딩 스트림 및 바이패스-코딩된 스트림의 병렬 디코딩을 가능하게 하는 심볼 코딩 방법을 제공한다. 코딩된 데이터가 디코더에 의해 결정될 수 있는 길이를 갖는 데이터 유닛으로 시그널링되는 시스템에서, 데이터 유닛의 페이로드는 스트림 중 하나를 포워드 오더로 포함하고 다른 스트림을 리버스 오더로 포함하도록 구성되며, 리버스 오서 스트림은 데이터 유닛의 끝과 정렬된다. 이러한 방식으로, 디코더에서, 디코더는 프리앰블 또는 다른 메타데이터 구조가 후속하는 데이터 유닛의 전방 부근의 시작 부분으로부터 포워드 오더 스트림의 디코딩을 시작할 수 있으며, 리버스 오더로 심볼을 추출함으로써 데이터 유닛의 끝에서 시작하는 것으로부터 리버스 오더 스트림의 디코딩을 시작할 수도 있다. 특히, 디코더는 스트림 디코딩을 시작하기 위해 스트림 중 어느 하나의 길이를 알 필요가 없다. 디코더는 양단에서 데이터 유닛을 소비할 수 있도록 메모리의 전체 데이터 유닛을 버퍼링할 필요가 있음을 또한 인식할 것이다.
일 예에서, 리버스 오더 포인터는, 데이터 유닛의 끝에서 시작하고 코딩된 심볼이 리버스 오더 스트림으로부터 판독됨에 따라 감분될 수 있다. 다른 예에서, 데이터 유닛은 리버스 오더로 메모리에 카피되고 리버스 스트림 포인터는 리버스 데이터 유닛의 시작과 정렬된 후, 리버스 오더 스트림의 코딩된 심볼을 순서대로 판독하도록 증분될 수 있다.
도 2는 예시적인 데이터 유닛(200)을 도식적으로 도시한다. 데이터 유닛(200)은 그 시작 부분에 프리앰블(202)을 포함하도록 구성된다. 프리앰블(202)은 다양한 실시예에서, 예를 들어 버전 코드, 다양한 유형의 시그널링 플래그(예를 들어, 디코딩 또는 재구성 프로세스에 의해 사용될 파라미터), 타임스탬프, 데이터 유형 코드 등과 같은 메타데이터를 포함할 수 있는 헤더 정보를 포함한다. 프리앰블은 프로토콜에 의해 고정된 길이를 가질 수 있고, 비트스트림의 다른 곳에서 시그널링되는 고정된 길이를 가질 수 있거나, 예를 들어 종료 코드 등의 검출을 통하여 디코더에 의해 결정될 수 있는 가변 길이를 가질 수 있음을 이해해야 한다. 일부 구현들에서, 프리앰블(202)은 데이터 유닛 길이를 시그널링할 수 있다. 이는 명시적 길이 필드를 포함할 수 있거나 또는 길이는 길이 값에 링크되는 데이터 유닛 유형 코드 또는 다른 메타데이터에 의해 지정될 수 있다.
송신 순서에서 프리앰블(202) 다음에는 페이로드(204)가 있다. 페이로드(204)의 프론트 엔드는 순방향 순서 스트림(206)을 포함한다. 포워드 오더 스트림(206)은 페이로드(204)의 시작 부분과 정렬된다. 페이로드(204)는 리버스 오더 스트림(208)을 더 포함한다. 리버스 오더 스트림(208)은, 반전 이전의 비트스트림의 원래 시작을 데이터 유닛(200)의 끝과 정렬시키기 위해, 반전되어 페이로드(204)에 추가된 비트스트림이다.
일 예에서, 포워드 오더 스트림(206)은 엔트로피 코딩된 심볼을 포함하고, 리버스 오더 스트림(208)은 바이패스 코딩된 심볼을 포함한다. 다른 예에서, 포워드 오더 스트림(206)은 바이패스 코딩된 심볼을 포함하고 리버스 오더 스트림(208)은 엔트로피 코딩된 심볼을 포함한다.
디코더에서, 프리앰블(202)을 판독한 후, 디코더는 2개의 포인터 즉, 포워드 오더 스트림(206)의 시작으로 초기화되는 포워드 판독 포인터; 및 데이터 유닛(200)의 끝 즉, 리버스 오더 스트림(208)의 시작에서 초기화되는 리버스 판독 포인터를 초기화할 수 있다. 데이터 유닛의 끝에서 리버스 판독 포인터를 초기화한다는 개념은, 그것이 바이트, 워드 또는 다른 데이터 유닛의 시작이 되는 위치로 초기화된다는 것을 의미할 수 있다는 것을 당업자는 이해할 것이다. 그 끝은 데이터 유닛(200)의 끝과 정렬되며, 포인터가 데이터 유닛(200)의 마지막 비트를 가리킬 필요는 없다.
데이터의 디코딩 및 재구성을 위해 심볼이 요청됨에 따라, 디코더는 요청된 심볼 유형에 따라 포워드 오더 스트림(206) 또는 리버스 오더 스트림(208)으로부터 코딩된 심볼(들)을 판독한다. 리버스 오더 스트림(208)으로부터 심볼이 판독됨에 따라, 리버스 판독 포인터는 감분된다.
리버스 오더 비트스트림(208)은 원래 비트스트림의 비트 단위 반전을 통해 생성될 수 있다는 것을 이해할 것이다. 일부 경우에, 특히 메모리가 바이트 단위로 어드레싱되는 경우에, 리버스 오더 비트스트림(208)은 원래 비트스트림의 바이트 단위 반전을 통해 생성될 수 있다. 마찬가지로 포워드 판독 포인터의 증분 또는 리버스 판독 포인터의 감분은, 각 심볼 판독 동작으로 추출된 코딩된 데이터의 크기에 따라, 가리키는 메모리 위치의 비트 단위 변경, 가리키는 메모리 위치의 바이트 단위 변경 등에 대응할 수 있다. 워드, 하프-워드 또는 기타를 포함하여 다른 단위도 사용할 수 있다.
전술한 기술을 사용하여, 디코더가 데이터 유닛(200)의 길이를 알고 있거나 이를 결정할 수 있다면, 스트림의 길이는 디코더에 시그널링될 필요가 없다. 일 예에서, 데이터 유닛의 길이는 프로토콜 스택의 상위 레벨에서 규정된다. 예들은 네트워크 데이터그램 페이로드 길이, 파일 포맷, API(응용 프로그래밍 인터페이스) 정의 또는 기타 하이 레벨 사양을 포함한다. 다른 예에서, 프리앰블(202) 자체는 데이터 유닛의 길이를 나타내는 신호를 포함하도록 구성된다. 길이는 예를 들어 프리앰블(202)에서 명시적으로 지정될 수 있다. 대안적으로, 코드 또는 다른 인덱스는 예를 들어 특정 데이터 유닛 길이와 연관된 데이터 유닛 유형을 나타낼 수 있다. 또 다른 예에서, 프리앰블(202)은 데이터 유닛의 시작을 디코더에 시그널링하는 동기화 코드워드를 포함할 수 있다. 송신된 비트스트림에서 다음 동기화 코드워드를 찾음으로써, 디코더는 데이터 유닛(200)의 길이를 결정할 수 있다.
이제, 인코더(300)의 일례를 블록도 형태로 도시한 도 3을 참조한다. 인코더(300)는 2개의 스트림, 즉 엔트로피 코딩된 스트림(304) 및 바이패스 코딩된 스트림(306)을 생성하는 인코딩 유닛(302)을 포함한다. 일부 예들에서, 인코딩 유닛(302)은 엔트로피 코딩되고 바이패스 코딩된 데이터가 인터리빙되는 단일 비트스트림을 생성한다. 이러한 실시예에서, 인코딩 유닛(302)은 심볼 유형에 기초하여 스트림을 2개의 스트림(304, 306)으로 분리하기 위한 디멀티플렉서를 더 포함한다.
본 명세서에서 사용되는 용어 "심볼 유형"은, 심볼이 엔트로피 코딩 또는 바이패스 코딩되는지 여부를 지칭한다. 심볼 유형은 특정 심볼에 대한 특정 코딩 메커니즘을 규정하는 컨텍스트 모델에 의해 지정될 수 있다. 예를 들어, 변환 도메인 계수의 비디오 코딩의 예시적인 경우에, 컨텍스트 모델은 엔트로피 코딩 유효 계수 플래그, 1보다 큰 플래그 등을 위한 컨텍스트를 결정하기 위한 특정 컨텍스트 결정 동작을 규정할 수 있다. 예를 들어 사인(sign) 비트와 같은 특정 심볼이 바이패스 코딩되도록 지정할 수도 있는데 즉, 이러한 심볼의 확률이 p = 0.5로 정적으로 설정된다. 일부 예들에서, 아래에 추가로 설명되는 바와 같이, 컨텍스트 적응 시스템에서 엔트로피 인코딩되도록 지정된 심볼들은, 엔트로피 코딩되기 보다는 바이패스 코더로 재라우팅되는 동일 확률(p = 0.5)에 충분히 가까운 확률을 가질 수 있다.
인코더(300)는 엔트로피 코딩된 스트림(304) 및 바이패스 코딩된 스트림(306)을 저장하기 위한 버퍼(308)를 더 포함한다. 버퍼(308)는 하나 이상의 물리적 메모리 및/또는 물리적 메모리의 부분을 포함할 수 있다.
버퍼(308)는, 일부 실시예에서 스트림(304, 306) 중 하나를 리버스 오더로 저장할 수 있다. 즉, 저장 동작은 데이터 순서의 반전을 스트림(304, 306) 중 하나에 적용하는 것을 포함할 수 있다. 위에서 언급한 바와 같이, 반전은 비트 단위, 바이트 단위 또는 일부 다른 레벨일 수 있다.
인코더(300)는 페이로드 패키저(310)를 더 포함한다. 페이로드 패키저(310)는 선택된 송신 프로토콜에 따라 송신을 위해 데이터를 패킷화 및 패키징하도록 구성된 데이터 송신 유닛의 일부일 수 있다. 페이로드 패키저(310)는 데이터 유닛(312)의 형태로 패키징된 데이터를 출력한다. 데이터 유닛(312)은 도 2에 설명된 바와 같이 구성되는데 즉, 프리앰블로 시작하고 포워드 오더 스트림이 뒤따르고 리버스 오더 스트림으로 끝난다. 이 예에서, 포워드 오더 스트림은 엔트로피 코딩된 스트림(304)을 포함할 수 있고, 리버스 오더 스트림은 바이패스 코딩된 스트림(306)의 리버스 카피를 포함할 수 있다.
버퍼(308)가 바이패스 코딩된 스트림(306)을 리버스 오더로 저장하도록 구성되면, 리버스 오더 스트림은, 버퍼(308)로부터 리버스로 저장된 바이패스 코딩된 스트림(306)을 판독함으로써 페이로드 패키저(310)에 의해 획득될 수 있다. 버퍼(308)가 바이패스 코딩된 스트림(306)을 포워드 코딩 순서로 저장하면, 페이로드 패키저(310)는 데이터 유닛(312)에 삽입하기 전에, 바이패스 코딩된 스트림(306)을 반전시킬 수 있다. 일 예에서, 이것은 리버스 오더로 버퍼(308)로부터 바이패스 코딩된 스트림(306)을 판독하는 것을 포함할 수 있다.
리버스 오더 스트림이 데이터 유닛(312)의 끝과 정렬되어야 함을 또한 인식할 것이다. 데이터 유닛(312)이 규정된 또는 고정된 길이인 경우, 페이로드 패키저(310)는, 바이패스 코딩된 스트림(306)의 제1 바이트(코딩 순서로)가 데이터 유닛(312)의 마지막 바이트 위치에 있음을 보장하도록 버퍼 비트 및/또는 바이트를 추가할 수 있다. 데이터 유닛이 규정된 길이가 아닐지라도, 페이로드 패키저(310)는, 처리가 바이트 단위 베이스로 이루어지는 경우에 바이트 정렬되는 것을 보장하기 위해 엔트로피 코딩된 스트림(304) 및 바이패스 코딩된 스트림(306)의 끝에(코딩 순서로) 비트를 추가하도록 구성될 수 있다. 이러한 패딩 비트는 스트림(304 및 306)의 디코딩이 완료되었다고 결정할 때 디코더에 의해 폐기될 수 있다. 디코더는, 디코딩 프로세스의 동작을 통해, 사용 중인 컨텍스트 적응 디코딩 프로세스에 따라 심볼을 소비하고, 그에 따라 코딩 섹션(예를 들어, 재구성 중인 데이터의 코딩 방식 규정된 부분)의 끝에 도달할 때를 결정할 수 있다.
버퍼(308)는 일부 경우에 하나 이상의 버퍼/메모리를 포함할 수 있다. 두 스트림의 길이는 일반적으로 인코딩 유닛(302)에 의해 생성되기 때문에 미리 알 수 없기 때문에, 두 개의 버퍼가 후속 연결 동작과 함께 사용되거나, 충분히 큰 단일 버퍼가 사용되어, 버퍼 내에서 데이터를 이동시켜 연결이 수행된다. 예를 들어, 바이패스 코딩된 스트림은 엔트로피 코딩된 스트림의 끝과 정렬되도록 이동될 수 있으며; 대안적으로, 프리앰블 및 포워드 엔트로피 코딩된 스트림은, 역방향 바이패스 코딩된 스트림의 시작과 정렬되도록 이동될 수 있다.
일부 구현들에서, 페이로드 패키저(310)는 데이터 유닛(312)을 어셈블링하기 위해 데이터를 기록하는 자체 출력 버퍼를 가질 수 있다. 일부 구현에서, 페이로드 패키저(310)는 버퍼(308)를 사용하여, 예를 들어 위에서 논의된 연결/반전 동작을 사용하여 데이터 유닛(312)을 어셈블링한다.
이제, 블록도 형태로 예시적인 디코더(400)를 도시하는 도 4를 참조할 것이다. 디코더(400)는 위의 설명에 따라 구조화된 하나 이상의 데이터 유닛을 수신한다. 디코더(400)는 데이터 유닛을 수신하는 페이로드 디패키저(402)를 포함한다. 페이로드 디패키저(402)는 송신 프로토콜에 따라, 일부 경우에 다른 캡슐화로부터 데이터 유닛을 추출할 수 있다. 페이로드 디패키저(402)는 데이터 유닛, 또는 적어도 페이로드를 버퍼(404)에 저장할 수 있다. 일부 경우에, 페이로드 디패키저(402)는 데이터 유닛의 카피를 버퍼(404)에 포워드(송신) 오더로 기록한다. 일 예에서, 페이로드 디패키저(402)는 데이터 유닛의 제2 카피를 버퍼(404)에 기록하지만, 역 저장된 데이터 유닛의 시작이 페이로드의 끝과 정렬된 (역) 바이패스 코딩된 스트림의 시작이 되도록 리버스 오더(비트 단위, 바이트 단위, 또는 기타)로 그 카피를 기록한다.
이 예에서, 페이로드 디패키저(402)가 데이터 유닛의 단일 카피를 버퍼(404)에 기록한다고 가정한다. 앞서 언급한 바와 같이, 데이터 유닛은 프리앰블(406), 포워드 오더 스트림(408), 및 리버스 오더 스트림(410)을 포함한다.
디코더(400)는 일부 예들에서, 포워드 오더 스트림(408)의 제1 비트/바이트에서 포워드 판독 포인터(412)를 초기화할 수 있고, 리버스 오더 스트림(410)의 제1 비트/바이트 등에서 리버스 판독 포인터(414)를 초기화할 수 있다. 디코딩 유닛(416)은 해당 데이터에 대한 코딩 모델에 따라 디코딩 및 재구성 프로세스를 관리한다. 디코딩 프로세스가 진행됨에 따라, 디코딩 유닛(416)은 디코딩 프로세스 및 사용되는 컨텍스트 모델에 기초하여 다음 코딩된 심볼을 요청(418)한다. 요청(418)은 심볼 유형, 즉 엔트로피 코딩 또는 바이패스 코딩을 나타낼 수 있다. 그 후, 판독 동작이 발생하여, 요청(418)의 심볼 유형에 따라, 포워드 오더 스트림(408) 또는 리버스 오더 스트림(410)으로부터의 저장된 데이터 유닛으로부터 데이터의 일부 예를 들어, 코딩된 심볼(들)을 판독한다. 판독 동작은 요청된 심볼 유형에 따라, 포워드 판독 포인터(412) 또는 리버스 판독 포인터(414)에 의해 표시된 어드레스로부터 코딩된 심볼(들)을 추출한다. 포워드 판독 포인터(412) 또는 리버스 판독 포인터(414)는 각각 증분 또는 감분된다.
엔트로피 코딩된 스트림이 산술적으로 인코딩된 비트스트림, 즉 AEC 스트림인 예에서, AEC 디코더는 비트스트림으로부터의 비트의 일부가 이산 심볼에 대응하지 않고 대신에 비트스트림의 비트의 특정 부분이 컨텍스트 확률에 기초하여 빈(bin)의 시퀀스의 코딩을 반영하는 연속 간격의 산술 코딩을 규정한다는 점에서 다소 비동기적으로 실행된다는 것을 이해할 것이다. 그런 의미에서, AEC 디코더는 일련의 산술적으로 인코딩된 빈(심볼)을 디코딩할 때 비트스트림으로부터의 비트 시퀀스를 소비할 수 있으며, 이는 그 후 심볼에 대한 요청(418)에 응답하여 디코딩 유닛(416)에 이용가능하게 된다. 그러한 실시예에서, 포인터의 "증가"는, AEC 디코더에 의한 디코딩된 심볼의 출력보다는 AEC 디코더에 의한 비트스트림의 비트 소비에 연결된다.
인코딩 프로세스(500)의 일례를 나타내는 흐름도가 도 5에 도시되어 있다. 인코딩 프로세스(500)는 엔트로피 코딩된 스트림 및 바이패스 코딩된 스트림이 생성되고, 적용 가능한 경우 통합 스트림으로부터 디멀티플렉싱되는 것으로 가정한다. 프로세스(500)는 동작(502)에서 생성되는 바와 같이 엔트로피 코딩된 스트림 및 바이패스 코딩된 스트림의 적어도 일부를 버퍼링하는 것으로 시작한다. 이 예에서, 바이패스 코딩된 스트림은 동작 504에서 반전된다. 위에서 언급한 바와 같이, 일부 경우에 이러한 반전은 동작 502에서 버퍼에 바이패스 코딩된 스트림을 저장할 때 발생할 수 있습니다. 일부 경우에는, 이러한 반전이 저장 후에 발생할 수 있다. 일부 경우에, 리버스 오더로 바이패스 코딩된 스트림을 판독하고 버퍼에 재기록함으로써 반전 동작(504)이 발생한다. 일부 경우에, 리버스 오더로 버퍼로부터 바이패스 코딩된 스트림을 판독함으로써 페이로드를 생성할 때, 반전 동작(504)이 발생한다.
동작 506에서, 인코더는, 프리앰블 다음에 포워드 오더 스트림이 후속하고 이어서 리버스 오더 바이패스 코딩된 스트림이 후속하는 데이터 유닛을 생성한다. 바이패스 코딩된 스트림의 시작은 코딩 순서에서 데이터 유닛의 끝과 정렬된다.
그 후, 동작 508에서 데이터 유닛이 출력된다.
예시적인 디코딩 프로세스(600)는 도 6의 흐름도에 의해 예시된다. 디코딩 프로세스(600)는 동작 602에서, 위에서 논의된 구조를 갖는 데이터 유닛을 수신하는 것을 포함한다. 즉, 데이터 유닛은 프리앰블과 페이로드를 포함한다. 페이로드는 엔트로피 코딩된 스트림과 바이패스 코딩된 스트림을 포함한다. 스트림들 중 하나는 포워드 오더이고 프리앰블 직후 데이터 유닛에 나타나고, 다른 스트림은 리버스 오더이고 데이터 유닛의 끝과 정렬된다. 페이로드의 2개의 스트림 사이에는, 비트 패딩 또는 기타 데이터와 같은 데이터가 있을 수도 있고 없을 수도 있다. 이 예의 목적을 위해, 바이패스 코딩된 스트림은 리버스 오더 스트림으로 추정된다.
디코더는 동작 604에서 데이터 유닛의 길이를 결정한다. 위에서 언급한 바와 같이, 데이터 유닛의 길이는 송신 유형, 코딩 프로토콜, 상위 레벨 헤더 정보, 또는 일부 다른 외부 소스에 의해 규정될 수 있다. 일부 경우에, 데이터 유닛의 길이는 프리앰블에 명시적으로 또는 암시적으로 지정될 수 있다. 일부 경우에, 데이터 유닛의 길이는, 각 프리앰블에서 동기화 코드워드에 의해 시그널링될 수 있어서, 디코더는 데이터의 수신 비트스트림에서 다음 동기화 코드워드를 찾음으로써 데이터 유닛의 길이를 결정할 수 있다.
데이터 유닛은 디코더의 메모리에 저장된다. 동작 606에서, 디코더는 엔트로피 코딩된 스트림의 시작에서 제1 판독 포인터를 초기화하고 코딩 순서 의미에서 바이패스 코딩된 스트림의 시작에서, 즉 데이터 유닛의 끝에서 제2 판독 포인터를 초기화한다. 동작 608에서, 코딩된 심볼에 대한 요청이 생성된다. 요청은 디코딩 및 데이터 재구성 프로세스의 일부로서 데이터 유닛으로부터의 심볼을 디코딩하고 이를 재구성하는 디코딩 프로세스에 의해 구동된다. 프로세스의 예에는 오디오 코딩, 비디오 코딩, 멀티미디어 코딩, 포인트 클라우드 코딩, 또는 기타 데이터 압축 프로세스가 포함된다.
동작 610에서 요청과 연관된 심볼 유형을 결정한다. 즉, 요청은 바이패스 코딩된 심볼 또는 엔트로피 코딩된 심볼에 대한 것이다. 요청된 심볼이 엔트로피 코딩된 경우, 동작 612에서, 포워드 오더 스트림, 즉 제1 판독 포인터가 가리키는 엔트로피 코딩된 스트림의 부분으로부터 데이터가 판독된다. 그 후, 제1 판독 포인터는 동작 614에서 증분된다. 반대로, 요청된 심볼이 바이패스 코딩된 경우, 동작 616에서 리버스 오더 스트림, 즉 제2 판독 포인터가 가리키는 바이패스 코딩된 스트림의 부분으로부터 데이터가 판독된다. 그 후, 제2 판독 포인터는 동작 618에서 감분된다. 디코더는 추출된 코딩된 심볼을 경우에 따라 엔트로피 디코더 또는 바이패스 디코더로 전달한다.
일부 실시예에서, 디코더는 데이터 유닛의 제2 카피를 메모리에 리버스 오더로 저장할 수 있다는 것이 이해될 것이다. 이 경우에, 제2 판독 포인터는 리버스 오더 데이터 유닛의 시작을 가리키도록 초기화되고, 제2 판독 포인터는 바이패스 코딩된 심볼이 판독될 때 증분된다.
동작 620에서, 디코더는 바이패스 코딩된 스트림 및 엔트로피 인코딩된 스트림의 디코딩을 완료했는지 여부를 평가한다. 완료되지 않았다면, 다음 심볼 요청을 평가하기 위해 동작 608로 돌아간다. 완료됐다면, 동작 602에서 다음 데이터 유닛으로 이동한다.
스트림 중 하나의 전체를 디코딩하지 않고 스트림의 끝을 결정하는 것은 불가능하다는 것을 이해할 것이다. 따라서, 엔트로피 디코더 예를 들어, 산술 디코더의 동작은 스트림으로부터 후행(trailing) 비트를 폐기 위해 제한된 비트스트림 판독에 의존하지 않는다. 제한된 판독 동작은 미리 정의된 비트 수를 판독한 후 미리 정의된 상수 값을 반환하는 것이다. 즉, 엔트로피 인코딩된 스트림은 완전히 자체 포함되어야 한다.
위에서 논의된 바와 같이, 바이트 단위 어드레싱은 많은 시스템에서 일반적이며, 이는 코딩된 스트림 중 하나의 바이트 단위 반전을 포함하여 코딩된 데이터의 바이트 단위 처리로 이어질 수 있다. 8개의 바이패스 심볼의 각각의 추출 후 포인터 역참조를 피하기 위해, 일부 시스템은 현재 서브스트림 바이트를 중간 변수에 카피할 수 있다. 다중-바이트 중간 변수를 사용하여 효율성을 높이는 것은, 역방향 바이패스 서브스트림의 각 바이트의 구성 비트를 적절하게 비트 정렬함으로써 용이하게 될 수 있다.
리틀 엔디안 데이터 모델을 사용하는 아키텍처의 경우 멀티-바이트 연산을 가능하게 하기 위해, 각 바이트의 비트는, 주어진 바이트의 최상위 비트가 그 바이트에서 패킹해제될 제1 비트가 되고 주어진 바이트의 최하위 비트가 그 바이트에서 패킹해제될 마지막 비트가 되도록 정렬될 수 있다. 비트 a...x의 시퀀스에 대해, 여기서 비트 a는 디코딩될 제1 비트이고, x는 마지막 비트이며, 결과적인 서브스트림 구성은 다음과 같이 예시될 수 있다.
Figure pct00001
리틀-엔디안(little-endian) 아키텍처에서, 주소 N-3에서 3바이트 워드를 판독하면 바이너리 워드 abcdefghijklmnopqrstuvwxb가 생성된다. 이 속성은 임의의 머신 워드 크기로 확장될 수 있다. 변수 L은 현재 워드의 현재 비트-레벨 판독(또는 기록) 위치를 추적하는 데 사용될 수 있다.
Q 비트 크기의 워드 W로부터 단일 비트 V를 추출하는 한 가지 방법은, W의 MSB를 다음 판독되지 않은 비트로서 유지하는 것이다.
1. if (L = = 0) { ; 이용 가능한 비트가 없는 경우
2. W = *data_ptr- - ; 다음 Q-비트 워드, 어드밴싱 포인터를 로드
3. L = Q ; 판독 위치 리셋
}
4. V = ( W >> ( Q - 1 ) ) & 1 ; W의 MSB를 V로서 추출
5. L = L - 1 ; 이전 판독 위치
이제 다른 예시적인 데이터 유닛(700)의 구조를 도식적으로 도시하는 도 7을 참조한다. 이 예에서, 전술한 바와 같이, 데이터 유닛(700)은 프리앰블(702) 및 페이로드(704)를 포함하고, 페이로드(704)는 포워드 오더 스트림(706) 및 리버스 오더 스트림(708)을 포함한다. 그러나, 포워드 오더 스트림(706)과 리버스 오더 스트림(708) 사이에서, 페이로드(704)는 추가 데이터(710)를 포함한다. 유리하게는, 디코더가 2개의 스트림(706 및 708)을 디코딩함에 따라, 디코더는 각각의 길이를 발견하고 이들 사이에 저장된 데이터(710)를 추출할 수 있다.
추가 데이터(710)에 대한 한 가지 예시적인 사용은, 디코딩되지 않은 스터핑(stuffing) 데이터이다. 데이터 유닛이 주어진 구문이나 문법에 따라 파싱될 때, 추가 데이터를 해석하려는 시도가 이루어지지 않는다. 인코더는 이 속성을 사용하여 플러싱 동작(필요한 것보다 더 많은 데이터를 잠재적으로 플러싱함)을 단순화하거나 추가 데이터(710)를 사용하여 비트스트림을 식별하는 데 사용될 수 있는 숨겨진 마커를 삽입하거나 대안적으로 최소 비트레이트 요건을 충족하기 위해 스터핑 데이터를 사용할 수 있다.
다른 예시적인 구현에서, 추가 데이터(710)는 실질적일 수 있다. 일례에서, 스트림(706, 708)을 디코딩한 후에, 디코더 상태를 형성하는 2개의 비트스트림 포인터가 인접 바이트를 가리키지 않으면, 추가 데이터(710)가 존재하고 디코더에 의해 파싱된다. 추가 데이터(710)는 포워드 오더 또는 리버스 오더로 전달될 수 있다. 오더의 정확한 선택은 주변 스트림(706, 708)의 예상된 사용에 따라 달라질 수 있다. 예를 들어, 하나의 스트림이 다른 스트림보다 먼저 종료되는 것으로 알려진 경우, 해당 스트림의 순서가 사용될 수 있다. 특정 구성에서, 순서는 반전된 순서가 디코더에 대한 보다 효율적인 스트림 액세스를 제공하는지 여부에 따라 달라질 수 있다.
추가 데이터(710)는 엔트로피 코딩된 데이터, 바이패스 코딩된 데이터, 또는 다른 데이터일 수 있다. 일 예에서, 데이터(710)는 데이터 유닛(700)이 엔트로피 코딩된 스트림 쌍 및 바이패스 코딩된 스트림 쌍의 반복적으로 내포된 쌍을 포함하도록, 포워드 오더 및 리버스 오더 비트스트림의 다른 쌍이다. 추가 데이터(710)는 추가 프리앰블을 포함하거나 포함하지 않을 수 있다.
존재하는 경우 추가 데이터(710)를 파싱하기 위해, 일 실시예에서 디코더 판독 포인터는 플러싱 또는 바이트-정렬을 위해 각 스트림에 삽입된 임의의 비트를 스킵하도록 진행되어, 디코더 버퍼로부터 임의의 부분 비트를 효과적으로 폐기한다. 대안적인 실시예는 대응하는 제1 스트림의 플러싱 또는 바이트 정렬을 생략하고 대신에 후속 스트림의 바이트 정렬 및 플러싱을 요구할 수 있다(그럼에도 불구하고, 후속 AEC 스트림의 재초기화가 발생할 필요가 있을 수 있음). 이러한 시스템에서, 인코더는 데이터 유닛(700)에 추가 데이터(710)가 포함되지 않으면, 스트림을 플러시하거나 바이트 정렬시킨다.
프리앰블은 추가 데이터(710)가 비트스트림에 존재하는지 여부를 시그널링하는 플래그를 포함할 수 있다. 일부 구현들에서, 플래그는 임의의 스터핑 데이터의 부재를 보장하기 위해 비트스트림 구성에 대한 형식적 제한을 나타낼 수 있다. 예를 들어, 데이터 유닛의 모든 파싱 가능한 데이터가 파싱된 후, 디코더는 디코더 상태를 형성하는 2개의 비트스트림 포인터가 인접한 바이트를 가리키는지 확인한다. 추가 데이터(710)가 존재함을 나타내기 위해 비트스트림에서(예를 들어 프리앰블에서) 더 일찍 시그널링된 플래그가 없는 한, 2개의 비트스트림 포인트는 인접한 바이트를 가리켜야 하며 그렇지 않으면 오류가 검출된다.
위의 많은 예에서, 엔트로피 코더는 코딩 모델에 의해 규정된 심볼 유형에 기초하여 엔트로피 코딩된 스트림 및 바이패스 코딩된 스트림을 생성하였다. 즉, 코딩 프로세스는 아마도 심볼 유형으로 인해, 특정 심볼이 컨텍스트 적응적으로 엔트로피 코딩되어야 하는지 또는 심볼이 p=0.5의 정적 확률을 가지며 모든 경우에 바이패스 코딩되어야 하는지 여부를 나타낸다. 그러나, 일부 컨텍스트-적응 코딩 프로세스에서는, 기본 데이터의 통계에 따라, 연관된 확률이 p=0.5에 접근하도록 컨텍스트가 진화할 수 있다. 그러한 경우, 컨텍스트 모델에 따라 엔트로피 코딩되어야 한다는 사실에도 불구하고, 엔트로피 코더를 사용하는 것보다 이러한 심볼을 바이패스 코더에 강제로 적용하는 것이 유리할 수 있다.
연관된 적응 확률 모델을 갖는 심볼에 대해 예시적인 프로세스는 다음을 포함할 수 있다.
현재 심볼 확률 prob0이 검사되고 그것과 동등 확률(예를 들어, 이진 심볼의 경우 0.5) 사이의 차이가 임계값에 대해 테스트된다. 예시적인 임계값은 예를 들어 0.05 미만 또는 0.03 미만일 수 있다.
차이가 임계값보다 작으면, 심볼은 보통의 바이패스 심볼로서 처리된다. 그렇지 않으면, 산술 코덱과 같은 엔트로피 코더에 의해 처리된다. 두 경우 모두, 심볼 확률 모델(즉, prob0의 다음 값)은, 컨텍스트 적응 코딩 방식에서 평소와 같이 심볼 값, 현재 심볼 확률, 및 업데이트 함수에 따라 업데이트된다.
이제 인코더(800)의 예시적인 실시예의 단순화된 블록도를 도시하는 도 8을 참조한다. 인코더(800)는 프로세서(802), 메모리(804), 및 인코딩 애플리케이션(806)을 포함한다. 인코딩 애플리케이션(806)은 메모리(804)에 저장되고, 실행시에 프로세서(802)로 하여금 본 명세서에 설명된 것과 같은 동작을 수행하게 하는 명령을 포함하는 컴퓨터 프로그램 또는 애플리케이션을 포함할 수 있다. 예를 들어, 인코딩 애플리케이션(806)은 본 명세서에 설명된 프로세스에 따라 데이터 유닛을 인코딩 및 출력할 수 있다. 인코딩 애플리케이션(806)은 콤팩트 디스크, 플래시 메모리 디바이스, 랜덤 액세스 메모리, 하드 드라이브 등과 같은 비일시적 컴퓨터 판독 가능한 매체에 저장될 수 있다는 것이 이해될 것이다. 명령이 실행될 때, 프로세서(802)는 설명된 프로세스(들)를 구현하는 특수 목적 프로세서로서 동작하도록 명령에 지정된 동작 및 기능을 수행한다. 그러한 프로세서는 일부 예들에서 "프로세서 회로" 또는 "프로세서 회로망"으로 지칭될 수 있다.
이제, 디코더(900)의 예시적인 실시예의 단순화된 블록도를 도시하는 도 9를 참조한다. 디코더(900)는 프로세서(902), 메모리(904), 및 디코딩 애플리케이션(906)을 포함한다. 디코딩 애플리케이션(906)은 메모리(904)에 저장되고 실행될 때 프로세서(902)로 하여금 본 명세서에 설명된 것과 같은 동작을 수행하게 하는 명령을 포함하는 컴퓨터 프로그램 또는 애플리케이션을 포함할 수 있다. 디코딩 애플리케이션(906)은 콤팩트 디스크, 플래시 메모리 디바이스, 랜덤 액세스 메모리, 하드 드라이브 등과 같은 컴퓨터 판독 가능한 매체에 저장될 수 있다는 것이 이해될 것이다. 명령이 실행될 때, 프로세서(902)는 설명된 프로세스(들)를 구현하는 특수 목적 프로세서로서 동작하도록, 명령에 지정된 동작 및 기능을 수행한다. 그러한 프로세서는 일부 예들에서 "프로세서 회로" 또는 "프로세서 회로망"으로 지칭될 수 있다.
본 출원에 따른 디코더 및/또는 인코더는, 서버, 적절하게 프로그래밍된 범용 컴퓨터, 머신 비전 시스템, 및 모바일 디바이스를 포함하지만 이에 제한되지 않는 복수의 컴퓨팅 디바이스에서 구현될 수 있음을 이해할 것이다. 디코더 또는 인코더는 본 명세서에 설명된 기능을 수행하도록 프로세서 또는 프로세서들을 구성하기 위한 명령을 포함하는 소프트웨어를 통해 구현될 수 있다. 소프트웨어 명령은 CD, RAM, ROM, 플래시 메모리 등을 포함하는 임의의 적절한 비일시적 컴퓨터 판독 가능한 메모리에 저장될 수 있다.
본 명세서에 기술된 디코더 및/또는 인코더 및 인코더 또는 디코더를 구성하기 위한 기술된 방법/프로세스를 구현하는 모듈, 루틴, 프로세스, 스레드, 또는 기타 소프트웨어 구성요소는, 표준 컴퓨터 프로그래밍 기술 및 언어를 사용하여 실현될 수 있다는 것이 이해될 것이다. 본 출원은 특정 프로세서, 컴퓨터 언어, 컴퓨터 프로그래밍 규칙, 데이터 구조, 기타 이러한 구현 세부사항으로 제한되지 않는다. 당업자는 설명된 프로세스가 ASIC(application-specific integrated chip) 등의 일부로서 휘발성 또는 비휘발성 메모리에 저장된 컴퓨터 실행 가능한 코드의 일부로서 구현될 수 있음을 인식할 것이다.
본 출원은 또한 본 출원에 따른 인코딩 프로세스의 적용을 통해 생성된 데이터를 인코딩하는 컴퓨터 판독 가능한 신호를 제공한다.
설명된 실시예의 특정 적응 및 수정이 이루어질 수 있다. 따라서, 위에서 논의된 실시예들은 예시적인 것이며 제한적인 것이 아닌 것으로 간주된다.

Claims (20)

  1. 인코딩된 데이터를 재구성하기 위해 데이터 유닛을 디코딩하는 방법으로서,
    프리앰블 및 이에 후속하는 페이로드를 포함하는 데이터 유닛을 수신하는 단계 - 상기 페이로드는 포워드 오더 비트스트림 및 이에 후속하는 리버스 오더 비트스트림을 포함함 -;
    상기 데이터 유닛의 길이를 결정하는 단계;
    디코딩 유닛으로부터의 심볼에 대한 요청에 응답하여, 상기 포워드 오더 비트스트림으로부터 포워드 오더로 또는 리버스 오더 비트스트림으로부터 리버스 오더로 데이터를 선택적으로 판독하는 단계; 및
    상기 디코딩 유닛에서 상기 데이터를 디코딩하여 심볼을 재구성하는 단계
    를 포함하며,
    상기 포워드 오더 비트스트림 및 상기 리버스 오더 비트스트림 중 하나는, 엔트로피 인코딩된 심볼을 포함하고, 상기 포워드 오더 비트스트림 및 상기 리버스 오더 비트스트림 중 다른 하나는 바이패스 코딩된 심볼을 포함하는 것인, 데이터 유닛을 디코딩하는 방법.
  2. 제1항에 있어서, 상기 심볼에 대한 요청은 심볼 유형이 엔트로피 코딩되는지 또는 바이패스 코딩되는지 여부를 나타내고, 상기 포워드 오더 비트스트림 또는 상기 리버스 오더 비트스트림의 데이터를 선택적으로 판독하는 단계는, 상기 심볼 유형에 기초하는 것인, 데이터 유닛을 디코딩하는 방법.
  3. 제1항 또는 제2항에 있어서, 상기 방법은 상기 프리앰블 이후의 상기 포워드 오더 비트스트림의 시작 부분에서 포워드 판독 포인터를 초기화하고, 상기 데이터 유닛의 끝 부분에서 리버스 판독 포인터를 초기화하는 단계를 더 포함하는, 데이터 유닛을 디코딩하는 방법.
  4. 제3항에 있어서, 상기 포워드 오더 비트스트림으로부터 데이터를 판독하는 단계는, 상기 포워드 판독 포인터에 의해 표시된 데이터를 판독한 후, 상기 포워드 판독 판독 포인터를 증분시키는 단계를 포함하고, 상기 리버스 오더 비트스트림으로부터 데이터를 판독하는 단계는, 상기 리버스 판독 포인터에 의해 표시된 데이터를 판독한 후, 상기 리버스 판독 포인터를 감분시키는 단계를 포함하는 것인, 데이터 유닛을 디코딩하는 방법.
  5. 제4항에 있어서, 상기 데이터는 하나 이상의 바이트의 크기를 갖고, 상기 포인터의 증분 및 감분은 상기 크기에 의한 것인, 데이터 유닛을 디코딩하는 방법.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 리버스 오더 비트스트림으로부터 리버스 오더로 데이터를 선택적으로 판독하는 단계는, 메모리에 상기 데이터 유닛의 카피를 리버스 오더로 저장하는 단계 및 상기 리버스 오더 데이터 유닛을 리버스 오더 데이터 유닛의 시작으로부터 시작하여 포워드 오더로 판독하는 단계를 포함하는 데이터 유닛을 디코딩하는 방법.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 데이터 유닛의 길이를 결정하는 단계는,
    동기화 코드워드에 기초하여 상기 데이터 유닛의 끝을 검출하는 단계;
    상기 프리앰블로부터 길이 값을 판독하는 단계; 또는
    상위 레벨 메타데이터로부터 데이터 유닛 길이를 획득하는 단계
    중 하나를 포함하는 것인, 데이터 유닛을 디코딩하는 방법.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 포워드 오더 비트스트림 및 상기 리버스 오더 비트스트림의 디코딩이 완료되었음을 결정하는 단계, 및 바이트-정렬을 위해 존재하는 임의의 비트를 폐기하는 단계를 더 포함하는 데이터 유닛을 디코딩하는 방법.
  9. 제8항에 있어서, 상기 데이터 유닛에서 상기 포워드 오더 비트스트림과 상기 리버스 오더 비트스트림 사이에 위치되는 추가 데이터를 디코딩하는 단계를 더 포함하는 데이터 유닛을 디코딩하는 방법.
  10. 인코딩된 데이터를 송신하는 방법으로서,
    상기 인코딩된 데이터는 엔트로피 인코딩된 심볼의 제1 비트스트림 및 바이패스 코딩된 심볼의 제2 비트스트림을 포함하고, 상기 방법은,
    상기 제1 비트스트림 및 상기 제2 비트스트림을 버퍼링하는 단계;
    리버스 오더 비트스트림을 생성하기 위해 상기 제1 비트스트림 및 상기 제2 비트스트림 중 하나를 반전시키는 단계 - 상기 제1 비트스트림 및 상기 제2 비트스트림 중 다른 하나는 포워드 오더 비트스트림임 -;
    프리앰블 및 이에 후속하는 포워드 오더 비트스트림을 포함하는 데이터 유닛을 생성하는 단계 - 상기 포워드 오더 비트스트림은 이에 이어서 리버스 오더 비트스트림이 후속함 -; 및
    상기 데이터 유닛을 출력하는 단계
    를 포함하는 인코딩된 데이터를 송신하는 방법.
  11. 데이터 유닛으로부터 인코딩된 데이터를 재구성하기 위한 디코더로서,
    상기 디코더는,
    적어도 하나의 프로세서;
    메모리; 및
    프로세서 실행 가능한 명령어를 포함하는 디코딩 애플리케이션
    을 포함하며,
    상기 프로세서 실행 가능한 명령어는, 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 디코더로 하여금,
    프리앰블 및 이에 후속하는 페이로드를 포함하는 데이터 유닛을 수신하고 - 상기 페이로드는 포워드 오더 비트스트림 및 이에 후속하는 리버스 오더 비트스트림을 포함함 -,
    상기 데이터 유닛의 길이를 결정하고,
    디코딩 유닛으로부터의 심볼에 대한 요청에 응답하여, 상기 포워드 오더 비트스트림으로부터 포워드 오더로 또는 리버스 오더 비트스트림으로부터 리버스 오더로 데이터를 선택적으로 판독하고,
    상기 심볼을 재구성하도록 상기 디코딩 유닛에서 상기 데이터를 디코딩하게 하고,
    상기 포워드 오더 비트스트림 및 상기 리버스 오더 비트스트림 중 하나는 엔트로피 인코딩된 심볼을 포함하고, 상기 포워드 오더 비트스트림 및 상기 리버스 오더 비트스트림 중 다른 하나는 바이패스 코딩된 심볼을 포함하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  12. 제11항에 있어서, 상기 심볼에 대한 요청은 심볼 유형이 엔트로피 코딩되는지 또는 바이패스 코딩되는지 여부를 나타내고, 상기 포워드 오더 비트스트림 또는 상기 리버스 오더 비트스트림의 데이터를 선택적으로 판독하는 것은 상기 심볼 유형에 기초하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  13. 제11항 또는 제12항에 있어서, 상기 프로세서 실행 가능한 명령어는, 실행될 때, 상기 디코더로 하여금 상기 프리앰블 이후의 상기 포워드 오더 비트스트림의 시작 부분에서 포워드 판독 포인터를 초기화하고, 상기 데이터 유닛의 끝에서 리버스 판독 포인터를 초기화하게 하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  14. 제13항에 있어서, 상기 프로세서 실행 가능한 명령어는, 실행될 때, 상기 포워드 판독 포인터에 의해 표시된 데이터를 판독한 후 상기 포워드 판독 포인터를 증분시킴으로써 상기 디코더로 하여금 상기 포워드 오더 비트스트림으로부터 데이터를 판독하게 하고, 상기 프로세서 실행 가능한 명령어는, 실행될 때, 상기 리버스 판독 포인터에 의해 표시된 데이터를 판독한 후 상기 리버스 판독 포인터를 감분시킴으로써 상기 디코더로 하여금 상기 리버스 오더 비트스트림으로부터 데이터를 판독하게 하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  15. 제14항에 있어서, 상기 데이터는 하나 이상의 바이트의 크기를 갖고, 상기 포인터의 증분 및 감분은 상기 크기에 의한 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  16. 제11항 내지 제15항 중 어느 한 항에 있어서, 상기 프로세서 실행가능한 명령어는, 실행될 때, 상기 데이터 유닛의 카피를 메모리에 리버스 오더로 저장하고 그리고 리버스 오더 데이터 유닛의 시작 부분으로부터 시작하여 상기 리버스 오더 데이터 유닛을 포워드 오더로 판독함으로써, 상기 디코더로 하여금, 상기 리버스 오서 비트스트림으로부터 데이터를 리버스 오더로 선택적으로 판독하게 하는 것인 인코딩된 데이터를 재구성하기 위한 디코더.
  17. 제11항 내지 제16항 중 어느 한 항에 있어서, 상기 프로세서 실행가능한 명령어는, 실행될 때, 디코더로 하여금,
    동기화 코드워드에 기초하여 상기 데이터 유닛의 끝을 검출하는 것;
    상기 프리앰블로부터 길이 값을 판독하는 것; 또는
    상위 레벨 메타데이터로부터 데이터 유닛 길이를 획득하는 것
    중 하나에 의해 상기 데이터 유닛의 길이를 결정하게 하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  18. 제11항 내지 제17항 중 어느 한 항에 있어서, 상기 프로세서 실행 가능한 명령어는 또한, 실행될 때 디코더로 하여금 포워드 오더 비트스트림 및 리버스 오더 비트스트림의 디코딩이 완료되었음을 결정하고 바이트 정렬에 대해 존재하는 임의의 비트를 폐기하게 하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  19. 제18항에 있어서, 상기 프로세서 실행 가능한 명령어는 또한, 실행될 때, 상기 디코더로 하여금, 상기 데이터 유닛에서 상기 포워드 오더 비트스트림과 상기 리버스 오더 비트스트림 사이에 위치된 추가 데이터를 디코딩하게 하는 것인, 인코딩된 데이터를 재구성하기 위한 디코더.
  20. 엔트로피 인코딩된 심볼의 제1 비트스트림 및 바이패스 코딩된 심볼의 제2 비트스트림을 포함하는 인코딩된 데이터를 송신하기 위한 인코더로서,
    상기 인코더는,
    적어도 하나의 프로세서;
    메모리; 및
    프로세서 실행 가능한 명령어를 포함하는 인코딩 애플리케이션
    을 포함하고.
    상기 프로세서 실행 가능한 명령어는, 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 인코더로 하여금,
    상기 제1 비트스트림 및 상기 제2 비트스트림을 버퍼링하고,
    상기 제1 비트스트림 및 상기 제2 비트스트림 중 하나를 반전시켜 리버스 오더 비트스트림을 생성하고 - 상기 제1 비트스트림 및 상기 제2 비트스트림 중 다른 하나는 포워드 오더 비트스트림임 -,
    프리앰블 및 이에 후속하는 상기 포워드 오더 비트스트림을 포함하는 데이터 유닛을 생성하고 - 상기 포워드 오더 비트스트림은 이에 이어서 리버스 오더 비스트스트림이 후속함 -
    상기 데이터 유닛을 출력하게 하는 것인, 인코딩된 데이터를 송신하기 위한 인코더.
KR1020217033607A 2019-03-18 2020-03-12 엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스 KR20210139398A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/356,087 US10587286B1 (en) 2019-03-18 2019-03-18 Methods and devices for handling equiprobable symbols in entropy coding
US16/356,087 2019-03-18
PCT/EP2020/056733 WO2020187709A1 (en) 2019-03-18 2020-03-12 Methods and devices for handling equiprobable symbols in entropy coding

Publications (1)

Publication Number Publication Date
KR20210139398A true KR20210139398A (ko) 2021-11-22

Family

ID=69723449

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217033607A KR20210139398A (ko) 2019-03-18 2020-03-12 엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스

Country Status (6)

Country Link
US (1) US10587286B1 (ko)
EP (1) EP3942701A1 (ko)
JP (1) JP2022526098A (ko)
KR (1) KR20210139398A (ko)
CN (1) CN113574805A (ko)
WO (1) WO2020187709A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10861196B2 (en) 2017-09-14 2020-12-08 Apple Inc. Point cloud compression
US11818401B2 (en) 2017-09-14 2023-11-14 Apple Inc. Point cloud geometry compression using octrees and binary arithmetic encoding with adaptive look-up tables
US10897269B2 (en) 2017-09-14 2021-01-19 Apple Inc. Hierarchical point cloud compression
US11113845B2 (en) 2017-09-18 2021-09-07 Apple Inc. Point cloud compression using non-cubic projections and masks
US10909725B2 (en) 2017-09-18 2021-02-02 Apple Inc. Point cloud compression
US10607373B2 (en) 2017-11-22 2020-03-31 Apple Inc. Point cloud compression with closed-loop color conversion
US10909727B2 (en) 2018-04-10 2021-02-02 Apple Inc. Hierarchical point cloud compression with smoothing
US10939129B2 (en) 2018-04-10 2021-03-02 Apple Inc. Point cloud compression
US11010928B2 (en) 2018-04-10 2021-05-18 Apple Inc. Adaptive distance based point cloud compression
US10909726B2 (en) 2018-04-10 2021-02-02 Apple Inc. Point cloud compression
US11017566B1 (en) 2018-07-02 2021-05-25 Apple Inc. Point cloud compression with adaptive filtering
US11202098B2 (en) 2018-07-05 2021-12-14 Apple Inc. Point cloud compression with multi-resolution video encoding
EP3595179B1 (en) * 2018-07-10 2023-07-05 BlackBerry Limited Methods and devices for lossy coding of point cloud occupancy
US11012713B2 (en) 2018-07-12 2021-05-18 Apple Inc. Bit stream structure for compressed point cloud data
US11367224B2 (en) 2018-10-02 2022-06-21 Apple Inc. Occupancy map block-to-patch information compression
US11057564B2 (en) 2019-03-28 2021-07-06 Apple Inc. Multiple layer flexure for supporting a moving image sensor
US11711544B2 (en) 2019-07-02 2023-07-25 Apple Inc. Point cloud compression with supplemental information messages
US11562507B2 (en) 2019-09-27 2023-01-24 Apple Inc. Point cloud compression using video encoding with time consistent patches
US11627314B2 (en) 2019-09-27 2023-04-11 Apple Inc. Video-based point cloud compression with non-normative smoothing
US11538196B2 (en) 2019-10-02 2022-12-27 Apple Inc. Predictive coding for point cloud compression
US11398833B2 (en) * 2019-10-02 2022-07-26 Apple Inc. Low-latency encoding using a bypass sub-stream and an entropy encoded sub-stream
US11895307B2 (en) 2019-10-04 2024-02-06 Apple Inc. Block-based predictive coding for point cloud compression
US11798196B2 (en) 2020-01-08 2023-10-24 Apple Inc. Video-based point cloud compression with predicted patches
US11475605B2 (en) 2020-01-09 2022-10-18 Apple Inc. Geometry encoding of duplicate points
US11373276B2 (en) * 2020-01-09 2022-06-28 Tencent America LLC Techniques and apparatus for alphabet-partition coding of transform coefficients for point cloud compression
US11615557B2 (en) 2020-06-24 2023-03-28 Apple Inc. Point cloud compression using octrees with slicing
US11620768B2 (en) 2020-06-24 2023-04-04 Apple Inc. Point cloud geometry compression using octrees with multiple scan orders
US20220113423A1 (en) * 2020-10-12 2022-04-14 SZ DJI Technology Co., Ltd. Representation data generation of three-dimensional mapping data
US11948338B1 (en) 2021-03-29 2024-04-02 Apple Inc. 3D volumetric content encoding using 2D videos and simplified 3D meshes

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2614592B1 (en) * 2010-09-09 2018-06-27 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Entropy encoding and decoding scheme
EP2664070B1 (en) * 2011-01-14 2016-11-02 GE Video Compression, LLC Entropy encoding and decoding scheme
WO2013050612A1 (en) * 2011-10-06 2013-04-11 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Entropy coding buffer arrangement
US9538172B2 (en) * 2012-04-11 2017-01-03 Qualcomm Incorporated Grouping bypass coded syntax elements in video coding
GB2513111A (en) * 2013-04-08 2014-10-22 Sony Corp Data encoding and decoding

Also Published As

Publication number Publication date
CN113574805A (zh) 2021-10-29
JP2022526098A (ja) 2022-05-23
EP3942701A1 (en) 2022-01-26
WO2020187709A1 (en) 2020-09-24
US10587286B1 (en) 2020-03-10

Similar Documents

Publication Publication Date Title
KR20210139398A (ko) 엔트로피 코딩에서 동일 확률 심볼을 처리하기 위한 방법 및 디바이스
US11705924B2 (en) Low-latency encoding using a bypass sub-stream and an entropy encoded sub-stream
US10489426B2 (en) Category-prefixed data batching of coded media data in multiple categories
US6606040B2 (en) Method and apparatus for adaptive data compression
US6587057B2 (en) High performance memory efficient variable-length coding decoder
TWI500274B (zh) 熵編碼及解碼裝置與方法、和相關電腦程式
US20080317134A1 (en) Video Coding
CN101321279B (zh) 处理数据的方法和系统
JP2009043267A (ja) 階層化ツリーを圧縮する方法及び圧縮されたマルチメディア信号をデコーディングする方法
CN109218822B (zh) 一种视频处理系统
JPH07123407A (ja) Hdtv復号化器
US6094151A (en) Apparatus and method for finite state machine coding of information selecting most probable state subintervals
Bodden et al. Arithmetic coding revealed
US9716515B2 (en) Method for detecting end of record in variable length coded bit stream
KR100944923B1 (ko) 개선된 멀티미디어 디코더를 위한 방법 및 장치
Howard Interleaving entropy codes
EP4241452A1 (en) Concatenation of chunked entropy streams
KR100443012B1 (ko) 압축데이터의 바이트열 복원 방법
JP3283150B2 (ja) データ圧縮・圧縮解除法
US6522270B1 (en) Method of coding frequently occurring values
CN103369311A (zh) 一种用于防止起始码冲突的方法
Taubman et al. Sample Data Coding

Legal Events

Date Code Title Description
E902 Notification of reason for refusal