KR20050012806A - 비디오 인코딩 및 디코딩 기술 - Google Patents

비디오 인코딩 및 디코딩 기술

Info

Publication number
KR20050012806A
KR20050012806A KR10-2004-7020598A KR20047020598A KR20050012806A KR 20050012806 A KR20050012806 A KR 20050012806A KR 20047020598 A KR20047020598 A KR 20047020598A KR 20050012806 A KR20050012806 A KR 20050012806A
Authority
KR
South Korea
Prior art keywords
video
search space
macroblock
candidate
encoded
Prior art date
Application number
KR10-2004-7020598A
Other languages
English (en)
Other versions
KR100967993B1 (ko
Inventor
킹-청 라이
길버트크리스토퍼 시
치엔청 창
앤소니패트릭 마우로2세
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 KR20050012806A publication Critical patent/KR20050012806A/ko
Application granted granted Critical
Publication of KR100967993B1 publication Critical patent/KR100967993B1/ko

Links

Classifications

    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/156Availability of hardware or computational resources, e.g. encoding based on power-saving criteria
    • 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/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/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding

Abstract

본 발명은 비디오 시퀀스를 인코딩하는데 필요한 프로세싱 사이클들 및 메모리 전송들의 횟수를 감소시킬 수 있는 비디오 인코딩 기술에 관한 것이다. 상기 방식에서, 개시된 인코딩 기술은 비디오 인코딩 속도를 증가시키고 전력 소비를 감소시킬 수 있다. 일반적으로, 비디오 인코딩 기술은 모션 추정 루팅을 위해 탐색 공간에 상응하는 컬럼들내에 비디오 블럭을 저장하는 후보 메모리를 사용한다. 메모리 제어 유니트는 후보 메모리가 예를 들면 절대 오차의 합(SAD) 또는 제곱 오차의 합(SSD) 기술들을 사용하여 인코딩될 비디오 블럭내의 픽셀들과 동시에 비교하기 위한 다수의 픽셀들을 병렬로 복구하도록 어드레싱한다. 오차 프로세서는 병렬의 계산들을 수행한다. 또한, 후속 비디오 블럭들이 인코딩되도록 하기 위해, 후보 메모리는 전체 탐색 공간을 다시로딩하기 보다는 비디오 블럭들의 새로운 컬럼을 로딩함으로써 증가하면서 업데이트될 수 있다.

Description

비디오 인코딩 및 디코딩 기술{VIDEO ENCODING AND DECODING TECHNIQUES}
디지털 비디오 성능들은 디지털 텔레비전들, 디지털 직접 방송 시스템들, 무선 통신 디바이스들, 개인 디지털 보조장치들(PDAs), 랩탑 컴퓨터들, 데스크탑 컴퓨터들, 디지털 카메라들, 디지털 레코딩 디바이스들, 셀룰러 또는 위성 무선 전화기들, 등등의 광범위한 디바이스들에 통합될 수 있다. 디지털 비디오 디바이스들은 풀 모션 비디오 시퀀스들을 생성, 변경, 전송, 저장, 기록 및 재생할 때 종래의 아날로그 비디오 시스템들에 상당한 장점들을 제공한다.
다수의 서로다른 비디오 인코딩 표준들이 디지털 비디오 시퀀스들을 인코딩하기 위해 형성된다. 예를 들어, 동영상 전문가 그룹(MPEG)은 MPEG-1, MPEG-2 및 MPEG4를 포함하는 다수의 표준들을 개발해왔다. 다른 표준들은 ITU H.263, Cupertino California의 Apple Computer에 의해 개발된 QuickTime™technology, Redmond, Washington의 Microsoft Corporation에 의해 개발된 Video for Windows™, Intel Corporation에 의해 개발된 Indeo™, Seattle, Washington의 RealNetworks, Inc.에 의해 개발된 RealVideo™, 및 SuperMac, Inc.에 의해 개발된 Cinepak™를 포함한다.
다수의 비디오 인코딩 표준들은 압축된 방식으로 데이터를 인코딩함으로써 전송 레이트들을 증가시킨다. 압출은 비디오 프레임들의 효율적인 전송을 위해 전송되어야만 하는 전체 데이터량을 감소시킬 수 있다. 예를 들어, MPEG 표준들은 더 좁은 대역폭을 통해 비디오 및 이미지 전송이 압축없이 수행될 수 있도록 하기 위해 지정된 그래픽 및 비디오 압축 기술들을 사용한다.
예를 들어, MPEG 표준들은 프레임간 압축을 제공하기 위해 연속적인 비디오 프레임들사이의 유사성을 사용하며, 시간 또는 프레임간(inter-frame) 상관이라 참조되는 비디오 인코딩 기술을 지원한다. 프레임간 압축 기술들은 비디오 프레임들의 픽셀 기반의 표시들을 모션 표시들로 변환함으로써 프레임들을 통한 데이터 여분을 이용한다. 또한, 비디오 인코딩 기술들은 공간 또는 프레임내(intra-frame)상관이라 참조되는 프레임들 내의 유사성들을 사용하여 비디오 프레임을 더 압축할 수 있다. 프레임내 압축은 일반적으로 이산 코사인 변환(DCT) 인코딩과 같은 스틸 이미지들을 압축하기 위한 텍스처 인코딩에 기초한다.
압축을 지원하기 위해 디지털 비디오 디바이스는 일반적으로 디지털 비디오 시퀀스들을 압축하기 위한 인코더 및 디지털 비디오 시퀀스들을 압축해제하기 위한 디코더를 포함한다. 다수의 경우에, 인코더 및 디코더는 비디오 이미지들의 시퀀스를 한정하는 프레임들내의 픽셀들의 블럭들에서 동작하는 통합된 인코더/디코더(CODEC)를 현성한다. MPEG-4 표준에서, 예를 들어 인코더는 가장 유사한 매크로블럭을 확인하기 위해 바로 이전의 비디오 프레임(또는 후속 프레임)의 매크로블럭들을 탐색하여 이전 프레임으로부터의 매크로블럭이 인코딩을 위해 사용되었음을 나타내는 모션 벡터와 함께 전송을 위해 매크로블럭들간의 오차를 인코딩한다. 디코더는 모션 벡터 및 인코딩된 오차들을 수신하여 비디오 시퀀스들을 생성하기 위한 모션 압축을 수행한다.
비디오 인코딩 프로세스는 특히 모션 추정 기술들이 사용될 때. 컴퓨터 집약적이다. 예를 들면, 이전에 전송된 프레임의 비디오 블럭들과 인코딩될 비디오 블럭을 비교하는 프로세스는 다수의 계산들을 필요로한다. 개선된 인코딩 기술들은 특히 계산 자원들이 더 제한되고 전력 소비가 중요한 경우에 무선 디바이스들 또는 다른 휴대용 비디오 디바이스들에서 사용하기에 매우 바람직하다. 동시에, 개선된 압축은 비디오 시퀀스들의 효율적인 전송을 위해 요구되는 대역폭을 감소시키는데 바람직하다. 상기 요소들 중 하나 또는 그이상을 개선하는 것은 특히 무선 및 다른 제한된-대역폭의 세팅들에서 비디오 시퀀스들의 실시간 인코딩을 용이하게하거나 개선할 수 있다.
본 출원은 2002년 6월 18일에 제출된 "비디오 모션 추정 시스템에서 전력 소비를 감소시키는 방법"이라는 명칭의 미국 임시 출원번호 60/390,101의 우선권을 청구하며, 본 출원의 양수인에게 양도되고 본 명세서에서 참조로서 통합된다.
관련된 출원들
본 출원은 동일한 일자에 제출된 "비디오 인코딩 및 디코딩을 위한 기술"이라는 명칭의 계류중인 특허 출원번호 10/371,768(문서번호 020127)와 관련된다. 또한 본 출원은 2002년 5월 3일에 제출된 "비디오 인코딩 기술"이라는 명칭의 계류중인 특허 출원번호 10/139,772에 관한 것이다. 상기 두 출원 모두 본 출원과 동일한 양수인에게 양도된다.
본 발명은 디지털 비디오 프로세싱 및 특히 비디오 시퀀스들의 인코딩에 관한 것이다.
도 1은 소스 디지털 비디오 디바이스가 수신 디지털 비디오 디바이스에 비디오 데이터의 인코딩된 시퀀스를 전송하는 예시적인 시스템을 도시하는 블럭 다이어그램이다.
도 2는 디지털 비디오 시퀀스들을 인코딩하는 비디오 인코더를 도시하는 블럭 다이어그램이다.
도 3은 비디오 데이터의 예시적인 매크로블럭의 개념도이다.
도 4는 예시적인 탐색 공간의 개념도이다.
도 5는 매크로블럭들의 어레이로서 배열된 탐색 공간을 통해 개념적으로 지정된 인코딩될 매크로블럭의 개념도이다.
도 6A는 매크로블럭 픽셀 인덱스를 도시하는 다이어그램이다.
도 6B는 비디오 메모리내의 비디오 데이터의 배열을 도시하는 다이어그램이다.
도 6C는 인코딩 메모리내의 비디오 데이터의 배열을 도시하는 다이어그램이다.
도 7A는 탐색 공간 픽셀 인덱스를 도시하는 다이어그램이다.
도 7B는 비디오 메모리내의 탐색 공간의 배열을 도시하는 다이어그램이다.
도 7C는 후보 메모리내의 탐색 공간의 배열을 도시하는 다이어그램이다.
도 8A는 매크로블럭 컬럼 픽셀 인덱스를 도시하는 다이어그램이다.
도 8B는 비디오 메모리내의 매크로블럭 컬럼의 배열을 도시하는 다이어그램이다.
도 9는 픽셀 인덱스의 후보 메모리내의 메모리 뱅크에 대한 베이스 어드레스로의 변환을 도시하는 블럭 다이어그램이다.
도 10은 매크로블럭을 형성하는 블럭들의 시리즈를 통한 탐색의 진행을 트래킹하기 위한 블럭 카운터를 도시하는 블럭 다이어그램이다.
도 11은 후보 메모리내의 메모리 뱅크에 대한 물리적인 어드레스 맵핑을 도시하는 블럭 다이어그램이다.
도 12는 후보 메모리내의 매크로블럭 컬럼 업데이트를 위한 물리적인 어드레스 맵핑을 도시하는 블럭 다이어그램이다.
도 13은 오차 프로세서를 도시하는 블럭 다이어그램이다.
도 14는 비디오 인코딩 기술을 설명하는 흐름도이다.
도 15는 탐색 공간을 증가하면서 로딩하기 위한 컬럼 업데이트들을 사용하는 비디오 인코딩 기술을 설명하는 흐름도이다.
도 16은 후보 메모리내의 메모리 뱅크에 대한 베이스 어드레스 맵핑을 설명하는 흐름도이다.
도 17는 후보메모리 내의 메모리 뱅크에 대한 물리적인 어드레스 맵핑을 설명하는 흐름도이다.
도 18은 후보 메모리내의 매크로블럭 컬럼 업데이트에 대한 물리적인 어드레스 맵핑을 설명하는 흐름도이다.
도 19는 하나의 매크로블럭과 동일한 계산들을 사용하여 매크로블럭을 형성하는 다수의 마이크로블럭들에 대한 오차값들의 생성을 설명하는 흐름도이다.
본 발명은 비디오 시퀀스를 인코딩하는데 필요한 프로세싱 사이클들 및 메모리 전송들의 횟수를 감소시킬 수 있는 비디오 인코딩 기술을 개시한다. 상기 방식에서, 개시된 비디오 인코딩 기술들은 비디오 인코딩 속도를 증가시키고 전력 소비를 감소시킬 수 있다. 또한, 기술들은 인코딩될 매크로블럭과 연관된 오차값들을 한정하고, 인코딩될 매크로블럭을 형성하는 다양한 매크로블럭들과 연관된 오차값들을 한정하기 위해 동일한 계산들의 세트를 사용할 수 있다.
본 명세서에 개시된 비디오 인코딩 기술들은 모션 추정 루틴을 위한 탐색 공간을 컬럼-방향의 방식으로 저장하는 후보 메모리를 사용할 수 있다. 메모리 제어 유니트는 예를 들면, 절대 오차 합(SAD) 또는 제곱 오차 합(SSD) 기술들을 사용하여 인코딩 비디오 블럭의 픽셀들과 동시에 비교할 다수의 픽셀들을 복원하기 위해 후보 메모리를 처리할 수 있다. 오차 프로세서는 계산들을 병렬 수행할 수 있다. 병렬 계산 중 각각의 세트는 매크로블럭을 형성하는 마이크로블럭들 중 한 블럭의 로우(row)과 일치할 수 있다. 또한, 후속하는 비디오 블럭들이 인코딩되도록 하기 위해, 후보 메모리는 전체 탐색 공간을 다시 로딩하는 것 보다는 비디오 블럭들의 새로운 컬럼을 로딩함으로써 증가하면서 업데이트될 수 있다.
본 명세서에 개시된 상기 기술들 및 다른 기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 그들의 임의의 조합내의 디지털 비디오 디바이스에서 구현될 수 있다. 만약, 소프트웨어에서 구현될 때, 상기 기술들은 실행시 본 명세서에 개시된 하나 또는 그이상의 인코딩 기술들을 수행하는 프로그램 코드를 포함하는 컴퓨터 판독가능한 매체에서 지시될 수 있다. 다양한 실시예들의 추가적인 세부사항들이 하기의 도면들을 참조로 하여 설명된다. 다른 특징들, 목적들 및 장점들은 하기의 설명 및 도면들과 청구항들로부터 명백할 것이다.
일반적으로, 상기 개시물은 디지털 비디오 데이터의 인코딩을 개선시키기 위해 사용될 수 있는 비디오 인코딩 기술들에 관한 것이다. 비디오 인코딩 기술들은 프로세싱 사이클들 및 비디오 시퀀스를 인코딩하는데 필요한 메모리 전송들의 횟수를 감소시킴으로써 비디오 인코딩 속도를 증가시키고 전력 소비를 감소시킨다. 예를 들어, 비디오 인코딩 기술들은 특히, 일반적으로 비디오 인코딩 프로세스의 가장 계산에 집중된 관점이 되는 모션 추정 프로세스에 대한 계산 효율성을 증가시킬 수 있다. 또한, 비디오 인코딩 기술들은 MPEG-4 디코딩 표준과 같은 디코딩 표준들과 호환가능하다.
비디오 인코딩 기술들은 디지털 브로드캐스트 시스템들, 개인 디지털 보조장치들(PDAs), 랩탑 컴퓨터들, 데스크탑 컴퓨터들, 디지털 카메라들, 디지털 기록 디바이스들, 이동 전화기들 등등과 같은 다양한 디지털 비디오 디바이스들에서 구현될 수 있다. 비디오 인코딩 기술들은 MPEG-4와 같은 표준들에 따라 비디오 인코딩 효율을 개선시킬 수 있으며 계산 자원들이 더 한정되고 전력 소비가 중요한 이동전화기와 같은 무선 통신 디바이스들내에서 비디오 인코딩의 구현을 더 용이하게 한다.
비디오 인코딩 기술들은 탐색 공간내에 컬럼-방향의 방식으로 비디오 블럭들을 저장하는 후보 메모리를 사용할 수 있다. 메모리 제어 유니트는 예를 들면 절대 오차 합(SAD) 또는 제곱 오차 합(SSD) 기술들을 사용하여 인코딩될 비디오 블럭내의 픽셀들과 동시에 비교하기 위한 다수의 픽셀들을 복원하도록 후보 메모리를 어드레싱한다. 오차 프로세스는 병렬 계산들을 수행한다. 병렬 계산들의 다수의 사이클들 이후에, 오차 프로세서는 인코딩될 비디오블럭과 비교된 탐색 공간의 후보 비디오 블럭과 연관된 오차값(때때로 오차 메트릭이라 참조됨)의 형태로 탐색 결과를 발생할 수 있다. 또한, 후속 비디오 블럭들이 인코딩되기 위해, 후보 메모리는 전체 탐색 공간을 다시 로딩하기 보다는 비디오 블럭들의 새로운 컬럼을 로딩함으로써 증가하면서 업데이트될 수 있다. 상기 컬럼 업데이트들은 전력 소비 및 시스템 버스 사용을 감소시킬 수 있고 새로운 탐색 공간을 저장하는데 걸리는 시간을 감소시킬 수 있다.
도 1은 소스 디바이스(12)가 통신 링크(15)를 통해 수신 디바이스(14)에 비디오 데이터의 인코딩된 시퀀스를 전송하는 예시적인 시스템(10)을 도시하는 블럭 다이어그램이다. 소스 디바이스(12) 및 수신 디바이스(14)는 모두 디지털 비디오 디바이스들이다. 특히, 소스 디바이스(12)는 예를 들면, 동영상 전문가 그룹에 의해 개발된 MPEG-4와 같은 다양한 비디오 압축 표준들 중 임의의 하나를 사용하여 비디오 데이터를 인코딩한 후 전송한다. 다른 표준들은 동영상 전문가 그룹에 의해 개발된 MPEG-1, MPEG-2 또는 다른 MPEG 표준들, ITU H.263 및 유사 표준들인 Motion JPEG 2000, Cupertino California의 Apple Computer에 의해 개발된 QuickTime™technology, Redmond, Washington의 Microsoft Corporation에 의해 개발된 Video for Windows™, Intel Corporation에 의해 개발된 Indeo™및 SuperMac, Inc.에 의해 개발된 Cinepak™을 포함한다.
통신 링크(15)는 무선 링크, 물리적인 전송 라인, 근거리 네크워크, 원거리 네트워크, 또는 인터넷과 같은 범용 네트워크와 같은 패킷 기반의 네트워크, 공중 전화 교환망(PSTN), 등등을 포함한다. 따라서, 통신 링크(15)는 비디오 데이터를 소스 디바이스(12)로부터 수신 디바이스(14)로 전송하기 위해 임의의 적절한 통신 매체, 또는 가능하면 서로다른 네트워크들 및 링크들의 집합을 나타낸다.
소스 디바이스(12)는 비디오 데이터를 인코딩하여 전송할 수 있는 임의의 디지털 비디오 디바이스가 될 수 있다. 예를 들면, 소스 디바이스(12)는 디지털 비디오 시퀀스들을 저장하기 위한 비디오 메모리(16), 시퀀스들을 인코딩하기 위한 비디오 인코더(18), 및 통신 링크(15)를 통해 인코딩된 시퀀스들을 소스 디바이스(14)에 전송하기 위한 송신기(20)를 포함할 수 있다. 비디오 인코더(18)는 예를 들면, 비디오 인코딩 기술들을 제어하기 위해 하나 또는 그이상의 프로그램가능한 소프트웨어 모듈들을 실행하는 디지털 신호 프로세서(DSP)를 포함할 수 있다. 연관된 메모리 및 로직 회로가 비디오 인코딩 기술들의 제어시 DSP를 지원하도록 제공된다. 후술될 것과 같이, 비디오 인코더(18)는 프로세싱 사이클들, 메모리 전송들, 및 전력 소비를 감소시키도록 구성될 수 있다. 또한, 비디오 인코더(18)는 매크로블럭을 위한 오차값 뿐만 아니라 매크로 블럭을 형성하는 마이크로블럭들의 다양한 오차값들을 생성하기 위해 일련의 계산들을 수행하도록 구성될 수 있다.
또한, 소스 디바이스(12)는 비디오 시퀀스들을 캡처하여 메모리(16)내에 시퀀스들을 저장하기 위해 비디오 카메라와 같은 비디오 캡처 디바이스(23)를 포함할 수 있다. 특히, 비디오 캡처 디바이스(23)는 전하 결합 디바이스(CCD), 전하 주입 디바이스, 포토다이오드들의 어레이, 상보성 금속 산화막 반도체(CMOS) 디바이스, 또는 비디오 이미지들 또는 디지털 비디오 시퀀스들을 캡처할 수 있는 임의의 다른 감광성 디바이스를 포함할 수 있다.
추가의 예들로서, 비디오 캡처 디바이스(23)는 예를 들면, 텔레비전, 비디오 카세트 레코더, 캠코더 등등으로부터 아날로그 비디오 데이터를 디지털 비디오 데이터로 변환하는 비디오 컨버터가 될 수 있다. 임의의 실시예들에서, 소스 디바이스(12)는 통신 링크(15)를 통해 실시간 비디오 시퀀스들을 전송하도록 구성될 수 있다. 상기 경우에, 수신 디바이스(14)는 실시간 비디오 시퀀스들을 수신하여 사용자에게 비디오 시퀀스를 디스플레이할 수 있다. 선택적으로, 소스 디바이스(12)는 비디오 데이터 파일들로서 수신 디바이스에 전송될 있고, 즉, 실시간이 아닌 비디오 시퀀스들을 캡처하여 인코딩할 수 있다. 따라서, 소스 디바이스(12) 및 수신 디바이스(14)는 예를 들면 이동 무선 네트워크에서 비디오 클립 재생(playback), 비디오 메일, 또는 화상 회의와 같은 애플리케이션들을 지원할 수 있다.
수신 디바이스(14)는 비디오 데이터를 수신하여 디코딩할 수 있는 임의의 디지털 비디오 디바이스의 형태를 가질 수 있다. 예를 들면, 수신 디바이스(14)는예를 들면, 중간 링크들, 라우터들, 다른 네트워크 장치 등등을 통해 송신기(20)로부터 인코딩된 디지털 비디오 시퀀스들을 수신하기 위한 수신기(22)를 포함할 수 있다. 수신 디바이스(14)는 시퀀스들을 디코딩하기 위한 비디오 디코더(24) 및 사용자에게 상기 시퀀스들을 디스플레이하기 위한 디스플레이 디바이스(26)를 포함할 수 있다. 임의의 실시예들에서, 수신 디바이스(14)는 집적 디스플레이 디바이스(14)를 포함할 수 있다. 오히려, 수신 디바이스(14)는 예를 들면, 텔레비전 또는 모니터와 같은 이산 디스플레이 디바이스에서 수신된 비디오 데이터를 디코딩하는 수신기로서 제공될 수 있다.
소스 디바이스(12) 및 수신 디바이스(14)를 위한 예시적인 디바이스들은 컴퓨터 네트워크에 위치된 서버들, 워크스테이션들, 또는 다른 데스크탑 컴퓨팅 디바이스들, 및 랩탑 컴퓨터들 또는 개인 디지털 보조장치들(PDAs)과 같은 이동 컴퓨팅 디바이스들을 포함한다. 다른 예들은 디지털 텔레비전들, 디지털 카메라들, 디지털 비디오 카메라들 또는 다른 디지털 레코딩 디바이스들, 비디오 기능들을 가지는 이동 전화기들과 같은 디지털 비디오 전화기들, 다른 무선 비디오 디바이스들 등등과 같은 디지털 텔레비전 방송 위성들 및 수신 디바이스들을 포함한다.
임의의 경우에, 소스 디바이스(12) 및 수신 디바이스(14)는 각각 디지털 비디오 데이터를 인코딩 및 디코딩하기 위한 인코더/디코더(CODEC)(미도시)를 포함한다. 상기 경우에, 소스 디바이스(12) 및 수신 디바이스(14) 모두는 송신기들과 수신기들 뿐만 아니라 메모리 및 디스플레이들을 포함할 수 있다. 하기에서 설명되는 다수의 인코딩 기술들은 인코더를 포함하는 디지털 비디오 디바이스들의 내용에서 설명된다. 그러나, 인코더는 CODEC의 부분을 형성할 수 있다는 점이 이해되어야한다. 상기 경우에, CODEC은 DSP, 마이크로프로세서, 애플리케이션용 집적 회로(ASIC), 이산 하드웨어 그성요소들 또는 그들의 다양한 조합들로 구현될 수 있다.
소스 디바이스(12)내의 비디오 인코더(18)는 비디오 데이터를 인코딩하기 위한 비디오 프레임들의 시퀀스내의 픽셀들의 블럭들에 동작한다. 예를 들면, 비디오 인코더(18)는 전송될 비디오 프레임이 픽셀들의 블럭들(비디오 블럭들이라 참조됨)로 분할되는 모션 추정 인코딩 기술들을 실행할 수 있다. 설명을 위해, 비디오 블럭들은 마이크로블럭들 및 매크로블럭들을 포함할 수 있다. 일 예로서, 마이크로블럭은 8x8 픽셀 어레이가 될 수 있다. 매크로블럭은 16x16 픽셀 어레이가 될 수 있다. 따라서, 매크로블럭은 4개의 마이크로블럭들을 포함할 수 있다. 상기 포맷은 종종 MPEG-4를 따르는 인코딩 기술들에서 사용된다. 그러나, 다른 마이크로블럭 및 매크로블럭 사이즈들이 사용될 수 있다. 일반적으로, 본 명세서에서, 매크로블럭 및 마이크로블럭이라는 용어는 다수의 픽셀들을 포함하는 비디오 블럭들을 참조한다. 매크로블럭은 또한 다수의 마이크로블럭들로서 한정된다. 매크로블럭을 한정하는 마이크로블럭들의 갯수, 마이크로블럭을 한정하는 픽셀들의 갯수, 뿐만아니라 매크로블럭을 한정하는 픽셀들의 갯수는 다양한 구현용 포맷들에 영향받는다.
때때로, 매크로블럭들보다 마이크로블럭들의 모션 추정치를 계산함으로써 개선된 분해능이 수행될 수 있다. 또한, 하기에서 더 상세하게 설명되는 것과 같이, 매크로블럭의 픽셀들은 매크로블럭의 오차값들의 계산과 동시에 더 작은 마이크로블럭들에 대한 오차값들(오차 메트릭들이라 참조됨)의 계산을 고려하는 방식으로 저장 및 처리될 수 있다. 다시말해서, 매크로블럭의 오차 메트릭의 계산은 매크로블럭을 형성하는 4개의 마이크로블럭들에 대하여 일련의 4번의 오차 메트릭들의 계산으로서 보여질 수 있다. 따라서, 매크로블럭 뿐만아니라 매크로블럭을 형성하는 마이크로블럭들에 대한 오차 메트릭들은 동일한 계산들로부터 발생될 수 있다. 특히, 상기 기술은 추가의 SAD 또는 SSD 계산들을 추가하지 않고 용이하게 수행될 수 있다. 오히려, 처리 및 계산 방식은 동일한 계산들이 인코더에 의해 마이크로블럭 오차값의 계산들 및 매크로블럭 오차값의 계산들로 해석될 수 있도록 설계될 수 있다.
마이크로블럭 또는 매크로블럭내의 각각의 픽셀은 예를 들면, 색차 및 휘도와 같이 색채 및 명암과 같은 픽셀의 시각적인 특성들을 n-비트의 값, 예를 들면, 8 비트의 값으로 한정하도록 표시될 수 있다. 그런, 모션 추정은 일반적으로 인간의 시야가 색채보다는 휘도의 변화에 더 민감하기 때문에 휘도 성분들에서 수행된다. 따라서, 모션 추정을 위해, 전체 n비트의 값은 주어진 픽셀에 대한 휘도의 양을 결정할 수 있다. 그러나, 상기 설명의 원칙들은 픽셀들의 포맷에 제한되지 않고 더 단순한 소수 비트의 픽셀 포맷들 또는 더 복잡한 다수 비트의 픽셀 포맷들에서 사용하기 위해 확장될 수 있다.
비디오 프레임내의 각각의 비디오 블럭에 대하여, 소스 디바이스(12)의 비디오 인코더(18)는 유사한 비디오 블럭을 식별하기 위해 이미 전송된 이전 비디오 프레임 (또는 후속의 비디오 프레임)에 대하여 메모리(16)내에 저장된 비디오 블럭들을 탐색하여 비디오 블럭들간의 오차를 인코딩을 위해 사용된 이전 프레임(또는 후속 프레임)으로부터 비디오 블럭을 식별하는 모션 벡터와 함께 인코딩한다. 상기 방식에서, 각각의 프레임을 독립된 영상(picture)으로 인코딩하는 대신에, 비디오 인코더(18)는 인접하는 프레임들간의 오차를 인코딩한다. 모션 추정은 인코딩될 현재 프레임내의 마이크로블럭 또는 매크로블럭을 최적으로 매칭시키는 이전 또는 후속 프레임에서 마이크로블럭 또는 매크로블럭을 식별하는 것을 포함한다.
모션 벡터는 비디오 블럭의 상부 좌측 코너와 연관된 픽셀 위치를 정의할 수 있지만, 모션 벡터의 다른 포맷들이 사용될 수 있다. 임의의 경우에, 모션 벡터들을 사용하여 비디오 블럭들을 인코딩함으로써, 비디오 데이터 스트림들의 전송을 위해 필요한 대역폭이 상당히 감소될 수 있다. 임의의 경우들에서, 소스 디바이스(12)는 계산 횟수 및 전력 소비를 감소시키기 위해 인코딩 프로세스 동안 다양한 비교들 또는 계산들을 종료시키는 프로그램 가능한 임계치들을 지원할 수 있다.
수신 디바이스(14)의 수신기는 모션 벡터들의 형태로 인코딩된 비디오 데이터 및 인코딩된 오차들을 수신할 수 있다. 디코더(24)는 디스플레이 디바이스(26)를 통해 사용자에게 디스플레이하기 위한 비디오 시퀀스들을 생성하는 모션 보상 기술들을 수행한다. 수신 디바이스(14)의 디코더(24)는 인코더/디코더(CODEC)로서 구현될 수 있다. 상기 경우에, 소스 디바이스(12) 및 수신 디바이스(14) 모두는 디지털 비디오 시퀀스들을 인코딩, 전송, 수신 및 디코딩할 수 있다.
도 2는 본 명세서에 개시된 기술들에 따라 디지털 비디오 시퀀스들을 이코딩하는 비디오 인코더(18)를 도시하는 블럭 다이어그램이다. 도 2는 예시적인 실시예를 나타내며, 개시물의 제한이 고려되지 않는다. 도 2에 도시된 것과 같이, 비디오 인코더(18)는 디지털 신호 프로세서(DSP:28) 및 모션 추정기(29)를 포함할 수 있다. DSP(28)는 모션 추정기(29)의 동작을 제어하고 비디오 인코딩 제어기로서 제공된다. 선택적으로, 비디오 인코딩 제어기는 프로세서, 하드웨어 구성요소들, 펌웨어, 애플리케이션용 집적회로(ASIC), 현장 프로그램가능한 게이트 어레이(FPGA) 등등에 의해 구현될 수 있다.
도 2의 예에서, DSP(28)는 비디오 인코딩 기술들을 제어하기 위해 하나 또는 그이상의 프로그램가능한 소프트웨어 모듈들을 수행한다. 모션 추정기(29)는 DSP 인터페이스(30)를 포함할 수 있다. DSP(28), DSP 인터페이스(30) 및 비디오 메모리(32)는 버스(33)를 통해 통신한다. 비디오 메모리(32)는 비디오 인코더(18)에 외부 구성요소로서 보여질 수 있거나 비디오 인코더(18)의 부분으로서 통합될 수 있다. DSP 인터페이스(30)는 모션 추정 루틴과 연관된 계산들을 수행하는 오차 프로세서(34)와 상호작용한다. 오차 프로세서(34)는 예를 들면, 주어진 비디오 프레임에 대하여 인코딩될 블럭들 또는 매크로블럭들을 위한 모션 벡터들을 계산하기 위해 SAD 또는 SSD 계산들을 수행할 수 있다. 인코딩 알고리즘의 제어를 DSP(28)에 제공하고 모션 추정기(29)의 하드웨어내에서 계산을 위해 계산에 집중된 모션 추정을 구분함으로써, 실시간 인코딩을 지원하는 능력이 증진될 수 있다.
도 2에 추가로 도시된 것과 같이, 오차 프로세서 메모리(35)는 인코드 메모리(36) 및 후보 메모리(38)를 포함한다. 인코드 메모리(36)는 모션 추정 루틴을 사용하여 현재 인코딩될 매크로블럭을 저장한다. 현재 매크로블럭은 인코딩될 비디오 프레임내의 매크로블럭들의 어레이 중 하나와 일치한다. 후보 메모리(38)는 탐색 공간을 형성하는 서로다른 프레임으로부터 매크로블럭들의 어레이를 저장한다. 오차 프로세서(34)는 모션 벡터로서 사용하기 위해 최적의 매치를 식별하기 위해 후보 메모리(38)내의 매크로블럭들을 인코드 메모리(36)내의 현재 매크로블럭들과 비교한다. 일 예로서, 48x48 픽셀들의 탐색 공간이 사용될 수 있다. 상기 경우에, 탐색 공간은 9개의 매크로블럭들, 즉, 각각 16x16 픽셀 어레이를 포함하는 3개의 매크로블럭들의 3개의 컬럼들을 포함할 수 있다. 다른 매크로블럭들은 탐색 공간을 한정하는 둘 또는 그이상의 9개의 매크로블럭들로부터 픽셀들을 포함하기 위해 48x48 픽셀 어레이 탐색공간 내에서 한정될 수 있다.
메모리 제어 유니트(39)는 모션 추정 루틴을 위한 탐색 프로세스를 구동하기 위해 후보 메모리(38) 및 인코드 메모리(36)의 처리를 제어한다. 특히, 메모리 제어 유니트(39)는 탐색 공간을 형성하기 위한 버스(33)를 통해 비디오 메모리(32)로부터 후보 메모리(38)로의 픽셀 데이터의 로딩을 제어한다. 이를 위해, 메모리 제어 유니트(39)가 메모리 어드레스 변환을 제공하기 위해 구비될 수 있다. 전체 48x48 픽셀의 탐색 공간을 DSP(28)의 개입없이 후보 메모리(38)에 직접 로딩하는 것은 DSP(28) 및 DSP 인터페이스 유니트(30)간의 버스의 작용을 감소시키고 비디오 데이터를 이동시키기 위해 요구되는 DSP(28)내의 명령들의 횟수를 감소시킨다. 오차 프로세서(34)는 각각의 매크로블럭에 대한 SAD 또는 SSD 결과들을 결정하고 최적의 매칭된 결과를 DSP 인터페이스(30)로 복귀시킨다. DSP 인터페이스(30)는 버스(33)를 통해 비디오 메모리(32)내에 저장하기 위한 인코딩된 매크로블럭 및 모션벡터를 DSP(28)에 차례로 제공한다.
동작시, DSP(28)는 제어 채널(40)을 통해 탐색 프로세스를 구동하기 위해 DSP 인터페이스 유니트(30)를 제어할 수 있다. 일반적으로, 제어 채널(40)은 후보 메모리(38)로 로딩될 탐색 공간에 대한 픽셀 인덱스를 포함할 수 있는 메모리 로딩 명령을 위해 사용된다. 각각의 픽셀 인덱스는 상부 좌측 코너의 어드레스 또는 후보 매크로블럭의 어드레스를 표시할 수 있지만, 다른 포맷들이 사용될 수 있다. 또한, DSP(28)는 데이터 채널(41)을 통해 오차 프로세서(34)에 의해 발생된 탐색 결과들을 수신할 수 있다. 데이터 채널(41)은 하드웨어 구성 및 모드 스위칭을 위해 사용될 수 있다. DSP(28)와 비디오 메모리(32)사이의 메모리 전송들은 DSP상의 직접 메모리 교환(DME) 포트와 버스(33)를 통해 수행될 수 있다. 상기 경우에, DSP 인터페이스 유니트(30), 오차 프로세서(34), 인코드 메모리(36), 후보 메모리(38) 및 메모리 제어 유니트(39)는 DSP(28)에 의해 제어되는 전체 모션 추정기(ME)내에 상주할 수 있다. 일반적으로, DME는 비디오 메모리(32)로부터 데이터를 인출하여 인코드 메모리(36) 및 후보 메모리(38)로 로딩하기 위해 사용된다.
도 2의 예에서, DSP 인터페이스 유니트(30)는 버스(33)를 통해 비디오 메모리(32)로부터 인코드 메모리(36) 및 후보 메모리(38)로의 메모리 전송 및 비디오 메모리(32)로부터 메모리 제어 유니트(39)로의 메모리 전송을 위한 슬레이브로서 제공된다. 초기에, DSP 인터페이스 유니트(30)는 전체 탐색 공간을 후보 메모리(38)로 로딩할 수 있다. 그후에, DSP 인터페이스 유니트(30)는 예를 들면 주어진 프레임내의 다음 블럭이 인코딩되기 위한 것이기 때문에 탐색 공간에 새로운 컬럼을 추가하기 위해 후보 메모리(38)를 증가하도록 업데이트할 수 있다. DSP 인터페이스 유니트(30)는 메모리 제어 유니트(39)의 비디오 데이터의 전송 및 구성을 위해 데이터 및 구성 채널들을 가질 수 있다. 또한, DSP 인터페이스 유니트(30)는 오차 프로세서(34)에 의해 수행된 탐색 프로세스를 제어가히 위한 구성 채널 및 탐색 결과들을 수신하기 위한 결과 채널을 포함할 수 있다.
도 2의 예에서, 비디오 인코더(18)는 수신 디바이스(14)로의 전송을 위해 압축된 디지털 비디오 시퀀스들을 호스트 소스 디바이스(12)에 제공한다. 비디오 인코더(18)는 비디오 시퀀스들을 인코딩하고 인코딩된 디지털 비디오 시퀀스들을 전송 이전에 비디오 메모리(32)에 버퍼링한다. 비디오 메모리(32) 뿐만 아니라 오차 프로세서 메모리(35)는 동기화 다이나믹 랜덤 액세스 메모리(SDRAM), FLASH 메모리, 전기적으로 소거가능한 프로그램 가능 판독 전용 메모리(EEPROM) 등의 형태를 가질 수 있다. 인코드 메모리(36) 및 후보 메모리(38)는 일반적으로 비디오 인코더(18)의 로컬 메모리들이며 "가상" 메모리들로 분류되는 공통의 메모리 디바이스들을 포함할 수 있다.
도2에 도시된 구성요소들에 추가로, 임의의 실시예들에서, 비디오 인코더(18)는 이산 코사인 변환(DCT) 인코딩과 같이 스틸 이미지들을 압축하기 위해 공통으로 사용되는 프레임내 또는 프레임간 압축을 수행하기 위해 텍스처(texture) 인코더와 같은 다른 구성요소들을 포함할 수 있다. 예를 들면, 텍스처 인코딩은 프로세싱 능력들이 효율적인 모션 추정을 위해 매우 제한된 것으로 간주되는 경우에 모션 추정에 추가로, 또는 가능하면 모션 추정 대신에 수행될 수 있다. DSP(28)는임의의 주어진 시간에 프로세싱 능력들에 기초하여 모션 추정기(29) 및 텍스처 인코더(미도시)를 선택적으로 호출함으로써 인코딩 루틴을 관리할 수 있다.
도 3은 비디오 프레임과 함께 비디오 메모리(32)내에 저장될 수 있는 매크로블럭(42) 형태의 예시적인 비디오 블럭을 도시한다. MPEG 표준들 및 다른 비디오 인코딩 방식들은 모션 추정 비디오 인코딩동안 비디오 블럭들을 매크로블럭들의 형태로 사용한다. 전술된 것과 같이, MPEG-4를 따르는 시스템들에서, 용어 "매크로블럭"은 비디오 프레임의 서브세트를 형성하는 16x16 픽셀 값들의 집합을 말한다. 각각의 픽셀값은 1바이트의 데이터로 표시될 수 있지만, 원하는 이미지 품질을 달성하기 위해 더 크거나 작은 수의 비트들이 각각의 픽셀을 한정하기 위해 사용될 수 있다. 매크로블럭은 다수의 더 작은 8x8 픽셀 마이크로블럭들(44A-44D)을 포함할 수 있다. 그러나, 일반적으로 본 명세서에 개시된 인코딩 기술들은 16바이트 X16바이트 매크로블럭들, 8바이트x8바이트 마이크로블럭들 또는 만약 원한다면 상이한 크기의 비디오 블럭들과 같이 임의의 한정된 크기의 블럭들을 사용하여 동작할 수 있다.
도 4는 후보 메모리(389)내에 저장될 수 있는 탐색 공간(46)의 예시적인 부분을 도시한다. 탐색 공간(46)은 이전에 전송된 비디오 프레임(또는 프레임들의 시퀀스 중에서 후속 비디오 프레임)에 상응하는 픽셀들의 집합이다. 탐색 공간은 이전 또는 후속 비디오 프레임 자체 또는 원한다면 비디오 프레임의 서브세트를 포함할 수 있다. 탐색 공간은 도시된 것과 같이 정사각형 형태가 될 수 있거나 임의의 다양한 모양들 및 크기들을 가정할 수 있다.
비디오 인코딩동안, 현재 인코딩될 매크로블럭이 탐색 공간내의 현재 매크로블럭과 유사 매크로블럭간의 차이들이 유사한 비디오 블럭을 식별하는 모션 벡터와 함께 전송될 수 있도록 적절한 매치를 식별하기 위해 탐색 공간(46)내의 비디오 믈럭들과 비교된다. 전술된 것과 같이, 탐색 공간(46)내에 정의된 매크로블럭들(48)은 후보 메모리(38)에 저장될 수 있는 반면, 현재 인코딩될 매크로블럭은 인코드 메모리(36)에 저장될 수 있다.
모션 추정 비디오 인코딩동안, 오차 프로세서(34)는 SAD 및 SSD 기술들과 같은 비교 기술들을 사용하여 이전 또는 후속 프레임들의 매크로블럭들과 현재 인코딩될 매크로블럭을 비교할 수 있다. 도 4에 표시된 것과 같이, 탐색 공간(46)내의 매크로블럭(42)은 개별 매크로블럭에 대한 상부 좌측 픽셀 어드레스(48)에 의해 식별될 수 있다. 다른 비교 기술이 또한 사용될 수 있다. 특히, 전술된 설명의 원칙들에 따라, SAD 또는 SSD 계산들은 다수의 픽셀들에 대하여 병렬로 수행될 수 있다. 또한, 픽셀 방식의 비교들의 처리 및 계산 순서는 매크로블럭을 형성하는 마이크로블럭들의 오차값뿐만 아니라 인코딩될 각각의 매크로블럭에 대한 오차값들을 생성하는 방식으로 수행될 수 있다.
상기 설명에서, 용어 "작업(task)"은 탐색 공간내의 서로다른 비디오 블럭과 현재의 비디오 블럭을 비교하기 위해 사용되는 계산들의 공통된 세트를 말한다. 다시말해서, 작업은 탐색 공간내의 현재의 비디오 블럭과 서로다른 비디오 블럭간의 단순한 비교를 말한다. 예를 들면, 작업은 탐색 공간내의 현재 비디오 블럭의 다수의 픽셀들과 후보 비디오 블럭의 다수의 픽셀들을 비교하기 위해 다수의 계산들을 수행하는 것과 관련된다. 전술된 것과 같이, 상기 작업 계산들의 다양한 서브세트들은 인코딩 프로세스의 속도와 동시에 수행된다. 64회의 계산들은 마이크로블럭 작업으로 간주될 수 있고(마이크로블럭들이 8x8 픽셀 어레이들로 정의되는 것으로 가정할 때) 256회의 계산들은 매크로블럭 작업으로 간주될 수 있다(매크로블럭들이 16x16 픽셀 어레이들로 정의되는 것으로 가정할 때). 각각의 작업 동안, 계산들은 작업동안 진행중인 오차값(때때로 오차 메트릭이라 참조됨)을 정의하기 위해 누산된다.
상기 설명에서, 용어 "반복"은 비디오 인코딩동안 수행되는 작업들의 공통 세트를 말한다. 현재 인코딩될 비디오 블럭과 연관된 연속적인 작업들은 반복이다. 다시말해서, 반복은 현재 비디오 블럭이 탐색 공간내의 이전 비디오 블럭들(또는 후속 비디오 블럭들)의 세트와 비교되는 비교들의 세트이다. 각각의 개별 비교는 다수의 계산들을 포함하는 작업이다. 따라서, 탐색 공간은 반복 동안 현재 비디오 블럭과 비교되는 비디오 블럭들의 세트를 정의한다. 각각의 반복의 비교는 하나의 작업이라 참조되고, 각각의 작업, 즉, 각각의 비교는 다수의 계산들을 포함할 수 있다.
임의의 경우들에서, 반복은 탐색 공간에서 제 1 탐색 공간을 정의하고, 탐색 공간내의 제 1 매치를 식별하며, 상기 제 1 매치에 기초하여 탐색 공간의 서브세트에서 제 2 탐색을 정의하고, 상기 서브세트내의 제 2 매치를 식별하는 것을 포함할 수 있다. 예를 들면, 이후의 반복의 탐색들은 최적의 매치를 더 정확히 지시하기 위해 탐색 공간내에서 약간의 쉬프트들을 포함할 수 있다. 최저 오차값을 산출하는 매크로블럭을 식별하는 픽셀 위치가 다이아몬드형의 탐색 파라미터의 중심에 위치될 때까지 탐색을 계속하는 다이아몬드 탐색 기술들과 같은 다른 탐색 기술들이 사용될 수 있다. 또한, 최저 오차값을 식별하는 매크로블럭을 식별하는 픽셀 위치가 반지름(R)에 의해 정의되는 탐색 파라미터의 중심에 위치되는 원-탐색 기술들과 같은 다른 기술들이 사용될 수 있다. 원의 반지름(R)은 다이아몬드 탐색 파라미터들 보다 더 큰, 즉 더 포괄적인 탐색 파라미터를 정의한다.
만약 다이아몬드 탐색 기술들 또는 원-탐색 기술들이 반복 동안 사용되면, 다이아몬드형의 탐색 파라미터 또는 원형의 탐색 파라미터의 중심에서 최저 오차값들을 산출하는 매크로블럭을 식별하는 프로세스의 속도를 높이기 위해 초기화 기술들이 사용될 수 있다. 예를 들면, 공간이 남는(spatial redundancy) 현상을 이용하는 초기화 기술이 사용될 수 있다. 공간이 남는 것은 일반적으로 주어진 비디오 블럭의 비디오 모션이 주어진 비디오 블럭에 공간적으로 인접한 또다른 비디오 블럭의 비디오 모션과 유사할 것이라고 예측한다. 초기화 기술은 효율적인 비디오 인코딩을 위해 사용될 수 있는 비디오 블럭을 포함하는 매우 높은 가능성을 가지는 탐색 공간내의 위치에서 모션 추정을 초기화하기 위해 상기 현상을 용이하게 이용할 수 있다.
특히, 초기화 기술은 모션 추정 루틴이 초기화될 수 있는 탐색 공간내의 위치, 즉, 모션 추정 루틴이 시작되는 탐색 공간내의 픽셀 위치를 식별하기 위해 인코딩될 비디오 블럭에 공간적으로 인접하는 비디오 블럭들에 대하여 계산된 모션 벡터들을 사용할 수 있다. 예를들면, 평균 픽셀 위치, 중간 픽셀 위치 또는 가중함수를 사용하여 계산된 픽셀 위치는 현재 인코딩될 비디오 블럭과 공간적으로 인접하는 비디오 블럭들에 대하여 이전에 결정된 모션 벡터들에 기초하여 계산될 수 있다. 다른 선형 또는 비선형 함수들이 사용될 수 있다. 임의의 경우에, 상기 방식으로 모션 추정 루틴을 초기화시킴으로써, 비디오 인코딩은 인코딩된 비디오 블럭에 적절히 매칭되는 탐색 공간내에 비디오 블럭을 적절히 위치시키기 위해 요구되는 반복시 작업들의 횟수를 감소시킴으로써 다이아몬드 탐색 또는 원-탐색 시나리오들에서 가속화될 수 있다.
오차값들을 발생시키기 위해 사용되는 계산들은 SAD 기술들, SSD 기술들, 또는 원하는 경우 다른 비교 기술들을 포함할 수 있다. SAD 기술은 현재 매크로블럭이 비교되는 이전의 매크로블럭의 픽셀값들과 함께 현재 인코딩될 매크로블럭의 픽셀값들 사이의 절대 오차 계산을 수행하는 작업을 포함한다. 상기 절대 오차 계산들의 결과들은 합산, 즉 누산되며, 이는 현재 매크로블럭과 현재 비디오 블럭이 비교되는 이전 매크로블럭간의 오차를 나타내는 오차값을 한정하기 위함이다. 8x8 픽셀 이미지 블럭에 대하여, 64개의 오차들이 계산되어 합산될 수 있고, 16x16 픽셀 매크로블럭에 대하여, 256개의 오차들이 계산되어 합산될 수 있다. 현재의 비디오 블럭을 어드레싱하고 특정 순서로 계산을 수행함으로써, 256개의 오차들이 계산될 수 있지만, 오차값들이 각각의 마이크로블럭에 대하여 생성될 수 있기 때문에 4개의 개별 세트들로 합산된다. 4개의 세트들의 모든 계산들의 전체 합산은 매크로블럭에 대한 오차값을 정의한다.
더 낮은 오차값은 일반적으로 현재 매크로블럭과 비교되는 매크로블럭이 더양호하게 매칭되는 것을 나타내며, 따라서, 더 높은 오차값들, 즉 증가된 왜곡을 산출하는 후보 매크로블럭보다 모션 추정 인코딩시 사용하기에 더 양호한 후보 매크로블럭을 나타낸다. 임의의 경우들에서, 계산들은 누산된 오차값이 한정된 임계치를 초과할 때 종료될 수 있다. 상기 경우에서, 추가 계산들은 불필요할 수 있으며, 이는 현재 비디오 블럭과 비교되는 매크로블럭이 모션 추정 인코딩시 효율적으로 사용하기에 적합하지 않기 때문이다.
SSD 기술은 인코딩된 현재 매크로블럭들의 픽셀 값들과 현재 매크로블럭이 비교되는 이전 매크로블럭의 픽셀값들사이에 오차 계산을 수행하는 작업을 포함한다. 그러나, SSD 기술에서, 절대 오차 계산들의 결과들은 제곱되며, 그후에 제곱된 값들을 현재 매크로블럭과 현재 매크로블럭이 비교되는 이전 매크로블럭간의 차이를 나타내는 오차값을 정의하기 위해 합산, 즉, 누산된다. 선택적으로, 평균 제곱 에러(MSE), 정규화 상호 상관 함수(NCCF) 또는 또다른 적절한 비교 알고리즘과 같은 다른 비교 기술들이 수행될 수 있다.
임의의 경우들에서, 다양한 작업들 또는 반복들은 예를 들어 주어진 작업이 이전 작업보다 더 우수한 매치를 산출하지 못한다고 결정하거나 주어진 작업이 적절한 매치를 산출하면 먼저 종료될 수 있다. 예를들어, 주어진 작업에 대한 추가 계산들이 불필요한 경우를 식별하기 위해 기술들이 사용될 수 있다. 특히, 제 2 작업의 계산들의 서브세트가 이전에 계산된 제 1 작업과 연관된 더 큰 오차값을 종합적으로 산출할때, 일반적으로 제 2 작업에 대한 추가 계산들은 제 2 작업의 종료가 제 1 작업보다 더 낮은 오차값을 발생하지 않기 때문에 불필요하다. 상기 경우에서, 제 2 작업은 인코딩 성능을 희생하지 않고 종료될 수 있으며, 제 3 작업의 실행이 신속하게 시작될 수 있다.
종료 기술들은 반복 레벨, 또는 작업 레벨 및 반복 레벨 모두에서 수행될 수 있다. 일 예에서, 반복 임계치는 적절한 값, 즉, 효율적인 비디오 인코딩에 적절한 값을 한정한다. 상기 경우에, 반복 임계치에 의해 적절한것으로 간주되는 방식에서 현재 인코딩될 비디오 블럭을 매칭시키는 탐색 공간내의 후보 비디오 블럭을 식별하는 작업이 수행되면, 반복이 종료될 수 있고, 다음 인코딩될 비디오 블럭이 탐색 공간과 비교될 수 있다. 상기 경우에, 다수의 불필요한 작업들의 수행이 회피될 수 있다.
다수의 기술들은 본 명세서에서 인코딩될 비디오 블럭과 이전 비디오 프레임의 이전 비디오 블럭들을 비교하는 내용에서 설명된다. 그러나, 인코딩될 비디오 블럭과 후속 비디오 프레임의 후보 비디오 블럭들을 비교할 때 동일한 기술들이 사용될 수 있음이 이해된다. 임의의 경우들에서, 양방향의 모션 추정이 사용되며, 인코딩될 비디오 블럭은 하나 또는 그이상의 이전 비디오 프레임들의 다양항 후보 비디오 블럭들 및 후속 비디오 프레임들의 다양한 비디오 블럭들과 비교된다. 간단히 말해서, 본 명세서에 개시된 다수의 기술들은 인코딩될 비디오 블럭이 이전 비디오 프레임의 후보 비디오 블럭 또는 후속 비디오 프레임의 후보 비디오 블럭과 같은 서로다른 비디오 블럭과 비교될 때마다 사용될 수 있다. 다시 말해서, 탐색 공간은 다양한 서로다른 구현들에서 다양한 서로다른 후보 블럭들과 함께 로딩될 수 있다.
도 5는 후보 매크로블럭들의 어레이로서 배열된 예시적인 탐색 공간(52)내의 현재 인코딩될 매크로블럭(50)의 개념도이다. 특히, 도 5에 도시된 것과 같이, 탐색 공간(52)은 인코딩될 매크로블럭(50)과 비교하기 위해 3개의 로우들(54A-54C) 및 3개의 컬럼들(56A-56C)을 가지는 후보 매크로블럭들을 포함한다. 따라서, 도 5의 예에서, 탐색 공간은 48x48 픽셀 영역을 형성하는 9개의 16x16 픽셀 마이크로블럭들의 어레이를 포함한다. 현재 인코딩될 매크로블럭(50)은 오차 프로세서(34)를 사용하여 탐색 공간(52)내의 매크로블럭들과 비교된다.
비디오 메모리(32)와 후보 메모리(38)간의 메모리 전송들 및 연관된 프로세싱 오버헤드를 감소시키기 위해, 탐색 공간(52)이 초기에 로딩될 때 탐색공간으로의 후속 업데이트들이 컬럼 단위의 기준으로 수행될 수 있다. 예를 들면, 주어진 프레임의 후속 매크로블럭을 인코딩하기 위해, 메모리 제어 유니트(39)는 전체 탐색 공간(52)을 다시 로딩하는것이 아니라 탐색 공간(52)의 좌측 컬럼(56A)의 후보 매크로블럭들을 간단히 교체할 수 있다.
컬럼 방향 업데이트를 수행하고 다수의 픽셀들에서 병렬 모션 추정 계산들이 동시에 수행되도록 하기 위해, 메모리 제어 유니트(39)는 비디오 메모리(32), 인코드 메모리(36) 및 후보 메모리(38)에 포함된 메모리 어드레스들간의 변환을 위한 어드레스 맵핑 방식을 수행하도록 구성된다. 인코드 메모리(36) 및 후보 메모리(38)에 대한 데이터 업데이트는 비디오 메모리를 직접 액세스하는 버스(33)를 통해 비디오 메모리(32)사이에서 발생한다. 버스(33)를 통한 상기 전송을 초기화 및 제어하기 위해, DSP(28)는 DME 포트를 통해 버스 마스터로서 제공된다.
도 6A은 매크로블럭 픽셀 인덱스를 도시하는 다이어그램이다. 도 6A에 도시된 것과 같이, 매크로블럭 픽셀 인덱스는 4개의 마이크로블럭들(A, B, C, D)로 분할될 수 있다. 매크로블럭 픽셀 인덱스는 16x16이고, 각각의 마이크로블럭들(A, B, C, D)은 8x8이다. 전체 매크로블럭 픽셀 인덱스는 상부 좌측 픽셀 Y0으로부터 하부 우측 픽셀 Y255(미도시)로 확장한다. 픽셀 인덱스는 탐색 공간내의 매크로블럭들을 트랙킹하기 위해 DSP(28)에 포함된다. 메모리 제어 유니트(39)는 DSP(28)에 의해 제공된 픽셀 인덱스를 비디오 메모리(32), 인코드 메모리(36) 또는 후보 메모리(38)내의 물리적인 메모리의 어드레스로 변환하기 위해 제공된다. 예를 들면, 메모리 제어 유니트(39)는 탐색 공간 업데이트를 위해 후보 메모리(38)에 변환된 어드레스를 제공하거나 SAD 엔진(34)에 의한 SAD 계산을 위해 인코드 메모리(36)에 변환된 어드레스를 제공한다.
도 6B은 비디오 메모리(32)내의 비디오 데이터의 배열을 도시하는 다이어그램이다. 특히, 도 6B은 DSP(28)에 포함된 매크로블럭 픽셀 인덱스와 비디오 메모리(32)내의 매크로블럭 픽셀 데이터의 물리적인 배열간의 오차를 도시한다. 도 6B에 도시된 것과 같이, 비디오 메모리(32)는 4개의 픽셀들의 로우들에 배치된 64개의 어드레스에 매크로블럭 픽셀 데이터를 저장하며, 각각의 매크로블럭에 대하여 64개의 로우들을 생성한다. 픽셀당 8비트들로 각각의 로우는 32 비트들의 데이터를 포함한다. 따라서, DSP(28)의 픽셀 인덱스에 응답하여 비디오 메모리(32)를 액세스하기 위해, 메모리 제어 유니트(39)는 픽셀 인덱스를 비디오 메모리내의 물리적인 어드레스로 변환시켜야만 한다.
도 6C는 인코드 메모리(36)내의 비디오 데이터의 배열을 도시하는 다이어그램이다. 도 6C에 도시된 것과 같이, 인코드 메모리(36)에 저장된 매크로블럭 픽셀 데이터는 로우당 8개의 픽셀들, 즉 로우당 64비트들인 32개의 로우들에 배열된다. 상기 설명에 따라, 인코드 메모리(36)내의 메모리 배열은 다수의 픽셀들에 대하여 오차 프로세서(34)에 의한 병렬의 절대 오차(AD) 계산을 용이하게 한다. 특히, 도 6C의 예는 한번에 8개의 픽셀들에 대한 병렬 AD 계산을 허용하는 인코드 메모리(36)의 물리적인 배열이다. 또한, 마이크로 블럭들이 8개의 픽셀 폭들을 가지는 것으로 정의될 때, 도 6C의 물리적인 배열은 매크로블럭 뿐만아니라 마이크로블럭들에 대하여 발생될 오차값을 허용하며, 이는 마이크로블럭들이 일반적으로 8개의 픽셀 폭들을 가지기 때문이다. 인코드 메모리(36)의 폭은 64비트가 될 수 있다. 이와 함께, 도 6A-6C는 매크로블럭 픽셀 인덱스가 비디오 메모리(32)로 맵핑되는 방법 및 비디오 메모리가 오차 프로세서 메모리(35)내의 물리적인 인코드 메모리(36)로 맵핑되는 방법을 설명한다.
도 7A는 DSP(28)에 포함된 탐색 공간 픽셀 인덱스를 도시하는 다이어그램이다. 탐색 공간내의 픽셀 인덱스는 탐색 작업, 예를 들면, 오차 프로세서(34)에 의해 발생된 결과(오차값)를 생성하는데 사용되는 계산들의 세트를 규정하기 위해 DSP(28)에 의해 사용된다. 도 7A의 탐색 공간 픽셀 인덱스는 3 매크로블럭 x 3매크로블럭 탐색공간에 상응하며, 따라서 2304개의 픽셀들(3*3*16*16)을 포함한다. 도 7A에 추가로 도시된 것과 같이, 탐색 공간 픽셀 인덱스는 48개의 로우들을 포함하며, 상기 각각의 로우들은 48개의 픽셀들을 포함한다.
도 7B은 비디오 메모리(32)내의 탐색 공간의 배열을 도시하는 다이어그램이다. 도 7B에 도시된 것과 같이, 탐색 공간 픽셀들의 물리적인 배열은 도 6B의 매크로블럭 메모리 배열에서와 같이 로우 당 4개의 픽셀들을 포함한다. 또한, 픽셀들은 576개의 로우들내에 배열된다. 픽셀당 8비트일 때, 각각의 로우는 4픽셀들을 가지며, 32비트들을 포함한다.
도 7C는 후보 메모리(38)내의 탐색 공간의 배열을 도시하는 다이어그램이다. 특히, 인코드 메모리(36)와 같이, 후보 메모리(38)는 8개의 픽셀들을 가지는 로우들내에 배열된다. 전체 탐색 공간을 저장하기 위해, 후보 메모리(38)는 288개의 로우들을 포함한다. 다시말해서, 후보 메모리(38)는 288x8비트의 메모리인 8개의 뱅크들로 배열된다. 각각의 로우는 64비트들의 폭을 갖는다. 인코드 메모리(376)가 단지 하나의 매크로블럭만을 저장하는데 반해, 후보 메모리(38)는 3개의 매크로블럭폭을 가지며, 총 9개의 마이크로블럭들을 포함하는 하나의 탐색 공간을 저장하고, 상기 메모리들(36, 38) 각각은 8개의 픽셀폭으로 출력된다. 상기 방식에서, 인코드 메모리(36) 및 후보 메모리(38)는 각각의 인코딩될 매크로블럭의 용이한 비교, 즉, 한번에 8개의 픽셀들에 대한 절대 오차값들의 용이한 병렬 계산을 위해 배열된다. 또한, 인코드 메모리(36) 및 후보 메모리(38)는 매크로블럭 오차값의 계산동안 마이크로블럭 오차값들의 계산을 위해 배열된다.
또한, 다수의 픽셀들에 대한 병렬 AD 계산을 허용하는데 부가하여, 후보 메모리(38)는 탐색 공간내의 임의의 픽셀에서 시작하는 매크로블럭의 어드레싱을 허용하도록 배열된다. 또한, 하기에서 설명되는 것과 같이, 후보 메모리(38)의 구조는 각각의 새로운 인코딩될 매크로블럭에 대한 전체 탐색 공간을 다시 로딩하는 것보다는 증가하는 컬럼 업데이트들, 즉 한번에 매크로블럭들 중 하나의 컬럼씩 로딩하는 것을 허용한다. 상기 로딩 기술은 여분의 메모리 로드들을 제외하고 버스(33)의 사용을 감소시킴으로써 전력을 감소시킬 수 있다. 다시말해서, 메모리 제어 유니트(39)는 탐색 공간 픽셀 인덱스를 비디오 메모리(32)내의 물리적인 메모리 어드레스로 변환하고, 비디오 메모리로부터의 메모리 어드레스를 후보 메모리(38)내의 상응하는 물리적인 메모리 어드레스로 변환하기 위해 구비된다.
도 8A는 매크로블럭 컬럼 픽셀 인덱스를 도시하는 다이어그램이다. 두개의 인접하는 인코딩될 매크로블럭들에 대하여, 적용가능한 탐색공간 사이의 오차는 매크로블럭 컬럼들 중 하나이다. 결과적으로, 단 하나의 매크로블럭 컬럼이 업데이트되어야만 한다. 후보 메모리(38)는 상기 양상을 이용하기 위해 배열되며, 따라서, 비디오 메모리(32)와 후보 메모리간의 전송들을 위해 요구되는 데이터 대역폭을 감소시킬 수 있다. 도 8A에 도시된 것과 같이, DSP(28)에 포함되는 매크로블럭 컬럼 픽셀 인덱스는 16개의 픽셀들을 가지는 로우들내에 배열될 수 있으며, 탐색 공간내의 단일 컬럼의 길이가 확장되며, 48개의 로우들이 된다. 따라서, 도 8A에 도시된 매크로블럭 픽셀 인덱스는 3개의 매크로블럭들의 컬럼과 일치하며, 따라서, 도 7A의 탐색 공간 픽셀 인덱스의 1/3이다.
매크로블럭 컬럼 픽셀 인덱스에 대한 비디오 메모리(32)내의 물리적인 메모리 배열은 전체 탐색 공간 픽셀 인덱스에 대한 메모리 배열과 서로다르다. 도 8B는 비디오 메모리(32)내의 매크로블럭 컬럼의 배열을 도시하는 다이어그램이다.하나의 매크로블럭 컬럼에 대하여, 비디오 메모리(32)는 각각 4개의 픽셀들을 가지는 192개의 로우들을 제공한다. 따라서, 비디오 메모리(32)는 23비트들의 폭을 가지는 매크로블럭 컬럼을 배열한다. 탐색 공간이 초기 매크로블럭을 위해 후보 메모리(38)로 로딩되면, 후속의, 인접하는 인코딩될 매크로블럭들에 대한 탐색은 새로운 컬럼을 간단하게 로딩함으로써 수행된다.
컬럼 업데이트 동안, 메모리 제어 유니트(39)는 이전의 좌측 매크로블럭 컬럼을 새로운 매크로블럭 컬럼과 교체한다. 새롭게 로딩된 매크로블럭 컬럼은 현재의 우측 매크로블럭 컬럼으로 지정된다. 또한, 이전의 중간 매크로블럭 컬럼은 새로운 좌측 매크로블럭 컬럼으로 지정되는 반면, 이전의 우측 매크로블럭 컬럼은 새로운 중간 매크로블럭 컬럼으로 지정된다.
따라서, 이전의 좌측 매크로블럭 컬럼을 제거하기 위해 더 큰 비디오 프레임내에서 우측으로 쉬프트된 것처럼 보여질 수 있으며, 따라서 새로운 우측 매크로블럭 컬럼에 대하여 공간을 만들 수 있다. 상기 컬럼 업데이트 동작 다음에, 후보 메모리(38)내의 탐색 공간은 인코드 메모리(36)내의 다음 매크로블럭을 고려하는데 적합하다.
DSP(28)에 의해 제공된 픽셀 인덱스들을 비디오 메모리(32) 및 메모리 제어 유니트(39)내의 후보 메모리(38)의 물리적인 어드레스들로 변환시킴으로써, DSP는 컬럼 쉬프팅 동작들을 트래킹할 필요가 없다. 결과적으로, DSP(28)는 단지 새로운 우측 매크로블럭 컬럼에 대한 픽셀 인덱스만을 제공해야 한다.
도 9는 픽셀 인덱스의 후보 메모리(38)내의 메모리 뱅크들에 대한 베이스 어드레스로의 변환시 사용하기 위한 메모리 제어 유니트(39)의 부분을 형성하는 예시적인 회로를 도시하는 블럭 다이어그램이다. 도 9에 도시된 것과 같이, 메모리 제어 유니트(39)는 상기 메모리 어드레스 변환을 수행하기 위해 적절한 로직 회로를 포함한다. 메모리 제어 유니트(39)는 인코드 메모리(36)의 업데이트, 후보 메모리(38)의 업데이트 또는 전체 로드 또는 오차 프로세서(34)가 인코드 메모리와 후보 메모리의 컨텐츠들에 대한 병렬 AD 계산을 수행하는 탐색 작업과 같은 현재 반복을 트래킹한다. 하기에서 설명되는 것과 같이, 메모리 제어 유니트(39)는 탐색 동안 블럭 경계들을 트래킹하고, 후보 메모리(38)내의 매크로블럭 컬럼 쉬프트를 관리하며, 픽셀-대-어드레스 변환을 수행할 수 있다.
일반적으로, 탐색 동안, 메모리 제어 유니트(39)는 상응하는 시작 픽셀의 뱅크, 즉, 후보 메모리(38)내의 8개의 픽셀들의 열내의 위치를 결정하며, 하기의 등식을 따른다:
시작 픽셀의 뱅크 = mod8(픽셀 인덱스) (1)
추가로, 메모리 제어 유니트(39)는 하기의 등식에 따라 시작 픽셀의 로우를 결정한다:
시작 픽셀의 로우 = int(픽셀 인덱스/8) (2)
따라서, mod 함수(1)에 따라, 시작 뱅크는 픽셀 인덱스를 8로 나눈 나머지이다. 정수 배분 함수(2)에 따라, 시작 로우는 픽셀 인덱스로 나눌수 있는 가장 높은 정수이다.
전술된 등식들 (1) 및 (2)에서, 개별 뱅크 x의 시작 또는 "베이스" 어드레스는 다음과 같이 표시될 수 있다:
뱅크 x 베이스 어드레스 = x>=시작 픽셀의 뱅크이면 시작 픽셀의 로우이고, x<시작 픽셀의 뱅크이면 시작 픽셀의 로우+1 (3)
도 9에 도시된 것과 같이, 메모리 제어 유니트(39)내의 비교기(58)는 픽셀 인덱스로 표시되는 로우(픽셀 인덱스 mod 8)와 뱅크 인덱스를 비교하여 픽셀 인덱스가 뱅크 인덱스보다 적으면 1을 출력하고, 픽셀 인덱스가 뱅크 인덱스와 동일하거나 그 이상이면 0을 출력한다. 메모리 제어 유니트(39)내의 가산기(60)는 비교기(58)의 출력 0 또는 1을 픽셀 인덱스로 표시되는 뱅크[int(픽셀 인덱스/8)]에 합산하여 뱅크 x에 대한 베이스 어드레스를 생성한다.
도 10은 도 3에 도시된 것과 같이 매크로블럭을 형성하는 일련의 마이크로블럭들(A, B, C, D)을 통해 탐색의 진행을 트래킹하기 위한 비디오 블럭 카운터 회로(62)를 도시하는 블럭 다이어그램이다. 개별 뱅크들의 베이스 어드레스가 결정되면, 메모리 제어 유니트(39)는 증분하는 업데이트 및 블럭 경계에 기초하는 어드레스 발생 카운터의 재로딩을 트래킹한다. 도 10의 예에서, 블럭 카운터 회로(62)는 32개의 카운트들을 제공하기 위해 31의 값으로 초기에 로딩되는 5비트의 카운터(64)를 포함한다. 초기화(task_start)이후에, 카운터(64)는 클럭 사이클당 하나의 카운트를 카운트 업한다. 그러나 카운트 다운되는 카운터가 사용될 수 있다.
카운트가 0b11000에 도달하면, 결정 로직(66)은 오차 프로세서(34)에 의해 수행된 탐색이 마이크로블럭 A에 대한 AD 계산들을 종료하였음을 나타낸다. 유사하게, 카운트들 0b10000, 0b01000 및 0b00000은 마이크로블럭들 B, C, 및 D이 수행되었음을 나타낸다. 카운트 0b00000가 도달되면, 탐색은 주어진 매크로블럭에 대하여 종료된다(task_done). 상기 방식에서, 블럭 카운터 회로(62)는 오차 프로세서(34)에 의해 처리되는 현재 매크로블럭에 대한 오차값을 계산하는 진행을 트래킹한다. 또한, 블럭 카운터 회로(62)는 각각의 마이크로블럭과 연관된 오차값들이 계산된 시점을 결정할 수 있다.
각각의 마이크로블럭 경계를 교차할 때, 결정 로직(66)은 오차 프로세서(34)에 개별 마이크로블럭 결과를 래칭할 것을 지시하는 block_done 신호를 발생한다. 따라서, 비디오 인코더(18)는 각각의 개별 마이크로블럭에 대한 오차값 결과들 뿐만아니라 매크로블럭에 대한 오차값 결과들을 발생한다. 또한, 상기 오차 결과들은 동일한 개별 계산들을 사용하여 발생된다. 다시말해서, 계산들의 4개의 개별 서브세트들은 마이크로블럭들에 대한 각각의 오차값을 발생하며, 모든 계산들의 합산은 매크로블럭에 대한 오차값을 발생한다.
전술된 것과 같이, 종료 기술은 특정 시나리오들에서 계산들을 피하기 위해 다양한 작업들 또는 반복들을 종료시키도록 추가될 수 있다. 일 실시예에서, 작업을 종료시킬지의 여부를 결정하는 것은 병렬 AD 계산들의 각 세트를 수행한 이후에 실행될 수 있다. 다시말해서, 마이크로블럭 로우의 각각의 래치는 작업 임계치가 초과되는지의 여부를 결정하기 위한 적절한 시간을 제공할 수 있다. 만약 초과된다면, 특정 작업에 대한 추가 계산들은 탐색이 최저 오차값을 산출하지 않을 것이라고 공지되기 때문에 종료될 수있다. 특히, 만약 작업 임계치가 초과되면, 후보 매크로블럭의 서브세트에 대한 오차값은 탐색 공간의 이전 후보 매크로블럭에 대하여 걔산된 오차값을 이미 초과할 수 있다.
도 11은 후보 메모리(38)내의 메모리 뱅크에 대한 물리적인 어드레스 맵핑 회로(68)를 도시하는 블럭 다이어그램이다. 후보 메모리(38)내의 물리적인 어드레스의 생성은 도 9에 도시된 어드레스 변환에서 픽셀 인덱스에 의해 생성되는 베이스 어드레스를 사용하여 누산기를 로딩하는 것을 포함한다. 각각의 클럭 사이클에서, 어드레스는 48개의 픽셀들에 의해 매크로블럭내의 픽셀들의 다음 라인으로 증분되며, 상기 매크로블럭은 6개의 로우들(48개의 픽셀들/8개의 뱅크들)로 변환한다. 블럭 B가 종료되면, 누산기는 블럭 C 및 블럭 D 계산을 위해 베이스 어드레스+1를 다시 로딩한다.
도 11에 도시된 것과 같이, 맵핑 회로(68)는 블럭 B에 대한 계산이 수행될 때(block_b_done), 베이스 어드레스(mb_base_addr)에 1을 합산하여 후보 메모리(38)내의 컬럼 베이스 어드레스(col_base_addr)를 생성하는 가산기(70)를 포함할 수 있다. OR 게이트(72)는 블럭 B가 수행되거나 탐색 작업이 시작되면(task_start) 멀티플렉서(74)에 논리 하이(high)를 출력한다.
OR 게이트(72)로부터의 논리 하이 출력에 응답하여, 멀티플렉서(74)는 누산기(76)에 컬럼 베이스 어드레스를 출력한다. OR 게이트(72)로부터의 논리 로우(low) 출력에 응답하여, 멀티플렉서는 누산기(76)로 가산기(78)의 출력을 전송한다. 가산기(78)는 누산기(76)로부터의 현재 후보 메모리 어드레스(logical_cram_addr)에 6의 값을 합산한다. 만약 탐색 작업이 시작되거나 블럭 B가 종료되면, 멀티플렉서(74) 및 누산기(78)는 현재 후보 메모리 어드레스를 6개의로우들, 즉 8개 뱅크들에 걸쳐 48개의 픽셀들 만큼 전진시킨다. 상기 방식에서, 메모리 제어 유니트(39)는 블럭 B의 종료 또는 새로운 탐색 작업의 시작을 조건으로 하여 한번에 하나의 마이크로블럭 로우를 오차 프로세서(34)에 제공하기 위해 후보 메모리(38)내의 8개의 뱅크들의 각 로우를 통해 순환한다. 따라서, 계산들은 마이크로블럭에 대한 각각의 오차값이 발생될 때까지 로우 단위 방식으로 수행되며, 매크로블럭에 대한 오차값이 계산될 때까지 마이크로블럭 단위 방식으로 수행된다. 프로세스는 그후에 탐색 공간의 다음 매크로블럭에 대하여 또다른 로우 단위 방식, 마이크로단위 방식으로 진행된다.
도 12는 후보 메모리내의 매크로블럭 컬럼 업데이트를 위한 물리적인 어드레스 맵핑 회로(80)를 도시하는 블럭 다이어그램이다. 도 11에 도시된 어드레스 맵핑 회로(68)는 매크로블럭 컬럼 업데이트가 발생할 때 매크로블럭 컬럼 쉬프트를 처리하지 않는다. 오히려, 맵핑 회로(68)는 완전히 재로딩된 탐색 공간의 매크로블럭 컬럼들에 적합하다. 컬럼 업데이트 특징이 적용되면, 도 12의 어드레스 맵핑 회로(80)는 또다른 레벨의 어드레스 맵핑을 제공한다.
물리적인 후보 메모리(38)에서, 매크로블럭 컬럼내의 각각의 로우는 두개의 데이터 로우들로 맵핑된다. 예를 들어, 리셋시 어드레스 0 및 어드레스 1(addr 0/1)는 좌측 매크로블럭 컬럼의 제 1 로우를 표시한다. 특히, 어드레스 0는 좌측 매크로블럭 컬럼에 대한 픽셀 인덱스 로우에서 제1의 8개의 픽셀들에 상응하는 후보 메모리(38)내의 8개의 뱅크 로우를 표시한다. 어드레스 1는 좌측 매크로블럭 컬럼에 대한 픽셀 인덱스 로우에서 제 2의 8개의 픽셀들에 상응하는 후보 메모리(38)내의 8개의 뱅크 로우를 표시한다.
어드레스 2 및 어드레스 3(addr 2/3)는 중간 매크로블럭 컬럼의 제 1 로우 를 표시하고 어드레스 4 및 어드레스 5(addr 4/5)는 우측 매크로블럭 컬럼의 제 1 로우를 표시한다. 따라서, 도 7C에 도시된 것과 같이 후보 메모리(38)의 8개의 뱅크 로우들은 좌측, 중간, 및 우측 매크로블럭 컬럼들을 연결하는 전체 로우(예를들면 제 1 로우에 대하여 Y0-Y47) 각각에 픽셀 데이터를 순차적으로 저장한다.
하나의 매크로블럭 컬럼 업데이트이후에, addr 0/1(이전에 좌측 매크로블럭 컬럼으로 표시된)는 우측 매크로블럭 컬럼을 표시하기 위해 사용되고, addr 2/3(이전에 중간 매크로블럭 컬럼으로 표시된)는 좌측 매크로블럭 컬럼을 표시하기 위해 사용되고, addr 4/5(이전에 우측 매크로블럭 컬럼으로 표시된)는 중간 매크로블럭 컬럼을 표시하기 위해 사용된다.
상기 방식에서, 좌측 및 우측 매크로블럭 컬럼들은 이전의 중간 및 우측 매크로블럭 컬럼들과 각각 동일한 데이터를 저장하지만, 새로운 데이터로 다시 로딩될 필요는 없다. 그러나, 어드레스들(addr 2/3 및 addr 4/5)은 현재 좌측 및 중간 매크로블럭 컬럼들로 맵핑된다. 그러나, 이전의 좌측 매크로블럭 컬럼 어드레스(addr 0/1)는 우측 매크로블럭 컬럼으로 다시 맵핑되고 비디오 메모리(32)로부터 새로운 데이터로 다시 로딩된다.
컬럼 업데이트 모드에 대한 어드레스 맵핑을 수행하기 위해, 도 12의 맵핑 회로(80)는 두가지 상태들: 후보 메모리 컬럼 베이스 어드레스 mod 3 출력(col_base_addr mod 3) 및 매크로블럭 컬럼 쉬프트 상태, 즉 전체 업데이트 또는컬럼 업데이트가 요구되는지의 여부를 결정한다.
도 12에 도시된 것과 같이, 맵핑 회로(80)는 2로 나누어지는 현재 베이스 컬럼 어드레스(cram_addr[8:1])의 mod 3 출력을 생성하는 mod 3 연산자(82)를 포함하고 mod 3 출력을 임시 저장 디바이스(84:때때로 플립 플롭이라 참조됨)에 적용한다. mod 3 출력은 컬럼 베이스 어드레스에 대하여 항상 0, 1, 또는 2가 될 수 있다. 예를 들면, 제 1 컬럼에 대한 컬럼 베이스 어드레스(Y0)는 0을 산출하고, 제 2 컬럼에 대한 컬럼 베이스 어드레스(Y16)는 1을 산출하며, 제 3 컬럼에 대한 컬럼 베이스 어드레스(Y32)는 2를 산출한다.
새로운 탐색 작업이 시작되거나(task_start) 블럭 B가 종료되면(block_b_done), OR 게이트(86)는 플립 플롭(84)이 mod 3 연산자(82)로부터의 mod 3 출력을 멀티플렉서(88)에 적용시키도록 인에이블한다. mod 3 출력은 컬럼 베이스 어드레스가 현재 상주하는 컬럼, 즉, 제 1 컬럼(0), 제 2 컬럼(1), 또는 제 3 컬럼(2)을 나타낸다.
이에 응답하여, 멀티플렉서(88)는 멀티플렉서들(90, 92, 94)의 출력들 중 하나를 가산기(96)에 제공한다. 멀티플렉서들(90, 92, 94)의 출력들은 2비트의 카운터(98)의 출력에 의해 결정된다. 카운터(98)는 후보 메모리(38)내의 전체 탐색 공간이 다시 로딩될 것을 나타내는 full_update 신호의 수신에 응답하여 0의 값으로 리셋한다. 인에이블 입력에서 col_update 신호에 응답하여, 카운터(98)는 하나의 증분만큼 카운트하거나 (다른 구현을 위해 카운트 다운할 수 있다).
col_update 신호는 후보 메모리내의 탐색 공간이 하나의 새로운 컬럼을 로딩함으로써 증분하여 업데이트될 것임을 나타낸다. 카운터(98)는 각각의 컬럼 업데이트를 위해 증분할 수 있거나 2개의 컬럼 업데이터들을 위해 증분할 수 있으며, 제 3 컬럼 업데이트이후에 0의 값으로 복귀한다. 예를 들면, 카운터(98)는 0에서 1로, 2로, 다시 0으로, 1로, 2로, 0으로, 1로, 2로 증분할 수 있다. 카운터(98)는 카운터가 0x11과 동일할 때 리셋할 수 있으며, 상기 리셋은 인에이블 상태와 관계없이 발생할 수 있다.
임의의 경우에, 카운터(98)의 카운트 출력은 증분하는 컬럼 업데이트 루틴의 진행동안 얼마나 많은 컬럼 쉬프트들이 수행되는지를 트래킹한다. 카운터(98)의 카운트 출력은 어드레스 맵핑 결정들을 용이하게 하기 위해 멀티플렉서들(90, 92, 93)에 논리 입력을 제공할 수 있다. 멀티플렉서들(90, 92, 94)은 각각 탐색 공간의 좌측, 중간, 및 우측 컬럼들에 해당한다. 만약 카운트 출력이 0이면, 멀티플렉서들(90, 92, 94)은 값들 0, 0, 및 0을 출력한다. 만약 카운트 출력이 1이면, 멀티플렉서들(90, 92, 94)은 각각 +2, +2, 및 -4을 출력한다. 만약 카운트 출력이 2이면, 멀티플렉서들(90, 92, 94)은 각각 0, -4, 및 +2을 출력한다. 또한, 카운트 출력은 OR 게이트(97)에 신호를 제공하는 0b11 비교기(95)에 제공된다. 따라서, 카운터(98)의 리셋은 full_update 신호 또는 비교기(95)로부터의 신호에 응답하여 발생할 수 있으며, 상기 두 신호 모두는 OR 게이트(97)의 입력이다.
상기 멀티플렉서들(90, 92, 94)의 동작은 이전 중간 컬럼의 좌측 컬럼으로의 쉬프팅 및 이전 우측 컬럼의 중간 컬럼으로의 쉬프팅, 즉, 각 경우에 좌측으로 두개의 로우들(+2)의 쉬프팅을 반영한다. 매크로블럭 컬럼내의 각각의 로우가 후보메모리(38)내의 두개의 로우들에 의해 표시되는 것을 상기하자(도 7C 도시). 상기 동작은 이전 좌측 컬럼의 우측 컬럼으로의 쉬프팅, 즉, 좌측으로 4개 로우들(-4)의 쉬프팅을 반영한다. 3번의 컬럼 업데이트들 이후에, 어드레스들은 물리적인 메모리와 다시 매칭하며, 따라서, 멀티플렉서들(90, 92, 94)의 출력 값들은 각각 0, 0, 및 0으로 복귀한다.
멀티플렉서들(90, 92, 94)의 출력들은 시퀀스 내의 다음 쉬프트를 반영한다. 제 2 쉬프트 이후에, 원래의 중간 컬럼은 이미 좌측 컬럼으로 쉬프트되었고 현재 우측 컬럼으로 쉬프트되며, 원래의 우측 컬럼은 현재 좌측 컬럼으로 쉬프트되며, 원래의 좌측 컬럼은 현재 중간 컬럼으로 쉬프트된다 상기 경우에, 현재의 좌측 컬럼은 원래의 우측 컬럼에서의 위치로부터 +4 로우들 만큼 떨어지며, 현재의 중간 컬럼은 원래의 좌측 컬럼에서의 위치로부터 -2 로우들 만큼 떨어지며, 현재의 우측 컬럼은 원래의 중간 컬럼의 위치로부터 -2 로우들 만큼 떨어진다.
만약 플립 플롭(84)의 출력이 0이면, 제 1 컬럼 멀티플렉서(90)의 출력이 멀티플렉서(88)로 출력된다. 만약, 플립 플롭(84)의 출력이 1 또는 2이면, 제 2 또는 제 3 컬럼 멀티플렉서(92, 94)의 출력이 각각 멀티플렉서(88)로 출력된다. 각각의 경우에, 멀티플렉서(88)의 출력은 가산기(96)에 인가되어 상기 출력을 논리적인 후보 메모리 어드레스(logical_cram_addr)에 합산한다.
상기 방식에서, 가산기(96)는 적절한 매크로 블럭에 대한 물리적인 후보 메모리 어드레스를 획득하기 위해 컬럼 업데이트 쉬프트 상태를 사용하여 논리적인 후보 메모리 어드레스를 적당한 양만큼 쉬프트한다. 논리 어드레스가 쉬프트 동작들의 결과우측 컬럼과 일치하지만, 물리적인 어드레스는 실제로 중간 컬럼과 일치하면, 맵핑 회로(80)는 필수적인 어드레스 변환을 제공한다. 메모리 제어 유니트(39)는 오차 프로세서(34)가 예를 들면, 8개의 출력 뱅크들을 통한 병렬 AD 계산을 위해 후보 메모리(38)내의 적절히 어드레싱된 데이터와 인코드 메모리(36)내의 상응하는 데이터를 비교하도록 한다.
도 13는 오차 프로세서(34)를 상세시 도시하는 블럭 다이어그램이다. 특히, 도 13는 8개의 뱅크 출력들을 동시에 생성하는 인코드 메모리(36)와 후보 메모리(38)의 배열에 의해 제공되는 병렬 계산 능력들을 도시한다. 도 13에 도시된 것과 같이, 오차 프로세서는 다수의 절대 오차(AD) 계산 채널들(100A-100H:모두 100)을 포함할 수 있다. 각각의 AD 계산 채널(100)은 인코딩될 매크로블럭에 대한 인코드 메모리(36)로부터 개별 뱅크 출력(a0-a7)을 수신한다.
비교 및 절대 오차의 계산을 위해, 각각의 AD 계산 채널(100)은 후보 메모리(38)로부터 상응하는 뱅크 출력들(b0-b7)을 수신한다. AD 결과들은 일련의 8비트 가산기들(102A-102D), 한쌍의 9비트 가산기들(104A, 104B), 및 하나의 10비트 가산기(106)에 의해 직렬 방식으로 합산된다. 더 큰비트의 값들이 픽셀들을 나타내기위해 사용되는 경우에 더 큰 가산기들이 구현될 수 있다. 임의의 경우에, 가산기(106)의 출력이 가산기(108)에 인가된다. 가산기(108)는 플립 플롭(110)을 통해 자신의 출력을 가산기(106)의 출력과 합산하여 절대 오차 합(SAD) 값을 생성한다. 8개 입력들(a0-a7)의 각각의 세트는 매크로블럭의 8개의 픽셀 로우에 상응할 수 있다. 예를 들면, 입력은 매크로블럭 A(도 6A)의 각각의 로우, 그후에 매크로블럭 B의 각각의 로우, 그후에 매크로블럭 C, 그후에 매크로블럭 D을 위해 오차 프로세서에 제공될 수 있다. 누산은 각각의 마이크로블럭에 대한 오차 메트릭의 계산 이후에 래칭될 수 있고, 매크로블럭에 대한 오차 메트릭과 상응하는 전체 누산을 위해 다시 래칭될 수 있다.
또한, 각각의 개별 래치 이후에 작업을 종료하는지의 여부가 결정될 수 있다. 다시말해서, 마이크로블럭 로우의 각각의 래치는 작업 임계치가 초과되었는지의 여부를 결정하기에 적절한 시간을 제공할 수 있다. 만약 그렇다면, 특정 작업을 위한 추가 계산들이 종료될 수 있으며, 이는 탐색이 최저 오차값을 산출하지 못할 것으로 공지되기 때문이다.
도 14는 본 명세서에서 설명되는 비디오 인코딩 기술을 설명하는 흐름도이다. 도 14에 도시된 것과 같이, 탐색이 시작되면, 즉 작업(112)이 사작되면, DSP(28)는 인코딩될 매크로블럭의 픽셀 인덱스를 생성한다(114). 메모리 제어 유니트(39)는 매크로블럭 픽셀 인덱스를 비디오 메모리 어드레스 및 인코드 메모리 어드레스로 변환하고(116) 버스(33) 및 메모리 제어 유니트를 통해 비디오 메모리(32)로부터 인코드 메모리(36)로 매크로블럭이 로딩된다. DSP(28)는 또한 탐색 공간에 대한 픽셀 인덱스를 생성한다(120). 탐색 공간 픽셀 인덱스를 비디오 메모리 어드레스 및 후보 메모리 어드레스로 변환하면(122), 메모리 제어 유니트(39)는 탐색 공간 매크로블럭들과 함께 후보 메모리(38)를 로딩한다(124).
오차 프로세서(34)는 인코딩될 매크로블럭과 탐색 공간내의 매크로블럭들을 비교하기 위해 후보 메모리(38)와 인코드 메모리(36)의 다수의 뱅크 출력들 사이에서 병렬 AD 계산들을 수행한다(126). 병렬 AD 계산들에 기초하여, 오차 프로세서(34)는 전체 탐색 공간을 통한 최적 SAD 결과를 생성하거나(128), (또는 전체 탐색 공간을 고려하지 않고 가능하면 적절한 결과를 생성한다). 상기 경우에, 결과는 인코딩될 매크로블럭에 대한 픽셀 인덱스와 연관된다. 전술된 것과 같이, 오차 프로세서(34)는 추가의 SAD 계산들을 요구하지 않고 매크로블럭을 형성하는 각각의 마이크로블럭에 대한 SAD 결과들을 생성할 수 있다. 매크로블럭에 대한 SAD 결과를 생성한 이후에, DSP(28)는 적절한 매치가 식별되었는지의 여부를 결정할 수 있고, 만약 확인되었다면 MPEG-4 압축 표준들에 따라 인코딩될 매크로블럭을 식별하기 위한 모션 벡터를 저장할 수 있다.
도 15는 탐색 공간은 증분하면서 로딩하기 이ㅟ해 컬럼 업데이트들을 사용하는 비디오 인코딩 기술을 설명하는 흐름도이다. 또다른 탐색 작업을 구동하기 위해 DSP(28)에 의해 다음 픽셀 인덱스(130, 132)를 생성하면, 메모리 제어 유니트들(39)은 매크로블럭 픽셀 엔덱스를 비디오 메모리 어드레스 및 인코드 메모리 어드레스로 변환한다(134). 적절한 매크로블럭이 비디오 메모리(32)로부터 인코드 메모리(36)로 로딩된다(136). 그러나 상기 경우에, 탐색 공간은 전체 탐색 공간을 다시 로딩하기 보다는 새로은 컬럼을 추가함으로써 증가하도록 업데이트된다.
따라서, DSP(28)는 탐색 공간 컬럼 업데이트를 위한 픽셀 인덱스를 생성하며(138), 그후에 상기 픽셀 인덱스는 메모리 제어 유니트(39)에 의해 적절한 비디오 메모리 어드레스 및 후보 메모리 어드레스를 생성하도록 변환된다(140). 새로운 매크로블럭 컬럼을 비디오 메모리(32)로부터 후보 메모리(38)로 로딩하면(142), 오차 프로세서(34)는 후보 메모리(38)와 인코드 메모리(36)의 8개의 출력 뱅크들을 통해 병렬 AD 계산들을 수행하며(144), 다수의 병렬 AD 계산들 이후에 최적의 SAD 결과 (또는 적절한 SAD 결과)를 생성한다(146).
도 16는 후보 메모리 내의 메모리 뱅크에 대한 베이스 어드레스 맵핑을 설명하는 흐름도이다. 도 16에 도시된 프로세스는 도 9의 회로의 동작과 일치하지만, 다른 회로의 변형들이 사용될 수 있다. 픽셀 인덱스로부터 베이스 어드레스를 획득하기 위해, 메모리 제어 유니트(39)는 픽셀 인덱스에 대한 mod 8 연산의 결과를 계산한다(150). 만약 상기 결과가 현재의 뱅크 인덱스와 동일하거나 그 이상이면(152), 베이스 어드레스는 8로 나누어진 픽셀 인덱스의 정수 몫과 동일하다(154). 만약 상기 결과가 현재 뱅크 인덱스 미만이면(152), 베이스 어드레스는 8로 나누어진 픽셀 인덱스의 정수 몫에 1을 더한 것과 동일하다(156).
도 17는 후보 메모리내의 메모리 뱅크에 대한 물리적인 어드레스 맵핑을 설명하는 흐름도이다. 도 17에 도시된 프로세스는 도 11의 회로(68)의 동작과 일치하지만, 다른 회로의 변형들이 사용될 수 있다. 만약, 매크로블럭내의 블럭 B에 대한 AD 계산이 종료되었다면(160), 후보 메모리(38)내의 컬럼 베이스 어드레스는 매크로블럭 베이스 어드레스에 1을 더한것과 동일하다(162). 만약 블럭 B가 수행되지 않으면(160), 후보 메모리(38)내의 컬럼 베이스 어드레스는 매크로블럭 베이스 어드레스와 동일하다(164). 그후에, 만약 블럭 B가 수행되거나 새로운 탐색 작업이 시작되면(166), 후보 메모리(38)내의 논리적인 메모리 어드레스는 컬럼 베이스 어드레스(168)와 동일하다. 만약 블럭 B가 수행되지 않거나 새로운 탐색이 시작되지 않으면(166), 논리적인 후보 메모리 어드레스는 6개의 로우들만큼 쉬프트된다(170).
도 18는 후보 메모리내의 매크로블럭 컬럼 업데이트에 대한 물리적인 어드레스 맵핑을 설명하는 흐름도이다. 도 18에 도시된 프로세스는 도 12의 회로(80)의 동작과 일치하지만, 다른 회로의 변형들이 사용될 수 있다. 도 18에 도시된 것과 같이, 컬럼 베이스 어드레스에 의해 표시된 컬럼을 결정하기 위해, 메모리 제어 유니트(39)는 컬럼 베이스 어드레스에 mod 3 연산을 적용한다(174). 만약 컬럼 업데이트 특징이 인에이블되지 않으면(176), 논리적인 후보 메모리 어드레스가 쉬프트되지 않는다(178). 이는 도 12의 멀티플렉서들(90, 92, 94)로부터의 출력 0, 0, 0과 상응하며, 또한 카운터(98)로부터의 카운터 출력 0 및 멀티플렉서(88)에 의한 0의 출력과 상응한다.
만약 컬럼 업데이트가 인에이블되면(176), 메모리 제어 유니트(39)는 카운터(98)의 출력과 관련하여 발생된 컬럼 업데이트 쉬프트들의 횟수를 결정한다(180). 식별된 컬럼 및 컬럼 업데이트 쉬프트들의 횟수에 기초하여, 메모리 제어 유니트(39)는 논리적인 후보 메모리 어드레스가 정확한 물리적인 후보 메모리 어드레스를 생성하기 위해 쉬프트되어야만 하는 정도를 결정한다(182). 메모리 제어 유니트(39)는 그후에 어드레스 쉬프트를 적용함으로써 논리적인 후보 메모리 어드레스를 물리적인 후보 메모리 어드레스로 변환한다(184).
도 19는 매크로블럭 및 동일한 계산들을 사용하여 매크로블럭을 형성하는 다수의 마이크로블럭들에 대한 오차값들의 생성을 설명하는 흐름도이다. 도시된 것과 같이, 모션 추정기(29)가 매크로블럭 탐색 반복을 시작하면(191), 오차 프로세서(34)는 마이크로블럭-로우 단위로 병렬 절대 오차(AD) 계산들을 수행한다. 예를 들면, 값 X가 초기화 될 수 있고(192), 오차 프로세서(34)는 인코딩된 매크로블럭내의 제 1 마이크로블럭의 X번째 로우에 병렬 AD 계산들을 수행할 수 있다(193). 마이크로블럭내에 더이상의 로우들이 존재하는 한(194의 예 브랜치에서), 값 X는 증분되고(195), 병렬 AD 계산들은 마이크로블럭의 다음 로우에서 수행된다.
비디오 블럭 카운터 회로(62)는 마이크로블럭에 더이상의 로우들이 존재하는지의 여부를 결정할 수 있다(194). 예를 들어, 비디오 블럭 카운터 회로(62)는 오차 프로세서(34)의 부분으로 통합될 수 있거나 DSP 인터페이스 유니트(30)의 부분을 형성할 수 있다. AD 계산들이 제 1 마이크로블럭의 모든 로우에 대하여 수행되었음이 결정되면, 오차 프로세서(34)는 제 1 마이크로블럭에 대한 오차값을 출력한다(196). 상기 프로세스는 더이상의 마이크로블럭들이 존재하지 않을 때까지 매크로블럭의 모든 마이크로블럭에 대하여 계속될 수 있다(197). 작업 종료 기술들은 예를 들면, 전체 누산된 오차값이 현재 반복을 위해 이미 계산된 최저 오차값에 상응하는 임계치와 같은 탐색 임계치를 초과하면 작업을 종료하기 위해 상기 프로세스 단계에서 사용될 수 있다.
오차 프로세서(34)는 매크로블럭에 대하여 진행중인 오차값을 누산할 수 있고 각각의 마이크로블럭에 대한 계산들이 수행됨으로써 각각의 마이크로블럭에 대한 오차값들을 출력할 수 있다. 제 1 마이크로블럭에 대한 오차값은 상기 포인트 까지의 오차값들의 누산이 될 수 있다. 제 2 마이크로블럭에 대한 오차값은 상기포인트 까지의 전체 누산에서 제 1 마이크로블럭에 대한 오차값을 뺀 값과 일치할 수 있다. 제 3 마이크로블럭에 대한 오차값은 상기 포인트까지의 전체 누산에서 제 1 및 제 2 마이크로블럭들에 대한 오차값들을 뺀 값과 일치할 수 있다.
비디오 블럭 카운터 회로(62)는 최종 마이크로블럭에 대한 계산들이 누산되는 시점을 결정한다(197의 예 브랜치). 이때, 오차 프로세서(34)는 매크로블럭에 대한 오차값을 출력하며(198), 상기 오차값은 상기 포인트까지의 AD 계산들의 전체 누산이다. DSP(28) 또는 가능하면 DSP 인터페이스 유니트(30)는 현재 인코딩될 매크로블럭에 대하여 또다른 작업이 수행되는지의 여부를 결정할 수 있다(199). 다시말해서, 작업은 탐색 공간내의 비디오 블럭과 현재 인코딩될 비디오 블럭을 비교하기 위해 사용되는 계산의 세트들을 말하며, 반복은 탐색 공간의 여러가지 서로다른 비디오 블럭들과 현재 인코딩될 비디오 블럭의 비교에 상응하는 작업들의 세트를 말한다.
반복은 탐색 공간의 비디오 블럭들의 한정된 세트를 인코딩될 비디오 블럭과 비교하는 것보다 간단할 수 있거나, 탐색 공간내의 위치, 중첩된 탐색들을 결정하는 초기화 기술들 및/또는 최적의 매치를 가능하면 신속하게 결정하기 위한 정의된 및 재정의된 탐색 파라미터들을 포함하기에 훨씬 더 복잡할 수 있다. 임의의 경우에, 모션 추정기(29)가 반복을 위한 모든 작업들을 수행한 후에(199의 아니오 브랜치), 비디오 인코더(18)는 현재의 매크로블럭을 인코딩한다(200). 유리하게, 비디오 인코더는 탐색 공간의 다양한 후보 매크로블럭들에 대한 오차값들이 발생되고 후보들을 형성하는 마이크로블럭들에 대한 오차값들이 발생될 때 인코딩 프로세스에서 다양한 선택들을 취할 수 있다.
최적 후보 마이크로블럭들에 상응하는 4개의 개별 모션 벡터들의 사용은 개선된 압축을 위해 매크로블럭을 인코딩하는데 사용될 수 있다. 그러나, 최적 후보 매크로블럭에 상응하는 단일 모션 벡터의 사용은 단지 매크로블럭 모션 벡터들을 인식하는 디코더들과의 호환성을 유지하는 것과 같은 다른 이유들에 바람직할 수 있다. 현재 인코딩될 매크로블럭과 모션 벡터(들)에 의해 한정된 비디오 블럭(들)간의 오차들을 한정하는 매트릭스에 이산 코사인 변환(DCT) 인코딩을 수행함으로써 텍스처 인코딩이 추가될 수 있다.
현재 매크로블럭이 인코딩된 후에, 비디오 인코더(18)는 현재 비디오 프레임에 대하여 인코딩될 또다른 매크로블럭이 존재하는지의 여부, 즉, 또다른 반복이 수행되는지의 여부를 결정할 수 있다(201). 만약 아니라면, 주어진 비디오 프레임에 대한 인코딩 프로세스는 종료되며(201의 아니오 브랜치), 상기 프레임에 대하여 인코딩된 비디오 블럭들은 송신기(20)에 의해 통신 매체(15)를 통해 전송될 수 있다(도 1). 그러나, 만약 현재 비디오 프레임에 대하여 인코딩될 또다른 매크로블럭이 존재하면, 탐색 공간은 다시 로딩될 수 있고(202) 다음 반복이 시작할 수 있다(191). 또한, 탐색 공간을 다시 로딩하는 프로세스(202)는 전술된 컬럼 업데이트 기술들을 사용하여 메모리 제어 유니트가 후보 메모리(38)의 컬럼들의 서브세트를 다시로딩하고 전술된 것과 같은 어드레싱 방식을 통해 후보 메모리를 기억하도록 한다. 전술된 상기 기술 및 다른 기술들이 사용되는지, 다양한 종래의 인코딩 프로세스들을 개선하기 위해 사용된 독립형 기술들이 사용되는지, 또는 이들의 조합이 사용되는지 간에, MPEG-4와 같은 표준들에 따른 비디오 인코딩의 효율성을 개선하고 이동 전화기들과 같이 계산 자원들이 더 한정되고 전력 소비가 중요한 무선 통신 디바이스들내의 비디오 인코딩의 구현을 더 용이하도록 할 수 있다.
다수의 서로다른 실시예들이 설명되었다. 기술들은 메모리 전송들, 계산 사이클들, 및 전력 소비를 감소시키고, 이에 따라 인코딩 프로세스를 가속화시키고 가능하면 배터리-전력원의 비디오 디바이스들의 수명을 연장시킴으로써 비디오 인코딩을 개선시킬 수 있다. 또한, 상기 기술들은 추가의 AD 계산들을 요구하지 않고 매크로블럭들 및 마이크로블럭들에 대한 오차값들을 생성함으로써 인코딩 프로세스에서 선택들을 제공할 수 있다. 상기 방식들 및 가능하면 다른 방식들에서, 기술들은 MPEG-4와 같은 표준들 또는 다른 비디오 인코딩 표준들에 따라 비디오 인코딩을 개선할 수 있다.
기술들은 하드웨어, 소프트웨어, 펌웨어, 또는 그들의 임의의 조합에서 구현될 수 있다. 소프트웨어에서 구현되는 경우에, 기술들은 프로그램 코드를 포함하는 컴퓨터 판독가능한 매체에서 관리될 수 있고, MPEG-4 표준과 호환가능한 비디오 시퀀스들을 인코딩하는 디바이스에서 실행될 때 전술된 하나 또는 그이상의 방법들을 포함한다. 상기 경우에, 컴퓨터 판독가능한 매체는 동기화 다이내믹 랜덤 액세스 메모리(SDRAM)와 같은 랜덤 액세스 메모리(RAN), 판독 전용 메모리(ROM), 비휘발성 랜덤 액세스 메모리(NVRAM), 전기적으로 소거가능한 프로그래밍가능한 판독 전용 메모리(EEPROM), FLASH 메모리 등등을 포함할 수 있다.
프로그램 코드는 컴퓨터 판독가능한 지시들의 형태로 메모리에 저장될 수 있다. 상기 경우에, DSP와 같은 프로세서는 본 명세서에 개시된 하나 또는 그이상의 기술들을 수행하기 위해 메모리 내에 저장된 지시들을 수행할 수 있다. 임의의 경우들에서, 기술들은 인코딩 프로세스를 가속화하기 위해 모션 추정기와 같은 다양한 하드웨어 구성요소들을 요구하는 DSP에 의해 수행될 수 있다. 다른 경우들에서, 비디오 인코더는 마이크로 프로세서, 하나 또는 그이상의 애플리케이션용 집적 회로들(ASICs), 하나 또는 그이상의 필드 프로그램가능한 게이트 어레이들(FPGAs), 또는 임의의 다른 하드웨어-소프트웨어 조합으로서 구현될 수 있다. 상기 및 다른 실시예들은 하기의 청구항들의 영역 내에 있다.

Claims (35)

  1. 제 1 탐색 공간 - 상기 제 1 탐색 공간은 모션 추정 루틴의 제 1 반복동안 인코딩될 제 1 비디오 블럭과 비교될 후보 비디오 블럭들의 제 1 복수의 컬럼들을 한정함 - 을 한정하기 위해 픽셀 값들의 세트를 메모리로 로딩하는 단계;
    상기 제 1 비디오 블럭을 상기 제 1 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 1 반복을 수행하는 단계; 및
    제 2 탐색 공간 - 상기 제 2 탐색 공간은 상기 모션 추정 루틴의 제 2 반복 동안 인코딩될 제 2 비디오 블럭과 비교될 후보 비디오 블럭들의 제 2 복수의 컬럼들을 한정함 - 을 한정하기 위해 컬럼들의 서브세트를 다시 로딩하는 단계를 포함하는 방법.
  2. 제 1항에 있어서, 상기 제 2 비디오 블럭을 상기 제 2 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 2 반복을 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제 2항에 있어서,
    제 3 탐색 공간 - 상기 제 3 탐색 공간은 상기 모션 추정 루틴의 제 3 반복동안 인코딩될 제 3 비디오 블럭과 비교될 후보 비디오 블럭들의 제 3 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하는단계; 및
    상기 제 3 비디오 블럭을 상기 제 3 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 3 반복을 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제 3항에 있어서,
    제 4 탐색 공간 - 상기 제 4 탐색 공간은 상기 모션 추정 루틴의 제 4 반복동안 인코딩될 제 4 비디오 블럭과 비교될 후보 비디오 블럭들의 제 4 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하는 단계; 및
    상기 제 4 비디오 블럭을 상기 제 4 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 4 반복을 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  5. 제 1항에 있어서, 상기 제 1 반복을 수행하는 단계는 상기 인코딩될 제 1 비디오 블럭의 픽셀 값들과 상기 탐색 공간내의 상기 후보 비디오 블럭들 중 하나의 픽셀 값들 사이에서 다수의 오차 계산들을 병렬로 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  6. 인코딩될 매크로블럭의 픽셀들과 탐색 공간내의 후보 매크로블럭의 픽셀들사이에서 오차 계산들을 수행하는 단계;
    상기 계산들에 기초하여 마이크로블럭 오차값들 - 상기 마이크로블럭 오차값들은 각각 상기 인코딩될 매크로블럭을 형성하는 다수의 마이크로블럭들 중 각각의 마이크로블럭과 상기 후보 매크로블럭을 형성하는 마이크로블럭들 중 각각의 마이크로블럭 사이의 오차들을 나타냄 - 의 세트를 생성하는 단계; 및
    상기 계산들에 기초하여 매크로블럭 오차값 - 상기 매크로블럭 오차값은 상기 인코딩될 매크로블럭과 상기 후보 매크로블럭 사이의 오차를 나타냄 - 을 생성하는 단계를 포함하는 방법.
  7. 제 6항에 있어서, 상기 오차 계산들을 수행하는 단계는 다수의 오차 계산들을 병렬로 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제 7항에 있어서, 상기 병렬로 수행되는 다수의 오차 계산들은 상기 마이크로블럭들 중 하나의 로우에 상응하는 것을 특징으로 하는 방법.
  9. 모션 추정 루틴에 따라 비디오 프레임들을 인코딩하고,
    제 1 탐색 공간 - 상기 제 1 탐색 공간은 상기 모션 추정 루틴의 제 1 반복동안 인코딩될 제 1 비디오 블럭과 비교될 후보 비디오 블럭들의 제 1 복수의 컬럼들을 한정함 - 을 한정하기 위해 픽셀 값들의 세트를 메모리로 로딩하고, 상기 제 1 비디오 블럭을 상기 제 1 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 1 반복을 수행하고, 제 2 탐색 공간 - 상기 제 2 탐색 공간은 상기 모션 추정 루틴의 제 2 반복 동안 인코딩될 제 2 비디오 블럭과 비교될 후보 비디오 블럭들의 제 2 복수의 컬럼들을 한정함 - 을 한정하기 위해 컬럼들의 서브세트를 다시 로딩하도록 구성되는 인코더; 및
    상기 인코딩된 비디오 프레임들을 전송하기 위한 송신기를 포함하는 디바이스.
  10. 제 9항에 있어서, 상기 인코더는 상기 제 2 비디오 블럭을 상기 제 2 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 2 반복을 수행하도록 더 구성되는 것을 특징으로 하는 디바이스.
  11. 제 10항에 있어서,
    상기 인코더는 제 3 탐색 공간 - 상기 제 3 탐색 공간은 상기 모션 추정 루틴의 제 3 반복동안 인코딩될 제 3 비디오 블럭과 비교될 후보 비디오 블럭들의 제 3 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고,
    상기 제 3 비디오 블럭을 상기 제 3 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 3 반복을 수행하도록 더 구성되는 것을 특징으로 하는 디바이스.
  12. 제 11항에 있어서,
    상기 인코더는 제 4 탐색 공간 - 상기 제 4 탐색 공간은 상기 모션 추정 루틴의 제 4 반복동안 인코딩될 제 4 비디오 블럭과 비교될 후보 비디오 블럭들의 제 4 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고,
    상기 제 4 비디오 블럭을 상기 제 4 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 4 반복을 수행하도록 더 구성되는 것을 특징으로 하는 디바이스.
  13. 제 9항에 있어서, 상기 인코더는 상기 인코딩될 제 1 비디오 블럭의 픽셀 값들과 상기 탐색 공간내의 상기 후보 비디오 블럭들 중 하나의 픽셀 값들 사이에서 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 디바이스.
  14. 제 9항에 있어서, 상기 디바이스는 디지털 텔레비전, 무선 통신 디바이스들, 개인 디지털 보조장치, 랩탑 컴퓨터, 데스크탑 컴퓨터, 디지털 카메라, 디지털 레코딩 디바이스, 비디오 성능들을 가지는 셀룰러 무선전화기, 및 비디오 성능들을 가지는 위성 무선전화기를 포함하는 그룹들로부터 선택되는 것을 특징으로 하는 디바이스.
  15. 제 9항에 있어서, 비디오 프레임들을 실시간으로 캡처하기 위한 비디오 캡처디바이스를 더 포함하며, 상기 인코더는 상기 비디오 프레임들을 실시간으로 인코딩하도록 구성되고, 상기 송신기는 상기 인코딩된 비디오 프레임들을 실시간으로 전송하도록 구성되는 것을 특징으로 하는 디바이스.
  16. 비디오 프레임들을 인코딩하고,
    인코딩될 매크로블럭의 픽셀들과 탐색 공간내의 후보 매크로블럭의 픽셀들사이에서 오차 계산들을 수행하고, 상기 계산들에 기초하여 마이크로블럭 오차값들 - 상기 마이크로블럭 오차값들은 각각 상기 인코딩될 매크로블럭을 형성하는 다수의 마이크로블럭들 중 각각의 마이크로블럭과 상기 후보 매크로블럭을 형성하는 마이크로블럭들 중 각각의 마이크로블럭 사이의 오차들을 나타냄 - 의 세트를 생성하고, 상기 계산들에 기초하여 매크로블럭 오차값 - 상기 매크로블럭 오차값은 상기 인코딩될 매크로블럭과 상기 후보 매크로블럭 사이의 오차를 나타냄 - 을 생성하도록 구성된 인코더; 및
    상기 인코딩된 비디오 프레임들을 전송하는 송신기를 포함하는 디바이스.
  17. 제 16항에 있어서, 상기 인코더는 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 디바이스.
  18. 제 16항에 있어서, 상기 병렬로 수행되는 다수의 오차 계산들은 상기 마이크로블럭들 중 하나의 로우에 상응하는 것을 특징으로 하는 디바이스.
  19. 제 16항에 있어서, 비디오 프레임들을 실시간으로 캡처하기 위한 비디오 캡처 디바이스를 더 포함하며, 상기 인코더는 상기 비디오 프레임들을 실시간으로 인코딩하도록 구성되고, 상기 송신기는 상기 인코딩된 비디오 프레임들을 실시간으로 송신하도록 구성되며, 상기 비디오 프레임들은 동영상 전물가 그룹 4(MPEG-4) 표준에 따라 인코딩되는 것을 특징으로 하는 디바이스.
  20. 제 16항에 있어서, 상기 디바이스는 배터리 전원의 무선 디바이스인 것을 특징으로 하는 디바이스.
  21. 메모리;
    제 1 탐색 공간 - 상기 제 1 탐색 공간은 모션 추정 루틴의 제 1 반복동안 인코딩될 제 1 비디오 블럭과 비교될 후보 비디오 블럭들의 제 1 복수의 컬럼들을 한정함 - 을 한정하기 위해 픽셀 값들의 세트를 메모리로 로딩하고, 제 2 탐색 공간 - 상기 제 2 탐색 공간은 상기 모션 추정 루틴의 제 2 반복 동안 인코딩될 제 2 비디오 블럭과 비교될 후보 비디오 블럭들의 제 2 복수의 컬럼들을 한정함 - 을 한정하기 위해 컬럼들의 서브세트를 다시 로딩하는 메모리 제어 유니트; 및
    상기 제 1 비디오 블럭을 상기 제 1 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 1 반복을 수행하고, 상기 제 2 비디오 블럭을 상기 제 2 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 2 반복을 수행하는 프로세서를 포함하는 장치.
  22. 제 21항에 있어서,
    상기 메모리 제어 유니트는 제 3 탐색 공간 - 상기 제 3 탐색 공간은 상기 모션 추정 루틴의 제 3 반복동안 인코딩될 제 3 비디오 블럭과 비교될 후보 비디오 블럭들의 제 3 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고,
    상기 프로세서는 상기 제 3 비디오 블럭을 상기 제 3 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 3 반복을 수행하는 것을 특징으로 하는 장치.
  23. 제 22항에 있어서,
    상기 메모리 제어 유니트는 제 4 탐색 공간 - 상기 제 4 탐색 공간은 상기 모션 추정 루틴의 제 4 반복동안 인코딩될 제 4 비디오 블럭과 비교될 후보 비디오 블럭들의 제 4 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고,
    상기 프로세서는 상기 제 4 비디오 블럭을 상기 제 4 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 4 반복을 수행하는 것을 특징으로 하는 장치.
  24. 제 21항에 있어서, 상기 프로세서는 상기 인코딩될 제 1 비디오 블럭들 중 하나와 상기 탐색 공간내의 상기 후보 비디오 블럭들 중 하나 사이에서 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 장치.
  25. 컴퓨터 판독가능한 지시들을 저장하는 메모리; 및
    상기 지시를 수행하는 프로세서를 포함하며, 상기 지시는,
    인코딩될 매크로블럭의 픽셀들과 탐색 공간내의 후보 매크로블럭의 픽셀들사이에서 오차 계산들을 수행하고,
    상기 계산들에 기초하여 마이크로블럭 오차값들 - 상기 마이크로블럭 오차값들은 각각 상기 인코딩될 매크로블럭을 형성하는 다수의 마이크로블럭들 중 각각의 마이크로블럭과 상기 후보 매크로블럭을 형성하는 마이크로블럭들 중 각각의 마이크로블럭 사이의 오차들을 나타냄 - 의 세트를 생성하고, 및
    상기 계산들에 기초하여 매크로블럭 오차값 - 상기 매크로블럭 오차값은 상기 인코딩될 매크로블럭과 상기 후보 매크로블럭 사이의 오차를 나타냄 - 을 생성하기 위한 장치.
  26. 제 25항에 있어서, 상기 프로세서는 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 장치.
  27. 제 26항에 있어서, 상기 병렬로 수행되는 다수의 오차 계산들은 상기 마이크로블럭들 중 하나의 로우에 상응하는 것을 특징으로 하는 장치.
  28. 동영상 전문가 그룹(MPEG) 표준에 따라 비디오 블럭들을 인코딩하는 장치로서,
    제 1 탐색 공간 - 상기 제 1 탐색 공간은 모션 추정 루틴의 제 1 반복동안 인코딩될 제 1 비디오 블럭과 비교될 후보 비디오 블럭들의 제 1 복수의 컬럼들을 한정함 - 을 한정하기 위해 픽셀 값들의 세트를 메모리로 로딩하고;
    상기 제 1 비디오 블럭을 상기 제 1 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 1 반복을 수행하고; 및
    제 2 탐색 공간 - 상기 제 2 탐색 공간은 상기 모션 추정 루틴의 제 2 반복 동안 인코딩될 제 2 비디오 블럭과 비교될 후보 비디오 블럭들의 제 2 복수의 컬럼들을 한정함 - 을 한정하기 위해 컬럼들의 서브세트를 다시 로딩하도록 구성되는 장치.
  29. 제 28항에 있어서, 상기 장치는 상기 제 2 비디오 블럭을 상기 제 2 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 2 반복을 수행하도록 구성되는 것을 특징으로 하는 장치.
  30. 제 29항에 있어서, 상기 장치는,
    제 3 탐색 공간 - 상기 제 3 탐색 공간은 상기 모션 추정 루틴의 제 3 반복동안 인코딩될 제 3 비디오 블럭과 비교될 후보 비디오 블럭들의 제 3 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고; 및
    상기 제 3 비디오 블럭을 상기 제 3 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 3 반복을 수행하도록 더 구성되는 것을 특징으로 하는 장치.
  31. 제 30항에 있어서, 상기 장치는,
    상기 인코더는 제 4 탐색 공간 - 상기 제 4 탐색 공간은 상기 모션 추정 루틴의 제 4 반복동안 인코딩될 제 4 비디오 블럭과 비교될 후보 비디오 블럭들의 제 4 복수의 컬럼들을 한정함 - 을 한정하기 위해 상기 컬럼들의 또다른 서브세트를 다시 로딩하고; 및
    상기 제 4 비디오 블럭을 상기 제 4 탐색 공간내의 상기 후보 비디오 블럭들과 비교하기 위해 상기 제 4 반복을 수행하도록 더 구성되는 것을 특징으로 하는 장치.
  32. 제 28항에 있어서, 상기 장치는 상기 인코딩될 제 1 비디오 블럭의 픽셀 값들과 상기 제 1 탐색 공간내의 상기 후보 비디오 블럭들 중 하나의 픽셀 값들 사이에서 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 장치.
  33. 동영상 전문가 그룹(MPEG) 표준에 따라 비디오 블럭들을 인코딩하는 장치로서,
    인코딩될 매크로블럭의 픽셀들과 탐색 공간내의 후보 매크로블럭의 픽셀들사이에서 오차 계산들을 수행하고;
    상기 계산들에 기초하여 마이크로블럭 오차값들 - 상기 마이크로블럭 오차값들은 각각 상기 인코딩될 매크로블럭을 형성하는 다수의 마이크로블럭들 중 각각의 마이크로블럭과 상기 후보 매크로블럭을 형성하는 마이크로블럭들 중 각각의 마이크로블럭 사이의 오차들을 나타냄 - 의 세트를 생성하고; 및
    상기 계산들에 기초하여 매크로블럭 오차값 - 상기 매크로블럭 오차값은 상기 인코딩될 매크로블럭과 상기 후보 매크로블럭 사이의 오차를 나타냄 - 을 생성하도록 구성된 장치.
  34. 제 33항에 있어서, 상기 장치는 다수의 오차 계산들을 병렬로 수행하도록 구성되는 것을 특징으로 하는 장치.
  35. 제 34항에 있어서, 상기 병렬로 수행되는 다수의 오차 계산들은 상기 마이크로블럭들 중 하나의 로우에 상응하는 것을 특징으로 하는 장치.
KR1020047020598A 2002-06-18 2003-06-18 비디오 인코딩 및 디코딩 기술 KR100967993B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US39010102P 2002-06-18 2002-06-18
US60/390,101 2002-06-18
US10/371,793 2003-02-21
US10/371,793 US7940844B2 (en) 2002-06-18 2003-02-21 Video encoding and decoding techniques
PCT/US2003/019401 WO2003107681A2 (en) 2002-06-18 2003-06-18 Video encoding and decoding techniques

Publications (2)

Publication Number Publication Date
KR20050012806A true KR20050012806A (ko) 2005-02-02
KR100967993B1 KR100967993B1 (ko) 2010-07-07

Family

ID=29739645

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047020598A KR100967993B1 (ko) 2002-06-18 2003-06-18 비디오 인코딩 및 디코딩 기술

Country Status (7)

Country Link
US (2) US7940844B2 (ko)
EP (1) EP1514425A2 (ko)
JP (1) JP2005530422A (ko)
KR (1) KR100967993B1 (ko)
CN (1) CN1663278A (ko)
AU (1) AU2003238295A1 (ko)
WO (1) WO2003107681A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101291869B1 (ko) * 2008-02-05 2013-07-31 가부시키가이샤 엔티티 도코모 공간 및 시간 처리를 이용하는 비디오 시퀀스에서의 노이즈 및/또는 플리커 감소

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI110744B (fi) * 2001-09-06 2003-03-14 Nokia Corp Menetelmä liike-estimoinnin suorittamiseksi videokoodauksessa, videokoodausjärjestelmä sekä videokoodauslaite
US10375641B2 (en) 2003-05-05 2019-08-06 Pluto Technologies, Inc. Mobile device management system using network parameter resources
US20040252197A1 (en) * 2003-05-05 2004-12-16 News Iq Inc. Mobile device management system
US7894526B2 (en) * 2004-02-27 2011-02-22 Panasonic Corporation Motion estimation method and moving picture coding method
KR100621137B1 (ko) * 2004-02-27 2006-09-13 세이코 엡슨 가부시키가이샤 동화상 부호화 장치 및 동화상 처리장치
JP4190458B2 (ja) * 2004-05-17 2008-12-03 三洋電機株式会社 画像処理装置
EP1703513A1 (en) * 2005-03-15 2006-09-20 Deutsche Thomson-Brandt Gmbh Method and apparatus for encoding plural video signals as a single encoded video signal, method and and apparatus for decoding such an encoded video signal
US20070165106A1 (en) * 2005-05-02 2007-07-19 Groves Randall D Distributed Videoconferencing Processing
US7864982B2 (en) 2005-08-22 2011-01-04 Samsung Electronics Co., Ltd. Displacement and tilt detection method for a portable autonomous device having an integrated image sensor and a device therefor
CN101268434B (zh) * 2005-08-22 2010-06-16 三星电子株式会社 自主手持设备及控制自主手持设备的操作的方法
EP1761062A1 (en) 2005-09-06 2007-03-07 BRITISH TELECOMMUNICATIONS public limited company Generating and storing image data
US8358695B2 (en) * 2006-04-26 2013-01-22 Altera Corporation Methods and apparatus for providing a scalable motion estimation/compensation assist function within an array processor
TWI444047B (zh) * 2006-06-16 2014-07-01 Via Tech Inc 用於視訊解碼的去方塊效應濾波器、視訊解碼器與圖形處理單元
US8275049B2 (en) * 2006-06-16 2012-09-25 Via Technologies, Inc. Systems and methods of improved motion estimation using a graphics processing unit
FR2902906A1 (fr) * 2006-06-21 2007-12-28 St Microelectronics Sa Gestion de donnes pour un traitement d'images
US7714873B2 (en) * 2006-06-29 2010-05-11 Microsoft Corporation Strategies for compressing textures
US8213509B2 (en) 2006-10-06 2012-07-03 Calos Fund Limited Liability Company Video coding on parallel processing systems
US8077776B1 (en) * 2006-12-15 2011-12-13 Xilinx, Inc. Motion estimation for video compression
US8050320B2 (en) * 2007-02-09 2011-11-01 Ericsson Television, Inc. Statistical adaptive video rate control
KR100834443B1 (ko) 2007-02-27 2008-06-04 삼성전자주식회사 비디오 코덱을 위한 메모리 구조 및 메모리 액세스 방법
US20080279281A1 (en) * 2007-05-08 2008-11-13 Draper Stark C Method and System for Compound Conditional Source Coding
CN101149738B (zh) * 2007-06-06 2011-09-21 中兴通讯股份有限公司 一种利用定长字段优化迭代查询的方法
CN101212682B (zh) * 2007-12-22 2011-06-15 深圳市同洲电子股份有限公司 一种运动搜索区域的数据加载装置和方法
TWI475890B (zh) * 2008-10-14 2015-03-01 Univ Nat Taiwan 用於需要善用電量之多媒體裝置的高效率區塊比對的大型積體電路架構及方法
US8751990B2 (en) * 2008-12-19 2014-06-10 L3 Communications Integrated Systems, L.P. System for determining median values of video data
TWI450591B (zh) * 2009-04-16 2014-08-21 Univ Nat Taiwan 視訊處理晶片組及其中移動評估的資料讀取之方法
TWI450590B (zh) * 2009-04-16 2014-08-21 Univ Nat Taiwan 嵌入式系統及其中移動評估的資料讀取之方法
US8213506B2 (en) * 2009-09-08 2012-07-03 Skype Video coding
GB2476271B (en) * 2009-12-17 2015-09-02 Skype Coding data streams
US20110194606A1 (en) * 2010-02-09 2011-08-11 Cheng-Yu Hsieh Memory management method and related memory apparatus
US9313494B2 (en) 2011-06-20 2016-04-12 Qualcomm Incorporated Parallelization friendly merge candidates for video coding
US9280386B1 (en) * 2011-07-14 2016-03-08 Google Inc. Identifying task instance outliers based on metric data in a large scale parallel processing system
CN103167218B (zh) * 2011-12-14 2016-04-06 北京大学 一种基于非局部性的超分辨率重建方法和设备
US10536726B2 (en) * 2012-02-24 2020-01-14 Apple Inc. Pixel patch collection for prediction in video coding system
US9451288B2 (en) 2012-06-08 2016-09-20 Apple Inc. Inferred key frames for fast initiation of video coding sessions
US9271010B2 (en) * 2012-10-02 2016-02-23 Futurewei Technologies, Inc. System and method for motion estimation for large-size block
CN104683805B (zh) 2013-11-30 2019-09-17 同济大学 图像编码、解码方法及装置
CN104717510B (zh) 2013-12-13 2018-08-17 华为技术有限公司 用于图像处理的方法和装置
US9930357B2 (en) * 2016-03-03 2018-03-27 Uurmi Systems Pvt. Ltd. Systems and methods for motion estimation for coding a video sequence
JP7178907B2 (ja) * 2017-02-03 2022-11-28 ソニーグループ株式会社 送信装置、送信方法、受信装置および受信方法
EP3931792A1 (en) * 2019-02-26 2022-01-05 Movidius Ltd. Improving the efficiency of image difference calculations
CN111341413B (zh) * 2020-02-27 2023-04-25 东北石油大学 应用上的运动频率调节处理方法和装置

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1994018799A1 (en) * 1993-02-03 1994-08-18 Qualcomm Incorporated Interframe video encoding and decoding system
US5598514A (en) 1993-08-09 1997-01-28 C-Cube Microsystems Structure and method for a multistandard video encoder/decoder
US5610659A (en) * 1995-05-08 1997-03-11 Futuretel, Inc. MPEG encoder that concurrently determines video data encoding format and rate control
US5987178A (en) * 1996-02-22 1999-11-16 Lucent Technologies, Inc. Apparatus and method for a programmable video motion estimator
US6043846A (en) * 1996-11-15 2000-03-28 Matsushita Electric Industrial Co., Ltd. Prediction apparatus and method for improving coding efficiency in scalable video coding
US5864372A (en) * 1996-12-10 1999-01-26 United Microelectronics Corporation Apparatus for implementing a block matching algorithm for motion estimation in video image processing
JP3631868B2 (ja) * 1996-12-20 2005-03-23 株式会社東芝 動きベクトル検出装置および方法
TW361051B (en) * 1997-01-09 1999-06-11 Matsushita Electric Ind Co Ltd Motion vector detection apparatus
US6014181A (en) * 1997-10-13 2000-01-11 Sharp Laboratories Of America, Inc. Adaptive step-size motion estimation based on statistical sum of absolute differences
US6125149A (en) * 1997-11-05 2000-09-26 At&T Corp. Successively refinable trellis coded quantization
US6434196B1 (en) 1998-04-03 2002-08-13 Sarnoff Corporation Method and apparatus for encoding video information
US6141641A (en) 1998-04-15 2000-10-31 Microsoft Corporation Dynamically configurable acoustic model for speech recognition system
JP4027513B2 (ja) * 1998-09-29 2007-12-26 株式会社ルネサステクノロジ 動き検出装置
US6081554A (en) * 1998-10-02 2000-06-27 The Trustees Of Columbia University In The City Of New York Method to control the generated bit rate in MPEG-4 shape coding
US6233226B1 (en) * 1998-12-14 2001-05-15 Verizon Laboratories Inc. System and method for analyzing and transmitting video over a switched network
US6363117B1 (en) * 1998-12-31 2002-03-26 Sony Corporation Video compression using fast block motion estimation
AUPP990199A0 (en) 1999-04-22 1999-05-13 Griffith University Wireless video surveillance system
KR20010071692A (ko) 1999-04-30 2001-07-31 요트.게.아. 롤페즈 낮은 비트 속도 비디오 코딩 방법 및 시스템
JP2000350216A (ja) 1999-06-09 2000-12-15 Matsushita Electric Ind Co Ltd 動き係数探索装置、及び動き係数探索方法
KR100580158B1 (ko) * 1999-06-12 2006-05-15 삼성전자주식회사 화상 패킷 전송을 위한 무선통신 시스템
US6393154B1 (en) * 1999-11-18 2002-05-21 Quikcat.Com, Inc. Method and apparatus for digital image compression using a dynamical system
US6513004B1 (en) 1999-11-24 2003-01-28 Matsushita Electric Industrial Co., Ltd. Optimized local feature extraction for automatic speech recognition
US6496538B1 (en) * 1999-12-31 2002-12-17 Intel Corporation Method and apparatus for motion estimation for digital video encoding
KR100677082B1 (ko) 2000-01-27 2007-02-01 삼성전자주식회사 움직임 추정기
US6567469B1 (en) 2000-03-23 2003-05-20 Koninklijke Philips Electronics N.V. Motion estimation algorithm suitable for H.261 videoconferencing applications
US6690727B1 (en) * 2000-05-08 2004-02-10 Intel Corporation Image processing
ATE358316T1 (de) 2000-06-08 2007-04-15 Nokia Corp Verfahren und system für adaptive verteilte spracherkennung
US6510410B1 (en) 2000-07-28 2003-01-21 International Business Machines Corporation Method and apparatus for recognizing tone languages using pitch information
US6934332B1 (en) * 2001-04-24 2005-08-23 Vweb Corporation Motion estimation using predetermined pixel patterns and subpatterns
FI110744B (fi) 2001-09-06 2003-03-14 Nokia Corp Menetelmä liike-estimoinnin suorittamiseksi videokoodauksessa, videokoodausjärjestelmä sekä videokoodauslaite
EP1294194B8 (en) 2001-09-10 2010-08-04 Texas Instruments Incorporated Apparatus and method for motion vector estimation
US6941265B2 (en) * 2001-12-14 2005-09-06 Qualcomm Inc Voice recognition system method and apparatus
US7034849B1 (en) * 2001-12-31 2006-04-25 Apple Computer, Inc. Method and apparatus for image blending
US7051356B2 (en) * 2002-02-25 2006-05-23 Sentrus, Inc. Method and system for remote wireless video surveillance
TW526657B (en) * 2002-04-12 2003-04-01 Univ Nat Taiwan Global elimination algorithm for motion estimation and the hardware structure
US7039246B2 (en) * 2002-05-03 2006-05-02 Qualcomm Incorporated Video encoding techniques
US20040008779A1 (en) * 2002-06-18 2004-01-15 Lai King Chung Techniques for video encoding and decoding

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101291869B1 (ko) * 2008-02-05 2013-07-31 가부시키가이샤 엔티티 도코모 공간 및 시간 처리를 이용하는 비디오 시퀀스에서의 노이즈 및/또는 플리커 감소

Also Published As

Publication number Publication date
KR100967993B1 (ko) 2010-07-07
CN1663278A (zh) 2005-08-31
US20110170611A1 (en) 2011-07-14
JP2005530422A (ja) 2005-10-06
AU2003238295A8 (en) 2003-12-31
WO2003107681A3 (en) 2004-08-05
US20040008780A1 (en) 2004-01-15
EP1514425A2 (en) 2005-03-16
AU2003238295A1 (en) 2003-12-31
US7940844B2 (en) 2011-05-10
WO2003107681A2 (en) 2003-12-24

Similar Documents

Publication Publication Date Title
KR100967993B1 (ko) 비디오 인코딩 및 디코딩 기술
JP5203554B2 (ja) ビデオ符号化のための効率的なレート制御技術
US20040008779A1 (en) Techniques for video encoding and decoding
US20060140493A1 (en) Video encoding techniques
JP2008523724A (ja) 動画像符号化のための動き推定技術
EP1653744A1 (en) Non-integer pixel sharing for video encoding
JP2008522500A (ja) パラメトリック方程式を使用した、ビデオ符号化のためのレート制御技法
KR100937616B1 (ko) 계산적으로 제약된 비디오 인코딩
US7817717B2 (en) Motion estimation techniques for video encoding
JP2007538415A (ja) ハンドヘルド装置用のエンコード方法
Chatterjee et al. Power efficient motion estimation algorithm and architecture based on pixel truncation
US7804901B2 (en) Residual coding in compliance with a video standard using non-standardized vector quantization coder
EP1679902A2 (en) Residual coding in compliance with a video standard using non-standardized vector quantization coder
EP1684525A2 (en) Video encoding with fast motion estimation
JP6849781B2 (ja) 画像符号化装置、画像符号化方法及びコンピュータプログラム
JPH09261661A (ja) 2つの基準ピクチャから双方向コード化ピクチャを形成するための方法
Xu et al. An improved parallel architecture fro MPEG-4 motion estimation in 3G mobile applications

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee