KR101834901B1 - 병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들 - Google Patents

병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들 Download PDF

Info

Publication number
KR101834901B1
KR101834901B1 KR1020167010835A KR20167010835A KR101834901B1 KR 101834901 B1 KR101834901 B1 KR 101834901B1 KR 1020167010835 A KR1020167010835 A KR 1020167010835A KR 20167010835 A KR20167010835 A KR 20167010835A KR 101834901 B1 KR101834901 B1 KR 101834901B1
Authority
KR
South Korea
Prior art keywords
block
pipeline
processing
stage
component
Prior art date
Application number
KR1020167010835A
Other languages
English (en)
Other versions
KR20160065900A (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 KR20160065900A publication Critical patent/KR20160065900A/ko
Application granted granted Critical
Publication of KR101834901B1 publication Critical patent/KR101834901B1/ko

Links

Images

Classifications

    • 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
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • 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
    • H04N19/436Methods 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 using parallelised computational arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • 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
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • H04N19/433Hardware specially adapted for motion estimation or compensation characterised by techniques for memory access
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Generation (AREA)

Abstract

병렬로 운영되는 소프트웨어 파이프라인 및 하드웨어 파이프라인을 포함한 블록 프로세싱 파이프라인. 소프트웨어 파이프라인은 하드웨어 파이프라인보다 앞서 적어도 하나의 블록을 운영한다. 파이프라인의 스테이지들 각각은 스테이지에 있는 현재 블록에 관해 하나 이상의 동작들을 수행하는 하드웨어 파이프라인 컴포넌트를 포함할 수 있다. 파이프라인의 적어도 하나의 스테이지는 또한, 하드웨어 컴포넌트가 현재 블록을 프로세싱하는 중에 있는 동안, 다음 블록을 프로세싱하는 파이프라인의 스테이지에서 하드웨어 컴포넌트에 대한 구성을 결정하는 소프트웨어 파이프라인 컴포넌트를 포함할 수 있다. 소프트웨어 파이프라인 컴포넌트는 파이프라인의 업스트림 스테이지로부터 획득된 다음 블록에 관한 정보에 따라 구성을 결정할 수 있다. 소프트웨어 파이프라인 컴포넌트는 또한 스테이지에서 이전에 프로세싱된 블록에 관한 정보를 획득 및 사용할 수 있다.

Description

병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들{PARALLEL HARDWARE AND SOFTWARE BLOCK PROCESSING PIPELINES}
본 명세서는 일반적으로 비디오 또는 이미지 프로세싱에 관한 것으로, 보다 구체적으로 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하는 방법들 및 장치들에 관한 것이다.
관련 기술 분야 설명
퍼스널 컴퓨터 시스템들, 데스크탑 컴퓨터 시스템들, 랩탑 및 노트북 컴퓨터들, 태블릿 또는 패드 디바이스들, 디지털 카메라들, 디지털 비디오 레코더들, 및 모바일 폰들 또는 스마트 폰들을 포함하지만, 이에 제한되지 않는 다양한 디바이스들은 비디오 프로세싱 방법을 구현할 수 있는 소프트웨어 및/또는 하드웨어를 포함할 수 있다. 예를 들어, 디바이스는 하나 이상의 비디오 프로세싱 방법들에 따라 하나 이상의 소스들로부터 입력된 디지털 비디오를 수신 및 프로세싱하고 프로세싱된 비디오 프레임들을 출력할 수 있는 장치(예컨대, 집적 회로(IC), 그 예로서 시스템-온-어-칩(system-on-a-chip, SOC), 또는 IC의 서브시스템)를 포함할 수 있다. 또 다른 예시로서, 소프트웨어 프로그램은 하나 이상의 비디오 프로세싱 방법들에 따라 하나 이상의 소스들로부터 입력된 디지털 비디오를 수신 및 프로세싱하고 프로세싱된 비디오 프레임들을 출력할 수 있는 디바이스 상에서 구현될 수 있다. 예시로서, 도 1에 도시된 바와 같은 비디오 인코더(10)는 장치, 또는 대안적으로 소프트웨어 프로그램을 나타내고, 여기에서 디지털 비디오 입력(입력 프레임들(90))은 비디오 인코딩 방법에 따라, 또 다른 포맷(출력 프레임들(92)), 예를 들어 압축 비디오 포맷 그 예로서 H.264/AVC(Advanced Video Coding) 포맷(또한 MPEG 4 Part 10으로 지칭됨)으로 인코딩 또는 변환된다. 장치 또는 소프트웨어 프로그램 그 예로서 비디오 인코더(10)는 다수의 기능적 컴포넌트들 또는 유닛들, 나아가 예를 들어, 비디오 입력 소스들 및 외부 메모리에 대한 외부 인터페이스들을 포함할 수 있다.
몇몇 비디오 프로세싱 방법들에서, 프로세싱을 수행하기 위하여, 각각의 입력 비디오 프레임(90)은, 예를 들어 144 개의 16x16 픽셀 블록들로 분할된 예시 192x192 픽셀 프레임을 도시한 도 2에 예시된 바와 같이, 픽셀들의 블록들의 행들 및 열들(예컨대, 16x16 픽셀 블록들)로 분할된다. 입력 비디오 프레임(90)의 각각의 블록은 별도로 프로세싱되고, 이행될 시에 프로세싱된 블록들은 출력 비디오 프레임(92)을 형성하기 위해 조합된다. 이는 블록 프로세싱 방법으로 지칭될 수 있다. 종래에, 블록들은 블록 프로세싱 방법에 의하여 도 2에 도시된 바와 같은 스캔 순서로 프로세싱되어, 프레임의 제1 행의 제1 블록(블록 0으로 도시됨)에서 시작되고, 행에 걸쳐 블록들을 순차적으로 프로세싱하며, 행이 완료될 시에 다음 행의 제1 블록에서 연속된다.
블록 프로세싱 방법은, 비디오 프레임 내의 각각의 블록에 순차적으로 적용되는 다수의 프로세싱 단계들 또는 동작들을 포함할 수 있다. 그러한 블록 프로세싱 방법을 구현하기 위하여, 장치 또는 소프트웨어 프로그램 그 예로서 비디오 인코더(10)는 블록 프로세싱 파이프라인(40)을 포함 또는 구현할 수 있다. 블록 프로세싱 파이프라인(40)은 2 개 이상의 스테이지들을 포함할 수 있고, 이때 각각의 스테이지는 블록 프로세싱 방법의 단계들 또는 동작들 중 하나 이상을 구현한다. 도 1은, 적어도 스테이지들(42A 내지 42C)을 포함한 예시 블록 프로세싱 파이프라인(40)을 구현하는 예시 비디오 인코더(10)를 도시한다. 블록은 파이프라인(40)의 스테이지(42A)로 입력되고, 스테이지(42A)에 의해 구현된 동작(들)에 따라 프로세싱되며, 결과들은 다음 스테이지(42B)로(또는 마지막 스테이지(42)에 의한 최종 출력으로서) 출력된다. 다음 스테이지(42B)는 블록을 프로세싱하는 반면, 다음 블록은 프로세싱을 위해 이전 스테이지(42A)로 입력된다. 이로써, 블록들은 스테이지 간에서 파이프라인을 따라 하향 이동하고, 이때 각각의 스테이지는 한 번에 하나의 블록을 프로세싱하고, 다수의 스테이지들은 서로 다른 블록들을 동시에 프로세싱한다. 종래에, 블록들은 도 2에 도시된 바와 같이, 스캔 순서로 블록 프로세싱 파이프라인(40)으로 입력되고, 상기 블록 프로세싱 파이프라인에 의해 프로세싱된다. 예를 들어, 도 1에서, 도 2에 도시된 프레임의 제1 행의 제1 블록(블록 0)은 스테이지(42C)에 있고, 제2 블록(블록 1)은 스테이지(42B)에 있으며, 제3 블록(블록 2)은 스테이지(42A)에 있다. 블록 프로세싱 파이프라인(40)으로 입력될 다음 블록은 제1 행 내의 제4 블록일 것이다.
H.264/AVC(Advanced Video Coding)
H.264/AVC(공식적으로 ITU-T Recommendation H.264로 지칭되고, 또한 MPEG-4 Part 10으로 지칭됨)은 ISO/IEC JTC1 MPEG(Moving Picture Experts Group)과 함께, ITU-T(International Telecommunications Union - Telecommunication Standardization Sector) VCEG(Video Coding Experts Group)에 의해 개발된 블록-배향 모션-보상-기반 코덱 표준이다. H.264/AVC 표준은 ITU-T에 의하여, 표제가 "ITU-T Recommendation H.264: Advanced video coding for generic audiovisual services"인 문헌에 공개된다. 이러한 문헌은 또한 H.264 Recommendation으로 지칭될 수 있다.
블록 프로세싱 파이프라인이 병렬로 운영되는 소프트웨어 파이프라인 및 하드웨어 파이프라인을 포함하는, 블록 프로세싱 방법들 및 장치들의 실시예들이 기술된다. 그러나, 소프트웨어 파이프라인은 하드웨어 파이프라인보다 앞서 하나 이상의 블록들을 운영한다. 파이프라인의 스테이지들 각각은 스테이지에 있는 현재 블록에 관해 하나 이상의 동작들을 수행하는 하드웨어 파이프라인 컴포넌트를 포함할 수 있다. 파이프라인의 적어도 하나의 스테이지는 또한, 하드웨어 컴포넌트가 현재 블록을 프로세싱하는 중에 있는 동안, 다가오는 블록(예컨대, 다음 블록)을 프로세싱하는 파이프라인의 스테이지에서 하드웨어 컴포넌트에 대한 구성을 결정하는 소프트웨어 파이프라인 컴포넌트를 포함할 수 있다. 적어도 몇몇 실시예들에서, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 파이프라인의 업스트림 스테이지로부터 획득된 다음 블록에 관련된 정보에 따라 상기 스테이지에 있는 다음 블록을 프로세싱하는 구성을 결정할 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트는 또한, 다음 블록을 프로세싱하는 구성을 결정할 시에 스테이지에서 이전에 프로세싱된 블록에 관련된 정보를 획득 및 사용할 수 있다. 적어도 몇몇 실시예들에서, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 상기 스테이지에서 블록 또는 블록들을 프로세싱하는 것으로부터 정보를 획득하고 정보를 파이프라인의 하나 이상의 업스트림 스테이지들로 다시 전달하여 현재 또는 다가오는 블록들을 프로세싱하는 그들 업스트림 스테이지들을 구성할 수 있다. 추가로, 적어도 몇몇 실시예들에서, 파이프라인의 말단에 있거나 그 근방에 있는 소프트웨어 파이프라인 컴포넌트는 파이프라인에서 다가오는 블록들을 프로세싱할 시에 사용되는 파이프라인의 시작에 있거나 그 근방에 있는 또 다른 소프트웨어 파이프라인 컴포넌트로, 블록 프로세싱 결과들 또는 통계들을 다시 전달할 수 있다.
적어도 몇몇 실시예들에서, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 업스트림 스테이지로부터 다음 블록에 대한 블록 정보를 수신한다. 소프트웨어 파이프라인 컴포넌트는 또한 스테이지에서 이전에 프로세싱된 프레임의 블록으로부터 정보를 수신할 수 있다. 소프트웨어 파이프라인 컴포넌트는 블록에 대한 수신 정보에 따라 블록에 대한 구성을 결정하고, 블록에 대한 구성을 구성 메모리에 기입하며, 고 비트(go bit)를 설정하거나, 또는 그렇지 않으면, 다음 블록에 대한 구성이 구성 메모리에 준비되었다라는 신호를, 스테이지에 있는 하드웨어 파이프라인 컴포넌트로 전송할 수 있다. 소프트웨어 파이프라인 컴포넌트는 그 후에 블록에 대한 블록 정보를 다운스트림 스테이지로 푸싱(pushing)할 수 있다.
스테이지에 있는 하드웨어 파이프라인 컴포넌트는 이전 스테이지로부터 블록들을 수신한다. 하드웨어 파이프라인 컴포넌트가 다음 블록을 프로세싱할 준비가 되고, 다음 블록이 메모리에 준비되며, 소프트웨어 파이프라인 컴포넌트가, 다음 블록에 대한 구성이 구성 메모리에 준비되었다라는 신호를 하드웨어 파이프라인 컴포넌트로 전송한 경우, 하드웨어 파이프라인 컴포넌트는 다음 블록을 프로세싱하기 위해 시작할 수 있다. 하드웨어 파이프라인 컴포넌트는 구성 메모리 내의 구성에 따라 다음 블록을 프로세싱하는 구성을 설정하고, 구성 메모리가 이용가능하다라는 신호를 소프트웨어 파이프라인 컴포넌트로 전송한다. 하드웨어 파이프라인 컴포넌트는 그 후에 블록에 대한 구성에 따라 블록을 프로세싱하고, 프로세싱된 블록을 다음 스테이지에 기입한다.
파이프라인 내의 스테이지에 있는 소프트웨어 파이프라인 컴포넌트 및 하드웨어 파이프라인 컴포넌트의 상기의 동작들은, 입력 프레임 내의 블록들 모두가 상기 스테이지에서 프로세싱될 때까지, 상기 스테이지에서 반복될 수 있다.
도 1은 입력 프레임들로부터의 블록들을 스캔 순서로 프로세싱하는 종래의 블록 프로세싱 파이프라인을 포함한 예시 비디오 인코더를 예시한다.
도 2는 비디오 프레임으로부터의 블록들의 종래의 스캔 순서 프로세싱을 예시한다.
도 3은 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현하는 예시 블록 프로세싱 파이프라인의 고-레벨 블록 다이어그램이다.
도 4a 내지 도 4c는 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현하는 예시 블록 프로세싱 파이프라인 내의 스테이지에 있는 프로세싱 블록들을 예시한다.
도 5는 적어도 몇몇 실시예들에 따른, 적어도 하나의 스테이지가 소프트웨어 파이프라인에 의해 스킵되는, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 예시 블록 프로세싱 파이프라인을 예시한다.
도 6은 적어도 몇몇 실시예들에 따른, 적어도 하나의 스테이지가 다수의 파이프라인 유닛들을 포함하는, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 예시 블록 프로세싱 파이프라인을 예시한다.
도 7은 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 블록 프로세싱 파이프라인의 스테이지에서 사용될 수 있는 예시 파이프라인 유닛의 컴포넌트들을 예시한다.
도 8a 및 도 8b는 적어도 몇몇 실시예들에 따른, 블록 프로세싱 파이프라인에 병렬로 동작하는, 소프트웨어 파이프라인 및 하드웨어 파이프라인의 동작 방법들의 플로차트들이다.
도 9는 적어도 몇몇 실시예들에 따른, 프레임 내의 현재 블록의 이웃 블록들을 도시하고, 블록들에 대한 나이트 순서(knight's order) 프로세싱 방법을 더 예시한다.
도 10a 및 도 10b는 적어도 몇몇 실시예들에 따른, 다음 블록을 결정하는 알고리즘을 포함한 나이트 순서 프로세싱 방법을 그래픽으로 예시한다.
도 11a 및 도 11b는 적어도 몇몇 실시예들에 따른, 블록 프로세싱 파이프라인에 대한 나이트 순서 프로세싱 방법의 고-레벨 플로차트들이다.
도 12는 적어도 몇몇 실시예들에 따른, 현재 4-행(quadrow) 버퍼에서 캐싱될 수 있는 나이트 순서 프로세싱 방법에 따라 파이프라인에서 프로세싱되는 바와 같은 4-행의 일부를 도시한다.
도 13은 적어도 몇몇 실시예들에 따른, 나이트 순서 프로세싱 방법에 따라 프로세싱되는 중에 있는 현재 4-행 내의 블록들, 나아가 이전 4-행 버퍼에서 캐싱될 수 있는 이전 4-행의 마지막 행 내의 이웃 블록들을 그래픽으로 예시한다.
도 14는 적어도 몇몇 실시예들에 따른, 이웃 데이터가 파이프라인의 스테이지들에 있는 로컬 버퍼들에서 캐싱되는, 블록 프로세싱 파이프라인 내의 블록들을 프로세싱하는 방법의 플로차트이다.
도 15a 및 도 15b는 적어도 몇몇 실시예들에 따른, 본 명세서에 기술된 바와 같이, 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현한 블록 프로세싱 파이프라인의 스테이지들에서 사용될 수 있는 예시 파이프라인 프로세싱 유닛들의 블록 다이어그램들이다.
도 15c는 단일 프로세서가 한 그룹의 2 개 이상의 파이프라인 유닛들에 연관될 수 있는 것을 도시한다.
도 16은 적어도 몇몇 실시예들에 따른, 본 명세서에 기술된 바와 같이, 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현한 블록 프로세싱 파이프라인에 의해 구현될 수 있는 예시 블록 프로세싱 방법에서 일반적인 동작들의 고-레벨 블록 다이어그램이다.
도 17은 적어도 몇몇 실시예들에 따른, 예시 비디오 인코더 장치의 블록 다이어그램이다.
도 18은 시스템 온 어 칩(SOC)의 일 실시예의 블록 다이어그램이다.
도 19는 시스템의 일 실시예의 블록 다이어그램이다.
본 발명은 다양한 수정들 및 대안적인 형태들을 허용하지만, 본 발명의 특정 실시예들이 도면에서 예시로서 도시되고 본 명세서에서 상세히 설명될 것이다. 그러나, 그에 대한 도면 및 상세한 설명은 본 발명을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 정반대로, 의도는 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 사상 및 범주 내에 속한 모든 수정들, 균등물들 및 대안들을 포괄하기 위한 것임을 이해하여야 한다. 본 출원 전반에 걸쳐 사용되는 바와 같이, 단어 "일 수 있다(may)"는 의무적인 의미(즉, "이어야만 한다(must)"를 의미)라기보다 오히려 허용의 의미(즉, "~에 대해 가능성을 갖는다"는 의미)로 사용된다. 유사하게, 단어들 "포함하다(include)", "포함하는(including)", 및 "포함한다(includes)"는 포함하는 것을 의미하지만, 이에 제한되지 않는다.
다양한 유닛들, 회로들 또는 기타 컴포넌트들이 과제 또는 과제들을 수행하도록 "구성되는 것"으로 기술될 수 있다. 그러한 맥락에서, "~하도록 구성되는"은 동작 동안에 과제 또는 과제들을 수행하는 "회로를 가진"을 일반적으로 의미하는 구조의 광의의 설명이다. 이와 같이, 유닛/회로/컴포넌트는 유닛/회로/컴포넌트가 현재 온(on) 상태가 아닐 시에도 과제를 수행하도록 구성될 수 있다. 일반적으로, "~하도록 구성되는"에 대응하는 구조를 형성하는 회로는 하드웨어 회로들을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 과제 또는 과제들을 수행할 시에 편의상 설명에 기술될 수 있다. 그러한 설명은 "~하도록 구성된"이라는 문구를 포함하는 것으로 해석되어야 한다. 하나 이상의 과제들을 수행하도록 구성된 유닛/회로/컴포넌트를 언급하는 것은 35 U.S.C. § 112, 6항의 유닛/회로/컴포넌트에 대한 해석을 적용하지 않고자 명백히 의도하는 것이다.
다음의 설명에서, 본 발명의 철저한 이해를 제공하기 위해 다양한 특정 상세 사항들이 기재된다. 그러나, 기술분야의 통상의 기술자는 이러한 특정 상세 사항들이 없이도 본 발명이 실시될 수 있음을 인지하여야 한다. 몇몇 실례들에서, 잘 알려진 회로들, 구조들, 및 기법들은 본 발명이 모호해지는 것을 피하기 위해 상세하게 도시되지는 않는다.
블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하는 방법들 및 장치들의 다양한 실시예들이 기술된다. 입력 비디오 프레임들이 요소들의 블록들(예컨대, 16x16, 32x32, 또는 64x64 픽셀 블록들)로 세분화되고 상기 블록들에 따라 프로세싱되는 비디오 프로세싱의 맥락에서 블록 프로세싱 방법들 및 장치들의 실시예들이 본 명세서에서 일반적으로 기술된다. 블록 프로세싱 파이프라인을 포함하고 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현할 수 있는 예시 H.264 비디오 인코더의 실시예들이 본 명세서에서 기술된다. H.264 비디오 인코더는 입력 비디오 프레임들을, 입력 포맷으로부터, H.264/AVC 표준(H.264 Recommendation)에 기술된 바와 같은 H.264/AVC(Advanced Video Coding) 포맷으로 변환시킨다. 도 16은 예시 H.264 비디오 인코더의 예시 블록 프로세싱 파이프라인을 예시하고, 도 17은 블록 프로세싱 파이프라인을 포함한 예시 H.264 비디오 인코더를 예시한다. 그러나, 블록 프로세싱 방법들 및 장치들의 실시예들은, 다른 비디오 인코딩 포맷들에 대한 인코더들에서, 예를 들어 입력 비디오 프레임들을, 입력 포맷으로부터, HEVC 표준에 기술된 바와 같은 HEVC 포맷으로 변환시키는 HEVC(High Efficiency Video Encoding) 비디오 인코더들의 블록 프로세싱 파이프라인들에서, 사용될 수 있다. 블록 프로세싱 방법들 및 장치들의 실시예들을 사용할 수 있는 다른 비디오 인코더들은 H.263, MPEG-2, MPEG-4, 및 JPEG-2000 비디오 인코더들을 포함할 수 있지만, 이에 제한되지는 않는다. 그러나, 한 포맷으로 입력된 디지털 비디오 프레임들이 또 다른 포맷으로 인코딩 또는 변환되는 다양한 다른 비디오 인코더들 및/또는 디코더들(코덱들로 지칭될 수 있음)에서 구현된 블록 프로세싱 파이프라인들을 포함하지만, 이에 제한되지 않는 임의의 블록 프로세싱 파이프라인에서, 블록 프로세싱 방법들 및 장치들의 실시예들이 사용될 수 있음을 유의하여야 한다. 더욱이, 블록 프로세싱 방법들 및 장치들이 비디오 인코더들의 소프트웨어 및/또는 하드웨어 구현예들에 사용될 수 있음을 유의한다. 비디오 인코더들/디코더들과 더불어, 본 명세서에 기술된 블록 프로세싱 방법들 및 장치들은 비디오 프레임 또는 스틸 디지털 이미지로부터의 블록들이 프로세싱되는 다양한 다른 적용예들에서, 예를 들어 다양한 이미지 프로세싱 적용예들에서 스틸 디지털 이미지들을 프로세싱하는 파이프라인들에서, 사용될 수 있다. 이로써, 본 명세서에 사용된 바와 같이, 용어 프레임 또는 비디오 프레임이 임의의 디지털 이미지를 지칭하는 것으로 취급될 수도 있음을 이해하여야 한다.
본 명세서에 기술된 바와 같이, 블록 프로세싱 방법들 및 장치들의 실시예들은 2 개 이상의 병렬 블록 프로세싱 파이프라인들에 구현될 수 있다. 예를 들어, 2, 4, 8, 또는 그 초과 개의 파이프라인들은 병렬로 운영되도록 구성될 수 있고, 이때 각각의 파이프라인은 예를 들어 나이트 순서에 따라 입력된 블록들을 갖는 입력 비디오 프레임으로부터 4-행을 프로세싱한다.
픽처 요소들(픽셀들 또는 화소(pel)들로 지칭됨)의 블록들, 구체적으로 예를 들어, H.264 인코딩에 사용된 매크로블록들로 지칭된 16x16 픽셀 블록들로 입력 프레임들이 세분화되고 상기 블록들에 따라 프로세싱되는 비디오 프로세싱의 맥락에서 블록 프로세싱 방법들 및 장치들의 실시예들이 본 명세서에 일반적으로 기술된다. 그러나, 다른 크기들 및 기하학적인 구조들의, 또는 다른 요소들의 블록들이 프로세싱되는 파이프라인들에 실시예들이 적용될 수 있다. 예를 들어, HEVC 인코딩은 16x16 픽셀 내지 64x64 픽셀의 범위 내에서 변화할 수 있는 코딩 트리 유닛들(CTU들)로 지칭된 블록들을 사용한다. 몇몇 구현예들 그 예로서 H.264 인코더들에서 파이프라인으로 입력된 블록들은 매크로블록들로 지칭될 수 있고, 각각의 매크로블록은 파이프라인의 스테이지들에서 별도로 프로세싱될 수 있는 2 개 이상의 블록들 또는 파티션들을 포함한다. 예를 들어, YUV(예컨대, YUV420 포맷) 또는 YCbCr(예컨대, YCbCr 4:2:0, 4:2:2 또는 4:4:4 포맷들) 색 공간으로 인코딩된 입력 비디오 프레임들에 대해, 매크로블록은 파이프라인 내의 스테이지들에서 별도로 프로세싱될 수 있는 크로마 및 루마 요소들의 별도 블록들로 구성될 수 있다. 요소들의 블록들(예컨대, 픽셀들의 블록들)에 따라 파이프라인에서 프레임들을 프로세싱하는 적용예들과 더불어, 블록 프로세싱 방법들 및 장치들은, 디지털 이미지들(예컨대, 비디오 프레임들 또는 스틸 이미지들)이 단일 요소들(예컨대, 단일 픽셀들)에 의해 프로세싱되는 적용예들에 적용될 수 있다.
병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들
블록 프로세싱 파이프라인이 병렬로 운영되는 소프트웨어 파이프라인 및 하드웨어 파이프라인을 포함하는, 블록 프로세싱 방법들 및 장치들의 실시예들이 기술된다. 그러나, 소프트웨어 파이프라인은 하드웨어 파이프라인보다 앞서 하나 이상의 블록들을 운영한다. 파이프라인의 스테이지들 각각은 스테이지에 있는 현재 블록에 관해 하나 이상의 동작들을 수행하는 하드웨어 파이프라인 컴포넌트(예컨대, 회로)를 포함할 수 있다. 파이프라인의 적어도 하나의 스테이지는 또한, 하드웨어 컴포넌트가 현재 블록을 프로세싱하는 중에 있는 동안, 다가오는 블록(예컨대, 다음 블록)을 프로세싱하는 파이프라인의 스테이지에서 하드웨어 컴포넌트에 대한 구성을 결정하는 소프트웨어 파이프라인 컴포넌트를 포함할 수 있다. 소프트웨어 파이프라인 컴포넌트는 프로세서를 적어도 포함할 수 있다. 적어도 몇몇 실시예들에서, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 파이프라인의 업스트림 스테이지로부터 획득된 다음 블록에 관련된 정보에 따라 상기 스테이지에 있는 다음 블록을 프로세싱하는 구성을 결정할 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트는 또한, 다음 블록을 프로세싱하는 구성을 결정할 시에 스테이지에서 이전에 프로세싱된 블록에 관련된 정보를 획득 및 사용할 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인은 또한, 스테이지들에서 다음 블록들을 프로세싱하는 구성들을 결정할 시에 사용될 수 있는, 다가오는 블록들로부터의 정보를 획득하기 위해 (업스트림) 하나 이상의 블록들을 "룩 어헤드(look ahead)"할 수 있다. 소프트웨어 파이프라인 컴포넌트들은 구성들을 결정할 시에 사용된 하나 이상의 블록들에 관한 통계들을 발생시킬 수 있다. 적어도 몇몇 실시예들에서, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 상기 스테이지에서 블록 또는 블록들을 프로세싱하는 것으로부터 정보를 획득하고 정보를 파이프라인의 하나 이상의 업스트림 스테이지들로 다시 전달하여 현재 또는 다가오는 블록들을 프로세싱하는 그들 업스트림 스테이지들을 구성할 수 있다. 추가로, 적어도 몇몇 실시예들에서, 파이프라인의 말단에 있거나 그 근방에 있는 소프트웨어 파이프라인 컴포넌트는 파이프라인에서 다가오는 블록들을 프로세싱할 시에 사용되는 파이프라인의 시작에 있거나 그 근방에 있는 또 다른 소프트웨어 파이프라인 컴포넌트로, 블록 프로세싱 결과들 또는 통계들을 다시 전달할 수 있다.
스테이지에 있는 소프트웨어 파이프라인 컴포넌트에 의해 획득되고 상기 스테이지에 있는 다음 블록을 프로세싱하는 구성을 결정하기 위해 사용된 블록 정보는 예를 들어, 블록 및/또는 하나 이상의 다른 블록들에 관련된 다양한 통계들을 포함할 수 있다. 다음의 것은 몇몇 실시예들에서 사용될 수 있는 블록 통계들의 몇몇 예시들을 제공하고, 이에 제한되는 것으로 의도되지는 않는다:
Figure 112016039436589-pct00001
픽셀들의 합 (s).
Figure 112016039436589-pct00002
픽셀들 제곱의 합 (s2).
Figure 112016039436589-pct00003
블록 변동량 (s 및 s2로 추정될 수 있고, 예컨대 var = s2 - (s)^2 임).
Figure 112016039436589-pct00004
수평 및 수직 경사도들(Gx 및 Gy).
Figure 112016039436589-pct00005
Gx 및 Gy에 대한 경사도 히스토그램들.
다양한 스테이지들에 있는 하드웨어 파이프라인 컴포넌트들에 의해 수행된 동작들은 변화될 수 있고, 이로써, 스테이지들에 있는 하드웨어 파이프라인 컴포넌트들에 대한 구성은 변화될 수 있다. 이로써, 스테이지들에 있는 소프트웨어 파이프라인 컴포넌트들은 스테이지들에 있는 각자의 하드웨어 파이프라인 컴포넌트들에 따라 특정 구성 파라미터들을 결정 및 설정할 수 있다. 그러나, 정보의 분석에 기반하여 소프트웨어 파이프라인 컴포넌트에 의해 스테이지에서 결정 및 설정될 수 있는 구성 파라미터들의 일반적인 예시는 이하에서 주어지며, 이에 제한되지 않는 것으로 의도된다.
파이프라인의 하나 이상의 스테이지들은 주어진 블록 내의 픽셀들을 프로세싱하는 최적 모드를 결정하기 위한 동작들을 수행할 수 있다. 특정 스테이지에서, 하드웨어 파이프라인 컴포넌트는 하나 이상의 업스트림 스테이지들로부터 정보(및 가능하다면 하나 이상의 다운스트림 스테이지들로부터 피드백)를 수신하고 이러한 정보를 사용하여 다수의 모드들 중 특정 하나를 선택할 수 있다. 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 블록에 관련된 통계들(예컨대, 블록 변동량)을 수신, 발생, 및 분석하고 분석에 따라 하나 이상의 구성 파라미터들을 설정하여, 예를 들어, 하드웨어 파이프라인 컴포넌트로 하여금, 블록 변동량이 큰 경우에 다수의 모드들을 시도하거나, 또는 블록 변동량이 작은 경우에 특정 모드 또는 모드들을 향해 하드웨어 컴포넌트를 편향시킬 수 있다.
적어도 몇몇 실시예들에서, 병렬 소프트웨어 및 하드웨어 파이프라인들을 구현하는 블록 프로세싱 파이프라인은 나이트 순서 프로세싱이라 하는 표제 섹션에 기술된 바와 같이, 나이트 순서에 따라, 블록들을 파이프라인들로 입력시켜 블록들을 프로세싱할 수 있다. 그러나, 다른 블록 입력 및 프로세싱 순서들은 몇몇 실시예들에서 사용될 수 있다. 적어도 몇몇 실시예들에서, 병렬 소프트웨어 및 하드웨어 파이프라인들을 구현하는 블록 프로세싱 파이프라인의 적어도 하나의 스테이지는 캐싱 이웃 데이터라 하는 표제 섹션에 기술된 바와 같이, 스테이지에 있는 이웃 블록들에 대한 데이터를 캐싱하는 하나 이상의 로컬 버퍼들을 구현할 수 있다.
도 3은 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인(302) 및 하드웨어 파이프라인(304)을 구현하는 예시 블록 프로세싱 파이프라인(300)의 고-레벨 블록 다이어그램이다. 소프트웨어 파이프라인(302) 및 하드웨어 파이프라인(304)은 병렬로 프레임으로부터 의 블록들을 프로세싱하고, 이때 소프트웨어 파이프라인(302)은 하드웨어 파이프라인(304)보다 적어도 하나의 블록이 앞선다. 파이프라인(300)은 다수의 스테이지들(320)을 포함할 수 있고, 각각의 스테이지는 프레임(예컨대, 비디오 프레임)으로부터의 픽셀들의 블록에 관한 하나 이상의 동작들을 수행하도록 구성된다. 스테이지들 중 적어도 몇몇(도 3에서 스테이지들(320A 및 320B)) 각각은 소프트웨어 파이프라인 컴포넌트(322) 및 하드웨어 파이프라인 컴포넌트(326)를 포함한 적어도 하나의 파이프라인 유닛(330)을 포함할 수 있다. 각각의 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)는 하드웨어 파이프라인(304)에서 스테이지(320)에 있는 현재 블록에 관해 블록 프로세싱 방법의 하나 이상의 특정 동작들을 수행할 수 있다. 주어진 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)가 스테이지(320)에 있는 현재 블록에 관해 작업 중에 있는 동안, 스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 다음 블록일 수 있는 다가오는 블록을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트(326)를 사전구성할 수 있다. 이로써, 소프트웨어 파이프라인(302)은 하드웨어 파이프라인(304)보다 앞서 하나 이상의 블록들을 동작시킨다.
예를 들어, 도 3에 도시된 바와 같이, 스테이지(320B)에서, 하드웨어 파이프라인 컴포넌트(326B)는 블록(i)을 현재 프로세싱하는 중에 있는 반면, 소프트웨어 파이프라인 컴포넌트(322B)는 블록(i+1)을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트(326B)를 구성 중에 있으며, 스테이지(320A)에서, 하드웨어 파이프라인 컴포넌트(326A)는 블록(i+1)을 현재 프로세싱하는 중에 있는 반면, 소프트웨어 파이프라인 컴포넌트(322A)는 블록(i+2)을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트(326A)를 구성 중에 있다.
스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 블록에 대한 정보에 따라서, 각자의 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)에서 다가오는 블록(예컨대, 다음 블록)을 프로세싱하는 구성을 결정할 수 있다. 블록에 대한 정보는 업스트림 스테이지로부터 수신된 블록 정보를 적어도 포함할 수 있다. 적어도 몇몇 실시예들에서, 정보는 또한 스테이지(320)에서 이전에 프로세싱된 하나 이상의 블록들로부터의 피드백 정보를 포함할 수 있다. 소프트웨어 파이프라인 컴포넌트(322)는 결정된 구성에 따라서, 예를 들어 하드웨어 파이프라인 컴포넌트(326)에 결합된 한 세트의 레지스터들 또는 다른 메모리에 하나 이상의 구성 값들을 설정함으로써, 블록을 프로세싱하기 위해 스테이지(320)에 있는 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)을 사전구성할 수 있다. 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)에 있는 블록을 프로세싱하는 구성이 준비되면, 소프트웨어 파이프라인 컴포넌트(322)는 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)로 신호를 전송할 수 있다. 하드웨어 파이프라인 컴포넌트(326)가 이전 블록의 프로세싱을 완료하고 다음 블록이 하드웨어 파이프라인 컴포넌트(326)에 이용가능하다(예컨대, 그의 입력 버퍼로부터 판독될 준비)고 가정하면, 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)는 그 후에 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)에 의해 결정되고 사전구성된 블록에 대한 구성에 따라 다음 블록을 프로세싱하는 것을 시작할 수 있다.
적어도 몇몇 실시예들에서, 파이프라인의 초기 스테이지(310)는 소프트웨어 파이프라인(302)으로 블록 정보를, 그리고 하드웨어 파이프라인(304)으로 블록들을 입력시킬 수 있다. 초기 스테이지(310)는 블록 입력을, 예를 들어 직접 메모리 액세스(DMA)를 통해 외부 메모리로부터 획득하고, 블록 버퍼 컴포넌트(312)에서 블록들을 버퍼링할 수 있다. 블록 버퍼 컴포넌트(312)는 한 개, 두 개, 또는 그 초과의 블록들을 유지시키는 능력을 가질 수 있다. 예를 들어, 몇몇 실시예들에서, 블록 버퍼 컴포넌트(312)는 16 개의 블록들을 버퍼링할 수 있다. 적어도 몇몇 실시예들에서, 블록 버퍼 컴포넌트(312)는, 초기 스테이지(310)가 하드웨어 파이프라인(304)으로의 블록들의 입력을 시작하기 전에, 하드웨어 파이프라인(304)으로의 입력을 위한 한 개, 두 개 또는 그 초과의 블록들을 버퍼링할 수 있다. 적어도 몇몇 실시예들에서, 초기 스테이지(310)가 하드웨어 파이프라인(304)으로의 블록들의 입력을 시작하면, 초기 스테이지(310)는, 파이프라인 유닛(330A)이 다음 블록을 수신할 준비가 될 시에, 블록 버퍼 컴포넌트(312)로부터, 스테이지(320A)에 있는 파이프라인 유닛(330A)의 하드웨어 파이프라인 컴포넌트(326A)의 버퍼 메모리로 다음 블록을 기입할 수 있다. 초기 스테이지(310)는 프레임에 대한 블록 입력을 연속해서 획득하고 블록 버퍼 컴포넌트(312)로 블록들을 버퍼링하며, 블록들을 하드웨어 파이프라인(304)으로 입력시킬 수 있되, 프레임 내의 모든 블록들이 프로세싱될 때까지 그러하다.
초기 스테이지(310)에서 블록 분석 컴포넌트(314)는 다음 블록에 대한 블록 정보를 발생시키기 위해, 하드웨어 파이프라인(304)으로 입력될 다음 블록을 포함하는, 블록 버퍼 컴포넌트(312)에 현재 버퍼링되는 하나 이상의 블록들에 관한 하나 이상의 분석 기능들을 수행할 수 있다. 블록 정보는 예를 들어, 하나 이상의 블록 통계들을 포함할 수 있다. 발생될 수 있는 블록 통계들의 몇몇 비-제한적인 예시들은 이전에 제공된다. 블록 정보가 다음 블록에 대해 발생되면, 초기 스테이지(310)는 파이프라인(300)의 스테이지(320A)에 있는 파이프라인 유닛(330A)의 소프트웨어 파이프라인 컴포넌트(322A)로 블록 정보를 전송할 수 있다. 블록 분석 컴포넌트(314)는 블록 정보를 연속해서 발생시키고, 블록 정보를 소프트웨어 파이프라인(302)으로 입력시킬 수 있되, 프레임 내의 모든 블록들이 프로세싱될 때까지 그러하다.
적어도 몇몇 실시예들에서, 각각의 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 한 개, 두 개, 또는 그 초과의 다가오는 블록들에 대한 블록 정보를 버퍼링하는 메모리를 포함할 수 있다. 적어도 몇몇 실시예들에서, 각각의 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)는 스테이지(320)에서 프로세싱될 하나 이상의 블록들을 저장하는 메모리를 포함할 수 있다. 적어도 몇몇 실시예들에서, 메모리는 더블 버퍼일 수 있고, 그 결과 하드웨어 파이프라인 컴포넌트(326)가 메모리로부터 현재 블록을 판독 중에 있는 동안,이전 스테이지는 메모리에 다음 블록을 기입할 수 있다.
적어도 몇몇 실시예들에서, 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는, 각각의 블록에 대한 블록 정보를, 다운스트림 스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)로 푸싱할 수 있고, 그 결과 다운스트림 스테이지(320)에 있는 소프트웨어 파이프라인 컴포넌트(322)는 스테이지에 있는 각자의 하드웨어 파이프라인 컴포넌트(326)를 구성할 수 있다. 적어도 몇몇 실시예들에서, 스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는, 스테이지(320)에 있는 블록을 프로세싱하는 사전구성을 완료한 이후에서야, 블록에 대한 블록 정보를 다운스트림 스테이지(320)로 푸싱한다. 적어도 몇몇 실시예들에서, 블록에 대한 블록 정보는, 블록 정보를 다운스트림 스테이지(320)로 푸싱하기 전에, 스테이지(320)에서 이용가능한 정보에 따라 업데이트될 수 있다.
스테이지(320)에 있는 하드웨어 파이프라인 컴포넌트(326)가 블록의 프로세싱을 완료하면, 프로세싱된 블록은 프로세싱을 위해 다음 스테이지(320)에 있는 하드웨어 파이프라인 컴포넌트(326)로 전송될 수 있다. 다음 스테이지(320)에 있는 하드웨어 파이프라인 컴포넌트(326)는 그의 메모리에 블록을 유지시킬 수 있되, 하드웨어 파이프라인 컴포넌트(326)가 현재 블록의 프로세싱을 완료하고 스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)로부터, 블록을 프로세싱하는 구성이 준비되었다라는 신호를 수신할 때까지 그러하다. 프로세싱된 블록이 대신에 파이프라인(300)의 마지막 스테이지(320)에 의해 파이프라인(300)의 외부 메모리에 기입될 수 있다는 것을 유의한다.
도 4a 내지 도 4c는 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현하는 예시 블록 프로세싱 파이프라인 내의 스테이지의 파이프라인 유닛에 있는 프로세싱 블록들을 예시한다. 도 4a 내지 도 4c는 소프트웨어 파이프라인 컴포넌트(322) 및 하드웨어 파이프라인 컴포넌트(326)를 포함한 블록 프로세싱 파이프라인 내의 스테이지에서 사용될 수 있는 파이프라인 유닛(330)을 도시한다. 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)는 하드웨어 파이프라인(304)에서 스테이지에 있는 현재 블록에 관해 블록 프로세싱 방법의 하나 이상의 특정 동작들을 수행할 수 있다. 하드웨어 파이프라인 컴포넌트(326)가 현재 블록에 관해 작업 중에 있는 동안, 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 다가오는 블록, 예를 들어 다음 블록을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트(326)를 사전구성할 수 있다. 이로써, 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)보다 앞서 적어도 하나의 블록을 동작시킨다.
파이프라인 유닛(330)은 또한 구성 메모리(도 4a 내지 도 4c에서 콘피그(config) 메모리(324A 및 324B)로서 도시됨)를 포함할 수 있다. 구성 메모리는 예를 들어, 한 세트의 하드웨어 레지스터들일 수 있다. 도 4a 내지 도 4c에 도시된 바와 같이, 적어도 몇몇 실시예들에서, 구성 메모리는 2 개의 메모리들(콘피그 메모리(324A 및 324B))로 파티션될 수 있고, 그 결과 하드웨어 파이프라인 컴포넌트(326)가 타 측 메모리로부터 판독 중에 있는 동안, 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)는 일 측 메모리에 기입될 수 있다. 구성 메모리는 예를 들어, 소프트웨어 파이프라인 컴포넌트(322)가 다음 블록에 대한 구성을 기입하는 한 서브세트의 액티브 레지스터들, 및 하드웨어 파이프라인 컴포넌트(326)가 현재 블록에 대한 구성을 판독하는 한 서브세트의 섀도우(shadow) 레지스터들로 파티션된 한 세트의 레지스터들일 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트(322)는 콘피그 메모리들(324A 및 324B) 중 어느 하나에 기입될 수 있고, 하드웨어 파이프라인 컴포넌트(326)는 콘피그 메모리들(324A 및 324B) 중 어느 하나로부터 판독될 수 있다; 2 개의 컴포넌트들은 메모리들(324) 사이에서 둘 다 토글링(toggling)될 수 있고, 이때 하드웨어 파이프라인 컴포넌트(326)가 타 측의 것으로부터 판독 중에 있는 동안, 소프트웨어 파이프라인 컴포넌트(322)는 일 측의 것에 기입된다. 대안으로, 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트(322)는 콘피그 메모리들(324) 중 하나(예컨대, 콘피그 메모리(324A))에만 기입될 수 있고, 하드웨어 파이프라인 컴포넌트(326)는 다른 콘피그 메모리(324)(예컨대, 콘피그 메모리(324B))만으로부터 판독될 수 있다; 하드웨어 파이프라인 컴포넌트(326)가 새로운 구성에 대해 준비되고 구성이 준비될 시에, 구성은 콘피그 메모리(324A)로부터 콘피그 메모리(324B)로 복제될 수 있다. 단일 구성 메모리만 사용되거나, 또는 3 개 이상의 구성 메모리들이 사용되는 실시예들이 또한 구현될 수 있음을 유의한다.
도 4a는 초기 상태에 있는 스테이지의 파이프라인 유닛(330)을 도시한다. 소프트웨어 파이프라인 컴포넌트(322)는 업스트림 스테이지로부터, 상기 스테이지에서 프로세싱될 프레임으로부터의 제1 블록(블록(i))에 대한 블록 정보를 수신한다. 하드웨어 파이프라인 컴포넌트(326)는 블록을 현재 프로세싱하는 중에 있지 않다. 소프트웨어 파이프라인 컴포넌트(322)는 수신된 블록 정보에 따라 블록(i)을 프로세싱하는 구성을 결정하고, 구성을 콘피그 메모리(324A)에 기입한다. 소프트웨어 파이프라인 컴포넌트(322)는, 예를 들어 고 비트 또는 플래그를 설정함으로써, 블록(i)에 대한 구성이 준비되었다라는 신호를 파이프라인 유닛(330)의 하드웨어 파이프라인 컴포넌트(326)로 전송한다.
도 4b는 다음 사이클에 있는 파이프라인 유닛(330)을 도시한다. 소프트웨어 파이프라인 컴포넌트(322)는 블록(i)에 대한 블록 정보를 다운스트림 스테이지로 푸싱한다. 하드웨어 파이프라인 컴포넌트(326)는 블록(i)을 수신하고, 콘피그 메모리(324A) 내의 구성에 따라 블록(i)을 프로세싱한다. 소프트웨어 파이프라인 컴포넌트(322)는 스테이지에서 프로세싱될 다음 블록(블록(i+1))에 대한 블록 정보를 수신한다. 소프트웨어 파이프라인 컴포넌트(322)는 수신된 블록 정보에 따라 블록(i+1)을 프로세싱하는 구성을 결정하고, 구성을 콘피그 메모리(324B)에 기입한다. 소프트웨어 파이프라인 컴포넌트(322)는, 예를 들어 고 비트 또는 플래그를 설정함으로써, 블록(i+1)에 대한 구성이 준비되었다라는 신호를 하드웨어 파이프라인 컴포넌트(326)로 전송한다.
도 4c는 다음 사이클에 있는 파이프라인 유닛(330)을 도시한다. 소프트웨어 파이프라인 컴포넌트(322)는 블록(i+1)에 대한 블록 정보를 다운스트림 스테이지로 푸싱한다. 하드웨어 파이프라인 컴포넌트(326)는 블록(i+1)을 수신하고, 콘피그 메모리(324B) 내의 구성에 따라 블록(i+1)을 프로세싱한다. 소프트웨어 파이프라인 컴포넌트(322)는 스테이지에서 프로세싱될 다음 블록(블록(i+2))에 대한 블록 정보를 수신한다. 소프트웨어 파이프라인 컴포넌트(322)는 수신된 블록 정보에 따라 블록(i+2)을 프로세싱하는 구성을 결정하고, 구성을 콘피그 메모리(324A)에 기입한다. 소프트웨어 파이프라인 컴포넌트(322)는, 예를 들어 고 비트 또는 플래그를 설정함으로써, 블록(i+2)에 대한 구성이 준비되었다라는 신호를 하드웨어 파이프라인 컴포넌트(326)로 전송한다.
도 4c는 또한, 스테이지에서 이전에 프로세싱된 블록으로부터의 정보가 상기 스테이지에 있는 소프트웨어 파이프라인 컴포넌트(322)에 의해 획득되고 상기 스테이지에 있는 하드웨어 파이프라인 컴포넌트(326)에 의해 프로세싱될 다음 블록에 대한 구성을 결정할 시에 사용될 수 있음을 도시한다. 하드웨어 파이프라인 컴포넌트(326)는 도 4b에 도시된 바와 같이, 이전 사이클에서 블록(i)을 프로세싱하는 것을 마쳤고, 이제 도 4c에서 블록(i+1)을 프로세싱하는 중에 있다. 이로써, 스테이지에 있는 블록(i)의 프로세싱으로부터의 정보는 이용가능하고, 스테이지에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)로 다시 공급될 수 있다. 스테이지에 있는 블록(i)의 프로세싱으로부터의 이러한 정보는 블록(i+2)에 대한 구성을 결정하기 위해, 업스트림 스테이지로부터 수신된 블록(i+2)에 대한 블록 정보와 조합하여 사용될 수 있다. 이로써, 스테이지에 있는 블록들의 프로세싱으로부터의 정보의 피드백은, 구성이 발생 중에 있는 블록보다 2 개 앞선 블록에 대해 있을 수 있다.
대안으로, 몇몇 구현예들에서, 소프트웨어 파이프라인 컴포넌트(322)는 스테이지에 있는 하드웨어 파이프라인 컴포넌트(326)에 의해 현재 블록의 프로세싱의 완료를 기다리고, 다음 블록에 대한 구성을 결정하기 위해 이러한 정보를 사용할 수 있다. 이러한 경우에서, 스테이지에 있는 블록들의 프로세싱으로부터의 정보의 피드백은, 구성이 발생 중에 있는 블록보다 1 개만 앞선 블록에 대해 있을 수 있다.
도 5는 적어도 몇몇 실시예들에 따른, 적어도 하나의 스테이지가 소프트웨어 파이프라인에 의해 스킵되는, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 예시 블록 프로세싱 파이프라인(300)을 예시한다. 몇몇 파이프라인 구현예들에서, 파이프라인(300)의 하나 이상의 파이프라인 유닛들(330)은 동적 구성을 요구하지 않는 하드웨어 파이프라인 컴포넌트(326)를 포함할 수 있다. 도 5는 3 개의 스테이지들(320A, 320B, 및 320C)를 도시한다. 스테이지(320A)는 소프트웨어 파이프라인 컴포넌트(322A) 및 하드웨어 파이프라인 컴포넌트(326A) 둘 다를 포함한 파이프라인 유닛(330A)을 포함하고, 스테이지(320C)는 소프트웨어 파이프라인 컴포넌트(322B) 및 하드웨어 파이프라인 컴포넌트(326C) 둘 다를 포함한 파이프라인 유닛(330C)을 포함한다. 그러나, 스테이지(320B)는, 컴포넌트(326)가 블록에 관해 수행되는 동작(들)이 모든 블록들에 대해 동일할 시에, 동적 구성을 요구하지 않는 하드웨어 파이프라인 컴포넌트(326B)를 포함한 파이프라인 유닛(330B)을 포함한다. 이로써, 파이프라인 유닛(330B)은 소프트웨어 파이프라인 컴포넌트(322)를 활용하지 않는다.
도 5에 도시된 바와 같이, 스테이지(320A)에 있는 하드웨어 파이프라인 컴포넌트(326A)는 블록(i+2)을 현재 프로세싱하는 중에 있으면서, 스테이지(320A)에 있는 소프트웨어 파이프라인 컴포넌트(322A)는 스테이지(320A)에 있는 다음 블록(i+3)을 프로세싱하는 구성을 결정 및 설정 중에 있다. 스테이지(320B)에 있는 하드웨어 파이프라인 컴포넌트(326B)는 블록(i+1)을 현재 프로세싱하는 중에 있다. 스테이지(320C)에 있는 하드웨어 파이프라인 컴포넌트(326C)는 블록(i)을 현재 프로세싱하는 중에 있으면서, 스테이지(320C)에 있는 소프트웨어 파이프라인 컴포넌트(322B)는 스테이지(320C)에 있는 다음 블록(i+1)을 프로세싱하는 구성을 결정 및 설정 중에 있다. 적어도 몇몇 실시예들에서, 블록(i+2)에 대한 블록 정보는, 스테이지(320A)가 블록(i+2)을 프로세싱하는 구성을 완료하면 소프트웨어 파이프라인 컴포넌트(322A)로부터 소프트웨어 파이프라인 컴포넌트(322B)로 다운스트림 푸싱되고, 소프트웨어 파이프라인 컴포넌트(322B)에서 버퍼링될 수 있되, 소프트웨어 파이프라인 컴포넌트(322B)가 블록(i+2)을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트(322C)를 구성할 준비가 될 때까지 그러하다. 대안으로, 스테이지(320B)는 블록 정보가 스테이지(320A)로부터 푸싱되고, 블록 정보가 스테이지(320C)로 푸싱되는 버퍼들을 포함할 수 있다. 또 다른 대안으로서, 스테이지(320A)는 이행된 블록 정보를 버퍼링할 수 있고, 이때에는 스테이지(320C)가 상기 정보에 대해 준비될 때까지이다.
도 6은 적어도 몇몇 실시예들에 따른, 적어도 하나의 스테이지가 다수의 파이프라인 유닛들을 포함하는, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 예시 블록 프로세싱 파이프라인(300)을 예시한다. 도 6에 도시된 바와 같이, 스테이지(320A)는 소프트웨어 파이프라인 컴포넌트(322A) 및 하드웨어 파이프라인 컴포넌트(326A)를 포함한 단일 파이프라인 유닛(330A)을 포함하고, 스테이지(320C)는 소프트웨어 파이프라인 컴포넌트(322C) 및 하드웨어 파이프라인 컴포넌트(326D)를 포함한 단일 파이프라인 유닛(330D)을 포함한다. 그러나, 스테이지(320B)는 2 개의 파이프라인 유닛들(330B 및 330C)을 포함한다. 파이프라인 유닛(330B)은 소프트웨어 파이프라인 컴포넌트(322B) 및 하드웨어 파이프라인 컴포넌트(326B)를 포함한다. 파이프라인 유닛(330C)은 하드웨어 파이프라인 컴포넌트(326C)만 포함한다. 하드웨어 파이프라인(304)에서, 스테이지(320A)에 있는 파이프라인 유닛(330A)으로부터의 블록들 또는 블록들 중 일부들은 스테이지(320B)의 하드웨어 파이프라인 컴포넌트(326B) 및 하드웨어 파이프라인 컴포넌트(326C) 둘 다를 통과하여, 프로세싱된 블록들 또는 블록들의 일부들을 스테이지(320C)에 있는 파이프라인 유닛(330D)의 하드웨어 파이프라인 컴포넌트(326D)로 출력시킨다. 소프트웨어 파이프라인(302)에서, 블록 정보는 스테이지(320A)에 있는 소프트웨어 파이프라인 유닛(322A)로부터 스테이지(320B)에 있는 소프트웨어 파이프라인 유닛(322B)으로, 그리고 스테이지(320B)에 있는 소프트웨어 파이프라인 유닛(322B)으로부터 스테이지(320C)에 있는 소프트웨어 파이프라인 유닛(322C)으로 전달된다.
도시되지는 않았지만, 몇몇 구현예들에서, 스테이지는 소프트웨어 파이프라인 컴포넌트(322) 및 하드웨어 파이프라인 컴포넌트(326) 둘 다를 포함한 2 개 이상의 파이프라인 유닛들(330)을 포함할 수 있다. 이러한 경우에서, 업스트림 스테이지는 스테이지(320)에 있는 각각의 파이프라인 유닛의 소프트웨어 파이프라인 컴포넌트(322)로 블록 정보를 공급할 수 있다. 그러나, 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트들(322) 중 하나만 다운스트림 스테이지(320)에 있는 파이프라인 유닛(330)의 소프트웨어 파이프라인 컴포넌트(322)로 블록 정보를 푸싱할 수 있다.
도 7은 적어도 몇몇 실시예들에 따른, 소프트웨어 파이프라인 및 하드웨어 파이프라인을 구현한 블록 프로세싱 파이프라인의 스테이지에서 사용될 수 있는 예시 파이프라인 유닛의 컴포넌트들을 예시한다. 도 7에 도시된 바와 같이, 파이프라인 유닛(400)의 하드웨어 파이프라인 컴포넌트(404)는 메모리(432) 및 유닛 코어(430)를 적어도 포함할 수 있다. 유닛 코어(430)는 블록 프로세싱 파이프라인의 특정 스테이지에 있는 블록 또는 블록의 일부에 관해 또는 대해 특정 동작을 수행하도록 구성된 컴포넌트(예컨대, 회로)일 수 있다. 메모리(432)는, 예를 들어, 유닛 코어(430)가 메모리(432)로부터 블록에 대한 데이터를 판독 및 프로세싱하는 것을 허용하면서, 다음 블록에 대한 데이터가 이전 파이프라인 유닛으로부터 메모리(432)에 기입되는 중에 있는 더블-버퍼형 메모리일 수 있다.
도 7에 도시된 바와 같이, 메모리(432) 및 유닛 코어(430)를 포함한 하드웨어 파이프라인 컴포넌트(404)와 더불어, 파이프라인 유닛(400)은 또한, 프로세서(410) 및 메모리(412)를 적어도 포함한 소프트웨어 파이프라인 컴포넌트(402)를 포함할 수 있다. 프로세서(410)는 예를 들어, 모바일 또는 M-종류 프로세서일 수 있다. 프로세서들(410)은 예를 들어, 소프트웨어 파이프라인 컴포넌트(402)에서 수신된 블록 정보에 따라 하드웨어 파이프라인 유닛(404)에서 프로세싱될 다음 블록에 대한 구성들을 결정 및 설정하도록 구성될 수 있다. 적어도 몇몇 실시예들에서, 프로세서(410)는 또한 다양한 적용예들에 대한 블록 프로세싱 파이프라인에 의해 구현된 알고리즘들에서 유연성을 허용하기 위해, 예를 들어 저-레벨 펌웨어 마이크로코드로 구성가능할 수 있다.
적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트(402)는 파이프라인의 이전 (업스트림) 스테이지로부터 블록 정보를 수신하고 파이프라인의 차후 (다운스트림) 스테이지로 블록 정보를 전송하도록 구성될 수 있다. 추가로, 파이프라인의 마지막 스테이지에 있는 소프트웨어 파이프라인 컴포넌트(402)는 파이프라인의 업스트림 스테이지(예컨대 제1 스테이지)로 피드백 데이터를 전송하도록 구성될 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트(402)는 또한 파이프라인 유닛(400)의 하드웨어 파이프라인 컴포넌트(404)에 의해 이전에 프로세싱된 블록에 대한 정보를 수신할 수 있다.
소프트웨어 파이프라인 컴포넌트(402)는 파이프라인의 업스트림 스테이지로부터 수신된 블록 정보를 메모리(412)에 버퍼링하고, 블록 정보를 메모리(412)로부터 파이프라인의 다운스트림 스테이지로 푸싱할 수 있다. 적어도 몇몇 실시예들에서, 메모리(412)는 더블 버퍼 메모리일 수 있고, 그 결과 프로세서(410)가 메모리(412)로부터 이전 블록에 대한 블록 정보를 액세스하는 중에 있는 동안, 업스트림 스테이지는 다음 블록에 대한 블록 정보를 소프트웨어 파이프라인 컴포넌트(402)로 푸싱할 수 있다. 몇몇 실시예들에서, 메모리(412)는, 예를 들어 이전 스테이지가 도 5에서 스테이지(320B)에 의해 도시된 바와 같이, 소프트웨어 파이프라인 컴포넌트를 포함하지 않은 경우들에서, 3 세트 이상의 블록 정보를 버퍼링할 수 있다.
프로세서들(410)은 메모리(412)로부터 다음 블록에 대한 블록 정보를 판독하고 블록 정보에 따라 다음 블록에 대한 구성을 결정할 수 있다. 적어도 몇몇 실시예들에서, 프로세서(410)는 또한 파이프라인 유닛(400)의 하드웨어 파이프라인 컴포넌트(404)에 의해 이전에 프로세싱된 블록에 대한 정보를 수신하고, 다음 블록에 대한 구성을 결정할 시에 그 정보를 사용할 수 있다.
도 7에 도시된 바와 같이, 파이프라인 유닛(400)은 또한 소프트웨어 파이프라인 컴포넌트(402)와 하드웨어 파이프라인 컴포넌트(404) 사이에서 인터페이스(406)를 포함할 수 있다. 적어도 몇몇 실시예들에서, 인터페이스(406)는 한 세트의 레지스터들일 수 있다. 그러나, 인터페이스(406)가 달리 구현될 수 있음을 유의한다. 도 7에 도시된 바와 같이 파이프라인 유닛(400)에서, 인터페이스(406)는 콘피그 메모리(420A), 콘피그 메모리(420B), 및 고(go)(422)를 적어도 포함한다. 적어도 몇몇 실시예들에서, 프로세서(410)는 콘피그 메모리들(420A 및 420B) 중 어느 하나에 기입될 수 있고, 유닛 코어(430)는 콘피그 메모리들(420A 및 420B) 중 어느 하나로부터 판독될 수 있다; 프로세서(410) 및 유닛 코어(430)는 2 개의 메모리들(420) 사이에서 토글링될 수 있고, 이때 유닛 코어(430)가 타 측의 것으로부터 판독 중에 있는 동안, 프로세서(410)는 일 측의 것에 기입된다. 대안으로, 몇몇 실시예들에서, 프로세서(410)는 콘피그 메모리들(420) 중 하나(예컨대, 콘피그 메모리(420A))에만 기입될 수 있고, 유닛 코어(430)는 다른 콘피그 메모리(420)(예컨대, 콘피그 메모리(420B))만으로부터 판독될 수 있다; 유닛 코어(430)가 새로운 구성에 대해 준비되고 구성이 준비될 시에, 구성은 콘피그 메모리(420A)로부터 콘피그 메모리(420B)로 복제될 수 있다. 단일 구성 메모리만 사용되거나, 또는 3 개 이상의 구성 메모리들이 사용되는 실시예들이 또한 구현될 수 있음을 유의한다.
고(422)는 예를 들어, 레지스터 또는 다른 메모리에서 하나 이상의 비트들로서 구현될 수 있거나, 또는 달리 구현될 수 있다. 적어도 몇몇 실시예들에서, 프로세서(410)가 다음 블록에 대한 구성을 완료하고 구성으로 콘피그 메모리(420)(예컨대, 콘피그 메모리(420A))를 설정할 시에, 프로세서(410)는, 다음 블록에 대한 구성이 콘피그 메모리(420)(예컨대, 콘피그 메모리(420A))에 준비되었다라는 신호를 유닛 코어(430)로 전송하기 위해, 고(422)를 설정할 수 있다. 유닛 코어(430)는, 현재 블록의 프로세싱이 완료되고 다음 블록이 메모리(432)에 준비되는 경우, 고(422)가 다음 블록에 대해 설정되면, 다음 블록을 프로세싱하기 위해 시작될 수 있다. 그렇지 않으면, 유닛 코어(430)는 현재 블록 및/또는 다음 블록의 프로세싱의 완료가 메모리(432)에 준비될 때까지 기다릴 수 있다. 초기에 (파이프라인 내의 제1 블록에 대해), 프로세서(410)가 제1 블록에 대한 스테이지를 구성할 시에, 어떠한 블록도 스테이지에서 프로세싱되는 중에 있지 않고, 이로써, 유닛 코어(430)는, 고(422)가 제1 블록에 대해 설정되고 제1 블록이 메모리(432)에 준비되면, 제1 블록을 프로세싱하기 위해 시작될 수 있음을 유의한다. 유닛 코어(430)가 콘피그 메모리(420) 내의 구성으로 이행되면, 유닛 코어(430)는 콘피그 메모리(420)가 다음 블록에 대한 구성을 수신하기 위해 이용가능하다는 신호를 프로세서(410)로 전송하기 위해 고(422)를 클리어할 수 있다.
도 8a 및 도 8b는 적어도 몇몇 실시예들에 따른, 프레임으로부터의 블록들을 프로세싱하기 위해 블록 프로세싱 파이프라인에 병렬로 동작하는, 소프트웨어 파이프라인 및 하드웨어 파이프라인의 동작 방법들의 플로차트들이다. 도 8a는 소프트웨어 파이프라인에 대한 스테이지에서의 동작을 도시하고, 도 8b는 하드웨어 파이프라인에 대한 스테이지에서의 동작을 도시한다. 소프트웨어 파이프라인이 하드웨어 파이프라인보다 앞서 적어도 하나의 블록을 운영함을 유의한다.
도 8a를 참조하면, 500에 나타난 바와 같이, 스테이지에 있는 소프트웨어 파이프라인 컴포넌트는 블록 정보를 수신한다. 블록 정보는 업스트림 스테이지부터 수신된 블록 정보, 및/또는 다운스트림 스테이지로부터 수신된 블록 정보를 포함할 수 있다. 적어도 몇몇 실시예들에서, 소프트웨어 파이프라인 컴포넌트는 또한 스테이지에서 이전에 프로세싱된 프레임의 블록으로부터 정보를 수신할 수 있다. 한 개, 두 개, 또는 그 초과의 블록들에 대한 블록 정보는 소프트웨어 파이프라인 컴포넌트의 로컬 메모리에 버퍼링될 수 있다. 요소(500)로 되돌아가는 화살표에 의해 나타난 바와 같이, 요소(500)는 프로세싱될 프레임 내의 블록들이 있는 한 반복적으로 수행될 수 있다.
502에 나타난 바와 같이, 다음 블록에 대한 블록 정보가 스테이지에서 준비되면, 소프트웨어 파이프라인 컴포넌트는 블록에 대한 수신 정보에 따라 블록에 대한 구성을 결정할 수 있다. 504에 나타난 바와 같이, 소프트웨어 파이프라인 컴포넌트는 블록에 대한 구성을 스테이지의 구성 메모리에 기입할 수 있다. 506에 나타난 바와 같이, 소프트웨어 파이프라인 컴포넌트는 고 비트를 설정하거나, 또는 그렇지 않으면, 다음 블록에 대한 구성이 구성 메모리에 준비되었다라는 신호를, 스테이지에 있는 하드웨어 파이프라인 컴포넌트로 전송할 수 있다. 506에 나타난 바와 같이, 소프트웨어 파이프라인 컴포넌트는 그 후에 블록에 대한 블록 정보를 다운스트림 스테이지로 푸싱할 수 있다. 510에서, 스테이지에서 프로세싱될 프레임으로부터의 블록들이 더 있는 경우, 소프트웨어 파이프라인 방법은 다음 블록에 대해 하드웨어 파이프라인 컴포넌트를 구성하는 것을 시작하기 위해 요소(502)로 되돌아 갈 수 있다. 그렇지 않으면, 이러한 스테이지에서 프레임의 프로세싱은 이행되고, 방법은 완료된다.
도 8b를 참조하면, 스테이지에 있는 하드웨어 파이프라인 컴포넌트는 이전 스테이지로부터 프로세싱될 블록들을 수신한다. 블록 정보는 하드웨어 파이프라인 컴포넌트의 로컬 메모리에 버퍼링될 수 있다. 적어도 몇몇 실시예들에서, 로컬 메모리는 더블 버퍼 메모리일 수 있고, 그 결과 하드웨어 파이프라인 컴포넌트가 메모리로부터 현재 블록을 프로세싱하는 중에 있는 동안, 이전 스테이지는 다음 블록을 스테이지에 기입할 수 있다. 요소(550)로 되돌아가는 화살표에 의해 나타난 바와 같이, 요소(550)는 프로세싱될 프레임 내의 블록들이 있는 한 반복적으로 수행될 수 있다.
552에서, 하드웨어 파이프라인 컴포넌트가 블록을 현재 프로세싱하는 중에 있지 않고, 다음 블록이 메모리에 준비되며, 소프트웨어 파이프라인 컴포넌트가, 다음 블록에 대한 구성이 구성 메모리에 (예컨대, 고 비트 또는 플래그를 설정함으로써) 준비되었다라는 신호를 하드웨어 파이프라인 컴포넌트로 전송하는 경우, 하드웨어 파이프라인 컴포넌트는 다음 블록을 프로세싱하기 위해 시작될 수 있다. 적어도 몇몇 실시예들에서, 이들 3 개의 조건들 중 어느 것도 충족되지 않는 경우, 하드웨어 파이프라인 컴포넌트는 3 개 모두가 충족될 때까지 기다린다. 그러나, 프로세싱될 프레임 내의 제1 블록에 대해, 제1 블록이 하드웨어 파이프라인 컴포넌트에서 프로세싱을 위해 수신될 시에, 하드웨어 파이프라인 컴포넌트에서 프로세싱 중인 현재 블록이 있지 않을 것임을 유의한다.
모든 필요 조건들이 충족되는 경우, 554에 나타난 바와 같이, 하드웨어 파이프라인 컴포넌트는 구성 메모리 내의 구성에 따라 다음 블록을 프로세싱하는 구성을 설정한다. 556에 나타난 바와 같이, 하드웨어 파이프라인 컴포넌트는 고 비트를 클리어하거나, 또는 그렇지 않으면, 구성 메모리가 이용가능하다는 신호를 소프트웨어 파이프라인 컴포넌트로 전송한다. 558에 나타난 바와 같이, 하드웨어 파이프라인 컴포넌트는 블록에 대한 구성에 따라 블록을 프로세싱한다. 560에 나타난 바와 같이, 하드웨어 파이프라인 컴포넌트는 프로세싱된 블록을 다음 스테이지에 기입한다. 대안으로, 마지막 스테이지에서, 프로세싱된 블록은 직접 메모리 액세스(DMA)를 통해 메모리, 예를 들어 외부 메모리에 기입될 수 있다. 562에서, 스테이지에서 프로세싱될 프레임으로부터의 블록들이 더 있는 경우, 하드웨어 파이프라인 방법은 모든 조건들이 충족될 시에 다음 블록을 프로세싱하는 것을 시작하기 위해 요소(552)로 되돌아 갈 수 있다. 그렇지 않으면, 이러한 스테이지에서 프레임의 프로세싱은 이행되고, 방법은 완료된다.
도 8b의 요소들(554 내지 560)이 스테이지에 있는 하드웨어 파이프라인 컴포넌트에 의해 수행되기 전에, 도 8a의 요소들(502 내지 508)이 프레임 내의 초기 블록에 대한 스테이지에 있는 소프트웨어 파이프라인 컴포넌트에 의해 수행됨을 유의한다. 그 이후에, 도 8a의 요소들(502 내지 508)은 다음 블록에 대한 하드웨어 파이프라인 컴포넌트를 구성하기 위해 스테이지에 있는 소프트웨어 파이프라인 컴포넌트에 의해 수행될 수 있으면서, 도 8b의 요소들(554 내지 560)은 현재 블록을 프로세싱하기 위해 하드웨어 파이프라인 컴포넌트에 의해 수행된다.
나이트 순서 프로세싱
종래의 방법들에서와 같은 스캔 순서에 따라 파이프라인 내의 블록들을 프로세싱하는 것보다 오히려, 블록들이 본 명세서에서 "나이트 순서"로 지칭되는 순서에 따라 파이프라인에 입력되어 프로세싱되는 블록 프로세싱 방법들 및 장치들의 실시예들이 기술된다. 나이트 순서는, 나이트가 1 행 아래로, 그리고 2 열들 좌측으로 이동하는 체스 나이트 피스(piece)의 이동과 관련된다. 그러나, 본 명세서에 사용된 바와 같이 "나이트 순서"가 1 행 아래로의 및 p 열들 좌측으로의 이동들을 보다 일반적으로 망라하고, 이때 p가 2일 수 있지만, 반드시 2 이지는 않음을 유의한다.
나이트 순서 프로세싱 방법은, 예를 들어, 제1 블록을 프로세싱하는 파이프라인의 다운스트림 스테이지로부터, 제1 블록으로부터의 데이터에 의존하는 제2 블록을 프로세싱하는 파이프라인의 업스트림 스테이로 데이터의 피드백을 용이하게 하는, 파이프라인 내의 인접한 블록들 사이에서 간격(spacing)(하나 이상의 스테이지들)을 제공할 수 있다. 블록 프로세싱 파이프라인의 하나 이상의 스테이지들은, 주어진 블록이 프로세싱될 시에, 하나 이상의 다른 이웃 블록들로부터 정보를 요구할 수 있다. 도 9는 정보가 요구될 수 있는 현재 블록(m, n)의 이웃들 - 좌측(m-1, n); 상측(m, n-1); 상측-좌측(m-1, n-1); 상측-우측(m+1, n-1); 및 상측-우측-우측(m+2, n-1)을 도시한다. 이웃 블록(들)으로부터의 정보에 대한 이들 요건들은 의존성들로 지칭될 수 있다. 예를 들어, 도 9를 참조하면, 블록(m, n)의 좌측 이웃으로부터의 정보는 블록에 관한 특정 동작을 수행하는 것이 요구될 수 있다. 나이트 순서 프로세싱 방법에서, 블록(m, n) 바로 뒤에 블록(m+1, n)을 파이프라인 내로 입력하는 것보다는 오히려, 파이프라인으로 입력된 다음 블록은 블록(m-2, n+1)이다. 스캔 순서보다는 오히려 나이트 순서로 파이프라인 내로 블록들을 입력시키는 것은 파이프라인에서 행 상의 인접한 블록들 사이에서 간격(예컨대, 하나 이상의 스테이지들)을 제공한다.
나이트 순서 프로세싱 방법의 적어도 몇몇 실시예들에서, 입력 프레임 내의 블록들의 행들은 본 명세서에 4-행들로 지칭되는 세트들의 4 개 행들로 분할될 수 있고, 이때 나이트 순서 프로세싱 방법은 4-행 경계들에 의해 통제된다. 도 9를 참조하면, 나이트 순서 프로세싱을 갖는 4-행 경계들을 사용할 시에, 블록(m, n)이 파이프라인으로 입력될 시에 블록(m-1, n)은 4 개의 다운스트림 스테이지들일 것이며, 블록(m+1, n)이 파이프라인으로 입력될 시에 블록(m, n)은 4 개의 다운스트림 스테이지들일 것이다. 이로써, 행 상에 인접한 블록들은 파이프라인에서 4 개의 스테이지들로 이격될 것이다. 이로써, 좌측 이웃 정보에 의존하는 동작들이 블록에 관해 수행되는 스테이지들에서, 좌측 이웃에 대한 정보가 블록들을 스캔 순서로 프로세싱하는 경우에서보다 적은 레이턴시(latency)로 손쉽게 얻어질 수 있는 가능성이 더 크다. 좌측 이웃에 관한 의존성들과 더불어, 블록 프로세싱 방법의 하나 이상의 동작들은 이전(또는 윗) 행으로부터의 이웃 블록들 그 예로서 도 9에 도시된 바와 같이, 상측 이웃, 상측-좌측 이웃, 상측-우측 이웃, 및 상측-우측-우측 이웃 블록들에 의존할 수 있다. 4-행 통제들을 갖는 나이트 순서 프로세싱 방법은 각각의 스테이지에 있는 이러한 이웃 데이터의 로컬 캐싱을 상대적으로 작은 버퍼들에 제공하기 위해 영향을 받을 수 있는 인근 이웃 정보를 제공한다.
적어도 몇몇 실시예들에서, 4-행 통제들을 사용한 나이트 순서 프로세싱 방법에 따라 파이프라인으로 입력되는 다음 블록을 결정하는 기본 알고리즘은 다음과 같다:
4-행의 하측 행 상에 없는 경우:
다음 블록은 2 열들 좌측, 1 행 아래이다(-2, +1).
그렇지 않다면, 4-행의 하측 행에서:
다음 블록은 7 열들 우측, 3 행들 위이다(+7, -3).
그러나, 나이트 순서 프로세싱 방법은 또한 2 블록들 좌측, 1 블록 아래(-2, +1)와는 다른 간격으로 구현될 수 있다. 예를 들어, 2 블록들 좌측 및 1 블록 아래 대신에, 방법은 3 블록들 좌측 및 1 블록 아래로 가서 다음 블록을 얻기 위해 구현될 수 있다. 또 다른 예시로서, 방법은 1 블록 좌측 및 1 블록 아래(-1, +1)로 가서 다음 블록을 얻기 위해 구현될 수 있다. 추가로, 나이트 순서 프로세싱 방법은 4-행(4 개의 행) 통제들과는 다른 행 통제들로 구현될 수 있다. 다른 말로 하면, 행 그룹들의 적어도 2 개의 행들은 나이트 순서 프로세싱 방법을 통제하기 위해 실시예들에서 사용될 수 있다. 나이트 순서 프로세싱 방법을 통제하기 위해 사용된 행들의 개수로 r이라 가정하면, 알고리즘은 다음과 같이 일반화될 수 있다:
행 그룹의 하측 행 상에 없는 경우:
다음 블록은 p 열들 좌측, 1 행 아래이다(-p, +1).
그렇지 않다면, 행 그룹의 하측 행에서:
다음 블록은 q 열들 우측, (r-1) 행들 위이다(+q, -(r-1)).
p의 값을 변화시키는 것은 q의 값에 영향을 미칠 수 있고, 파이프라인 내의 행으로부터의 인접한 블록들 사이의 간격에 영향을 미칠 수 없지만, 그러나 주어진 블록과 그의 다른 이웃 블록들(예컨대, 그의 상측-좌측, 상측, 및 상측-우측 이웃들) 사이의 간격에 영향을 미칠 수 있다. 특히, 간격(-1, +1)을 사용하는 것이 파이프라인의 인접한 스테이지들에서 동시에 프로세싱 중에 있는 블록 및 그의 대각 (상측-우측) 이웃 블록을 초래할 수 있음을 유의한다. 이로써, 적어도 2 개의 블록들 좌측의 간격은, 대각선으로 인접한 블록들이 블록 프로세싱 파이프라인의 인접한 스테이지들에서 동시에 프로세싱되지 않도록 사용될 수 있다. r의 값을 변화시키는 것은 q의 값에 영향을 미칠 수 있고, 파이프라인 내의 행으로부터의 인접한 블록들 사이의 간격에 영향을 미칠 수 있으며, 블록과 그의 다른 이웃 블록들(예컨대, 그의 상측-좌측, 상측, 및 상측-우측 이웃들) 사이의 간격에 영향을 미칠 수 있다.
다음 블록을 결정하는 상기의 알고리즘은 초기 블록에서 시작될 수 있다. 4-행의 끝 다음에 또 다른 4-행에 도달하게 될 시에, 알고리즘은 다음 4-행의 제1 블록으로 점프하고, 그 이후에 몇 사이클 동안 4-행과 다음 4-행 사이를 건너가서, 4-행의 끝으로부터의 몇몇 블록들을 다음 4-행의 시작으로부터의 몇몇 블록들에 끼워 넣는 것을 초래한다. 다시 말하면, 나이트 순서 프로세싱 방법은 4-행들을 처리하되, 마치 그들이 끝과 끝을 붙여 배치되는 것처럼 처리한다. 알고리즘에서 복잡화들을 피하고, 파이프라인 내의 블록들의 일관된 간격을 유지하기 위하여, 적어도 몇몇 실시예들은 제1 4-행의 시작 및 마지막 4-행의 끝을 무효 블록들로 채울 수 있다(pad). 무효 블록은, 프레임의 경계 외부에 있고 파이프라인으로 입력되지만 유효 프레임 데이터를 포함하지 않아, 이로써 스테이지들에서 프로세싱되지 않는 블록으로서 정의될 수 있다. 이로써, 다음 블록을 결정하는 알고리즘은 제1 4-행의 상측 행 내의 제1 블록 또는 제1 4-행의 상측 행 내의 제1 블록의 좌측 편의 무효 블록일 수 있는 초기 블록에서 시작되고, 4-행들 모두를 통해 진행되며, 마지막 4-행의 끝에서 마지막 4-행의 마지막 블록이 파이프라인으로 입력될 때까지 연속될 수 있다. 프레임의 시작 및 끝에서 파이프라인에 버블(bubble)들이 있을 것이지만, 그러나 파이프라인 내의 프레임으로부터의 유효 블록들의 간격은 내내 일관될 것이다. 몇몇 실시예들에서, 비디오 프레임의 마지막 4-행의 끝을 무효 블록들로 채우는 것에 대한 대안으로서, 비디오 프레임의 마지막 4-행은 블록 프로세싱 파이프라인에서 프로세싱될 다음 비디오 프레임의 제1 행과 겹쳐질 수 있다.
도 10a 및 도 10b는 적어도 몇몇 실시예들에 따른, 나이트 순서 프로세싱 방법을 그래픽으로 예시한다. 간단함을 위해, 이들 도면들은 블록들의 12 행들 및 12 열들을 갖는 144 개의 16x16 픽셀 블록들로 분할된 예시 192x192 픽셀 프레임을 사용한다. 그러나, 나이트 순서 프로세싱 방법이 임의의 치수들의 입력 비디오 프레임들에 적용될 수 있음을 유의하여야 한다. 도 10a에서, 예시 프레임은 블록들의 행들 및 열들로 분할된다. 블록들의 행들은 4 개의 행들 각각을 포함한 3 개의 4-행들로 파티션된다. 제1 4-행의 마지막 3 개의 행들은 무효 블록들로 좌측 상에 채워지고, 마지막 (제3) 4-행의 첫 3 개의 행들은 무효 블록들로 우측 상에 채워진다. 이러한 예시에서, 블록들에서의 번호들은 블록들이 블록 0(제1 4-행의 상측 행 내의 제1 블록)으로 시작되는 나이트 순서 프로세싱 방법에 따라 블록 프로세싱 파이프라인으로 입력되는 순서를 나타낸다. 블록 0은 파이프라인의 제1 스테이지로 입력되고, 제1 스테이지가 또 다른 블록에 대해 준비될 시에, 방법은 2 열들 좌측, 1 행 아래로 가서 입력에 대한 다음 블록(도 10a에서, 블록 1)을 얻음으로써 진행된다. 이러한 패턴은 4-행의 하측에 도달할 때까지 반복된다. 4-행의 하측에서, 방법은 7 열들 우측, 3 행들 위로가서 다음 블록을 얻는다. 이는 프레임 내의 블록들 모두(나아가 도 10a에 도시된 무효 블록들 모두)가 파이프라인 내로 입력될 때까지 연속된다. 4-행의 끝에 도달될 시에, 4-행 이후의 또 다른 4-행이 있는 경우, 입력 알고리즘은 다음 4-행의 시작으로 진행된다. 이러한 예시에서, 블록 47이 입력된 이후에, 방법은 블록 48(제2 4-행의 상측 행 내의 제1 블록)으로 진행된다. 블록 47로부터, 블록 44의 우측 편에 파선 사각형으로 표기된 48로의 파선 화살표에 도시된 바와 같이, 제2 4-행의 상측 행의 제1 블록(블록 48)은 제1 4-행의 상측 행의 마지막 블록(블록 44)의 바로 우측에 있는 것으로 처리되고, 이로써 블록 47로부터 7 열들 우측, 3 행들 위로 감으로써, 도달하게 된다. 다시 말하면, 나이트 순서 프로세싱 방법은 4-행들을 처리하되, 마치 그들이 도 10b에 도시된 바와 같이, 각각의 끝에서 무효 블록들을 갖는 끝과 끝을 붙여 배치되는 것처럼 처리한다. 이로써, 다음 블록을 결정하는 알고리즘은 전체 프레임에 걸쳐 동일하게 유지된다.
몇몇 실시예들에서, 제1 4-행의 각각의 행에는 추가 무효 블록들, 예를 들어 2 개의 추가 무효 블록들로 채워질 수 있다. 도 10a에 도시된 바와 같이, 제1 4-행의 상측 행 내의 제1 블록으로 시작되는 대신에, 파이프라인으로의 입력은 제1 4-행의 상측 행 내의 제1 블록의 좌측 편의 제1 무효 블록으로 시작될 수 있다.
도 11a 및 도 11b는 적어도 몇몇 실시예들에 따른, 블록 프로세싱 파이프라인에 대한 나이트 순서 프로세싱 방법의 고-레벨 플로차트들이다. 도 11a에서, 3100에서 나타난 바와 같이, 다음 블록은 나이트 순서 프로세싱 방법에 의해 구현된 다음 입력 블록을 결정하는 알고리즘에 따라 결정된다. 3102에 나타난 바와 같이, 블록은 파이프라인으로, 예를 들어 메모리로부터 직접 메모리 액세스(DMA)를 통해 입력된다. 3104에 의해 도시된 바와 같이, 요소들(3100 및 3102)의 입력 프로세스는 프로세싱될 블록들이 있는 한 연속된다. 요소들(3100 및 3102)에 의해 파이프라인으로 입력된 각각의 블록은 3106에서 나타난 바와 같이, 파이프라인에서 프로세싱된다. 각각의 블록은 초기에 파이프라인의 제1 스테이지로 입력, 프로세싱되어, 제2 스테이지로 출력되고, 프로세싱되어, 기타 등등을 이룬다. 파이프라인의 스테이지로부터 다음 스테이지로 블록이 이동될 시에, 스테이지는 파이프라인에서 다음 블록을 프로세싱하는 것을 시작할 수 있다. 이로써, 입력 블록들은 파이프라인의 스테이지들을 통해 이동되고, 이때 각각의 스테이지는 한 번에 하나의 블록을 프로세싱한다. 3108에 나타난 바와 같이, 블록이 파이프라인의 마지막 스테이지에 의해 프로세싱되면, 프로세싱된 블록은 예를 들어 직접 메모리 액세스(DMA)를 통해 메모리로 출력된다.
도 11b는 나이트 순서 프로세싱 방법에 의해 구현될 수 있는 다음 입력 블록을 결정하는 예시 알고리즘의 플로차트이고, 도 11a의 요소(3100)를 상세하게 한 것이다. 도 11b는, 프레임이 4-행들로 분할되고 다음 프레임을 결정하기 위해 사용된 알고리즘이 4-행의 하측 행 상에 있지 않은 경우에는 2 열들 좌측, 1 행 아래(-2, +1)이고, 하측 행 상에 있는 경우에는 7 열들 우측, 3 행들 위(+7, -3)라 가정한다. 그러나, 다른 행 그룹화들 및/또는 간격 알고리즘들이 사용될 수 있다. 3150에서, 프레임의 시작에 있는 경우, 방법은 3152에서 나타난 바와 같이, 초기 블록을 얻는다. 이가 프레임의 시작에 있지 않은 경우에는 3154에 있게 되고, 이가 4-행의 마지막 행에 있는 경우, 다음 블록은 3156에 나타난 바와 같이, 7 열들 우측, 3 행들 위에 있게 된다. 이가 4-행의 마지막 행에 있지 않은 경우, 다음 블록은 3158에 나타난 바와 같이, 2 열들 좌측, 일 행 아래에 있게 된다.
캐싱 이웃 데이터
블록 프로세싱 파이프라인의 스테이지들에서 수행된 하나 이상의 동작들은 블록들의 이전(또는 윗) 행으로부터의 이웃 블록들 그 예로서 도 9에 도시된 바와 같이, 상측 이웃, 상측-좌측 이웃, 상측-우측 이웃, 및 상측-우측-우측 이웃 블록들 중 하나 이상에, 나아가 좌측 이웃에 의존할 수 있다. 4-행 통제들을 갖는 나이트 순서 프로세싱 방법은 파이프라인의 각각의 스테이지에 있는 이웃 데이터의 로컬 캐싱을 상대적으로 작은 로컬 버퍼들에 제공하기 위해 영향을 받을 수 있는 인근 이웃 정보를 제공한다. 적어도 몇몇 실시예들에서, 로컬 버퍼들은 SRAM(static random access memory) 기술을 사용하여 구현될 수 있다. 그러나, 로컬 버퍼들은 몇몇 실시예들에서 다른 메모리 기술들을 사용하여 구현될 수 있다.
프레임의 제1 열 내의 블록들이 좌측 또는 상측-좌측 이웃을 가지지 않고, 마지막 열 내의 블록들이 상측-우측 또는 상측-우측-우측 이웃을 가지지 않으며, 마지막 열 다음의 것(next-to-last column) 내의 블록들이 상측-우측-우측 이웃을 가지지 않음을 유의한다. 이로써, 이들 이웃 위치들로부터의 정보를 사용하는 블록 프로세싱 방법들에 대해, 그들 열들 내의 블록들에 관련된 이들 이웃 위치들에 대한 로컬 버퍼들 내의 정보는 유효하지 않고, 파이프라인의 스테이지들에서 그들 열들 내의 블록들을 프로세싱하는 것에 사용되지 않는다. 추가로, 제1 4-행의 상측 행 위에는 어떠한 행들도 없고, 이로써, 이러한 행 내의 블록들은 상측, 상측-좌측, 상측-우측, 및 상측-우측-우측 이웃들을 가지지 않는다.
나이트 순서 프로세싱 방법을 구현하는 블록 프로세싱 파이프라인의 적어도 몇몇 실시예들에서, 현재 4-행 상에서 가장 최근에 프로세싱된 C 블록들을 캐싱하기에 충분한 크기의 제1 버퍼는 파이프라인의 하나 이상의 스테이지들 각각에서 구현될 수 있다. 이러한 버퍼는 현재 4-행 버퍼로 지칭될 수 있고, 예를 들어, 순환 FIFO 버퍼로 구현될 수 있다. 적어도 몇몇 실시예들에서, C는, 다음 블록 및 나이트 순서 방법을 통제하기 위해 사용된 행 그룹 크기를 결정하는 알고리즘에 따라 스테이지에 있는 현재 블록의 상측-좌측 이웃에 대응하는 엔트리를 버퍼가 포함하도록 결정될 수 있다. 버퍼는 또한 알고리즘에 따라 현재 블록에 대한 상측-우측-우측, 좌측, 상측-우측, 및 상측 이웃들에 대응하는 엔트리들을 포함할 수 있다. 블록이 프로세싱될 시에, 스테이지는 현재 4-행 버퍼를 액세스하여 블록에 대한 이웃 정보를 획득할 수 있되, 그 블록의 이웃 정보가 현재 4-행 버퍼에 유효한 경우에 획득할 수 있다. 몇몇 블록 프로세싱 방법들이 상측-좌측 이웃 정보를 요구하지 않을 수 있고, 현재 4-행 버퍼가 이들 구현예들에서 보다 작을 수 있음을 유의한다.
스테이지가 블록의 프로세싱을 완료할 시에, 블록의 정보는 현재 4-행 버퍼에서 마지막 위치에 기입되고, 블록의 상측-좌측 이웃의 위치에서 엔트리를 덮어쓰고, 이로써, 스테이지에서 프로세싱될 다음 블록에 대한 버퍼를 준비한다. 초기에, 프레임의 시작에서, 프레임 내의 어떠한 블록들도 프로세싱되지 않을 시에, 현재 4-행 버퍼에는 어떠한 정보도 있지 않고, 이로써, 어떠한 블록 정보도 버퍼가 채워질 때까지 버퍼에 덮어쓰여지지 않음을 유의한다. 다음 블록이 스테이지에 있을 시에, 버퍼에서 이전 블록의 정보는 블록의 상측-우측-우측 이웃 정보이다.
예를 들어, 다음 블록 - 다음 블록은 4-행의 하측 행 상에 있지 않은 경우에 2 열들 좌측, 1 행 아래임 - 을 결정하는 알고리즘 및 4-행 경계들을 사용하여, C = 13은, 현재 블록과 그의 상측-좌측 이웃 사이의 간격이 13이 될 시에, 현재 블록의 상측-좌측 이웃을 포함하기에 충분할 수 있다. 도 12는 적어도 몇몇 실시예들에 따른, 현재 4-행 버퍼에서 캐싱될 수 있는 나이트 순서 프로세싱 방법에 따라 파이프라인에서 프로세싱되는 바와 같은 4-행의 일부를 도시한다. 블록 19는 스테이지에 있는 현재 블록을 나타낸다. 음영 블록들은 스테이지에 의해 가장 최근에 프로세싱된 13 개의 블록들을 나타낸다. 시간상으로 블록 19로부터 가장 먼 블록이 그의 상측-좌측 이웃(블록 6)이고, 시간상으로 가장 근방의 블록은 그의 상측-우측-우측 이웃(블록 9)임을 유의한다.
4-행의 상측 행 내의 블록들에 대해, 상기의 행 내의 이웃들에 대한 정보는 현재 4-행 버퍼에 있지 않다. 제1 4-행의 상측 행 위에는 어떠한 행들도 있지 않고, 다른 4-행들 모두에 대해, 상측 행 위의 행은 이전 4-행의 하측 행이다. 이로써, 현재 4-행 버퍼는 4-행의 상측 행에 모든 블록들에 대한 좌측 이웃 정보를 포함하지만(어떠한 좌측 이웃도 가지지 않은 제1 블록은 제외), 그러나 4-행의 상측 행 내의 블록들에 대한 상측-좌측, 상측, 상측-우측, 및 상측-우측-우측 이웃 정보를 포함하지 않는다. 4-행들의 상측 행들 상의 블록들에 대한 이러한 이웃 정보를 제공하기 위하여, 이전 4-행의 마지막 행으로부터 요구된 이웃 블록들에 대한 정보를 유지시키기에 충분한 크기의 제2 버퍼는 파이프라인의 하나 이상의 스테이지들에서 구현될 수 있다. 이러한 버퍼는 이전 4-행 버퍼로 지칭될 수 있고, 예를 들어, 순환 FIFO 버퍼로 구현될 수 있다. 이전 4-행 버퍼에서 엔트리들의 개수, 나아가 이전 4-행 버퍼에 캐싱된 특정 이웃 블록들은 블록 프로세싱 파이프라인에 의해 구현된 특정 블록 프로세싱 방법의 요건들에 의존할 수 있다. 적어도 몇몇 실시예들에서, 나이트 순서 프로세싱 방법에 따라 4-행이 프로세싱될 시에, 4-행의 하측 행 상의 각각의 블록에 대한 정보는 외부 메모리에 기입될 수 있되, 예를 들어 블록이 파이프라인의 마지막 스테이지에 있을 시에 기입될 수 있다. 4-행의 상측 행 내의 각각의 블록에 대해, 이웃(예컨대, 상측-우측-우측 이웃) 데이터는 예를 들어 파이프라인의 제1 스테이지에서, 외부 메모리로부터 판독될 수 있다. 이러한 이웃 정보는 상측 행으로부터의 해당 블록과 함께, 다른 스테이지들을 향해 파이프라인 아래로 전달될 수 있다.
도 13은 적어도 몇몇 실시예들에 따른, 나이트 순서 프로세싱 방법에 따라 프로세싱되는 중에 있는 현재 4-행 내의 블록들, 나아가 이전 4-행의 마지막 행 내의 이웃 블록들을 그래픽으로 예시한다. 블록들 A, A+4, A+8, 및 A+12는 나이트 순서 프로세싱 방법에 따라 이전 4-행 상에서 프로세싱된다. 블록 A는 우선 프로세싱되고, 블록 A+4는 4 개의 사이클들 뒤에 프로세싱되며, 기타 등등이 이뤄진다. 블록 B는 파이프라인의 특정 스테이지에 현재 있는 현재 4-행 상의 블록을 나타낸다. 블록들 B-1(B 마이너스 1) 내지 B-13(B 마이너스 13)은 현재 4-행 내의 스테이지에서 가장 최근에 프로세싱된 13 개의 블록들을 나타낸다. 이들 블록들로부터의 정보는 스테이지의 현재 4-행 버퍼에서, B-1을 가장 최근의 엔트리로서, B-13을 가장 오래된 엔트리로서 현재 캐싱될 수 있다. B-4는 현재 블록 B의 좌측 이웃이다. 그러나, 블록 B의 상측-좌측(블록 A), 상측(블록 A+4), 상측-우측(블록 A+8), 및 상측-우측-우측(블록 A+12) 이웃들은 이전 4-행의 하측 행 상에 있고, 블록 B에 대해서 현재 4-행 버퍼에 포함되지 않는다. 적어도 몇몇 실시예들에서, 현재 4-행의 상측 행 상의 블록들에 대한 이웃 정보(예컨대, 상측-좌측, 상측, 상측-우측, 및 상측-우측-우측 이웃 정보)를 제공하기 위하여, 이전 4-행 버퍼는 파이프라인의 하나 이상의 스테이지들 각각에서 구현될 수 있다. 4-행이 프로세싱될 시에, 4-행의 하측 행 상의 각각의 블록에 대한 정보는 예를 들어 파이프라인의 마지막 스테이지에 의해, 외부 메모리 내의 이웃 데이터 구조체에 기입된다. 다음 4-행의 상측 행으로부터의 블록들이 프로세싱될 시에, 이전 4-행의 하측 행 내의 이웃 블록들에 대한 정보는 예를 들어 파이프라인의 제1 스테이지에 의해 외부 메모리로부터 판독되고, 상측 행 블록들을 갖는 다른 스테이지들을 향해 파이프라인 아래로 전달된다. 적어도 몇몇 실시예들에서, 상측 행 내의 블록의 상측-우측-우측 이웃 블록에 대한 정보는 외부 메모리로부터 판독된다. 적어도 몇몇 실시예들에서, 이전 4-행 버퍼는 순환 버퍼이고, 이전 4-행 버퍼 내의 가장 오래된 엔트리는 외부 메모리로부터 판독된 이웃 정보로 교체된다. 다양한 실시예들에서, 하측 행 내의 블록들이 기입되고 이웃 블록 정보가 판독되는 외부 메모리는 마지막 스테이지 외부에 있는 파이프라인 컴포넌트의 메모리, 파이프라인을 구현하는 비디오 인코더의 메모리, 또는 비디오 인코더 외부의 메모리일 수 있다. 몇몇 실시예들에서, 그러나, 메모리는 파이프라인의 마지막 스테이지의 로컬 메모리일 수 있다. 적어도 몇몇 실시예들은 행들 사이에서 외부메모리에 대한 판독들 및 기입들을 제어하여, 외부 메모리에 데이터를 덮어쓰는 것을 피하기 위해 인터락(interlock) 메커니즘을 포함할 수 있다.
도 14는 적어도 몇몇 실시예들에 따른, 이웃 데이터가 파이프라인의 스테이지들에 있는 로컬 버퍼블에서 캐싱되는, 블록 프로세싱 파이프라인 내의 블록들을 프로세싱하는 방법의 플로차트이다. 예를 들어, 도 14의 방법은 도 11a의 요소들(3100, 3102, 및 3104)에 도시된 바와 같이, 나이트 순서 프로세싱 방법에 따라 파이프라인으로 입력된 블록들을 프로세싱하기 위해 도 11a의 요소(3106)에 사용될 수 있다. 도 14에서, 블록은 파이프라인으로 입력된다. 4200에서, 파이프라인의 제1 스테이지에서, 블록이 4-행의 상측 행 상에 있는 경우, 블록에 대한 이웃 데이터는 4202에서 나타난 바와 같이, 외부 메모리(예를 들어, DMA를 통함)로부터 이전 4-행 버퍼 내로 판독될 수 있다. 적어도 몇몇 실시예들에서, 이웃 데이터는 이전 4-행의 하측 행 상의 현재 블록의 상측-우측-우측 이웃에 대응한다. 4204에서 나타난 바와 같이, 블록은 그 이후에 현재 스테이지에서 프로세싱된다. 스테이지에서 동작이 블록을 프로세싱하기 위해 이웃 정보를 요구하는 경우, 스테이지는 동작을 수행하기 위해 현재 4-행 버퍼에서 그리고/또는 이전 4-행 버퍼에서 이웃 정보를 사용할 수 있다. 블록이 4-행의 상측 행 상에 있는 경우, 이웃 정보의 적어도 몇몇은 이전 4-행 버퍼로부터 획득된다; 그렇지 않으면, 이웃 정보는 현재 4-행 버퍼로부터 획득될 수 있다. 4206에서 나타난 바와 같이, 현재 블록에 관한 정보는 차후 블록들 상에서 사용되기 위해 스테이지에서 현재 4-행 버퍼에 기입될 수 있다. 정보는 현재 4-행 버퍼에 가장 오래된 엔트리를 덮어쓸 수 있다.
4208에서, 스테이지들이 더 있는 경우, 블록은 4210에서 나타난 바와 같이, 다음 스테이지로 전송될 수 있다. 4212에서, 이전 4-행 버퍼로부터의 이웃 정보는 또한 다음 스테이지로 전송될 수 있다. 적어도 몇몇 실시예들에서, 이러한 이웃 정보는, 현재 블록이 4-행의 상측 행 상에 있는 경우만, 다음 스테이지로 전송된다. 요소들(4204 내지 4212)은, 블록이 도달하고 파이프라인의 마지막 스테이지에 의해 프로세싱될 때까지 반복될 수 있다. 4208에서, 더 이상의 스테이지들이 없는 경우, 파이프라인 내의 블록의 프로세싱이 이행된다. 4214에서, 블록이 4-행의 하측 행 상에 있는 경우, 블록에 대한 정보는 다음 4-행의 상측 행 내의 블록들에 대한 이웃 데이터로서 판독될 외부 메모리(예를 들어, DMA 통함)에 기입된다. 추가로, 프로세싱된 유효 블록들 모두는 도 11a의 요소(3108)에 의해 도시된 바와 같이 출력된다.
예시 파이프라인 유닛들
도 15a 내지 도 15c는 적어도 몇몇 실시예들에 따른, 본 명세서에 기술된 바와 같이, 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현한 블록 프로세싱 파이프라인의 스테이지들에서 사용될 수 있는 예시 파이프라인 프로세싱 유닛들의 블록 다이어그램들이다. 예를 들어, 도 15a 및 도 15b에 도시된 바와 같이, 파이프라인 유닛들(5000A 및/또는 5000B) 중 하나 이상은 도 16에 도시된 예시 블록 프로세싱 파이프라인의 각각의 스테이지에서 사용될 수 있다. 도 15a 내지 도 15c가 다음 것에 제한되는 것으로 의도되어서는 아니됨을 유의한다: 파이프라인 프로세싱 유닛이 도면들에서 도시된 것보다 많거나 적은 컴포넌트들 및 특징들을 포함할 수 있다는 것.
도 15a에 도시된 바와 같이, 파이프라인 유닛(5000A)은 메모리(5010) 및 유닛 코어(5020)를 적어도 포함할 수 있다. 유닛 코어(5020)는 블록 프로세싱 파이프라인의 특정 스테이지에 있는 블록 또는 블록의 일부에 관해 또는 대해 특정 동작을 수행하도록 구성된 컴포넌트(예컨대, 회로)일 수 있다. 메모리(5010)는, 예를 들어, 유닛 코어(5020)가 메모리(5010)로부터 블록에 대한 데이터를 판독 및 프로세싱하는 것을 허용하면서, 다음 블록에 대한 데이터가 이전 파이프라인 유닛으로부터 메모리(5010)에 기입되는 중에 있는 더블-버퍼형 메모리일 수 있다.
도 15b에 도시된 바와 같이, 도 15a에 도시된 바와 같은 메모리(5010) 및 유닛 코어(5020)과 더불어, 파이프라인 유닛(5000B)은 또한 프로세서(5030)를 포함할 수 있다. 프로세서(5030)는 예를 들어, 모바일 또는 M-종류 프로세서일 수 있다. 블록 프로세싱 파이프라인의 파이프라인 유닛들(5000B) 내의 프로세서들(5030)은 예를 들어, 블록 경계들에서 블록 프로세싱 파이프라인을 제어하기 위해 사용될 수 있다. 파이프라인 유닛들(5000B) 내의 프로세서들(5030)은 다양한 적용예들을 위해 블록 프로세싱 파이프라인에 의해 구현된 알고리즘들에서 유연성을 허용하도록, 예를 들어 저-레벨 펌웨어 마이크로코드로 구성될 수 있다. 적어도 몇몇 실시예들에서, 파이프라인 내의 파이프라인 유닛(5000B)의 프로세서(5030)는 이전 (업스트림) 파이프라인 유닛(5000B)의 프로세서(5030)로부터 데이터를 수신하고 차후 (다운스트림) 파이프라인 유닛(5000B)의 프로세서(5030)로 데이터를 전송하도록 구성될 수 있다. 추가로, 파이프라인의 마지막 스테이지에 있는 파이프라인 유닛(5000B)의 프로세서(5030)는 파이프라인의 제1 스테이지에 있는 파이프라인 유닛(5000B)의 프로세서(5030)로 피드백 데이터를 전송하도록 구성될 수 있다.
도 15a 및 도 15b에 도시된 바와 같이, 파이프라인 유닛(5000A 또는 5000B)은, 예를 들어 직접 메모리 액세스(DMA)에 따라 외부 메모리를 액세스하도록 구성될 수 있다. 추가로, 파이프라인 유닛(5000A 또는 5000B)은 파이프라인의 하나 이상의 이전 (업스트림) 스테이지들을 향하여 정보를 뒤로 전달하고 그리고/또는 파이프라인의 하나 이상의 차후 (다운스트림) 스테이지들로부터 뒤로 전달된 정보를 수신하도록 구성될 수 있다. 추가로, 파이프라인 유닛(5000A 또는 5000B)은 파이프라인의 하나 이상의 차후 (다운스트림) 스테이지들을 향하여 정보를 앞으로 전달하고 그리고/또는 파이프라인의 하나 이상의 이전 (업스트림) 스테이지들로부터 앞으로 전달된 정보를 수신하도록 구성될 수 있다.
도 15c에 도시된 바와 같이, 도 15a에 도시된 바와 같은 2 개 이상의 유닛들(5000A)은 함께 그룹화되어, 파이프라인에서 동작을 수행하도록 구성될 수 있다. 단일 프로세서(5030)는 파이프라인 유닛들(5000A)을 제어 및/또는 구성하기 위해 사용될 수 있다.
예시 블록 프로세싱 파이프라인
도 16은 적어도 몇몇 실시예들에 따른, 본 명세서에 기술된 바와 같이, 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현할 수 있는 블록 프로세싱 파이프라인에 의해 스테이지들에서 구현될 수 있는, H.264 인코딩에 대한 예시 블록 프로세싱 방법(6000)에서 일반적인 동작들의 고-레벨 블록 다이어그램이다. 블록 프로세싱 방법(6000)을 구현하는 블록 프로세싱 파이프라인은 예를 들어, 입력 포맷으로부터의 입력 비디오 프레임들을, H.264/AVC(Advanced Video Coding) 표준에 기술된 바와 같은 H.264/AVC 포맷으로 변환시키도록 구성된 H.264 비디오 인코더 장치의 컴포넌트로서 구현될 수 있다. H.264/AVC 표준은 ITU-T에 의하여, H.264 Recommendation으로 지칭될 수 있는, 표제가 "ITU-T Recommendation H.264: Advanced video coding for generic audiovisual services"인 문헌에 공개된다. 예시 입력 비디오 포맷은 YCbCr 색 공간으로 인코딩된 1080p(1920x1080 픽셀들, 2.1 메가픽셀들)이다. 그러나, 다른 입력 비디오 포맷들은 비디오 인코더 장치에서 파이프라인의 실시예들을 사용하여 H.264로 인코딩될 수 있다.
비디오 인코더 장치는, 예를 들어, 집적 회로(IC)로서 또는 IC 상의 서브시스템 그 예로서 시스템-온-어-칩(SOC)으로서 구현될 수 있다. 적어도 몇몇 실시예들에서, 비디오 인코더 장치는 파이프라인 컴포넌트, 프로세서 컴포넌트(예컨대, 저-전력 멀티코어 프로세서), 및 장치의 기능적 컴포넌트들을 상호연결시키는 버스 서브시스템 또는 패브릭(fabric)을 적어도 포함할 수 있다. 비디오 인코더 장치의 프로세서 컴포넌트는, 예를 들어, 파이프라인의 프레임-레벨 제어 그 예로서 레이트(rate) 제어를 수행하고, 파이프라인 구성을 수행하며, 드라이버를 통해 애플리케이션 소프트웨어와 인터페이싱을 할 수 있다. 파이프라인 컴포넌트는 도 16에 도시된 바와 같이 동작들 중 하나 이상의 일부 또는 모두를 수행하도록 구성된 다수의 프로세싱 스테이지들 각각을 구현할 수 있고, 이때 각각의 스테이지는 하나 이상의 프로세싱 유닛들을 포함한다. 파이프라인 내의 프로세싱 유닛들 중 적어도 하나는 예를 들어, 매크로블록 레벨로 각자의 스테이지에 있는 프로세싱 유닛의 파라미터들을 구성할 수 있는 프로세서 컴포넌트(예컨대, M-종류 프로세서)를 포함할 수 있다. 비디오 인코더 장치는 다른 기능적 컴포넌트들 또는 유닛들 그 예로서 메모리 컴포넌트들, 나아가 예를 들어, 하나 이상의 비디오 입력 소스들 및 외부 메모리에 대한 외부 인터페이스들을 포함할 수 있다. 비디오 인코더 장치에 대한 예시 비디오 입력 소스들은 미가공(raw) 비디오 입력 프로세싱용 비디오 카메라, 재-인코딩/트랜스코딩(transcoding)용 디코더 장치, 플래시 또는 다른 메모리, 및 JPEG 디코더 중 하나 이상을 포함할 수 있지만, 이에 제한되지는 않는다. 예시 비디오 인코더 장치는 도 15에 예시된다. 비디오 인코더 장치를 포함한 예시 SOC는 도 16에 예시된다. 실시예들이 나이트 순서 프로세싱으로 블록 프로세싱 방법(6000)을 구현하는 블록 프로세싱 파이프라인의 하드웨어 구현예들에 관련하여 일반적으로 기술되었지만, 나이트 순서 프로세싱을 갖는 블록 프로세싱 방법(6000)이 소프트웨어로 구현된 블록 프로세싱 파이프라인에 의해 구현될 수 있음을 유의한다.
도 16에 도시된 바와 같이, 방법(6000)을 구현하는 파이프라인은 H.264 표준에 따라 입력 비디오 프레임들로부터의 16x16 픽셀 매크로블록들을 프로세싱할 수 있고, 이때 각각의 매크로블록은 파이프라인의 스테이지들에서 별도로 프로세싱될 수 있는 2 개 이상의 블록들 또는 파티션들을 포함한다. 입력 비디오 프레임들은 예를 들어,YCbCr 색 공간으로 인코딩될 수 있고; 각각의 매크로블록은 파이프라인의 스테이지들에서 별도로 프로세싱될 수 있는 크로마 및 루마 요소들의 별도의 블록들로 구성될 수 있다. 블록 프로세싱 방법(6000)을 구현하는 파이프라인은 메모리로부터 입력 매크로블록들을 수신하고 상기 메모리로 프로세싱된 매크로블록들을 출력할 수 있다. 메모리는 비디오 인코더 장치의 메모리 및/또는 비디오 인코더 장치 외부의 메모리를 포함할 수 있다. 적어도 몇몇 실시예들에서, 메모리는 필요에 따라, 예를 들어 직접 메모리 액세스(DMA)를 통해 파이프라인에 의해 액세스될 수 있다. 적어도 몇몇 실시예들에서, 메모리는 파이프라인과 외부 메모리 사이에서 구현된 캐시 메모리를 갖는 멀티-레벨 메모리로서 구현될 수 있다. 예를 들어, 몇몇 구현예들에서, 하나 이상의 4-행들은 외부 메모리로부터 판독되고 파이프라인에 의한 액세스를 위해 캐시 메모리로 캐싱되어, 외부 메모리에 대한 판독들의 수를 감소시킬 수 있다.
파이프라인에 의해 스테이지들에서 수행될 수 있는, 도 16에 도시된 바와 같은 예시 H.264 비디오 인코더 방법(6000)의 일반적인 동작들, 나아가 파이프라인을 통한 일반적인 데이터 플로는 이하에서 간단하게 기술된다. 방법(6000)의 일반적인 동작들 각각은 파이프라인의 하나 이상의 스테이지들에 있는 하나 이상의 파이프라인 유닛들에 의해 구현될 수 있다. 예시 파이프라인 유닛들은 도 13a 내지 13c에 예시된다. 또한, 도 16에 도시된 각각의 일반적인 동작이 파이프라인의 1 개, 2 개, 또는 그 초과의 스테이지들에 있는 파이프라인 유닛들에 의해 구현될 수 있는 2 개 이상의 동작들로 세분화될 수 있음을 유의한다. 그러나, 도 16에 도시된 동작들 중 2 개 이상은 파이프라인의 동일 스테이지에서 수행될 수 있다. 파이프라인에서 각각의 스테이지는 한 번에 하나의 매크로블록을 프로세싱하고, 이로써 동작들 중 2 개 이상은 각자의 스테이지에 현재 있는 동일 매크로블록에 관해 동시에 동작할 수 있다. 파이프라인이 도 16에 도시되고 이하에서 기술된 것보다 많거나, 적거나, 또는 상기 기술된 것과는 다른 동작들을 수행할 수 있음을 유의한다.
매크로블록 입력
적어도 몇몇 실시예들에서, 매크로블록 입력(6002)은 파이프라인의 초기 스테이지에 의해 수행될 수 있다. 적어도 몇몇 실시예들에서, 매크로블록 입력(6002)은 메모리로부터, 예를 들어 DMA를 통해 루마 및 크로마 픽셀들을 수신하고, 파이프라인의 다운스트림 스테이지들에서 펌웨어에 의해 사용된 입력 픽셀들에 관한 통계들을 계산하며, 펌웨어가 룩 어헤드를 가능하게 하기 위해 입력 매크로블록들을 버퍼링한다. 입력 매크로블록 픽셀 데이터 및 해당 통계들은 버퍼링되고, 인트라-프레임 및 인터-프레임 평가(6010) 동작들을 구현하는 파이프라인의 하나 이상의 다운스트림 스테이지들로 전송된다. 적어도 몇몇 실시예들에서, 최대 16 개의 매크로블록들의 입력 버퍼는 입력 픽셀들 및 통계들에 대해 유지된다. 매크로블록 픽셀 데이터 및 해당 통계들은 도 3 내지 8b에 관하여 이전에 기술된 바와 같이, 나이트 순서 입력 알고리즘에 따라 파이프라인의 다운스트림 스테이지들로 입력될 수 있다.
적어도 몇몇 실시예들에서, 매크로블록 입력(6002)은 4-행 경계들에 있는, 이전 4-행의 하측 행으로부터의 이웃 데이터를 메모리로부터 판독하고, 이웃 데이터를 적어도 하나의 다운스트림 스테이지로 전달한다.
인트라-프레임 및 인터-프레임 평가
인트라-프레임 및 인터-프레임 평가(6010) 동작들은 파이프라인으로 입력된 매크로블록들을 인코딩할 시에 사용될 이전에 인코딩된 픽셀들의 블록들을 결정할 수 있다. H.264 비디오 인코딩에서, 각각의 매크로블록은 현재 프레임 내에 이미 인코딩된 픽셀들의 블록들을 사용하여 인코딩될 수 있다. 이러한 블록들을 결정하는 프로세스는 인트라-프레임 평가, 또는 간단하게 인트라-평가로 지칭될 수 있다. 그러나, 매크로블록들은 또한 하나 이상의 이전에 인코딩된 프레임들(기준 프레임들로 지칭됨)로부터 픽셀들의 블록들을 사용하여 인코딩될 수 있다. 기준 프레임들 내의 픽셀 블록들을 매칭하는 것을 찾는 프로세스는 인터-프레임 평가로, 또는 보다 일반적으로 모션 평가로 지칭될 수 있다. 인트라-프레임 및 인터-프레임 평가(6010) 동작들은 파이프라인의 1 개, 2 개, 또는 그 초과의 스테이지들에서 수행될 수 있는 2 개 이상의 서브-동작들로 세분화될 수 있고, 이때 각각의 스테이지에 있는 하나 이상의 컴포넌트들 또는 파이프라인 유닛들은 특정 서브-동작을 수행하도록 구성된다.
적어도 몇몇 실시예들에서, 매크로블록 입력(6002)은 4-행 경계들에 있는, 이전 4-행의 하측 행으로부터의 이웃 데이터를 메모리로부터 판독하고, 이웃 데이터를 인트라-프레임 및 인터-프레임 평가(6010)로, 예를 들어 인트라-프레임 평가 컴포넌트로 전달한다. 추가로, 모션 보상 및 복원(6030), 예를 들어 루마 복원 컴포넌트는 이웃 데이터를 피드백으로서 인트라-프레임 및 인터-프레임 평가(6010)로, 예를 들어 인트라-프레임 평가 컴포넌트로 전달할 수 있다.
모션 평가
적어도 몇몇 실시예들에서, 모션 평가를 수행하기 위해, 파이프라인은 검색될 각각의 기준 프레임에 대한 모션 평가 엔진의 하나의 인스턴스(instance)를 포함할 수 있다. 각각의 모션 평가 엔진은 하나의 기준 프레임만 검색한다. 적어도 몇몇 실시예들에서, 각각의 모션 평가 엔진은 저 해상도 모션 평가 컴포넌트, 전체(full) 픽셀 모션 평가 컴포넌트, 및 서브픽셀 모션 평가 컴포넌트를 포함할 수 있다. 적어도 몇몇 실시예들에서, 모션 평가 엔진들 각각의 3 개의 컴포넌트들은 파이프라인의 서로 다른 스테이지들에서 구현될 수 있다. 적어도 몇몇 실시예들에서, 각각의 모션 평가 엔진은 또한 필요에 따라 메모리로부터 기준 프레임 데이터를 판독 및 저장하는 메모리 컴포넌트를 포함할 수 있다. 적어도 몇몇 실시예들에서, 프로세서의 단일 인스턴스는 모션 평가 엔진의 모든 인스턴스들을 관리한다. 적어도 몇몇 실시예들에서, 프로세서는 예측 및 공존(co-located) 모션 벡터들을 사용하여 하나 이상의 후보자들을 결정하고, 후보자들을 모션 평가 엔진들의 전체 픽셀 모션 평가 컴포넌트들로 입력시킬 수 있다.
적어도 몇몇 실시예들에서, 각각의 모션 평가 엔진의 저 해상도 모션 평가 컴포넌트는 후보자들을 발생시키기 위해, 각자의 기준 프레임의 축소, 저해상도 버전에 관한 철저한 검색을 수행한다. 적어도 몇몇 실시예들에서, 전체 픽셀 모션 평가 컴포넌트는 저 해상도 모션 평가 컴포넌트로부터의 후보자들을 사용하여 전체 크기 픽셀들에 관한 검색을 수행한다. 적어도 몇몇 실시예들에서, 서브픽셀 모션 평가 컴포넌트는 전체 픽셀 모션 평가 컴포넌트로부터 수신된 최적의 후보자들을 사용하여 2분의 1 및 4분의 1 픽셀들에 관한 검색을 수행한다. 몇몇 실시예들에서, 전체 픽셀 모션 평가 및 서브픽셀 모션 평가는 파이프라인의 업스트림 스테이지에서 수행된 직접 모드 평가의 결과들에 기반하여 기능이 억제될 수 있다(disabled). 적어도 몇몇 실시예들에서, 각각의 모션 평가 엔진은 결과 데이터를 모드 결정(6020)으로 출력시킨다.
적어도 몇몇 실시예들에서, 모션 평가는 또한, 공존 및 공간 모션 벡터 데이터를 수신하고 직접/스킵 모드 코스트(cost)를 계산하여 모드 결정(6020)에 제공되는 직접 모드 평가 컴포넌트를 포함할 수 있다. 결과들에 기반하여, 직접 모드 평가 컴포넌트는 전체 픽셀 모션 평가 및 서브픽셀 모션 평가의 기능을 억제할 수 있다.
인트라 평가
적어도 몇몇 실시예들에서, 파이프라인의 인트라 평가 컴포넌트는, 현재 매크로블록을 인코딩할 시에 사용될 수 있는 현재 프레임 내에 이미 인코딩된 픽셀들의 블록들을 결정하기 위해 인트라 모드 선택을 수행한다. 적어도 몇몇 실시예들에서, 인트라 평가 컴포넌트는 루마에 대해서만 인트라 모드 선택을 수행한다. 이들 실시예들에서, 크로마 인트라 평가는 파이프라인의 다운스트림 스테이지에 있는 크로마 복원 컴포넌트에 의해 수행된다. 적어도 몇몇 실시예들에서, 인트라 평가 컴포넌트는 매크로블록 내의 2 개 이상의 블록들 또는 파티션들(예컨대, 4x4, 8x8, 4x8, 8x4, 16x8, 및/또는 8x16 블록들) 각각에 대해 독립적으로 인트라 평가를 수행할 수 있다. 각각의 블록에 대해, 예측 픽셀들은 우선 이웃 블록들로부터 추출된다(이웃 블록들은 프레임 내의 현재 매크로블록 외부에 또는 현재 매크로블록 내에 있을 수 있음). 현재 블록에서 각각의 예측 모드에 대해, 현재 모드의 코스트는 이웃 픽셀들로부터 예측 블록을 생성하고, 모드 코스트를 계산하며, 모드 코스트를 그 블록에 대한 최소 코스트와 비교함으로써, 평가된다. 모든 예측 모드들이 평가되고 최적 모드가 결정되면, 복원은 최적 모드에 대해 수행될 수 있고, 그 결과 복원된 픽셀들은 매크로블록 내에서 향후 블록들을 예측하기 위해 사용될 수 있다. 인트라 평가 컴포넌트는 최적의 인트라 모드 정보를 모드 결정(6020)으로 전달할 수 있다.
적어도 몇몇 실시예들에서, 매크로블록 입력(6002)은 4-행 경계들에 있는, 이전 4-행의 하측 행으로부터의 이웃 데이터를 메모리로부터 판독하고, 이웃 데이터를 인트라 평가 컴포넌트로 전달한다. 적어도 몇몇 실시예들에서, 적어도 하나의 다운스트림 스테이지(예컨대, 다운스트림 스테이지에 있는 루마 복원 컴포넌트)는 이웃 데이터를 인트라 평가 컴포넌트로 다시 전달할 수 있다.
모드 결정
적어도 몇몇 실시예들에서, 모드 결정(6020)은 인트라-프레임 및 인터-프레임 평가(6010) 동작들을 구현하는 스테이지(들)의 다운스트림인 파이프라인의 스테이지에 있는 모드 결정 컴포넌트에 의해 구현될 수 있다. 그러나, 몇몇 실시예들에서, 모드 결정(6020) 동작들은 파이프라인의 1 개, 2 개, 또는 그 초과의 스테이지들에서 수행될 수 있는 2 개 이상의 서브-동작들로 세분화될 수 있고, 이때 각각의 스테이지에 있는 하나 이상의 컴포넌트들 또는 파이프라인 유닛들은 특정 서브-동작을 수행하도록 구성된다. 적어도 몇몇 실시예들에서, 모드 결정(6020) 컴포넌트는 인트라 평가로부터의 최적의 인트라 모드, 직접 모드 평가로부터의 직접/스킵 모드 코스트, 및 모션 평가 엔진들로부터의 모션 벡터 후보자들을 수신한다. 적어도 몇몇 실시예들에서, 모드 결정 컴포넌트는 양방향 모드들에 대한 추가 코스트들을 계산하고, 매크로블록 파티션들, 서브-파티션들, 예측 방향 및 기준 프레임 인덱스들을 포함한 최적의 매크로블록 유형을 결정한다. 적어도 몇몇 실시예들에서, 모드 결정(6020) 컴포넌트는 또한 모든 모션 벡터 예측을 수행한다. 모션 벡터 예측 결과들은 모드 결정 동안 모션 벡터 레이트가 추정될 시에 사용될 수 있다. 적어도 몇몇 실시예들에서, 모션 벡터 예측 결과들은 또한 예를 들어, 직접 모드 평가 및 모션 벡터 레이트 평가에 사용되기 위해, 모드 결정(6020) 컴포넌트로부터 모션 평가로 다시 공급될 수 있다.
모션 보상 및 복원
적어도 몇몇 실시예들에서, 모션 보상 및 복원(6030) 동작들은 파이프라인의 1 개, 2 개, 또는 그 초과의 스테이지들에서 수행될 수 있는 2 개 이상의 서브-동작들로 세분화될 수 있고, 이때 각각의 스테이지에 있는 하나 이상의 컴포넌트들 또는 파이프라인 유닛들은 특정 서브-동작을 수행하도록 구성된다. 예를 들어, 몇몇 실시예들에서, 모션 보상 및 복원(6030)은 루마 모션 보상 및 복원, 및 크로마 모션 보상 및 복원으로 세분화될 수 있다. 적어도 몇몇 실시예들에서, 모션 보상 및 복원(6030)의 이들 서브-동작들 각각은 파이프라인의 하나 이상의 스테이지들에 있는 하나 이상의 컴포넌트들 또는 파이프라인 유닛들에 의해 수행될 수 있다.
루마 모션 보상 및 복원
적어도 몇몇 실시예들에서, 파이프라인의 루마 모션 보상 컴포넌트는 모드 결정(6020)으로부터 최적 모드 및 해당 모션 벡터들을 수신한다. 이전에 유의한 바와 같이, 각각의 모션 평가 엔진은 메모리로부터 기준 프레임 데이터를 판독 및 저장하는 메모리 컴포넌트를 포함할 수 있다. 최적 모드가 인터-예측화인 경우, 루마 모션 보상 컴포넌트는 모션 벡터들에 대응하는 모션 평가 엔진으로부터 기준 프레임 매크로블록들을 요청한다. 모션 평가 엔진은 요청 크기에 의존하여 서브픽셀 보간처리된 4x4 또는 8x8 블록들을 되돌려보낸다. 루마 모션 보상 컴포넌트는 그 후에 예측 매크로블록들에 블록들을 조합시킨다. 루마 모션 보상 컴포넌트는 그 후에 최종 매크로블록 예측기를 생성하기 위해 가중치화된 예측을 예측 매크로블록들에 적용하고, 상기 최종 매크로블록 예측기는 그 이후에 루마 복원 컴포넌트로 전달된다.
적어도 몇몇 실시예들에서, 파이프라인의 루마 복원 컴포넌트는 인트라 예측(적어도 몇몇 실시예들에서, 루마 모션 보상 컴포넌트는 인터 예측을 수행함), FTQ(forward transform and quantization), 및 ITQ(inverse transform and quantization)를 포함하여, 루마에 대한 매크로블록 복원을 수행한다.
적어도 몇몇 실시예들에서, 모드 결정(6020)으로부터의 최적 모드에 기반하여, 인터 예측 매크로블록은 루마 모션 보상 컴포넌트로부터 전달되거나, 인트라 예측은 루마 복원 컴포넌트에 의해 수행되어 예측 블록을 발생시킨다. 인트라 모드에서, 예측은 블록(스캔) 순서로 수행되는데, 이는 이웃 블록들로부터의 복원된 픽셀들이 향후 블록들의 예측에 대해 필요하기 때문이다. 입력 블록은 예측 블록으로부터 감산되어 잔여 블록을 발생시킨다. 이러한 잔여 픽셀 데이터는 루마 복원 컴포넌트에 의해 구현된 FTQ 기법에 의해 변환 및 양자화된다. 계수 데이터는 루마 복원 컴포넌트에 의해 구현된 ITQ 기법으로 전송되고, CAVLC 인코딩으로 다운스트림 전송될 수 있다. ITQ 기법은 복원된 잔여 픽셀 블록을 발생시킨다. 예측 블록은 잔여 블록에 추가되어 복원된 블록을 발생시킨다. 복원된 픽셀들은 디블록킹 필터로 다운스트림 전달될 수 있다. 적어도 몇몇 실시예들에서, 복원된 픽셀들은 또한 현재 매크로블록 내부의 향후 블록들의 예측을 위하여, 인트라-프레임 및 인터-프레임 평가(6010)의 인트라-프레임 평가 컴포넌트로 다시 전달될 수 있다.
크로마 모션 보상 및 복원
적어도 몇몇 실시예들에서, 크로마 복원은 2 개의 스테이지들에서 수행된다. 제1 스테이지에서, 인터 예측에 필요한 크로마 기준 블록들은 입력 매크로블록 유형, 모션 벡터들, 및 기준 프레임 인덱스에 기반하여 메모리로부터 판독된다. 서브픽셀 보간 및 가중치화된 예측은 그 후에 예측 매크로블록을 발생시키기 위해 적용된다. 제2 스테이지에서, 크로마 인트라 예측 및 크로마 인트라/인터 FTQ/ITQ가 수행된다. 이는 하나의 추가 파이프라인 스테이지가 크로마 예측 픽셀 데이터를 로딩하는 것을 허용한다. 크로마 픽셀들이 모션 평가에 의해 검색되지 않기 때문에, 크로마 예측 데이터는 외부 메모리로부터 판독되고, 큰 레이턴시를 가질 수 있다. 적어도 몇몇 실시예들에서, 크로마 모션 보상 컴포넌트는 제1 스테이지를 수행하는 반면, 크로마 복원 컴포넌트는 제2 스테이지를 수행한다.
적어도 몇몇 실시예들에서, 크로마 모션 보상 컴포넌트는 Cb 및 Cr 크로마 블록들에 대한 서브픽셀 보간을 포함한 예측 블록을 발생시키고; 크기는 파티션 크기 및 크로마 포맷들에 기반한다. 전체 크기 크로마 블록은 크로마 포맷들 4:2:0, 4:2:2 및 4:4:4 각자에 대해 8x8, 8x16, 또는 16x16 픽셀들이다. 적어도 몇몇 실시예들에서, 크로마 모션 보상 컴포넌트는 (파이프라인의) 외부 메모리로부터 크로마 예측 픽셀들을 프리페칭(prefetching) 및 캐싱할 수 있다. 적어도 몇몇 실시예들에서, 기준 데이터는 모드 결정(6020) 결과들에 기반하여 판독될 수 있다. 크로마 모션 보상 컴포넌트는 예측 블록을 발생시키기 위해 서브픽셀 보간을 수행한다. 모드 결정(6020)은 매크로블록 유형 및 서브-유형들, 파티션당 기준 프레임 인덱스, 및 해당 모션 벡터들을 제공한다. 예측은 크로마 복원 컴포넌트로 출력된다.
적어도 몇몇 실시예들에서, 크로마 복원 컴포넌트는 인터 및 인트라 모드들에 대해 크로마 예측, 크로마 인트라 평가 및 크로마 복원을 수행한다. 크로마 포맷들 4:2:0 및 4:2:2에 대해, 인트라 크로마 평가 및 예측이 수행된다. 적어도 몇몇 실시예들에서, 크로마 인트라 평가는 인트라-프레임 및 인터-프레임 평가(6010)에서 보다는 오히려 이러한 스테이지에서 수행되고, 그 결과 복원된 픽셀들은 평가 프로세스 동안 사용될 수 있다. 적어도 몇몇 실시예들에서, 최적 모드가 인트라에 있는 경우, 인트라 크로마 평가는 최적의 인트라 크로마 모드에 기반하여, 수행될 수 있고, 인트라 예측은 4 개의 인트라 크로마 모드들 중 하나를 사용하여 수행될 수 있다. 인터 매크로블록들에 대해, 인터 크로마 예측 픽셀들은 크로마 모션 보상으로부터 수신된다. 크로마 포맷 4:4:4에 대해, 루마 인트라 예측 모드들은 크로마 블록 예측을 발생시키기 위해 사용되고, 인터 크로마 예측은 루마에 대한 것과 동일한 방식으로 수행된다. 그러므로, 크로마 복원은 4:4:4 크로마 포맷으로 크로마를 복원하기 위해 사용된 4:2:0 및 4:2:2 크로마 복원 및 루마 복원을 개념적으로 포함한다.
CAVLC 인코드 및 디블록킹
적어도 몇몇 실시예들에서, CAVLC 인코딩 및 디블록킹은 파이프라인의 마지막 스테이지에 있는 하나 이상의 컴포넌트들에 의해 수행될 수 있다. 적어도 몇몇 실시예들에서, 파이프라인의 디블록킹 필터 컴포넌트는 크로마 복원 컴포넌트로부터 복원된 루마 및 크로마 픽셀들을 수신하고, H.264 Recommendation에 따라 디블록킹 필터링을 수행한다. 결과들은 메모리로 출력될 수 있다.
적어도 몇몇 실시예들에서, 파이프라인의 CAVLC 인코드 컴포넌트는 크로마 복원 컴포넌트로부터 루마 및 크로마 양자화된 계수들, 이웃 데이터, 및 크로마 복원 결과들을 적어도 수신하고, CAVLC(context-daptive variable-length coding) 인코딩된 출력 스트림을 메모리로 발생시킨다.
적어도 몇몇 실시예들에서, 디블록킹 필터 컴포넌트 및 CAVLC 인코드 컴포넌트는 4-행 경계들에 있는, 4-행의 하측 행에 대한 이웃 데이터를 메모리에 기입한다. 다음 4-행의 상측 행에 대해, 매크로블록 입력(6002)은 그 후에 4-행 경계들에 있는 이러한 이웃 데이터를 메모리로부터 판독하고, 이웃 데이터를 파이프라인의 적어도 하나의 다운스트림 스테이지로 전달할 수 있다.
트랜스코더
적어도 몇몇 실시예들에서, 트랜스코딩 동작은 트랜스코더(6050)에 의해 수행될 수 있다. 트랜스코더는 파이프라인의 기능적 컴포넌트로서, 또는 파이프라인 외부에 있는 기능적 컴포넌트로서 구현될 수 있다. 적어도 몇몇 실시예들에서, 트랜스코더(6050)는, 파이프라인에 의해 출력된 CAVLC(context-adaptive variable-length coding) 인코딩된 스트림을 CABAC(context-adaptive binary arithmetic coding) 인코딩된 스트림으로 메모리-투-메모리(memory-to-memory) 변환하는 것을 수행할 수 있다.
적어도 몇몇 실시예들에서, 파이프라인은 스캔 순서와는 다른 순서, 예를 들어 본 명세서에 이전에 기술된 바와 같은 나이트 순서로 인코딩될 수 있다. 그러나, 궁극적으로, H.264 비디오 인코더의 인코딩된 비트 스트림은 종래의 매크로블록 스캔 순서로 송신되어야 한다. 적어도 몇몇 실시예들에서, 나이트 순서로부터 스캔 순서로 매크로블록 출력을 재-순서 배치함(re-ordering)은 인코딩된 데이터를 4 개의 서로 다른 출력 버퍼들에 기입하는 CAVLC 인코드 컴포넌트에 의해 달성되고, 이때 각각의 출력 버퍼는 매크로블록 행에 대응한다. 4-행의 끝에서, 각각의 행 버퍼는 각자의 행에 대한 인코딩된 매크로블록들의 스캔 순서 스트림을 포함할 것이다. 트랜스코더(6050)는 매크로블록 행 경계들에서 연속적인 스트림을 발생시키기 위해 각각의 행의 시작 및 끝을 스티칭(stitching)하는 것을 다룬다. 적어도 몇몇 실시예들에서, 파이프라인은 트랜스코더(6050)에 의해 행들의 스티칭을 용이하게 하기 위해 CAVLC 출력 스트림에 메타데이터를 내장시킬 수 있다.
예시 비디오 인코더 장치
도 17은 적어도 몇몇 실시예들에 따른, 예시 비디오 인코더 장치(7000)의 블록 다이어그램이다. 비디오 인코더 장치(7000)는, 예를 들어, 집적 회로(IC)로서 또는 IC 상의 서브시스템 그 예로서 시스템-온-어-칩(SOC)으로서 구현될 수 있다. 적어도 몇몇 실시예들에서, 비디오 인코더 장치(7000)는 파이프라인(7040) 컴포넌트, 프로세서(7010) 컴포넌트(예컨대, 저-전력 멀티코어 프로세서), 메모리 관리 유닛(MMU)(7020), DMA(7030), 및 장치의 기능적 컴포넌트들을 상호연결시키는 상호연결부(7050) 그 예로서 버스 서브시스템 또는 패브릭을 포함할 수 있다. 비디오 인코더 장치(7000)의 프로세서(7010) 컴포넌트는 예를 들어, 파이프라인(7040)의 프레임-레벨 제어 그 예로서 레이트 제어를 수행하고, 파이프라인(7040) 내의 개별적인 파이프라인 유닛들의 구성을 포함한 파이프라인(7040) 구성을 수행하며, 예를 들어 비디오 인코더(7000) 구성에 대한 드라이버를 통해 애플리케이션 소프트웨어와 인터페이싱을 할 수 있다. MMU(7020)은 예를 들어 비디오 입력 및/또는 출력을 스트리밍하기 위해, 외부 메모리에 대한 인터페이스로서 역할을 할 수 있다. 파이프라인(7040) 컴포넌트는 DMA(7030)을 경유하여 MMU(7020)를 통해 메모리를 액세스할 수 있다. 몇몇 실시예들에서, 비디오 인코더 장치(7000)는 도 17에 도시되지 않은 다른 기능적 컴포넌트들 또는 유닛들, 또는 도 17에 도시된 것보다 적은 기능적 컴포넌트들을 포함할 수 있다. 파이프라인(7040) 컴포넌트에 의해 구현될 수 있는 예시 블록 프로세싱 방법은 도 16에 도시된다. 적어도 하나의 비디오 인코더 장치(7000)를 포함할 수 있는 예시 시스템-온-어-칩(SOC)은 도 18에 예시된다.
예시 시스템 온 어 칩(SOC)
이제, 도 18로 돌아 오면, 비디오 인코더 장치의 적어도 하나의 인스턴스를 포함할 수 있는 시스템-온-어-칩(SOC)(8000)의 일 실시예의 블록 다이어그램은 도 3 내지 도 17에 예시된 바와 같은 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현할 수 있는 블록 프로세싱 파이프라인을 포함한다. 메모리(8800)에 연결된 SOC(8000)가 도시된다. 이름에서 암시되는 바와 같이, SOC(8000)의 컴포넌트들은 집적 회로 "칩"처럼 단일 반도체 기판 상에 집적될 수 있다. 일부 실시예에서, 컴포넌트들은 시스템에서 둘 이상의 별 개의 칩들 상에 구현될 수 있다. 그러나, SOC(8000)는 본 명세서에서 예시로서 사용될 것이다. 예시된 실시예에서, SOC(8000)의 컴포넌트들은 중앙 프로세싱 유닛(CPU) 컴플렉스(8020), 온-칩 주변 컴포넌트들(8040A 및 8040B)(보다 더 간단하게, "주변장치들"), 메모리 제어기(MC)(8030), 비디오 인코더(7000)(그 자체는 주변 컴포넌트로 간주될 수 있음), 및 통신 패브릭(8010)을 포함한다. 컴포넌트들(8020, 8030, 8040A 및 8040B, 및 7000)은 모두 통신 패브릭(8010)에 결합될 수 있다. 메모리 제어기(8030)는 사용 중에 메모리(8800)에 결합될 수 있고, 주변장치(8040B)는 사용 중에 외부 인터페이스(8900)에 결합될 수 있다. 예시된 실시예에서, CPU 컴플렉스(8020)는 하나 이상의 프로세서들(P)(8024) 및 레벨 2(L2) 캐시(8022)를 포함한다.
주변장치들(8040A 및 8040B)은 SOC(8000)에 포함된 추가 하드웨어 기능성의 임의의 세트일 수 있다. 예를 들어, 주변장치들(8040A 및 8040B)은 비디오 주변장치들 그 예로서 카메라 또는 다른 이미지 센서로부터의 이미지 캡쳐 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, 하나 이상의 디스플레이 디바이스들 상에 비디오 데이터를 디스플레잉하도록 구성된 디스플레이 제어기들, 그래픽 프로세싱 유닛들(GPU들), 비디오 인코더/디코더들, 스케일러(scaler)들, 로테이터(rotator)들, 블렌더(blender)들, 기타 등등을 포함할 수 있다. 주변장치들은 오디오 주변장치들 그 예로서 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 오디오 프로세서들, 디지털 신호 프로세서들, 믹서들, 기타 등등을 포함할 수 있다. 주변장치들은, 인터페이스들 그 예로서 범용 직렬 버스(USB), PCI 익스프레스(PCIe)를 포함한 주변장치 컴포넌트 상호연결부(PCI), 직렬 및 병렬 포트들, 기타 등등을 포함한 SOC(8000) 외부의 다양한 인터페이스들(8900)에 대한 주변장치 인터페이스 제어기들(예컨대, 주변장치(8040B))을 포함할 수 있다. 주변장치들은 네트워킹 주변장치들 그 예로서 미디어 액세스 제어기들(MAC들)을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다.
보다 구체적으로 도 18에서, SOC(8000)는 비디오 인코더(7000) 컴포넌트, 예를 들어 도 16에 예시된 바와 같은 블록 프로세싱 방법(6000)을 구현하는 블록 프로세싱 파이프라인(7040) 컴포넌트를 포함한 도 17에 예시된 바와 같은 비디오 인코더(7000)의 적어도 하나의 인스턴스를 포함할 수 있다. 비디오 인코더(7000)는 입력 포맷으로부터의 입력 비디오 프레임들을, H.264/AVC 표준에 기술된 바와 같은 H.264/AVC(Advanced Video Coding) 포맷으로 변환시키도록 구성될 수 있는 H.264 비디오 인코더 장치일 수 있다. 블록 프로세싱 파이프라인(7040)은 도 3 내지 도 16에 관련되어 본원에서 기술된 바와 같은 블록 프로세싱 방법들 및 장치들 중 하나 이상을 구현할 수 있다.
CPU 컴플렉스(8020)는 SOC(8000)의 CPU 역할을 하는 하나 이상의 CPU 프로세서들(8024)을 포함할 수 있다. 시스템의 CPU는 시스템의 메인 제어 소프트웨어, 그 예로서 운영체제를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 다른 컴포넌트들을 제어하여 원하는 시스템의 기능성을 실현할 수 있다. 프로세서들(8024)은 또한 다른 소프트웨어, 그 예로서 애플리케이션 프로그램들을 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능성을 제공할 수 있고, 저 레벨 디바이스 제어를 위해 운영체제에 의존할 수 있다. 따라서, 프로세서들(8024)은 또한 애플리케이션 프로세서들로 지칭될 수 있다. CPU 컴플렉스(8020)는 다른 하드웨어, 그 예로서 L2 캐시(8022) 및/또는 시스템의 다른 컴포넌트들에 대한 인터페이스(예컨대, 통신 패브릭(8010)에 대한 인터페이스)를 더 포함할 수 있다. 일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로 및/또는 마이크로코드를 포함할 수 있다. 명령어들을 실행시키는 것에 응답하여 프로세서들 상에/에 의해 동작되는 명령어들 및 데이터는 메모리(8800)에 일반적으로 저장될 수 있지만, 소정의 명령어들 역시 주변장치들로의 직접적인 프로세서 액세스에 대해 정의될 수 있다. 프로세서들은 시스템 온 어 칩(SOC(8000)) 또는 다른 레벨들의 통합부로서 다른 컴포넌트들과 함께 집적 회로 상에서 구현된 프로세서 코어들을 망라할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 프로세서 코어들 및/또는 멀티칩 모듈 구현부들 내에 집적화된 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들, 기타 등등을 더 망라할 수 있다.
메모리 제어기(8030)는 일반적으로, SOC(8000)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고 메모리(8800)를 액세스하여 메모리 동작들을 완료하기 위한 회로를 포함할 수 있다. 메모리 제어기(8030)는 임의의 유형의 메모리(8800)를 액세스하도록 구성될 수 있다. 예를 들어, 메모리(8800)는 SRAM(static random access memory), DRAM(dynamic RAM), 그 예로서 더블 데이터 레이트(DDR, DDR2, DDR3 기타 등등) DRAM을 포함하는 SDRAM(synchronous DRAM)일 수 있다. 저전력/모바일 버전들의 DDR DRAM(예컨대 LPDDR, mDDR 기타 등등)이 지원될 수 있다. 메모리 제어기(8030)는, 동작들을 지시하고(그리고 잠재적으로 재지시하고) 동작들을 메모리(8800)에 제시하는, 메모리 동작들을 위한 큐(queue)들을 포함할 수 있다. 메모리 제어기(8030)는 메모리로의 기입을 기다리는 기입 데이터 및 메모리 동작의 소스로의 복귀를 기다리는 판독 데이터를 저장하는 데이터 버퍼들을 더 포함할 수 있다. 몇몇 실시예들에서, 메모리 제어기(8030)는 최근에 액세스된 메모리 데이터를 저장하는 메모리 캐시를 포함할 수 있다. SOC 구현예들에서, 예를 들어, 메모리 캐시는, 다시 곧 액세스될 것으로 예상되는 경우에 메모리(8800)로부터의 데이터의 재-액세스를 피함으로써, SOC에서의 전력 소비를 감소시킬 수 있다. 일부 경우들에서, 메모리 캐시는 또한, 소정의 컴포넌트들만을 보조하는 프라이빗 캐시들 그 예로서 프로세서들(8024)에서의 L2 캐시(8022) 또는 캐시들과 상반되는 것과 같은, 시스템 캐시로서 지칭될 수 있다. 추가적으로, 몇몇 실시예에서, 시스템 캐시는 메모리 제어기(8030) 내에 위치될 필요가 없다.
실시예에서, 메모리(8800)는 칩-온-칩 또는 패키지-온-패키지 구성으로 SOC(8000)와 함께 패키징될 수 있다. SOC(8000) 및 메모리(8800)의 멀티칩 모듈 구성 역시 사용될 수 있다. 그러한 구성들은 시스템 내의 다른 컴포넌트들로의(예컨대, 종점들 16A 및 16B로의) 송신들보다 (데이터 관측 면에서) 상대적으로 더 안정적일 수 있다. 따라서, 보호 데이터는 메모리(8800)에 암호화되지 않은 상태로 상주할 수 있는 반면, 보호 데이터는 SOC(8000)와 외부 종점들 사이에서의 교환을 위해 암호화될 수 있다.
통신 패브릭(8010)은 SOC(8000)의 컴포넌트들 중에서 통신을 위한 임의의 통신 상호연결부 및 프로토콜일 수 있다. 통신 패브릭(8010)은 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브릿지를 갖는 계층적 버스들을 포함한 버스에 기반할 수 있다. 통신 패브릭(8010)은 또한 패킷에 기반할 수 있고, 브릿지를 갖는 계층부이거나, 크로스 바, 지점 간 연결부(point-to-point), 또는 다른 상호연결부들일 수 있다.
SOC(8000)의 컴포넌트들의 개수(및 도 18에 도시된 것들, 그 예로서 CPU 컴플렉스(8020) 내에 있는 것들에 대한 서브컴포넌트들의 개수)가 실시예 간에서 변화할 수 있다는 것을 유의한다. 도 18에 도시된 개수보다 많거나 적은 각각의 컴포넌트/서브컴포넌트가 있을 수 있다.
예시 시스템
도 19는 시스템(9000)의 일 실시예의 블록 다이어그램이다. 예시된 실시예에서, 시스템(9000)은 하나 이상의 외부 주변장치들(9020) 및 외부 메모리(8800)에 결합된 SOC(8000)의 적어도 하나의 인스턴스를 포함한다. SOC(8000)로 공급 전압들, 나아가 메모리(8800) 및/또는 주변장치들(9020)로 하나 이상의 공급 전압들을 공급하는 전력 관리 유닛(PMU)(9010)이 제공된다. 몇몇 실시예들에서, SOC(8000)의 둘 이상의 인스턴스가 포함될 수 있다(그리고 둘 이상의 메모리(8800) 역시 포함될 수 있음).
주변장치들(9020)은 시스템(9000)의 유형에 의존하여, 임의의 원하는 회로를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(9000)은 모바일 디바이스(예컨대, 개인용 휴대 단말기(PDA), 스마트 폰, 기타 등등)일 수 있으며, 주변장치들(9020)은 다양한 유형들의 무선 통신용 디바이스들, 그 예로서 WiFi, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템, 기타 등등을 포함할 수 있다. 주변장치들(9020)은 또한 RAM 스토리지, 솔리드 스테이트 스토리지, 또는 디스크 스토리지를 포함한 추가적인 스토리지를 포함할 수 있다. 주변장치들(9020)은 사용자 인터페이스 디바이스들 그 예로서 터치 디스플레이 스크린들 또는 멀티터치 디스플레이 스크린들을 포함한 디스플레이 스크린, 키보드 또는 다른 입력 디바이스들, 마이크로폰들, 스피커들, 기타 등등을 포함할 수 있다. 다른 실시예들에서, 시스템(9000)은 임의의 유형의 컴퓨팅 시스템(예컨대 데스크탑 퍼스털 컴퓨터, 랩탑, 워크스테이션, 넷탑 기타 등등)일 수 있다.
외부 메모리(8800)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(8800)는 SRAM, 동적 RAM(DRAM) 그 예로서 동기 DRAM(SDRAM), 더블 데이터 레이트(DDR, DDR2, DDR3, 기타 등등) SDRAM, RAMBUS DRAM, 저 전력 버전들의 DDR DRAM(예컨대, LPDDR, mDDR, 기타 등등), 기타 등등일 수 있다. 외부 메모리(8800)는 메모리 디바이스들이 실장되는 하나 이상의 메모리 모듈들, 그 예로서 단일 인라인 메모리 모듈들(SIMM들), 듀얼 인라인 메모리 모듈들(DIMM들), 기타 등등을 포함할 수 있다. 대안으로, 외부 메모리(8800)는 칩-온-칩 또는 패키지-온-패키지 구현예로 SOC(8000) 상에 실장되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.
본 명세서에 기술된 방법들은 서로 다른 실시예들에서, 소프트웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다. 추가로, 방법들의 블록들의 순서는 변화될 수 있고, 다양한 요소들이 추가, 재순서화, 조합, 생략, 수정, 기타 등등될 수 있다. 다양한 수정들 및 변화들은 본원의 이익을 가진 기술분야의 통상의 기술자에게 명백할 시에 이루어질 수 있다. 본 명세서에 기술된 다양한 실시예들은 제한적이지 않는 것으로 예시적으로 의미된다. 많은 변화들, 수정들, 추가들 및 개선들이 가능하다. 이에 따라서, 복수의 인스턴스들은 본 명세서에 기술된 컴포넌트들에 대해 단일 인스턴스로서 제공될 수 있다. 다양한 컴포넌트들 사이의 경계들, 동작들, 및 데이터 저장들은 다소 임의적이고, 특정 동작들은 특정 예시 구성들의 맥락에서 예시된다. 기능성의 다른 할당들은 구상되고, 다음의 청구항들의 범주 내에 속할 수 있다. 마지막으로, 예시 구성들에서 별개의 컴포넌트들로서 제시된 구조들 및 기능성들은 조합된 구조 또는 컴포넌트로 구현될 수 있다. 이들 및 다른 변화들, 수정들, 추가들 및 개선들은 다음의 청구항들에 정의된 바와 같이 실시예들의 범주 내에 속할 수 있다.

Claims (20)

  1. 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치로서,
    복수의 스테이지들을 포함한 블록 프로세싱 파이프라인- 상기 블록 프로세싱 파이프라인의 복수의 스테이지들 중 하나 이상은 각각 소프트웨어 파이프라인의 컴포넌트, 및 하드웨어 파이프라인의 컴포넌트를 포함하고, 상기 소프트웨어 및 하드웨어 파이프라인들은 프레임으로부터의 픽셀들의 블록들을 병렬로 프로세싱하도록 구성됨 -을 포함하며,
    상기 하나 이상의 스테이지들 각각에 있는 상기 소프트웨어 파이프라인 컴포넌트는 상기 블록들에 대한 획득 정보에 따라 상기 각자의 스테이지의 상기 하드웨어 파이프라인 컴포넌트에서 상기 블록들을 프로세싱하는 구성들을 반복적으로 결정하도록 구성되고;
    상기 하나 이상의 스테이지들 각각에 있는 상기 하드웨어 파이프라인 컴포넌트는 상기 각자의 스테이지에 있는 상기 소프트웨어 파이프라인 컴포넌트에 의해 결정된 상기 블록들을 프로세싱하는 구성들에 따라 상기 블록들을 반복적으로 프로세싱하도록 구성되며;
    상기 하나 이상의 스테이지들 각각에 있는 상기 하드웨어 파이프라인 컴포넌트는, 상기 각자의 스테이지에 있는 상기 소프트웨어 파이프라인 컴포넌트가 다가오는 블록에 대한 획득 정보에 따라 상기 각자의 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트에 의해 프로세싱될 상기 다가오는 블록에 대한 구성을 결정하는 중에 있는 동안, 현재 블록에 대한 획득 정보에 따라 상기 각자의 스테이지에 있는 상기 소프트웨어 파이프라인 컴포넌트에 의해 이전에 결정된 상기 현재 블록을 프로세싱하는 구성에 따라 상기 스테이지에 있는 상기 현재 블록을 프로세싱하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  2. 제1항에 있어서, 상기 하나 이상의 스테이지들 각각에 있는 상기 소프트웨어 파이프라인 컴포넌트는 상기 블록 프로세싱 파이프라인의 업스트림 스테이지로부터 상기 블록들에 대한 상기 정보의 적어도 일부를 수신하도록 더 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  3. 제1항에 있어서, 상기 블록들에 대한 상기 정보는 상기 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트에 의해 이전에 프로세싱된 블록들로부터의 정보를 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  4. 제1항에 있어서, 상기 소프트웨어 파이프라인 컴포넌트들 중 적어도 하나는 상기 블록들에 대한 상기 정보를, 상기 블록 프로세싱 파이프라인의 다운스트림 스테이지로 출력시키도록 더 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  5. 제1항에 있어서, 상기 하나 이상의 스테이지들 각각에 있는 상기 하드웨어 파이프라인 컴포넌트는:
    상기 블록 프로세싱 파이프라인의 이전 스테이지로부터 프로세싱될 상기 블록들을 수신하며;
    상기 프로세싱된 블록들을, 상기 블록 프로세싱 파이프라인의 다음 스테이지로, 또는 외부 메모리로 출력시키도록 더 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  6. 제1항에 있어서, 상기 블록 프로세싱 파이프라인은 초기 스테이지를 포함하고, 상기 초기 스테이지는:
    상기 하드웨어 파이프라인으로의 입력을 위한 블록들을 버퍼링하고;
    상기 버퍼링된 블록들 중 하나 이상에 대한 블록 통계들을 계산하며;
    상기 블록 프로세싱 파이프라인의 다운스트림 스테이지에 있는 소프트웨어 파이프라인 컴포넌트로, 상기 블록 통계들을, 상기 블록들에 대한 정보로서 입력시키도록 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  7. 제1항에 있어서, 각각의 스테이지에 있는 상기 소프트웨어 파이프라인 컴포넌트는, 상기 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트에 의해 프로세싱될 각각의 블록에 대해:
    상기 블록에 대한 획득 정보에 따라 상기 스테이지의 상기 하드웨어 파이프라인 컴포넌트에서 상기 블록을 프로세싱하는 특정 구성을 결정하고;
    상기 구성을 구성 메모리에 기입하며;
    상기 구성이 상기 구성 메모리에 준비되었다라는 신호를, 상기 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트로 전송하도록 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  8. 제7항에 있어서, 상기 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트는:
    상기 스테이지에 있는 상기 소프트웨어 파이프라인 컴포넌트로부터 상기 신호를 검출하고;
    상기 구성 메모리로부터 상기 구성을 액세스하고;
    상기 구성 메모리가 클리어되었다라는 신호를 상기 소프트웨어 파이프라인 컴포넌트로 전송하며;
    상기 구성 메모리로부터의 상기 구성에 따라 상기 블록을 프로세싱하도록 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  9. 제8항에 있어서, 상기 소프트웨어 파이프라인 컴포넌트는 상기 구성 메모리의 제1 부분에, 다음 블록에 대한 구성을 기입하도록 구성된 반면, 상기 하드웨어 파이프라인 컴포넌트는 상기 구성 메모리의 제2 부분으로부터 현재 블록에 대한 구성을 액세스하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 장치.
  10. 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법으로서,
    블록 프로세싱 파이프라인의 스테이지에 있는 소프트웨어 파이프라인 컴포넌트가 상기 스테이지에 있는 하드웨어 파이프라인 컴포넌트에 의해 프로세싱될 픽셀들의 블록에 대한 정보를 획득하는 단계 - 상기 블록 프로세싱 파이프라인은 프레임으로부터의 픽셀들의 블록들을, 병렬 소프트웨어 및 하드웨어 파이프라인들로 프로세싱하고, 상기 블록 프로세싱 파이프라인의 복수의 스테이지들 중 하나 이상은 각각 소프트웨어 파이프라인 컴포넌트 및 하드웨어 파이프라인 컴포넌트를 포함함 -;
    상기 소프트웨어 파이프라인 컴포넌트가 상기 블록에 대한 상기 획득된 정보에 따라 상기 하드웨어 파이프라인 컴포넌트에서 상기 블록을 프로세싱하는 구성을 결정하는 단계; 및
    상기 블록에 대해 상기 결정된 구성에 따라 상기 하드웨어 파이프라인 컴포넌트에서 상기 블록을 프로세싱하는 단계를 포함하며,
    상기 하드웨어 파이프라인 컴포넌트는, 상기 소프트웨어 파이프라인 컴포넌트가 다가오는 블록에 대한 획득 정보에 따라 상기 하드웨어 파이프라인 컴포넌트에 의해 프로세싱될 상기 다가오는 블록에 대한 구성을 결정하는 중에 있는 동안, 상기 블록에 대한 상기 획득 정보에 따라 상기 소프트웨어 파이프라인 컴포넌트에 의해 결정된 상기 블록에 대한 상기 구성에 따라 상기 블록을 프로세싱하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법.
  11. 제10항에 있어서, 상기 블록에 대한 상기 정보는 상기 블록 프로세싱 파이프라인의 업스트림 스테이지로부터 수신된 블록 정보를 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법.
  12. 제10항에 있어서, 상기 블록에 대한 상기 정보는 상기 스테이지에 있는 상기 하드웨어 파이프라인 컴포넌트에 의해 이전에 프로세싱된 또 다른 블록으로부터의 정보를 더 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법.
  13. 제10항에 있어서,
    상기 소프트웨어 파이프라인 컴포넌트가 상기 블록에 대한 상기 구성을 구성 메모리에 기입하는 단계;
    상기 하드웨어 파이프라인 컴포넌트에, 상기 블록에 대한 상기 구성이 상기 구성 메모리에 준비되었다는 신호를 전송하는 단계; 및
    상기 하드웨어 파이프라인 컴포넌트가 상기 신호를 전송하는 단계에 응답하여 상기 구성 메모리로부터 상기 블록에 대한 상기 구성을 판독하는 단계를 더 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법.
  14. 제13항에 있어서, 상기 판독 단계 다음에 상기 구성 메모리가 클리어되었다라는 신호를 상기 소프트웨어 파이프라인 컴포넌트로 전송하는 단계를 더 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 방법.
  15. 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스로서,
    메모리; 및
    비디오 프레임들을 프로세싱하고, 상기 프로세싱된 비디오 프레임들을 프레임 데이터로서 상기 메모리에 저장하도록 구성된 장치 - 상기 장치는 하나 이상의 파이프라인 유닛들을 포함한 복수의 스테이지들 각각을 구현하는 블록 프로세싱 파이프라인을 포함하고, 각각의 파이프라인 유닛은 상기 파이프라인을 통과한 프레임으로부터의 픽셀들의 블록에 관한 하나 이상의 동작들을 수행하도록 구성됨 -를 포함하며,
    상기 블록 프로세싱 파이프라인 내의 상기 파이프라인 유닛들 중 하나 이상은 각각:
    현재 구성에 따라 상기 파이프라인 유닛의 유닛 코어에서 현재 블록을 프로세싱하고;
    다음 블록에 대한 획득 정보에 따라 상기 유닛 코어에서 상기 다음 블록을 프로세싱하는 구성을 결정하며;
    상기 다음 블록에 대한 상기 구성에 따라 상기 유닛 코어에서 상기 다음 블록을 프로세싱하도록 구성되며,
    상기 파이프라인 유닛은 상기 다음 블록에 대한 상기 획득 정보에 따라 상기 유닛 코어에서 상기 다음 블록을 프로세싱하는 구성을 결정하는 반면, 상기 파이프라인 유닛의 상기 유닛 코어는 상기 현재 구성에 따라 상기 현재 블록을 프로세싱하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
  16. 제15항에 있어서, 상기 다음 블록에 대한 상기 정보는 상기 블록 프로세싱 파이프라인의 업스트림 프로세싱 유닛으로부터 수신된 정보, 및 상기 프로세싱 유닛에 의해 이전에 프로세싱된 블록으로부터의 정보를 포함하는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
  17. 제15항에 있어서, 상기 하나 이상의 파이프라인 유닛들 중 적어도 하나는 상기 블록 프로세싱 파이프라인의 다음 스테이지로 프로세싱된 블록들을 출력시키고, 상기 프로세싱된 블록들에 대한 정보를, 상기 블록 프로세싱 파이프라인의 다운스트림 스테이지로 출력시키도록 더 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
  18. 제15항에 있어서, 상기 하나 이상의 파이프라인 유닛들 각각은 상기 유닛 코어에서 상기 다음 블록을 프로세싱하는 구성을 구성 메모리에 저장하고, 상기 유닛 코어에, 상기 다음 블록을 프로세싱하기 위한 상기 구성이 상기 구성 메모리에 준비되었다는 신호를 전송하도록 더 구성되고, 상기 유닛 코어는:
    상기 신호에 응답하여 상기 구성을 상기 구성 메모리로부터 판독하며;
    상기 구성 메모리가 클리어되었다라는 신호를 상기 파이프라인 유닛으로 전송하도록 구성되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
  19. 제18항에 있어서, 상기 유닛 코어에서 다음 블록을 프로세싱하기 위한 구성을 결정하는 것 및 상기 유닛 코어에, 상기 다음 블록을 프로세싱하기 위한 구성이 상기 구성 메모리에 준비되었다는 신호를 전송하는 것은 상기 각자의 파이프라인 유닛의 프로세서에 의해 수행되는, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
  20. 제15항에 있어서, 각각의 프레임은 픽셀들의 블록들의 행들로 세분화되고, 상기 장치는 각각의 프레임으로부터 상기 블록 프로세싱 파이프라인으로 상기 블록들을 입력시키도록 구성되고, 그 결과 행 상의 인접한 블록들은 상기 파이프라인의 인접한 스테이지들에 동시에 있지 않은, 블록 프로세싱 파이프라인들에서 디지털 비디오 프레임들을 프로세싱하기 위한 디바이스.
