KR20170013222A - 전용 산술 인코딩 명령 - Google Patents

전용 산술 인코딩 명령 Download PDF

Info

Publication number
KR20170013222A
KR20170013222A KR1020167032009A KR20167032009A KR20170013222A KR 20170013222 A KR20170013222 A KR 20170013222A KR 1020167032009 A KR1020167032009 A KR 1020167032009A KR 20167032009 A KR20167032009 A KR 20167032009A KR 20170013222 A KR20170013222 A KR 20170013222A
Authority
KR
South Korea
Prior art keywords
value
cabac
offset
range
input
Prior art date
Application number
KR1020167032009A
Other languages
English (en)
Other versions
KR102296153B1 (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 KR20170013222A publication Critical patent/KR20170013222A/ko
Application granted granted Critical
Publication of KR102296153B1 publication Critical patent/KR102296153B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • 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
    • H03M7/4012Binary arithmetic codes
    • H03M7/4018Context adapative binary arithmetic codes [CABAC]
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

방법은 프로세서에서, 전용 산술 인코딩 명령을 실행하는 단계를 포함한다. 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하며, 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성한다. 방법은 또한, 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태를 저장하는 단계, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하는 단계 및 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬하는 단계를 포함한다.

Description

전용 산술 인코딩 명령{DEDICATED ARITHMETIC ENCODING INSTRUCTION}
관련 출원들에 대한 상호-참조
[0001] 본 출원은 2014년 5월 27일자로 출원된 공동 소유의 미국 정규 특허 출원 번호 제14/288,018호에 대한 우선권을 주장하며, 상기 출원의 내용들은 그 전체가 인용에 의해 여기에 명백하게 포함된다.
[0002] 본 개시물은 일반적으로 마이크로프로세서 명령들에 관한 것이다.
[0003] 기술의 진보들은 더 소형이고 더 강력한 컴퓨팅 디바이스들을 창출해왔다. 예컨대, 소형이고, 경량이며, 사용자들이 휴대하기 쉬운 휴대용 무선 전화들, PDA(personal digital assistant)들, 및 페이징 디바이스들과 같은 무선 컴퓨팅 디바이스들을 포함하는 다양한 휴대용 개인 컴퓨팅 디바이스들이 현재 존재한다. 더 구체적으로, 셀룰러 전화들 및 IP(Internet protocol) 전화들과 같은 휴대용 무선 전화들은 무선 네트워크들을 통해 음성 및 데이터 패킷들을 통신할 수 있다. 추가로, 많은 이러한 무선 전화들은 그에 포함되는 다른 타입들의 디바이스들을 포함한다. 예컨대, 무선 전화는 또한, 디지털 스틸 카메라, 디지털 비디오 카메라, 디지털 리코더 및 오디오 파일 플레이어를 포함할 수 있다. 또한, 이러한 무선 전화들은 인터넷에 액세스하는데 사용될 수 있는, 웹 브라우저 애플리케이션과 같은 소프트웨어 애플리케이션들을 포함하는 실행가능한 명령들을 프로세싱할 수 있다. 이로써, 이 무선 전화들은 현저한 컴퓨팅 능력들을 포함할 수 있다.
[0004] 효과적 데이터 전달을 달성하기 위하여, 비디오 파일을 표현하는 비디오 비트스트림은 무선 전화들과 같은 컴퓨팅 디바이스들로의 송신 이전 인코딩될 수 있다. CABAC(Context-based adaptive binary arithmetic coding)는 비디오 파일을 직렬로 인코딩하는데 사용될 수 있다. 범용 명령들은 빈들(예컨대, 비트들)을 인코딩하기 위하여 CABAC 인코딩 동안 사용될 수 있다. 그러나, 범용 명령들은 비교적 큰 프로세싱 시간들에 기인하여 비효율적일 수 있다.
[0005] 비디오 스트림들을 인코딩하기 위한 장치들 및 방법들이 개시된다. CABAC(context adaptive binary arithmetic coding) 인코딩 방식을 사용하여 비트(예컨대, "빈")를 인코딩하는 것은 "전류" 코드 인터벌의 "레인지" 및 "오프셋"을 회귀적으로(recursively) 업데이트하는 것을 포함한다. 레인지는 제 1 서브인터벌(예컨대, LPS(least probable symbol)) 및 제 2 서브인터벌(예컨대, MPS(most probable symbol))을 포함할 수 있다. 빈이 MPS(예컨대, 로직 "1")로서 인코딩되면, 레인지는 MPS의 레인지(예컨대, rMPS)와 동일할 수 있고, "로우"로 표시될 수 있는 오프셋은 일정하게(예컨대, lownew = low) 유지될 수 있다. 대안적으로, 빈이 LPS(예컨대, 로직 "0")로서 인코딩되면, 레인지는 LPS의 레인지(예컨대, rLPS)와 동일할 수 있고, 오프셋은 MPS의 레인지 및 오프셋의 합(예컨대, lownew = low + rMPS)과 동일할 수 있다. 오프셋은 인코딩된 비트스트림이다.
[0006] 설명되는 기법들에 따라, CABAC를 사용하여 비디오 스트림을 인코딩하기 위한 전용 산술 인코딩 명령, 이를테면, 전용 CABAC 명령은 프로세서에 의해 실행가능하다. 프로세서는 범용 명령들을 실행하도록 그리고 전용 산술 인코딩 명령을 실행하도록 구성될 수 있다. 예컨대, 전용 산술 인코딩 명령은 입력으로서 제 1 레인지, 제 1 오프셋 및 제 1 상태를 수용한다. 프로세서는 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태를 저장하고, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하고, 그리고 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬할 수 있다.
[0007] 예컨대, 전용 산술 인코딩 명령의 실행 동안, 제 1 레인지(예컨대, 9 비트들)는 제 1 레지스터(예컨대, 32-비트 레지스터) 내에 저장될 수 있고, 제 1 오프셋(예컨대, 10 비트들)은 제 2 레지스터(예컨대, 32-비트 레지스터) 내에 저장될 수 있다. 제 1 레지스터는 리딩 제로들(leading zeros), 제 1 레인지(예컨대, 9 비트들) 및 트레일링 제로들(trailing zeros)을 포함할 수 있다. 비트 포지션(예컨대, "bitpos")은 제 1 레지스터에서 리딩 제로들의 수를 표시할 수 있으며, CLZ(count leading zero) 명령을 사용하여 획득될 수 있다. 따라서, 특정 예에서, 트레일링 제로들의 수는 (32-9-bitpos) = (23-bitpos)이다. 비트(들)는 제 1 레지스터로부터 추출되고, 룩-업 테이블에서 LPS의 레인지의 값을 발견하도록 인덱스로서 사용될 수 있다. LPS의 레인지의 값은 제 1 레지스터에서 제 1 레인지(예컨대, 9 비트들)를 가지는 LPS의 레인지의 값을 정렬하기 위하여 트레일링 제로들의 수만큼 좌측으로-시프팅될 수 있다. 각각의 인코딩 반복 이후, 제 1 레지스터에서의 빈들은, 다음의 반복에서 사용되는 제 1 레인지(예컨대, 9 비트들)의 MSB(most significant bit)가 1과 동일하도록 재정규화될 수 있다.
[0008] 재정규화 동안, 제 2 레지스터의 특정 바이트들이 비트스트림에 제공(예컨대, 출력)될 수 있다. 예컨대, 레인지의 MSB가 1(오프셋의 증가에 대응함) 미만인 경우, 제 2 레지스터의 제 1 및 제 2 바이트들이 비트스트림에 제공될 수 있고, 제 2 레지스터의 제 3 바이트는 제 1 바이트 포지션으로 좌측으로-시프팅될 수 있고, 제 2 레지스터의 제 4 바이트는 제 2 레지스터(예컨대, 오프셋) 및 제 1 레지스터(예컨대, 레인지)를 재정규화하도록 클리어링될 수 있다.
[0009] 빈을 인코딩하기 위하여 전용 산술 인코딩 명령(예컨대, 단일 명령)을 사용하는 것은 다수의 범용 명령들을 사용하는 것에 비해 인코딩 속도를 증가시킬 수 있다. 예컨대, 전용 산술 인코딩 명령의 사용은, (범용 명령들을 사용하는) 다수의 프로세서 실행 사이클들(즉, > 2개의 사이클들)로부터 2개의 프로세서 실행 사이크들로, 인코딩된 비디오 스트림 비트를 생성하기 위한 시간을 감소시킨다.
[0010] 특정 양태들에서, 장치는 메모리 및 메모리에 커플링된 프로세서를 포함한다. 프로세서는 전용 산술 인코딩 명령을 실행하도록 구성된다. 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하며, 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성한다. 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 프로세서는 제 2 상태를 저장하고, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하고, 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬하도록 구성된다.
[0011] 또 다른 특정 양태에서, 방법은 프로세서에서, 전용 산술 인코딩 명령을 실행하는 단계를 포함한다. 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하며, 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성한다. 방법은 또한, 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태를 저장하는 단계, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하는 단계 및 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬하는 단계를 포함한다.
[0012] 또 다른 특정 양태에서, 비-일시적 컴퓨터 판독가능한 매체는 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하며, 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하는 전용 CABAC(context adaptive binary arithmetic) 인코딩 명령을 포함한다. 전용 CABAC 인코딩 명령은 프로세서에 의해 실행된다. 전용 CABAC 인코딩 명령은 프로세서로 하여금 제 2 상태를 저장하고, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하고, 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬하게 한다.
[0013] 또 다른 특정 양태에서, 장치는 범용 명령들 및 전용 산술 인코딩 명령을 저장하기 위한 수단을 포함한다. 장치는 또한, 저장하기 위한 수단으로부터 리트리브되는 범용 명령들을 실행하기 위한 수단을 포함한다. 장치는 저장하기 위한 수단으로부터 리트리브되는 전용 산술 인코딩 명령을 실행하기 위한 수단을 더 포함한다. 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용한다. 전용 산술 인코딩 명령은 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하도록 실행된다. 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태가 저장되고, 제 1 레인지가 제 2 레인지를 생성하기 위하여 재정렬되고, 제 1 오프셋이 제 2 오프셋을 생성하기 위하여 재정렬된다.
[0014] 개시되는 양태들 중 적어도 하나에 의해 제공되는 하나의 특정 이점은 마이크로프로세서에서 전용 산술 인코딩 명령을 프로그래밍 및 실행하기 위한 능력이다. 전용 산술 인코딩 명령들의 사용은 엔트로피-인코딩된 비디오 비트스트림(예컨대, H.264 CABAC 비디오 비트스트림 또는 H.265 CABAC 비디오 비트스트림)을 인코딩하기 위하여 프로세서 실행 사이클들의 수를 감소시킬 수 있다. 본 개시물의 다른 양태들, 이점들, 및 특징들은 다음의 섹션: 도면들의 간단한 설명, 발명을 실시하기 위한 구체적인 내용 및 청구범위를 포함하는 전체 출원의 검토 이후 명백해질 것이다.
[0015] 도 1은 전용 산술 인코딩 명령을 실행하도록 동작가능한 시스템의 특정 예시적 양태의 도면이다.
[0016] 도 2는 전용 산술 인코딩 명령을 사용하여 CABAC 레인지들 및 오프셋들을 수정하는 예시적 양태이다.
[0017] 도 3은 전용 산술 인코딩 명령을 실행하도록 구성되는 프로세서의 레지스터들에 정보를 저장하는 방법의 특정 예시적 양태의 도면이다.
[0018] 도 4는 전용 산술 인코딩 명령을 실행하기 위한 로직의 특정 예시적 양태의 아키텍처 도면(architectural diagram)이다.
[0019] 도 5는 레인지 및 오프셋을 재정규화하는 방법을 예시하는 흐름도이다.
[0020] 도 6은 전용 산술 인코딩 명령을 실행하기 위한 방법의 특정 예시적 양태의 흐름도이다.
[0021] 도 7은 범용 명령들 및 전용 산술 인코딩 명령을 가지는 명령 세트를 포함하는 무선 디바이스의 블록도이다.
[0022] 도 1을 참조하면, 전용 산술 인코딩 명령을 실행하도록 동작가능한 시스템(100)의 특정 예시적 양태가 도시된다. 시스템(100)은 메모리(120)에 커플링된 프로세서(110)를 포함한다.
[0023] 프로세서(110)는 범용 명령들을 실행하도록 구성되는 범용 명령 실행 로직(112)을 포함한다. 범용 명령들은 LOAD, STORE, JUMP, ADD, INCREMENT 등과 같은 통상적으로 실행되는 프로세서 명령들을 포함할 수 있다. 범용 명령 실행 로직(112)은 범용 명령들을 실행하기 위한 범용 로드-저장(load-store) 로직을 포함할 수 있다. 프로세서(110)는 또한, 전용 산술 인코딩 명령을 실행하도록 구성되는 전용 산술 인코딩 명령 실행 로직(114)을 포함한다. 전용 산술 인코딩 명령은 CABAC(context adaptive binary arithmetic coding) 방식과 같은 엔트로피 코딩 방식에 기초하여 비디오 스트림을 인코딩하기 위하여 프로세서(110)에 의해 실행가능하다. 특정 양태에서, 전용 산술 인코딩 명령은 국제 전기통신 연합("Advanced video coding for generic audiovisual services"라는 명칭의 H.264)에 의해 공표된 264번째 시청각 및 멀티미디어 시스템 표준에 따라 비디오 스트림을 인코딩할 시 사용될 수 있다. 또 다른 양태에서, 전용 산술 인코딩 명령은 국제 전기통신 연합("Series H: Audiovisual and Multimedia Systems, Infrastructure of audiovisual services ― coding of moving video"라는 명칭의 H.265)에 의해 공표된 265번째 시청각 및 멀티미디어 시스템 표준에 따라 비디오 스트림을 인코딩할 시 사용될 수 있다.
[0024] 특정 양태에서, 범용 명령 및 전용 산술 인코딩 명령은 프로세서(110)의 공통 실행 유닛에 의해 실행된다. 예컨대, 공통 실행 유닛은 범용 명령 실행 로직(112) 및 전용 산술 인코딩 명령 실행 로직(114) 둘 다를 포함할 수 있다. 예시적 양태에서, 전용 산술 인코딩 명령은 전용 산술 인코딩 명령을 범용 명령 실행 로직(112)에 의해 실행될 하나 또는 그 초과의 범용 명령으로 분리하지 않고 프로세서(110)에 의해 실행가능한 원자적(atomic) 명령이다. 전용 산술 인코딩 명령은 프로세서(110)의 명령 세트의 단일 명령일 수 있으며, 프로세서(110)의 작은 수의 사이클들(예컨대, 3개 미만의 실행 사이클들)에서 실행될 수 있다. 특정 양태에서, 프로세서(110)는 파이프라이닝된 멀티-스레디드(pipelined multi-threaded) VLIW(very long instruction word) 프로세서이다.
[0025] 메모리(120)는 RAM(random access memory), ROM(read only memory), 레지스터 메모리 또는 이들의 임의의 결합을 포함할 수 있다. 메모리(120)가 프로세서(110)로부터 분리되는 것으로 도 1에 예시되지만, 메모리(120)는 대신에 프로세서(110)의 임베딩된 메모리(예컨대, 캐시)일 수 있다.
[0026] 동작 시, 프로세서(110)는 비디오 스트림을 인코딩할 시 사용될 수 있다. 비디오 스트림의 특정 비트를 인코딩하는 동안, 프로세서(110)는 메모리(120)로부터 전용 산술 인코딩 명령을 리트리브할 수 있고, 로직(114)은 리트리브된 명령을 실행할 수 있다.
[0027] 도 1의 시스템(100)은 (예컨대, 비디오 스트림들을 인코딩하는 동안) 전용 산술 인코딩 명령들의 실행을 인에이블할 수 있다는 것이 인식될 것이다. 전용 산술 인코딩 명령들을 실행하도록 구성되는 프로세서들(예컨대, 프로세서(110))는 다수의 범용 명령들을 사용하여 비디오 인코딩 알고리즘을 실행하는 프로세서들보다 빨리 비디오 스트림들을 인코딩할 수 있다. 예컨대, 전용 산술 인코딩 명령들을 실행하기 위한 능력은, 프로세서가, 본원에서 추가로 설명되는 바와 같이, 범용 명령들의 사용에 의한 것보다 더 적은 실행 사이클들에서 복잡하고 시간-소모적인 인코딩 동작들을 수행하는 것을 가능하게 한다.
[0028] 도 2를 참조하면, 전용 산술 인코딩 명령을 사용하여 CABAC 레인지들 및 오프셋들을 수정하는 예시적 양태들(200, 220)이 개시된다. CABAC는 바이너리 산술 코딩의 형태이다. 일반적으로, 바이너리 산술 코딩은 2개의 양들(quantities): 전류 인터벌 "레인지" 및 전류 인터벌 레인지에서의 전류 "오프셋"을 특징으로 할 수 있다.
[0029] 특정 비트를 인코딩하기 위하여, 전류 레인지가 먼저, LPS(least probable symbol) 및 MPS(most probable symbol)의 확률에 기초하여 2개의 부분들로 세분화된다. 예컨대, LPS는 "0" 심볼일 수 있고, MPS는 "1" 심볼일 수 있으며, 전류 레인지는 0과 1 사이의 레인지일 수 있다. 일반적으로, R이 전류 레인지의 폭이면, rLPS는 제 1 부분의 폭이고, rMPS는 제 2 부분의 폭이며, pLPS는 LPS(least probable symbol)을 당면할 확률이고, pMPS는 MPS(most probable symbol)를 당면할 확률이며, 그 다음 rLPS = R x pLPS이고, rMPS = R x pMPS = R - rLPS이다. 따라서, LPS(least probable symbo)의 확률 pLPS가 MPS(most probable symbol)의 확률 pMPS보다 높은 경우, LPS(least probable symbol)에 대응하는 부분은 MPS(most probable symbol)에 대응하는 부분의 폭 rMPS보다 더 큰 폭 rLPS를 가질 것이다. 즉, pLPS > pMPS인 경우, rLPS > rMPS이다. 유사하게, pMPS > pLPS인 경우, rMPS > rLPS이다. 각각의 빈은 MPS 또는 LPS로서 인코딩될 수 있고, rLPS 및 rMPS는 아래에서 설명되는 바와 같이, 인코딩된 빈에 기초하여 반복적으로 업데이트될 수 있다.
[0030] 예컨대, 도 2의 제 1 양태(200)에 예시되는 바와 같이, 전용 산술 인코딩 명령(202)은 MPS로서 빈(204)을 인코딩(예컨대, 로직 "1"로서 빈을 인코딩)하도록 실행될 수 있다. 특정 양태에서, 전용 산술 인코딩 명령(202)은 도 1의 프로세서(110)의 전용 산술 인코딩 명령 실행 로직(114)에 의해 실행될 수 있다. 레인지(206) 및 로우(208)(예컨대, 오프셋)는 빈(204)을 특징화할 수 있다. 레인지(206)는 도시된 바와 같이, 빈(204)의 rLPS(210) 및 빈(204)의 rMPS(212)의 합과 동일할 수 있다. MPS로서 빈(204)을 인코딩하기 위하여 전용 산술 인코딩 명령(202)을 실행하는 것은 인코딩된 빈(214)을 생성한다. 인코딩된 빈(214)의 레인지(216)는 빈(204)의 rMPS(212)와 동일하고, 인코딩된 빈(214)의 로우(218)(예컨대, 오프셋)는 빈(204)의 로우(208)와 동일하다.
[0031] 또 다른 예로서, 도 2의 제 2 양태(220)에 예시되는 바와 같이, 전용 산술 인코딩 명령(222)은 LPS로서 빈(204)을 인코딩(예컨대, 로직 "0"으로서 빈을 인코딩)하도록 실행될 수 있다. 특정 양태에서, 전용 산술 인코딩 명령(222)은 도 1의 프로세서(110)의 전용 산술 인코딩 명령 실행 로직(114)에 의해 실행될 수 있다. LPS로서 빈(204)을 인코딩하기 위하여 전용 산술 인코딩 명령(222)을 실행하는 것은 인코딩된 빈(234)을 생성할 수 있다. 인코딩된 빈(234)의 레인지(236)는 빈(204)의 rLPS(210)와 동일하고, 인코딩된 빈(234)의 로우(예컨대, 오프셋)는 빈(204)의 로우(208) 및 빈(204)의 rMPS(212)의 합과 동일하다. 특정 양태에서, 전용 산술 인코딩 명령(202) 및 전용 산술 인코딩 명령(222)은 동일한 명령일 수 있다.
[0032] 도 2에 도시되는 양태들(200, 220)을 참조하면, 오프셋(예컨대, 로우(218, 238) 각각)는 비트스트림(인코딩된 빈)에 기록될 수 있다. 도 2에 예시되는 바와 같이, 인코딩된 빈(214, 234)의 레인지(216, 236)는 빈(204)의 레인지(206)(예컨대, 레인지는 각각의 인코딩 단계에 따라 감소될 수 있음)보다 작을 수 있다. 따라서, 레인지 및 로우는 각각의 빈을 인코딩한 이후 또는 레인지의 값이 임계치 미만으로 떨어지는 경우 재정규화될 수 있다. 예컨대, 9-비트 바이너리 숫자로 표현되는 레인지는 레인지의 MSB(most significant bit)가 1 미만인 경우(예컨대, MSB = 0) 재정규화될 수 있다. 재정규화는 도 5에 대하여 더 상세하게 설명된다.
[0033] H.264 또는 H.265에 따른 CABAC 인코딩은 상태-종속적 동작이다. 즉, 비디오 스트림을 인코딩하는 것은 레인지 및 오프셋과 다른 정보(예컨대, 상태, 비트 포지션 및 MPS 비트)를 유지하는 것을 포함할 수 있다. H.264 또는 H.265에 있어서, 레인지는 9-비트 양이고, 오프셋은 적어도 9-비트 양이다. rLPS의 계산은, CABAC 상수들을 저장하고 레인지 및 상태에 의해 인덱스되는 256 바이트들의 64x4 룩업 테이블에 의해 근사화될 수 있다. 룩업 테이블에서의 값들이 H.264 표준 또는 H.265 표준에 의해 정의되는 상수들이기 때문에, 룩업 테이블은 하드-코딩될 수 있다. 대안적으로, 룩업 테이블은 프로그램가능(예컨대, 재기록가능)할 수 있다.
[0034] 전용 CABAC 인코딩 명령(예컨대, 전용 산술 인코딩 명령(202, 222))은, 본원에서 설명되는 바와 같이, 레인지를 재정렬하고, 오프셋을 재정렬하고, CABAC 상수들을 룩업할 수 있다. 전용 CABAC 인코딩 명령은 CABAC 상태 비트들, CABAC MPS 비트, 비트 포지션(bitpos) 비트들, 9개의 CABAC 레인지 비트들, 적어도 9개의 CABAC 오프셋 비트들 및 입력 값 비트(예컨대, 입력 값 빈)를 입력으로서 수용할 수 있다. 전용 CABAC 인코딩 명령은 새로운 CABAC 상태 비트들, 새로운 CABAC MPS 비트, 9개의 CABAC 레인지 비트들 및 적어도 9개의 CABAC 오프셋 비트들을 포함하는 출력을 생성할 수 있다. 위에서 설명된 바와 같이, 인코딩 프로세스는 MPS의 MSB의 값이 1이도록 특정 반복들 이후 재정규화될 수 있다. 예컨대, 전용 CABAC 인코딩 명령은 다음의 의사-코드에 따라 동작할 수 있다:
Figure pct00001
[0035] 본원에서 기술되는 바와 같은 수식들 및 표시들 중 많은 수식들 및 표시들이 C 또는 C++ 프로그래밍 언어와 유사한 문법(syntax)을 사용하지만, 표시들은 예시를 목적으로 하며 대신에 상이한 문법을 가지는 다른 프로그래밍 언어들로 표시될 수 있다는 점이 주목되어야 한다.
[0036] 위의 의사-코드는 함수 ENCBIN( )(아래에서 예시됨)로 캡슐화될 수 있고, 인코딩된 H.264 또는 H.265 비디오 비트는 2개의 프로세서 사이클들에서 생성될 수 있다.
Figure pct00002
[0037] 특정 양태에서, 전용 CABAC 인코딩 명령의 사용은, (범용 명령들을 사용하는) 다수의 프로세서 실행 사이클들(즉, > 2개의 사이클들)로부터 2개의 프로세서 실행 사이크들로, 인코딩된 비디오 스트림 비트를 생성하기 위한 시간을 감소시킨다.
[0038] 도 3을 참조하면, 전용 산술 인코딩 명령(360)을 실행하도록 구성되는 프로세서의 레지스터들에 정보를 저장하는 방법의 특정 예시적 양태의 도면이 개시된다. 예시적 양태에서, 전용 산술 인코딩 명령(360)은 H.264 CABAC 인코딩 명령이다. 또 다른 예시적 양태에서, 전용 산술 인코딩 명령(360)은 H.265 CABAC 인코딩 명령이다. 특정 양태에서, 전용 산술 인코딩 명령(360)은 도 2의 전용 산술 인코딩 명령들(202, 222) 중 하나에 대응할 수 있다.
[0039] 전용 산술 인코딩 명령(360)의 실행 동안, 빈(350)(예컨대, 전용 CABAC 인코딩 명령(360)의 입력 값 비트(350))은 예측 레지스터(340) 내에 저장될 수 있다. 예측 레지스터(340) 내에 저장된 빈(350)은 판정 또는 비디오 인코딩 알고리즘에서 사용될 수 있다. 프로세서(110)는 전용 산술 인코딩 명령(360)을 실행하는데 사용되는 데이터를 로딩하여 이를 2개의 입력 레지스터 쌍들(310 및 320) 내에 저장할 수 있다. 특정 양태에서, 레지스터 쌍들(310 및 320)은 32-비트 레지스터들의 쌍들이다.
[0040] 프로세서는 전용 산술 인코딩 명령의 실행 동안 생성되는 데이터를 출력 레지스터 쌍(330) 내에 저장할 수 있다. 특정 양태에서, 출력 레지스터 쌍(330)은 32-비트 레지스터들의 쌍이다.
[0041] 제 1 입력 레지스터 쌍(310)의 제 1 레지스터 Rtt.w0(311)은 입력 상태(301) 및 입력 MPS 비트(302)를 저장할 수 있다. 특정 양태에서, Rtt.w0[0:5]로 표시되는 Rtt.w0(311)의 비트 0 내지 5는 입력 상태(301)를 저장하고, Rtt.w0[8]은 입력 MPS 비트(302)를 저장한다. 제 1 입력 레지스터 쌍(310)의 제 2 레지스터 Rtt.w1(312)은 입력 bitpos(303)를 저장할 수 있다. 예컨대, Rtt.w1[0:4]는 입력 bitpos(303)를 저장할 수 있다.
[0042] 제 2 입력 레지스터 쌍(320)의 제 1 레지스터 Rss.w0(321)은 입력 레인지(304)를 저장할 수 있다. 예컨대, Rss.w0[0:8]은 입력 레인지(304)의 9개의 비트들을 저장할 수 있다. 제 2 입력 레지스터 쌍(320)의 제 2 레지스터 Rss.w1(322)은 입력 오프셋(305)을 저장할 수 있다. 특정 양태에서, Rss.w1[0:8]은 입력 오프셋(305)의 9개의 비트들을 저장한다.
[0043] 출력 레지스터 쌍(330)의 제 1 레지스터 Rdd.w0(331)은 출력 상태(308), 출력 MPS 비트(307) 및 출력 레인지(306)를 저장할 수 있다. 예컨대, Rdd.w0[0:5]는 6-비트 출력 상태(308)를 저장할 수 있고, Rdd.w0[8]은 출력 MPS 비트(307)를 저장할 수 있고, Rdd.w0[23:31]은 출력 레인지(306)를 저장할 수 있다. 출력 레지스터 쌍(331)의 제 2 레지스터 Rdd.w1(332)은 정규화된 방식으로 출력 오프셋(309)을 저장할 수 있다.
[0044] 프로세서가 전용 CABAC 인코딩 명령에 대한 출력 데이터를 2개의 입력 레지스터 쌍들로 "패킹"할 수 있다는 것이 인식될 것이다. 전용 CABAC 인코딩 명령(360)이 H.264 비디오 압축 표준 및/또는 H.265 비디오 압축 표준을 참조하여 본원에서 설명되었지만, 전용 CABAC 인코딩 명령(360)은 다른 산술적으로 코딩된 비트스트림들을 인코딩할 시 사용될 수 있다는 점이 주목되어야 한다. 예컨대, 전용 CABAC 인코딩 명령(360)은 JPEG3000(Joint Photographic Experts Group 3000) 이미지 압축 표준에 따라 인코딩된 비트스트림들을 인코딩할 시 사용될 수 있다. 도 3은 예측 레지스터, 2개의 입력 레지스터 쌍들 및 하나의 출력 레지스터 쌍을 예시하지만, 전용 CABAC 인코딩 명령(360)은 대안적으로, 임의의 수의 입력 및 출력 레지스터들과 입력 및 출력 레지스터들의 임의의 결합을 사용하여 수행될 수 있다는 점이 주목되어야 한다. 본원에서 설명되는 바와 같은 전용 CABAC 인코딩 명령(360)은 9-비트 레인지 및 9-비트 오프셋을 활용하지만, 이러한 비트 길이들은 단지 예시를 목적으로 한다는 점이 추가로 주목되어야 한다. 다른 산술 인코딩 알고리즘들은 다른 비트 길이들을 사용할 수 있고, 본원에서 설명되는 바와 같은 전용 산술 인코딩 명령들은 입력으로서 수용하고, 임의의 비트 길이의 출력 데이터로서 생성할 수 있다.
[0045] 도 4를 참조하면, 전용 산술 인코딩 명령을 실행하기 위한 로직(400)의 특정 예시적 양태의 아키텍처 도면이 도시된다. 예시적 양태에서, 전용 산술 인코딩 명령은 H.264 CABAC 인코딩 명령이다. 또 다른 예시적 양태에서, 전용 산술 인코딩 명령은 H.265 CABAC 인코딩 명령이다.
[0046] 6개의 입력 변수들은 리트리브되고, 로직(400)에 제공될 수 있다. 예컨대, 입력 상태(301)는 제 1 입력 레지스터 쌍(310)의 제 1 레지스터 Rtt.w0(311)으로부터 리트리브될 수 있고, 입력 MPS 비트(302)는 제 1 입력 레지스터 쌍(310)의 제 1 레지스터 Rtt.w0(311)으로부터 리트리브될 수 있고, 입력 bitpos(303)는 제 1 입력 레지스터 쌍(310)의 제 2 레지스터 Rtt.w1(312)로부터 리트리브될 수 있고, 입력 레인지(304)는 제 2 입력 레지스터 쌍(320)의 제 1 레지스터 Rss.w0(321)로부터 리트리브될 수 있고, 입력 오프셋(305)(예컨대, 로우)은 제 2 입력 레지스터 쌍(320)의 제 2 레지스터 Rss.w1(322)로부터 리트리브될 수 있고, 입력 빈(350)은 예측 레지스터(340)로부터 리트리브될 수 있다.
[0047] 입력 bitpos(303) 및 입력 레인지(304)는 좌측 시프터(443)에 제공될 수 있다. 좌측 시프터(443)는 입력 bitpos(303)에 의해 입력 레인지(304)를 시프팅하도록 구성될 수 있다. 입력 bitpos(303)에 의해 입력 레인지(304)를 시프팅하는 것은 시프팅된 레인지(445)를 생성할 수 있다. 입력 상태(301)는 CABAC H.264/H.265 상수 룩업 테이블(422)로 인덱스로서 사용된다. 4개의 CABAC 상수들(423)은 시프팅된 레인지(445)에 기초하여 선택된 CABAC 상수를 출력하는 4-투-1 멀티플렉서(424)로 인덱스 동작 및 입력의 결과로서 생성된다. 선택된 CABAC 상수는 LPS의 폭(예컨대, rLPS(427))에 대응할 수 있다. 시프팅된 레인지(445) 및 rLPS(427)는 감산기(412)에 제공될 수 있다. 감산기(412)는, MPS의 폭(예컨대, rMPS(448))을 생성하기 위하여, 시프팅된 레인지(445)(예컨대, 레인지 - rLPS)로부터 rLPS(427)를 감산할 수 있다.
[0048] CABAC H.264/H.265 상수 룩업 테이블(422)은 또한, 새로운 LPS 상태 상수(425) 및 새로운 MPS 상태 상수(426)를 생성할 수 있다. 새로운 LPS 상태 상수(425) 및 새로운 MPS 상태 상수(426)는 2-투-1 멀티플렉서(474)에 제공될 수 있다. 입력 빈(350) 및 입력 MPS 비트(302)는 비교기(414)에 제공될 수 있다. 비교기(414)는 입력 빈(350) 및 입력 MPS 비트(302)가 동일한지 여부를 결정할 수 있다. 입력 빈(350) 및 입력 MPS 비트(302)가 동일하다는 결정에 대한 응답으로, 비교기(414)는 로직 하이 전압 신호(예컨대, 로직 "1")를 생성한다. 입력 빈(350) 및 입력 MPS 비트(302)가 동일하지 않다는 결정에 대한 응답으로, 비교기(414)는 로직 로우 전압 신호(예컨대, 로직 "0")를 생성한다. 비교기(414)의 출력은 로직-AND 게이트(418)에, 2-투-1 멀티플렉서(470)의 제어 입력에, 2-투-1 멀티플렉서(474)의 제어 입력에, 그리고 2-투-1 멀티플렉서(476)의 제어 입력에 제공된다.
[0049] 입력 오프셋(305)("로우")은 2-투-1 멀티플렉서(470)에 그리고 가산기(449)에 제공될 수 있다. rMPS(448)는 또한 가산기(449)에 제공될 수 있다. 가산기(449)는 rMPS(448)를 입력 오프셋(305)과 가산하고, 결과(예컨대, 합)를 2-투-1 멀티플렉서(470)에 제공하도록 구성된다. 비교기(414)의 출력에 기초하여, 2-투-1 멀티플렉서(470)는 출력 오프셋(309)으로서 입력 오프셋(305)을 출력하거나, 또는 출력 오프셋(309)으로서 입력 오프셋(305) 및 rMPS(448)의 합을 출력할 수 있다. 예컨대, 입력 빈(350)이 LPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일하지 않음), 비교기(414)는 로직 하이 전압 신호를 2-투-1 멀티플렉서(470)의 제어 입력에 제공할 수 있다. 로직 하이 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(470)는 출력 오프셋(309)으로서 입력 오프셋(305) 및 rMPS(448)의 합을 출력할 수 있다. 입력 빈(350)이 MPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일함), 비교기(414)는 로직 로우 전압 신호를 2-투-1 멀티플렉서(470)의 제어 입력에 제공할 수 있다. 로직 로우 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(470)는 출력 오프셋(309)으로서 입력 오프셋(305)을 출력할 수 있다.
[0050] 출력 상태(308)는 비교기(414)의 출력에 종속할 수 있다. 예컨대, 입력 빈(350)이 LPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일하지 않음), 비교기(414)는 로직 하이 전압 신호를 2-투-1 멀티플렉서(474)의 제어 입력에 제공할 수 있다. 로직 하이 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(474)는 출력 상태(308)로서 새로운 LPS 상태 상수(425)를 출력할 수 있다. 입력 빈(350)이 MPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일함), 비교기(414)는 로직 로우 전압 신호를 2-투-1 멀티플렉서(474)의 제어 입력에 제공할 수 있다. 로직 로우 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(474)는 출력 상태(308)로서 새로운 MPS 상태 상수(426)를 출력할 수 있다.
[0051] 출력 레인지(306)는 비교기(414)의 출력에 종속할 수 있다. 예컨대, 입력 빈(350)이 LPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일하지 않음), 비교기(414)는 로직 하이 전압 신호를 2-투-1 멀티플렉서(476)의 제어 입력에 제공할 수 있다. 로직 하이 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(476)는 출력 레인지(306)로서 rLPS(427)를 출력할 수 있다. 입력 빈(350)이 MPS로서 인코딩되는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일함), 비교기(414)는 로직 로우 전압 신호를 2-투-1 멀티플렉서(476)의 제어 입력에 제공할 수 있다. 로직 로우 전압 신호의 수신에 대한 응답으로, 2-투-1 멀티플렉서(476)는 출력 레인지(306)로서 rMPS(448)를 출력할 수 있다.
[0052] 입력 상태(301)는 또한, 인버터(420)에 제공될 수 있다. 인버터(420)는 입력 상태(301)를 인버팅하고, 그 결과를 로직-AND 게이트(418)에 제공하도록 구성될 수 있다. 비교기(414)의 출력 및 인버터(420)의 출력이 로직 하이 전압 신호들에 대응하는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일하고, 입력 상태(301)가 로직 "0"인 경우), 로직-AND 게이트(418)는 로직 하이 전압 신호를 2-투-1 멀티플렉서(472)의 제어 입력에 제공할 수 있다. 도 4에 예시되는 입력 상태(301)는 로직 "0"(예컨대, "==0")이다. 그러나, 입력 상태(301)는 또한, 로직 "1"(예컨대, "==1")일 수 있다. 입력 빈(350)이 입력 MPS 비트와 동일하지 않으면 리고/또는 입력 상태(301)가 로직 "1"이면, 로직-AND 게이트(418)는 로직 로우 전압 신호를 2-투-1 멀티플렉서(472)의 제어 입력에 제공할 수 있다.
[0053] 입력 MPS 비트(302)는 2-투-1 멀티플렉서(472)에 제공될 수 있다. 입력 MPS 비트(302)는 또한, 인버터(416)에 의해 인버팅될 수 있다. 인버터의 출력(예컨대, 인버팅된 입력 MPS 비트)은 2-투-1 멀티플렉서(472)에 제공될 수 있다. 출력 MPS 비트(307)는 로직-AND 게이트(418)의 출력에 종속할 수 있다. 예컨대, 로직-AND 게이트(418)가 로직 하이 전압 신호를 2-투-1 멀티플렉서(472)의 제어 입력에 제공하는 경우(예컨대, 입력 빈(350)이 입력 MPS 비트(302)와 동일하고, 입력 상태(301)가 로직 "0"인 경우), 2-투-1 멀티플렉서(472)는 입력 MPS 비트(302)로서 인버팅된 입력 MPS 비트를 출력한다. 그렇지 않으면, 2-투-1 멀티플렉서(472)는 출력 MPS 비트(307)로서 입력 MPS 비트(302)를 출력한다.
[0054] 많은 프로세서들이 시프터를 포함하기 때문에, 도 4의 로직(400)은, 상수 룩업 테이블(422)을 저장하고 몇몇 회로 엘리먼트들, 이를테면, 비교기들, 가산기들, 인버터들 및 멀티플렉서들을 가산함으로써 이러한 프로세서들로 구현될 수 있다는 것이 인식될 것이다. 따라서, 프로세서는 프로세서로의 실질적 변화들을 요구하지 않고 도 4의 로직(400)을 구현함으로써 전용 산술 인코딩 명령을 실행하도록 구성될 수 있다.
[0055] 도 5를 참조하면, 흐름도(500)는 레인지 및 오프셋을 재정규화하는 방법을 예시한다. 오프셋은 출력 레지스터 쌍(331)의 제 2 레지스터 Rdd.w1(332)에서의 비트들에 대응할 수 있다. 예컨대, 제 2 레지스터 Rdd.w1(332)은 8개의 비트들(예컨대, 제 1 바이트 low.ub[0])을 제 1 부분 ub[0] 내에 저장하고, 제 2 바이트 low.ub[1]을 제 2 부분 ub[1] 내에 저장하고, 제 3 바이트 low.ub[2]를 제 3 부분 ub[2] 내에 저장하고, 제 4 바이트 low.ub[3]을 제 4 부분 ub[3] 내에 저장할 수 있다. 제 2 레지스터 Rdd.w1(332) 내에 저장된 바이트들은 출력 오프셋(309)에 대응할 수 있다.
[0056] 도 2에 대해 설명되는 바와 같이, 레인지 및 오프셋은 레인지의 값이 임계치 미만으로 떨어지는 경우 재정규화될 수 있다. 예컨대, 9-비트 바이너리 숫자에 의해 표현되는 레인지는 레인지의 MSB(most significant bit)가 0인 경우(예컨대, 레인지가 바이너리 "100000000" 미만임) 재정규화될 수 있다. 도 5를 참조하면, 502에서, 프로세서(예컨대, 도 1의 프로세서(110))는 출력 레인지(306)가 16진수 값 0x100 미만인지(예컨대, 256 미만임) 여부를 결정할 수 있다. 출력 레인지(306)가 16진 수 값 0x100 미만이 아니면, 출력 오프셋(309) 및 출력 레인지(309)는 재정규화될 필요가 없고, 504에서, 프로세스가 종료된다.
[0057] 출력 레인지(306)가 16진수 값 0x100 미만이면, 506에서, 프로세서는 제 3 레지스터 Rdd.w1(332)의 제 2 부분 ub[1] 내에 저장된 제 2 바이트 low.ub[1]이 16진수 값 0xFF(예컨대, 255)와 동일한지 여부를 결정할 수 있다. 예컨대, 프로세서는 제 2 바이트 low.ub[1]의 각각의 비트가 로직 "1" 비트인지 여부를 결정할 수 있다. 제 2 바이트 low.ub[1]이 16진수 값 0xFF와 동일하다는 결정에 대한 응답으로, 508에서, 버퍼링된 바이트들의 수(예컨대, 출력 비트스트림에 기록될 바이트들)가 증분될 수 있다. 그 다음, 510에서, 프로세서는 제 1 바이트 low.ub[0]을 제 2 부분 ub[1]로 시프팅하고, 16진수 값 0x00을 제 1 부분 ub[0]으로 로딩하고, 출력 레인지(306)를 8개의 비트들만큼 좌측으로 시프팅할 수 있다. 504에서, 방법이 종료될 수 있다.
[0058] 506에서의, 제 2 바이트 low.ub[1]이 16진수 값 0xFF와 동일하지 않다는 결정에 대한 응답으로, 512에서, 프로세서는 버퍼링된 바이트들의 수가 0보다 큰 지 여부를 결정할 수 있다. 버퍼링된 바이트들의 수가 0보다 크다는 결정에 대한 응답으로, 518에서, 프로세서는 제 4 바이트 low.ub[3]을 비트스트림으로 입력할 수 있다. 예컨대, 프로세서는 인코딩된 비트스트림으로서 제 4 바이트 low.ub[3]을 디코더에 송신할 수 있다. 520에서, 프로세서는 버퍼링된 바이트들의 수가 1보다 큰지 여부를 결정할 수 있다. 버퍼링된 바이트들의 수가 1보다 크다는 결정에 대한 응답으로, 프로세서는, 522에서, 제 3 바이트 low.ub[2]를 비트스트림으로 입력할 수 있고, 524에서, 버퍼링된 바이트들의 수를 감소시킬 수 있다. 버퍼링된 바이트들의 수가 1보다 큰 동안 520-524에서의 동작들은 계속될 수 있다. 520에서의, 버퍼링된 바이트들의 수가 1보다 크지 않다는 결정에 대한 응답으로, 516에서, 프로세서는 제 2 바이트 low.ub[1]을 제 4 부분 ub[3]으로 시프팅하고, 16진수 값 0xFF를 제 3 부분 ub[2]로 시프팅할 수 있다. 그 다음, 510에서, 프로세서는 제 1 바이트 low.ub[0]을 제 2 부분 ub[1]로 시프팅하고, 16진수 값 0x00을 제 1 부분 ub[0]으로 로딩하고, 출력 레인지(306)를 8개의 비트들만큼 좌측으로 시프팅할 수 있다. 그 이후, 504에서, 방법이 종료될 수 있다.
[0059] 512에서의, 버퍼링된 바이트들의 수가 0보다 크지 않다는 결정에 대한 응답으로, 514에서, 프로세서는 버퍼링된 바이트들의 수를 1로 세팅할 수 있다. 다음으로, 516에서, 프로세서는 제 2 바이트 low.ub[1]을 제 4 부분 ub[3]으로 시프팅하고, 16진수 값 0xFF를 제 3 부분 ub[2]로 시프팅할 수 있다. 그 다음, 510에서, 프로세서는 제 1 바이트 low.ub[0]을 제 2 부분 ub[1]로 시프팅하고, 16진수 값 0x00을 제 1 부분 ub[0]으로 로딩하고, 출력 레인지(306)를 8개의 비트들(예컨대, 1 바이트)만큼 좌측으로 시프팅할 수 있다. 504에서, 방법이 종료될 수 있다.
[0060] 도 5의 흐름도(500)는 출력 오프셋(309)의 캐리어 비트를 체크할 필요성 및 로직 "0" 또는 로직 "1"이 비트스트림에 기록되어야 하는지 여부를 유추할 필요성을 회피할 수 있다. 예컨대, 전용 산술 인코딩 명령(360)의 실행 동안 출력 오프셋(309)을 업데이트하는 경우 생성되는 임의의 캐리어가 존재하면, 캐리어는 제 3 바이트 low.ub[2]를 통해 제 4 바이트 low.ub[3](예컨대, 최상위 바이트)으로 자동으로 전파될 수 있다. 흐름도(500)는 또한, 다수의 버퍼링된 바이트들에 기초하여 다수의 바이트들을 선택적으로 입력(예컨대, 기록)함으로써 재정규화의 회귀(recurrence) 레이트를 감소시킬 수 있다.
[0061] 도 6을 참조하면, 전용 산술 인코딩 명령을 실행하는 방법(600)의 특정 예시적 양태의 흐름도가 도시된다. 예시적 양태에서, 방법(600)은 도 1의 프로세서(110) 또는 도 4의 로직(400)에 의해 수행될 수 있다.
[0062] 방법(600)은 602에서, 프로세서에서, 전용 CABAC(context adaptive binary arithmetic) 인코딩 명령을 실행하는 단계를 포함한다. 예컨대, 프로세서(110)는 하나 또는 그 초과의 전용 산술 인코딩 명령들, 이를테면, 전용 산술 인코딩 명령(202, 222) 또는 전용 산술 인코딩 명령(360)을 실행할 수 있다. 전용 산술 인코딩 명령들(202, 222, 360)은 입력으로서 입력 상태(301)(예컨대, 제 1 스테이지), 입력 MPS 비트(302), 입력 비트 포지션(bitpos)(303), 입력 레인지(304)(예컨대, 제 1 레인지), 입력 오프셋(305)(예컨대, 제 1 오프셋) 및 입력 빈(350)을 수용할 수 있다.
[0063] 방법(600)은 또한, 604에서, 전용 CABAC 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태를 저장하는 단계, 제 2 레인지를 생성하기 위하여 제 1 레인지를 재정렬하는 단계 및 제 2 오프셋을 생성하기 위하여 제 1 오프셋을 재정렬하는 단계를 포함한다. 예컨대, 전용 산술 인코딩 명령을 실행하는 단계는 출력 오프셋(309)(예컨대, 제 2 오프셋), 출력 MPS 비트(307), 출력 상태(308)(예컨대, 제 2 상태) 및 출력 레인지(306)(예컨대, 제 2 레인지)를 생성할 수 있다. 도 3을 참조하면, 출력 MPS 비트(307)는 출력 레지스터 쌍(330)의 제 1 레지스터 Rdd.w0(331) 내에 저장될 수 있고, 제 2 입력 레지스터 쌍(320)의 제 1 레지스터 Rss.w0(321)에서의 입력 레인지(304)는 출력 레지스터 쌍(330)의 제 1 레지스터 Rdd.w0(331) 내에서 재정렬될 수 있고, 제 2 입력 레지스터 쌍(320)의 제 2 레지스터 Rss.w1(322)에서의 입력 오프셋(305)은 출력 레지스터 쌍(330)의 제 2 레지스터 Rdd.w1(332) 내에서 재정렬될 수 있다.
[0064] 도 6의 방법(600)은 (예컨대, 비디오 스트림들을 인코딩하는 동안) 전용 산술 인코딩 명령들의 실행을 가능하게 할 수 있다. 전용 산술 인코딩 명령들을 실행하도록 구성되는 프로세서들(예컨대, 프로세서(110))는 다수의 범용 명령들을 사용하여 비디오 인코딩 알고리즘(예컨대, CABAC)을 실행하는 프로세서들보다 빨리 비디오 스트림들을 인코딩할 수 있다. 예컨대, 전용 산술 인코딩 명령을 실행하기 위한 능력은, 프로세서가, 범용 명령들의 사용에 의한 것보다 더 적은 실행 사이클들에서 복잡하고 시간-소모적인 인코딩 동작들을 수행하는 것을 가능하게 한다.
[0065] 도 7은 무선 디바이스(700)의 블록도이다. 무선 디바이스(700) 내의 메모리(732)는 범용 명령들(752) 및 전용 산술 인코딩 명령(754)을 포함한다. 무선 디바이스(700)는 메모리(732)에 커플링된 프로세서(710), 이를테면, 디지털 신호 프로세서를 포함한다. 예시적 양태에서, 프로세서(710)는 도 1의 프로세서(110)를 포함할 수 있고, 메모리(732)는 도 1의 메모리(120)를 포함할 수 있다. 메모리(732)는 컴퓨터 판독가능한 저장 매체일 수 있다.
[0066] 특정 양태에서, 범용 명령들(752) 및 전용 산술 인코딩 명령(754)은 메모리(732)에 저장된 인코딩 애플리케이션 또는 일부 다른 인코딩 소프트웨어 내에서 사용된다. 예컨대, 범용 명령들(752) 및 전용 산술 인코딩 명령(754)은 비디오를 인코딩하는데 사용되는 CABAC 인코딩 애플리케이션 내에서 사용될 수 있다. 무선 디바이스(700)는 또한, 전용 산술 인코딩 명령(754)을 실행하기 위한 로직(712)을 포함한다. 예시적 양태에서, 로직(712)은 도 4의 로직(400)을 포함한다. 특정 양태에서, 로직(712)은 범용 명령들(752) 및 전용 산술 인코딩 명령(754)을 실행하도록 구성되는 프로세서(710)의 실행 유닛이다.
[0067] 특정 양태에서, 전용 산술 인코딩 명령(754)은 단일 명령이다. 특정 양태에서, 범용 명령들(752) 및 전용 산술 인코딩 명령(754)은 무선 디바이스(700)가 H.264-준수 CABAC-인코딩된 비디오 스트림 또는 H.265-준수 CABAC-인코딩 비디오 스트림을 인코딩하는 것을 가능하게 한다. 로직(712)은 전용 산술 인코딩 명령(754)을 실행하기 위하여 프로세서(710)에 의해 채용된다. 특정 양태에서, 전용 산술 인코딩 명령(754)을 실행하는 것은 도 4에 대해 본원에서 설명되는 바와 같이 데이터를 리트리브하는 것, 프로세싱하는 것 및 저장하는 것을 포함한다.
[0068] 도 7은 또한, 프로세서(710) 및 디스플레이(728)에 커플링된 선택적 디스플레이 제어기(726)를 도시한다. 코더/디코더(CODEC)(734)는 또한, 디지털 신호 프로세서(710)에 커플링될 수 있다. 스피커(736) 및 마이크로폰(738)은 CODEC(734) 에 커플링될 수 있다. 도 7은 또한, 무선 제어기(740) 가 프로세서(710)에 그리고 안테나(742)에 커플링될 수 있음을 표시한다. 특정 양태에서, 프로세서(710), 디스플레이 제어기(726), 메모리(732), CODEC(734) 및 무선 제어기(740)는 시스템-인-패키지 또는 시스템-온-칩 디바이스(722) 내에 포함된다. 특정 양태에서, 입력 디바이스(730) 및 전력 공급 장치(744)는 시스템-온-칩 디바이스(722)에 커플링된다. 더욱이, 특정 양태에서, 도 7에 예시되는 바와 같이, 디스플레이(728), 입력 디바이스(730), 스피커(736), 마이크로폰(738), 안테나(742) 및 전력 공급 장치(744)가 시스템-온-칩 디바이스(722)의 외부에 있다. 그러나, 각각은, 이를테면, 인터페이스 또는 제어기를 통해, 시스템-온-칩 디바이스(722)의 컴포넌트에 커플링될 수 있다. 예시적 양태에서, 무선 디바이스(700)는 셀룰러 전화, 스마트폰 또는 PDA(personal digital assistant)이다. 따라서, 무선 디바이스(700)는 비디오 스트림을 인코딩하고, 인코딩된 비디오 스트림을 안테나(742)를 통해 송신할 수 있다. 비디오 스트림은 프로세서(710)의 로직(712)에 의해 실행되는 범용 명령들(752) 및 전용 산술 인코딩 명령들(754) 중 하나 또는 그 초과의 전용 산술 인코딩 명령들을 사용하여 인코딩될 수 있다.
[0069] 도 7은 무선 디바이스(700)를 도시하지만, 로직(712), 범용 명령들(752) 및 전용 산술 인코딩 명령(754)이 대안적으로, 다른 디바이스들, 이를테면, 셋-탑 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 네비게이션 디바이스, 통신 디바이스, 고정 위치 데이터 유닛 또는 컴퓨터에 포함될 수 있다는 점이 주목되어야 한다.
[0070] 설명되는 양태들과 함께, 범용 명령들 및 전용 산술 인코딩 명령을 저장하기 위한 수단을 포함하는 장치가 개시된다. 예컨대, 저장하기 위한 수단은 도 1의 메모리(120), 도 7의 메모리(732), 범용 명령들 및 전용 산술 인코딩 명령을 저장하기 위한 하나 또는 그 초과의 다른 디바이스들, 회로들 또는 모듈들, 또는 이들의 임의의 결합을 포함할 수 있다.
[0071] 장치는 또한, 범용 명령들 및 전용 산술 인코딩 명령을 실행하기 위한 수단을 포함할 수 있다. 예컨대, 실행하기 위한 수단은 도 1의 프로세서(110), 도 1의 범용 명령 실행 로직(112), 도 1의 전용 산술 인코딩 명령 실행 로직(114), 도 3의 예측 레지스터(340), 도 3의 제 1 입력 레지스터 쌍(310), 도 3의 제 2 입력 레지스터 쌍(320), 도 3의 출력 레지스터 쌍(330), 도 4의 로직(400), 도 7의 프로세서(710), 도 7의 전용 산술 인코딩 명령들(754)을 실행하기 위한 로직(712), 범용 명령들 및 전용 산술 인코딩 명령을 실행하기 위한 하나 또는 그 초과의 다른 디바이스들, 회로들 또는 모듈들, 또는 이들의 임의의 결합을 포함할 수 있다.
[0072] 당해 기술의 당업자들은, 본원에서 개시되는 양태들과 관련하여 설명되는 다양한 예시적 논리 블록들, 구성들, 모듈들, 회로들 및 알고리즘 단계들이 전자 하드웨어, 프로세서에 의해 실행되는 컴퓨터 소프트웨어, 또는 이 둘의 결합들로서 구현될 수 있다는 것을 추가로 인식할 것이다. 다양한 예시적 컴포넌트들, 블록들, 구성들, 모듈들, 회로들 및 단계들이 일반적으로 이들의 기능적 관점에서 위에서 설명되었다. 이러한 기능이 하드웨어로 구현되는지, 또는 프로세서 실행가능한 명령들로 구현되는지는 전체 시스템 상에 부과되는 설계 제약들 및 특정 애플리케이션에 종속된다. 당해 기술의 당업자들은 설명되는 기능을 각각의 특정 애플리케이션에 대해 다양한 방식들로 구현할 수 있지만, 이러한 구현 판정들이 본 개시물의 범위로부터의 이탈을 야기시키는 것으로 해석되어서는 안 된다.
[0073] 본원에서 개시되는 양태들과 관련하여 설명되는 알고리즘 또는 방법의 단계들은 직접 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 결합으로 구체화될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM(read-only memory), PROM(programmable read-only memory), EPROM(erasable programmable read-only memory), EEPROM(electrically erasable programmable read-only memory), 레지스터들, 하드 디스크, 탈착식(removable) 디스크, CD-ROM(compact disc read-only memory), 또는 당해 기술 분야에 알려진 임의의 다른 형태의 비-일시적 저장 매체에 상주할 수 있다. 예시적 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC(application-specific integrated circuit)에 상주할 수 있다. ASIC는 컴퓨팅 디바이스 또는 사용자 단말에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말에서 개별 컴포넌트들로서 상주할 수 있다.
[0074] 개시되는 양태들의 이전의 설명은 당해 기술 분야의 당업자가 개시되는 양태들을 실시하거나 또는 사용하는 것이 가능하도록 제공된다. 이 양태들에 대한 다양한 수정들은 당해 기술 분야의 당업자들에게 쉽게 명백할 것이고, 본원에서 정의된 원리들은 본 개시물의 범위를 벗어나지 않고 다른 양태들에 적용될 수 있다. 따라서, 본 개시물은 본원에서 도시되는 양태들에 제한되는 것으로 의도된 것이 아니라, 다음의 청구항들에 의해 정의되는 원리들 및 신규한 특징들과 일치하는 가능한 가장 넓은 범위를 따를 것이다.

