KR102587638B1 - 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템 - Google Patents
비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템 Download PDFInfo
- Publication number
- KR102587638B1 KR102587638B1 KR1020187032387A KR20187032387A KR102587638B1 KR 102587638 B1 KR102587638 B1 KR 102587638B1 KR 1020187032387 A KR1020187032387 A KR 1020187032387A KR 20187032387 A KR20187032387 A KR 20187032387A KR 102587638 B1 KR102587638 B1 KR 102587638B1
- Authority
- KR
- South Korea
- Prior art keywords
- block
- neighboring
- current block
- neighboring block
- current
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/57—Motion estimation characterised by a search window with variable size or shape
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T7/00—Image analysis
- G06T7/20—Analysis of motion
- G06T7/223—Analysis of motion using block-matching
- G06T7/238—Analysis of motion using block-matching using non-full search, e.g. three-step search
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/103—Selection of coding mode or of prediction mode
- H04N19/105—Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/12—Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
- H04N19/122—Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods 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/423—Methods 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 characterised by memory arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/593—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/10—Image acquisition modality
- G06T2207/10016—Video; Image sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2207/00—Indexing scheme for image analysis or image enhancement
- G06T2207/20—Special algorithmic details
- G06T2207/20021—Dividing image into blocks, subimages or windows
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Theoretical Computer Science (AREA)
- Discrete Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
비디오 코딩을 위한 이웃 블록 패턴을 이용한 모션 추정과 관련된 기술들이 개시된다.
Description
비디오 해상도가 계속 증가하고 고품질 비디오 이미지에 대한 기대가 높아짐으로 인해, VP9 등의 VP# 표준과 같은 기존의 비디오 코딩 표준을 사용하는 코딩에 대해 비디오의 효율적 이미지 데이터 압축에 대한 높은 요구가 존재하지만 성능은 제한적이다. 앞서 언급한 표준은 불충분한 압축/품질 문제를 해결하기 위해 전통적 방식의 확장된 형태를 사용하지만 결과는 여전히 불충분하다.
이러한 비디오 코딩 프로세스는 시간적 (프레임 대 프레임) 중복(redundancy)을 줄이기 위해 인코더에서 인터-예측(inter-prediction)을 사용한다. 모션 추정은 인코더에서의 핵심 동작이다. 모션 추정은, 모션 벡터를 찾기 위해, 인코딩되고 있는 프레임 중에서, 참조 프레임의 영역과 가장 유사한 영역을 찾는 프로세스이다. 모션 벡터는 인코딩된 블록에 대한 예측을 구성하기 위해 사용된다. 예측과 실제(원본) 데이터 간의 차이는 잔차(residual) 데이터라 불리며, 모션 벡터와 함께 압축 및 인코딩된다.
종래의 블록 매칭에 의해, 프레임은 여러 크기의 블록들로 파티셔닝(partition)된다. 현재 프레임 상의 개별 블록들은 참조 프레임 상의 탐색 창의 몇 개의 또는 각각의 블록 위치와 비교된다. 최저 절대 차 합(sum of absolute difference: SAD), 평균 제곱 오류(mean square error: MSE) 또는 기타 메트릭은 최상의 매치(best match)로 간주된다. 탐색은 매우 정확하지만 성능을 저하시킨다.
효율성을 증가시키는 하나의 대안적인 전략은 예측되고 있는 현재 블록 근처의 이웃 블록들에 대해 이미 설정된 모션 벡터들을 사용하는 것이다. 이는 서로 근처에 있는 블록들이 이미지 내에서 동일한 물체의 콘텐츠를 가질 가능성이 더 높으므로 동일하거나 유사한 모션 벡터를 가질 가능성이 더 높다는 원리에서 작용한다. 따라서, 한 세트의 이웃 블록들의 모션 벡터들의 어떤 조합 또는 형태는 종종 현재 블록의 후보 모션 벡터로서 사용될 수 있다. VP9의 경우, 이웃 블록 위치는 고정되고, 미리 결정되며, 서로 다른 블록 크기에 대한 룩업 테이블 상에 배치되므로, 룩업 테이블 상의 값들에 대해 고정되고 그러한 값들이 변경될 때 쉽게 변경될 수 없는 하드웨어를 초래한다. 또한, 8 x 8 픽셀의 잠재적 이웃 블록들은, 현재 블록이 8 x 8이거나 그보다 큰 경우에는 하나의 8 x 8 블록 기반 모션 벡터와, 예측될 8 × 8 블록보다 작은 현재 블록에 인접할 때 모션 벡터를 각각 제공하는 2개의 4 x 4 이웃 서브 블록을 모두 가져야 한다. 또한, 이웃 블록 패턴은 현재 블록의 좌측으로 3개 열 및 상측으로 3개 행만큼의 비교적 넓은 영역에 걸쳐 있다. 이러한 제한은 이웃 블록 동작 중에 메모리에 많은 양의 데이터가 저장되게 함으로써 필요한 메모리 용량과 대역폭 및 그에 따른 메모리 상의 필요한 칩 면적을 증가시키고, 가속기와 같은 하드웨어에 의해 수행되는 경우 필요한 로직을 증가시켜 하드웨어의 게이트 수(또는 칩 면적)를 증가시키고 이것이 또한 비용을 증가시킴으로써 하드웨어 상에서 이웃 블록 결정을 구현하는 것을 어렵게 만든다.
본원에 설명된 소재는 첨부된 도면에서 한정의 의미가 아니라 예로서 도시된다. 설명의 단순성 및 명확성을 위해, 도면에 예시된 요소들은 반드시 축척대로 그려진 것이 아니다. 예를 들어, 몇몇 요소의 치수는 명확성을 위해 다른 요소에 비해 과장될 수 있다. 또한, 적절한 것으로 고려되는 경우, 대응하는 또는 유사한 요소를 나타내기 위해 참조 라벨이 도면들 사이에서 반복되었다.
도 1은 모션 추정에 사용되는 이웃 블록의 주석 처리된(annotated) 룩업 테이블이다.
도 1a는 이웃 블록의 위치를 결정하기 위한 현재 프레임 주위의 블록의 번호 매김을 도시하는 파티셔닝된 프레임의 개략도이다.
도 2a 내지 도 2m은 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 3은 비디오 코딩 시스템을 위한 인코더의 도시도이다.
도 4는 비디오 코딩 시스템을 위한 디코더의 도시도이다.
도 5는 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하는 모션 추정 프로세스를 도시하는 흐름도이다.
도 6은 본 발명의 구현예에 따라 사용된 이웃 블록 패턴 공식이다.
도 7a 내지 도 7m은 본 발명의 구현예에 따른 3열 1행 패턴에서 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 8은 본 발명의 구현예에 따른, 현재 블록에 대한 외부 블록을 포함하는 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 9a 내지 도 9m은 본 발명의 구현예에 따른 1열 1행 패턴에서 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 10a 및 도 10b는 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하는 모션 추정 프로세스를 도시하는 상세한 흐름도이다.
도 11은 동작 시에 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하여 모션 추정 프로세스를 제공하는 예시적 시스템의 도시도이다.
도 12는 예시적 시스템의 도시도이다.
도 13은 또 다른 예시적 시스템의 도시도이다.
도 14는 본 발명의 적어도 몇몇 실시예에 따라 전반적으로 배치된 다른 예시적 디바이스를 도시한다.
도 1은 모션 추정에 사용되는 이웃 블록의 주석 처리된(annotated) 룩업 테이블이다.
도 1a는 이웃 블록의 위치를 결정하기 위한 현재 프레임 주위의 블록의 번호 매김을 도시하는 파티셔닝된 프레임의 개략도이다.
도 2a 내지 도 2m은 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 3은 비디오 코딩 시스템을 위한 인코더의 도시도이다.
도 4는 비디오 코딩 시스템을 위한 디코더의 도시도이다.
도 5는 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하는 모션 추정 프로세스를 도시하는 흐름도이다.
도 6은 본 발명의 구현예에 따라 사용된 이웃 블록 패턴 공식이다.
도 7a 내지 도 7m은 본 발명의 구현예에 따른 3열 1행 패턴에서 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 8은 본 발명의 구현예에 따른, 현재 블록에 대한 외부 블록을 포함하는 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 9a 내지 도 9m은 본 발명의 구현예에 따른 1열 1행 패턴에서 상이한 크기의 현재 블록에 대한 프레임 파티셔닝 및 이웃 블록 위치를 도시하는 개략도이다.
도 10a 및 도 10b는 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하는 모션 추정 프로세스를 도시하는 상세한 흐름도이다.
도 11은 동작 시에 본 발명의 구현예에 따라 비디오 코딩을 위해 이웃 블록 패턴을 사용하여 모션 추정 프로세스를 제공하는 예시적 시스템의 도시도이다.
도 12는 예시적 시스템의 도시도이다.
도 13은 또 다른 예시적 시스템의 도시도이다.
도 14는 본 발명의 적어도 몇몇 실시예에 따라 전반적으로 배치된 다른 예시적 디바이스를 도시한다.
이제, 하나 이상의 구현예가 첨부된 도면을 참조하여 설명된다. 특정 구성 및 배열이 설명지만, 이는 단지 예시의 목적으로 행해진다는 것이 이해되어야 한다. 당업자라면 설명의 취지 및 범위를 벗어나지 않고 다른 구성 및 배열이 사용될 수 있다는 것을 인식할 것이다. 당업자에게는 여기에 설명된 기술 및/또는 배열이 본 명세서에 설명된 것 이외의 다양한 다른 시스템 및 애플리케이션에도 사용될 수 있음이 명백할 것이다.
이하의 설명은 예를 들어 시스템-온-칩(SoC) 아키텍처와 같은 아키텍처에서 나타날 수 있는 다양한 구현예를 제시하지만, 여기에 설명된 기술 및/또는 배열의 구현예는 특정 아키텍처 및/또는 컴퓨팅 시스템에 한정되지 않으며 유사한 목적을 위해 임의의 아키텍처 및/또는 컴퓨팅 시스템에 의해 구현될 수 있다. 예를 들어, 다수의 집적 회로(IC) 칩 및/또는 패키지, 및/또는 셋톱 박스, 스마트폰 등과 같은 다양한 컴퓨팅 디바이스 및/또는 가전(consumer electronic: CE) 디바이스를 사용하는 다양한 아키텍처는 여기에 설명된 기술 및/또는 배열을 구현할 수 있다. 또한, 이하의 설명은 로직 구현, 시스템 구성요소의 유형 및 상호 관계, 로직 파티셔닝/통합 선택 등과 같은 다수의 특정 세부사항을 제시할 수 있지만, 청구된 내용은 그러한 특정 세부사항 없이 실시될 수 있다. 다른 예에서, 예를 들어 제어 구조 및 완전한 소프트웨어 명령어 시퀀스와 같은 일부 소재는 본 명세서에 개시된 소재를 모호하게 하지 않기 위해 상세히 도시되지 않을 수도 있다.
본 명세서에 개시된 소재는 여기에서 특정되지 않는 한 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 여기에 개시된 소재는 또한 하나 이상의 프로세서에 의해 판독되고 실행될 수 있는 머신 판독가능한 매체 상에 저장된 명령으로서 구현될 수 있다. 머신 판독가능 매체는 머신(예컨대, 컴퓨팅 디바이스)에 의해 판독가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 매체 및/또는 메커니즘을 포함할 수 있다. 예를 들어, 머신 판독가능 매체는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 디바이스 및 기타의 것을 포함할 수 있다. 다른 형태로, 비일시적 컴퓨터 판독가능 매체와 같은 비일시적 제품은 일시적 신호 그 자체를 포함하지 않는다는 것을 제외하고는 위에서 언급된 예 또는 다른 예 중에서 임의의 것과 함께 사용될 수 있다. 이것은 RAM 등과 같이 "일시적" 형태로 데이터를 임시적으로 보유할 수 있는 신호 그 자체가 아닌 요소를 포함한다.
명세서에서 "일 구현", "구현", "예시적 구현" 등에 대한 언급은, 설명된 구현이 특정 특징, 구조 또는 특성을 포함할 수 있지만 반드시 모든 구현이 특정 특징, 구조 또는 특성을 포함하는 것은 아님을 나타낸다. 또한, 이러한 문구가 반드시 동일 구현을 언급하는 것은 아니다. 또한, 특정 특징, 구조 또는 특성이 구현과 관련하여 설명될 때, 다른 구현과 관련하여 그러한 특징, 구조 또는 특성을 달성하는 것은 여기에서 명시적으로 설명되든 아니든 당업자의 지식 범위 내에 있는 것이라 생각된다.
비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정과 관련된 시스템, 제품 및 방법이 아래에서 설명된다.
전술한 바와 같이, VP9와 같은 현재의 비디오 코딩 표준은, 메모리 트랜잭션의 양, 모션 추정 동안 저장될 필요가 있는 데이터의 양을 감소시키고, 모션 추정 또는 적어도 이웃 블록 결정이 하드웨어 상의 감소된 로직 및 감소된 게이트 수에 의해 수행될 수 있도록 동작의 양을 감소시켜 그러한 동작이 온-칩에서 수행될 수 있도록 함으로써 속도 및 효율성이 증가되도록 모션 추정을 개선함으로써 개선될 수 있다.
특히, 인코더에서의 인터-예측 동안, 모션 추정은 현재 프레임의 일부에서 인코딩되고 있는 블록 또는 서브 블록과 같은 프레임의 영역과 참조 프레임 내의 유사한 블록 사이에서 최상의 매치(best match)를 찾기 위해 적용된다. 모션 벡터(MV)는 인코딩되고 있는 블록(현재 블록)과 검사되고 있는 참조 프레임의 블록의 공간 좌표의 차이이다. 이 프로세스를 통해, 전체 프레임의 픽셀 데이터를 인코딩하는 것 대신, 모션 벡터 및 방금 언급된 블록들 사이의 작은 차이가 인코딩된다. 모션 추정은, 매칭 프로세스의 비용을 최소화하기 위해 최근접 또는 최상의 매치(또는, 가장 흡족한 매치)를 찾고, 고품질 화상 압축을 제공하기 위한 예측 정확성과 압축 비디오의 스트리밍 또는 전송 속도의 지연 및 래그(lag)의 감소 사이에서 올바른 균형을 유지하는 방식으로 적용된다. 비용은 일반적으로 현재 블록과 참조 블록 간의 불일치의 정도(measure)와 모션 벡터를 인코딩하는 데 사용되는 비트의 양의 조합으로서 계산된다.
VP9에 대해, 이웃 블록으로부터 미리 결정된 모션 벡터의 체크리스트가 설정된다. 이것은 예측되고 있는 현재 블록과 동일한 프레임 상에 있는 최대 9개의 공간 또는 이웃 블록을 포함한다. 하나의 시간 블록이 또한 사용되며, 이는 이전 블록으로부터의 그러나 현재 블록과 동일한 위치의 모션 벡터를 갖는다. 이들 블록의 모션 벡터는 모션 보상을 위해 제공되는 후보 모션 벡터의 예측 리스트를 형성하기 위해 두 개의 후보 모션 벡터를 (개별적으로 또는 중간값과 같은 어떤 결합된 형태로) 형성하도록 선택된다. 또한 VP9는 프레임을 64 x 64 수퍼블록에서 4분 트리식으로 획득된(quad-tree obtained) 4 x 4 블록까지 다양한 크기의 블록으로 파티셔닝한다. 각각의 블록 크기는 자신의 이웃 블록 위치가 개별적으로 결정되도록 하기 때문에 공간 이웃의 선택은 복잡하다. 여러 블록 크기에 적용할 수 있는 일반 공식은 존재하지 않는다.
도 1, 도 1a 및 도 2a 내지 도 2m를 참조하면, 대신에, VP9는 테이블의 각 행이 상이한 크기의 블록에 대응하도록 제공되는 테이블(100)과 같은 종래의 미리 결정된 룩업 테이블을 제공하고, 그 표시된 블록 크기에 사용되어야 할 이웃 블록의 고정된 좌표를 나열한다. 모든 좌표는 8 x 8 블록의 수에 기초한다. 공간 이웃 위치는 현재 블록 크기를 기준으로 사용하여 룩업 테이블(100)을 탐색함으로써 개별적으로 검색된다. 이 테이블은 도 2a 내지 도 2m 상에 대응하는 블록 크기 및 대응하는 파티션 또는 블록 배열(202 내지 226)을 나타내도록 주석 처리되었다. 또한, 테이블 상의 좌표는 파티션 예(102)(도 1a)에 도시된 바와 같이 제공되는데, 여기서 (현재 블록의 크기가 8 x 8 보다 더 크든지, 작든지, 8 x 8 블록 내에 꼭 맞든지에 상관없이) 현재 블록의 좌측 상부의 8 x 8 픽셀 코너 블록은 위치 (0, 0)으로 간주되며, (0, 0) 블록 위치로부터 상측 및 좌측 방향은 음수이고 하측 및 우측 방향은 양수이다. 명확성을 위해 행과 열에는 번호가 매겨져 있다. 이하에 설명되는 개시된 방법 및 시스템은 또한 이 번호 매김 방식을 유지한다.
예를 들어, 테이블(100)의 상단 행에 나열된 (그리고 배열(202)(도 2a)에 대응하는) 4 × 4 블록은, 그 행에 도시된 각각의 좌표에서 블록 배열(202) 상에 위치되는 8개의 이웃 블록을 갖는다. 이 테이블은 예를 들어 온-칩 판독 전용 메모리(ROM)에 저장된 고정된 이웃 블록 패턴을 제공하기 때문에, 이웃 블록 패턴은 쉽게 수정될 수 없다. 테이블의 이웃 블록 좌표를 변경하려면 전문 제조업체 장비 또는 액세스 프로그램에 의해 하드웨어가 수정되거나 교체되어야 한다. 이는 하드웨어가 새로운 이웃 블록 패턴에 재사용될 수 있는 방법을 크게 제한한다.
종래의 블록 배열(202 내지 226)에 대해, 예측될 현재 블록은 자신의 크기 (blk a × b) 및 약간 다른 옅은 셰이딩에 의해 참조된다. 더 어둡게 셰이딩된 숫자는, 각 블록 크기에 대해 룩업 테이블(100)의 각 행에서 좌측에서 우측으로의 블록 좌표에 대응하는 이웃 블록 위치 0 내지 7을 나타낸다. 따라서, 각 블록 크기는 8개의 공간 이웃 블록을 갖는다.
도 2a 내지 도 2c를 참조하면, 블록 배열(202, 204 및 206)은, 8 x 8 블록의 서브 블록이며 각각 4 x 4, 4 x 8 및 8 x 4 크기인 현재 블록을 갖는다. 이들 서브 블록의 각각은, 블록 배열(202, 204 및 206)에 의해 도시된 바와 같이, 현재 서브 블록이 속하는 8 x 8 블록에 인접한 상단 및 좌측 이웃 8 x 8 블록으로부터의 서브 블록 0 및 1로부터의 4 × 4 블록 모션 벡터를 사용한다. 이들 서브 블록은 또한 후보 모션 벡터(이하에서 설명됨)로서 사용될 모션 벡터를 보유하는 모션 벡터 예측자 리스트를 구성하기 위해 사용될 수 있으며, 다른 모든 블록 크기에 대해서는 8 × 8 이웃 블록의 모션 벡터가 모션 벡터 예측자 리스트를 구성하는 데 사용된다. 이러한 작업을 지원하기 위해, (4 x 4), (4 x 8) 또는 (8 x 4) 현재 서브 블록에 대해 4 x 4 블록 이웃을 제공하는 데 사용될 수 있는 8 x 8 이웃 블록은, 예측될 4 x 4 현재 서브 블록에 인접한 행 및 열에 대한 제 1 행 및 제 1 열 버퍼에 저장된 적어도 2개의 4 x 4 블록 (단위(granularity)) 모션 벡터와 하나의 저장된 8 x 8 (단위) 모션 벡터를 둘 다 가져야 한다. 예를 들어 다른 4 x 4 블록 위치(201)가 4 x 4 현재 블록에 인접한 경우, 8 x 8 블록은 2개의 4 x 4 잠재 이웃 모션 벡터를 가져야 한다. 이러한 구성은 메모리 트랜잭션을 위한 메모리 크기 요건 및 대역폭을 바람직하지 않게 추가하여 인코더 및 디코더 모두에서 보다 많은 지연 및 온-칩의 더 큰 메모리 면적을 초래하며, 서브 블록을 이웃 블록 및 현재 블록으로서 사용하는 복잡성은 모션 벡터를 결정하는 데 사용되는 하드웨어 로직에 대한 복잡성을 추가하는데, 이는 또한 게이트 수(온-칩의 로직 면적), 라인 버퍼 크기 및 메모리 대역폭을 증가시키고, 이들 모두는 모두 금전적 비용을 증가시킨다.
또한, VP9 및 다른 표준은 예측되고 있는 현재 블록 옆으로 3개의 좌측 열 및 3개의 상부 행에 걸쳐 있는 이웃 블록 패턴을 사용한다. 따라서, 본 시스템은 각각의 64 x 64 수퍼블록에 대해 그리고 인코딩 및 디코딩 모두에 대해, 3개의 좌측 열 및 3개 행의 모션 벡터 모두를 8 x 8 블록 모션 벡터(언급한 바와 같이 제 1 열 및 행 버퍼에 4 x 4 MV를 가짐)로서 저장한다. 즉, 현재 블록에 대해 저장된 데이터의 길이는 적어도 수퍼블록의 변(side)만큼 길며, 열과 행 모두에 대해 세 개의 라인 버퍼를 필요로 한다. 이것은 또한, 이러한 대량의 데이터가 각 수퍼블록에 대해 처리되어야 하므로 메모리 대역폭과 게이트 수를 증가시키고, 이 또한 시스템의 비용을 증가시킨다.
이러한 문제점을 해결하기 위해, 현재 개시된 모션 추정 방법 및 시스템은 메모리 용량 및 대역폭 요구를 감소시키면서 인코더와 디코더 모두에서 다양한 상이한 블록 크기 및 이웃 블록 구성과 함께 사용될 수 있는 유연한 하드웨어 동작형 공식을 제공하는 모션 벡터 예측자 도출 방법을 제공한다. 이것은, 블록 크기를 탐색 기준으로 사용하고 각 블록 크기에 대해 고정 이웃 위치를 나열하는 록업 테이블에 대한 요구를 제거한다. 이 공식은 다수의 또는 모든 블록 크기에 대한 공간 이웃 모션 벡터(MV) 위치를 식별하는 데 사용되며, 4 x 4 이웃 블록 모션 벡터의 사용은 제거되었다. 따라서, 이제 단 하나의 8 x 8 모션 벡터 단위만 저장되어 사용될 수 있다. 또한, 본 방법은 온-칩 메모리에 저장될 수 있는 최대 3개의 좌측 열을 가지면서, 메모리 라인 버퍼 용량 요건을 3개의 상부 행에서 단일 오프-칩 라인 버퍼에 저장될 수 있는 하나의 행으로 감소시킨다. 이는 필요한 메모리 용량과 메모리 대역폭의 상당한 감소를 초래하고, 모션 예측자 도출 하드웨어를 구현하는 데 필요한 로직의 양을 감소시킴으로써, 하드웨어의 전체 게이트 수(로직 면적)를 감소시킨다.
이러한 특징은 예측될 현재 블록의 크기에 상관없이 사용될 수 있는 이웃 블록 패턴 공식을 사용함으로써 달성된다. 이웃 블록 패턴 공식은 현재 블록에 대한 이웃 블록의 위치를 결정하기 위해 현재 블록의 폭 및/또는 높이를 사용한다. 몇가지 예를 들자면, 이것은 현재 블록의 코너 근처에 이웃 블록을 배치하거나 현재 블록의 에지를 따라 폭 또는 높이의 중앙 근처에 이웃 블록을 배치하는 수학식을 포함한다. 자세한 내용은 아래에 설명된다.
이제 좀 더 세부적으로 그리고 본 방법을 맥락에 맞게 설명하기 위해 도 3을 참조하면, 예시적 비디오 코딩 시스템(300)은 본 명세서에 설명된 이웃 블록 패턴 공식으로 모션 추정을 수행하는 본 발명의 적어도 몇몇 구현예에 따라 구성된다. 다양한 구현예에서, 비디오 코딩 시스템(300)은 하나 이상의 표준에 따라 비디오 코딩을 수행하고/하거나 비디오 코덱을 구현하도록 구성될 수 있다. 또한, 다양한 형태에서, 비디오 코딩 시스템(300)은 이미지 프로세서, 비디오 프로세서 및/또는 미디어 프로세서의 일부로서 구현될 수 있고, 인터-예측, 인트라-예측, 예측 코딩 및 잔차 예측을 수행한다. 다양한 구현예에서, 시스템(300)은 예를 들어 VP9 또는 다른 VP# 기반 표준 또는 VP# 표준의 요소를 사용하는 표준과 같은 하나 이상의 표준 또는 사양에 따라 비디오 압축 및 압축 해제를 수행하고/하거나 비디오 코덱을 구현할 수 있지만, H.264(MPEG-4), H.265(고효율 비디오 코딩 또는 HEVC), 및 VP 기반 모션 추정과 관련되거나 이와 호환되도록 수정된 다른 표준에도 또한 적용될 수 있다. 시스템(300) 및/또는 다른 시스템, 방식 또는 프로세스가 본 명세서에 설명될 수 있지만, 본 발명은 어떠한 특정 비디오 인코딩 표준이나 사양 또는 그 확장물로 항상 반드시 제한되는 것은 아니다.
본 명세서에서 사용될 때, "코더"라는 용어는 인코더 및/또는 디코더를 지칭할 수 있다. 유사하게, 본 명세서에서 사용될 때, "코딩"이라는 용어는 인코더를 통한 인코딩 및/또는 디코더를 통한 디코딩을 지칭할 수 있다. 코더, 인코더 또는 디코더는 인코더와 디코더 양쪽 모두의 구성요소를 가질 수 있다.
예시적 비디오 코딩 시스템(300)에 있어서, 시스템은 비디오 프레임의 시퀀스와 관련된 데이터 형태의 현재 비디오 정보가 압축을 위해 수신될 수 있는 인코더일 수 있다. 시스템(300)은 각 프레임을 더 작고 더 다루기 쉬운 유닛(이하에 보다 상세하게 설명됨)으로 파티셔닝할 수 있고, 다음에 프레임들을 비교하여 예측을 계산할 수 있다. 원본 블록과 예측 간의 차이 또는 잔차가 결정되면, 결과적인 잔차는 변환 및 양자화되고, 그 다음에 엔트로피 인코딩되고, 비트스트림으로 디코더 또는 스토리지로 전송된다. 이런 동작을 수행하기 위해, 시스템(300)은 (선택적인 화상 재배열기를 갖는) 입력 화상 버퍼(302), 예측 유닛 파티셔너(304), 감산 유닛(306), 잔차 파티셔너(308), 변환 유닛(310), 양자화기(312), 엔트로피 인코더(314), 및 상이한 유닛들을 통신 및/또는 관리하는 레이트 왜곡 최적화기(rate distortion optimizer: RDO) 및/또는 레이트 제어기(316)를 포함한다. 제어기(316)는, 정확한 모션 파티션 크기, 정확한 코딩 파티션 크기, 최상의 예측 참조 유형 선택, 및 최상의 모드 선택의 국소 적응적 선택에 기초한 레이트 왜곡 또는 장면 특성을 포함하는 다수의 인코딩의 양태를 관리할 뿐만 아니라, 비트 레이트 제어가 가능한 경우에는 전체 비트 레이트를 관리한다.
양자화기(312)의 출력은 또한, 동일한 참조 또는 재구성된 블록, 프레임, 또는 디코더에서 생성될 다른 유닛을 생성하기 위해 인코더에 제공된 디코딩 루프(350)에 제공될 수 있다. 따라서, 디코딩 루프(350)는 역양자화 및 역변환 유닛(318 및 320)을 사용하여 프레임을 재구성하고, 잔차 어셈블러(322), 가산기(324) 및 파티션 유닛 어셈블러(326)를 사용하여 각 프레임 내에 사용된 유닛을 재구성한다. 다음에, 디코딩 루프(350)는 재구성된 이미지의 품질을 증가시켜 대응하는 원본 프레임과 더 잘 매칭시키기 위해 필터(328)를 제공한다. 이것은 디블로킹 필터, 샘플 적응형 오프셋(sample adaptive offset: SAO) 필터 및 품질 복원(quality restoration: QR) 필터를 포함할 수 있다. 디코딩 루프(350)는 또한 참조 프레임을 보유하기 위한 디코딩된 화상 버퍼(330)를 가질 수 있다. 인코더(300)는 또한 이하에서 언급되는 바와 같은 후보 모션 벡터를 제공하는 모션 추정 모듈 또는 유닛(332), 후보 모션 벡터를 사용하는 모션 보상 모듈(334), 및 인트라-프레임 예측 모듈(336)을 갖는다. 모션 보상 모듈(334)과 인트라-프레임 예측 모듈(336)은 둘 다, 특정 블록에 대한 최상의 예측 모드를 선택하는 예측 모드 분석기 및 선택기(338)에 예측 결과를 제공할 수 있다. 도 3에 도시된 바와 같이, 예측 블록 형태의 선택기(338)의 예측 출력은 그 다음에 감산 유닛(306)에 제공되어 잔차를 생성하고, 디코딩 루프에서 가산기(324)에 제공되어 역변환으로부터의 잔차에 예측을 추가하여 프레임을 재구성한다.
보다 구체적으로, 픽셀 데이터의 프레임 형태의 비디오 데이터는 입력 화상 버퍼(302)에 제공될 수 있다. 버퍼(302)는 입력 비디오 시퀀스 순서로 프레임을 보유하고, 프레임은 코딩되어야 할 순서로 버퍼로부터 취출(取出)될 수 있다. 예를 들어, 역방향 참조 프레임은 자신을 참조하는 프레임보다 먼저 코딩되지만 그 프레임 다음에 디스플레이된다. 또한, 입력 화상 버퍼는 I-프레임(인트라-코딩됨), P-프레임(인터-코딩되고, 이전의 참조 프레임으로부터 예측됨), 및 복합 프레임(2개의 참조 프레임의 평균인 인터-코딩된 프레임)과 같은 분류를 프레임에 할당할 수 있다. I 프레임에서는 공간 예측이 사용되고, 일 형태에서 이는 오로지 프레임 자체의 데이터로부터 비롯된다. P 프레임에서는, 프레임들 간의 모션을 추정함으로써 (공간보다는) 시간 예측이 수행될 수 있다.
프레임의 파티셔닝에 대해, VP9 유형의 표준이 사용되고 있을 때, 예측 유닛 파티셔너(304)는, 프레임을 인코더에 의해 사용될 수도 있고 사용되지 않을 수도 있는 매우 큰 타일(예컨대, 프레임 당 3개)로 분할할 수 있고, 타일을 인코더에 대한 프레임의 메인 디바이더로서 수퍼블록(64 x 64)으로 분할할 수 있다. 그 쿼드 트리 파생 분할은 수평 및 수직 분할을 포함하여 언급된 바와 같이 사용될 수 있다. 이러한 분할은 32 x 64, 64 x 32, 32 x 32, 32 x 16, 16 x 32, 16 x 16, 8 x 16, 16 x 8, 8 x 8, 8 x 4, 4 x 8 및 4 x 4의 블록 크기를 포함할 수 있다. 8 x 8 블록은 인터-예측 동안 모션 벡터의 기초이다. 그러나 전술한 것은 단지 예시적 분할일 뿐이며, LCU, PU, CU 등과 같은 HEVC 분할을 포함하는 많은 다른 것들이 적용될 수 있음에 유의해야 한다. 본 명세서에서 사용될 때, "블록"이라는 용어 자체가 반드시 어떠한 특정 크기 또는 형태의 블록을 언급하는 것은 아니다.
또한 비디오 코딩 시스템(300)에서, 파티션으로 분할된 현재 비디오 프레임은 모션 추정 유닛 또는 추정기(332)에 제공될 수 있다. 시스템(300)은 이미지의 지정된 유닛에서 현재 프레임을 래스터 또는 다른 스캔 순서로, 또는 현재 블록이 현재 블록의 상측 및 좌측에 있는 블록에 이미 설정된 모션 벡터를 사용할 수 있는 경우에는 평행한 대각선 파형 처리 순서(parallel diagonal wave-type processing order)로 처리할 수 있다. 이를 위해, 이웃 블록 모션 벡터 버퍼(333)는, 분석되고 있는 현재 블록에 대한 이웃 블록일 수 있는 영역 내에 있는 이전에 예측된 블록으로부터의 모션 벡터를 보유하기 위해 제공될 수 있다. 후술되는 바와 같이,이 버퍼(333)의 필요한 용량은 크게 감소되었고, (예컨대 현재 블록의 좌측으로 최대 3개의 열과 같은) 버퍼의 일부는 내부적이거나 온-칩일 수 있고, (예컨대 단일 행 또는 라인 버퍼와 같은) 버퍼의 일부는 외부적이거나 오프-칩일 수 있다. 비디오 코딩 시스템(300)이 인터-예측 모드에서 동작될 때, 모션 추정 유닛(332)은 현재 비디오 프레임 및 참조 비디오 프레임에 응답하여 하나 이상의 모션 벡터를 생성할 수 있다. 본 명세서에서 설명되는 바와 같이 이웃 블록의 모션 벡터를 사용하여 보충되는 블록 기반 탐색 방법은, 현재 프레임의 블록을 참조 프레임 상의 후보 블록과 매칭하여 예측 블록에 대한 인코딩될 모션 벡터를 결정하기 위해 사용될 수 있다 .
VP9와 유사한 일 예에 의해, 그리고 본 명세서에서 배열되는 바와 같이, 예를 들어 ROM에 저장된 이웃 블록 패턴 공식(335)은 펌웨어 또는 고정 기능 하드웨어에 의해 동작되거나 동작되지 않을 수 있고, 아래에서 상세하게 설명되는 바와 같이 프레임 상의 현재 블록에 관련된 공간 이웃 모션 벡터 위치를 계산하기 위해 사용될 수 있다. 최대 9개(또는 다른 수)의 공간 이웃 블록의 이웃 블록 위치가 체크리스트에 나열된다. 체크리스트는 블록 단위로 검토되어 어느 블록이 모션 벡터를 갖는지를 결정한다. 그 다음, 체크리스트 상의 이웃 블록의 모션 벡터는, 예측을 위해 모션 보상기로 전달될 최대 2개의 후보 MV를 보유하는 MV 예측자 리스트에 하나씩 배치될 수 있다. 일반적으로, 예측자 리스트는, 예측자 리스트에 빈 공간이 생길 때, 공식에 의해 제공된 순서로 체크리스트로부터 하나의 시간 MV가 채워지는데, 일 형태에서는, 발견된 최신 공간 MV와 시간 MV를 교대로 사용한다. 대안으로, 2 이상의 참조(예컨대, 3)가 시간 블록에 대해 참조될 수 있다.
언급된 바와 같이, 예측자 리스트는 리스트 상의 제 1 MV인 최근접(nearest) MV 및 리스트 상의 제 2 MV인 근접(near) MV로서 지칭되는 2개의 MV 후보를 포함할 수 있다. 새로운 MV는 최근접 MV와 블록 탐색에서 도출된 델타 MV를 더한 것이다. 또한, 모션 보상기 모듈(334)에서 예측을 위해 MV가 인출되고 있는 타이밍에 따라, 빈 공간은 제로 MV(ZMV)로 채워질 수 있는데, 이는 참조 블록으로부터 현재 블록 MV로의 모션이 없다는 것을 나타내며 MV는 (0, 0)이다.
그 다음, 모션 보상 모듈(334)은 모션 추정 모듈(332)에 의한 예측 리스트로부터 제공된 2개의 후보 모션 벡터 및 참조 비디오 프레임을 사용하여 모션 보상기에 다수의 후보 모션 벡터를 제공함으로써 모드 선택기에 의한 선택을 위한 대안적인 예측을 제공할 수 있다. 많은 옵션이 가능하다.
그 다음, 예측된 블록은 감산기(306)에서 현재 블록으로부터 감산될 수 있고, 결과적인 잔차는 잔차 코딩 파티셔너(308)에 제공된다. 코딩 파티셔너(308)는 잔차를 하나 이상의 블록으로 파티셔닝할 수 있고, VP9에 대한 일 형태로서, 예측 파티션을 예측 (또는 모션) 파티션 크기와 같지 않은 분할 크기일 수 있는 변환 파티션(예를 들어, 32 x 32, 16 x 16, 8 x 8 또는 4 x 4)으로 더 분할할 수 있다. 관련 블록 또는 유닛은, 몇 가지 예를 들자면 가변 블록 크기 이산 코사인 변환(VBS DCT) 및/또는 4 x 4 이산 사인 변환(DST)을 사용하여 계수로 변환된다. 그 다음, 양자화기(312)는 제어기(316)에 의해 설정된 양자화 파라미터(Qp)를 사용함으로써 계수에 대한 손실 재샘플링 또는 양자화를 수행한다. 생성된 양자화된 변환 계수 세트는 엔트로피 코딩 모듈(314)에 의해 재정렬 및 엔트로피 코딩되어 비디오 코딩 시스템(300)에 의해 제공되는 압축 비트스트림(예를 들어, 네트워크 추상 층(Networlr Abstraction Layer: NAL) 비트스트림)의 일부를 생성할 수 있다. 다양한 구현예에서, 비디오 코딩 시스템(300)에 의해 제공된 비트스트림은 각 블록을 디코딩하는 데 사용되는 부가 정보(예컨대, 예측 모드, 양자화 파라미터, 모션 벡터 정보, 파티션 정보, 루프 내 필터링 정보 등)에 추가하여 엔트로피-인코딩된 계수를 포함할 수 있고, 전송 및 저장을 위해 본 명세서에 설명된 다른 시스템 및/또는 디바이스에 제공될 수 있다.
또한, 양자화 모듈(312)의 출력은 디코딩 루프(350)를 위해 역양자화 유닛(318) 및 역변환 모듈(320)에 제공될 수 있다. 역양자화 유닛(318) 및 역변환 모듈(320)은 변환 유닛(310) 및 양자화 모듈(312)에 의해 수행된 연산의 역(inverse)을 구현할 수 있다. 그 다음, 잔차 어셈블러 유닛(322)은 잔차를 재구성할 수 있다. 잔차 어셈블러 유닛(322)의 출력은 가산기(324)에서 예측된 프레임과 결합되어 개략적인 재구성된 블록을 생성할 수 있다. 그 다음, 파티션 유닛 어셈블러(326)는 파티션을 재구성하여 프레임 재구성을 완료한다.
그 다음, 프레임을 필터(328)에 통과시킴으로써 재구성된 프레임의 품질이 개선된다. 필터링된 프레임은 디코딩된 화상 버퍼(330)에 제공되며, 여기에서 프레임은 참조 프레임으로서 이용되어 위에서 설명되고 후술되는 바와 같이 모션 추정 및 보상을 위한 대응하는 예측을 구성할 수 있다. 비디오 코딩 시스템(300)이 인트라-예측 모드에서 동작될 때, 인트라-프레임 예측 모듈(336)은 현재 프레임의 재구성된 픽셀을 사용하여 인트라-예측 방식을 수행할 수 있는데, 이것은 여기에서 더 상세하게 설명되지 않을 것이다.
몇몇 예에서, 비디오 코딩 시스템(300)은 명확성을 위해 도 3에 도시되지 않은 추가 아이템을 포함할 수 있다. 예를 들어, 비디오 코딩 시스템(300)은 프로세서, 무선 주파수형(RF) 송수신기, 스플리터 및/또는 멀티플렉서, 디스플레이 및/또는 안테나를 포함할 수 있다. 또한, 비디오 코딩 시스템(300)은 스피커, 마이크로폰, 가속도계, 메모리, 라우터, 네트워크 인터페이스 로직 등과 같은 추가 아이템을 포함할 수 있다.
도 4를 참조하면, 시스템(400)은 디코더를 가질 수 있거나 디코더일 수 있으며, 비트스트림의 형태로 코딩된 비디오 데이터를 수신할 수 있다. 시스템(400)은 양자화된 잔차 계수뿐만 아니라 모션 벡터, 예측 모드, 파티션, 양자화 파라미터, 필터 정보 등을 추출하기 위해 엔트로피 디코딩 모듈(402)에 의해 비트스트림을 처리할 수 있다. 그 다음, 시스템(400)은 역양자화 모듈(404) 및 역변환 모듈(406)을 사용하여 잔차 픽셀 데이터를 재구성할 수 있다. 그 다음, 시스템(400)은 잔차 코딩 어셈블러(408), 예측된 블록에 잔차를 가산하는 가산기(410), 및 파티션 유닛 어셈블러(412)를 사용할 수 있다. 또한, 시스템(400)은, 비트스트림의 신택스에 표시되고 예측 모드 스위치 또는 선택기(신택스 제어 모듈이라고도 함)(422)를 통해 구현되는 코딩 모드에 따라, 인트라 예측 모듈(420)을 포함하는 제 1 경로와 하나 이상의 필터(414)를 포함하는 제 2 인터-예측 디코딩 경로중 어느 한쪽을 채용하는 디코딩 루프를 사용하여 결과적인 데이터를 디코딩할 수 있다. 제 2 경로는, 참조 프레임으로서의 사용을 위해 재구성되고 필터링된 프레임을 저장하고 추후 시청 또는 다른 애플리케이션 또는 디바이스를 위한 디스플레이 또는 저장을 위해 재구성된 프레임을 전송하는 디코딩된 화상 버퍼(416)를 가질 수 있다. 모션 보상된 예측기(418)는 디코딩된 화상 버퍼(416)로부터의 재구성된 프레임뿐만 아니라 후보 이웃 블록 모션 벡터를 포함하는 모션 벡터 버퍼(417)에 저장된 비트스트림으로부터의 모션 벡터를 사용하여 예측된 블록을 재구성한다.
대안으로, 디코더(400)는 모션 추정 능력을 가질 수 있고, 자체의 모션 추정 유닛(413)을 가질 수도 있다. 이 경우, 모션 추정 유닛(413)은 (3행 및 1열과 같은) 이웃 블록으로 사용될 수 있는 영역 내의 잠재적 이웃 블록의 모션 벡터를 저장하는 이웃 블록 모션 벡터 버퍼(415)를 가질 수 있으며, 인코더에 대해 위에서 언급한 바와 같이 일부는 온-칩으로 및 일부는 외부 메모리에 가질 수 있다. 또한, 인코더에 대해 언급된 바와 같이, 디코더에서의 모션 추정기(413)는 인코더에서와 마찬가지로 ROM에 저장된 이웃 블록 패턴 공식(419)을 갖거나 그에 대한 액세스를 갖는다. 이 경우, 디코더는 또한 현재 블록에 대한 이웃 블록 위치를 결정하고, 위치 결정된 블록을 체크리스트 상에 나열하고, 체크리스트 상의 어느 블록이 모션 벡터를 갖는지를 결정하고, 발견된 모션 벡터 중 2개를 후보 모션 벡터의 예측 리스트 상에 배치한다. 그 다음, 모션 보상된 예측기(418)는 후보 모션 벡터를 사용하여 예측 결과를 형성한다.
예측 모드 선택기(422)는 예측 결과를 사용하여 각 블록에 대한 정확한 모드를 설정한다. 이하에서 상세히 설명되는 모션 추정 유닛(332 및 413)을 제외하고 시스템(300 및 400)에 대해 본 명세서에서 설명된 모듈의 기능은 당해 기술분야에서 잘 인식되고 있으며 여기에서는 더 상세히 설명되지 않을 것이다.
이제, 도 5를 참조하면, 예시적 프로세스(500)는 본 발명의 적어도 몇몇 구현예에 따라 배열된다. 일반적으로, 프로세스(500)는 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 컴퓨터 구현된 모션 추정 방법을 제공할 수 있다. 도시된 구현예에서, 프로세스(500)는 짝수로 번호 매겨진 동작들(502 내지 508) 중 하나 이상에 의해 도시되는 하나 이상의 동작, 기능 또는 액션을 포함할 수 있다. 비제한적 예로서, 프로세스(500)는 도 3 및 도 4에 대해 위에서 설명된 동작을 참조하여 여기에서 설명될 것이고, 예시적 시스템(300, 400 또는 이하에서 설명되는 1200)과 관련하여 설명될 것이다.
프로세스(500)는, 특히, 인코딩될 현재 프레임의 데이터뿐만 아니라 버퍼(330)로부터 재구성되고 필터링된 참조 프레임을 수신하는 인코더 상의 디코딩 루프 내의 모션 추정 유닛에서, "다수의 픽셀 데이터 프레임을 수신"(502)하는 것을 포함할 수 있다. 이것은 또한 각 프레임의 파티션이나 블록을 정의하는 데이터를 포함한다.
프로세스(500)는 또한 "현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정"(504)하는 것을 포함할 수 있다. 따라서, 인터-예측 동안, 모션 추정은 블록 매칭 기술에 의해 현재 프레임 상의 현재 블록과 참조 프레임 상의 매칭되는 참조 블록 사이에서 연장되는 모션 벡터를 결정하는 것을 수반한다. 과도한 연산 부하 및 시간 소비로 인해 블록 매칭의 양을 줄이기 위해, 이전에 분석된 블록으로부터의 모션 벡터가 현재 블록의 모션 벡터를 결정하는 데 사용될 수 있다. 일 형태로써, 이는 현재 블록에 대한 이웃 블록으로부터 모션 벡터의 그룹을 결정하는 것을 포함할 수 있다. 이들 이웃 모션 벡터 중 어느 하나라도 현재 블록의 예측 리스트 상에 배치되면, 그 모션 벡터는 본 명세서에서 이미 설명된 바와 같이 현재 블록에 대한 예측을 결정하기 위해 모션 보상 모듈에 제공될 수 있는 후보 모션 벡터가 된다.
그 다음, 프로세스(500)는 "현재 프레임 상의 현재 블록의 위치에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되 현재 블록의 크기에 관계없이 실질적으로 동일한 이웃 블록 패턴 공식을 사용하여, 현재 블록과 동일한 프레임 상의 공간 이웃 블록 위치를 결정"(506)하는 것을 포함할 수 있다. 따라서, 현재 블록 크기를 탐색 기준으로서 사용하고 각각의 현재 블록 크기에 대한 고정 좌표 값을 나열하는 룩업 테이블 대신에, 이웃 블록에 대한 하나 이상의 좌표를 계산하는 수학식을 갖는 이웃 블록 패턴 공식이 제공되는데, 공식 내에는 좌표를 계산하는 적어도 하나의 수학식이 존재한다. 아래에 설명되는 일 예시적 형태에 의해, 공식은 이웃 블록 0 내지 8에 대한 좌표를 제공하는데, 여기서 7개의 이웃 블록은 수학식에 의해 계산되는 하나의 좌표를 갖는다. 일 예에 의해, 계산된 좌표는 현재 블록 내의 8 x 8 블록의 수로 카운팅된 현재 블록의 폭 또는 높이에 기초한다. 또 다른 형태에 의해, 수학식은 이웃 블록을 현재 블록의 코너 또는 에지, 또는 현재 블록의 변(side)의 중앙과 정렬시킨다. 이것은 공식을 동작시키는 고정 기능 하드웨어 또는 펌웨어의 유연성을 상당히 증가시킨다. 다른 예도 가능하며 자세한 내용은 아래에 제공된다.
프로세스(500)는 또한 "적어도 하나의 이웃 블록 좌표를 사용하여 결정된 위치에 있는 이웃 블록의 모션 벡터를 사용하여 현재 블록의 적어도 하나의 모션 벡터를 결정"(508)하는 것을 포함할 수 있다. VP# 유형의 코딩 표준에 대해 설명된 바와 같이, 일단 이웃 블록의 좌표가 결정되면, 그 이웃 블록 위치는 체크리스트 상에 배치될 수 있다. 체크리스트 상의 블록 위치는 그 이웃 블록의 모션 벡터를 갖는 블록이 RAM 또는 캐시와 같은 메모리로부터 발견되어 획득될 때까지 하나씩 검토된다. 그 다음, 이웃 블록 모션 벡터는 예측 리스트 상에 빈 공간이 생길 때 획득된 순서대로 예측 리스트 상에 배치될 수 있으며, 예측 리스트는 예를 들어 현재 블록에 대해 최근접, 근접, 신규, 및/또는 ZMV 모션 벡터를 포함할 수 있는 2개의 후보 모션 벡터를 보유한다. 이들 2개의 후보 모션 벡터는 현재 블록의 예측 데이터를 결정하기 위해 모션 보상 유닛에 제공될 수 있다. 상이한 비디오 코딩 표준이 또한 사용될 수 있다는 것이 이해될 것이다. 또한 언급한 바와 같이, 일단 예측이 결정되면, 그것은 모드 선택기에 제공되고, 선택되면, 그것은 실제 블록에서 감산되고 잔차는 모션 벡터와 함께 코딩되어 디코더에 전송된다. 그 후, 디코더는, 이웃 블록을 발견하고 그 이웃 모션 벡터를 예측 리스트에 제공하는 모션 추정기를 사용하여 프레임을 재구성하거나, 그 대신 후보 모션 벡터 및 잔차를 전송하고 사용함으로써 프레임을 재구성할 수 있으며, 이어서 프레임은 디스플레이되거나 저장될 수 있다. 따라서, 이웃 모션 벡터 패턴 공식은 프레임을 인코딩 또는 디코딩하거나, 인코딩 및 디코딩하고, 다음에 프레임을 디스플레이하기 위해 사용될 수 있다고 할 수 있다.
본 명세서에서 설명된 다른 특징들 중 일부는 8 × 8보다 작은 서브 블록에 대해서 조차도 8 × 8 블록 기반 모션 벡터를 사용하는 것과, 현재 블록의 좌측으로 최대 3개의 열 및 하나의 라인 버퍼에 대한 하나의 상단 행의 제한된 이웃 블록 영역을 이웃 블록의 위치 탐색을 위해 사용하는 것을 포함하는데, 3개 열은 온-칩 메모리에 배치될 수 있고 하나의 라인 버퍼는 외부 메모리(여기서 외부는 SoC와 같은 칩 또는 다이에 관련됨)에 배치될 수 있다.
이제 도 6을 참조하면, 공식(335 및 419)과 같은 하나의 예시적 이웃 블록 패턴 공식(600)은, 이웃 블록(0 내지 8)에 대한 좌표를 결정하되, 각 이웃 블록에 대해 수평 및 수직 좌표를 결정하기 위한 수학식 또는 좌표를 나열한다. 좌표계는 시스템(102)(도 1a)에서 설명된 바와 같은데, 현재 블록 상의 좌측 상부의 8 x 8 블록은 좌표계의 (0, 0) 점이다. 공식(600)은 의사 코드 형태(pseudo code form)로 도시된다. 각각의 이웃 블록(0 내지 8)의 위치는 각 블록 또는 파티션 배열(702 내지 726)(도 7a 내지 도 7m) 상에 도시된다.
예시적 공식(600)은 먼저, 현재 블록의 한 변을 따른 8 × 8 블록의 수인 현재 블록의 폭(num_8 x 8_blocks_wide) 또는 변 상의 픽셀의 수(bw)를 8로 나눈 것(여기에서 비트 시프트 >> 3으로 도시됨)을 포함하는 수학식에 사용될 두 개의 상수를 포함한다. 다른 상수는 현재 블록의 높이(num_8 x 8_blocks_high)를 설정하기 위해 높이 또는 y 방향을 사용하는 것을 제외하고는 유사하다. 다음으로, 공식(600)상의 라인은 각 이웃 블록(0 내지 8)에 대해 x 및 y 방향으로의 좌표를 결정하도록 제공될 수 있다. 현재 블록의 변이 4 x 4, 4 x 8 또는 8 x 4 서브 블록과 같이 하나의 블록보다 작은 경우, 짧은 변인 폭 및/또는 높이는 1로 설정된다.
이웃 블록 0부터 시작하면, 높이 좌표(또는 행 넘버)는 현재 블록 높이 - 1이고 폭 좌표(또는 열 넘버)는 -1이다. 이것은 현재 블록의 좌측 에지를 따라 현재 블록의 좌측 하단 코너 옆에 현재 블록의 하단 에지와 정렬되는 0 이웃 블록을 배치하고(배열(726)(도 7m)에서 블록 0에 가장 명료하게 도시됨), "좌측" 위치로 언급된다.
이웃 블록 1에 대해, 행 좌표는 -1이고 열 좌표는 (현재 블록 폭 - 1)인 수학식인데, 이것은 현재 블록의 상단 에지를 따라 현재 블록의 우측 상단 코너 옆에 현재 블록의 우측 에지와 정렬되는 1 이웃 블록을 배치한다(배열(726)(도 7m)의 블록 1 참조). 이 위치는 "상단" 위치로 언급된다.
이웃 블록 2에 대해, 행 좌표는 -1이고 열 좌표는 (현재 블록 폭 - 1) 나누기 2(비트 시프트 >> 1로 도시됨)인 수학식인데, 이것은 현재 블록의 상단 에지를 따라 현재 블록의 폭의 중앙에 2 이웃 블록을 배치한다(배열(726)(도 7m)의 블록 2 참조). 이 위치는 "상단 중앙" 위치로 언급된다.
이웃 블록 3에 대해, 행 좌표는 높이를 제외하고 블록 2와 비슷한 (현재 블록 높이 - 1) 나누기 2인 수학식이며 열 좌표는 -1이다. 이것은 현재 블록의 좌측 에지를 따라 현재 블록의 좌측 변의 중앙에 3 이웃 블록을 배치한다(배열(726)(도 7m)의 블록 3 참조). 이 위치는 "좌측 중앙" 위치로 언급된다.
이웃 블록 4에 대해, 좌표는 현재 블록 내의 (0, 0) 블록의 좌측 상부 코너에 대각선으로 접촉하는 (-1, -1)이며, 좌측 상단 위치로 언급된다(배열(726)(도 7m)의 블록 4 참조).
이웃 블록 5에 대해, 행 좌표는 -1이고 열 좌표는 현재 블록 폭(num_8 x 8_blocks_wide)과 같다. 이것은 현재 블록의 상단 에지를 따라 현재 블록의 우측 상부 코너에 대각선으로 5 이웃 블록을 배치한다. 이것은 현재 블록을 보유하는 열(들)의 바깥쪽에 있기 때문에 외부 위치로 간주되며, "우측 상단" 위치로 언급된다(배열(726)(도 7m)의 블록 5 참조).
이웃 블록 6에 대해, 열 좌표는 -1이고 행 좌표는 현재 블록 높이(num_8 x 8_blocks_high)와 같다. 이것은 현재 블록의 좌측 에지를 따라 현재 블록의 좌측 하단 코너에 대각선으로 6 이웃 블록을 배치한다. 이것 역시 현재 블록을 보유하는 행(들)의 바깥쪽에 있기 때문에 외부 위치로 간주되며, "좌측 하단" 위치로 언급된다(배열(726)(도 7m)의 블록 6 참조).
이웃 블록 7에 대해, 행 좌표는 -1이고, 열 좌표는 -3이다. 이것은 제 3 이웃 열의 좌측 상단(또는 먼 좌측 상단(far left-top)) 위치로 언급된다(배열(726)(도 7m)의 블록 7 참조).
이웃 블록 8에 대해, 행 좌표는 (num_8 x 8_blocks_high - 1)이며, 열 좌표는 -3이다. 이 위치는 제 3 이웃 열 내의 좌측(또는 먼 좌측(far left))으로 언급된다(배열 726(도 7m)의 블록 8 참조).
공식의 이웃 블록들의 순서는 일단 모션 벡터가 획득되면 공간 이웃 체크리스트로서 유지되고, (이웃 모션 벡터가 아래에 설명되는 바와 같이 결합되지 않는다면) 선입 선출(FIFO)인 순서대로 예측 리스트에 제공된다. 체크리스트로부터 예측 리스트에 배치될 MV를 선택하기 위한 선택 순서는 인코더와 디코더 모두에 의해 사용된다. 예측 리스트를 위한 체크리스트로부터의 MV의 선택은 알려진 기준을 사용하여 수행되며, 프로세스(1000)와 함께 아래에서 보다 상세히 설명된다.
따라서, 공식에서의 이웃 블록 위치의 순서는 이웃 블록과 그 MV가 FIFO 순서로 선택되기 때문에 가장 중요한 것이 먼저 오고 가장 덜 중요한 것이 마지막에 오도록 설정된다. 공식 내의 이웃 블록 위치 0 내지 8의 순서는 다른 순서가 요구될 때 변경될 수도 있음이 이해될 것이다.
또한, 공식(600)은 단지 하나의 예일 뿐이며, 공식(600)에 나열된 이웃 블록 위치 중 임의의 것을 추가 또는 제거하거나 다른 위치를 사용하는 것을 포함하여 이 예와 상이한 많은 예가 사용될 수 있다. 하나의 대안적인 예로서, 이웃 블록 0 내지 7만이 사용된다. 다른 예로서, 먼 좌측 위치 7 및 8은 제거되고 좌측/2(또는 L/2) 및 상측/2(또는 T/2)으로 언급되는 더 많은 중앙 위치가 추가되는데, 여기서 8 x 8의 현재 블록에 대해, 배열(726)에 도시된 바와 같이, L/2 = 8/2 = 행 4 및 T/2 = 8/2 = 열 4이다. 많은 다른 변형이 가능하다.
도 7a 내지 도 7m에 도시된 바와 같이, 이웃 블록 배열 또는 패턴은 일 예로서 VP9와 유사한 표준에서 각각의 사용 가능한 블록 크기에 대해 제공되고, 공식(600)을 사용하여 각 배열(702 내지 726) 상에 번호 매겨진 이웃 블록을 배치하는데, 배열에 대한 현재 블록 및 그 크기는 blkaxb(예컨대, blk4x4)로 지정된다. 이웃 블록 위치가 누락되어 있는 경우, 더 나중의 이웃 블록은 이미 배열 상에 있는 더 이전의 다른 이웃 블록과 중복되므로 제거된다. 예를 들어, 배열(712)(도 7f)을 참조하면, 이웃 블록 3이 누락되어 있는데, 이것은 현재 블록이 16 x 8 이므로 현재 블록 높이는 1이고 이는 그 행 위치가 행 0(공식에 따라 (1-1)/2 = 0)임을 의미하므로 이 이웃 블록의 좌표가 (0, -1)이기 때문이다. 이웃 블록 0이 이미 좌표 (0, -1)을 가지므로 이웃 블록 3은 사용되지 않으며 계산되더라도 폐기된다.
또한, 배열(702 내지 726) 모두는 현재 블록 상측으로 하나의 행과 현재 블록의 바로 좌측으로 최대 3개 열의 영역 내에서 유지된다는 것을 알 수 있을 것이다. 한 쪽 또는 다른 쪽 제한이 사용될 수도 있지만 여기에서는 양쪽 제한이 모두 사용된다. 패턴 공간의 이러한 감소는 이웃 블록 위치를 결정할 때 패턴 공간에 대해 모든 가능한 공간 이웃이 저장되므로 이웃 블록에 대한 메모리 액세스를 상당히 감소시킨다. 이 패턴은 2개의 완전한 상단 행을 제거한다. 필요한 메모리 용량의 이런 감소는 최대 3개 열이 온-칩 메모리에 배치되는 것을 허용한다. 이것은 온-칩 면적(또는 게이트 수)을 증가시킬 수 있지만, 메모리 대역폭에 크게 부정적인 영향을 미치지는 않는다. 일반적으로 온-칩 메모리를 증가시키는 것이 라인 또는 모션 벡터 버퍼 메모리를 증가시키는 것보다 바람직하다. 그러나, 하나의 상단 행 라인 버퍼는, 예를 들어 8K 비디오용 울트라 HD 클립과 같은 대형 프레임 폭을 수용할 수 있도록 여전히 오프-칩으로 또는 외부 메모리에 저장된다. 버퍼 라인은 현재 블록에 하나의 외부 블록을 더한 것(공식의 위치 5)과 동일한 폭의 블록에 MV를 저장할 수 있다. 그러나, 3개 행에서 1개 행 버퍼로 면적을 감소시키는 것은 메모리 크기와 대역폭 요건을 여전히 크게 감소시킨다. 현재 블록이 여전히 현재 블록의 상측 및 좌측으로 모션 벡터를 갖는 이전에 분석된 블록들을 충분히 갖는 한, 공식은 대신 최대 (1, 2 또는 3)개 열 및 3개 행 영역, 또는 하나의 열 및 3개의 상측 행과 같은 다른 감소된 영역과 같은 다른 대체 이웃 블록 영역과 함께 사용되도록 수정될 수 있다는 것이 이해될 것이다.
도 7a 내지 도 7c를 참조하면, 서브 블록 배열(702 내지 706)은 서브 블록 크기(4 x 4, 8 x 4, 4 x 8)의 현재 블록이 모두 8 x 8인 이웃 블록을 갖는 것을 도시한다. 언급한 바와 같이, 이것은 이전에 저장되어 있던 각각의 8 x 8 블록에 대해 2개의 4 x 4 블록 모션 벡터를 제거함으로써 저장된 데이터의 양을 상당히 감소시킨다.
도 8을 참조하면, 현재 블록(804)에 대해 결정된 이웃 블록 5 위치가 수퍼블록(802)의 열 및 행의 외부에서 (수퍼블록의 상측 또는 좌측이 아니라) 수퍼블록의 우측에 있도록 64 x 64 수퍼블록(802)의 우측 상부 사분면(quadrant)을 형성하는 32 x 32 현재 블록(804)에 대한 블록 배열 또는 패턴(800)이 도시된다. 이 경우, 이웃 블록 5(또는 이 위치)는 이용 불가능하거나 사용할 수 없는 것으로 간주되고, 이 이웃 블록이 체크리스트에 나열되고 도시된 바와 같이 현재 수퍼블록 열을 초과할 때 검사되지 않는다. 이것은 현재 블록의 상측 및 좌측에 이전에 분석된 블록을 지속적으로 제공하기 위해 사용된 경사진(예컨대, 45도) 파면 평행성(angled wave-front parallelism)을 유지하기 위해 수행된다.
도 9a 내지 도 9m을 참조하면, 다른 가능한 대안적 공식이 도시되어 있는데, 여기서 공식 및 그에 따른 체크리스트는, 현재 블록에 모두 인접한 단지 하나의 행 및 하나의 열인 이웃 블록 영역 내에서 유지되는 (공식 600에서 정의된 바와 같은) 이웃 블록 위치 0 내지 6만을 포함한다. 배열(902 내지 926)은 이것이 다양한 블록 크기에 어떻게 적용되는지를 나타내고, 현재 블록은 각각의 배열에서 blkaxb로 지정된다. 이 옵션은 또한 완전한 8 × 8 블록이 서브 블록에 대한 이웃 블록으로서 사용되어(도 9a 내지 도 9c) 8 × 8 블록 기반 모션 벡터가 서브 블록에 대한 체크리스트 상에 배치되는 위에서의 특징을 포함한다. 이러한 구성에 의해, 현재 블록에 대한 이웃 블록 위치 및 모션 벡터를 결정하기 위해 1 행 및 1 열만 저장되면 된다. 이것은 전술한 바와 같이 칩 크기(게이트 수)뿐만 아니라 필요한 메모리 용량 및 대역폭을 상당히 감소시킨다.
도 10a 및 도 10b를 참조하면, 상세한 예시적 모션 추정 프로세스(1000)는 본 발명의 적어도 몇몇 구현예에 따라 구성된다. 일반적으로, 프로세스(1000)는 비디오 코딩을 위해 이웃 블록 패턴 공식을 이용하는 또 다른 컴퓨터 구현된 모션 추정 방법을 제공할 수 있다. 도시된 구현예에서, 프로세스(1000)는 짝수로 번호 매겨진 동작들(1002 내지 1036) 중 하나 이상에 의해 도시된 바와 같은 하나 이상의 동작, 기능 또는 액션을 포함할 수 있다. 비제한적 예로서, 프로세스(1000)는 도 3 내지 도 9m 및 도 12와 관련하여 설명되는 동작을 참조하여 여기에서 설명될 것이고, 예시적 시스템(300, 400, 및/또는 이하에서 설명되는 1200)뿐만 아니라 이웃 블록 패턴 공식(600)을 참조하여 설명될 수 있다.
프로세스(1000)는 "프레임의 이미지 데이터 획득"(1002)하는 것을 포함할 수 있고, 특히, 전술한 바와 같이 재구성된 참조 프레임뿐만 아니라 인코딩될 프레임의 색도 및 휘도 픽셀 데이터를 획득하는 것을 포함할 수 있다. 이것은 또한 각 프레임의 파티션(또는 블록) 위치를 나타내는 데이터를 획득하는 것을 포함할 수 있다. 여기서, 파티션과 블록이라는 용어는 상호 교환가능하게 사용된다.
프로세스(1000)는 "프레임의 좌측 상부 코너, 제 1 행(들) 및 제 1 열(들)에 있는 블록들의 모션 벡터를 결정"(1004)하는 것을 포함할 수 있다. 따라서, 이웃 블록 모션 벡터 사용을 위해 파면 평행 처리(wave-front parallel processing)를 사용하는 시스템의 경우, 프로세스는 적어도 프레임의 좌측 및 상단 에지를 따르는, 새로운 모션 벡터 도출을 위한 블록 탐색으로부터 여전히 시작될 수 있다. 이 프로세스는 종종, 프레임의 좌측 상부 코너에 있는 제 1 블록 상의 ZMV를 사용하여 시작할 수 있고, 그 다음, 인접한 좌측 및 하부 블록에서 새로운 블록 매칭 탐색을 수행하거나 제 1 블록의 ZMV를 사용하거나 또는 두 가지 모두를 수행할 수 있다. 이 프로세스는 이전에 분석된 상부 및 좌측 블록을 사용하여 파면 상의 현재 블록의 모션 벡터 및 다른 데이터를 결정할 수 있는 블록의 평행한 경사 파면을 형성한다. 3개의 좌측 열 및 하나의 상단 행이 처리되어 이웃 블록으로서 이용 가능한 경우와 같이 충분한 양의 블록이 분석되고 모션 벡터가 결정되면, 프로세스는 이웃 블록 모션 벡터 도출로 전환할 수 있다.
프로세스(1000)는 "제 1 파티션을 위한 파티션 p = 0 및 최종 파티션을 위한 MAX P를 설정"(1006)하는 것을 포함할 수 있다. 이 동작은 프로세스에 대한 파티션 또는 블록 카운터를 시작하고 이웃 블록 MV에 대해 분석될 프레임 상의 파티션의 최대 개수를 저장할 수 있다. 다른 대안이 가능하다.
프로세스(1000)는 "파티션 p에 대해 최대 3개의 좌측 열 및 하나의 상측 행을 전체적으로 또는 부분적으로 버퍼링"(1008)하는 것를 포함할 수 있으며, 특히 파티션의 이용 가능한 또는 허용 가능한 이웃 블록 패턴 영역을, 이웃 블록의 MV를 검색하기 위해 액세스 가능한 메모리 내 위치에 배치할 수 있다. 전술한 바와 같이, 이 영역은 분석될 현재 블록(또는 파티션)에 인접한 3개의 좌측 열 및 하나의 상단 행을 포함할 수 있다. 필요한 메모리 용량 및 대역폭을 감소시키기 위해 이 영역은 감소되므로, 단일 상단 행에 대한 단일 라인 버퍼는 여전히 외부 메모리에 배치되지만, 최대 3개의 좌측 열에 대한 버퍼가 온-칩에 배치될 수 있다. 이것은 또한 전술한 바와 같이 메모리 하드웨어 면적을 감소시킬 수 있다. 또 다른 대안에 따르면, 현재 블록에 인접한 하나의 행 및 하나의 열만이 영역으로서 사용되지만, 다른 대안들도 존재할 수 있다.
프로세스(1000)는 "현재 블록 크기에 관계없이 이웃 블록 패턴 공식을 사용하여 파티션 p에 대한 이웃 블록 위치를 결정"(1010)하는 것을 포함할 수 있다. 특히, 일 예에 의해 공식(600)과 같은 이웃 블록 패턴 공식이 제공될 수 있고, 이것은 공식에 나열된 각각의 이웃 블록 위치에 대한 좌표 또는 좌표를 계산하기 위한 수학식을 나열한다. 공식은 특정 순서로 이웃 위치를 나열할 수 있고, 이는 체크리스트에 제공되어, 예측 리스트 상의 배치를 위해 그 순서로 검사된다. 적어도 하나의 이웃 블록 위치의 적어도 하나의 좌표가 공식의 수학식을 사용하여 계산되고 수학식이 여러 파티션(또는 현재 블록) 크기에 적용되는 한, 공식은 공식(600)에서와 동일한 이웃 블록 위치 리스트, 또는 완전한 상이한 위치를 갖는 것, 또는 이들의 임의의 조합을 포함할 수 있다. 예시적 공식(600)은 7개의 좌표에 대해 수학식을 사용한다.
따라서, 이 동작(1010)은 "p 내의 8 x 8 블록의 수에 기초하여 파티션 폭(num_8 x 8_blocks_wide) 및 파티션 높이(num_8 x 8_blocks_high)를 설정"(1012)하는 것을 포함할 수 있다. 일 예에 의해, 좌표를 계산하기 위한 공식 내의 수학식은 파티션의 폭 또는 높이에 기초하지만, 이것은 어떤 다른 치수(예컨대, 면적)일 수도 있다. 폭과 높이는 8 x 8 블록의 수(또는 픽셀의 수를 8로 나눈 것)로 측정된다. 이 동작은 또한 "폭 및/또는 높이인 bw 또는 bh < 8을 1로 설정"(1014)하는 것을 포함할 수 있는데, 이는 8 픽셀보다 작은 서브 블록(4 x 4, 4 x 8, 또는 8 x 4)의 각각의 변에 대해 1의 폭 및 높이를 사용하는 것을 지칭한다. 이는 완전한 8 × 8 블록 위치가 서브 블록에 대한 이웃 블록으로서 사용될 수 있게 하여, 8 x 8 블록 기반 MV만이 메모리에 저장되면 되도록 하므로, 전술한 바와 같이 이웃 블록 MV를 결정하는 데 필요한 메모리 및 하드웨어의 양을 상당히 감소시킨다.
프로세스(1000)는 "파티션 폭 및/또는 파티션 높이를 사용하여 이웃 블록 좌표를 계산"(1016)하는 것을 포함할 수 있다. 또한, 공식(600)을 사용하여 전술한 바와 같이, 폭 및 높이는 수학식에서 이웃 블록을 파티션(현재 블록)의 한 코너 옆에 배치하기 위해 사용될 수 있고, 이는 다음과 같은 수학식 즉, 예를 들어 공식(600)에서 이웃 블록 0 또는 1에 대한 것인
((폭 또는 높이) - 1) (1)
또는 파티션의 좌측 에지 또는 상단 에지를 따라 중앙에서 예를 들어 공식(600)에서 이웃 블록 2 또는 3에 대한 것인
((폭 또는 높이) - 1)/2 (2)
또는 폭 또는 높이 자체의 값인 파티션(현재 블록)의 열 및 행 외부의 위치(공식(600)에서 이웃 블록 5 또는 6)를 제공한다. 그러나, 현재 블록의 폭 또는 높이를 사용하거나 다른 치수를 사용하여 다른 많은 위치가 또한 결정될 수 있음이 이해될 것이다.
프로세스(1000)는 "중복 위치를 제거"(1018)하는 것을 포함할 수 있고, 더 작은 현재 블록에 대해 언급된 바와 같이, 공식으로부터 결정된 이웃 블록 위치들 중 2개는 프레임 상에서 동일한 위치일 수 있다. 일 형태에 의해, 더 나중의 이웃 블록은 체크리스트에서 삭제되거나 무시된다.
선택적으로, 프로세스(1000)는 "파면 평행 허용 가능 위치의 외부에 있는 위치를 제거"(1020)하는 것을 포함할 수 있고, 배열(800)에서 설명된 바와 같이 현재 파티션의 수퍼블록의 외부에 있는 블록은 이용 불가능한 것으로 표시되고 체크리스트로부터 삭제될 수 있으므로 평행한 경사 파면에 대한 계산은 일관되게 유지되고 예를 들어 부정확성을 야기할 가능성이 큰 블록을 포함하지 않게 된다.
프로세스(1000)는 "체크리스트 상에 이웃 블록 위치를 배치"(1022)하는 것을 포함할 수 있고, 따라서 공식을 사용하여 8 × 8 이웃 블록 위치 중 하나가 설정되면, 그 8 × 8 위치는 체크리스트에 추가된다. 그 후, 체크리스트는, 어느 이웃 블록 위치가 모션 벡터를 가지고 따라서 예측 리스트 상에 배치될 수 있는지를 결정하기 위해 검사된다. 따라서, 프로세스(1000)는 "체크리스트 상의 어떤 이웃 블록 위치가 모션 벡터를 갖는지를 결정"(1024)하는 것을 포함할 수 있다. 이는 예를 들어 스킵 위치였거나 아니면 인트라 코딩된 것과 같이, 어떤 경우에는 위치들 중 일부가 모션 벡터를 갖지 않을 수 있음을 인식한 것이다. 어떤 이웃 블록 위치가 이용 가능한지(모션 벡터를 갖는지) 결정되면, 프로세스는 모션 벡터들 중 2개를 예측 리스트 상에 배치한다. 이웃 블록 위치는 공식에서 설정된 순서대로 검사되고 FIFO 방식으로 검사된다. 위치가 모션 벡터를 가지지 않으면, 그 위치는 버려지고 다음 위치가 분석된다.
개별 이웃 블록 모션 벡터에 추가하여, 이웃 블록 모션 벡터는 체크리스트에 배치되기 전에 또는 예측 리스트에 위치되기 전에 결합될 수 있음이 이해될 것이다. 따라서, 일 형태에 의해, 파티션은 체크리스트에 배치된 그 이웃 블록들의 중간(median) 모션 벡터를 가질 수 있다. 많은 다른 대안이 가능하다.
프로세스(1000)는 "파티션 p에 대한 예측 리스트 상의 후보 모션 벡터로서 모션 벡터(들)를 선택"(1026)하는 것을 포함할 수 있다. 이 동작에 대해, VP9 표준과 유사하게, 모션 벡터(MV) 예측자 리스트는 2개의 MV를 포함할 수 있고, 일 형태에서는 단지 2개의 MV만을 포함할 수 있다. 2개의 MV는 방금 설명된 이웃 블록으로부터 획득된 9개의 공간 이웃 MV 및 하나의 시간 MV로부터 선택된다. 예측자 리스트는 다음 프로세스에 의해 채워진다.
a. 먼저, (동일한 참조 화상으로부터 연장되는) 9개의 공간 MV의 검사가 하나씩 수행되고, 이용 가능한 MV가 MV 예측자 리스트에 삽입된다. MV 예측자 리스트가 다 채워지면 검사는 중단된다.
b. MV 예측자 리스트가 다 채워지지 않았다면, 동일한 참조 프레임을 사용하여 이전 프레임으로부터 배치된 MV를 검사한다.
c. MV 예측자 리스트가 여전히 다 채워지지 않았다면, (상이한 참조 화상의) 9개의 공간 MV를 하나씩 검사한다.
d. MV 예측자 리스트가 여전히 다 채워지지 않았다면, 상이한 참조를 사용하여 이전 프레임으로부터 배치된 MV를 검사한다.
e. MV 예측자 리스트가 여전히 다 채워지지 않았다면, 빈 공간을 제로(0, 0) MV로 채운다.
VP9 코덱에서, MV 예측자 리스트의 첫 번째 MV는 최근접 MV라고 하고, 예측자 리스트의 두 번째 MV는 근접 MV이다. 새로운 MV는 최근접 MV와 델타 MV를 더한 것과 같은데, 델타 MV는 블록 매칭 탐색으로부터 도출된다.
단일 프레임에 대한 대안적인 파티셔닝이 제공되어 인터-예측을 사용하여 비교될 수 있는 HEVC에서와 같이, 이웃 블록 모션 벡터를 사용하는 다른 표준 및 다른 알고리즘이 여기서 사용될 수 있다는 것이 인식될 것이다. 다른 예시적 알고리즘 및 방법은 또한 다른 비디오 코딩 표준과 함께 사용될 수 있다.
프로세스(1000)는 "모션 보상 및 모드 선택을 위해 후보 모션 벡터를 제공"(1028)하는 것을 포함할 수 있고, 일단 모션 벡터가 예측 리스트 상의 후보 모션 벡터가 되면, 이것은 각각의 모션 벡터에 대한 대안적 예측을 결정하기 위해 모션 보상기에 제공될 수 있다. 그 다음, 각각의 예측은 예측의 잔차를 코딩하기 위한 정확성 및/또는 비용에 기초하여 가장 우수한 예측을 선택하기 위해 모드 선택기에 제공된다. 그 다음, 선택된 예측은 잔차를 생성하기 위해 프레임의 원본 데이터로부터 차감되고, 잔차 및 대응하는 모션 벡터는 코딩되어 디코더에 전송된다. 일 형태에 의해, 모든 후보 모션 벡터 및 그 예측이 디코더로 전송되어, 디코더에 있는 선택기가 또한 후보 모션 벡터 중에서 선택할 수 있도록 한다.
프로세스(1000)는 최종 파티션에 도달했는지 여부를 판정하는 질의 "p = MAX P?"(1030)를 포함할 수 있다. 도달하지 않았다면, 프로세스(1000)는 파티셔너 카운터를 하나 위로 올리는 "p = p + 1을 설정"(1032)하는 것을 포함할 수 있고, 그 다음에 다음 파티션 p를 획득(1034)할 수 있다. 최종 파티션 Max P가 획득되어 분석될 때까지 프로세스는 반복된다. 그 다음, 프로세스(1000)는 "프레임 시퀀스의 끝까지 개별 프레임에 대해 반복"(1036)하는 것을 포함할 수 있다. 마지막 프레임이 분석되면 프로세스는 종료된다.
이제 도 11을 참조하면, 시스템(1200)은 동작 시에 도시된 비디오 코딩을 위해 이웃 블록 패턴 공식을 사용하는 예시적 모션 추정의 프로세스(1100)에 사용될 수 있으며, 본 발명의 적어도 몇몇 구현예에 따라 구성될 수 있다. 도시된 구현예에서, 프로세스(1100)는, 짝수로 번호 매겨지고 대안적으로 또는 임의의 조합으로 사용되는 액션(1102 내지 1132) 중 하나 이상에 의해 예시된 바와 같은 하나 이상의 동작, 기능 또는 액션을 포함할 수 있다. 비제한적 예로서, 프로세스(1100)는 본 명세서에서 설명된 임의의 구현예와 관련하여 논의된 동작을 참조하여 여기에서 설명될 것이다.
도시된 구현예에서, 시스템(1200)은 로직 유닛 또는 로직 회로 또는 모듈(1250) 등, 및/또는 이들의 조합을 갖는 처리 유닛(1220)을 포함할 수 있다. 일 예로서, 로직 회로 또는 모듈(1250)은 모션 추정 유닛(1252)을 갖는 비디오 인코더(300)를 포함하고 모션 추정 유닛(1254)을 갖는 디코더(400)를 선택적으로 포함하여, 이웃 블록 패턴 공식(1208) 및 위에서 언급된 이웃 블록 위치의 결정에 관련된 많은 동작을 수행할 수 있는데, 선택적으로는 이는 비디오 디코더(400)일 수 있다. 시스템(1200)은 도 12에 도시된 바와 같이, 특정 모듈과 연관된 하나의 특정 동작 또는 액션 세트를 포함할 수 있으며, 이들 동작 또는 액션은 본 명세서에서 설명된 특정 모듈이 아닌 상이한 모듈과 연관될 수도 있다.
프로세스(1100)는 "원본 및 재구성된 프레임의 비디오 데이터를 획득"(1102)하는 것을 포함할 수 있는데, 여기에서 시스템, 또는 특히 인코더에서의 모션 추정 유닛은 재구성된 프레임의 픽셀 데이터에 대한 액세스를 획득할 수 있다. 데이터는 시스템(1200 또는 1300) 상에서 설명되는 바와 같이 RAM 또는 ROM, 또는 다른 영구적 또는 일시적 메모리, 메모리 드라이브 또는 라이브러리로부터 획득 또는 판독되거나, 그렇지 않으면 이미지 캡처 디바이스로부터 획득 또는 판독될 수 있다. 액세스는 예를 들어 진행중인 비디오 스트림의 분석을 위한 연속적인 액세스일 수 있다. 그 다음, 프로세스(1100)는, 인코딩될 블록이 모션 추정 탐색 동안 참조 블록에 매칭될 수 있도록, 재구성된 프레임의 "파티션 데이터를 포함하는 현재 프레임 및 참조 프레임 데이터를 획득"(1104)하는 것을 포함할 수 있다.
프로세스(1100)는, 위에서 언급된 바와 같이 이웃 블록 MV로서 사용될 수 있는 모션 벡터의 전부 또는 대부분을 가질 수 있도록, "현재 블록에 대해 최대 3개의 좌측 열 또는 3개의 행과, 하나의 대향(opposite) 행 또는 열을 버퍼링"(1106)하는 것을 포함할 수 있다. 지적한 바와 같이, 온-칩 메모리 상에 열 버퍼를 제공하기 위해 최대 3개의 열이 사용될 수 있다. 또한 언급된 바와 같이, 이것은 하나의 대안적 영역이며, 하나의 행 및 하나의 열을 갖는 배열(902 내지 926)(도 9a 내지 도 9m)에 대해 도시된 것과 같은 다른 것들이 또한 사용될 수 있다.
프로세스(1100)는 "블록 폭 및 높이를 획득"(1108)하는 것을 포함할 수 있는데, 이것 역시 위에서 언급한 바와 같이 현재 블록의 한 변 상의 8 x 8 블록의 수로서 계산된다.
프로세스(1100)은 "현재 블록 크기에 관계없이 동일한 공식을 사용하고 현재 블록 폭, 또는 높이, 또는 둘 모두를 사용함으로써, 이웃 블록의 좌표를 계산하는 이웃 블록 패턴 공식을 사용하여, 현재 블록에 대한 이웃 블록 위치를 결정"(1110)하는 것을 포함할 수 있다. 따라서, 이웃 블록 위치에 대한 좌표를 결정하는 수학식에서 수학식은 현재 블록의 폭 또는 높이를 변수로서 사용한다. 이런 방식으로, 공식은 어떠한 특정 블록 크기로도 제한되지 않고, 일 형태에 의해, 이웃 블록 위치 중 어느 것도 블록 크기에 의해 제한되지 않는다. 자세한 내용은 위에 설명되어 있다.
프로세스(1100)는 "8 픽셀보다 작은 현재 블록의 폭 또는 높이에 대해 서브 블록 폭, 또는 높이, 또는 둘 모두로서 1을 사용함으로써 8 × 8 서브 블록에 대한 이웃 블록을 계산"(1112)하는 것을 포함할 수 있고, 위에서 언급된 것처럼, 서브 블록은 이제 완전한 8 x 8 이웃 블록을 사용하므로 위에서 설명된 것처럼 메모리 및 하드웨어 요건을 감소시키기 위해 더 이상 4 x 4 블록 기반 MV들을 저장할 필요가 없다.
프로세스(1100)는 "현재 블록에 대한 최대 3개의 좌측 열 또는 3개의 행과, 하나의 대향 행 또는 열 상에서 이웃 블록을 선택"(1114)하는 것을 포함할 수 있고, 다시, 이웃 블록의 허용 가능한 영역은 종래의 영역으로부터 감소되어 위에서 설명한 바와 같이 메모리 및 하드웨어 요구를 감소시킨다. 다른 옵션은 하나의 행 및 하나의 열로서 제공되지만 다른 영역 구성이 또한 사용될 수 있다.
프로세스(1100)는 "위치 지정된 이웃 블록의 모션 벡터를 사용하여 모션 보상기에 의해 사용될 후보 모션 벡터를 결정함으로써 현재 블록에 대한 모드 선택기에 예측(들)을 제공"(1116)하는 것을 포함할 수 있다. 위에서 언급된 VP9의 경우, 위에서 이미 설명된 것처럼, 현재 블록에 대한 체크리스트 상의 9개의 모션 벡터와 시간 블록인 하나의 블록 중 2개가 모션 보상기에 제공될 후보 모션 벡터의 예측 리스트 상에 배치되도록 선택된다.
프로세스(1100)는, 모든 또는 다수의 파티션이 분석될 때까지, 존재하는 파티션이 있으면 프레임의 다음 파티션에 대해 프로세스의 이 부분을 반복(1117)하는 것을 포함할 수 있으며, 이는 인터-예측에 의해 분석되어야 할 비디오 시퀀스의 각 프레임에 대해 반복될 수 있다 .
프로세스(1100)는 계속되고, "모드 선택에 기초하여 잔차를 결정하고, 인코딩된 데이터를 갖는 비트스트림을 생성 및 송신"(1118)하는 것을 포함할 수 있는데, 이는 프레임 데이터, 잔차 데이터, 및 후보로서 선택되어 예측 리스트 상에 배치된 이웃 모션 벡터를 포함하는 모션 벡터 데이터의 송신을 포함한다.
그 다음, 디코더(200)는 "프레임 데이터, 잔차 및 모션 벡터를 디코딩"(1120)하기 위해 제공될 수 있는데, 이는 일 형태에 의해, 생성된 이웃 블록 모션 벡터 체크리스트로부터 디코더가 후보 모션 벡터 생성을 수행할 수 있도록, 디코더에서 이웃 블록 패턴 공식을 미리 저장하는 것 또는 이미지 데이터와 함께 공식을 디코더로 전송하는 것을 포함한다. 즉, 프로세스(1100)는 도시된 바와 같이 동작(1108 내지 1117)을 반복(1122)하여 저장된 이웃 블록 패턴 공식을 사용함으로써 디코더에서 후보 모션 벡터를 생성할 수 있다. 따라서, 이는 공식을 사용하여 이웃 블록 위치를 결정하는 것과, 그 위치를 체크리스트 상에 배치하는 것과, 체크리스트 상의 위치를 검사하여 어느 위치가 모션 벡터를 갖는지를 결정하는 것과, 그 다음, 인코더 예측 리스트와 같이 예측 리스트 상에 이용 가능한 공간이 생길 때 공식의 순서 또는 다른 순서를 사용하여 예측 리스트 상에 이웃 블록 모션 벡터를 배치하는 것을 포함할 수 있다.
다음 동작은 "모션 벡터를 사용함으로써 모션 보상을 사용하여 예측 블록을 구성하는 것"(1124) 및 "예측 블록에 잔차를 추가하여 재구성된 블록을 형성하는 것"(1126)이다. 그 다음, 프로세스(1100)는 "모션 보상을 위한 참조 프레임으로서 재구성된 프레임을 사용하는 것"(1128)과, "시퀀스의 끝까지 다수의 프레임에 대해 반복하는 것"(1130)으로 계속될 수 있다. 재구성된 프레임은 또한 디스플레이 및/또는 저장을 위해 제공(1132)될 수 있다.
일반적으로, 인코더(300) 및 디코더(400)에 의해 사용되는 것과 같은 논리 유닛 또는 논리 모듈은, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합에 의해 적어도 부분적으로 구현될 수 있다. 도시된 바와 같이, 몇몇 구현예에서, 인코더 및 디코더(300/400)는 프로세서(들)(1203)를 통해 구현될 수 있다. 다른 구현예에서, 코더(300/400)는 하나 이상의 다른 중앙 처리 유닛(들)을 통해 구현된 하드웨어 또는 소프트웨어를 통해 구현될 수 있다. 일반적으로, 코더(300/400) 및/또는 여기에서 설명된 동작은 시스템 레벨에서 인에이블될 수 있다. 그러나, 인코딩 루프에서 모션 추정을 가능하게 하고/하거나 사용된 압축 방식의 유형 또는 압축 비율을 제어하기 위한 몇몇 부분은, 예를 들어 사용자 레벨에서 제공되거나 조정될 수 있다.
이러한 이웃 블록 사용은 대안적 탐색 전략을 사용하는 시스템 상에 제공될 수 있는데, 이 전략은 사용된 하나의 옵션일 뿐이거나, 상이한 모션 추정 프로세스의 그룹이 사용되고 최상의 결과를 갖는 것이 궁극적으로 인코딩에 사용되거나, 다수의 탐색 프로세스의 결과가 평균 또는 중간값과 같은 것으로 결합되고 결합 결과가 사용되는 것이 인식될 것이다. 이는 예를 들어 대안적 탐색 패턴 배열을 이용한 블록-기반 탐색, 및/또는 위상 상관, 주파수 도메인, 픽셀 반복 및/또는 옵티컬 플로우 기반 알고리즘과 같은 직접적 방법, 및/또는 코너 검출, 물체 추적 및 기타 통계 함수 기반 알고리즘과 같은 간접적 방법을 포함할 수 있다.
예시적 프로세스(500, 1000, 및/또는 1100)의 구현은 설명된 순서로 도시된 모든 동작의 수행을 포함할 수 있지만 본 발명은 이에 제한되지 않으며, 다양한 예에서, 본 명세서의 임의의 프로세스의 구현은 도시된 동작들의 서브 세트만의 수행 및/또는 예시된 것과 다른 순서의 수행을 포함할 수 있다.
구현예에서, 본 명세서에서 설명된 특징은 하나 이상의 컴퓨터 프로그램 제품에 의해 제공되는 명령어에 응답하여 수행될 수 있다. 이러한 프로그램 제품은, 예를 들어 프로세서에 의해 실행될 때, 본 명세서에서 설명된 기능을 제공할 수 있는 명령어를 제공하는 신호 전달 매체를 포함할 수 있다. 컴퓨터 프로그램 제품은 하나 이상의 머신 판독가능 매체의 임의의 형태로 제공될 수 있다. 따라서, 예를 들어, 하나 이상의 프로세서 코어(들)를 포함하는 프로세서는, 하나 이상의 머신 판독가능 매체에 의해 프로세서로 전달되는 프로그램 코드 및/또는 명령어 또는 명령어 세트에 응답하여 본 명세서에서 설명된 하나 이상의 특징을 수행할 수 있다. 일반적으로, 머신 판독가능 매체는 본 명세서에 설명된 디바이스 및/또는 시스템 중 임의의 것으로 하여금 본 명세서에 설명된 특징 중 적어도 일부를 구현하게 할 수 있는 프로그램 코드 및/또는 명령어 또는 명령어 세트의 형태로 소프트웨어를 전달할 수 있다. 이전에 언급한 바와 같이, 다른 형태에서, 비일시적 컴퓨터 판독가능 매체와 같은 비일시적 제품은, 일시적 신호 그 자체를 포함하지 않는다는 것을 제외하고는, 위에서 언급된 예 또는 다른 예 중 임의의 것과 함께 사용될 수 있다. 이것은 RAM 등과 같이 '일시적' 형태로 데이터를 임시적으로 보유할 수 있는 신호 그 자체가 아닌 요소를 포함한다.
본 명세서에 설명된 임의의 구현에서 사용될 때, "모듈"이라는 용어는 본 명세서에 설명된 기능을 제공하도록 구성된 소프트웨어 로직, 펌웨어 로직 및/또는 하드웨어 로직의 임의의 조합을 지칭한다. 소프트웨어는 소프트웨어 패키지, 코드 및/또는 명령어 세트 또는 명령어로서 구현될 수 있으며, "하드웨어"는, 본 명세서에 설명된 임의의 구현에서 사용될 때, 예를 들어, 하드 와이어드 회로, 프로그램 가능한 회로, 상태 머신 회로, 및/또는 프로그램 가능한 회로에 의해 실행되는 명령어를 저장하는 펌웨어를 단독으로 또는 임의의 조합으로 포함할 수 있다. 모듈들은 집합적으로 또는 개별적으로, 예를 들어, 집적 회로(IC), 시스템 온-칩(SoC) 등과 같은 보다 큰 시스템의 일부를 형성하는 회로로서 구현될 수 있다. 예를 들어, 모듈은 본 명세서에 설명된 코딩 시스템의 소프트웨어, 펌웨어 또는 하드웨어를 통한 구현을 위해 로직 회로에서 구현될 수 있다.
본 명세서에 설명된 임의의 구현에서 사용될 때, "논리 유닛"이라는 용어는 본 명세서에 설명된 기능을 제공하도록 구성된 펌웨어 로직 및/또는 하드웨어 로직의 임의의 조합을 지칭한다. "하드웨어"는, 본 명세서에 설명된 임의의 구현에서 사용될 때, 예를 들어, 하드 와이어드 회로, 프로그램 가능 회로, 상태 머신 회로, 및/또는 프로그램 가능 회로에 의해 실행되는 명령어를 저장하는 펌웨어를 단독으로 또는 임의의 조합으로 포함할 수 있다. 논리 유닛들은 집합적으로 또는 개별적으로, 예를 들어, 집적 회로(IC), 시스템 온-칩(SoC) 등과 같은 보다 큰 시스템의 일부를 형성하는 회로로서 구현될 수 있다. 예를 들어, 로직 유닛은 본 명세서에 설명된 코딩 시스템의 펌웨어 또는 하드웨어를 통한 구현을 위해 로직 회로에서 구현될 수 있다. 당업자는, 하드웨어 및/또는 펌웨어에 의해 수행되는 동작이 대안 적으로 소프트웨어 패키지, 코드 및/또는 명령어 세트 또는 명령어로서 구현될 수 있는 소프트웨어를 통해 구현될 수 있음을 인식할 것이고, 아울러 논리 유닛이 자신의 기능을 구현하기 위해 소프트웨어의 일부를 또한 사용할 수 있음을 인식할 것이다.
본 명세서에 설명된 임의의 구현에서 사용될 때, "구성요소"라는 용어는 모듈 또는 로직 유닛을 지칭할 수 있는데, 이들 용어는 위에 설명되어 있다. 따라서, "구성요소"라는 용어는 본 명세서에 설명된 기능을 제공하도록 구성된 소프트웨어 로직, 펌웨어 로직 및/또는 하드웨어 로직의 임의의 조합을 지칭할 수 있다. 예를 들어, 당업자는 하드웨어 및/또는 펌웨어에 의해 수행되는 동작이 대안적으로 소프트웨어 패키지, 코드 및/또는 명령어 세트로서 구현될 수 있는 소프트웨어 모듈을 통해 구현될 수 있음을 인식할 것이고, 아울러 로직 유닛이 자신의 기능을 구현하기 위해 소프트웨어의 일부를 또한 사용할 수 있음을 인식할 것이다.
도 12를 참조하면, 비디오 코딩을 위해 이웃 블록 패턴 공식을 사용하여 모션 추정을 제공하기 위한 예시적 비디오 코딩 시스템(1200)은 본 발명의 적어도 몇몇 구현예에 따라 구성될 수 있다. 도시된 구현예에서, 시스템(1200)은 하나 이상의 중앙 처리 유닛 또는 프로세서(1203), 디스플레이 디바이스(1205) 및 하나 이상의 메모리 스토어(1204)를 포함할 수 있다. 중앙 처리 유닛(1203), 메모리 스토어(1204) 및/또는 디스플레이 디바이스(1205)는, 예를 들어, 버스, 와이어 또는 다른 액세스를 통해 서로 통신할 수 있다. 다양한 구현예에서, 디스플레이 디바이스(1205)는 시스템(1200)에 통합되거나 시스템(1200)과 별도로 구현될 수 있다.
도 12에 도시되고 위에서 설명된 바와 같이, 처리 유닛(1220)은 인코더(300) 및/또는 디코더(400)를 갖는 로직 회로(1250)를 가질 수 있다. 공식(1208)을 판독 및 사용하고 본 명세서에 논의된 프로세스에 의해 설명된 바와 같이 본 명세서에 논의된 기능들 중 다수를 제공하도록, 인코더(300)는 모션 추정 유닛(1252)을 가질 수 있고 디코더는 모션 추정 유닛(1254)을 가질 수 있다.
인식되는 바와 같이, 도 12에 도시된 모듈은 다양한 소프트웨어 및/또는 하드웨어 모듈 및/또는 소프트웨어 또는 하드웨어 또는 이들의 조합을 통해 구현될 수 있는 모듈을 포함할 수 있다. 예를 들어, 모듈은 처리 유닛(1220)을 통해 소프트웨어로서 구현될 수 있거나, 모듈은 전용 하드웨어 부분을 통해 구현될 수 있다. 또한, 도시된 메모리 스토어(1204)는 처리 유닛(1220)을 위한 공유형 메모리일 수 있는데, 예를 들어 모션 벡터 버퍼(1206 및 1207) 및 ROM 공식은 위에서 언급한 옵션들 중 임의의 것에 저장될 수 있거나, 이런 옵션들의 결합물에 저장될 수 있거나 다른 곳에 저장될 수도 있다. 일 옵션에 의해, 열(columns)의 이웃 블록 영역 MV는 온-칩 버퍼(1206)에 저장되는 반면, 하나의 라인 버퍼는 오프-칩 메모리 버퍼(1207)에 저장되고, 공식(1208)을 저장하기 위한 ROM은 이들 중 어느 한 위치에 있을 수 있다. 또한, 시스템(1200)은 다양한 방식으로 구현될 수 있다. 예를 들어, 시스템(1200)(디스플레이 디바이스(1205)를 제외함)은, 그래픽 프로세서, 쿼드코어 중앙 처리 유닛 및/또는 메모리 컨트롤러 입/출력(I/O) 모듈을 갖는 단일 칩 또는 디바이스로서 구현될 수 있다. 다른 예에서, 시스템(1200)(역시 디스플레이 디바이스(1205)를 제외함)은 칩셋으로서 구현될 수 있다.
프로세서(들)(1203)는, 예를 들어, 마이크로 프로세서(들), 멀티코어 프로세서, 주문형 집적 회로, 칩(들), 칩셋, 프로그램 가능 논리 디바이스, 그래픽 카드, 통합형 그래픽, 범용 그래픽 처리 유닛(들) 등을 포함하는 임의의 적절한 구현을 포함할 수 있다. 또한, 메모리 스토어(1204)는 모션 벡터 버퍼(1206)를 보유할 수 있고, 휘발성 메모리(예컨대, 정적 랜덤 액세스 메모리(SRAM), 동적 랜덤 액세스 메모리 메모리(DRAM) 등), 또는 비휘발성 메모리(예컨대, 플래시 메모리 등) 등과 같은 임의 유형의 메모리일 수 있다. 비제한적 예에서, 메모리 스토어(1204)는 또한 캐시 메모리를 통해 구현될 수 있다. 다양한 예에서, 시스템(1200)은 칩셋 또는 칩 상의 시스템으로서 구현될 수 있다.
도 13을 참조하면, 본 발명 및 다양한 구현에 따른 예시적 시스템(1300)은 미디어 시스템일 수 있지만, 시스템(1300)은 이러한 맥락에 제한되지 않는다. 예를 들어, 시스템(1300)은 퍼스널 컴퓨터(PC), 랩탑 컴퓨터, 울트라 랩탑 컴퓨터, 태블릿, 터치 패드, 휴대용 컴퓨터, 핸드헬드 컴퓨터, 팜탑 컴퓨터, PDA(personal digital assistant), 셀룰러 전화기, 결합형 셀룰러 전화기/PDA, 텔레비전, 스마트 디바이스(예컨대, 스마트폰, 스마트 태블릿 또는 스마트 텔레비전), MID(Mobile Internet Device), 메시징 디바이스, 데이터 통신 디바이스 등에 통합될 수 있다.
다양한 구현예에서, 시스템(1300)은 디스플레이(1320)에 통신 가능하게 결합 된 플랫폼(1302)을 포함한다. 플랫폼(1302)은, 콘텐츠 서비스 디바이스(들)(1330) 또는 콘텐츠 전달 디바이스(들)(1340) 또는 다른 유사한 콘텐츠 소스와 같은 콘텐츠 디바이스로부터 콘텐츠를 수신할 수 있다. 하나 이상의 내비게이션 특징을 포함하는 내비게이션 제어기(1350)는, 예를 들어, 플랫폼(1302) 및/또는 디스플레이(1320)와 상호 작용하도록 사용될 수 있다. 이러한 구성요소들의 각각은 아래에서 보다 자세히 설명된다.
다양한 구현예에서, 플랫폼(1302)은, 안테나(들)(1313)뿐만 아니라, 칩셋(1305), 프로세서(1310), 메모리(1312), 스토리지(1314), 그래픽 서브시스템(1315), 애플리케이션(1316) 및/또는 무선 기기(1318)의 임의의 조합을 포함할 수 있다. 칩셋(1305)은 프로세서(1310), 메모리(1312), 스토리지(1314), 그래픽 서브시스템(1315), 애플리케이션(1316) 및/또는 무선 기기(1318) 사이에서 상호 통신을 제공할 수 있다. 예를 들어, 칩셋(1305)은 스토리지(1314)와의 상호 통신을 제공할 수 있는 스토리지 어댑터(도시 안됨)를 포함할 수 있다.
프로세서(1310)는 CISC(Complex Instruction Set Computer) 또는 RISC(Reduced Instruction Set Computer) 프로세서, x86 명령어 세트 호환 프로세서, 멀티코어, 또는 임의의 다른 마이크로프로세서 또는 중앙 처리 유닛(CPU)으로서 구현될 수 있다. 다양한 구현예에서, 프로세서(1310)는 듀얼코어 프로세서(들), 듀얼코어 모바일 프로세서(들) 등일 수 있다.
메모리(1312)는 랜덤 액세스 메모리(RAM), 동적 랜덤 액세스 메모리(DRAM) 또는 정적 RAM(SRAM)과 같은, 그러나 이에 제한되지는 않는 휘발성 메모리 디바이스로서 구현될 수 있다.
스토리지(1314)는 자기 디스크 드라이브, 광학 디스크 드라이브, 테이프 드라이브, 내부 스토리지 디바이스, 부착형 스토리지 디바이스, 플래시 메모리, 배터리 백업형 SDRAM(동기식 DRAM) 및/또는 네트워크 액세스 가능 스토리지 디바이스 등과 같은, 그러나 이에 제한되지는 않는 비휘발성 스토리지 디바이스로서 구현될 수 있다. 다양한 구현예에서, 스토리지(1314)는, 예를 들어, 다수의 하드 드라이브가 포함되는 경우, 가치있는 디지털 미디어에 대한 스토리지 성능 향상된 보호를 증가시키는 기술을 포함할 수 있다.
그래픽 서브시스템(1315)은 디스플레이를 위해 스틸 또는 비디오와 같은 이미지의 처리를 수행할 수 있다. 그래픽 서브시스템(1315)은 예를 들어 그래픽 처리 유닛(GPU) 또는 시각적 처리 유닛(VPU)일 수 있다. 아날로그 또는 디지털 인터페이스는 그래픽 서브시스템(1315)과 디스플레이(1320)를 통신 가능하게 결합하기 위해 사용될 수 있다. 예를 들어, 인터페이스는 고선명 멀티미디어 인터페이스, 디스플레이 포트, 무선 HDMI 및/또는 무선 HD 호환 기술 중 임의의 것일 수 있다. 그래픽 서브시스템(1315)은 프로세서(1310) 또는 칩셋(1305)에 통합될 수 있다. 몇몇 구현예에서, 그래픽 서브시스템(1315)은 칩셋(1305)에 통신 가능하게 결합된 독립형 카드일 수 있다.
본 명세서에 설명된 그래픽 및/또는 비디오 처리 기술은 다양한 하드웨어 아키텍처로 구현될 수 있다. 예를 들어, 그래픽 및/또는 비디오 기능은 칩셋 내에 통합될 수 있다. 대안으로, 개별 그래픽 및/또는 비디오 프로세서가 사용될 수 있다. 또 다른 구현예로서, 그래픽 및/또는 비디오 기능은 멀티코어 프로세서를 포함하는 범용 프로세서에 의해 제공될 수 있다. 다른 구현예에서, 기능들은 가전(consumer electronics) 디바이스에서 구현될 수 있다.
무선 기기(1318)는 다양한 적절한 무선 통신 기술을 사용하여 신호를 송신 및 수신할 수 있는 하나 이상의 무선 기기를 포함할 수 있다. 이러한 기술은 하나 이상의 무선 네트워크를 통한 통신을 수반할 수 있다. 예시적 무선 네트워크는 WLAN(wireless local area network), WPAN(wireless personal area network), WMAN(wireless metropolitan area network), 셀룰러 네트워크, 및 위성 네트워크를 포함한다(그러나, 이에 제한되지는 않음). 이러한 네트워크를 통한 통신 시에, 무선 기기(1318)는 임의 버전의 하나 이상의 적용 가능한 표준에 따라 동작할 수 있다.
다양한 구현예에서, 디스플레이(1320)는 임의의 텔레비전 유형 모니터 또는 디스플레이를 포함할 수 있다. 디스플레이(1320)는, 예를 들어, 컴퓨터 디스플레이 스크린, 터치 스크린 디스플레이, 비디오 모니터, 텔레비전형 디바이스 및/또는 텔레비전을 포함할 수 있다. 디스플레이(1320)는 디지털 및/또는 아날로그일 수 있다. 다양한 구현예에서, 디스플레이(1320)는 홀로그래픽 디스플레이일 수 있다. 또한, 디스플레이(1320)는 시각적 투영을 수신할 수 있는 투명한 표면일 수 있다. 이러한 투영은 다양한 형태의 정보, 이미지 및/또는 물체를 전달할 수 있다. 예를 들어, 이러한 투영은 모바일 증강 현실(MAR) 애플리케이션을 위한 시각적 오버레이일 수 있다. 하나 이상의 소프트웨어 애플리케이션(1316)의 제어 하에, 플랫폼(1302)은 디스플레이(1320) 상에 사용자 인터페이스(1322)를 디스플레이할 수 있다.
다양한 구현예에서, 콘텐츠 서비스 디바이스(들)(1330)는 임의의 국내, 국제 및/또는 독립 서비스에 의해 호스팅될 수 있고, 따라서 예를 들어 인터넷을 통해 플랫폼(1302)에 액세스 가능할 수 있다. 콘텐츠 서비스 디바이스(들)(1330)는 플랫폼(1302) 및/또는 디스플레이(1320)에 결합될 수 있다. 플랫폼(1302) 및/또는 콘텐츠 서비스 디바이스(들)(1330)는 네트워크(1360)에 결합되어 미디어 정보를 네트워크(1360)로 및 그로부터 통신(예컨대, 송신 및/또는 수신)할 수 있다. 콘텐츠 전달 디바이스(들)(1340)는 또한 플랫폼(1302) 및/또는 디스플레이(1320)에 결합될 수 있다.
다양한 구현예에서, 콘텐츠 서비스 디바이스(들)(1330)는, 케이블 텔레비전 박스, 개인용 컴퓨터, 네트워크, 전화기, 디지털 정보 및/또는 콘텐츠를 전달할 수 있는 인터넷 가능형 디바이스 또는 기기, 및 콘텐츠 제공자와 플랫폼(1302) 및/또는 디스플레이(1320) 사이에서 네트워크(1360)를 통하거나 직접적으로 콘텐츠를 일방향 또는 양방향으로 통신할 수 있는 임의의 다른 유사한 디바이스를 포함할 수 있다. 콘텐츠는 네트워크(1360)를 통해 시스템(1300) 내의 구성요소들 중 임의의 하나와 콘텐츠 제공자로 및 그로부터 단방향 및/또는 양방향으로 통신될 수 있음이 인식될 것이다. 콘텐츠의 예는 예를 들어 비디오, 음악, 의료 및 게임 정보 등을 포함하는 임의의 미디어 정보를 포함할 수 있다.
콘텐츠 서비스 디바이스(들)(1330)는 미디어 정보, 디지털 정보 및/또는 다른 콘텐츠를 포함하는 케이블 텔레비전 프로그래밍과 같은 콘텐츠를 수신할 수 있다. 콘텐츠 제공자의 예는 임의의 케이블 또는 위성 텔레비전 또는 무선 기기 또는 인터넷 콘텐츠 제공자를 포함할 수 있다. 제공된 예들은 본 발명에 따른 구현을 어떤 식으로든 제한하는 것을 의미하지 않는다.
다양한 구현예에서, 플랫폼(1302)은 하나 이상의 내비게이션 특징을 갖는 내비게이션 제어기(1350)로부터 제어 신호를 수신할 수 있다. 제어기(1350)의 내비게이션 특징은 예를 들어 사용자 인터페이스(1322)와 상호 작용하는 데 사용될 수 있다. 구현예에서, 내비게이션 제어기(1350)는, 사용자가 공간적(예컨대, 연속 및 다차원) 데이터를 컴퓨터에 입력할 수 있게 하는 컴퓨터 하드웨어 구성요소(특히, 휴먼 인터페이스 디바이스)일 수 있는 포인팅 디바이스일 수 있다. 그래픽 사용자 인터페이스(GUI) 및 텔레비전 및 모니터와 같은 많은 시스템은, 사용자가 물리적 제스처를 사용함으로써 컴퓨터 또는 텔레비전을 제어하여 그에 데이터를 제공할 수 있게 한다.
제어기(1350)의 내비게이션 특징의 이동은, 디스플레이 상에 디스플레이된, 포인터, 커서, 포커스 링, 또는 다른 시각적 표시자의 이동에 의해 디스플레이(예컨대, 디스플레이(1320)) 상에 복제될 수 있다. 예를 들어, 소프트웨어 애플리케이션(1316)의 제어 하에, 내비게이션 제어기(1350) 상에 위치한 내비게이션 특징은, 예를 들어 사용자 인터페이스(1322) 상에 디스플레이된 가상 내비게이션 특징에 매핑될 수 있다. 구현예에서, 제어기(1350)는 별개의 구성요소가 아닐 수 있으며, 플랫폼(1302) 및/또는 디스플레이(1320)에 통합될 수 있다. 그러나, 본 발명는 본 명세서에 도시되거나 설명된 요소들에 제한되지 않는다.
다양한 구현에서, 드라이버(도시 안됨)는, 예를 들어 인에이블될 때, 초기 부팅 이후에 사용자가 버튼 터치로 텔레비전과 같은 플랫폼(1302)을 즉시 켜고 끌 수 있게 하는 기술을 포함할 수 있다. 프로그램 로직은, 심지어 플랫폼이 "꺼진" 경우에도 플랫폼(1302)이 미디어 어댑터 또는 다른 콘텐츠 서비스 디바이스(들)(1330) 또는 콘텐츠 전달 디바이스(들)(1340)로 콘텐츠를 스트리밍하는 것을 허용할 수 있다. 또한, 칩셋(1305)은 예를 들어 7.1 서라운드 사운드 오디오 및/또는 고선명 (7.1) 서라운드 사운드 오디오에 대한 하드웨어 및/또는 소프트웨어 지원을 포함할 수 있다. 드라이버는 통합형 그래픽 플랫폼을 위한 그래픽 드라이버를 포함할 수 있다. 구현예에서, 그래픽 드라이버는 PCI(peripheral component interconnect) 익스프레스 그래픽 카드를 포함할 수 있다.
다양한 구현예에서, 시스템(1300)에 도시된 구성요소들 중 임의의 하나 이상은 통합될 수 있다. 예를 들어, 플랫폼(1302)과 콘텐츠 서비스 디바이스(들)(1330)가 통합될 수 있거나, 플랫폼(1302)과 콘텐츠 전달 디바이스(들)(1340)가 통합될 수 있거나 플랫폼(1302), 콘텐츠 서비스 디바이스(1330)(들) 및 콘텐츠 전달 디바이스(들)(1340)가 통합될 수 있다. 다양한 구현예에서, 플랫폼(1302)과 디스플레이(1320)는 통합형 유닛일 수 있다. 예를 들어, 디스플레이(1320)와 콘텐츠 서비스 디바이스(들)(1330)가 통합될 수 있거나, 디스플레이(1320)와 콘텐츠 전달 디바이스(들)(1340)가 통합될 수 있다. 이런 예들은 본 발명을 제한하려는 것이 아니다.
다양한 구현예에서, 시스템(1300)은 무선 시스템, 유선 시스템, 또는 이들의 조합으로서 구현될 수 있다. 무선 시스템으로서 구현되는 경우, 시스템(1300)은, 하나 이상의 안테나, 송신기, 수신기, 송수신기, 증폭기, 필터, 제어 로직 등과 같은 무선 공유형 매체를 통해 통신하기에 적합한 구성요소 및 인터페이스를 포함할 수 있다. 무선 공유형 매체의 예는 RF 스펙트럼 등과 같은 무선 스펙트럼의 일부를 포함할 수 있다. 유선 시스템으로서 구현되는 경우, 시스템(1300)은, 입/출력(I/O) 어댑터, I/O 어댑터를 대응하는 유선 통신 매체와 접속하기 위한 물리적 커넥터, 네트워크 인터페이스 카드(NIC), 디스크 제어기, 비디오 제어기, 오디오 제어기 등과 같은 유선 통신 매체를 통해 통신하기에 적합한 구성요소 및 인터페이스를 포함할 수 있다. 유선 통신 매체의 예는 와이어, 케이블, 금속 리드, 인쇄 회로 기판(PCB), 백플레인, 스위치 패브릭, 반도체 재료, 연선, 동축 케이블, 광섬유 등을 포함할 수 있다.
플랫폼(1302)은 정보를 통신하기 위해 하나 이상의 논리적 또는 물리적 채널을 설정할 수 있다. 정보는 미디어 정보 및 제어 정보를 포함할 수 있다. 미디어 정보는 사용자를 위한 콘텐츠를 나타내는 임의의 데이터를 지칭할 수 있다. 콘텐츠의 예는, 예를 들어, 음성 대화로부터의 데이터, 화상 회의, 스트리밍 비디오, 전자 메일("이메일") 메시지, 음성 메일 메시지, 영숫자 심볼, 그래픽, 이미지, 비디오, 텍스트 등을 포함할 수 있다. 음성 대화로부터의 데이터는, 예를 들어, 스피치 정보, 침묵 기간, 배경 잡음, 컴포트 잡음, 톤 등일 수 있다. 제어 정보는 자동화된 시스템을 위한 커맨드, 명령어 또는 제어 단어를 나타내는 임의의 데이터를 지칭할 수 있다. 예를 들어, 제어 정보는, 시스템을 통해 미디어 정보를 라우팅하거나, 미리 결정된 방식으로 미디어 정보를 처리하도록 노드에 지시하기 위해 사용될 수 있다. 그러나, 구현예들은 도 13에 도시되거나 설명된 요소들 또는 맥락에 제한되지 않는다.
전술한 바와 같이, 시스템(1200 또는 1300)은 다양한 물리적 스타일 또는 폼 팩터로 구현될 수 있다. 도 14는 시스템(1200 또는 1300)이 구현될 수 있는 소형 폼 팩터 디바이스(1400)의 구현을 도시한다. 구현예에서, 예를 들어, 디바이스(1400)는 무선 성능을 갖는 모바일 컴퓨팅 디바이스로서 구현될 수 있다. 모바일 컴퓨팅 디바이스는, 예를 들어, 하나 이상의 배터리와 같은 모바일 전력원 또는 전원 및 처리 시스템을 갖는 임의의 디바이스를 지칭할 수 있다.
전술한 바와 같이, 모바일 컴퓨팅 디바이스의 예는, 퍼스널 컴퓨터(PC), 랩탑 컴퓨터, 울트라 랩탑 컴퓨터, 태블릿, 터치 패드, 휴대용 컴퓨터, 핸드헬드 컴퓨터, 팜탑 컴퓨터, PDA(personal digital assistant), 셀룰러 전화기, 결합형 셀룰러 전화기/PDA, 텔레비전, 스마트 디바이스(예컨대, 스마트폰, 스마트 태블릿 또는 스마트 텔레비전), MID(Mobile Internet Device), 메시징 디바이스, 데이터 통신 디바이스 등을 포함할 수 있다.
모바일 컴퓨팅 디바이스의 예는 또한, 손목 컴퓨터, 손가락 컴퓨터, 반지 컴퓨터, 안경 컴퓨터, 벨트 클립 컴퓨터, 팔 밴드 컴퓨터, 신발 컴퓨터, 의류 컴퓨터, 및 기타 착용형 컴퓨터와 같이 사람이 착용하도록 구성되는 컴퓨터를 포함할 수 있다. 다양한 구현예에서, 예를 들어, 모바일 컴퓨팅 디바이스는 음성 통신 및/또는 데이터 통신은 물론 컴퓨터 애플리케이션을 실행할 수 있는 스마트폰으로서 구현될 수 있다. 몇몇 구현예는 예를 들어 스마트폰으로서 구현된 모바일 컴퓨팅 디바이스에 의해 설명될 수 있지만, 다른 구현예는 다른 무선 모바일 컴퓨팅 디바이스를 사용하여 또한 구현될 수 있음이 인식될 것이다. 구현예들은 이러한 맥락에 제한되지 않는다.
도 14에 도시된 바와 같이, 디바이스(1400)는 하우징(1402), 디스플레이(1404), 입/출력(I/O) 디바이스(1406) 및 안테나(1408)를 포함할 수 있다. 디바이스(1400)는 또한 내비게이션 특징(1412)을 포함할 수 있다. 디스플레이(1404)는 디스플레이 유닛 상에 모바일 컴퓨팅 디바이스에 적합한 정보를 디스플레이하기 위한 임의의 적절한 스크린(1410)을 포함할 수 있다. I/O 디바이스(1406)는 모바일 컴퓨팅 디바이스에 정보를 입력하기 위한 임의의 적절한 I/O 디바이스를 포함할 수 있다. I/O 디바이스(1406)의 예는 영숫자 키보드, 숫자 키패드, 터치 패드, 입력 키, 버튼, 스위치, 로커 스위치, 마이크로폰, 스피커, 음성 인식 디바이스 및 소프트웨어 등을 포함할 수 있다. 정보는 또한 마이크로폰(도시 안됨)을 통해 디바이스(1400)에 입력될 수 있다. 이러한 정보는 음성 인식 디바이스(도시 안됨)에 의해 디지털화될 수 있다. 구현들은 이러한 맥락에 제한되지 않는다.
다양한 구현예는 하드웨어 요소, 소프트웨어 요소, 또는 이들의 조합을 사용하여 구현될 수 있다. 하드웨어 요소의 예는 프로세서, 마이크로프로세서, 회로, 회로 요소(예컨대, 트랜지스터, 레지스터, 커패시터, 인덕터 등), 집적 회로, ASIC(Application Specific Integrated Circuit), PLD(Programmable Logic Device), DSP(digital signal processor), FPGA(field programmable gate array), 로직 게이트, 레지스터, 반도체 디바이스, 칩, 마이크로칩, 칩셋 등을 포함할 수 있다. 소프트웨어의 예는 소프트웨어 구성요소, 프로그램, 애플리케이션, 컴퓨터 프로그램, 애플리케이션 프로그램, 시스템 프로그램, 머신 프로그램, 운영 체제 소프트웨어, 미들웨어, 펌웨어, 소프트웨어 모듈, 루틴, 서브루틴, 함수, 방법, 절차, 소프트웨어 인터페이스, API(application program interface), 명령어 세트, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트, 컴퓨터 코드 세그먼트, 단어, 값, 기호, 또는 이들의 임의의 조합을 포함할 수 있다. 구현예가 하드웨어 요소 및/또는 소프트웨어 요소를 사용하여 구현되는지 여부를 판정하는 것은, 원하는 계산 속도, 전력 레벨, 열 허용 오차, 처리 사이클 예산, 입력 데이터 속도, 출력 데이터 속도, 메모리 리소스, 데이터 버스 속도 및 기타 설계 또는 성능 제약과 같은 임의 수의 인자에 따라 달라질 수 있다.
전술한 하나 이상의 양태는, 머신에 의해 판독될 때 머신으로 하여금 본 명세서에서 설명된 기술을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장된 대표적 명령어에 의해 구현될 수 있다. "IP 코어"로 알려진 이러한 표현은 유형의(tangible) 머신 판독가능 매체에 저장될 수 있고, 실제로 로직 또는 프로세서를 만드는 제조 머신에 로딩되도록 다양한 고객이나 제조 시설에 공급될 수 있다.
본 명세서에 설명된 특정 특징들은 다양한 구현예를 참조하여 설명되었지만,이런 설명은 제한적인 의미로 해석되어서는 안된다. 따라서, 본 명세서에 설명된 구현예의 다양한 수정, 및 본 발명이 속하는 기술 분야의 당업자에게 자명한 다른 구현예는 본 발명의 사상 및 범위 내에있는 것으로 간주된다.
다음 예들은 추가 구현예에 관한 것이다.
일 예에 의해, 컴퓨터에 의해 구현되는, 비디오 코딩을 위한 모션 추정 방법은, 복수의 픽셀 데이터 프레임들을 수신하는 단계와, 현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 단계를 포함하는데, 상기 적어도 하나의 모션 벡터 후보를 결정하는 단계는, 상기 현재 프레임 상의 상기 현재 블록의 위치에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록(spatial neighbor block) 위치를 결정하는 단계와, 상기 적어도 하나의 이웃 블록 좌표를 사용함으로써 결정된 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 단계를 포함한다.
다른 구현예에 의해, 상기 방법은 8 × 8보다 작은 서브 블록 크기를 갖는 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용하는 단계를 포함하는데, 상기 이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록의 상측으로 인접한 단일 행과, 상기 현재 블록의 바로 좌측으로 최대 3개의 열과, 상기 현재 블록에 1 블록을 더한 것의 상단 길이를 따라 연속적인 8 × 8 픽셀 블록의 단일 라인 버퍼에 의해 저장된 데이터를 가지고, 상기 현재 블록에 인접한 단일 행 및 단일 열 중 적어도 하나를 포함하고, 상기 모션 추정 방법은, 8 x 8 픽셀 블록 기반 모션 벡터만을 잠재적 이웃 블록 모션 벡터로서 버퍼링하는 단계와, 최대 9개의 공간 이웃 모션 벡터를 결정하는 단계와, 상기 모션 벡터로부터 상기 현재 블록의 모션 벡터를 결정하기 위해 사용될 최대 2개의 후보 모션 벡터를 결정하는 단계를 포함하고, 상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여, 적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는 것과, 상기 현재 블록의 코너에 이웃 블록을 정렬하는 것과, 상기 현재 블록의 폭 또는 높이의 중앙에 이웃 블록을 정렬하는 것 중 적어도 하나를 수행하고, 상기 이웃 블록 패턴 공식은 디코더에서 제공되어, 상기 디코더에서 프레임 상의 이웃 블록 위치를 결정하기 위해 사용되고, 상기 방법은, 잠재적 이웃 블록 영역의 적어도 하나의 열의 모션 벡터를 온-칩 메모리 상에 저장하고, 잠재적 이웃 블록 영역의 단일 행의 모션 벡터를 온-칩 메모리가 아닌 라인 버퍼에 저장하는 단계와, 상기 이웃 블록 패턴 공식이 현재 블록을 포함하는 64 × 64 픽셀 수퍼블록으로부터 연장되는 상단 영역의 우측으로 바깥쪽에 있는 위치에 상기 이웃 블록을 배치할 때, 블록 위치가 상기 현재 블록에 대한 이웃 블록으로서 이용될 수 없음을 나타내는 단계를 포함한다.
또 다른 구현예에 의해, 컴퓨터에 의해 구현된 시스템은, 디스플레이와, 메모리와, 상기 메모리 및 상기 디스플레이에 통신 가능하게 결합된 적어도 하나의 프로세서와, 상기 적어도 하나의 프로세서에 의해 동작되는 모션 추정 유닛을 포함하는데, 상기 모션 추정 유닛은, 복수의 픽셀 데이터 프레임들을 수신하는 것과, 현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 것에 의해 동작하도록 구성되고, 상기 적어도 하나의 모션 벡터 후보를 결정하는 것은, 상기 현재 블록에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록 위치를 결정하는 것과, 결정된 이웃 블록 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 것을 포함한다.
다른 구현예에 의해, 상기 시스템은, 상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여 적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하고, 상기 모션 추정 유닛은, 8 × 8 픽셀보다 작은 서브 블록 크기인 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용함으로써 동작되고, 상기 이웃 블록을 갖도록 허용된 블록 영역은, 오프-칩 저장된 모션 벡터를 갖는 상기 현재 블록 상측의 단일 행과, 온-칩 저장된 모션 벡터를 갖는 상기 현재 블록 바로 좌측의 최대 3개의 열과, 상기 현재 블록에 인접한 단일 행 및 단일 열 중 하나를 포함하고, 8 x 16 또는 16 x 8 픽셀의 현재 블록에 대해 8개의 이웃 블록이 각각 사용되고, 상기 이웃 블록 패턴 공식에 적어도 부분적으로 기인하여 상이한 현재 블록 크기에 대해 최대 9개의 이웃 블록이 사용되고, 중복으로 인해 이웃 블록이 제거되어, 상기 이웃 블록 패턴 공식에 의해 제공된 수학식에 적어도 부분적으로 기인하여 상이한 크기의 현재 블록에 대해 상기 이웃 블록 패턴 공식에 의해 나열된 9개 미만의 이웃 블록이 제공되며, 상기 이웃 블록 위치는 현재 블록 크기에 의존하는 고정된 이웃 블록 위치를 나열하는 룩업 테이블을 사용하지 않고 결정되는 것을 포함한다.
일 해결책에 의해, 명령어가 저장되어 있는 컴퓨터 판독가능 매체에서, 상기 명령어는 실행될 때 컴퓨팅 디바이스로 하여금, 복수의 픽셀 데이터 프레임들을 수신하는 것과, 현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 것에 의해 동작하게 하고, 상기 적어도 하나의 모션 벡터 후보를 결정하는 것은, 상기 현재 블록에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록 위치를 결정하는 것과, 결정된 이웃 블록 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 것을 포함한다.
상기 명령어는 상기 컴퓨팅 디바이스로 하여금, 8 × 8보다 작은 서브 블록 크기를 갖는 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용함으로써 동작하게 하고, 상기 이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록의 상측으로 인접한 단일 행과, 상기 현재 블록의 바로 좌측으로 최대 3개의 열과, 상기 현재 블록에 1 블록을 더한 것의 상단 길이를 따라 연속적인 8 × 8 픽셀 블록의 단일 라인 버퍼에 의해 저장된 데이터를 가지고, 상기 현재 블록에 인접한 단일 행 및 단일 열 중 적어도 하나를 포함하고, 상기 명령어는 상기 컴퓨팅 디바이스로 하여금, 8 x 8 픽셀 블록 기반 모션 벡터만을 잠재적 이웃 블록 모션 벡터로서 버퍼링하는 것과, 최대 9개의 공간 이웃 모션 벡터를 결정하는 것과, 상기 모션 벡터로부터 상기 현재 블록의 모션 벡터를 결정하기 위해 사용될 최대 2개의 후보 모션 벡터를 결정하는 것에 의해 동작하게 하고, 상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여, 적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는 것과, 상기 현재 블록의 코너에 이웃 블록을 정렬하는 것과, 상기 현재 블록의 폭 또는 높이의 중앙에 이웃 블록을 정렬하는 것 중 적어도 하나를 수행하고, 상기 이웃 블록 패턴 공식은 디코더에서 제공되어, 상기 디코더에서 프레임 상의 이웃 블록 위치를 결정하기 위해 사용되고, 상기 명령어는 상기 컴퓨팅 디바이스로 하여금, 잠재적 이웃 블록 영역의 적어도 하나의 열의 모션 벡터를 온-칩 메모리 상에 저장하고, 잠재적 이웃 블록 영역의 단일 행의 모션 벡터를 온-칩 메모리가 아닌 라인 버퍼에 저장하는 것과, 상기 이웃 블록 패턴 공식이 현재 블록을 포함하는 64 × 64 픽셀 수퍼블록으로부터 연장되는 상단 영역의 우측으로 바깥쪽에 있는 위치에 상기 이웃 블록을 배치할 때, 블록 위치가 상기 현재 블록에 대한 이웃 블록으로서 이용될 수 없음을 나타내는 것에 의해 동작하게 한다.
다른 예에서, 적어도 하나의 머신 판독가능 매체는, 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여 상기 컴퓨팅 디바이스로 하여금 위의 예들 중 어느 한 예에 따른 방법을 수행하게 하는 복수의 명령어를 포함할 수 있다.
또 다른 예에서, 장치는 위의 예들 중 어느 한 예에 따른 방법을 수행하는 수단을 포함할 수 있다.
위의 예들은 특정 특징 조합을 포함할 수 있다. 그러나, 위의 예들은 이에 제한되지 않으며, 다양한 구현예에서 위의 예들은, 이러한 특징들의 서브 세트만을 수행하는 것, 이러한 특징들의 다른 순서를 수행하는 것, 이러한 특징들의 상이한 조합을 수행하는 것 및/또는 명시적으로 나열된 이러한 특징들에 더하여 추가적인 특징들을 수행하는 것을 포함할 수 있다. 예를 들어, 예시적 방법과 관련하여 설명된 모든 특징은 예시적 장치, 예시적 시스템 및/또는 예시적 제품에 대해 구현될 수 있으며, 그 반대도 마찬가지이다.
Claims (25)
- 컴퓨터에 의해 구현되는, 비디오 코딩을 위한 모션 추정 방법으로서,
복수의 픽셀 데이터 프레임들을 수신하는 단계와,
현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 단계를 포함하되,
상기 현재 블록은 다양한 사용 가능한 크기 중 하나로 대안적으로 제공되고,
상기 결정하는 단계는,
상기 현재 프레임 상의 상기 현재 블록의 위치에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 이웃 블록에 대한 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록(spatial neighbor block) 위치를 결정하는 단계 - 상기 위치에서의 공간 이웃 블록은 동일한 단일의 고정 크기를 가짐 - 와,
상기 적어도 하나의 이웃 블록 좌표를 사용하여 결정된 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 단계를 포함하며,
이웃 블록을 갖도록 허용된 블록 영역은 상기 현재 블록의 상측으로 인접한 단일 행과 상기 현재 블록의 바로 좌측으로 최대 3개의 열을 포함하는,
모션 추정 방법.
- 제 1 항에 있어서,
8 × 8보다 작은 서브 블록 크기를 갖는 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터(no less than 8 x 8 block-based motion vectors)를 사용하는 단계를 포함하는
모션 추정 방법.
- 삭제
- 삭제
- 제 1 항에 있어서,
상기 이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록에 1 블록을 더한 것의 상단 길이를 따라 연속적인 8 × 8 픽셀 블록의 단일 라인 버퍼에 의해 저장된 데이터를 가지고 상기 현재 블록에 인접한, 상기 단일 행 및 단일 열을 포함하는
모션 추정 방법.
- 제 1 항에 있어서,
8 x 8 픽셀 블록 기반 모션 벡터만을 잠재적 이웃 블록 모션 벡터로서 버퍼링하는 단계를 포함하는
모션 추정 방법.
- 제 1 항에 있어서,
최대 9개의 공간 이웃 모션 벡터를 결정하는 단계와,
상기 모션 벡터로부터 상기 현재 블록의 모션 벡터를 결정하기 위해 사용될 최대 2개의 후보 모션 벡터를 결정하는 단계를 포함하는
모션 추정 방법.
- 제 1 항에 있어서,
상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여,
적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는 것과,
상기 현재 블록의 코너에 이웃 블록을 정렬하는 것과,
상기 현재 블록의 폭 또는 높이의 중앙에 이웃 블록을 정렬하는 것
중 적어도 하나를 수행하는
모션 추정 방법.
- 제 1 항에 있어서,
상기 이웃 블록 패턴 공식은 디코더에서 제공되어, 상기 디코더에서 프레임 상의 이웃 블록 위치를 결정하기 위해 사용되는
모션 추정 방법.
- 제 1 항에 있어서,
잠재적 이웃 블록 영역의 1 내지 3개 열의 모션 벡터를 온-칩 메모리 상에 저장하고, 잠재적 이웃 블록 영역의 단일 행의 모션 벡터를 온-칩 메모리가 아닌 라인 버퍼에 저장하는 단계를 포함하는
모션 추정 방법.
- 제 1 항에 있어서,
상기 이웃 블록 패턴 공식이 현재 블록을 포함하는 64 × 64 픽셀 수퍼블록으로부터 연장되는 상단 영역의 우측으로 바깥쪽에 있는 위치에 상기 이웃 블록을 배치할 때, 블록 위치가 상기 현재 블록에 대한 이웃 블록으로서 이용될 수 없음을 나타내는 단계를 포함하는
모션 추정 방법.
- 제 1 항에 있어서,
8 × 8보다 작은 서브 블록 크기를 갖는 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용하는 단계를 포함하되,
상기 이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록에 1 블록을 더한 것의 상단 길이를 따라 연속적인 8 × 8 픽셀 블록의 단일 라인 버퍼에 의해 저장된 데이터를 가지고 상기 현재 블록에 인접한, 상기 단일 행 및 단일 열을 선택적으로 포함하고,
상기 모션 추정 방법은,
8 x 8 픽셀 블록 기반 모션 벡터만을 잠재적 이웃 블록 모션 벡터로서 버퍼링하는 단계와,
최대 9개의 공간 이웃 모션 벡터를 결정하는 단계와,
상기 모션 벡터로부터 상기 현재 블록의 모션 벡터를 결정하기 위해 사용될 최대 2개의 후보 모션 벡터를 결정하는 단계를 포함하고,
상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여,
적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는 것과,
상기 현재 블록의 코너에 이웃 블록을 정렬하는 것과,
상기 현재 블록의 폭 또는 높이의 중앙에 이웃 블록을 정렬하는 것
중 적어도 하나를 수행하고,
상기 이웃 블록 패턴 공식은 디코더에서 제공되어, 상기 디코더에서 프레임 상의 이웃 블록 위치를 결정하기 위해 사용되고,
상기 모션 추정 방법은,
잠재적 이웃 블록 영역의 적어도 하나의 열의 모션 벡터를 온-칩 메모리 상에 저장하고, 잠재적 이웃 블록 영역의 단일 행의 모션 벡터를 온-칩 메모리가 아닌 라인 버퍼에 저장하는 단계와,
상기 이웃 블록 패턴 공식이 현재 블록을 포함하는 64 × 64 픽셀 수퍼블록으로부터 연장되는 상단 영역의 우측으로 바깥쪽에 있는 위치에 상기 이웃 블록을 배치할 때, 블록 위치가 상기 현재 블록에 대한 이웃 블록으로서 이용될 수 없음을 나타내는 단계를 포함하는
모션 추정 방법.
- 컴퓨터에 의해 구현된 시스템으로서,
디스플레이와,
메모리와,
상기 메모리 및 상기 디스플레이에 통신 가능하게 결합된 적어도 하나의 프로세서와,
상기 적어도 하나의 프로세서에 의해 동작되는 모션 추정 유닛을 포함하되,
상기 모션 추정 유닛은,
복수의 픽셀 데이터 프레임들을 수신하는 것과,
현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 것
에 의해 동작하도록 구성되고,
상기 현재 블록은 다양한 사용 가능한 크기 중 하나로 대안적으로 제공되고,
상기 결정하는 것은,
상기 현재 블록에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 이웃 블록에 대한 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록 위치를 결정하는 것 - 상기 위치에서의 공간 이웃 블록은 동일한 단일의 고정 크기를 가짐 - 과,
결정된 이웃 블록 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 것을 포함하며,
이웃 블록을 갖도록 허용된 블록 영역은 상기 현재 블록의 상측으로 인접한 단일 행과 상기 현재 블록의 바로 좌측으로 최대 3개의 열을 포함하는,
시스템.
- 제 13 항에 있어서,
상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여 적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는
시스템.
- 제 13 항에 있어서,
상기 모션 추정 유닛은, 8 × 8 픽셀보다 작은 서브 블록 크기인 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용함으로써 동작되는
시스템.
- 제 13 항에 있어서,
상기 이웃 블록을 갖도록 허용된 블록 영역은 오프-칩 저장된 모션 벡터를 갖는 상기 현재 블록 상측의 상기 단일 행과, 온-칩 저장된 모션 벡터를 갖는 상기 현재 블록 바로 좌측의 상기 최대 3개의 열을 포함하는
시스템.
- 제 13 항에 있어서,
상기 이웃 블록을 갖도록 허용된 블록 영역은 상기 현재 블록에 인접한 상기 단일 행 및 단일 열을 포함하는
시스템.
- 제 13 항에 있어서,
8 x 16 또는 16 x 8 픽셀의 현재 블록에 대해 8개의 이웃 블록이 각각 사용되고, 상기 이웃 블록 패턴 공식에 적어도 부분적으로 기인하여 상이한 현재 블록 크기에 대해 최대 9개의 이웃 블록이 사용되는
시스템.
- 제 13 항에 있어서,
중복으로 인해 이웃 블록이 제거되어, 상기 이웃 블록 패턴 공식에 의해 제공된 수학식에 적어도 부분적으로 기인하여, 상이한 크기의 현재 블록에 대해 상기 이웃 블록 패턴 공식에 의해 나열된 9개 미만의 이웃 블록이 제공되는
시스템.
- 제 13 항에 있어서,
상기 이웃 블록 위치는 현재 블록 크기에 의존하는 고정된 이웃 블록 위치를 나열하는 룩업 테이블을 사용하지 않고 결정되는
시스템.
- 제 13 항에 있어서,
상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭 또는 높이 또는 폭과 높이 모두를 사용하여 적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하고,
상기 모션 추정 유닛은, 8 × 8 픽셀보다 작은 서브 블록 크기인 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용함으로써 동작되고,
이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록에 인접한 상기 단일 행 및 단일 열을 선택적으로 포함하고,
8 x 16 또는 16 x 8 픽셀의 현재 블록에 대해 8개의 이웃 블록이 각각 사용되고, 상기 이웃 블록 패턴 공식에 적어도 부분적으로 기인하여 상이한 현재 블록 크기에 대해 최대 9개의 이웃 블록이 사용되고,
중복으로 인해 이웃 블록이 제거되어, 상기 이웃 블록 패턴 공식에 의해 제공된 수학식에 적어도 부분적으로 기인하여 상이한 크기의 현재 블록에 대해 상기 이웃 블록 패턴 공식에 의해 나열된 9개 미만의 이웃 블록이 제공되며,
상기 이웃 블록 위치는, 현재 블록 크기에 의존하는 고정된 이웃 블록 위치를 나열하는 룩업 테이블을 사용하지 않고 결정되는
시스템.
- 명령어가 저장되어 있는 컴퓨터 판독가능 매체로서,
상기 명령어는 실행될 때 컴퓨팅 디바이스로 하여금,
복수의 픽셀 데이터 프레임들을 수신하는 것과,
현재 프레임 상의 현재 블록과 참조 프레임 상의 참조 블록 사이에서 연장되는 적어도 하나의 모션 벡터 후보를 결정하는 것
에 의해 동작하게 하고,
상기 현재 블록은 다양한 사용 가능한 크기 중 하나로 대안적으로 제공되고,
상기 결정하는 것은,
상기 현재 블록에 대한 적어도 하나의 이웃 블록 좌표를 계산하는 이웃 블록 패턴 공식을 사용하되, 이웃 블록에 대한 상기 현재 블록의 크기에 상관없이 실질적으로 동일한 상기 이웃 블록 패턴 공식을 사용하여, 상기 현재 블록과 동일한 프레임 상에 있는 공간 이웃 블록 위치를 결정하는 것- 상기 위치에서의 공간 이웃 블록은 동일한 단일의 고정 크기를 가짐 - 과,
결정된 이웃 블록 위치에 있는 이웃 블록들의 모션 벡터들을 사용하여, 상기 현재 블록의 적어도 하나의 모션 벡터를 결정하는 것을 포함하며,
이웃 블록을 갖도록 허용된 블록 영역은 상기 현재 블록의 상측으로 인접한 단일 행과 상기 현재 블록의 바로 좌측으로 최대 3개의 열을 포함하는,
컴퓨터 판독가능 매체.
- 제 22 항에 있어서,
상기 명령어는 상기 컴퓨팅 디바이스로 하여금, 8 × 8보다 작은 서브 블록 크기를 갖는 현재 블록에 대해 8 × 8 이웃 블록으로부터의 8 × 8 블록 기반 모션 벡터를 사용함으로써 동작하게 하고,
상기 이웃 블록을 갖도록 허용된 블록 영역은, 상기 현재 블록에 1 블록을 더한 것의 상단 길이를 따라 연속적인 8 × 8 픽셀 블록의 단일 라인 버퍼에 의해 저장된 데이터를 가지고 상기 현재 블록에 인접한, 상기 단일 행 및 단일 열을 선택적으로 포함하고,
상기 명령어는 상기 컴퓨팅 디바이스로 하여금,
8 x 8 픽셀 블록 기반 모션 벡터만을 잠재적 이웃 블록 모션 벡터로서 버퍼링하는 것과,
최대 9개의 공간 이웃 모션 벡터를 결정하는 것과,
상기 모션 벡터로부터 상기 현재 블록의 모션 벡터를 결정하기 위해 사용될 최대 2개의 후보 모션 벡터를 결정하는 것
에 의해 동작하게 하고,
상기 이웃 블록 패턴 공식은 상기 현재 블록의 폭, 또는 높이, 또는 폭과 높이 모두를 사용하여,
적어도 하나의 이웃 블록의 행 또는 열 위치를 결정하는 것과,
상기 현재 블록의 코너에 이웃 블록을 정렬하는 것과,
상기 현재 블록의 폭 또는 높이의 중앙에 이웃 블록을 정렬하는 것
중 적어도 하나를 수행하고,
상기 이웃 블록 패턴 공식은 디코더에서 제공되어, 상기 디코더에서 프레임 상의 이웃 블록 위치를 결정하기 위해 사용되고,
상기 명령어는 상기 컴퓨팅 디바이스로 하여금,
잠재적 이웃 블록 영역의 적어도 하나의 열의 모션 벡터를 온-칩 메모리 상에 저장하고, 잠재적 이웃 블록 영역의 단일 행의 모션 벡터를 온-칩 메모리가 아닌 라인 버퍼에 저장하는 것과,
상기 이웃 블록 패턴 공식이 현재 블록을 포함하는 64 × 64 픽셀 수퍼블록으로부터 연장되는 상단 영역의 우측으로 바깥쪽에 있는 위치에 상기 이웃 블록을 배치할 때, 블록 위치가 상기 현재 블록에 대한 이웃 블록으로서 이용될 수 없음을 나타내는 것
에 의해 동작하게 하는
컴퓨터 판독가능 매체.
- 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여 상기 컴퓨팅 디바이스로 하여금 제 1 항, 제 2 항 및 제 5 항 내지 제 12 항 중 어느 한 항에 따른 방법을 수행하게 하는 복수의 명령어를 포함하는 적어도 하나의 머신 판독가능 매체.
- 제 1 항, 제 2 항 및 제 5 항 내지 제 12 항 중 어느 한 항에 따른 방법을 수행하는 수단을 포함하는 장치.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/085385 WO2017210915A1 (en) | 2016-06-09 | 2016-06-09 | Method and system of motion estimation with neighbor block pattern for video coding |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190015218A KR20190015218A (ko) | 2019-02-13 |
KR102587638B1 true KR102587638B1 (ko) | 2023-10-10 |
Family
ID=60577484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187032387A KR102587638B1 (ko) | 2016-06-09 | 2016-06-09 | 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템 |
Country Status (5)
Country | Link |
---|---|
US (2) | US10873755B2 (ko) |
EP (1) | EP3469794B1 (ko) |
KR (1) | KR102587638B1 (ko) |
CN (1) | CN109155856B (ko) |
WO (1) | WO2017210915A1 (ko) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109155856B (zh) * | 2016-06-09 | 2023-10-24 | 英特尔公司 | 用于视频编解码的利用近邻块模式的运动估计的方法和系统 |
CN109496431A (zh) * | 2016-10-13 | 2019-03-19 | 富士通株式会社 | 图像编码/解码方法、装置以及图像处理设备 |
EP3451665A1 (en) * | 2017-09-01 | 2019-03-06 | Thomson Licensing | Refinement of internal sub-blocks of a coding unit |
WO2019124205A1 (ja) | 2017-12-18 | 2019-06-27 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 符号化装置、復号装置、符号化方法及び復号方法 |
US10798407B2 (en) * | 2018-06-01 | 2020-10-06 | Tencent America LLC | Methods and apparatus for inter prediction with a reduced above line buffer in video coding |
US10511852B1 (en) * | 2018-07-13 | 2019-12-17 | Tencent America LLC | Method and apparatus for video coding |
WO2020058896A1 (en) | 2018-09-19 | 2020-03-26 | Beijing Bytedance Network Technology Co., Ltd. | Intra mode coding based on history information |
WO2020143774A1 (en) | 2019-01-10 | 2020-07-16 | Beijing Bytedance Network Technology Co., Ltd. | Merge with mvd based on geometry partition |
CN115004707A (zh) | 2019-12-19 | 2022-09-02 | 抖音视界(北京)有限公司 | 自适应颜色变换和量化参数之间的相互作用 |
US11425423B1 (en) | 2022-03-10 | 2022-08-23 | Yendo Hu | Memory storage for motion estimation and visual artifact redcution |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110013853A1 (en) * | 2009-07-17 | 2011-01-20 | Himax Technologies Limited | Approach for determining motion vector in frame rate up conversion |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5436666A (en) * | 1993-05-21 | 1995-07-25 | Intel Corporation | Limited-domain motion estimation/compensation for video encoding/decoding |
EP1294194B8 (en) * | 2001-09-10 | 2010-08-04 | Texas Instruments Incorporated | Apparatus and method for motion vector estimation |
CN100591138C (zh) * | 2002-11-25 | 2010-02-17 | 松下电器产业株式会社 | 图像编码方法及其装置、图像解码方法及其装置 |
KR100631768B1 (ko) * | 2004-04-14 | 2006-10-09 | 삼성전자주식회사 | 비디오 코딩에서 프레임간 예측방법 및 비디오 인코더와,비디오 디코딩방법 및 비디오 디코더 |
WO2007104266A1 (en) * | 2006-03-16 | 2007-09-20 | Huawei Technologies Co., Ltd. | Method and apparatus for realizing adaptive quantization in encoding process |
CN101800893B (zh) * | 2009-02-06 | 2013-01-16 | 宏碁股份有限公司 | 执行运动估计的低功率高性能视频编码方法 |
US8320455B2 (en) * | 2009-03-05 | 2012-11-27 | Qualcomm Incorporated | System and method to process motion vectors of video data |
KR101522850B1 (ko) * | 2010-01-14 | 2015-05-26 | 삼성전자주식회사 | 움직임 벡터를 부호화, 복호화하는 방법 및 장치 |
US9300970B2 (en) * | 2010-07-09 | 2016-03-29 | Samsung Electronics Co., Ltd. | Methods and apparatuses for encoding and decoding motion vector |
US9609349B2 (en) * | 2010-12-14 | 2017-03-28 | M & K Holdings Inc. | Apparatus for decoding a moving picture |
CN102986224B (zh) * | 2010-12-21 | 2017-05-24 | 英特尔公司 | 用于增强的解码器侧运动向量导出处理的系统及方法 |
CN103250417B (zh) * | 2011-02-09 | 2017-06-09 | Lg电子株式会社 | 编码和解码图像的方法及使用该方法的设备 |
KR20110111339A (ko) | 2011-08-23 | 2011-10-11 | 한국전자통신연구원 | 화면내 예측 시스템에서 최적 모드를 예측하는 장치 및 방법 |
EP2863631A4 (en) * | 2012-07-02 | 2016-03-16 | Samsung Electronics Co Ltd | METHOD AND DEVICE FOR PREDICTING MOTION VECTORS FOR CODING OR DECODING VIDEO CONTENT |
WO2014058796A1 (en) * | 2012-10-08 | 2014-04-17 | Google Inc | Method and apparatus for video coding using reference motion vectors |
EP3018907A4 (en) * | 2013-07-12 | 2017-02-22 | Samsung Electronics Co., Ltd. | Method for predicting disparity vector based on blocks for apparatus and method for inter-layer encoding and decoding video |
GB2521606A (en) | 2013-12-20 | 2015-07-01 | Canon Kk | Method and apparatus for transition encoding in video coding and decoding |
WO2015107887A1 (ja) * | 2014-01-15 | 2015-07-23 | 日本電気株式会社 | 動きベクトル探索装置、動きベクトル探索方法、及び動きベクトル探索プログラムを記憶する記録媒体 |
US10230980B2 (en) * | 2015-01-26 | 2019-03-12 | Qualcomm Incorporated | Overlapped motion compensation for video coding |
CN115002458B (zh) * | 2015-06-05 | 2024-12-27 | 杜比实验室特许公司 | 图像编码和解码方法和图像解码设备 |
CN109155856B (zh) * | 2016-06-09 | 2023-10-24 | 英特尔公司 | 用于视频编解码的利用近邻块模式的运动估计的方法和系统 |
-
2016
- 2016-06-09 CN CN201680085633.4A patent/CN109155856B/zh active Active
- 2016-06-09 WO PCT/CN2016/085385 patent/WO2017210915A1/en unknown
- 2016-06-09 US US16/300,290 patent/US10873755B2/en active Active
- 2016-06-09 EP EP16904367.6A patent/EP3469794B1/en active Active
- 2016-06-09 KR KR1020187032387A patent/KR102587638B1/ko active IP Right Grant
-
2020
- 2020-11-10 US US17/094,742 patent/US11616968B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110013853A1 (en) * | 2009-07-17 | 2011-01-20 | Himax Technologies Limited | Approach for determining motion vector in frame rate up conversion |
Also Published As
Publication number | Publication date |
---|---|
WO2017210915A1 (en) | 2017-12-14 |
EP3469794A4 (en) | 2020-03-04 |
US20190132605A1 (en) | 2019-05-02 |
US20210099727A1 (en) | 2021-04-01 |
EP3469794A1 (en) | 2019-04-17 |
CN109155856A (zh) | 2019-01-04 |
KR20190015218A (ko) | 2019-02-13 |
US10873755B2 (en) | 2020-12-22 |
CN109155856B (zh) | 2023-10-24 |
EP3469794B1 (en) | 2022-04-27 |
US11616968B2 (en) | 2023-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102587638B1 (ko) | 비디오 코딩을 위해 이웃 블록 패턴을 이용하는 모션 추정 방법 및 시스템 | |
US11930159B2 (en) | Method and system of video coding with intra block copying | |
US11082706B2 (en) | Method and system of video coding with a multi-pass prediction mode decision pipeline | |
US10827186B2 (en) | Method and system of video coding with context decoding and reconstruction bypass | |
JP6334006B2 (ja) | ビデオ符号化用の高コンテンツ適応型品質回復フィルタ処理のためのシステムおよび方法 | |
US11223831B2 (en) | Method and system of video coding using content based metadata | |
CN107005697B (zh) | 用于视频编解码的使用基于查找表的概率更新的熵编解码的方法与系统 | |
US20170208341A1 (en) | System and method of motion estimation for video coding | |
US9532048B2 (en) | Hierarchical motion estimation employing nonlinear scaling and adaptive source block size | |
US20140254678A1 (en) | Motion estimation using hierarchical phase plane correlation and block matching | |
US10666946B2 (en) | Method and system of video coding using display modification input | |
US20210321093A1 (en) | Method and system of video coding with efficient intra block copying | |
CN107113435B (zh) | 分区模式和变换尺寸确定方法、装置、系统及介质 | |
KR101425286B1 (ko) | 모션 추정을 위한 완전한 서브 매크로블록 형상 후보 저장 및 복구 프로토콜 | |
US10341664B2 (en) | Configurable intra coding performance enhancements | |
EP2839654A1 (en) | Performance and bandwidth efficient fractional motion estimation |
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 |