KR1020167010835A 2013-09-27 2014-08-20 병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들 KR101834901B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/039,729 2013-09-27
US14/039,729 US9215472B2 (en) 2013-09-27 2013-09-27 Parallel hardware and software block processing pipelines
PCT/US2014/051799 WO2015047601A1 (en) 2013-09-27 2014-08-20 Parallel hardware and software block processing pipelines

Publications (2)

Publication Number Publication Date
KR20160065900A KR20160065900A (ko) 2016-06-09
KR101834901B1 true KR101834901B1 (ko) 2018-03-08

Family

ID=51539325

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167010835A KR101834901B1 (ko) 2013-09-27 2014-08-20 병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들

Country Status (7)

Country Link
US (1) US9215472B2 (ko)
JP (1) JP6225250B2 (ko)
KR (1) KR101834901B1 (ko)
CN (1) CN105684036B (ko)
DE (1) DE112014004432T5 (ko)
TW (1) TWI533209B (ko)
WO (1) WO2015047601A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10313683B2 (en) * 2014-08-30 2019-06-04 Apple Inc. Video encoder with context switching
US9626286B2 (en) * 2014-10-03 2017-04-18 Sandisk Technologies Llc Hardware and firmware paths for performing memory read processes
US10218983B2 (en) 2015-09-30 2019-02-26 Apple Inc. Adapting mode decisions in video encoder
US20170164041A1 (en) * 2015-12-07 2017-06-08 Le Holdings (Beijing) Co., Ltd. Method and electronic device for playing videos
US10728546B2 (en) 2016-02-05 2020-07-28 Apple Inc. Sample adaptive offset systems and methods
US10460642B2 (en) 2016-06-30 2019-10-29 Apple Inc. Noise reduction in LED sensing circuit for electronic display
US20180122038A1 (en) * 2016-10-28 2018-05-03 Qualcomm Incorporated Multi-layer fetch during composition
KR20180080463A (ko) 2017-01-04 2018-07-12 삼성전자주식회사 반도체 장치 및 반도체 장치의 동작 방법
CN107483948A (zh) * 2017-09-18 2017-12-15 郑州云海信息技术有限公司 一种webp压缩处理中像素宏块处理方法
CN112313951A (zh) * 2018-06-28 2021-02-02 苹果公司 低延迟视频编码和传输的速率控制
WO2020006291A1 (en) 2018-06-28 2020-01-02 Apple Inc. Priority-based video encoding and transmission
CN112313954A (zh) 2018-06-28 2021-02-02 苹果公司 视频编码系统
US10812823B2 (en) 2018-07-11 2020-10-20 Apple Inc. Global motion vector video encoding systems and methods
US11330296B2 (en) 2020-09-14 2022-05-10 Apple Inc. Systems and methods for encoding image data
US11206415B1 (en) 2020-09-14 2021-12-21 Apple Inc. Selectable transcode engine systems and methods
US11778211B2 (en) 2021-09-16 2023-10-03 Apple Inc. Parallel video parsing for video decoder processing

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056513A1 (en) 2004-09-13 2006-03-16 Microsoft Corporation Accelerated video encoding using a graphics processing unit
EP2161685A2 (en) 2008-09-09 2010-03-10 Sony Corporation Pipelined image processing engine
US20100135383A1 (en) 2008-11-28 2010-06-03 Microsoft Corporation Encoder with multiple re-entry and exit points

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6005624A (en) 1996-12-20 1999-12-21 Lsi Logic Corporation System and method for performing motion compensation using a skewed tile storage format for improved efficiency
JP3007612B2 (ja) * 1997-09-01 2000-02-07 松下電器産業株式会社 マイクロコントローラ、データ処理システム及びタスクスイッチの制御方法
US8284844B2 (en) 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
KR100846778B1 (ko) 2002-07-16 2008-07-16 삼성전자주식회사 복수개의 주사 패턴을 이용한 부호화 방법, 복호화 방법,및 그 장치
GB0323284D0 (en) 2003-10-04 2003-11-05 Koninkl Philips Electronics Nv Method and apparatus for processing image data
KR20050078099A (ko) 2004-01-30 2005-08-04 삼성전자주식회사 적응적으로 키 프레임을 삽입하는 비디오 코딩 장치 및 방법
US7822116B2 (en) 2005-04-14 2010-10-26 Broadcom Corporation Method and system for rate estimation in a video encoder
US8537111B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US7929599B2 (en) * 2006-02-24 2011-04-19 Microsoft Corporation Accelerated video encoding
US7768520B2 (en) 2006-05-03 2010-08-03 Ittiam Systems (P) Ltd. Hierarchical tiling of data for efficient data access in high performance video applications
US7725745B2 (en) * 2006-12-19 2010-05-25 Intel Corporation Power aware software pipelining for hardware accelerators
US20080170611A1 (en) * 2007-01-17 2008-07-17 Srikrishna Ramaswamy Configurable functional multi-processing architecture for video processing
US8213511B2 (en) 2007-04-30 2012-07-03 Texas Instruments Incorporated Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction
JP2009134391A (ja) * 2007-11-29 2009-06-18 Renesas Technology Corp ストリーム処理装置、ストリーム処理方法及びデータ処理システム
US9179166B2 (en) 2008-12-05 2015-11-03 Nvidia Corporation Multi-protocol deblock engine core system and method
US20120076207A1 (en) 2008-12-31 2012-03-29 Advanced Micro Devices, Inc. Multiple-candidate motion estimation with advanced spatial filtering of differential motion vectors
US20120099657A1 (en) 2009-07-06 2012-04-26 Takeshi Tanaka Image decoding device, image coding device, image decoding method, image coding method, program, and integrated circuit
US8379718B2 (en) 2009-09-02 2013-02-19 Sony Computer Entertainment Inc. Parallel digital picture encoding
US8488673B2 (en) 2009-09-09 2013-07-16 Telefonaktiebolaget Lm Ericsson (Publ) Latency rate distortion optimisation
US9190012B2 (en) * 2009-12-23 2015-11-17 Ati Technologies Ulc Method and system for improving display underflow using variable HBLANK
US8879619B2 (en) 2010-07-15 2014-11-04 Sharp Laboratories Of America, Inc. Method of parallel video coding based on scan order
US8532383B1 (en) 2010-09-16 2013-09-10 Pixia Corp. Method of processing a viewport within large format imagery
US9288496B2 (en) 2010-12-03 2016-03-15 Qualcomm Incorporated Video coding using function-based scan order for transform coefficients
US9288500B2 (en) 2011-05-12 2016-03-15 Texas Instruments Incorporated Luma-based chroma intra-prediction for video coding
US20130003857A1 (en) 2011-06-29 2013-01-03 General Instrument Corporation Methods and system for using a scan coding pattern during inter coding
US9332259B2 (en) 2012-01-18 2016-05-03 Qualcomm Incorporated Indication of use of wavefront parallel processing in video coding
US9807385B2 (en) 2012-01-19 2017-10-31 Futurewei Technologies, Inc. Simplification of mode dependent intra smoothing
TWI775701B (zh) 2012-01-20 2022-08-21 美商Ge影像壓縮有限公司 允許平行處理之編碼器、解碼器、傳送解多工器、系統、儲存媒體、方法及電腦程式
US9179144B2 (en) * 2012-11-28 2015-11-03 Cisco Technology, Inc. Fast switching hybrid video decoder
US10349069B2 (en) * 2012-12-11 2019-07-09 Sony Interactive Entertainment Inc. Software hardware hybrid video encoder

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056513A1 (en) 2004-09-13 2006-03-16 Microsoft Corporation Accelerated video encoding using a graphics processing unit
EP2161685A2 (en) 2008-09-09 2010-03-10 Sony Corporation Pipelined image processing engine
US20100135383A1 (en) 2008-11-28 2010-06-03 Microsoft Corporation Encoder with multiple re-entry and exit points

Also Published As

Publication number Publication date
CN105684036A (zh) 2016-06-15
JP2016537845A (ja) 2016-12-01
KR20160065900A (ko) 2016-06-09
JP6225250B2 (ja) 2017-11-01
US20150092854A1 (en) 2015-04-02
DE112014004432T5 (de) 2016-06-16
CN105684036B (zh) 2019-01-22
TWI533209B (zh) 2016-05-11
WO2015047601A1 (en) 2015-04-02
TW201528135A (zh) 2015-07-16
US9215472B2 (en) 2015-12-15

Similar Documents

Publication Publication Date Title
KR101834901B1 (ko) 병렬 하드웨어 및 소프트웨어 블록 프로세싱 파이프라인들
US9843813B2 (en) Delayed chroma processing in block processing pipelines
US10757437B2 (en) Motion estimation in block processing pipelines
US9292899B2 (en) Reference frame data prefetching in block processing pipelines
US9473778B2 (en) Skip thresholding in pipelined video encoders
US9571846B2 (en) Data storage and access in block processing pipelines
US9106888B2 (en) Reducing quantization artifacts using neighbor-based weighted dithering
US9762919B2 (en) Chroma cache architecture in block processing pipelines
US9299122B2 (en) Neighbor context processing in block processing pipelines
US9218639B2 (en) Processing order in block processing pipelines
US9224186B2 (en) Memory latency tolerance in block processing pipelines
US9807410B2 (en) Late-stage mode conversions in pipelined video encoders
US9351003B2 (en) Context re-mapping in CABAC encoder
US9224187B2 (en) Wavefront order to scan order synchronization
US9305325B2 (en) Neighbor context caching in block processing pipelines
US9948934B2 (en) Estimating rate costs in video encoding operations using entropy encoding statistics
TWI583180B (zh) 具有上下文切換之視訊編碼器

Legal Events

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