Claims (23)

  1. 장치로서,
    메모리;
    예측 비트 값을 저장하도록 구성되는 예측 레지스터;
    상기 메모리에 커플링된 프로세서; 및
    제 1 비교기 입력 값과 제 2 비교기 입력 값 사이의 비교에 기초하여 제 1 비교기 출력 값을 결정하도록 구성되는 비교기를 포함하고,
    상기 프로세서는,
    전용 산술 인코딩 명령을 실행하고 ― 상기 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하고, 상기 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하도록 구성되고, 상기 하나 또는 그 초과의 출력들 중 적어도 하나의 출력의 값은 상기 예측 비트 값에 기초하여 컴퓨팅가능함 ― ; 그리고
    상기 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여,
    제 2 상태를 저장하고;
    제 2 레인지를 생성하기 위하여 상기 제 1 레인지를 재정렬하고; 그리고
    제 2 오프셋을 생성하기 위하여 상기 제 1 오프셋을 재정렬하도록 구성되고,
    상기 제 1 비교기 입력 값은 제 1 입력 레지스터 쌍에 저장된 CABAC(context adaptive binary arithmetic coding) MPS(most probable symbol) 비트에 기초하고,
    상기 제 2 비교기 입력 값은 예측 비트 값에 기초하는, 장치.
  2. 제 1 항에 있어서,
    상기 전용 산술 인코딩 명령은 엔트로피 코딩 방식을 사용하여 비디오 스트림을 인코딩하기 위하여 프로세서에 의해 실행가능하고,
    상기 엔트로피 코딩 방식은 CABAC인, 장치.
  3. 제 2 항에 있어서,
    상기 제 1 상태는 CABAC 상태 비트들을 포함하고,
    상기 제 1 레인지는 CABAC 레인지 비트들을 포함하고,
    상기 제 1 오프셋은 CABAC 오프셋 비트들을 포함하고,
    상기 복수의 입력들은 CABAC MPS 비트, CABAC 비트 포지션(bitpos) 비트들 및 예측 입력 값 비트를 더 포함하고,
    상기 장치는 제 1 입력 레지스터 쌍 및 제 2 입력 레지스터 쌍을 더 포함하고,
    상기 프로세서는,
    상기 제 1 입력 레지스터 쌍의 제 1 레지스터로부터 CABAC 상태 비트들 및 상기 CABAC MPS 비트를 리트리브하고;
    상기 제 1 입력 레지스터 쌍의 제 2 레지스터로부터 상기 CABAC bitpos 비트들을 리트리브하고;
    상기 제 2 입력 레지스터 쌍의 제 3 레지스터로부터 상기 CABAC 레인지 비트들을 리트리브하고;
    상기 제 2 입력 레지스터 쌍의 제 4 레지스터로부터 상기 CABAC 오프셋 비트들을 리트리브하고; 그리고
    상기 예측 레지스터로부터 상기 예측된 비트 값을 리트리브하도록 추가로 구성되는, 장치.
  4. 제 2 항에 있어서,
    상기 제 2 상태는 CABAC 상태 비트들을 포함하고,
    제 2 레인지는 CABAC 레인지 비트들을 포함하고,
    상기 제 2 오프셋은 CABAC 오프셋 비트들을 포함하고,
    상기 전용 산술 인코딩 명령은 CABAC MPS 비트를 생성하고,
    상기 장치는, 출력 레지스터 쌍을 더 포함하고,
    상기 프로세서는,
    상기 CABAC 상태 비트들, 상기 CABAC MPS 비트 및 상기 CABAC 레인지 비트들을 상기 출력 레지스터 쌍의 제 1 레지스터 내에 저장하고; 그리고
    상기 출력 레지스터 쌍의 제 2 레지스터에 정규화된 방식으로 상기 CABAC 오프셋 비트들을 저장하도록 추가로 구성되는, 장치.
  5. 제 1 항에 있어서,
    상기 전용 산술 인코딩 명령은 H.264 비디오 압축 표준 또는 H.265 비디오 압축 표준을 준수하는, 장치.
  6. 제 1 항에 있어서,
    상기 전용 산술 인코딩 명령은 상기 전용 산술 인코딩 명령을 하나 또는 그 초과의 범용 명령들로 분리하지 않고 상기 프로세서에 의해 실행가능하고,
    상기 하나 또는 그 초과의 범용 명령들을 실행하도록 구성되는 로직 및 상기 전용 산술 인코딩 명령을 실행하도록 구성되는 로직은 상기 프로세서의 공동 실행 유닛에 대응하는, 장치.
  7. 제 1 항에 있어서,
    상기 전용 산술 인코딩 명령은 상기 프로세서의 명령 세트의 단일 명령을 포함하고,
    상기 프로세서는 파이프라이닝된 멀티-스레디드(pipelined multi-threaded) VLIW(very long instruction word) 프로세서를 포함하는, 장치.
  8. 방법으로서,
    예측 비트 값을 예측 레지스터에 저장하는 단계;
    프로세서에서, 전용 산술 인코딩 명령을 실행하는 단계 ― 상기 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하고, 상기 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하고, 상기 하나 또는 그 초과의 출력들 중 적어도 하나의 출력의 값은 상기 예측 비트 값에 기초하여 컴퓨팅가능함 ― ;
    임계치보다 크거나 또는 동일한 상기 제 1 레인지의 하나 또는 그 초과의 값들을 생성하기 위하여 상기 제 1 레인지 및 상기 제 1 오프셋에 대한 재정규화를 수행하는 단계; 및
    상기 전용 산술 인코딩 명령의 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태를 저장하는 단계, 제 2 레인지를 생성하기 위하여 재정규화된 제 1 레인지를 재정렬하는 단계 및 제 2 오프셋을 생성하기 위하여 재정규화된 제 1 오프셋을 재정렬하는 단계를 포함하는, 방법.
  9. 제 8 항에 있어서,
    상기 전용 산술 인코딩 명령을 실행하는 단계는,
    상기 제 1 레인지를 시프터에 제공하는 단계; 및
    CABAC(context adaptive binary arithmetic) 룩업 테이블에 대한 인덱스 룩-업 값으로서 상기 제 1 상태를 사용하는 단계를 포함하고,
    상기 CABAC 룩업 테이블은 하드-코딩되거나 또는 재기록가능한, 방법.
  10. 제 8 항에 있어서,
    상기 제 2 오프셋의 캐리어 비트와는 독립적인 상기 제 2 오프셋에 대한 재정규화를 수행하는 단계;
    상기 제 2 오프셋의 다수의 바이트들을 비트스트림으로 입력하는 단계; 및
    상기 비트스트림을 디코더에 송신하는 단계를 더 포함하는, 방법.
  11. 제 1 레인지, 제 1 오프셋, 제 1 상태 및 예측 레지스터에 저장된 예측 비트 값을 포함하는 복수의 입력들을 수용하고, 상기 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하는 전용 CABAC(context adaptive binary arithmetic) 인코딩 명령을 포함하는 비-일시적 컴퓨터 판독가능한 매체로서,
    상기 하나 또는 그 초과의 출력들 중 적어도 하나의 출력의 값은 상기 예측 비트 값에 기초하여 컴퓨팅가능하고,
    상기 전용 CABAC 인코딩 명령이 프로세서에 의해 실행되는 경우, 상기 전용 CABAC 인코딩 명령은 상기 프로세서로 하여금,
    임계치보다 크거나 또는 동일한 상기 제 1 레인지의 하나 또는 그 초과의 값들을 생성하기 위하여 상기 제 1 레인지 및 상기 제 1 오프셋에 대한 재정규화를 수행하게 하고;
    제 2 상태를 저장하게 하고;
    제 2 레인지를 생성하기 위하여 재정규화된 제 1 레인지를 재정렬하게 하고; 그리고
    제 2 오프셋을 생성하기 위하여 재정규화된 제 1 오프셋을 재정렬하게 하는, 비-일시적 컴퓨터 판독가능한 매체.
  12. 제 11 항에 있어서,
    상기 전용 CABAC 인코딩 명령은,
    비디오 스트림을 인코딩하고; 그리고
    상기 제 2 오프셋의 캐리어 비트와는 독립적인 상기 제 2 오프셋에 대한 재정규화를 수행하기 위하여 상기 프로세서에 의해 실행가능한, 비-일시적 컴퓨터 판독가능한 매체.
  13. 장치로서,
    범용 명령들 및 전용 산술 인코딩 명령을 저장하기 위한 수단;
    예측 비트 값을 예측 레지스터에 저장하기 위한 수단;
    상기 범용 명령들을 저장하기 위한 수단으로부터 리트리브되는 상기 범용 명령들을 실행하기 위한 수단;
    상기 범용 명령들을 저장하기 위한 수단으로부터 리트리브되는 상기 전용 산술 인코딩 명령을 실행하기 위한 수단; 및
    제 1 비교기 입력 값과 제 2 비교기 입력 값 사이를 비교하기 위한 수단에 기초하여 제 1 비교기 출력 값을 결정하기 위한 수단을 포함하고, 상기 제 1 비교기 입력 값은 제 1 입력 레지스터 쌍에 저장된 CABAC(context adaptive binary arithmetic coding) MPS(most probable symbol) 비트에 기초하고, 상기 제 2 비교기 입력 값은 예측 비트 값에 기초하고,
    상기 전용 산술 인코딩 명령은 제 1 레인지, 제 1 오프셋 및 제 1 상태를 포함하는 복수의 입력들을 수용하고, 상기 전용 산술 인코딩 명령은 상기 복수의 입력들에 기초하여 하나 또는 그 초과의 출력들을 생성하도록 실행가능하고, 상기 하나 또는 그 초과의 출력들 중 적어도 하나의 출력의 값은 상기 예측 비트 값에 기초하여 상기 실행하기 위한 수단에 의해 결정되고,
    상기 하나 또는 그 초과의 출력들에 기초하여, 제 2 상태가 저장되고, 상기 제 1 레인지가 제 2 레인지를 생성하기 위하여 재정렬되고, 상기 제 1 오프셋이 제 2 오프셋을 생성하기 위하여 재정렬되는, 장치.
  14. 제 1 항에 있어서,
    상기 제 1 상태, CABAC MPS 비트, CABAC 비트 포지션(bitpos) 비트들 또는 이들의 결합을 저장하도록 구성되는 제 1 입력 레지스터 쌍; 및
    상기 제 1 레인지, 상기 제 1 오프셋 또는 이들의 결합을 저장하도록 구성되는 제 2 입력 레지스터 쌍을 더 포함하고,
    상기 제 1 상태는 CABAC 상태 비트들을 포함하고, 상기 제 1 레인지는 CABAC 레인지 비트들을 포함하고, 상기 제 1 오프셋은 CABAC 오프셋 비트들을 포함하는, 장치.
  15. 제 1 항에 있어서,
    상기 비교기는,
    상기 제 1 비교기 입력 값을 수신하고 ― 상기 제 1 비교기 입력 값은 상기 제 1 입력 레지스터 쌍에 저장된 상기 CABAC MPS 비트에 기초함 ― ; 그리고
    상기 제 2 비교기 입력 값을 수신하도록 추가로 구성되는, 장치.
  16. 제 1 항에 있어서,
    상기 예측 비트 값이 상기 제 1 비교기 입력 값과 동일한 경우 상기 제 1 비교기 출력 값은 제 1 로직 값을 포함하거나, 또는 상기 제 2 비교기 입력 값이 상기 제 1 비교기 입력 값과 상이한 경우 제 2 로직 값을 포함하는, 장치.
  17. 제 14 항에 있어서,
    인버터 입력 값을 수신하고 ― 상기 인버터 입력 값은 상기 제 1 입력 레지스터 쌍의 CABAC 상태 비트들에 기초함 ― ; 그리고
    상기 인버터 입력 값에 기초하여 제 1 인버터 출력 값을 생성하도록 구성되는 인버터를 더 포함하는, 장치.
  18. 제 14 항에 있어서,
    비교기로부터 제 1 비교기 출력 값을 수신하고 ― 상기 제 1 비교기 출력 값은 상기 예측 비트 값에 기초함 ― ;
    인버터로부터 제 1 인버터 출력 값을 수신하고 ― 상기 제 1 인버터 출력 값은 상기 제 1 상태에 기초함 ― ; 그리고
    상기 제 1 비교기 출력 값 및 상기 제 1 인버터 출력 값에 기초하여 로직 게이트 출력 값을 결정하도록 구성되는,
    로직 게이트; 및
    상기 로직 게이트에 커플링된 멀티플렉서를 더 포함하고,
    상기 멀티플렉서는 상기 로직 게이트 출력 값을 수신하도록 구성되는, 장치.
  19. 제 14 항에 있어서,
    제 1 입력 값, 제 2 입력 값 및 선택 신호 값을 수신하고 ― 상기 선택 신호 값은 상기 예측 비트 값에 기초함 ― ; 그리고
    상기 선택 신호 값에 기초하여 멀티플렉서 출력을 출력하도록 구성되는 멀티플렉서를 더 포함하고,
    상기 멀티플렉서 출력은 상기 제 1 입력 값, 상기 제 2 입력 값, 또는 상기 제 1 입력 값 및 상기 제 2 입력 값의 합의 출력을 포함하는, 장치.
  20. 제 1 항에 있어서,
    비교기로부터 상기 제 1 비교기 출력 값을 수신하고;
    인버터로부터 제 1 인버터 출력 값을 수신하고 ― 상기 제 1 인버터 출력 값은 상기 제 1 상태에 기초함 ― ; 그리고
    상기 제 1 비교기 출력 값 및 상기 제 1 인버터 출력 값에 기초하여 로직 게이트 출력 값을 결정하도록 구성되는 로직 게이트를 더 포함하는, 장치.
  21. 제 8 항에 있어서,
    상기 제 1 오프셋은 출력 레지스터 쌍의 제 1 레지스터에서의 비트들의 세트에 대응하고,
    재정규화를 수행하는 것은 상기 제 1 레인지가 제 1 값 미만인지 아니면 제 1 값과 동일한지를 결정하는 것을 포함하고,
    재정규화를 수행하는 것은, 상기 제 1 레인지가 상기 제 1 값 미만이거나 또는 상기 제 1 값과 동일하다는 결정에 대한 응답으로, 상기 제 1 레지스터의 일부분 내에 저장된 바이트가 제 2 값보다 큰지 아니면 상기 제 2 값과 동일한지 여부를 결정하는 것을 더 포함하는, 방법.
  22. 제 1 항에 있어서,
    상기 메모리, 상기 프로세서 및 상기 비교기는 모바일 통신 디바이스로 통합되는, 장치.
  23. 제 1 항에 있어서,
    상기 제 1 비교기 출력 값 및 제 1 인버터 출력 값에 기초하여 로직 게이트 출력 값을 결정하도록 구성되는 로직 게이트를 더 포함하고,
    상기 제 1 비교기 출력 값은 상기 제 1 비교기 입력 값과 상기 제 2 비교기 입력 값 사이의 비교에 기초하고,
    상기 제 1 인버터 출력 값은 상기 제 1 상태 전용 산술 인코딩 명령에 기초하는, 장치.
KR1020167032009A 2014-05-27 2015-04-30 전용 산술 인코딩 명령 KR102296153B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/288,018 US9455743B2 (en) 2014-05-27 2014-05-27 Dedicated arithmetic encoding instruction
US14/288,018 2014-05-27
PCT/US2015/028443 WO2015183462A1 (en) 2014-05-27 2015-04-30 Dedicated arithmetic encoding instruction

Publications (2)

Publication Number Publication Date
KR20170013222A true KR20170013222A (ko) 2017-02-06
KR102296153B1 KR102296153B1 (ko) 2021-08-30

Family

ID=53267582

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167032009A KR102296153B1 (ko) 2014-05-27 2015-04-30 전용 산술 인코딩 명령

Country Status (10)

Country Link
US (1) US9455743B2 (ko)
EP (1) EP3149947B1 (ko)
JP (1) JP6695813B2 (ko)
KR (1) KR102296153B1 (ko)
CN (1) CN106415484B (ko)
BR (1) BR112016027558B1 (ko)
CA (1) CA2947856A1 (ko)
ES (1) ES2826425T3 (ko)
TW (1) TWI669945B (ko)
WO (1) WO2015183462A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104394418B (zh) * 2014-09-23 2018-06-05 清华大学 一种视频数据编码、解码的方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR940004436A (ko) * 1992-08-31 1994-03-15 마이클 에이치. 모리스 우선 선취 예측적 주석을 이용하여 고속으로 명령을 선취 및 지명하는 방법 및 장치
KR20090038808A (ko) * 2007-10-16 2009-04-21 인더스트리얼 테크놀로지 리써치 인스티튜트 컨텍스트 기반 적응형 이진 산술 인코딩 및 디코딩을 위한 시스템 및 방법
KR20130121932A (ko) * 2011-01-06 2013-11-06 퀄컴 인코포레이티드 Cabac 을 이용한 비디오 코딩을 위한 인트라-예측 모드 선택의 표시

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7769088B2 (en) * 2003-05-28 2010-08-03 Broadcom Corporation Context adaptive binary arithmetic code decoding engine
US7061410B1 (en) * 2005-07-18 2006-06-13 Lsi Logic Corporation Method and/or apparatus for transcoding between H.264 CABAC and CAVLC entropy coding modes
CN100466739C (zh) * 2005-10-12 2009-03-04 华为技术有限公司 Cabac解码系统及方法
US7656326B2 (en) 2006-06-08 2010-02-02 Via Technologies, Inc. Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit
TWI348653B (en) * 2006-06-08 2011-09-11 Via Tech Inc Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit
US8749409B2 (en) 2006-08-25 2014-06-10 Sony Computer Entertainment Inc. Entropy decoding methods and apparatus using most probable and least probable signal cases
US7561082B2 (en) 2006-12-29 2009-07-14 Intel Corporation High performance renormalization for binary arithmetic video coding
CN100531386C (zh) * 2007-06-15 2009-08-19 上海富瀚微电子有限公司 一种上下文自适应二进制算术编码器及其方法
US7839311B2 (en) * 2007-08-31 2010-11-23 Qualcomm Incorporated Architecture for multi-stage decoding of a CABAC bitstream
US8782379B2 (en) * 2007-09-27 2014-07-15 Qualcomm Incorporated H.264 video decoder CABAC core optimization techniques
US7932843B2 (en) * 2008-10-17 2011-04-26 Texas Instruments Incorporated Parallel CABAC decoding for video decompression
US7982641B1 (en) 2008-11-06 2011-07-19 Marvell International Ltd. Context-based adaptive binary arithmetic coding engine
US8638850B2 (en) * 2009-05-06 2014-01-28 Advanced Micro Devices, Inc. Execution units for context adaptive binary arithmetic coding (CABAC)
US20110125987A1 (en) 2009-11-20 2011-05-26 Qualcomm Incorporated Dedicated Arithmetic Decoding Instruction
WO2013050612A1 (en) 2011-10-06 2013-04-11 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Entropy coding buffer arrangement
US10289412B2 (en) * 2012-02-09 2019-05-14 Qualcomm Incorporated Floating point constant generation instruction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR940004436A (ko) * 1992-08-31 1994-03-15 마이클 에이치. 모리스 우선 선취 예측적 주석을 이용하여 고속으로 명령을 선취 및 지명하는 방법 및 장치
KR20090038808A (ko) * 2007-10-16 2009-04-21 인더스트리얼 테크놀로지 리써치 인스티튜트 컨텍스트 기반 적응형 이진 산술 인코딩 및 디코딩을 위한 시스템 및 방법
KR20130121932A (ko) * 2011-01-06 2013-11-06 퀄컴 인코포레이티드 Cabac 을 이용한 비디오 코딩을 위한 인트라-예측 모드 선택의 표시

