KR102580669B1 - 프로세서 및 프로세서의 데이터 처리 방법 - Google Patents

프로세서 및 프로세서의 데이터 처리 방법 Download PDF

Info

Publication number
KR102580669B1
KR102580669B1 KR1020160117361A KR20160117361A KR102580669B1 KR 102580669 B1 KR102580669 B1 KR 102580669B1 KR 1020160117361 A KR1020160117361 A KR 1020160117361A KR 20160117361 A KR20160117361 A KR 20160117361A KR 102580669 B1 KR102580669 B1 KR 102580669B1
Authority
KR
South Korea
Prior art keywords
block
regular
bypass
bin
coding block
Prior art date
Application number
KR1020160117361A
Other languages
English (en)
Other versions
KR20180029448A (ko
Inventor
테츠오 코스게
김두현
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020160117361A priority Critical patent/KR102580669B1/ko
Priority to US15/666,817 priority patent/US9973209B2/en
Publication of KR20180029448A publication Critical patent/KR20180029448A/ko
Application granted granted Critical
Publication of KR102580669B1 publication Critical patent/KR102580669B1/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/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • 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
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6005Decoder aspects
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization
    • 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/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6029Pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 발명의 다양한 실시 예에 따른 프로세서는, 적어도 하나의 레귤러 빈(regular bin)을 포함하는 레귤러 빈 블록을 인코딩하는 제1 인코더, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 바이패스 빈 블록을 인코딩하는 제2 인코더 및 상기 레귤러 빈 블록을 인코딩하기 위한 컨텍스트 정보를 계산하고, 상기 컨텍스트 정보를 상기 제1 인코더로 전달하는 파라미터 계산 모듈을 포함하고, 상기 제1 인코더 및 상기 제2 인코더는 상기 레귤러 빈 블록 및 상기 바이패스 빈 블록 각각을 적어도 일부 시간 동안 동시에 병렬적으로 처리할 수 있다.

Description

프로세서 및 프로세서의 데이터 처리 방법{PROCESSOR AND DATA PROCESSING METHOD THEREOF}
본 발명은 데이터의 병렬적 처리가 가능한 프로세서 및 프로세서의 데이터 처리 방법에 관한 것이다.
정보화 시대의 도래에 따라 비디오, 오디오, 게임, 프로그램 등 다양한 종류의 컨텐츠가 생산되고 있으며, 컨텐츠의 저장, 전송 및 재생을 위한 기술도 함께 발전하고 있다.
고품질 컨텐츠의 생산에 따라 컨텐츠의 크기는 갈수록 커지고 있다. 컨텐츠 크기의 증가에 따라 컨텐츠의 저장 및 전송 용량도 급속히 발전하고 있으나 컨텐츠를 그대로 저장 및 전송하는 것은 효율적이지 못하며, 이에 따라, 컨텐츠를 압축하기 위한 다양한 종류의 압축 기술이 개발되고 있다.
코덱의 압축 성능은 일반적으로 컨텐츠의 압축률 대비 컨텐츠의 손실 정도 또는 복호화된 컨텐츠의 품질로 평가될 수 있으며, 코덱은 압축 성능을 높이기 위해 복수의 코딩 과정을 수행할 수 있다.
다양한 코덱은 복수의 코딩 과정 중 일부로 엔트로피 코딩을 수행할 수 있다. 엔트로피 코딩은 심볼의 발생 확률에 따른 무손실 압축 방법으로 고정 길이 코딩, 가변 길이 코딩, 허프만 코딩, 산술 코딩 등을 포함할 수 있다.
산술 코딩 중 적응적 이진 산술 코딩은 부호화할 심볼들이 서로 종속되어 있어 코딩 과정에서 심볼의 발생 확률이 지속적으로 변화하게 된다. 적응적 이진 산술 코딩은 심볼들 간의 종속성에 따라 병렬 처리에 어려움이 있으며 전체 코딩 과정에서 병목 현상을 발생시킬 수 있다.
본 발명의 다양한 실시예는 데이터를 병렬적으로 처리할 수 있는 프로세서 및 프로세서의 데이터 처리 방법을 제공하는 것을 목적으로 한다.
본 발명의 다양한 실시 예에 따른 프로세서는, 적어도 하나의 레귤러 빈(regular bin)을 포함하는 레귤러 빈 블록을 인코딩하는 제1 인코더, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 바이패스 빈 블록을 인코딩하는 제2 인코더 및 상기 레귤러 빈 블록을 인코딩하기 위한 컨텍스트 정보를 계산하고, 상기 컨텍스트 정보를 상기 제1 인코더로 전달하는 파라미터 계산 모듈을 포함하고, 상기 제1 인코더 및 상기 제2 인코더는 상기 레귤러 빈 블록 및 상기 바이패스 빈 블록 각각을 적어도 일부 시간 동안 동시에 병렬적으로 처리할 수 있다.
본 발명의 다양한 실시 예에 따른 프로세서의 처리 방법은, 제1 처리 주기에 적어도 하나의 레귤러 빈(regular bin)을 포함하는 제1 레귤러 빈 블록을 인코딩하는 동작, 상기 제1 처리 주기에 적어도 하나의 레귤러 빈을 포함하는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작, 제2 처리 주기에 상기 제2 레귤러 빈 블록의 시작 콘텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록을 인코딩하는 동작 및 상기 제2 처리 주기에 상기 제1 레귤러 빈 블록과 상기 제2 레귤러 빈 블록 사이에 배치되고, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 빈 블록을 인코딩하는 동작을 포함할 수 있다.
본 발명의 다양한 실시 예에 따른 컴퓨터 판독 가능 기록매체는, 제1 처리 주기에 적어도 하나의 레귤러 빈(regular bin)을 포함하는 제1 레귤러 빈 블록을 인코딩하는 동작, 상기 제1 처리 주기에 적어도 하나의 레귤러 빈을 포함하는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작, 제2 처리 주기에 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록을 인코딩하는 동작 및 상기 제2 처리 주기에 상기 제1 레귤러 빈 블록과 상기 제2 레귤러 빈 블록 사이에 배치되고, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 빈 블록을 인코딩하는 동작을 포함하는 프로그램이 기록될 수 있다.
본 발명의 다양한 실시 예에 따르면, 레귤러 빈 및 바이패스 빈에 대한 인코딩 또는 디코딩을 병렬적으로 동시에 처리할 수 있으며, 엔트로피 코딩 단계에서 발생하는 병목 현상을 줄일 수 있다.
도 1은 본 발명의 다양한 실시 예에 따른 산술 인코더의 구성을 나타내는 블록도이다.
도 2는 본 발명의 다양한 실시 예에 따른 데이터 신택스를 나타내는 도면이다.
도 3은 본 발명의 다양한 실시 예에 따른 시간의 흐름에 따른 인코딩 과정을 나타내는 도면이다.
도 4는 본 발명의 다양한 실시 예에 따른 산술 디코더의 구성을 나타내는 블록도이다.
도 5는 본 발명의 다양한 실시 예에 따른 시간의 흐름에 따른 디코딩 과정을 나타내는 도면이다.
도 6은 본 발명의 다양한 실시 예에 따른 산술 인코더의 인코딩 방법을 나타내는 흐름도이다.
도 7은 본 발명의 다양한 실시 예에 따른 산술 디코더의 디코딩 방법을 나타내는 흐름도이다.
도 8은 본 발명의 다양한 실시 예에 따른 산술 디코더의 디코딩 성능 개선 효과를 나타내는 도면이다.
이하, 본 발명의 다양한 실시 예가 첨부된 도면을 참조하여 기재된다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 실시 예의 다양한 변경(modification), 균등물(equivalent), 및/또는 대체물(alternative)을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용될 수 있다.
본 문서에서 사용된 용어들은 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 다른 실시 예의 범위를 한정하려는 의도가 아닐 수 있다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함할 수 있다. 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 용어들은 본 문서에 기재된 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가질 수 있다. 본 문서에 사용된 용어들 중 일반적인 사전에 정의된 용어들은 관련 기술의 문맥 상 가지는 의미와 동일 또는 유사한 의미로 해석될 수 있으며, 본 문서에서 명백하게 정의되지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다. 경우에 따라서, 본 문서에서 정의된 용어일지라도 본 문서의 실시 예들을 배제하도록 해석될 수 없다.
도 1은 본 발명의 다양한 실시 예에 따른 산술 인코더의 구성을 나타내는 블록도이다.
도 1에 도시된 산술 인코더(또는, 프로세서)(100)는 엔트로피 코딩 방법으로 적응적 이진 산술 코딩을 수행하는 다양한 종류의 코덱에 적용될 수 있다. 예를 들어, 산술 인코더(100)는 HEVC(high efficiency video codec)와 같이 CABAC(context-based adaptive binary arithmetic coding)를 사용하는 코덱에 적용될 수 있으나, 산술 인코더(100)의 적용이 HEVC에 한정되는 것은 아니다.
도 1을 참조하면, 산술 인코더(100)는 제1 버퍼(110), 제1 인코더(120), 제2 인코더(130), 파라미터 계산 모듈(140) 및 제2 버퍼(150)를 포함할 수 있다. 일 실시 예에 따르면, 산술 인코더(100)는 적어도 하나의 프로세서 및 메모리(예: 제1 버퍼(110) 및 제2 버퍼(150))를 포함하는 시스템온칩(SoC: system on chip)으로 구현될 수 있다. 도 1에 도시된 산술 인코더(100)의 구성들은 별도의 하드웨어 모듈이거나 또는 적어도 하나의 프로세서에 의해 구현되는 소프트웨어 모듈일 수 있다. 예를 들어, 산술 인코더(100)에 포함된 각각의 구성들이 수행하는 기능은 하나의 프로세서에 의해 수행되거나 또는 각각 별도의 프로세서에 의해 수행될 수도 있다. 도 1에서는 제1 버퍼(110) 및 제2 버퍼(150)가 산술 인코더(100)에 포함되는 것으로 도시하였으나 제1 버퍼(110) 및 제2 버퍼(150) 중 적어도 일부는 산술 인코더(100) 외부에 배치되어 산술 인코더(100)와 전기적으로 연결된 외부 메모리일 수도 있다.
일 실시 예에 따르면, 제1 버퍼(110)는 빈 스트링(bin string)을 저장할 수 있다. 영상 프레임이 산술 인코더(100)로 입력되기 전에, 영상 프레임에 대해, 예를 들어, 화면 내 예측, 움직임 예측, 움직임 보상, 도메인 변환 또는 양자화와 같은 복수의 코딩 과정이 수행될 수 있다. 상술한 코딩 과정에 따라 영상 프레임으로부터 복수의 신택스 요소가 생성될 수 있으며, 신택스 요소들은 이진화 과정을 거쳐 ‘0’ 및 ‘1’ 만으로 이루어진 빈(bin)의 배열인 빈 스트링으로 변환될 수 있다. 빈은 코딩의 기본 단위로, 컨텍스트 정보를 이용하여 빈에 포함된 심볼 각각의 확률을 예측하는 레귤러 빈(regular bin) 및 빈에 포함된 심볼의 발생 확률이 1/2로 동일한 바이패스 빈(bypass bin)을 포함할 수 있다.
일 실시 예에 따르면, 빈 스트링은 적어도 하나의 레귤러 빈을 포함하는 레귤러 빈 블록 및 적어도 하나의 바이패스 빈을 포함하는 바이패스 빈 블록을 포함할 수 있다.
도 2는 본 발명의 다양한 실시 예에 따른 데이터 신택스를 나타내는 도면이다.
도 2를 참조하면, 라지 블록(10)은 적어도 하나의 미들 블록(20-1, ..., 20-n)을 포함할 수 있다. 각각의 미들 블록(20-1, ..., 20-n)은 적어도 하나의 스몰 블록(30-1, ..., 30-n)을 포함할 수 있다. 각각의 스몰 블록(30-1, ..., 30-n)은 적어도 하나의 레귤러 빈(40-1, ..., 40-n)을 포함할 수 있다. 적어도 하나의 미들 블록(20-1, ..., 20-n)은 라지 블록(10)에 포함된 레귤러 빈의 집합(즉, 레귤러 빈 블록)일 수 있다.
일 실시 예에 따르면, 라지 블록(10)은 바이패스 빈 블록(50)을 포함할 수 있다. 바이패스 빈 블록(50)은 적어도 하나의 바이패스 빈(55-1, ..., 55-n)을 포함할 수 있다. 바이패스 빈 블록(50)은 라지 블록(10)에 포함된 바이패스 빈의 집합일 수 있다. 일 실시 예에 따르면, 바이패스 빈 블록(50)은 바이패스 빈 블록의 인코딩 결과인 바이패스 코딩 블록의 크기 정보(51)를 포함할 수 있다. 바이패스 코딩 블록의 크기 정보(51)는, 예를 들어, 바이패스 코딩 블록(50)에 포함된 모든 심볼(예: ‘0’ 및 ‘1’)의 개수를 나타내는 정보일 수 있다. 일 실시 예에 따르면, 바이패스 빈 블록(50)은 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보(53)를 포함할 수 있다. 예를 들어, 적어도 하나의 심볼의 개수 정보(53)는 심볼 ‘0’ 의 개수 정보 및 심볼 ‘1’의 개수 정보 중 적어도 하나를 포함할 수 있다. 일 실시 예에 따르면, 바이패스 코딩 블록의 크기 정보(51) 및 적어도 하나의 심볼의 개수 정보(53)는 바이패스 빈 블록(50)의 시작 위치에 삽입될 수 있다. 일 실시 예에 따르면, 바이패스 코딩 블록의 크기 정보(51) 및 적어도 하나의 심볼의 개수 정보(53)는 생략될 수도 있다.
일 실시 예에 따르면, 라지 블록(10)은 하나의 레귤러 빈 블록 및 하나의 바이패스 빈 블록(50)을 포함할 수 있다. 예를 들어, 라지 블록(10) 내에서 라지 블록(10)에 포함된 모든 레귤러 빈이 연속적으로 배치된 후 라지 블록(10)에 포함된 모든 바이패스 빈이 배치될 수 있다.
일 실시 예에 따르면, 빈 스트링은 도 2에 도시된 라지 블록(10)의 집합일 수 있다. 빈 스트링은, 예를 들어, 복수의 라지 블록(10)이 연속적으로 배치된 것일 수 있다. 빈 스트링은, 예를 들어, 복수의 라지 블록(10)에 포함된 레귤러 빈 블록 및 바이패스 빈 블록이 교번적으로 배치된 것일 수 있다.
영상 프레임이 산술 인코더(100)로 입력되기 전에, 영상 프레임은 블록 단위로 처리될 수 있다. 예를 들어, 하나의 영상 프레임은 적어도 하나의 슬라이스(slice)로 구분되고, 하나의 슬라이스는 적어도 하나의 슬라이스 세그먼트(slice segment)로 구분될 수 있다. 하나의 슬라이스 세그먼트는 적어도 하나의 CTU(coding tree unit)로 구분될 수 있으며, 하나의 CTU는 적어도 하나의 CU(coding unit)으로 구분될 수 있다. 하나의 CU는 적어도 하나의 PU(prediction unit) 또는 TU(transfer unit)로 구분될 수 있다. 일 실시 예에 따르면, 라지 블록(10)은 영상 프레임의 처리 단위 중 CTU에 대응될 수 있다. 예를 들어, 레귤러 빈 블록은 하나의 CTU에 포함된 레귤러 빈의 집합이고, 바이패스 빈 블록(50)은 하나의 CTU에 포함된 바이패스 빈의 집합일 수 있다. 일 실시 예에 따르면, 라지 블록(10)은 영상 프레임의 처리 단위 중 슬라이스(또는, 슬라이스 세그먼트)에 대응될 수 있다. 예를 들어, 레귤러 빈 블록은 하나의 슬라이스(또는, 슬라이스 세그먼트)에 포함된 레귤러 빈의 집합이고, 바이패스 빈 블록(50)은 하나의 슬라이스(또는, 슬라이스 세그먼트)에 포함된 바이패스 빈의 집합일 수 있다.
일 실시 예에 따르면, 제1 버퍼(110)에 저장된 빈 스트링은 제1 인코더(120), 제2 인코더(130) 및 파라미터 계산 모듈(140)로 입력될 수 있다. 예를 들어, 빈 스트링에 포함된 레귤러 빈 블록은 제1 인코더(120)로 입력될 수 있으며, 빈 스트링에 포함된 바이패스 빈 블록은 제2 인코더(130) 및 파라미터 계산 모듈(140)로 입력될 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 제1 버퍼(110)로부터 입력되는 레귤러 빈 블록을 인코딩할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록에 대해 레귤러 인코딩을 수행할 수 있다. 레귤러 인코딩은, 예를 들어, 컨텍스트 정보를 이용하여 레귤러 빈에 포함된 심볼들(예: ‘0’ 및 ‘1)의 발생 확률에 따라 인코딩하는 적응적 이진 산술 코딩일 수 있다. 컨텍스트 정보는 심볼의 발생 확률에 관한 정보로서, 예를 들어, 빈의 신택스 정보, 빈 스트링에서의 빈의 위치인 빈 인덱스 정보, 빈이 포함되어 있는 블록의 주변 블록에 포함된 빈의 확률 정보 등을 포함할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 레귤러 인코딩이 시작되면 컨텍스트 정보를 이용하여 빈의 확률 정보를 추정하는 컨텍스트 모델링을 수행할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 빈의 확률 정보를 이용하여 입력되는 빈에 대해 레귤러 인코딩을 수행할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록의 인코딩 과정에서 컨텍스트 정보를 지속 업데이트할 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록을 인코딩 한 후 레귤러 빈 블록의 인코딩 결과인 레귤러 코딩 블록을 제2 버퍼(150)에 저장할 수 있다. 레귤러 코딩 블록은, 예를 들어, 적어도 하나의 인코딩된 레귤러 빈을 포함할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록의 인코딩이 완료되면 제2 인코더(130)로 레귤러 코딩 블록의 저장 종료 위치 정보(또는, 바이패스 코딩 블록의 저장 시작 위치 정보)를 전달할 수 있다. 예를 들어, 제1 인코더(120)는 제1 레귤러 빈 블록의 인코딩이 완료되면 제2 인코더(130)로 제1 레귤러 빈 블록의 인코딩 결과인 제1 레귤러 코딩 블록의 저장 종료 위치 정보(또는, 제1 바이패스 코딩 블록의 저장 시작 위치 정보)를 전달할 수 있다.
일 실시 예에 따르면, 제2 인코더(130)는 제1 버퍼(110)로부터 입력되는 바이패스 빈 블록을 인코딩할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 바이패스 빈 블록에 대해 바이패스 인코딩을 수행할 수 있다. 바이패스 인코딩은, 예를 들어, 심볼들(예: ‘0’ 및 ‘1)의 발생 확률이 동일한 바이패스 빈에 대해 수행되는 단순 코딩 방법일 수 있다.
일 실시 예에 따르면, 제2 인코더(130)는 바이패스 빈 블록을 인코딩 한 후 바이패스 빈 블록의 인코딩 결과인 바이패스 코딩 블록을 제2 버퍼(150)에 저장할 수 있다. 바이패스 코딩 블록은, 예를 들어, 적어도 하나의 인코딩된 바이패스 빈을 포함할 수 있다. 일 실시 예에 따르면, 제2 인코더(130)는 제1 인코더(120)로부터 수신된 레귤러 코딩 블록의 저장 종료 위치 정보(또는, 바이패스 코딩 블록의 저장 시작 위치 정보)에 기초하여 바이패스 코딩 블록을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제2 인코더(130)는 제1 인코더(120)로부터 수신된 제1 레귤러 코딩 블록의 저장 종료 위치를 시작 위치로 하여 제1 바이패스 코딩 블록을 저장할 수 있다.
일 실시 예에 따르면, 제1 인코더(120) 및 제2 인코더(130)는 산술 인코더(100) 내에서 병렬적으로 배치될 수 있다. 일 실시 예에 따르면, 제1 인코더(120) 및 제2 인코더(130)는 각각 지정된 처리 주기에 하나의 레귤러 빈 블록 및 하나의 바이패스 빈 블록을 인코딩할 수 있다. 예를 들어, 제1 인코더(120)는 제1 처리 주기에 제1 레귤러 빈 블록을 인코딩하고, 제2 처리 주기에 제2 레귤러 빈 블록을 인코딩할 수 있다. 제2 인코더(130)는 제2 처리 주기에 제1 레귤러 빈 블록 및 제2 레귤러 빈 블록 사이에 배치된 제1 바이패스 빈 블록을 인코딩할 수 있다. 즉, 제1 바이패스 빈 블록은 제1 레귤러 빈 블록이 인코딩되는 주기의 다음 주기에 인코딩될 수 있다.
일 실시 예에 따르면, 제1 인코더(120) 및 제2 인코더(130)는 적어도 일부 시간 동안 동시에 동작할 수 있다. 예를 들어, 제1 인코더(120)가 제2 처리 주기에 제2 레귤러 빈 블록을 인코딩하는 시간 및 제2 인코더(130)가 제2 처리 주기에 제1 바이패스 빈 블록을 인코딩하는 시간은 적어도 일부 중복될 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제1 버퍼(110)로부터 입력되는 바이패스 빈 블록을 이용하여 바이패스 빈 블록의 컨텍스트 정보를 계산할 수 있다. 바이패스 인코딩은 레귤러 인코딩과는 달리 컨텍스트 모델링 과정이 필요하지 않으나 적응적 이진 산술 코딩의 특성상 바이패스 빈에 포함된 심볼들은 레귤러 빈에 포함된 심볼들의 컨텍스트 정보에 영향을 줄 수 있다. 이에 따라, 제1 인코더(120)가 제2 레귤러 빈 블록을 인코딩하기 위해서는 제1 레귤러 빈 블록의 컨텍스트 정보뿐만 아니라 제1 바이패스 빈 블록의 컨텍스트 정보가 필요할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 빈 블록이 인코딩되기 전에 바이패스 빈 블록의 파라미터를 계산할 수 있다. 파라미터 는, 예를 들어, 바이패스 빈 블록의 컨텍스트 정보, 바이패스 코딩 블록의 크기, 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보 중 적어도 하나를 포함할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제2 인코더(130)가 제1 바이패스 빈 블록을 인코딩하기 전인 제1 처리 주기에 제1 바이패스 빈 블록의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(140)은 제2 인코더(130)가 제1 바이패스 빈 블록을 인코딩하기 전인 제1 처리 주기에 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록에 대한 인코딩이 완료되면 파라미터 계산 모듈(140)로 레귤러 빈 블록의 최종 컨텍스트 정보를 전달할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제1 인코더(120)로부터 수신되는 레귤러 빈 블록의 최종 컨텍스트 정보 및 바이패스 빈 블록의 컨텍스트 정보를 이용하여 다음 레귤러 빈 블록을 인코딩하기 위한 컨텍스트 정보를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제1 인코더(120)로부터 수신된 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 제1 인코더(120)로 전달할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제2 처리 주기에 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록을 인코딩할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 빈 블록의 컨텍스트 정보를 제1 인코더(120)로 전달할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 파라미터 계산 모듈(140)로부터 수신된 바이패스 빈 블록의 컨텍스트 정보를 이용하여 레귤러 빈 블록을 인코딩하기 위한 컨텍스트 정보를 계산할 수 있다. 예를 들어, 제1 인코더(120)는 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 파라미터 계산 모듈(140)로부터 수신된 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 제2 처리 주기에 제2 레귤러 빈 블록을 인코딩할 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 레귤러 빈 블록에 대한 인코딩이 완료되면 파라미터 계산 모듈(140)로 레귤러 코딩 블록의 저장 종료 위치 정보를 전달할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제1 인코더(120)로부터 수신되는 레귤러 코딩 블록의 저장 종료 위치 정보 및 바이패스 코딩 블록의 크기 정보를 이용하여 바이패스 코딩 블록의 저장 종료 위치 정보(또는, 다음 레귤러 코딩 블록의 저장 시작 위치 정보)를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제1 인코더(120)로부터 수신된 제1 레귤러 코딩 블록의 저장 종료 위치 정보 및 제1 바이패스 코딩 블록의 크기 정보를 이용하여 제1 바이패스 코딩 블록의 저장 종료 위치 정보(또는, 제2 레귤러 코딩 블록의 저장 시작 위치 정보)를 계산할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제1 바이패스 코딩 블록의 저장 종료 위치 정보를 제1 인코더(120)로 전달할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제2 처리 주기에 제1 바이패스 코딩 블록의 저장 종료 위치 정보에 기초하여 제2 레귤러 빈 블록의 인코딩 결과인 제2 레귤러 코딩 블록을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제1 인코더(120)는 제1 바이패스 코딩 블록의 저장 종료 위치를 시작 위치로 하여 제2 레귤러 코딩 블록을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 코딩 블록의 크기 정보를 제1 인코더(120)로 전달할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 파라미터 계산 모듈(140)로부터 수신된 바이패스 코딩 블록의 크기 정보를 이용하여 바이패스 코딩 블록의 저장 종료 위치 정보(또는, 다음 레귤러 코딩 블록의 저장 시작 위치 정보)를 계산할 수 있다. 예를 들어, 제1 인코더(120)는 제1 레귤러 코딩 블록의 저장 종료 위치 정보 및 파라미터 계산 모듈(140)로부터 수신된 제1 바이패스 코딩 블록 크기 정보를 이용하여 제1 바이패스 코딩 블록의 저장 종료 위치 정보(또는, 제2 레귤러 코딩 블록의 저장 시작 위치 정보)를 계산할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제2 처리 주기에 제1 바이패스 코딩 블록의 저장 종료 위치 정보에 기초하여 제2 레귤러 빈 블록의 인코딩 결과인 제2 레귤러 코딩 블록을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제1 인코더(120)는 제1 바이패스 코딩 블록의 저장 종료 위치를 시작 위치로 하여 제2 바이패스 코딩 블록을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 빈 블록이 인코딩되기 전에 바이패스 빈 블록에 디코더(예: 도 4의 산술 디코더(200))의 파라미터 계산을 위한 부가 정보를 삽입할 수 있다. 부가 정보는, 예를 들어, 바이패스 코딩 블록의 크기 정보 및 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보를 포함할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 바이패스 빈 블록의 시작 위치에 부가 정보를 삽입할 수 있다. 일 실시 예에 따르면, 제2 인코더(130)는 부가 정보가 포함된 바이패스 빈 블록을 인코딩할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 빈 블록에 포함된 바이패스 빈의 개수를 확인할 수 있다. 일 실시 예에 따르면, 제1 인코더(120) 레귤러 빈 블록에 포함된 레귤러 빈의 개수 정보를 파라미터 계산 모듈(140)로 전달할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 레귤러 빈 블록에 포함된 레귤러 빈의 개수 및 바이패스 빈 블록에 포함된 바이패스 빈의 개수에 기초하여 부가 정보의 삽입 여부를 결정할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제1 레귤러 빈 블록에 포함된 레귤러 빈의 개수 및 제1 바이패스 빈 블록에 포함된 바이패스 빈의 개수의 합이 지정된 값을 초과하면 제1 바이패스 빈 블록에 제1 바이패스 빈 블록의 부가 정보를 삽입할 수 있다. 파라미터 계산 모듈(140)은 레귤러 빈 블록에 포함된 레귤러 빈의 개수 정보 및 바이패스 빈 블록에 포함된 바이패스 빈의 개수 가 지정된 값을 초과하는 경우 디코더(예: 도 4의 산술 디코더(200))가 지정된 처리 주기 내에 레귤러 코딩 블록에 대한 디코딩 및 바이패스 코딩 블록에 대한 파라미터 계산을 완료할 수 없다고 판단하고, 바이패스 빈 블록에 바이패스 코딩 블록의 파라미터 계산에 필요한 부가 정보를 삽입할 수 있다.
일 실시 예에 따르면, 제2 버퍼(150)는 빈 스트링의 인코딩 결과인 비트 스트림(bit stream)을 저장할 수 있다. 제2 버퍼(150)는, 예를 들어, 비트 스트림 버퍼일 수 있다. 일 실시 예에 따르면, 비트 스트림은 적어도 하나의 인코딩된 레귤러 빈을 포함하는 레귤러 코딩 블록 및 적어도 하나의 인코딩된 바이패스 빈을 포함하는 바이패스 코딩 블록을 포함할 수 있다. 일 실시 예에 따르면, 비트 스트림에 포함된 레귤러 코딩 블록 및 바이패스 코딩 블록은 빈 스트링에 포함된 레귤러 빈 블록 및 바이패스 빈 블록에 대응되는 순서로 배치될 수 있다. 예를 들어, 산술 인코더(100)로 제1 레귤러 빈 블록, 제1 바이패스 빈 블록, 제2 레귤러 빈 블록, 제2 바이패스 빈 블록 순서로 배치된 빈 스트링이 입력되면 제1 레귤러 코딩 블록, 제1 바이패스 코딩 블록, 제2 레귤러 코딩 블록, 제2 바이패스 코딩 블록 순서로 배치된 비트 스트림이 출력될 수 있다.
도 3은 본 발명의 다양한 실시 예에 따른 시간의 흐름에 따른 인코딩 과정을 나타내는 도면이다.
일 실시 예에 따르면, 제1 인코더(120)는 제1 처리 주기에 제1 레귤러 빈 블록(R1)을 인코딩할 수 있다. 예를 들어, 제1 인코더(120)는 제1 레귤러 빈 블록(R1)의 시작 컨텍스트 정보를 이용하여 제1 레귤러 빈 블록(R1)을 인코딩할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제1 레귤러 빈 블록(R1)의 인코딩 결과인 제1 레귤러 코딩 블록(r1)을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제1 인코더(120)는 제2 버퍼(150)의 제1 위치(P1)로부터 제1 레귤러 코딩 블록(r1)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제1 처리 주기에 제1 바이패스 빈 블록(B1)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제1 바이패스 빈 블록(B1)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(140)은 제1 바이패스 빈 블록(B1)의 인코딩 결과인 제1 바이패스 코딩 블록(b1)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은, 제1 처리 주기에, 제1 레귤러 빈 블록(R1)의 최종 컨텍스트 정보 및 제1 바이패스 빈 블록(B1)의 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록(R2)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은, 제1 처리 주기에, 제1 레귤러 코딩 블록(r1)의 저장 종료 위치(P2) 및 제1 바이패스 코딩 블록(b1)의 크기 정보를 이용하여 제2 레귤러 코딩 블록(r2)의 저장 시작 위치인 제3 위치(P3)를 계산할 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 제2 처리 주기에 제2 레귤러 빈 블록(R2)을 인코딩할 수 있다. 예를 들어, 제1 인코더(120)는 제2 레귤러 빈 블록(R2)의 시작 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록(R2)을 인코딩할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제2 레귤러 빈 블록(R2)의 인코딩 결과인 제2 레귤러 코딩 블록(r2)을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 인코더(120)는 제2 버퍼(150)의 제3 위치(P3)로부터 제2 레귤러 코딩 블록(r2)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제2 처리 주기에 제2 바이패스 빈 블록(B2)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제2 바이패스 빈 블록(B2)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(140)은 제2 바이패스 빈 블록(B2)의 인코딩 결과인 제2 바이패스 코딩 블록(b2)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은, 제2 처리 주기에, 제2 레귤러 빈 블록(R2)의 최종 컨텍스트 정보 및 제2 바이패스 빈 블록(B2)의 컨텍스트 정보를 이용하여 제3 레귤러 빈 블록(R3)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제2 레귤러 빈 블록(R2)에 포함된 레귤러 빈의 개수 및 제2 바이패스 빈 블록(B2)에 포함된 바이패스 빈 블록의 개수가 지정된 값을 초과할 수 있다. 이에 따라, 파라미터 계산 모듈(140)은 제2 바이패스 빈 블록(B2)에 제2 바이패스 빈 블록(B2)의 부가 정보(A2)를 삽입할 수 있다. 부가 정보(A2)는, 예를 들어, 제2 바이패스 코딩 블록(b2)의 크기 정보 및 제2 바이패스 코딩 블록(b2)에 포함된 적어도 하나의 심볼의 개수 정보를 포함할 수 있다. 파라미터 계산 모듈(140)은 부가 정보(A2)의 삽입에 따라 제2 바이패스 코딩 블록(b2)의 크기 정보를 업데이트할 수 있다. 일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은, 제2 처리 주기에, 제2 레귤러 코딩 블록(r2)의 저장 종료 위치(P4) 및 제2 바이패스 코딩 블록(b2)의 크기 정보를 이용하여 제3 레귤러 코딩 블록(r3)의 저장 시작 위치인 제5 위치(P5)를 계산할 수 있다.
일 실시 예에 따르면, 제2 인코더(130)는 제2 처리 주기에 제1 바이패스 빈 블록(B1)을 인코딩할 수 있다. 일 실시 예에 따르면, 제2 인코더(130)는 제1 바이패스 빈 블록(B1)의 인코딩 결과인 제1 바이패스 코딩 블록(b1)을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제2 인코더(130)는 제1 레귤러 코딩 블록(r1)의 저장 종료 위치인 제2 버퍼(150)의 제2 위치(P2)로부터 제1 바이패스 코딩 블록(b1)을 저장할 수 있다.
일 실시 예에 따르면, 제1 인코더(120)는 제3 처리 주기에 제3 레귤러 빈 블록(R3)을 인코딩할 수 있다. 예를 들어, 제1 인코더(120)는 제3 레귤러 빈 블록(R3)의 시작 컨텍스트 정보를 이용하여 제3 레귤러 빈 블록(R3)을 인코딩할 수 있다. 일 실시 예에 따르면, 제1 인코더(120)는 제3 레귤러 빈 블록(R3)의 인코딩 결과인 제3 레귤러 코딩 블록(r3)을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 인코더(120)는 제2 버퍼(150)의 제5 위치(P5)로부터 제3 레귤러 코딩 블록(r3)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제3 처리 주기에 제3 바이패스 빈 블록(B3)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(140)은 제3 바이패스 빈 블록(B3)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(140)은 제3 바이패스 빈 블록(B3)의 인코딩 결과인 제3 바이패스 코딩 블록(b3)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은 제3 처리 주기에 제3 레귤러 빈 블록(R3)의 최종 컨텍스트 정보 및 제3 바이패스 빈 블록(B3)의 컨텍스트 정보를 이용하여 제4 레귤러 빈 블록(미도시)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 인코더(120) 또는 파라미터 계산 모듈(140)은 제3 처리 주기에 제3 레귤러 코딩 블록(r3)의 저장 종료 위치(미도시) 및 제3 바이패스 코딩 블록(b3)의 크기 정보를 이용하여 제4 레귤러 코딩 블록(미도시)의 저장 시작 위치(미도시)를 계산할 수 있다.
일 실시 예에 따르면, 제2 인코더(130)는 제3 처리 주기에 제2 바이패스 빈 블록(B2)을 인코딩할 수 있다. 제2 바이패스 빈 블록(B2)은, 예를 들어, 제2 바이패스 빈 블록(B2)의 부가 정보(A2)를 포함할 수 있다. 일 실시 예에 따르면, 제2 인코더(130)는 제2 바이패스 빈 블록(B2)의 인코딩 결과인 제2 바이패스 코딩 블록(b2)을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제2 인코더(130)는 제2 레귤러 코딩 블록(r2)의 저장 종료 위치인 제2 버퍼(150)의 제4 위치(P4)로부터 제2 바이패스 코딩 블록(b2)을 저장할 수 있다. 제2 바이패스 코딩 블록(b2)은, 예를 들어, 인코딩된 부가 정보(a2)를 포함할 수 있다.
본 발명의 다양한 실시 예에 따르면, 바이패스 빈 블록에 대한 인코딩을 수행하기 전에 바이패스 빈 블록의 파라미터를 계산함으로써 레귤러 빈 블록 및 바이패스 빈 블록의 인코딩을 병렬적으로 동시에 처리할 수 있게 된다. 이에 따라, 빈의 수가 많은 블록도 지정된 처리 주기 내에 처리할 수 있으며, 엔트로피 코딩 단계에서 발생하는 병목 현상을 줄일 수 있다.
도 4는 본 발명의 다양한 실시 예에 따른 산술 디코더의 구성을 나타내는 블록도이다.
도 4에 도시된 산술 디코더(또는, 프로세서)(200)는 엔트로피 코딩 방법으로 적응적 이진 산술 코딩을 수행하는 다양한 종류의 코덱에 적용될 수 있다. 예를 들어, 산술 디코더(200)는 HEVC(high efficiency video codec)와 같이 CABAC(context-based adaptive binary arithmetic coding)를 사용하는 코덱에 적용될 수 있으나, 산술 디코더(100)의 적용이 HEVC에 한정되는 것은 아니다.
도 4를 참조하면, 산술 디코더(200)는 제1 버퍼(210), 제1 디코더(220), 제2 디코더(230), 파라미터 계산 모듈(240) 및 제2 버퍼(250)를 포함할 수 있다. 일 실시 예에 따르면, 산술 디코더(200)는 적어도 하나의 프로세서 및 메모리(예: 제1 버퍼(210) 및 제2 버퍼(250))를 포함하는 시스템온칩(SoC: system on chip)으로 구현될 수 있다. 도 4에 도시된 산술 디코더(200)의 구성들은 각각 별도의 하드웨어 모듈이거나 또는 적어도 하나의 프로세서에 의해 구현되는 소프트웨어 모듈일 수 있다. 예를 들어, 산술 디코더(200)에 포함된 각각의 모듈들이 수행하는 기능은 하나의 프로세서에 의해 수행되거나 또는 각각 별도의 프로세서에 의해 수행될 수도 있다. 도 4에서는 제1 버퍼(210) 및 제2 버퍼(250)가 산술 디코더(200)에 포함되는 것으로 도시하였으나 제1 버퍼(210) 및 제2 버퍼(250)는 산술 디코더(200) 외부에 배치되어 산술 디코더(200)와 전기적으로 연결된 외부 메모리일 수도 있다.
일 실시 예에 따르면, 제1 버퍼(210)는 비트 스트림(bit stream)을 저장할 수 있다. 비트 스트림은 빈 스트링의 인코딩 결과로써 적어도 하나의 인코딩된 레귤러 빈을 포함하는 레귤러 코딩 블록 및 적어도 하나의 인코딩된 바이패스 빈을 포함하는 바이패스 코딩 블록을 포함할 수 있다.
일 실시 예에 따르면, 제1 버퍼(210)에 저장된 비트 스트림은 제1 디코더(220), 제2 디코더(230) 및 파라미터 계산 모듈(240)로 입력될 수 있다. 예를 들어, 비트 스트림에 포함된 레귤러 코딩 블록은 제1 디코더(220)로 입력될 수 있으며, 비트 스트림에 포함된 바이패스 빈 블록은 제2 디코더(230) 및 파라미터 계산 모듈(240)로 입력될 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 제1 버퍼(210)로부터 입력되는 레귤러 코딩 블록을 디코딩할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 레귤러 코딩 블록에 대해 레귤러 디코딩을 수행할 수 있다. 레귤러 디코딩은, 예를 들어, 컨텍스트 정보를 이용하여, 인코딩된 레귤러 빈에 포함된 심볼들(예: ‘0’ 및 ‘1)의 발생 확률에 따라 디코딩하는 적응적 이진 산술 디코딩일 수 있다. 컨텍스트 정보는 심볼의 발생 확률에 관한 정보로서, 예를 들어, 빈의 신택스 정보, 비트 스트림에서의 빈의 위치인 빈 인덱스 정보, 빈이 포함되어 있는 블록의 주변 블록에 포함된 빈의 확률 정보 등을 포함할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 레귤러 디코딩이 시작되면 컨텍스트 정보를 이용하여 빈의 확률 정보를 추정하는 컨텍스트 모델링을 수행할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 빈의 확률 정보를 이용하여 입력되는 빈에 대해 레귤러 디코딩을 수행할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 레귤러 빈 블록의 디코딩 과정에서 컨텍스트 정보를 지속 업데이트할 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 레귤러 코딩 블록을 디코딩 한 후 레귤러 코딩 블록의 디코딩 결과인 레귤러 빈 블록을 제2 버퍼(250)에 저장할 수 있다. 레귤러 빈 블록은, 예를 들어, 적어도 하나의 디코딩된 레귤러 빈을 포함할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 레귤러 코딩 블록의 디코딩이 완료되면 제2 디코더(230)로 레귤러 빈 블록의 저장 종료 위치 정보(또는, 바이패스 빈 블록의 저장 시작 위치 정보)를 전달할 수 있다. 예를 들어, 제1 디코더(220)는 제1 레귤러 코딩 블록의 디코딩이 완료되면 제2 디코더(230)로 제1 레귤러 코딩 블록의 디코딩 결과인 제1 레귤러 빈 블록의 저장 종료 위치 정보(또는, 제1 바이패스 빈 블록의 저장 시작 위치 정보)를 전달할 수 있다.
일 실시 예에 따르면, 제2 디코더(230)는 제1 버퍼(210)로부터 입력되는 바이패스 코딩 블록을 디코딩할 수 있다. 일 실시 예에 따르면, 제2 디코더(220)는 바이패스 코딩 블록에 대해 바이패스 디코딩을 수행할 수 있다. 바이패스 디코딩은, 예를 들어, 심볼들(예: ‘0’ 및 ‘1)의 발생 확률이 동일한 바이패스 빈에 대해 수행되는 단순 디코딩 방법일 수 있다.
일 실시 예에 따르면, 제2 디코더(230)는 바이패스 코딩 블록을 디코딩 한 후 바이패스 코딩 블록의 디코딩 결과인 바이패스 빈 블록을 제2 버퍼(250)에 저장할 수 있다. 바이패스 빈 블록은, 예를 들어, 적어도 하나의 디코딩된 바이패스 빈을 포함할 수 있다. 일 실시 예에 따르면, 제2 디코더(230)는 제1 디코더(220)로부터 수신된 레귤러 빈 블록의 저장 종료 위치 정보(또는, 바이패스 빈 블록의 저장 시작 위치 정보)에 기초하여 바이패스 빈 블록을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 제2 디코더(230)는 제1 디코더(220)로부터 수신된 제1 레귤러 빈 블록의 저장 종료 위치를 시작 위치로 하여 제1 바이패스 빈 블록을 저장할 수 있다.
일 실시 예에 따르면, 제1 디코더(220) 및 제2 디코더(230)는 산술 디코더(200) 내에서 병렬적으로 배치될 수 있다. 일 실시 예에 따르면, 제1 디코더(220) 및 제2 디코더(230)는 각각 지정된 처리 주기에 하나의 레귤러 코딩 블록 및 하나의 바이패스 코딩 블록을 디코딩할 수 있다. 예를 들어, 제1 디코더(220)는 제1 처리 주기에 제1 레귤러 코딩 블록을 디코딩하고, 제2 처리 주기에 제2 레귤러 코딩 블록을 디코딩할 수 있다. 제2 디코더(230)는 제2 처리 주기에 제1 레귤러 코딩 블록 및 제2 레귤러 코딩 블록 사이에 배치된 제1 바이패스 코딩 블록을 디코딩할 수 있다. 즉, 제1 바이패스 코딩 블록은 제1 레귤러 코딩 블록이 디코딩되는 주기의 다음 주기에 디코딩될 수 있다.
일 실시 예에 따르면, 제1 디코더(220) 및 제2 디코더(230)는 적어도 일부 시간 동안 동시에 동작할 수 있다. 예를 들어, 제1 디코더(220)가 제2 처리 주기에 제2 레귤러 코딩 블록을 디코딩하는 시간 및 제2 디코더(230)가 제2 처리 주기에 제1 바이패스 코딩 블록을 디코딩하는 시간은 적어도 일부 중복될 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 버퍼(210)로부터 입력되는 바이패스 코딩 블록을 이용하여 바이패스 코딩 블록의 컨텍스트 정보를 계산할 수 있다. 바이패스 디코딩은 레귤러 디코딩과는 달리 컨텍스트 모델링 과정이 필요하지 않으나 적응적 이진 산술 코딩의 특성상 바이패스 빈에 포함된 심볼들은 레귤러 빈에 포함된 심볼들의 컨텍스트 정보에 영향을 줄 수 있다. 이에 따라, 제1 디코더(220)가 제2 레귤러 코딩 블록을 디코딩하기 위해서는 제1 레귤러 코딩 블록의 컨텍스트 정보뿐만 아니라 제1 바이패스 코딩 블록의 컨텍스트 정보가 필요할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 바이패스 코딩 블록이 디코딩되기 전에 바이패스 코딩 블록의 파라미터를 계산할 수 있다. 파라미터는, 예를 들어, 바이패스 코딩 블록의 컨텍스트 정보, 바이패스 코딩 블록의 디코딩 결과인 바이패스 빈 블록의 크기를 포함할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 제2 디코더(230)가 제1 바이패스 코딩 블록을 디코딩하기 전인 제1 처리 주기에 제1 바이패스 코딩 블록의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(240)는 제2 디코더(230)가 제1 바이패스 코딩 블록을 디코딩하기 전인 제1 처리 주기에 제1 바이패스 코딩 블록의 디코딩 결과인 제1 바이패스 빈 블록의 크기를 계산할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 디코더(220)의 디코딩이 완료되면 바이패스 코딩 블록의 파라미터를 계산할 수 있다. 예를 들어, 제1 디코더(220)는 제1 처리 주기의 제1 시간 동안 제1 레귤러 코딩 블록을 디코딩하고, 파라미터 계산 모듈(240)는 제1 처리 주기의 제2 시간 동안 제1 바이패스 코딩 블록의 파라미터를 계산할 수 있다. 파라미터 계산 모듈(240)는 제1 디코더(220)에 의해 레귤러 코딩 블록의 디코딩이 완료되기 전에는 비트 스트림에 포함된 바이패스 코딩 블록의 시작 위치를 알 수 없으며, 제1 디코더(220)에 의해 레귤러 코딩 블록의 디코딩이 완료된 이후 바이패스 코딩 블록의 시작 위치를 알 수 있다. 제1 디코더(220)는 레귤러 코딩 블록의 디코딩이 완료되면 파라미터 계산 모듈(240)로 제1 버퍼(220)에서의 레귤러 코딩 블록의 저장 종료 위치 정보(또는, 바이패스 코딩 블록의 저장 시작 위치 정보)를 전달할 수 있다. 파라미터 계산 모듈(240)는 제1 버퍼(210)의 레귤러 코딩 블록의 저장 종료 위치로부터 바이패스 코딩 블록을 로딩(loading)하여 바이패스 코딩 블록의 파라미터를 계산할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 바이패스 코딩 블록에 부가 정보가 삽입되어 있으면 부가 정보를 이용하여 바이패스 코딩 블록의 파라미터를 계산할 수 있다. 부가 정보는, 예를 들어, 바이패스 코딩 블록의 시작 위치에 삽입되어 있을 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 레귤러 코딩 블록에 대한 디코딩이 완료되면 파라미터 계산 모듈(240)로 레귤러 코딩 블록의 최종 컨텍스트 정보를 전달할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 디코더(220)로부터 수신되는 레귤러 코딩 블록의 최종 컨텍스트 정보 및 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 다음 레귤러 코딩 블록을 디코딩하기 위한 컨텍스트 정보를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 제1 디코더(220)로부터 수신된 제1 레귤러 코딩 블록의 최종 컨텍스트 정보 및 제1 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(140)은 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 제1 디코더(220)로 전달할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제2 처리 주기에 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록을 디코딩할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(140)은 바이패스 코딩 블록의 컨텍스트 정보를 제1 디코더(220)로 전달할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 파라미터 계산 모듈(240)로부터 수신된 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 레귤러 코딩 블록을 디코딩하기 위한 컨텍스트 정보를 계산할 수 있다. 예를 들어, 제1 디코더(220)는 제1 레귤러 코딩 블록의 최종 컨텍스트 정보 및 파라미터 계산 모듈(240)로부터 수신된 제1 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 이용하여 제2 처리 주기에 제2 레귤러 코딩 블록을 디코딩할 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 레귤러 코딩 블록에 대한 디코딩이 완료되면 파라미터 계산 모듈(240)로 레귤러 빈 블록의 저장 종료 위치 정보를 전달할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 디코더(220)로부터 수신되는 레귤러 빈 블록의 저장 종료 위치 정보 및 바이패스 빈 블록의 크기 정보를 이용하여 바이패스 빈 블록의 저장 종료 위치 정보(또는, 다음 레귤러 빈 블록의 저장 시작 위치 정보)를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 제1 디코더(220)로부터 수신된 제1 레귤러 빈 블록의 저장 종료 위치 정보 및 제1 바이패스 빈 블록의 크기 정보를 이용하여 제1 바이패스 빈 블록의 저장 종료 위치 정보(또는, 제2 레귤러 빈 블록의 저장 시작 위치 정보)를 계산할 수 있다. 일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 바이패스 빈 블록의 저장 종료 위치 정보를 제1 디코더(220)로 전달할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제2 처리 주기에 제1 바이패스 빈 블록의 저장 종료 위치 정보에 기초하여 제2 레귤러 코딩 블록의 디코딩 결과인 제2 레귤러 빈 블록을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제1 디코더(220)는 제1 바이패스 빈 블록의 저장 종료 위치를 시작 위치로 하여 제2 레귤러 빈 블록을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 바이패스 빈 블록의 크기 정보를 제1 디코더(220)로 전달할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 파라미터 계산 모듈(240)로부터 수신된 바이패스 빈 블록의 크기 정보를 이용하여 바이패스 빈 블록의 저장 종료 위치 정보(또는, 다음 레귤러 빈 블록의 저장 시작 위치 정보)를 계산할 수 있다. 예를 들어, 제1 디코더(220)는 제1 레귤러 빈 블록의 저장 종료 위치 정보 및 파라미터 계산 모듈(240)로부터 수신된 제1 바이패스 빈 블록 크기 정보를 이용하여 제1 바이패스 빈 블록의 저장 종료 위치 정보(또는, 제2 레귤러 빈 블록의 저장 시작 위치 정보)를 계산할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제2 처리 주기에 제1 바이패스 빈 블록의 저장 종료 위치 정보에 기초하여 제2 레귤러 코딩 블록의 디코딩 결과인 제2 레귤러 빈 블록을 제2 버퍼(150)에 저장할 수 있다. 예를 들어, 제1 디코더(220)는 제1 바이패스 빈 블록의 저장 종료 위치를 시작 위치로 하여 제2 바이패스 빈 블록을 저장할 수 있다.
일 실시 예에 따르면, 제2 버퍼(250)는 비트 스트림의 디코딩 결과인 빈 스트링을 저장할 수 있다. 일 실시 예에 따르면, 비트 스트림은 적어도 하나의 레귤러 빈을 포함하는 레귤러 빈 블록 및 적어도 하나의 바이패스 빈을 포함하는 바이패스 빈 블록을 포함할 수 있다. 일 실시 예에 따르면, 빈 스트링에 포함된 레귤러 빈 블록 및 바이패스 빈 블록은 비트 스트림에 포함된 레귤러 코딩 블록 및 바이패스 코딩 블록에 대응되는 순서로 배치될 수 있다. 예를 들어, 산술 디코더(200)로 제1 레귤러 코딩 블록, 제1 바이패스 코딩 블록, 제2 레귤러 코딩 블록, 제2 바이패스 코딩 블록 순서로 배치된 비트 스트림이 입력되면 제1 레귤러 빈 블록, 제1 바이패스 빈 블록, 제2 레귤러 빈 블록, 제2 바이패스 빈 블록 순서로 배치된 빈 스트링이 출력될 수 있다.
도 5는 본 발명의 다양한 실시 예에 따른 시간의 흐름에 따른 디코딩 과정을 나타내는 도면이다.
일 실시 예에 따르면, 제1 디코더(220)는 제1 처리 주기에 제1 레귤러 코딩 블록(r1)을 디코딩할 수 있다. 예를 들어, 제1 디코더(220)는 제1 레귤러 코딩 블록(r1)의 시작 컨텍스트 정보를 이용하여 제1 레귤러 코딩 블록(r1)을 디코딩할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제1 레귤러 코딩 블록(r1)의 디코딩 결과인 제1 레귤러 빈 블록(R1)을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 제1 디코더(220)는 제2 버퍼(250)의 제1 위치(P1)로부터 제1 레귤러 빈 블록(R1)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제1 처리 주기에 제1 바이패스 코딩 블록(b1)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 제1 바이패스 코딩 블록(b1)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(240)는 제1 바이패스 코딩 블록(b1)의 디코딩 결과인 제1 바이패스 빈 블록(B1)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)는, 제1 처리 주기에, 제1 레귤러 코딩 블록(r1)의 최종 컨텍스트 정보 및 제1 바이패스 코딩 블록(b1)의 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록(r2)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)는, 제1 처리 주기에, 제1 레귤러 빈 블록(R1)의 저장 종료 위치(P2) 및 제1 바이패스 빈 블록(B1)의 크기 정보를 이용하여 제2 레귤러 빈 블록(R2)의 저장 시작 위치인 제3 위치(P3)를 계산할 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 제2 처리 주기에 제2 레귤러 코딩 블록(r2)을 디코딩할 수 있다. 예를 들어, 제1 디코더(220)는 제2 레귤러 코딩 블록(r2)의 시작 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록(r2)을 디코딩할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제2 레귤러 코딩 블록(r2)의 디코딩 결과인 제2 레귤러 빈 블록(R2)을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 디코더(220)는 제2 버퍼(250)의 제3 위치(P3)로부터 제2 레귤러 빈 블록(R2)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제2 처리 주기에 제2 바이패스 코딩 블록(b2)의 파라미터를 계산할 수 있다. 제2 바이패스 코딩 블록(b2)은, 예를 들어, 부가 정보(a2)를 포함할 수 있다. 파라미터 계산 모듈(240)는 제2 바이패스 코딩 블록(b2)에 포함된 부가 정보(a2)를 이용하여 제2 바이패스 코딩 블록(b2)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 부가 정보(a2)를 이용하여 제2 바이패스 코딩 블록(b2)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(240)은 부가 정보(a2)를 이용하여 제2 바이패스 빈 블록(B2)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)은, 제2 처리 주기에, 제2 레귤러 코딩 블록(r2)의 최종 컨텍스트 정보 및 제2 바이패스 코딩 블록(b2)의 컨텍스트 정보를 이용하여 제3 레귤러 빈 블록(r3)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)는, 제2 처리 주기에, 제2 레귤러 빈 블록(R2)의 저장 종료 위치(P4) 및 제2 바이패스 빈 블록(B2)의 크기 정보를 이용하여 제3 레귤러 빈 블록(R3)의 저장 시작 위치인 제5 위치(P5)를 계산할 수 있다.
일 실시 예에 따르면, 제2 디코더(230)는 제2 처리 주기에 제1 바이패스 코딩 블록(b1)을 디코딩할 수 있다. 일 실시 예에 따르면, 제2 디코더(230)는 제1 바이패스 코딩 블록(b1)의 디코딩 결과인 제1 바이패스 빈 블록(B1)을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 제2 디코더(230)는 제1 레귤러 빈 블록(R1)의 저장 종료 위치인 제2 버퍼(250)의 제2 위치(P2)로부터 제1 바이패스 빈 블록(B1)을 저장할 수 있다.
일 실시 예에 따르면, 제1 디코더(220)는 제3 처리 주기에 제3 레귤러 코딩 블록(r3)을 디코딩할 수 있다. 예를 들어, 제1 디코더(220)는 제3 레귤러 코딩 블록(r3)의 시작 컨텍스트 정보를 이용하여 제3 레귤러 코딩 블록(r3)을 디코딩할 수 있다. 일 실시 예에 따르면, 제1 디코더(220)는 제3 레귤러 코딩 블록(r3)의 디코딩 결과인 제3 레귤러 빈 블록(R3)을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 디코더(220)는 제2 버퍼(250)의 제5 위치(P5)로부터 제3 레귤러 빈 블록(R3)을 저장할 수 있다.
일 실시 예에 따르면, 파라미터 계산 모듈(240)는 제3 처리 주기에 제3 바이패스 코딩 블록(b3)의 파라미터를 계산할 수 있다. 예를 들어, 파라미터 계산 모듈(240)는 제3 바이패스 코딩 블록(b3)의 컨텍스트 정보를 계산할 수 있다. 다른 예를 들어, 파라미터 계산 모듈(240)는 제3 바이패스 코딩 블록(b3)의 디코딩 결과인 제3 바이패스 빈 블록(B3)의 크기를 계산할 수 있다.
일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)는 제3 처리 주기에 제3 레귤러 코딩 블록(r3)의 최종 컨텍스트 정보 및 제3 바이패스 코딩 블록(b3)의 컨텍스트 정보를 이용하여 제4 레귤러 코딩 블록(미도시)의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 제1 디코더(220) 또는 파라미터 계산 모듈(240)는 제3 처리 주기에 제3 레귤러 빈 블록(R3)의 저장 종료 위치(미도시) 및 제3 바이패스 빈 블록(B3)의 크기 정보를 이용하여 제4 레귤러 빈 블록(미도시)의 저장 시작 위치(미도시)를 계산할 수 있다.
일 실시 예에 따르면, 제2 디코더(230)는 제3 처리 주기에 제2 바이패스 코딩 블록(b2)을 디코딩할 수 있다. 제2 바이패스 코딩 블록(b2)은, 예를 들어, 부가 정보(a2)를 포함할 수 있다. 일 실시 예에 따르면, 제2 디코더(230)는 부가 정보(a2)를 제외한 제2 바이패스 코딩 블록(b2)을 디코딩할 수 있다. 일 실시 예에 따르면, 제2 디코더(230)는 제2 바이패스 코딩 블록(b2)의 디코딩 결과인 제2 바이패스 빈 블록(B2)을 제2 버퍼(250)에 저장할 수 있다. 예를 들어, 제2 디코더(230)는 제2 레귤러 빈 블록(R2)의 저장 종료 위치인 제2 버퍼(250)의 제4 위치(P4)로부터 제2 바이패스 빈 블록(B2)을 저장할 수 있다.
본 발명의 다양한 실시 예에 따르면, 바이패스 코딩 블록에 대한 디코딩을 수행하기 전에 바이패스 코딩 블록의 파라미터를 계산함으로써 레귤러 코딩 블록 및 바이패스 코딩 블록의 디코딩을 병렬적으로 동시에 처리할 수 있게 된다. 이에 따라, 빈의 수가 많은 블록도 지정된 처리 주기 내에 처리할 수 있으며, 엔트로피 코딩 단계에서 발생하는 병목 현상을 줄일 수 있다.
도 6은 본 발명의 다양한 실시 예에 따른 산술 인코더의 인코딩 방법을 나타내는 흐름도이다.
도 6에 도시된 흐름도는 상술한 산술 인코더(100)에서 처리되는 동작들로 구성될 수 있다. 따라서, 이하에서 생략된 내용이라 하더라도 도 1 내지 도 3을 참조하여 산술 인코더(100)에 관하여 기술된 내용은 도 6에 도시된 흐름도에도 적용될 수 있다.
일 실시 예에 따르면, 610 동작에서, 산술 인코더(100)는, 제1 처리 주기에 적어도 하나의 레귤러 빈(regular bin)을 포함하는 제1 레귤러 빈 블록을 인코딩할 수 있다. 예를 들어, 산술 인코더(100)는 제1 레귤러 빈 블록에 대해 컨텍스트 정보를 이용하여 레귤러 빈에 포함된 심볼들(예: ‘0’ 및 ‘1)의 발생 확률에 따라 인코딩하는 레귤러 인코딩을 수행할 수 있다. 일 실시 예에 따르면, 산술 인코더(100)는 제1 레귤러 빈 블록의 인코딩 과정에서 컨텍스트 정보를 지속 업데이트할 수 있다.
일 실시 예에 따르면, 산술 인코더(100)는 제1 레귤러 빈 블록을 인코딩 한 후 제1 레귤러 빈 블록의 인코딩 결과인 제1 레귤러 코딩 블록을 버퍼(예: 제2 버퍼(150))에 저장할 수 있다.
일 실시 예에 따르면, 620 동작에서, 산술 인코더(100)는 제1 처리 주기에 적어도 하나의 레귤러 빈을 포함하는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산할 수 있다. 예를 들어, 산술 인코더(100)는 제1 처리 주기에 제1 바이패스 빈 블록의 컨텍스트 정보를 계산할 수 있다. 산술 인코더(100)는 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산할 수 있다.
일 실시 예에 따르면, 산술 인코더(100)는 제1 처리 주기에 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록의 크기를 계산할 수 있다. 일 실시 예에 따르면, 산술 인코더(100)는 제1 레귤러 코딩 블록의 저장 종료 위치 정보 및 제1 바이패스 코딩 블록의 크기 정보를 이용하여 제1 바이패스 코딩 블록의 저장 종료 위치 정보(또는, 제2 레귤러 코딩 블록의 저장 시작 위치 정보)를 계산할 수 있다.
일 실시 예에 따르면, 630 동작에서, 산술 인코더(100)는 제2 처리 주기에 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 제2 레귤러 빈 블록을 인코딩할 수 있다.
일 실시 예에 따르면, 산술 인코더(100)는 제2 레귤러 빈 블록을 인코딩 한 후 제2 레귤러 빈 블록의 인코딩 결과인 제2 레귤러 코딩 블록을 버퍼(예: 제2 버퍼(150))에 저장할 수 있다. 예를 들어, 산술 인코더(100)는 제1 바이패스 코딩 블록의 저장 종료 위치를 시작 위치로 하여 제2 레귤러 코딩 블록을 저장할 수 있다.
일 실시 예에 따르면, 640 동작에서, 산술 인코더(100)는 제2 처리 주기에 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 빈 블록을 인코딩할 수 있다. 예를 들어, 산술 인코더(100)는 심볼들(예: ‘0’ 및 ‘1)의 발생 확률이 동일한 바이패스 빈에 대해 수행되는 바이패스 인코딩을 수행할 수 있다. 제1 바이패스 빈 블록은, 예를 들어, 제1 레귤러 빈 블록과 제2 레귤러 빈 블록 사이에 배치될 수 있다.
일 실시 예에 따르면, 산술 인코더(100)는 제1 바이패스 빈 블록을 인코딩 한 후 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록을 버퍼(예: 제2 버퍼(150))에 저장할 수 있다. 예를 들어, 산술 인코더(100)는 제1 레귤러 코딩 블록의 저장 종료 위치를 시작 위치로 하여 제1 바이패스 코딩 블록을 저장할 수 있다.
일 실시 예에 따르면, 630 동작 및 640 동작은 제2 처리 주기 내에서 적어도 일부 시간 동안 동시에 동작할 수 있다. 즉, 산술 인코더(100)는 제2 처리 주기 동안 레귤러 빈 블록 및 바이패스 빈 블록을 병렬적으로 인코딩할 수 있다.
일 실시 예에 따르면, 산술 인코더(100)는 제1 바이패스 빈 블록을 인코딩하기 전에 제1 바이패스 빈 블록에 디코더(예: 도 4의 산술 디코더(200))의 파라미터 계산을 위한 부가 정보를 삽입할 수 있다. 부가 정보는, 예를 들어, 제1 바이패스 코딩 블록의 크기 정보 및 제1 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보를 포함할 수 있다. 일 실시 예에 따르면, 산술 인코더(100)는 제1 레귤러 빈 블록에 포함된 레귤러 빈의 개수 및 제1 바이패스 빈 블록에 포함된 바이패스 빈의 개수에 기초하여 부가 정보의 삽입 여부를 결정할 수 있다.
도 7은 본 발명의 다양한 실시 예에 따른 산술 디코더의 디코딩 방법을 나타내는 흐름도이다.
도 7에 도시된 흐름도는 상술한 산술 디코더(100)에서 처리되는 동작들로 구성될 수 있다. 따라서, 이하에서 생략된 내용이라 하더라도 도 4 내지 도 5를 참조하여 산술 디코더(200)에 관하여 기술된 내용은 도 7에 도시된 흐름도에도 적용될 수 있다.
일 실시 예에 따르면, 710 동작에서, 산술 디코더(200)는, 제1 처리 주기에 적어도 하나의 인코딩된 레귤러 빈(regular bin)을 포함하는 제1 레귤러 코딩 블록을 디코딩할 수 있다. 예를 들어, 산술 디코더(200)는 제1 레귤러 코딩 블록에 대해 컨텍스트 정보를 이용하여, 인코딩된 레귤러 빈에 포함된 심볼들(예: ‘0’ 및 ‘1)의 발생 확률에 따라 디코딩하는 레귤러 디코딩을 수행할 수 있다. 일 실시 예에 따르면, 산술 디코더(200)는 제1 레귤러 코딩 블록의 디코딩 과정에서 컨텍스트 정보를 지속 업데이트할 수 있다.
일 실시 예에 따르면, 산술 디코더(200)는 제1 레귤러 코딩 블록을 디코딩 한 후 제1 레귤러 코딩 블록의 디코딩 결과인 제1 레귤러 빈 블록을 버퍼(예: 제2 버퍼(250))에 저장할 수 있다.
일 실시 예에 따르면, 720 동작에서, 산술 디코더(200)는 제1 처리 주기에 적어도 하나의 인코딩된 레귤러 빈을 포함하는 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산할 수 있다. 예를 들어, 산술 디코더(200)는 제1 처리 주기에 제1 바이패스 코딩 블록의 컨텍스트 정보를 계산할 수 있다. 산술 디코더(200)는 제1 레귤러 코딩 블록의 최종 컨텍스트 정보 및 제1 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산할 수 있다. 일 실시 예에 따르면, 산술 디코더(200)는 제1 바이패스 코딩 블록에 부가 정보가 삽입되어 있으면 부가 정보를 이용하여 제1 바이패스 코딩 블록의 컨텍스트 정보를 계산할 수 있다.
일 실시 예에 따르면, 산술 디코더(200)는 제1 처리 주기에 제1 바이패스 코딩 블록의 디코딩 결과인 제1 바이패스 빈 블록의 크기를 계산할 수 있다. 일 실시 예에 따르면, 산술 디코더(200)는 제1 레귤러 빈 블록의 저장 종료 위치 정보 및 제1 바이패스 빈 블록의 크기 정보를 이용하여 제1 바이패스 빈 블록의 저장 종료 위치 정보(또는, 제2 레귤러 빈 블록의 저장 시작 위치 정보)를 계산할 수 있다. 일 실시 예에 따르면, 산술 디코더(200)는 제1 바이패스 코딩 블록에 부가 정보가 삽입되어 있으면 부가 정보를 이용하여 바이패스 빈 블록의 크기를 계산할 수 있다.
일 실시 예에 따르면, 730 동작에서, 산술 디코더(200)는 제2 처리 주기에 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 이용하여 제2 레귤러 코딩 블록을 인코딩할 수 있다.
일 실시 예에 따르면, 산술 디코더(200)는 제2 레귤러 코딩 블록을 디코딩 한 후 제2 레귤러 코딩 블록의 디코딩 결과인 제2 레귤러 빈 블록을 버퍼(예: 제2 버퍼(250))에 저장할 수 있다. 예를 들어, 산술 디코더(200)는 제1 바이패스 빈 블록의 저장 종료 위치를 시작 위치로 하여 제2 레귤러 빈 블록을 저장할 수 있다.
일 실시 예에 따르면, 740 동작에서, 산술 디코더(200)는 제2 처리 주기에 적어도 하나의 인코딩된 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 코딩 블록을 인코딩할 수 있다. 예를 들어, 산술 디코더(200)는 심볼들(예: ‘0’ 및 ‘1)의 발생 확률이 동일한 인코딩된 바이패스 빈에 대해 수행되는 바이패스 디코딩을 수행할 수 있다. 제1 바이패스 코딩 블록은, 예를 들어, 제1 레귤러 코딩 블록과 제2 레귤러 코딩 블록 사이에 배치될 수 있다.
일 실시 예에 따르면, 산술 디코더(200)는 제1 바이패스 코딩 블록을 디코딩 한 후 제1 바이패스 코딩 블록의 디코딩 결과인 제1 바이패스 빈 블록을 버퍼(예: 제2 버퍼(250))에 저장할 수 있다. 예를 들어, 산술 디코더(200)는 제1 레귤러 빈 블록의 저장 종료 위치를 시작 위치로 하여 제1 바이패스 빈 블록을 저장할 수 있다.
일 실시 예에 따르면, 730 동작 및 740 동작은 제2 처리 주기 내에서 적어도 일부 시간 동안 동시에 동작할 수 있다. 즉, 산술 디코더(200)는 제2 처리 주기 동안 레귤러 코딩 블록 및 바이패스 코딩 블록을 병렬적으로 디코딩할 수 있다.
도 8은 본 발명의 다양한 실시 예에 따른 산술 디코더의 디코딩 성능 개선 효과를 나타내는 도면이다.
도 8의 <801> 이미지는 본 발명을 적용하지 않은 산술 디코더의 디코딩 성능을 나타내는 그래프이고, <802> 이미지는 본 발명의 일 실시 예에 따른 산술 디코더의 디코딩 성능을 나타내는 그래프이다. 도 8의 <801> 이미지 및 <802> 이미지의 x축은 라지 블록의 개수를 나타내며, y축은 각각의 블록을 처리하는데 소요된 클럭수를 나타낸다.
도 8의 <801> 이미지 및 <802> 이미지를 비교하면 하나의 블록을 처리하는데 소요되는 클럭수의 평균이 217 클럭에서 201 클럭으로 약 7.3%의 성능 개선 효과를 가질 수 있다. 처리 클럭수가 가장 높은 블럭을 처리하는데 소요되는 클럭수는 405 클럭에서 291 클럭으로 약 28%의 성능 개선 효과를 가질 수 있다.
본 문서에서 사용된 용어 "모듈" 은 하드웨어, 소프트웨어 또는 펌웨어로 구성된 유닛을 포함하며, 예를 들면, 로직, 논리 블록, 부품, 또는 회로 등의 용어와 상호 호환적으로 사용될 수 있다. "모듈"은, 일체로 구성된 부품 또는 하나 또는 그 이상의 기능을 수행하는 최소 단위 또는 그 일부가 될 수 있다. "모듈"은 기계적으로 또는 전자적으로 구현될 수 있으며, 예를 들면, 어떤 동작들을 수행하는, 알려졌거나 앞으로 개발될, ASIC(application-specific integrated circuit) 칩, FPGAs(field-programmable gate arrays), 또는 프로그램 가능 논리 장치를 포함할 수 있다.
다양한 실시예에 따른 장치(예: 모듈들 또는 그 기능들) 또는 방법(예: 동작들)의 적어도 일부는 프로그램 모듈의 형태로 컴퓨터로 판독 가능한 저장 매체에 저장된 명령어로 구현될 수 있다. 상기 명령어가 프로세서에 의해 실행될 경우, 프로세서가 상기 명령어에 해당하는 기능을 수행할 수 있다. 컴퓨터로 판독 가능한 기록 매체는, 하드디스크, 플로피디스크, 마그네틱 매체(예: 자기테이프), 광기록 매체(예: CD-ROM, DVD, 자기-광 매체 (예: 플롭티컬 디스크), 내장 메모리 등을 포함할 수 있다. 명령어는 컴파일러에 의해 만들어지는 코드 또는 인터프리터에 의해 실행될 수 있는 코드를 포함할 수 있다. 다양한 실시예에 따른 모듈 또는 프로그램 모듈은 전술한 구성요소들 중 적어도 하나 이상을 포함하거나, 일부가 생략되거나, 또는 다른 구성요소를 더 포함할 수 있다.
다양한 실시예에 따른, 모듈, 프로그램 모듈 또는 다른 구성요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱하게 실행되거나, 적어도 일부 동작이 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다. 그리고 본 문서에 개시된 실시예는 개시된, 기술 내용의 설명 및 이해를 위해 제시된 것이며, 본 문서에서 기재된 기술의 범위를 한정하는 것은 아니다. 따라서, 본 문서의 범위는, 본 문서의 기술적 사상에 근거한 모든 변경 또는 다양한 다른 실시예를 포함하는 것으로 해석되어야 한다.

Claims (20)

  1. 프로세서에 있어서,
    적어도 하나의 레귤러 빈(regular bin)을 포함하는 레귤러 빈 블록을 인코딩하는 제1 인코더;
    적어도 하나의 바이패스 빈(bypass bin)을 포함하는 바이패스 빈 블록을 인코딩하는 제2 인코더; 및
    상기 레귤러 빈 블록을 인코딩하기 위한 컨텍스트 정보를 계산하고, 상기 컨텍스트 정보를 상기 제1 인코더로 전달하는 파라미터 계산 모듈;을 포함하고,
    상기 제1 인코더 및 상기 제2 인코더는 상기 레귤러 빈 블록 및 상기 바이패스 빈 블록 각각을 적어도 일부 시간 동안 동시에 병렬적으로 처리하고,
    상기 제1 인코더는,
    제1 처리 주기에 제1 레귤러 빈 블록을 인코딩하고, 제2 처리 주기에 제2 레귤러 빈 블록을 인코딩하고,
    상기 제2 인코더는,
    상기 제2 처리 주기에 상기 제1 레귤러 빈 블록과 상기 제2 레귤러 빈 블록 사이에 배치된 제1 바이패스 빈 블록을 인코딩하는 프로세서.
  2. 삭제
  3. 제1항에 있어서,
    상기 제1 인코더는,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보를 계산하고, 상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보를 상기 파라미터 계산 모듈로 전달하고,
    상기 파라미터 계산 모듈은,
    상기 제1 처리 주기에 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 계산하고, 상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하고, 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 상기 제1 인코더로 전달하는 프로세서.
  4. 제3항에 있어서,
    상기 제1 인코더는,
    상기 제2 처리 주기에 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록을 인코딩하는 프로세서.
  5. 제1항에 있어서,
    버퍼;를 더 포함하고,
    상기 제1 인코더는,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 인코딩 결과인 제1 레귤러 코딩 블록을 상기 버퍼에 저장하고, 상기 제2 인코더로 상기 제1 레귤러 코딩 블록의 저장 종료 위치 정보를 전달하고,
    상기 제2 인코더는,
    상기 제2 처리 주기에 상기 저장 종료 위치 정보에 기초하여 상기 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록을 상기 버퍼에 저장하는 프로세서.
  6. 제1항에 있어서,
    버퍼;를 더 포함하고,
    상기 파라미터 계산 모듈은,
    상기 제1 처리 주기에 상기 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록의 저장 종료 위치 정보를 계산하고, 상기 제1 인코더로 상기 저장 종료 위치 정보를 전달하고,
    상기 제1 인코더는,
    상기 제2 처리 주기에 상기 저장 종료 위치 정보에 기초하여 상기 제2 레귤러 빈 블록의 인코딩 결과인 제2 레귤러 코딩 블록을 상기 버퍼에 저장하는 프로세서.
  7. 제1항에 있어서,
    상기 파라미터 계산 모듈은,
    상기 제1 바이패스 빈 블록의 코딩 결과인 제1 바이패스 코딩 블록의 크기 정보 및 상기 제1 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보를 상기 제1 바이패스 코딩 블록에 삽입하도록 설정된 프로세서.
  8. 프로세서의 데이터 처리 방법에 있어서,
    제1 처리 주기에 적어도 하나의 레귤러 빈(regular bin)을 포함하는 제1 레귤러 빈 블록을 인코딩하는 동작;
    상기 제1 처리 주기에 적어도 하나의 레귤러 빈을 포함하는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작;
    제2 처리 주기에 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록을 인코딩하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 빈 블록과 상기 제2 레귤러 빈 블록 사이에 배치되고, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 빈 블록을 인코딩하는 동작;을 포함하는 방법.
  9. 제8항에 있어서,
    상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작은,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 계산하는 동작; 및
    상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작;을 포함하는 방법.
  10. ◈청구항 10은(는) 설정등록료 납부시 포기되었습니다.◈
    제8항에 있어서,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 인코딩 결과인 제1 레귤러 코딩 블록을 버퍼에 저장하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 코딩 블록의 저장 종료 위치 정보에 기초하여 상기 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록을 상기 버퍼에 저장하는 동작;을 더 포함하는 방법.
  11. ◈청구항 11은(는) 설정등록료 납부시 포기되었습니다.◈
    제8항에 있어서,
    상기 제1 처리 주기에 상기 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록의 저장 종료 위치 정보를 계산하는 동작; 및
    상기 제2 처리 주기에 상기 저장 종료 위치 정보에 기초하여 상기 제2 레귤러 빈 블록의 인코딩 결과인 제2 레귤러 코딩 블록을 버퍼에 저장하는 동작;을 더 포함하는 방법.
  12. ◈청구항 12은(는) 설정등록료 납부시 포기되었습니다.◈
    제8항에 있어서,
    상기 제1 바이패스 빈 블록의 코딩 결과인 제1 바이패스 코딩 블록의 크기 정보 및 상기 제1 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보를 상기 제1 바이패스 코딩 블록에 삽입하는 동작;을 더 포함하는 방법.
  13. 제1 처리 주기에 적어도 하나의 인코딩된 레귤러 빈(regular bin)을 포함하는 제1 레귤러 코딩 블록을 디코딩하는 동작;
    상기 제1 처리 주기에 적어도 하나의 인코딩된 레귤러 빈을 포함하는 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산하는 동작;
    제2 처리 주기에 상기 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 이용하여 상기 제2 레귤러 코딩 블록을 디코딩하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 코딩 블록과 상기 제2 레귤러 코딩 블록 사이에 배치되고, 적어도 하나의 인코딩된 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 코딩 블록을 디코딩하는 동작;을 더 포함하는 방법.
  14. 제13항에 있어서,
    상기 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산하는 동작은,
    상기 제1 처리 주기에 상기 제1 레귤러 코딩 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 코딩 블록의 컨텍스트 정보를 계산하는 동작; 및
    상기 제1 레귤러 코딩 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 코딩 블록의 컨텍스트 정보를 이용하여 상기 제2 레귤러 코딩 블록의 시작 컨텍스트 정보를 계산하는 동작;을 포함하는 방법.
  15. ◈청구항 15은(는) 설정등록료 납부시 포기되었습니다.◈
    제14항에 있어서,
    상기 제1 바이패스 코딩 블록의 컨텍스트 정보를 계산하는 동작은,
    상기 제1 바이패스 코딩 블록에 상기 제1 바이패스 코딩 블록의 크기 정보 및 상기 제1 바이패스 코딩 블록에 포함된 적어도 하나의 심볼의 개수 정보가 포함되어 있으면, 상기 크기 정보 및 상기 적어도 하나의 심볼의 개수 정보를 이용하여 상기 제1 바이패스 코딩 블록의 최종 컨텍스트 정보를 계산하는 동작;을 더 포함하는 방법.
  16. ◈청구항 16은(는) 설정등록료 납부시 포기되었습니다.◈
    제13항에 있어서,
    상기 제1 처리 주기에 상기 제1 레귤러 코딩 블록의 디코딩 결과인 제1 레귤러 빈 블록을 버퍼에 저장하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 빈 블록의 저장 종료 위치 정보에 기초하여 상기 제1 바이패스 코딩 블록의 디코딩 결과인 제1 바이패스 빈 블록을 상기 버퍼에 저장하는 동작;을 더 포함하는 방법.
  17. ◈청구항 17은(는) 설정등록료 납부시 포기되었습니다.◈
    제13항에 있어서,
    상기 제1 처리 주기에 상기 제1 바이패스 코딩 블록의 디코딩 결과인 제1 바이패스 빈 블록의 저장 종료 위치 정보를 계산하는 동작; 및
    상기 제2 처리 주기에 상기 저장 종료 위치 정보에 기초하여 상기 제2 레귤러 코딩 블록의 디코딩 결과인 제2 레귤러 빈 블록을 버퍼에 저장하는 동작;을 더 포함하는 방법.
  18. ◈청구항 18은(는) 설정등록료 납부시 포기되었습니다.◈
    제1 처리 주기에 적어도 하나의 레귤러 빈(regular bin)을 포함하는 제1 레귤러 빈 블록을 인코딩하는 동작;
    상기 제1 처리 주기에 적어도 하나의 레귤러 빈을 포함하는 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작;
    제2 처리 주기에 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록을 인코딩하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 빈 블록과 상기 제2 레귤러 빈 블록 사이에 배치되고, 적어도 하나의 바이패스 빈(bypass bin)을 포함하는 제1 바이패스 빈 블록을 인코딩하는 동작;을 포함하는 방법을 수행하는 프로그램이 기록된 컴퓨터 판독 가능 기록매체.
  19. ◈청구항 19은(는) 설정등록료 납부시 포기되었습니다.◈
    제18항에 있어서,
    상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작은,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 계산하는 동작; 및
    상기 제1 레귤러 빈 블록의 최종 컨텍스트 정보 및 상기 제1 바이패스 빈 블록의 컨텍스트 정보를 이용하여 상기 제2 레귤러 빈 블록의 시작 컨텍스트 정보를 계산하는 동작;을 포함하는 기록매체.
  20. ◈청구항 20은(는) 설정등록료 납부시 포기되었습니다.◈
    제18항에 있어서,
    상기 방법은,
    상기 제1 처리 주기에 상기 제1 레귤러 빈 블록의 인코딩 결과인 제1 레귤러 코딩 블록을 버퍼에 저장하는 동작; 및
    상기 제2 처리 주기에 상기 제1 레귤러 코딩 블록의 저장 종료 위치 정보에 기초하여 상기 제1 바이패스 빈 블록의 인코딩 결과인 제1 바이패스 코딩 블록을 상기 버퍼에 저장하는 동작;을 더 포함하는 기록매체.
KR1020160117361A 2016-09-12 2016-09-12 프로세서 및 프로세서의 데이터 처리 방법 KR102580669B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020160117361A KR102580669B1 (ko) 2016-09-12 2016-09-12 프로세서 및 프로세서의 데이터 처리 방법
US15/666,817 US9973209B2 (en) 2016-09-12 2017-08-02 Processor and data processing method thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160117361A KR102580669B1 (ko) 2016-09-12 2016-09-12 프로세서 및 프로세서의 데이터 처리 방법

Publications (2)

Publication Number Publication Date
KR20180029448A KR20180029448A (ko) 2018-03-21
KR102580669B1 true KR102580669B1 (ko) 2023-09-21

Family

ID=61560942

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160117361A KR102580669B1 (ko) 2016-09-12 2016-09-12 프로세서 및 프로세서의 데이터 처리 방법

Country Status (2)

Country Link
US (1) US9973209B2 (ko)
KR (1) KR102580669B1 (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130272373A1 (en) * 2011-11-15 2013-10-17 Intel Corporation Video encoder with 2-bin per clock cabac encoding

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8604951B2 (en) 2010-10-05 2013-12-10 Massachusetts Institute Of Technology System and method for optimizing context-adaptive binary arithmetic coding

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130272373A1 (en) * 2011-11-15 2013-10-17 Intel Corporation Video encoder with 2-bin per clock cabac encoding

Also Published As

Publication number Publication date
US9973209B2 (en) 2018-05-15
KR20180029448A (ko) 2018-03-21
US20180076827A1 (en) 2018-03-15

Similar Documents

Publication Publication Date Title
JP6317418B2 (ja) 符号化または復号化のための方法および装置
JP5937206B2 (ja) ビデオデータをコンテキスト適応型コーディングすること
CN102783035B (zh) 并行熵编码方法和设备
US7443318B2 (en) High speed context memory implementation for H.264
US7411529B2 (en) Method of decoding bin values using pipeline architecture and decoding device therefor
TWI360956B (en) Cabac decoding apparatus and decoding method there
CN102939719B (zh) 用于在二进制熵编码和解码中减少源的方法和设备
US7501964B2 (en) Entropy coding for digital codecs
KR100717052B1 (ko) Cabac 복호기에서 이진 산술 복호화와 이진 매칭을병렬 처리하는 원소 구문의 복호화 방법 및 이를 위한복호화 장치
KR100644713B1 (ko) 컨텍스트 기반 적응적 이진 산술 코딩 복호기에서 원소구문을 복호화하는 방법 및 이를 위한 복호화 장치
US8400336B2 (en) Methods and devices for reordered parallel entropy coding and decoding
CN111246206B (zh) 一种基于自编码器的光流信息压缩方法及装置
US10070127B2 (en) Method and apparatus for arithmetic coding and termination
US11431978B2 (en) Video decoding method and video decoding device for improving decoding efficiency
KR102580669B1 (ko) 프로세서 및 프로세서의 데이터 처리 방법
CN106851278B (zh) 图像量化参数解码方法及解码器
US8600766B2 (en) Method and apparatus for encoding and decoding data with altered bit sequence
JP2008199100A (ja) 可変長符号復号装置
US20120183234A1 (en) Methods for parallelizing fixed-length bitstream codecs
US8421655B2 (en) Apparatus for parallel entropy encoding and decoding
CN102148971A (zh) 一种高性能低功耗cavlc解码器设计方法
CN102572437A (zh) 一种快速解码CAVLC run_before码字的硬件实现方法

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right