Also Published As

Publication number Publication date
EP3149947B1 (en) 2020-07-22
TW201607294A (zh) 2016-02-16
JP2017525005A (ja) 2017-08-31
JP6695813B2 (ja) 2020-05-20
TWI669945B (zh) 2019-08-21
EP3149947A1 (en) 2017-04-05
WO2015183462A1 (en) 2015-12-03
US20150349796A1 (en) 2015-12-03
BR112016027558A2 (ko) 2017-08-15
US9455743B2 (en) 2016-09-27
CN106415484A (zh) 2017-02-15
CN106415484B (zh) 2019-02-01
KR102296153B1 (ko) 2021-08-30
BR112016027558B1 (pt) 2023-03-14
CA2947856A1 (en) 2015-12-03
ES2826425T3 (es) 2021-05-18

Similar Documents

Publication Publication Date Title
KR100648258B1 (ko) 고속의 디코딩을 수행하는 파이프라인 구조의 내용 기반적응적 이진 산술 디코더
JP5006451B2 (ja) 最適cabac復号器
JP4976553B2 (ja) Cabacビットストリームの多段復号のためのアーキテクチャ
US7365660B2 (en) Method and device for decoding syntax element in CABAC decoder
US7817864B2 (en) Coding apparatus and decoding apparatus
RU2426227C2 (ru) Кодирование кодов переменной длины с эффективным использованием памяти
US8588540B2 (en) Arithmetic encoding apparatus executing normalization and control method
KR101118089B1 (ko) 가변장 복호화 장치 및 방법
US7821430B2 (en) Arithmetic decoding apparatus
JP2005184232A (ja) 符号化装置、プログラム、およびデータ処理方法
JP2018521537A (ja) 仮想メモリシステムにおける圧縮されたキャッシングの改善
KR102296153B1 (ko) 전용 산술 인코딩 명령
US8970405B2 (en) Method and apparatus for entropy decoding
CN112449191A (zh) 压缩多个图像的方法、解压缩图像的方法和装置
US20110125987A1 (en) Dedicated Arithmetic Decoding Instruction
JP2007295157A (ja) データ符号化装置、データ符号化方法、データ符号化プログラム及びデータ符号化プログラムを記録した情報記録媒体
CN113905233B (zh) 基于音频视频编码标准的熵解码方法、可读介质及其电子设备
JP4936574B2 (ja) 符号化装置及びその制御方法
CN116567239A (zh) 编解码方法、装置、编解码器、设备及介质
CN116582669A (zh) 二进制算术编码结构、装置、方法及存储介质
JP2017525266A (ja) 連結されたrom−ramテーブルに基づいて算術コーディングを遂行する方法及び装置

Legal Events

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