본 출원은 인터레이스형 비디오의 효율적인 압축 및 압축 해제를 위한 기술 및 도구에 관한 것이다. 여러가지 기술된 실시예들에서, 비디오 인코더 및 디코더는 양방향 예측된 인터레이스형 비디오 프레임을 인코딩 및 디코딩하는 기술, 및 서로 다른 계층 또는 레벨(예를 들어, 시퀀스 레벨, 프레임 레벨, 필드 레벨, 매크로블록 레벨 및/또는 블록 레벨)을 포함하는 비트 스트림 포맷 또는 신택스와 함께 사용하기 위한 대응하는 시그널링 기술을 포함한다.
본 명세서에 기술된 구현들에 대한 여러가지 대안이 가능하다. 예를 들어, 플로우차트도를 참조하여 기술된 기술들은 플로우차트에 도시된 단계들의 순서를 변경함으로써, 어떤 단계를 반복 또는 생략함으로써, 기타 등등에 의해 달라질 수 있다. 다른 예로서, 어떤 구현이 특정의 매크로블록 포맷과 관련하여 기술되어 있지만, 다른 포맷도 사용될 수 있다. 게다가, 양방향 예측을 참조하여 기술된 기술 및 도구는 또한 다른 유형의 예측에 적용가능할 수 있다.
여러가지 기술 및 도구는 조합하여 또는 독립적으로 사용될 수 있다. 서로 다른 실시예들은 기재된 기술 및 도구 중 하나 이상을 구현한다. 본 명세서에 기재된 어떤 기술 및 도구는 비디오 인코더 또는 디코더에서 사용될 수 있거나 또는 어떤 다른 시스템에서는 비디오 인코딩 또는 디코딩으로 특별히 제한되지 않는다.
I. 컴퓨팅 환경
도 20은 기재된 실시예들 중 몇개가 구현될 수 있는 적당한 컴퓨팅 환경(2000)의 일반화된 예를 나타낸 것이다. 이들 기술 및 도구가 다양한 범용 또는 전용 컴퓨팅 환경에서 구현될 수 있기 때문에, 컴퓨팅 환경(2000)은 사용 또는 기능의 범위에 관하여 어떤 제한을 암시하기 위한 것이 아니다.
도 20을 참조하면, 컴퓨팅 환경(2000)은 적어도 하나의 프로세싱 유닛(2010) 및 메모리(2020)를 포함한다. 도 20에서, 이 가장 기본적인 구성(2030)은 점선 안에 포함되어 있다. 프로세싱 유닛(2010)은 컴퓨터 실행가능 명령어를 실행하고 또 실제(real) 또는 가상(virtual) 프로세서일 수 있다. 멀티-프로세싱 시스템에서는, 처리 능력을 향상시키기 위해 다수의 프로세싱 유닛이 컴퓨터 실행가능 명령어를 실행한다. 메모리(2020)는 휘발성 메모리(예를 들어, 레지스터, 캐쉬, RAM), 비휘발성 메모리(예를 들어, ROM, EEPROM, 플래쉬 메모리, 기타), 또는 이 둘의 어떤 조합일 수 있다. 메모리(2020)는 인터레이스형 비디오 프레임의 양방향 예측으로 비디오 인코더 또는 디코더를 구현하는 소프트웨어(2080)를 저장한다.
컴퓨팅 환경은 부가의 특징을 가질 수 있다. 예를 들어, 컴퓨팅 환경(2000)은 스토리지(2040), 하나 이상의 입력 장치(2050), 하나 이상의 출력 장치(2060), 및 하나 이상의 통신 연결(2070)을 포함한다. 버스, 콘트롤러, 또는 네트워크 등의 상호 연결 메카니즘(도시 생략)은 컴퓨팅 환경(2000)의 컴포넌트들을 상호 연결시킨다. 일반적으로, 오퍼레이팅 시스템 소프트웨어(도시 생략)는 컴퓨팅 환경(2000)에서 실행되는 다른 소프트웨어를 위한 오퍼레이팅 환경을 제공하고, 컴퓨팅 환경(2000)의 컴포넌트들의 활동을 조정한다.
스토리지(2040)는 분리형 또는 비분리형일 수 있고, 자기 디스크, 자기 테이프 또는 카세트, CD-ROM, DVD 또는 정보를 저장하는 데 사용될 수 있고 또 컴퓨팅 환경(2000) 내에서 액세스될 수 있는 임의의 다른 매체를 포함한다. 스토리지(2040)는 비디오 인코더 또는 디코더를 구현하는 소프트웨어(2080)에 대한 명령어를 저장한다.
입력 장치(들)(2050)는 키보드, 마우스, 펜, 또는 트랙볼 등의 터치 입력 장치, 음성 입력 장치, 스캐닝 장치, 또는 컴퓨팅 환경(2000)으로의 입력을 제공하는 다른 장치일 수 있다. 오디오 또는 비디오 인코딩의 경우, 입력 장치(들)(2050)는 사운드 카드, 비디오 카드, TV 튜너, 또는 아날로그 또는 디지털 형태로 오디오 또는 비디오 입력을 받아들이는 유사한 장치, 또는 오디오 또는 비디오 샘플을 컴퓨팅 환경(2000)으로 읽어들이는 CD-ROM 또는 CD-RW일 수 있다. 출력 장치(들)(2060)는 디스플레이, 프린터, 스피커, CD-라이터, 또는 컴퓨팅 환경(2000)으로부터의 출력을 제공하는 다른 장치일 수 있다.
통신 연결(들)(2070)은 통신 매체를 통해 다른 컴퓨팅 개체로의 통신을 가능하게 해준다. 통신 매체는 변조된 데이터 신호로 컴퓨터 실행가능 명령어, 오디오 또는 비디오 입력 또는 출력, 또는 기타 데이터 등의 정보를 전달한다. 변조된 데이터 신호는 그의 특성 중 하나 이상이 정보를 그 신호에 인코딩하는 방식으로 설정 또는 변경된 신호를 말한다. 제한이 아닌 예로서, 통신 매체는 전기, 광학, RF, 적외선, 음향 또는 다른 반송파로 구현되는 유선 또는 무선 기술을 포함한다.
이들 기술 및 도구는 컴퓨터 판독가능 매체의 일반적인 관점에서 기술될 수 있다. 컴퓨터 판독가능 매체는 컴퓨팅 환경 내에서 액세스될 수 있는 임의의 이용가능한 매체일 수 있다. 제한이 아닌 예로서, 컴퓨팅 환경(2000)에서, 컴퓨터 판독가능 매체는 메모리(2020), 스토리지(2040), 통신 매체, 및 임의의 상기한 것의 조합을 포함한다.
이들 기술 및 도구는 컴퓨팅 환경에서 타겟 실제 또는 가상 프로세서 상에서 실행되고 있는, 프로그램 모듈에 포함된 것 등의 컴퓨터 실행가능 명령어의 일반적인 관점에서 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정의 작업을 수행하 거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 라이브러리, 객체, 클래스, 컴포넌트, 데이터 구조, 기타 등등을 포함한다. 프로그램 모듈의 기능은 여러가지 환경에서 원하는 바에 따라 프로그램 모듈들 간에 결합 또는 분리될 수 있다. 프로그램 모듈의 컴퓨터 실행가능 명령어는 로컬 또는 분산 컴퓨팅 환경 내에서 실행될 수 있다.
설명을 위해, 상세한 설명은 컴퓨팅 환경에서의 컴퓨터 동작을 기술하기 위해 "추정", "보상", "예측" 및 "적용" 등의 용어를 사용한다. 이들 용어는 컴퓨터에 의해 수행되는 동작들에 대한 고도의 추상화이며, 사람에 의해 수행되는 행동과 혼동해서는 안된다. 이들 용어에 대응하는 실제 컴퓨터 동작은 구현에 따라 달라진다.
II. 일반화된 비디오 인코더 및 디코더
도 21은 어떤 기술된 실시예들이 구현될 수 있는 일반화된 비디오 인코더 시스템(2100)의 블록도이다. 도 22은 어떤 기술된 실시예들이 구현될 수 있는 비디오 디코더 시스템(2200)의 블록도이다.
인코더(2100)와 디코더(2200) 내의 모듈들 간에 도시된 관계는 인코더 및 디코더에서의 정보의 일반적인 흐름을 가리키며, 간단함을 위해 다른 관계는 나타내지 않았다. 상세하게는, 도 21 및 도 22은 보통 비디오 시퀀스, 픽처, 매크로블록, 블록, 기타 등등을 위해 사용되는 인코더 설정, 모드, 테이블, 기타 등등을 가리키는 부수적인 정보를 나타내지 않았다. 이러한 부수적인 정보는 일반적으로 부 수적인 정보의 엔트로피 인코딩 후에 출력 비트스트림으로 전송된다. 출력 비트스트림의 포맷은 윈도즈 미디어 비디오(Windows Media Video) 버전 9 또는 다른 포맷일 수 있다.
인코더(2100) 및 디코더(2200)는 비디오 프레임, 비디오 필드, 또는 프레임과 필드의 조합일 수 있는 비디오 픽처를 처리한다. 픽처 및 매크로블록 레벨에서의 비트스트림 신택스(syntax) 및 시맨틱스(semantics)는 프레임 또는 필드가 사용되는지에 의존할 수 있다. 또한, 매크로블록 구성 및 전체 타이밍에 대한 변화가 있을 수 있다. 인코더(2100) 및 디코더(2200)는 블록-기반이고, 프레임의 경우 4:2:0 매크로블록 포맷을 사용하고, 각각의 매크로블록은 4개의 8x8 루미넌스 블록(때로는 하나의 16x16 매크로블록으로서 취급됨) 및 2개의 8x8 크로미넌스 블록을 포함한다. 필드의 경우, 동일하거나 다른 매크로블록 구성 및 포맷이 사용될 수 있다. 8x8 블록은 다른 단계에서, 예를 들어 주파수 변환 및 엔트로피 인코딩 단계에서 추가로 세분될 수 있다. 예시적인 비디오 프레임 구성은 이하에서 보다 상세히 기술된다. 다른 대안으로서, 인코더(2100) 및 디코더(2200)는 객체-기반이거나, 다른 매크로블록 또는 블록 포맷을 사용하거나, 또는 8x8 블록 및 16x16 매크로블록과 다른 크기 또는 구성의 픽셀 세트에 대해 동작을 수행한다.
원하는 구현 및 압축 유형에 따라, 인코더 또는 디코더의 모듈은 부가, 생략, 다수의 모듈로 분할, 다른 모듈과 결합, 및/또는 유사한 모듈로 대체될 수 있다. 대체 실시예에서, 다른 모듈 및/또는 다른 구성의 모듈을 갖는 인코더 또는 디코더는 원하는 기술 중 하나 이상을 수행한다.
A. 비디오 프레임 구성
어떤 구현에서, 인코더(2100) 및 디코더(2200)는 다음과 같이 구성된 비디오 프레임을 처리한다. 프레임은 비디오 신호의 공간 정보의 라인들을 포함한다. 순차 비디오의 경우, 이들 라인은 한 순간에서 시작하여 연속한 라인들을 통해 계속하여 프레임의 하부에 이르는 샘플들을 포함한다. 순차 비디오 프레임은 도 23에 도시한 매크로블록(2300) 등의 매크로블록으로 분할된다. 매크로블록(2300)은 4개의 8x8 루미넌스 블록(Y1 내지 Y4) 및 4개의 루미넌스 블록과 동일 장소에 있지만 종래의 4:2:0 매크로블록 포맷에 따라 수평 및 수직으로 1/2 해상도인 2개의 8x8 크로미넌스 블록을 포함한다. 8x8 블록은 다른 단계에서, 예를 들어 주파수 변환(예를 들어, 8x4, 4x8, 또는 4x4 DCT) 및 엔트로피 인코딩 단계에서 추가로 세분될 수 있다. 순차 I-프레임은 인트라-코딩된 순차 비디오 프레임을 말한다. 순차 P-프레임은 전방 예측을 사용하여 코딩된 순차 비디오 프레임을 말하며, 순차 B-프레임은 양방향 예측을 사용하여 코딩된 순차 비디오 프레임을 말한다. 순차 P-프레임 및 B-프레임은 인트라-코딩된 매크로블록은 물론 다른 유형의 예측 매크로블록을 포함할 수 있다.
인터레이스형 비디오 프레임은 프레임의 2회 스캔으로 이루어진다 - 하나는 프레임의 짝수 라인(상부 필드)을 구성하고 다른 하나는 프레임의 홀수 라인(하부 필드)을 구성한다. 이 2개의 필드는 2개의 서로 다른 기간을 나타내거나 이들은 동일한 기간으로부터 온 것일 수 있다. 도 24a는 인터레이스형 비디오 프레임(2400)의 좌측 상부 부분에서의 상부 필드 및 하부 필드의 교대하는 라인을 포함하는 인터레이스형 비디오 프레임(2400)의 일부를 나타낸 것이다.
도 24b는 프레임(2430)으로서 인코딩/디코딩하기 위해 구성된 도 24a의 인터레이스형 비디오 프레임(2400)을 나타낸 것이다. 인터레이스형 비디오 프레임(2400)은 도 23에 도시한 바와 같이 4:2:0 포맷을 사용하는 매크로블록(2431, 2432) 등의 매크로블록들로 분할되어 있다. 루미넌스 평면에서, 각각의 매크로블록(2431, 2432)은 총 16 라인을 위해 하부 필드로부터의 8 라인과 교대하는 상부 필드로부터의 8 라인을 포함하며, 각 라인은 16 픽셀 길이이다. (매크로블록(2431, 2432) 내에서의 루미넌스 블록 및 크로미넌스 블록의 실제 구성 및 배치는 도시되어 있지 않으며, 실제로 다른 인코딩 결정에 대해서 다를 수 있다.) 주어진 매크로블록 내에서, 상부 필드 정보 및 하부 필드 정보는 임의의 다양한 단계에서 공동으로 또는 개별적으로 코딩될 수 있다. 인터레이스형 I-프레임은 인터레이스형 비디오 프레임의 2개의 인트라-코딩된 필드이며, 여기서 매크로블록은 이 2개의 필드에 대한 정보를 포함한다. 인터레이스형 P-프레임은 전방 예측을 사용하여 코딩된 인터레이스형 비디오 프레임의 2개의 필드이고, 인터레이스형 B-프레임은 양방향 예측을 사용하여 코딩된 인터레이스형 비디오 프레임의 2개의 필드이며, 여기서 매크로블록은 이 2개의 필드에 대한 정보를 포함한다. 인터레이스형 P-프레임 및 B-프레임은 인트라-코딩된 매크로블록은 물론 다른 유형의 예측 매크로블록을 포함할 수 있다.
도 24c는 필드(2460)로서 인코딩/디코딩하기 위해 구성된 도 24a의 인터레이스형 비디오 프레임(2400)을 나타낸 것이다. 인터레이스형 비디오 프레임(2400)의 2개의 필드 각각은 매크로블록으로 분할된다. 상부 필드는 매크로블록(2461) 등의 매크로블록으로 분할되고, 하부 필드는 매크로블록(2462) 등의 매크로블록으로 분할된다. (다시 말하면, 매크로블록은 도 23에 도시한 바와 같이 4:2:0 포맷을 사용하며, 매크로블록 내에서의 루미넌스 블록 및 크로미넌스 블록의 구성 및 배치는 도시되어 있지 않다) 루미넌스 평면에서, 매크로블록(2461)은 상부 필드로부터의 16 라인을 포함하고, 매크로블록(2462)은 하부 필드로부터의 16 라인을 포함하며, 각 라인은 16 픽셀 길이이다. 인터레이스형 I-필드는 인터레이스형 비디오 프레임의 단일의 별도로 표현된 필드이다. 인터레이스형 P-필드는 전방 예측을 사용하여 코딩된 인터레이스형 비디오 프레임의 단일의 별도로 표현된 필드이고, 인터레이스형 B-필드는 양방향 예측을 사용하여 코딩된 인터레이스형 비디오 프레임의 단일의 별도로 표현된 필드이다. 인터레이스형 P-필드 및 B-필드는 인트라-코딩된 매크로블록은 물론 다른 유형의 예측 매크로블록을 포함할 수 있다.
용어 픽처는 일반적으로 소스, 코딩된 또는 재구성된 이미지 데이터를 말한다. 순차 비디오의 경우, 픽처는 순차 비디오 프레임이다. 인터레이스형 비디오의 경우, 픽처는 문맥에 따라 인터레이스형 비디오 프레임, 프레임의 상부 필드, 또는 프레임의 하부 필드를 말한다.
다른 대안으로서, 인코더(2100) 및 디코더(2200)는 객체-기반이거나, 다른 매크로블록 또는 블록 포맷을 사용하거나, 또는 8x8 블록 및 16x16 매크로블록과 다른 크기 또는 구성의 픽셀 세트에 대한 연산을 수행한다.
B. 비디오 인코더
도 21은 일반화된 비디오 인코더 시스템(2100)의 블록도이다. 인코더 시스템(2100)은 현재 픽처(2105)(예를 들어, 순차 비디오 프레임, 인터레이스형 비디오 프레임, 또는 인터레이스형 비디오 프레임의 필드)를 포함하는 비디오 픽처 시퀀스를 수신하고, 압축된 비디오 정보(2195)를 출력으로서 생성한다. 비디오 인코더의 특정의 실시예는 일반적으로 일반화된 인코더(2100)의 변형 또는 보완된 버전을 사용한다.
인코더 시스템(2100)은 예측 픽처 및 키 픽처를 압축한다. 설명을 위해, 도 21은 인코더 시스템(2100)을 통한 키 픽처의 경로 및 예측 픽처의 경로를 나타낸다. 인코더 시스템(2100)의 컴포넌트들 중 다수는 키 픽처 및 예측 픽처 둘다를 압축하기 위해 사용된다. 이들 컴포넌트에 의해 수행되는 정확한 동작은 압축되고 있는 정보의 유형에 따라 다를 수 있다.
예측 픽처(예를 들어, 순차 p-프레임 또는 b-프레임, 인터레이스형 p-필드 또는 b-필드 또는 인터레이스형 p-프레임 또는 b-프레임)는 하나 이상의 다른 픽처(일반적으로 참조 픽처 또는 앵커라고 함)로부터의 예측(또는 차이)의 관점에서 표현된다. 예측 잔차는 예측된 것과 원래의 픽처 간의 차이를 말한다. 이와 반대로, 키 픽처(예를 들어, 순차 I-프레임, 인터레이스형 I-필드 또는 인터레이스형 I-프레임)는 다른 픽처를 참조하지 않고 압축된다.
현재 픽처(2105)가 전방 예측 픽처인 경우, 움직임 추정기(2110)는 예를 들어 픽처 스토어(2120)에 버퍼링된 재구성된 이전의 픽처(2125)인 하나 이상의 참조 픽처에 대해 현재 픽처(2105)의 매크로블록 또는 다른 픽셀 세트의 움직임을 추정한다. 현재 픽처(2105)가 양방향 예측 픽처인 경우, 움직임 추정기(2110)는 (예를 들어, 인터레이스형 B-필드의 경우) 최대 4개의 재구성된 참조 픽처에 대해 현재 픽처(2105)에서의 움직임을 추정한다. 일반적으로, 움직임 추정기는 하나 이상의 시간상 이전의 참조 픽처 및 하나 이상의 시간상 미래의 참조 픽처에 대해 B-픽처에서의 움직임을 추정한다. 따라서, 인코더 시스템(2100)은 다수의 참조 픽처에 대해 개별적인 스토어(2120, 2122)를 사용할 수 있다. 순차 B-프레임에 관한 더 많은 정보를 위해서는, 2003년 7월 18일자로 출원된 발명의 명칭이 "비디오 프레임의 최신 양방향 예측 코딩(Advanced Bi-Directional Predictive Coding of Video Frames)"인 미국 특허 출원 제10/622,378호를 참조하기 바란다.
움직임 추정기(2110)는 픽셀별로, ½ 픽셀별로, ¼ 픽셀별로 또는 다른 증분으로 움직임을 추정할 수 있으며, 픽처별로 또는 다른 방식으로 움직임 추정의 해상도를 전환할 수 있다. 움직임 추정기(2110)(및 보상기(2130))는 또한 프레임별로 또는 다른 방식으로 참조 픽처 픽셀 보간의 유형들 간에(예를 들어, 바이큐빅(bicubic)과 바이리니어(bilinear) 간에) 전환할 수 있다. 움직임 추정의 해상도는 수평 및 수직에서 동일하거나 다를 수 있다. 움직임 추정기(2110)는 차분 움직임 벡터 정보 등의 움직임 정보(2115)를 부수적인 정보로서 출력한다. 인코더(2100)는 예를 들어 움직임 벡터에 대한 하나 이상의 예측자를 계산함으로써, 움직임 벡터와 예측자 간의 차분을 계산함으로써 또 차분을 엔트로피 코딩함으로써 움직임 정보(2125)를 인코딩한다. 움직임 벡터를 재구성하기 위해, 움직임 보상기(2130)는 예측자를 차분 움직임 벡터 정보와 합성한다. 인터레이스형 B-필드 및 인터레이스형 B-프레임에 대한 움직임 벡터 예측자를 계산, 차분 움직임 벡터를 계산, 및 움직임 벡터를 재구성하는 여러가지 기술들이 이하에 기술되어 있다.
움직임 보상기(2130)는 움직임-보상된 현재 픽처(2135)를 형성하기 위해 재구성된 움직임 벡터를 재구성된 픽처(들)(2125)에 적용한다. 그렇지만, 예측은 좀처럼 완벽하지 않으며, 움직임 보상된 현재 픽처(2135)와 원래의 현재 픽처(2105) 간의 차이가 예측 잔차(2145)이다. 픽처의 나중의 재구성 동안에, 예측 잔차(2145)는 원래의 현재 픽처(2105)에 더 가까운 재구성된 픽처를 획득하기 위해 움직임 보상된 현재 픽처(2135)에 가산된다. 그렇지만, 유손실 압축에서, 어떤 정보는 여전히 원래의 현재 픽처(2105)로부터 손실되어 있다. 다른 대안으로서, 움직임 추정기 및 움직임 보상기는 다른 유형의 움직임 추정/보상을 적용한다.
주파수 변환기(2160)는 공간 영역 비디오 정보를 주파수 영역(즉, 스펙트럼) 데이터로 변환한다. 블록-기반 비디오 픽처의 경우, 주파수 변환기(2160)는 DCT 또는 DCT의 변형을 픽셀 데이터 또는 예측 잔차 데이터의 블록에 적용하여 주파수 변환 계수의 블록을 생성한다. 다른 대안으로서, 주파수 변환기(2160)는 푸리에 변환 등의 다른 종래의 주파수 변환을 적용하거나 웨이블렛(wavelet) 또는 서브대역(subband) 분석을 사용한다. 주파수 변환기(2160)는 8x8, 8x4, 4x8, 4x4 또는 다른 크기 주파수 변환을 적용할 수 있다.
이어서, 양자화기(2170)는 스펙트럼 데이터 계수의 블록을 양자화한다. 양자화기는 균일한 스칼라 양자화를, 픽처별로 또는 다른 방식으로 변하는 스텝-크기를 갖는 스펙트럼 데이터에 적용한다. 다른 대안으로서, 양자화기는 다른 유형의 양자화, 예를 들어 비균일(non-uniform), 벡터(vector) 또는 비적응적(non-adaptive) 양자화를 스펙트럼 데이터 계수에 적용하거나 주파수 변환을 사용하지 않는 인코더 시스템에서 공간 영역 데이터를 직접 양자화한다. 적응적 양자화 이외에, 인코더(2100)는 레이트 제어를 위해 프레임 누락(frame dropping), 적응적 필터링, 또는 다른 기술을 사용할 수 있다.
인코더(2100)은 어떤 유형의 정보도 갖지 않는(예를 들어, 매크로블록에 대한 움직임 정보도 잔차 정보도 갖지 않는) 매크로블록인 건너뜀 매크로블록(skipped macroblock)에 대해 특수한 시그널링을 사용할 수 있다.
재구성된 현재 픽처가 차후의 움직임 추정/보상을 위해 필요한 경우, 역양자화기(2176)는 양자화된 스펙트럼 데이터 계수에 대해 역양자화를 수행한다. 이어서, 주파수 역변환기(2166)는 주파수 변환기(2160)의 동작의 역을 수행하여, 재구성된 예측 잔차(예측 픽처의 경우) 또는 재구성된 키픽처를 생성한다. 현재 픽처(2105)가 키 픽처인 경우, 재구성된 키 픽처는 재구성된 현재 픽처(도시 생략)로서 취해진다. 현재 픽처(2105)가 예측 픽처인 경우, 재구성된 예측 잔차는 재구성된 현재 픽처를 형성하기 위해 움직임-보상된 현재 픽처(2135)에 가산된다. 픽처 스토어(2120, 2122) 중 하나 또는 둘다는 움직임 보상된 예측에서 사용하기 위한 재구성된 현재 픽처를 버퍼링한다. 어떤 실시예에서, 인코더는 픽처에서의 불연속 및 다른 아티팩트를 적응적으로 평탄화(smooth)하기 위해 재구성된 프레임에 디블록킹 필터(deblocking filter)를 적용한다.
엔트로피 코더(2180)는 양자화기(2170)의 출력은 물론 어떤 부수적인 정보( 예를 들어, 움직임 정보(2115), 양자화 스텝 크기)를 압축한다. 일반적인 엔트로피 코딩 기술은 산술 코딩, 차분 코딩, 허프만 코딩, 런 랭스 코딩, LZ 코딩, 사전 코딩(dictionary coding) 및 이들의 조합을 포함한다. 엔트로피 코더(2180)는 일반적으로 다른 종류의 정보(예를 들어, DC 계수, AC 계수, 다른 종류의 부수적인 정보)에 대해 다른 코딩 기술을 사용하고, 특정의 코딩 기술 내에서의 다수의 코드 테이블 중에서 선택할 수 있다.
엔트로피 코더(2180)는 압축된 비디오 정보(2195)를 멀티플렉서["MUX"](2190)에 제공한다. MUX(2190)는 버퍼를 포함할 수 있으며, 버퍼 레벨 표시자는 레이트 제어를 위해 비트 레이트 적응적 모듈에 피드백될 수 있다. MUX(2190) 이전 또는 이후에, 압축된 비디오 정보(2195)는 네트워크를 통한 전송을 위해 채널 코딩될 수 있다. 채널 코딩은 오차 검출 및 정정 데이터를 압축된 비디오 정보(2905)에 적용할 수 있다.
C. 비디오 디코더
도 22은 일반적인 비디오 디코더 시스템(2200)의 블록도이다. 디코더 시스템(2200)은 압축된 비디오 픽처 시퀀스에 대한 정보(2295)를 수신하고 재구성된 픽처(2205)(예를 들어, 순차 비디오 프레임, 인터레이스형 비디오 프레임, 또는 인터레이스형 비디오 프레임의 필드)를 포함하는 출력을 생성한다. 비디오 디코더의 특정의 실시예들은 일반적으로 일반화된 디코더(2200)의 변형 또는 보완된 버전을 사용한다.
디코더 시스템(2200)은 예측 픽처 및 키 픽처를 압축 해제한다. 설명을 위 해, 도 22은 디코더 시스템(2200)을 통한 키 픽처의 경로 및 전방 예측 픽처의 경로를 나타낸다. 디코더 시스템(2200)의 컴포넌트들 중 다수는 키 픽처 및 예측 픽처 둘다를 압축 해제하는 데 사용된다. 이들 컴포넌트에 의해 수행되는 정확한 동작은 압축 해제 중인 정보의 유형에 따라 다를 수 있다.
DEMUX(2290)는 압축된 비디오 시퀀스에 대한 정보(2295)를 수신하고 수신된 정보를 엔트로피 디코더(2280)가 이용할 수 있게 해준다. DEMUX(2290)는 또한 지터 버퍼 및 다른 버퍼를 포함할 수 있다. DEMUX(2290) 이전 또는 이후에, 압축된 비디오 정보가 채널 디코딩되고 오차 검출 및 정정을 위해 처리될 수 있다.
엔트로피 디코더(2280)는 엔트로피-코딩되고 양자화된 데이터는 물론 엔트로피-코딩된 부수적인 정보(예를 들어, 움직임 정보(2215), 양자화 스텝 크기)를 엔트로피 디코딩한다, 즉 일반적으로 인코더에서 수행된 엔트로피 인코딩의 역을 적용한다. 엔트로피 디코딩 기술은 산술 디코딩, 차분 디코딩, 허프만 디코딩, 런 랭스 디코딩, LZ 디코딩, 사전 디코딩 및 이들의 조합을 포함한다. 엔트로피 디코더(2280)는 다른 종류의 정보(예를 들어, DC 계수, AC 계수, 다른 종류의 부수적인 정보)에 대해 다른 디코딩 기술을 사용하며, 특정의 디코딩 기술 내에서 다수의 코드 테이블 중에서 선택할 수 있다.
디코더(2200)는 예를 들어, 움직임 벡터에 대한 하나 이상의 예측자를 계산하고 차분 움직임 벡터를 엔트로피 디코딩하며 움직임 벡터를 재구성하기 위해 디코딩된 차분 움직임 벡터를 예측자와 합성함으로써, 움직임 정보(2215)를 디코딩한다. 움직임 벡터 예측자를 계산하고 차분 움직임 벡터를 계산하며 인터레이스형 B-필드 및 인터레이스형 B-프레임에 대한 움직임 벡터를 재구성하는 여러가지 기술들에 대해 이하에서 기술한다.
움직임 보상기(2230)는 재구성 중인 픽처(2205)의 예측(2235)을 형성하기 위해 움직임 정보(2215)를 하나 이상의 참조 픽처(2225)에 적용한다. 예를 들어, 움직임 보상기(2230)는 참조 픽처(들)(2225)에서 매크로블록(들)을 찾기 위해 하나 이상의 매크로블록 움직임 벡터를 사용한다. 하나 이상의 픽처 스토어(예를 들어, 픽처 스토어(2220, 2222))는 참조 픽처로서 사용하기 위해 이전의 재구성된 픽처를 저장한다. 일반적으로, B-픽처는 2개 이상의 참조 픽처(예를 들어, 적어도 하나의 시간상 이전의 참조 픽처 및 적어도 하나의 시간상 미래의 참조 픽처)를 갖는다. 따라서, 디코더 시스템(2200)은 다수의 참조 픽처에 대해 개별적인 픽처 스토어(2220, 2222)를 사용할 수 있다. 움직임 보상기(2230)는 픽셀로, 1/2 픽셀로, 1/4 픽셀로 또는 다른 증분으로 움직임을 보상할 수 있고, 또 픽처별로 또는 다른 방식으로 움직임 보상의 해상도를 전환할 수 있다. 움직임 보상기(2230)는 또한 프레임별로 또는 다른 방식으로 참조 픽처 픽셀 보간 유형들 간에(예를 들어, 바이큐빅(bicubic)과 바이리니어(bilinear) 간에) 전환할 수 있다. 움직임 보상의 해상도는 수평 및 수직에서 동일하거나 서로 다를 수 있다. 다른 대안으로서, 움직임 보상기는 다른 유형의 움직임 보상을 적용한다. 움직임 보상기에 의한 예측은 좀처럼 완벽하지 않으며, 따라서 디코더(2200)는 또한 예측 잔차를 재구성한다.
역양자화기(2270)는 엔트로피-디코딩된 데이터를 역양자화한다. 일반적으로, 역양자화기는 픽처별로 또는 다른 방식으로 변하는 스텝-크기로 엔트로피-디코 딩된 데이터에 균일한 스칼라 역양자화를 적용한다. 다른 대안으로서, 역양자화기는 예를 들어 불균일, 벡터 또는 비적응적 양자화 후에 재구성하기 위해 데이터에 다른 유형의 역양자화를 적용하거나 또는 주파수 역변환을 사용하지 않는 디코더 시스템에서 공간 영역 데이터를 직접 역양자화한다.
주파수 역변환기(2260)는 양자화된 주파수 영역 데이터를 공간 영역 비디오 정보로 변환한다. 블록-기반 비디오 픽처의 경우, 주파수 역변환기(2260)는 역 DCT["IDCT"], IDCT의 변형 또는 다른 역 블록 변환을 주파수 변환 계수의 블록에 적용하여, 각각 키 픽처 또는 예측 픽처에 대한 픽셀 데이터 또는 예측 잔차 데이터를 생성한다. 다른 대안으로서, 주파수 역변환기(2260)는 푸리에 역변환 등의 다른 종래의 주파수 역변환을 적용하거나 웨이블렛 또는 서브대역 합성을 사용한다. 주파수 역변환기(2260)는 8x8, 8x4, 4x8, 4x4 또는 다른 크기 주파수 역변환를 적용할 수 있다.
예측 픽처의 경우, 디코더(2200)는 재구성된 픽처(2205)를 형성하기 위해 재구성된 예측 잔차(2245)를 움직임 보상된 예측(2235)와 합성한다. 디코더가 차후의 움직임 보상을 위해 재구성된 픽처(2205)를 필요로 할 때, 픽처 스토어(예를 들어, 픽처 스토어(2220)) 중 하나 또는 둘다는 그 다음 픽처를 예측하는 데 사용하기 위해 재구성된 픽처(2205)를 버퍼링한다. 어떤 실시예에서, 디코더(2200)는 픽처에서의 불연속 및 다른 아티팩트를 적응적으로 평탄화하기 위해 재구성된 픽처에 디블로킹 필터를 적용한다.
III. 인터레이스형 P-필드 및 인터레이스형 P-프레임
일반적인 인터레이스형 비디오 프레임은 서로 다른 때에 스캔된 2개의 필드(예를 들어, 상부 필드 및 하부 필드)로 이루어져 있다. 일반적으로, 필드를 함께 코딩("프레임 모드" 코딩)함으로써 인터레이스형 비디오 프레임의 정적인 영역을 인코딩하는 것이 보다 효율적이다. 반면에, 종종은 필드를 개별적으로 코딩("필드 모드" 코딩)함으로써 인터레이스형 비디오 프레임의 움직이는 영역을 코딩하는 것이 보다 효율적인데, 그 이유는 이 2개의 필드가 서로 다른 움직임을 갖는 경향이 있기 때문이다. 전방 예측 인터레이스형 비디오 프레임은 2개의 개별적인 전방 예측 필드, 즉 인터레이스형 P-필드로서 코딩될 수 있다. 전방 예측 인터레이스형 비디오 프레임에 대해 필드를 개별적으로 코딩하는 것은 예를 들어 인터레이스형 비디오 프레임 전체에 걸쳐 움직임이 많은 경우에, 따라서 필드 간에 많은 차이가 있는 경우에 효율적일 수 있다.
또는, 전방 예측 인터레이스형 비디오 프레임은 필드 코딩 및 프레임 코딩의 혼합을 사용하여 인터레이스형 P-프레임으로서 코딩될 수 있다. 인터레이스형 P-프레임의 매크로블록의 경우, 매크로블록은 상부 및 하부 필드에 대한 픽셀들의 라인을 포함하며, 이 라인들은 프레임-코딩 모드에서는 함께 또는 필드-코딩 모드에서는 개별적으로 코딩될 수 있다.
A. 인터레이스형 P-필드
인터레이스형 P-필드는 하나 이상의 이전에 디코딩된 필드를 참조한다. 예를 들어, 어떤 구현에서, 인터레이스형 P-필드는 하나 또는 2개의 이전에 디코딩된 필드를 참조하는 반면, 인터레이스형 B-필드는 최대 2개의 이전의 참조 필드 및 2개의 미래의 참조 필드(즉, 총 4개의 참조 필드)를 참조한다. (인터레이스형 B-필드에 대한 인코딩 및 디코딩 기술은 이하에서 상세히 기술된다.)
도 25 및 도 26은 2개의 참조 필드를 갖는 인터레이스형 P-필드의 예를 나타낸 것이다. 도 25에서, 현재 필드(2510)는 시간상으로 이전의 인터레이스형 비디오 프레임에서의 상부 필드(2520) 및 하부 필드(2530)를 참조한다. 필드(2540, 2550)는 인터레이스형 B-필드이기 때문에, 이들은 참조 필드로서 사용되지 않는다. 도 26에서, 현재 필드(2610)는 현재 필드(2610)를 포함하는 인터레이스형 비디오 프레임 바로 이전의 인터레이스형 비디오 프레임에서의 상부 필드(2620) 및 하부 필드(2630)를 참조한다. 2-참조 인터레이스형 P-필드에 대한 더 많은 정보에 대해서는, 2004년 5월 27일자로 출원된 발명의 명칭이 "Predicting Motion Vectors for Fields of Forward-predicted Interlaced Video Frames(전방 예측 인터레이스형 비디오 프레임의 필드에 대한 움직임 벡터의 예측)"인 미국 특허 출원 제xx/yyy,zzz호를 참조하기 바란다.
도 27 및 도 28은 하나의 참조 필드를 갖는 인터레이스형 P-필드(즉, 시간상으로 가장 최근의 허용가능 참조 필드)의 예를 나타낸 것이다. 도 27에서, 현재 필드(2710)는 시간상으로 이전의 인터레이스형 비디오 프레임에서의 하부 필드(2730)를 참조하지만, 인터레이스형 비디오 프레임에서의 보다 덜 최근의 상부 필드(2720)를 참조하지는 않는다. 도 27에 도시된 예에서, 필드(2740, 2750)는 인터레이스형 B-필드이고 허용가능 참조 필드가 아니다. 도 28에서, 현재 필드(2810)는 보다 덜 최근의 상부 필드(2820)가 아니라 오히려 현재 필드(2810)를 포함하는 인터레이스형 비디오 프레임 바로 이전의 인터레이스형 비디오 프레임에서의 하부 필드(2830)를 참조한다.
도 29 및 도 30은 두번째로 가장 최근의 허용가능 참조 필드를 사용하는 인터레이스형 P-필드의 예를 나타낸 것이다. 도 29에서, 현재 필드(2910)는 시간상으로 이전의 인터레이스형 비디오 프레임에서의 상부 필드(2920)를 참조하지만, 보다 최근의 하부 필드(2930)를 참조하지는 않는다. 도 29에 도시된 예에서, 필드(2940, 2950)는 인터레이스형 B-필드이며 허용가능 참조 필드가 아니다. 도 30에서, 현재 필드(3010)는 보다 최근의 하부 필드(3030)보다는 오히려 상부 필드(3020)를 참조한다.
한 구현에서, 도 25 내지 도 30에 도시된 모든 시나리오는 인터레이스형 P-필드 신택스에서 사용된다. 다른 구현도 가능하다. 예를 들어, 픽처는 다른 유형 또는 시간상 위치의 다른 픽처로부터의 필드를 참조 필드로서 사용할 수 있다.
1. 필드 픽처 좌표계 및 필드 극성
움직임 벡터는 수평 및 수직 변위를 1/4 픽셀 단위로 나타낸다. 예를 들어, 움직임 벡터의 수직 성분이 6개의 ¼-픽셀 단위의 변위를 가리키는 경우, 이것은 참조 블록이 현재 블록 위치에서 1½(6 * 1/4 = 1½) 필드 라인 아래쪽에 있음을 가리킨다.
도 31은 한 구현에서의 움직임 벡터의 수직 성분과 공간 위치 간의 관계를 나타낸 것이다. 도 31에 도시된 예는 현재 및 참조 필드 유형(예를 들어, 상부 및 하부)의 3가지 서로 다른 조합에 대한 3가지 서로 다른 시나리오(3110, 3120, 3130)를 나타낸 것이다. 필드 유형이 현재 및 참조 필드에 대해 서로 다른 경우, 극성은 "반대"이다. 필드 유형이 동일한 경우, 극성은 "동일"이다. 각각의 시나리오에 대해, 도 31은 현재 필드에서의 하나의 수직 픽셀 열 및 참조 필드에서의 제2 수직 픽셀 열을 나타내고 있다. 실제로, 이 2개의 열은 수평으로 정렬되어 있다. 원은 실제의 정수-픽셀 위치를 나타내고 X는 보간된 1/2 또는 1/4-픽셀 위치를 나타낸다. 수평 성분값(도시 생략)은 인터레이싱으로 인한 어떤 오프셋도 고려할 필요가 없는데, 그 이유는 각각의 필드가 수평으로 정렬되어 있기 때문이다. 마이너스 값은 더 위쪽의 오프셋을 가리키며, 반대 방향으로 플러스 값 수직 오프셋이 도시되어 있다.
시나리오(3110)에서, 극성은 "반대"이다. 현재 필드가 상부 필드이고 참조 필드가 하부 필드이다. 현재 필드에 대해, 참조 필드의 위치는 인터레이싱으로 인해 하향 방향으로 1/2 픽셀만큼 오프셋되어 있다. 0의 수직 움직임 벡터 성분값은 "수직 움직임 오프셋 없음"이고 참조 필드에서의 위치와 동일한 수직 레벨(절대항)에 있는 참조 필드에서의 위치를 나타내며, +2의 수직 움직임 벡터 성분값은 현재 필드의 위치보다 1/2 픽셀(절대항) 아래로 오프셋된 참조 필드에서의 위치를 나타내고, +4의 수직 성분값은 현재 필드에서의 위치보다 전체 픽셀(절대항)만큼 아래로 오프셋된 위치(이는 참조 필드에서의 보간된 값임)를 나타낸다.
시나리오(3120)에서, 극성은 또한 "반대"이다. 현재 필드는 하부 필드이고 참조 필드는 상부 필드이다. 현재 필드에 대해, 참조 필드의 위치는 인터레이싱으 로 인해 상향 방향으로 1/2 픽셀만큼 오프셋되어 있다. -2의 수직 움직임 벡터 성분은 현재 필드에서의 위치보다 1/2 픽셀(절대항) 위에 있는 참조 필드에서의 위치를 나타내고, 0의 수직 성분값은 현재 필드에서의 위치와 동일한 레벨(절대항)에 있는 위치를 나타내며, +2의 수직 성분은 현재 필드에서의 위치보다 아래로 1/2 픽셀(절대항)만큼 오프셋된 위치를 나타낸다.
시나리오(3130)에서, 극성은 "동일"이다. 현재 필드에 대해, 참조 필드의 위치는 수직 방향으로 동일하다. 0의 수직 움직임 벡터 성분값은 "수직 움직임 오프셋 없음"이고 참조 필드에서의 위치와 동일한 수직 레벨(절대항)에 있는 참조 필드에서의 위치를 나타내며, +2의 수직 움직임 벡터 성분값은 현재 필드에서의 위치 아래로 1/2 픽셀(절대항)만큼 오프셋된 참조 필드에서의 위치를 나타내고, +4의 수직 성분값은 현재 필드에서의 위치 아래로 전체 픽셀(절대항)만큼 오프셋된 위치(이는 참조 필드에서의 실제 값임)를 나타낸다.
다른 대안으로서, 움직임 벡터에 대한 변위는 다른 규약에 따라 표현된다.
2. 2-참조 필드 인터레이스형 P-필드에서의 움직임 벡터 예측
2-참조 필드 인터레이스형 P-필드는 동일한 시간 방향에서 2개의 필드(예를 들어, 2개의 가장 최근의 이전의 참조 필드)를 참조한다. 각각의 매크로블록에 대해 2개의 움직임 벡터 예측자가 계산된다. 어떤 구현에서, 하나의 예측자는 동일 극성의 참조 필드로부터 온 것이고, 다른 하나는 반대 극성의 참조 필드로부터 온 것이다. 다른 극성 조합도 역시 가능하다. (방향마다 2-참조 필드를 사용하는 인터레이스형 B-필드에 대해서는 이하에서 기술한다. 어떤 구현에서, 이러한 인터레이스형 B-필드는 움직임 벡터 예측자를 계산하기 위해 인터레이스형 P-필드와 동일한 기술을 사용한다.)
어떤 실시예에서, 인코더/디코더는 홀수 필드 예측자 및 짝수 필드 예측자를 알아내고 매크로블록을 처리하기 위해 예측자들 중 하나를 선택함으로써 현재 블록 또는 매크로블록에 대한 움직임 벡터 예측자를 계산한다. 예를 들어, 인코더/디코더는 홀수 필드 움직임 벡터 예측자 및 짝수 필드 움직임 벡터 예측자를 결정한다. 따라서, 움직임 벡터 예측자 중 하나는 현재 필드와 동일한 극성을 가지며, 다른 움직임 벡터 예측자는 반대 극성을 갖는다. 인코더/디코더는 홀수 필드 움직임 벡터 예측자 및 짝수 필드 움직임 벡터 예측자 중에서 움직임 벡터 예측자를 선택한다. 예를 들어, 인코더는 어느 것이 보다 나은 예측을 제공하는지에 따라 움직임 벡터 예측자 간에 선택한다. 인코더는 간단한 선택 신호를 사용하여 또는 코딩 효율을 향상시키기 위해 컨텍스트 정보를 포함하는 보다 복잡한 시그널링을 사용하여 어느 움직임 벡터 예측자를 사용할지를 신호한다. 컨텍스트 정보는 홀수 필드 또는 짝수 필드 중 어느 것, 또는 동일 극성 필드 또는 반대 극성 필드 중 어느 것이 블록 또는 매크로블록 주변의 이웃에서 주로 사용되었는지를 가리킬 수 있다. 디코더는 선택 신호 및/또는 컨텍스트 정보에 기초하여 어느 움직임 벡터 예측자를 사용할지를 선택한다. 이어서, 인코더/디코더는 선택된 움직임 벡터 예측자를 사용하여 움직임 벡터를 처리한다. 예를 들어, 인코더는 움직임 벡터와 움직임 벡터 예측자 간의 차분을 인코딩한다. 또는, 디코더는 움직임 벡터 차분과 움직임 벡터 예측자를 합성함으로써 움직임 벡터를 디코딩한다.
다른 대안으로서, 인코더 및/또는 디코더는 홀수 필드 움직임 벡터 예측자를 결정하는 단계 또는 짝수 필드 움직임 벡터 예측자를 결정하는 단계를 건너뛸 수 있다. 예를 들어, 인코더가 특정의 블록 또는 매크로블록에 대한 움직임 보상을 위해 홀수 필드가 사용될 것으로 결정하는 경우, 인코더는 홀수 필드 움직임 벡터 예측자만을 결정한다. 또는, 디코더가 컨텍스트 정보 및/또는 신호된 정보로부터 움직임 보상을 위해 홀수 필드가 사용될 것으로 결정하는 경우, 디코더는 홀수 필드 움직임 벡터 예측자만을 결정한다. 이와 같이, 인코더 및 디코더는 불필요한 연산을 회피할 수 있다.
디코더는 현재의 인터레이스형 P-필드에 대한 움직임 벡터 예측자를 결정하기 위해 이하의 기술을 이용할 수 있다.
인터레이스형 P-필드에서의 움직임 벡터를 갖는 각각의 블록 또는 매크로블록에 대해, 3개의 후보 움직임 벡터 예측자의 세트가 2개 얻어진다. 현재 매크로블록(3200)에 대한 이웃 매크로블록(이로부터 이들 후보 움직임 벡터 예측자가 얻어짐)의 위치가 도 32에 도시되어 있다. 후보들 중 3개는 짝수 참조 필드로부터 온 것이고 3개는 홀수 참조 필드로부터 온 것이다. 각각의 후보 방향(A, B 또는 C)에서의 이웃 매크로블록이 인트라-코딩되거나 짝수 필드 또는 홀수 필드를 참조하는 실제 움직임 벡터를 갖는 경우, 다른 필드의 움직임 벡터를 도출(또는 인트라-코딩된 매크로블록에 대한 홀수 필드 및 짝수 필드 움직임 벡터 후보 둘다를 도출)할 필요가 있다. 예를 들어, 주어진 매크로블록에 대해, 예측자 A가 홀수 필드를 참조하는 움직임 벡터를 갖는 것으로 가정하자. 이 경우에, "짝수 필드" 예측자 후보 A는 "홀수 필드" 예측자 후보 A의 움직임 벡터로부터 도출된다. 이 도출은 스케일링 연산을 사용하여 달성된다(예를 들어, 이하의 도 34a 및 도 34b의 설명을 참조할 것). 다른 대안으로서, 이 도출은 다른 방식으로 달성된다.
3개의 홀수 필드 후보 움직임 벡터 예측자가 얻어지면, 3개의 홀수 필드 후보로부터 홀수 필드 움직임 벡터 예측자를 도출하기 위해 메디안 연산이 사용된다. 이와 유사하게, 3개의 짝수 필드 후보 움직임 벡터 예측자가 얻어지면, 3개의 짝수 필드 후보로부터 짝수 필드 움직임 벡터 예측자를 도출하기 위해 메디안 연산이 사용된다. 다른 대안으로서, 후보 필드 움직임 벡터 예측자에 기초하여 필드 움직임 벡터 예측자를 선택하기 위해 다른 메카니즘이 사용된다. 디코더는 (예를 들어, 우세 예측자를 선택함으로써) 움직임 벡터 예측자로서 홀수 필드 또는 짝수 필드를 사용할지를 결정하고, 짝수 또는 홀수 움직임 벡터 예측자는 움직임 벡터를 재구성하는 데 사용된다.
도 33a 내지 도 33f의 의사 코드(3300)는 도 32에 배열된 예측자 A, B 및 C로부터 움직임 벡터 예측자를 발생하는 데 사용되는 프로세스를 나타낸 것이다. 도 32가 현재의 인터레이스형 P-필드의 중간에 있는 일반적인 매크로블록에 대한 이웃을 나타내고 있지만, 도 33a 내지 도 33f의 의사 코드(3300)는 매크로블록 위치에 대한 여러가지 특수한 경우를 언급하고 있다. 게다가, 의사 코드(3300)는 여러가지 위치에서의 블록의 움직임 벡터에 대한 움직임 벡터 예측자를 계산하는 데 사용될 수 있다.
의사 코드(3300)에서, 용어 "동일 필드" 및 "반대 필드"는 현재 코딩 또는 디코딩되고 있는 필드를 기준으로 한 것임을 이해해야 한다. 예를 들어, 현재 필드가 짝수 필드인 경우, "동일 필드"는 짝수 참조 필드이고, "반대 필드"는 홀수 참조 필드이다. 의사 코드(3300)에서의 변수 samefieldpred_x 및 samefieldpred_y는 동일 필드로부터의 움직임 벡터 예측자의 수평 및 수직 성분을 나타내고, 변수 oppositefieldpred_x 및 oppositefieldpred_y는 반대 필드로부터의 움직임 벡터 예측자의 수평 및 수직 성분을 나타낸다. 변수 samecount 및 oppositecount는 각각 현재의 블록 또는 매크로블록의 이웃에 대한 움직임 벡터 중 몇개가 현재 필드에 대한 "동일" 극성 참조 필드를 참조하는지 및 몇개가 "반대" 극성 참조 필드를 참조하는지를 나타낸다. 변수 samecount 및 oppositecount는 의사 코드의 시작에서 0으로 초기화된다.
의사 코드(3300)에서 언급되는 스케일링 연산 scaleforsame() 및 scaleforopposite()는 이웃의 실제 움직임 벡터 값으로부터 "나머지" 필드에 대한 움직임 벡터 예측자 후보를 도출하는 데 사용된다. 스케일링 연산은 구현 의존적이다. 예시적인 스케일링 연산에 대해 도 34a, 도 34b, 도 35 및 도 36을 참조하여 이하에서 기술된다. 다른 대안으로서, 다른 스케일링 연산이 예를 들어 도 31에 도시한 것 등의 수직 변위를 보상하는 데 사용된다. (인터레이스형 B-필드에 대해 특별히 사용되는 스케일링 연산에 대해 이하에서 상세히 기술한다.)
도 33a 및 도 33b는 프레임 내의 내부 위치에서의 일반적인 블록 또는 매크로블록에 대한 움직임 벡터 예측자를 계산하는 의사 코드를 나타낸 것이다. "인트라" 이웃에 대한 움직임 벡터는 0으로 설정된다. 각각의 이웃에 대해, 동일 필드 움직임 벡터 예측자 및 반대 필드 움직임 벡터 예측자가 설정되고, 여기서 하나는 이웃에 대한 움직임 벡터의 실제 값으로부터 설정되고, 다른 하나는 그로부터 도출된다. 동일 필드 움직임 벡터 예측자에 대해 또 반대 필드 움직임 벡터 예측자에 대해 후보들의 메디안이 계산되고, samecount 및 oppositecount로부터 "우세" 예측자가 결정된다. 변수 dominantpredictor는 어느 필드가 우세 움직임 벡터 예측자를 포함하는지를 가리킨다. 움직임 벡터 예측자는 그가 3개의 후보 예측자의 대부분과 동일한 극성을 갖는 경우 우세하다. (움직임 벡터 차분 데이터와 함께 디코딩되는 신호된 값 predictor_flag는 우세 또는 비우세 예측자가 사용되는지를 가리킨다.)
도 33c의 의사 코드는 매크로블록이 행마다 단지 하나의 매크로블록을 갖는 인터레이스형 P-필드에 있는 상황(이 경우 이웃 B 또는 C가 없음)에 대한 것이다. 도 33d 및 도 33e에서의 의사 코드는 블록 또는 매크로블록이 인터레이스형 P-필드의 좌측 모서리에 있는 상황(이 경우 이웃 C가 없음)에 대한 것이다. 여기서, 움직임 벡터 예측자는 2개의 후보 예측자의 대부분과 동일한 극성을 갖는 경우 우세이며, 동수인 경우에 반대 필드 움직임 벡터 예측자가 우세이다. 마지막으로, 도 33f의 의사 코드는 예를 들어 매크로블록이 인터레이스형 P-필드의 상부 행에 있는 경우에 대한 것이다.
3. 한 필드 움직임 벡터 예측자의 다른 필드 움직임 벡터 예측자로부터의 도출을 위한 스케일링
한 구현에서, 인코더/디코더는 도 34a 및 도 34b의 의사 코드(3400)에 예시된 스케일링 연산을 사용하여 한 필드 움직임 벡터 예측자를 다른 필드 움직임 벡터 예측자로부터 도출한다. SCALEOPP, SCALESAME1, SCALESAME2, SCALEZONE1_X, SCALEZONE1_Y, ZONE1OFFSET_X 및 ZONE1OFFSET_Y의 값은 구현 의존적이다. 2개의 가능한 값 세트가 현재 필드가 인터레이스형 비디오 프레임에서의 첫번째 필드인 경우에 대해서는 도 35의 테이블(3500)에 나타내어져 있고, 현재 필드가 인터레이스형 비디오 프레임에서의 두번째 필드인 경우에 대해서는 도 36의 테이블(3600)에 나타내어져 있다. P-프레임의 경우, 참조 프레임 거리(reference frame distance)는 현재의 P-프레임과 그의 참조 프레임 간의 B-프레임(즉, 2개의 B-필드를 포함하는 비디오 프레임)의 수로서 정의된다. B-프레임이 존재하지 않는 경우, 참조 거리는 0이다. 예를 들어, 인코더는 참조 프레임 거리를 인코딩하기 위해 가변-크기 신택스 요소(예를 들어, 이하의 섹션 XIV에서 상세히 기술되는 REFDIST 신택스 요소)를 사용한다.
테이블(3500, 3600)에 나타낸 예에서, N(테이블에서의 SCALEZONE1_X, SCALEZONE1_Y, ZONE1OFFSET_X 및 ZONE1OFFSET_Y 값에 대한 승수)의 값은 움직임 벡터 범위에 의존한다. 예를 들어, 확장된 움직임 벡터 범위는 신택스 요소 EXTENDED_MV = 1에 의해 신호될 수 있다. EXTENDED_MV = 1인 경우, MVRANGE 신택스 요소는 픽처 헤더에 존재하고 움직임 벡터 범위를 신호한다. EXTENDED_MV = 0인 경우, 디폴트 움직임 벡터 범위가 사용된다. 이하의 표 1은 N과 MVRANGE 간의 관계를 나타낸 것이다.
도 35 및 도 36에서의 N의 도출
MVRANGE |
N |
0 또는 디폴트 |
1 |
10 |
2 |
110 |
8 |
111 |
16 |
테이블(3500, 3600)에 나타낸 값은 구현에 따라 수정될 수 있다.
다른 대안으로서, N은 1인 것으로 가정되거나(즉, 스케일링이 N에 의존하지 않음) 스케일링이 어떤 다른 방식으로 수행될 수 있다.
B. 인터레이스형 P-프레임
어떤 구현에서, 인터레이스형 P-프레임에서의 매크로블록은 5가지 유형, 즉 1MV, 2필드 MV, 4 프레임 MV, 4 필드 MV, 및 인트라(intra) 중 하나일 수 있다.
1MV 매크로블록에서, 매크로블록에서의 4개의 루미넌스 블록의 변위는 단일의 움직임 벡터로 나타내어진다. 움직임 벡터에 대한 2개의 8x8 크로마 블록 각각의 변위를 나타내기 위해 대응하는 크로마 움직임 벡터는 루마 움직임 벡터로부터 도출될 수 있다. 예를 들어, 도23에 도시된 매크로블록 배열을 다시 참조하면, 1MV 매크로블록(2300)은 4개의 8x8 루미넌스 블록 및 2개의 8x8 크로미넌스 블록을 포함한다. 루미넌스 블록(Y1 내지 Y4)의 변위는 단일의 움직임 벡터로 나타내어져 있고, 2개의 크로마(U 및 V) 블록 각각의 변위를 나타내기 위해 대응하는 크로마 움직임 벡터는 루마 움직임 벡터로부터 도출될 수 있다.
2 필드 MV 매크로블록에서, 매크로블록에서의 4개의 루미넌스 블록에 대한 각각의 필드의 변위는 서로 다른 움직임 벡터에 의해 기술된다. 예를 들어, 도 37은 상부 필드 움직임 벡터가 루미넌스 블록 중 4개 모두의 짝수 라인의 변위를 기술하고 하부 필드 움직임 벡터가 루미넌스 블록 중 4개 모두의 홀수 라인의 변위를 기술함을 보여준다. 상부 필드 움직임 벡터를 사용하여, 인코더는 크로마 블록의 짝수 라인의 변위를 기술하는 대응하는 상부 필드 크로마 움직임 벡터를 도출할 수 있다. 이와 유사하게, 인코더는 크로마 블록의 홀수 라인의 변위를 기술하는 하부필드 크로마 움직임 벡터를 도출할 수 있다.
도 38을 참조하면, 4 프레임 MV 매크로블록에서, 4개의 루미넌스 블록 각각의 변위는 서로 다른 움직임 벡터(MV1, MV2, MV3 및 MV4)에 의해 기술된다. 각각의 크로마 블록은 4개의 4x4 크로마 서브-블록의 변위를 기술하는 4개의 도출된 크로마 움직임 벡터(MV1', MV2', MV3' 및 MV4')를 사용함으로써 움직임 보상될 수 있다. 각각의 4x4 크로마 서브-블록에 대한 움직임 벡터는 공간적으로 대응하는 루미넌스 블록에 대한 움직임 벡터로부터 도출될 수 있다.
도 39를 참조하면, 4 필드 MV 매크로블록에서, 루미넌스 블록에서의 각 필드의 변위는 2개의 서로 다른 움직임 벡터로 기술된다. 루미넌스 블록의 짝수 라인은 2개의 8x8 영역을 형성하기 위해 수직으로 세분된다. 짝수 라인의 경우, 좌측 영역의 변위는 좌측 상부 필드 블록 움직임 벡터에 의해 기술되고 우측 영역의 변위는 우측 상부 필드 블록 움직임 벡터에 의해 기술된다. 루미넌스 블록에서의 홀수 라인도 역시 2개의 8x8 영역을 형성하기 위해 수직으로 세분된다. 좌측 영역의 변위는 좌측 하부 필드 블록 움직임 벡터에 의해 기술되고 우측 영역의 변위는 우측 하부 필드 블록 움직임 벡터에 의해 기술된다. 각각의 크로마 블록도 역시 루미넌스 블록과 동일한 방식으로 4개의 영역으로 분할될 수 있으며, 각각의 크로마 블록 영역은 도출된 움직임 벡터를 사용하여 움직임 보상될 수 있다.
인트라 매크로블록의 경우, 움직임이 0인 것으로 가정된다.
일반적으로, 인터레이스형 P-프레임에서의 현재 매크로블록에 대한 움직임 벡터 예측자(들)를 계산하는 프로세스는 2 단계로 이루어져 있다. 첫째, 현재 매크로블록에 대한 3개의 후보 움직임 벡터가 그의 이웃 매크로블록으로부터 수집된다. 예를 들어, 한 구현에서, 후보 움직임 벡터는 도 40a 및 도 40b에 도시된 배열(및 상부 행 매크로블록에 대한 여러가지 특수한 경우, 기타 등등)에 기초하여 수집된다. 다른 대안으로서, 후보 움직임 벡터는 어떤 다른 순서 또는 배열로 수집될 수 있다. 둘째, 현재 매크로블록에 대한 움직임 벡터 예측자(들)는 후보 움직임 벡터의 세트로부터 계산된다. 예를 들어, 예측자는 3개 중의 메디안 예측(median-of-3 prediction)을 사용하여 또는 어떤 다른 방법에 의해 계산될 수 있다.
인터레이스형 P-프레임의 매크로블록에 대한 크로마 움직임 벡터의 도출 및 예측자의 계산에 관한 추가의 상세에 대해서는, 2003년 9월 7일자로 출원된 발명의 명칭이 "Video Encoding and Decoding Tools and Techniques(비디오 인코딩 및 디코딩 도구 및 기술)"인 미국 가특허출원 제60/501,081호 및 이하의 섹션 XIV를 참조하기 바란다.
IV. 순차 비디오 프레임의 양방향 예측
앞서 설명한 바와 같이, 순차 B-프레임에서의 매크로블록은 5가지 서로 다른 예측 모드, 즉 전방(forward), 후방(backward), 직접(direct), 보간(interpolated) 및 인트라(intra)를 사용하여 예측될 수 있다. 인코더는 서로 다른 예측 모드를 선택하여 이를 비트 스트림에서의 매크로블록 레벨 또는 어떤 다른 레벨에서 신호한다. 전방 모드에서, 현재의 순차 B-프레임에서의 매크로블록은 시간상 이전의 앵커로부터 도출된다. 후방 모드에서, 현재의 순차 B-프레임에서의 매크로블록은 시간상 차후의 앵커로부터 도출된다. 직접 또는 보간 모드에서 예측된 매크로블록은 예측을 위해 전방 및 후방 앵커 둘다를 사용한다. 직접 및 보간 모드에서는 2개의 참조 프레임이 있기 때문에, 일반적으로 각각의 매크로블록에 대해 적어도 2개의 움직임 벡터(명시적으로 코딩되거나 도출됨)가 있다. (순차 B-프레임에 대해 사용되는 코딩, 시그널링 및 디코딩의 여러가지 측면은 이하에 기술하는 바와 같이 인터레이스형 B-프레임에 대해서도 사용될 수 있다.)
어떤 구현에서, 인코더는 직접 모드에서 비율 값을 사용하여 전방 앵커에 대한 동일 위치의 움직임 벡터를 스케일링함으로써 움직임 벡터를 묵시적으로 도출한다. 이 비율은 그의 앵커들에 의해 형성된 구간 내에서의 현재의 순차 B-프레임의 상대적 시간 위치를 반영할 수 있지만 실제 프레임간 거리를 반영할 필요는 없다. 따라서, 인코더는 반드시 일정한 속력을 가정할 필요는 없다. 이것은 움직임 보상 예측을 향상시키기 위해 "실제의" 시간 위치로부터의 비율을 변경함으로써 인코더에게 앵커와 현재의 순차 B-프레임 간의 실제 움직임을 정확하고 간단하게 기술할 수 있는 부가의 자유도를 제공한다. 변수 BFRACTION은 이 상대적 시간 위치를 가리키기 위해 비트스트림으로(예를 들어, 픽처 레벨 또는 어떤 다른 레벨에서) 전송될 수 있는 서로 다른 비율을 나타낸다. 서로 다른 비율은 0과 1 사이의 제한된 일련의 이산값이다.
다시 도 17을 참조하면, 테이블(1700)은 비트스트림 요소 BFRACTION에 대한 가변-길이 코드(VLC) 테이블이다. 동일한 2개의 앵커 사이의 순차 B-프레임들 간의 BFRACTION의 고유성에 대한 어떤 제한도 없으며, 동일한 앵커를 갖는 서로 다른 순차 B-프레임은 동일한 BFRACTION 값을 가질 수 있다. 테이블(1700)에서의 코드는 서로 다른 코드로 서로 다른 비율을 나타내기 위해 변경 또는 재배열될 수 있다. 테이블(1700)에 도시되지 않은 다른 가능한 코드(예를 들어, 1111110 또는 1111111)는 무효 코드로서 간주되거나 다른 목적을 위해 사용될 수 있다. 예를 들어, 엔트리 1111110은 고정 소수점 포맷으로 BFRACTION을 명시적으로 코딩하는 데 사용될 수 있다. 다른 예로서, 엔트리 1111111는 특정의 프레임 유형(예를 들어, 인트라-코딩된 순차 B-프레임)을 신호하는 데 사용될 수 있다.
다시 도 18을 참조하면, 디코더는 의사 코드(1800)에 따라 스케일링 인자를 찾아낸다. 다시 도 19를 참조하면, 디코더는 이 스케일링 인자를 사용하여 차후의 참조 픽처에서의 동일 위치의 매크로블록에 대한 움직임 벡터의 x- 및 y-요소를 스케일링한다. 의사 코드(1900)에서의 함수 Scale_Direct_MV는 입력 MV_X 및 MV_Y를 받아서 직접 모드에서 2개의 움직임 벡터를 도출하며, 하나는 전방(이전의) 앵커 픽처(MV_XF, MV_YF)를 참조하고 다른 하나는 후방(차후의) 앵커 픽처(MV_XB, MV_YB)를 참조한다.
순차 B-프레임에서의 "건너뜀(skipped)" 매크로블록 신호는 주어진 매크로블록에 대해 움직임 벡터 예측 오차가 존재하지 않음을 가리킨다. 예측된 움직임 벡터는 인코더/디코더가 매크로블록을 재구성하는 데 사용하는 바로 그 움직임 벡터가 된다(즉, 움직임 벡터 예측 오차가 적용되지 않음). 인코더는 여전히 매크로블록에 대한 예측 모드를 신호하는데 그 이유는 매크로블록이 직접, 전방, 후방 또는 보간 예측을 사용하여 건너뛰어질 수 있기 때문이다.
V. 인터레이스형 B-픽처의 예측 코딩/디코딩에서의 혁신의 개요
기술된 실시예는 인터레이스형 B-픽처(예를 들어, 인터레이스형 B-필드, 인터레이스형 B-프레임)를 코딩 및 디코딩하는 기술 및 도구를 포함한다. 기술된 실시예는 이하의 것들(이에 한정되는 것은 아님)을 포함하는 양방향 예측 인터레이스형 픽처를 코딩 및/또는 디코딩하는 설명된 기술 및 도구 중 하나 이상을 구현한다.
1. 인터레이스형 B-프레임의 경우, 인코더/디코더는 인터레이스형 B-프레임의 매크로블록에서의 상부 필드와 하부 필드 간에 예측 모드를 전환한다.
2. 인터레이스형 B-프레임의 경우, 인코더/디코더는 이전에 디코딩된 시간상 차후의 앵커의 동일 위치의 매크로블록의 상부 필드 및 하부 필드 각각에 대한 하나의 대표적인 움직임 벡터를 선택함으로써 현재의 매크로블록에 대한 직접 모드 움직임 벡터를 계산한다. 이 선택하는 일은 현재의 인터레이스형 B-프레임의 매크로블록의 코딩 모드(예를 들어, 1MV 모드, 2 필드 MV 모드, 기타 등등)에 적어도 부분적으로 기초하여 수행될 수 있다.
3. 인터레이스형 B-필드 또는 인터레이스형 B-프레임의 경우, 인코더/디코더는 4MV 코딩을 사용한다. 예를 들어, 4MV는 단방향 예측 모드(전방 또는 후방 모드)에서 사용될 수 있지만 다른 이용가능한 예측 모드(예를 들어, 직접, 보간)에서는 사용될 수 없다.
4. 인터레이스형 B-필드 또는 인터레이스형 B-프레임의 경우, 전방 움직임 벡터는 전방 움직임 벡터 버퍼로부터의 이전에 재구성된(또는 추정된) 전방 움직임 벡터를 사용하여 예측되고, 후방 움직임 벡터는 후방 움직임 벡터 버퍼로부터의 이전에 재구성된(또는 추정된) 후방 움직임 벡터를 사용하여 예측된다. 그 결과 얻어지는 움직임 벡터는 대응하는 버퍼에 부가되고, 움직임 벡터 버퍼에서의 구멍(hole)은 추정된 움직임 벡터 값들로 채워진다.
a. 인터레이스형 B-프레임의 경우, 움직임 벡터를 예측하는 데 전방 예측이 사용되고 이 움직임 벡터가 전방 버퍼에 부가될 때, 후방 버퍼에서의 대응하는 위치는 후방 움직임 벡터만을 예측자로서 사용하는 예측 움직임 벡터가 될 것으로 채워진다("구멍 채우기"). 이와 유사하게, 움직임 벡터를 예측하는 데 후방 예측이 사용되고 이 움직임 벡터가 후방 버퍼에 부가될 때, 전방 버퍼에서의 대응하는 위치는 전방 움직임 벡터만을 예측자로서 사용하는 예측 움직임 벡터가 될 것으로 채워진다.
b. 인터레이스형 B-필드의 경우, 구멍 채우기를 위해 서로 다른 극성 움직임 벡터(예를 들어, "동일 극성" 또는 "반대 극성") 간에 선택하기 위해, 인코더/디코더는 우세 극성 필드 움직임 벡터를 선택한다. 앵커와 현재 프레임 간의 거리는 여러가지 신택스 요소를 사용하여 계산되고, 계산된 거리는 참조 필드 움직임 벡터를 스케일링하는 데 사용된다.
5. 인터레이스형 B-필드의 경우, 인코더/디코더는 "자기-참조(self-referencing)" 프레임을 사용한다. 예를 들어, 현재 프레임에서의 두번째 B-필드는 움직임 보상된 예측에서 현재 프레임으로부터의 첫번째 B-필드를 참조한다.
6. 인터레이스형 B-필드의 경우, 인코더는 인터레이스형 B-필드에서의 하나 이상의 매크로블록에 대해 예측 모드가 전방인지 비전방인지를 가리키는 이진 정보를 (예를 들어, 압축된 비트플레인에서의 B-필드 레벨에서) 전송한다. 디코더는 대응하는 디코딩을 수행한다.
7. 인터레이스형 B-필드의 경우, 인코더/디코더는 그 다음 앵커 픽처의 대응하는 필드에서의 대응하는 매크로블록이 4개의 움직임 벡터를 사용하여 코딩된 경우 우세 극성을 선호하는 논리를 사용하여 직접 모드 움직임 벡터를 선택한다.
8. 인트라-코딩된 필드: B-필드에 대해 가능한 양호한 움직임 보상이 없는 경우, 이는 인트라(즉, 비예측) B-필드("BI-필드")로서 코딩될 수 있다.
설명된 기술 및 도구는 서로 조합하여 또는 다른 기술 및 도구와 함께 사용되거나 독립적으로 사용될 수 있다.
VI. 인터레이스형 B-프레임에서의 필드-코딩된 매크로블록 내에서의 예측 모드의 전환
어떤 구현에서, 인코더는 인터레이스형 B-프레임에서의 매크로블록 내에서 예측 모드 전환을 수행한다. 예를 들어, 인코더는 인터레이스형 B-프레임에서의 매크로블록에서 상부 필드에서 하부 필드로 가면서 전방에서 후방으로, 후방에서 전방으로 예측 모드의 전환을 가능하게 해준다. 전체 매크로블록을 단일의 예측 방향 모드로 인코딩하지 않고, 단일의 매크로블록을 코딩하는 데 예측 방향 모드의 조합이 사용된다. 매크로블록에서 개개의 필드들 간에 예측 방향 모드를 변경할 수 있음으로써 많은 시나리오에서 인터레이스형 B-프레임의 보다 효율적인 코딩이 얻어진다.
도 41은 서로 다른 예측 모드를 사용하여 인터레이스형 B-프레임에서의 필드-코딩된 매크로블록에서 개개의 필드에 대한 움직임 벡터를 예측하는 기술(4100)을 나타낸 것이다. 단계(4110)에서, 인터레이스형 B-프레임에서, 인코더/디코더는 제1 예측 모드를 사용하여 필드-코딩된 매크로블록에서의 첫번째 필드에 대한 움직임 벡터를 예측한다. 어떤 구현에서, "첫번째 필드"는 상부 필드 또는 하부 필드일 수 있으며, 이에 대한 결정은 별도로 신호된다. 단계(4120)에서, 인코더/디코더는 다른 예측 모드를 사용하여 동일한 매크로블록에서의 두번째 필드에 대한 움직임 벡터를 예측한다.
예를 들어, 2개의 움직임 벡터를 사용하여 필드-코딩된 매크로블록의 경우, 상부 필드는 전방-예측될 수 있고(즉, 상부 필드 움직임 벡터는 이전의 앵커 픽처를 참조함), 하부 필드는 후방-예측될 수 있다(즉, 하부 필드는 차후의 앵커 픽처를 참조함). 어떤 구현에서, 인터레이스형 B-프레임에서의 필드-코딩된 매크로블록은 4개의 움직임 벡터를 사용하여 인코딩되지 않는다. 다른 대안으로서, 매크로블록이 4개의 움직임 벡터(예를 들어, 각 필드에 대해 2개의 움직임 벡터)를 사용하여 필드-코딩되는 경우, 상부 필드에 대한 2개의 움직임 벡터는 하나의 앵커(전방 또는 후방)를 참조하고, 하부 필드 움직임 벡터는 나머지 하나의 앵커를 참조한다.
이러한 예측 모드의 전환은 처음에 매크로블록 유형이 직접 또는 보간이 아닌 경우에 단지 하나의 부가 비트만을 필요로 하며, 이에 대해서는 인터레이스형 B-프레임에 대한 이하의 의사 코드에서 더 설명한다.
If MB가 필드-코딩되어 있고 AND MB 유형이 전방 또는 후방인 경우 then
If MVSwitch = 1인 경우, then 상부 필드와 하부 필드 간에 예측 모드가 (전방에서 후방으로 또는 그 반대로) 전환된다.
따라서, 예측 모드 전환을 전방 및 후방 모드로 제한하는 것은 제2 모드를 신호하는 데 더 많은 비트를 필요로 하지 않게 해주는데, 그 이유는 제2 모드가 (이전에 신호된) 제1 모드 및 전환 값으로부터 암시되기 때문이다.
인터레이스형 B-프레임의 매크로블록에 의해 커버되는 영역에 움직임이 많은 경우, 이 매크로블록은 필드 모드로 코딩될 가능성이 있다. 이러한 상황 하에서, 전방 또는 후방 예측이 픽셀 평균을 필요로 하는 직접 또는 보간 모드보다 정확한 움직임 보상 결과를 제공할 가능성이 더 있다. 평균을 취하는 결과 평탄화가 얻어지기 때문에(예를 들어, 많은 움직임에 수반하는 고주파 요소의 손실), 직접 및 보간 모드는 이러한 매크로블록을 코딩하는 최선의 방법이 아닐 수 있다. 실험 결과는 필드-코딩된 매크로블록 내에서의 필드 레벨에서 전환 옵션으로서 4가지 예측 모드 모두를 신호하는 증가된 오버헤드로 인한 비효율성을 나타낸다.
다른 대안으로서, 인코더는 인터레이스형 B-프레임의 필드-코딩된 매크로블록 내에서 3개 이상의 예측 모드 간에 전환하거나 서로 다른 예측 모드 간에 전환할 수 있다.
VII. 인터레이스형 B-프레임에서의 직접 모드 움직임 벡터 계산
어떤 구현에서, 인코더/디코더는 이전에 디코딩된 앵커 I-프레임 또는 P-프레임(이는 후방 예측 참조 프레임으로서 사용되는 시간상으로 전방인 참조 프레임임)으로부터의 움직임 벡터를 버퍼링하고 인터레이스형 B-프레임에서의 현재 매크로블록에 대한 직접 모드 움직임 벡터를 계산하는 데 사용하기 위해 버퍼링된 움직임 벡터 중 하나 이상을 선택한다. 예를 들어, 인코더/디코더는 앵커 프레임의 각각의 매크로블록으로부터 상부 및 하부 필드 각각에 대한 대표적인 움직임 벡터를 버퍼링하고 버퍼링된 움직임 벡터 중 하나 이상을 사용하여 현재의 직접 모드 매크로블록에 대한 움직임 벡터를 계산한다. 이 선택하는 일은 현재 매크로블록의 코딩 모드(예를 들어, 1MV 모드, 2 필드 MV 모드, 기타 등등)에 적어도 부분적으로 기초하여 수행된다.
도 42는 한 구현에서 인터레이스형 B-프레임에서의 매크로블록에 대한 직접 모드 움직임 벡터를 계산하는 기술(4200)을 나타낸 것이다. 단계(4210)에서, 인코더/디코더는 이전에 재구성된 시간상 미래의 앵커 프레임에서의 동일 위치의 매크로블록의 매크로블록마다 복수의 움직임 벡터를 버퍼링한다. 동일 위치의 매크로블록이 하나의 움직임 벡터만을 갖는 경우, 그 움직임 벡터는 필요에 따라 동일 위치의 매크로블록의 여러가지 블록에 대한 움직임 벡터 값으로서 버퍼링된다. 단계(4220)에서, 인코더/디코더는 적어도 부분적으로 현재 매크로블록에 대해 필요한 움직임 벡터의 수에 따라, 인터레이스형 B-프레임에서의 현재 매크로블록의 직접 모드 예측을 위해 동일 위치의 매크로블록의 버퍼링된 움직임 벡터 중 하나 이상을 선택한다.
한 구현에서, 디코더는 미래의 앵커 프레임으로부터의 동일 위치의 매크로블록에서의 2개의 움직임 벡터, 즉 디코딩된 루마 움직임 벡터의 가능한 최대 수의 1/2을 버퍼링한다. 앵커 프레임에서의 매크로블록은 서로 다른 방식으로 코딩될 수 있으며, 매크로블록당 최대 4개의 움직임 벡터를 갖지만 이하에 기술하는 바와 같이 단지 최대 2개의 움직임 벡터만이 버퍼링된다. 현재 매크로블록에 대해 발생된 전방/후방 움직임 벡터 쌍의 수는 이전에 디코딩된 미래의 앵커 프레임에서의 동일 위치의 매크로블록의 코딩 모드에 의존하기 보다는 오히려 현재 매크로블록의 코딩 모드에 의존한다.
예를 들어, 현재의 직접 모드 매크로블록이 1MV 코딩되어 있는 경우, 디코더는 앵커 프레임에서의 동일 위치의 매크로블록의 상부 필드로부터의 버퍼링된 움직임 벡터를 받아서 한 쌍의 직접 움직임 벡터, 즉 전방 및 후방 방향에 대해 각각 하나씩을 발생한다. 현재의 직접 모드 매크로블록이 필드-코딩되어 있는 경우, 디코더는 앵커 프레임에서의 동일 위치의 매크로블록으로부터의 버퍼링된 하부 필드 및 상부 필드 움직임 벡터 둘다를 받아서 2 쌍의 움직임 벡터를 발생하여 현재의 직접 모드 매크로블록에 대한 총 4개의 움직임 벡터, 즉 전방 및 후방 방향 둘다에서 각 필드에 대해 하나씩을 제공한다.
도 43은 이전에 디코딩된 시간상 미래의 앵커 프레임의 동일 위치의 매크로블록(4300)의 블록들에 대한 움직임 벡터 MV1, MV2, MV3 및 MV4를 나타낸 것이다. 동일 위치의 매크로블록이 1MV 매크로블록인 경우, MV1, MV2, MV3 및 MV4는 모두 같다. 동일 위치의 매크로블록이 2 필드 MV 매크로블록인 경우, MV1 및 MV2는 하나의 값과 같고 MV3 및 MV4는 다른 값과 같다. 앵커 프레임의 동일 위치의 매크로블록이 4 필드 MV 또는 4 프레임 MV 매크로블록인 경우, MV1, MV2, MV3 및 MV4는 모두 서로 다른 값일 수 있다. 그렇지만, MV1, MV2, MV3 및 MV4가 이용가능할지라도, 디코더는 MV1 및 MV3만을 버퍼링한다.
도 43에 도시한 예에서, 디코더는 MV1 및 MV3를 버퍼링한다. 현재의 매크로블록이 1MV 모드를 사용하는 경우, 디코더는 현재의 매크로블록에 대한 전방 및 후방 직접 모드 움직임 벡터를 계산하기 위해 MV1을 선택하고 MV3를 무시한다. 현재의 매크로블록이 2 필드 MV 모드를 사용하는 경우, 디코더는 4개의 직접 모드 움직임 벡터를 계산하기 위해 MV1 및 MV3 둘다를 사용한다. 이 동작은 현재의 매크로블록의 상부 및 하부 필드에 대한 양호한 움직임 표현을 산출한다.
앵커 프레임에서의 동일 위치의 매크로블록으로부터의 움직임 벡터가 선택된 경우, 디코더는 B 프레임 매크로블록의 직접 모드 예측에 대한 대응하는 전방 및 후방 지향 움직임 벡터를 도출하기 위해 스케일링 논리를 적용한다. 예를 들어, 디코더는 도 19의 함수 Scale_Direct_MV를 적용할 수 있다. 또는, 디코더는 다른 스케일링 함수를 적용한다.
다른 대안으로서, 인코더/디코더는 앵커 프레임의 매크로블록당 4개의 움직임 벡터를 버퍼링할 수 있다. 예를 들어, 현재의 매크로블록이 1MV 코딩되어 있는 경우, 인코더/디코더는 앵커 프레임에서의 동일 위치의 매크로블록의 좌측 상부 움직임 벡터를 받아서 한 쌍의 직접 움직임 벡터를 발생할 수 있거나 앵커 프레임의 매크로블록에 대한 4개의 움직임 벡터의 평균을 취할 수 있다. 현재의 매크로블록이 필드-코딩되어 있는 경우, 인코더/디코더는 좌측 상부 및 좌측 하부 움직임 벡터를 받아서 2 쌍(각 필드에 대해 하나씩)을 발생하거나, 앵커 프레임의 매크로블록에 대한 상부 움직임 벡터들의 평균 및 하부 움직임 벡터들의 평균을 취할 수 있다.
앵커 프레임에서의 동일 위치의 매크로블록이 인트라인 경우 또는 앵커 프레임이 I-프레임인 경우, 직접 모드 움직임 벡터는 (0,0)으로서 취급된다.
VIII. 인터레이스형 B-필드 및 인터레이스형 B-프레임에서의 4MV 코딩
어떤 구현에서, 인코더는 4-움직임-벡터(4MV) 코딩 모드를 사용하여 인터레이스형 B-필드 및 인터레이스형 B-프레임을 인코딩한다. 4MV 코딩은 (예를 들어, 매크로블록에서의 4개의 루마 블록이 독립적으로 예측되고 움직임 보상될 수 있게 해줌으로써) 1-움직임-벡터(1MV) 코딩보다 복잡한 움직임 궤적의 보다 정확한 표현을 가능하게 해줄 수 있다. 4MV의 사용은 어떤 예측 모드로 제한될 수 있다. 예를 들어, 어떤 구현에서, 인코더는 전방 및 후방 모드(필드 및 프레임 둘다)에 대해 4MV를 사용하지만 직접 또는 보간 모드에 대해서는 그렇지 않다. 이것은 4MV가 순차 B-프레임에 대해 사용되지 않는 순차 코딩 모드와 다르다.
직접 및 보간 모드는 움직임-보상된 예측을 계산할 때 픽셀 평균을 수반하며, 이는 미세한 디테일을 평탄화시켜 버리는 경향이 있다. 이러한 평탄화가 허용되는 경우, 아마도 4MV 대신에 1MV가 효과적으로 사용될 수 있는데 그 이유는 1MV가 코딩하기 더 간단하고 평탄한 움직임 궤적을 정확하게 기술하는 데 사용될 수 있기 때문이다. 실험 결과 인터레이스형 B-필드 및 인터레이스형 B-프레임의 매크로블록에 대해 4MV 모드를 사용하지만 4MV 모드를 전방- 및 후방- 예측 매크로블록으로 제한하는 것이 이점이 있음을 보여준다. 4MV를 전방 및 후방 모드로 제한하는 것이 유리한 다른 요인은 4MV를 직접 또는 보간 모드와 조합하면 각 경우에 총 8개의 움직임 벡터가 얻어진다는 것이다. 8개의 움직임 벡터와 연관된 시그널링 오버헤드(보간 모드의 경우)와 구현 및 디코딩 복잡성이 일반적으로 정확성 이점을 상쇄시킨다. 게다가, 보통 더 높은 품질 설정으로 코딩되어 있는(즉, 덜 심하게 양자화되어 있는) P-픽처가 움직임 보상을 위해 단지 하나 또는 4개의 움직임 벡터를 사용할 수 있을 때, 종종은 8개의 움직임 벡터를 갖는 인터레이스형 B-픽처를 인코딩하는 것이 실용적이지 않다.
4MV를 어떤 예측 모드로 제한하는 것은 다른 이점도 갖는다. 예를 들어, 4MV가 전방 및 후방 예측 모드로만 제한되어 있는 경우, 및 전방/비전방 모드 결정이 이미 신호된 경우(예를 들어, 이하의 섹션 XI에 기술된 것 등의 비트플레인 코딩 기술에서), 인코더는 4MV 매크로블록에 대한 예측 모드를 신호하기 위해 어떤 부가의 비트도 전송할 필요가 없다.
전방/비전방 결정이 비트플레인-코딩되어 있고 어떤 매크로블록-레벨 정보보다 먼저 전송되는 경우, 이하의 의사 코드가 인터레이스형 B-필드의 매크로블록에 적용가능하다.
if MB가 4MV 코딩되고 AND 예측 모드가 NOT 전방인 경우,
then 예측 모드 = 후방(모드를 신호하기 위해 더 이상 비트를 전송하지 않음).
어떤 구현에서, 직접/비직접 예측 모드 결정은 어떤 매크로블록-레벨 정보보다 먼저 전송된다(예를 들어, 픽처 레벨에서 압축된 비트플레인으로). (직접/비직접 정보 코딩에 관한 더 많은 정보에 대해서는, 2003년 7월 18일자로 출원된 발명의 명칭이 "Advanced Bi-Directional Predictive Coding of Video Frames(비디오 프레임의 최신 양방향 예측 코딩)"인 미국 특허 출원 제10/622,378호를 참조할 것.) 이러한 구현에서 4MV가 전방 및 후방 모드로 제한되어 있는 경우, 이하의 의사 코드가 인터레이스형 B-프레임의 매크로블록에 적용가능하다.
if MV가 4MV이고 AND 예측 모드가 NOT 직접인 경우,
then 예측 모드(전방 또는 후방)를 신호하기 위해 하나의 부가 비트를 전송함.
다른 대안으로서, 4MV는 전방 또는 후방 모드와 다른 또는 그 이외의 예측 모드에 대해 사용되거나, 전방 모드에 대해 사용되지 않거나, 후방 모드에 대해 사용되지 않거나, 또는 어떤 예측 모드에 대해서도 사용되지 않는다. 예를 들어, 어떤 구현에서, 4MV는 인터레이스형 B-필드에 대해서는 사용되지만 인터레이스형 B-프레임에 대해서는 그렇지 않다. 다른 대안에서, 예측 모드를 4MV 코딩과 함께 신호하기 위해 다른 코드 또는 코드-길이가 사용될 수 있다.
IX. 개별적인 전방 및 후방 움직임 벡터 버퍼를 사용하여 인터레이스형 B-픽처에서의 움직임 벡터의 예측
인터레이스형 B-픽처에 대한 움직임 벡터는 개별적인 전방 및 후방 움직임 벡터 컨텍스트를 사용하여 예측된다. 일반적으로, 전방 움직임 벡터는 전방 움직임 벡터 버퍼에 저장된 움직임 벡터를 사용하여 예측되고, 후방 움직임 벡터는 후방 움직임 벡터 버퍼에 저장된 움직임 벡터를 사용하여 예측된다. 현재의 매크로블록에 대한 결과 움직임 벡터는 이어서 적절한 버퍼에 저장되고, 다른 매크로블록에 대한 차후의 움직임 벡터 예측에서 사용될 수 있다. 일반적으로, 주어진 매크로블록이 전방 움직임 벡터만으로(전방 예측 매크로블록의 경우) 또는 후방 움직임 벡터만으로(후방 예측 매크로블록의 경우) 예측되어 있을지라도, 각각의 매크로블록에 대해 전방 및 후방 움직임 벡터 버퍼 둘다에서의 대응하는 공간이 채워진다. 이하의 섹션은 인터레이스형 B-픽처(예를 들어, 인터레이스형 B-필드, 인터레이스형 B-프레임)에서 움직임 벡터를 예측하고 "없는(missing)" 전방 또는 후방 움직임 벡터에 대한 움직임 벡터 버퍼에서의 대응하는 공간을 "채우는(fill in)" 기술에 대해 설명한다.
A. 전방 및 후방 버퍼
인터레이스형 B-픽처에 대한 움직임 벡터를 예측할 때, 인코더/디코더는 전방 움직임 벡터 버퍼 및/또는 후방 움직임 벡터 버퍼 내의 이전에 재구성된 움직임 벡터를 사용한다. 전방 모드에서, 인코더/디코더는 전방 움직임 보상을 위해 현재의 움직임 벡터를 예측하는 데 전방 움직임 벡터 버퍼로부터의 재구성된 전방 움직임 벡터를 사용한다. 후방 모드에서, 인코더/디코더는 후방 움직임 보상을 위해 현재의 움직임 벡터를 예측하는 데 후방 움직임 벡터 버퍼로부터의 재구성된 후방 움직임 벡터를 사용한다. 직접 모드 또는 보간 모드 매크로블록의 경우, 인코더/디코더는 전방 움직임 벡터 버퍼를 사용하여 전방 움직임 벡터 성분(또는 아마도 다수의 전방 움직임 성분)도 예측하고 후방 움직임 벡터 버퍼를 사용하여 후방 성분(또는 아마도 다수의 후방 움직임 성분)도 예측한다.
인터레이스형 B-픽처에 대한 움직임 벡터를 재구성한 후에, 인코더/디코더는 재구성된 전방 움직임 벡터를 전방 움직임 벡터 버퍼에 버퍼링하고 재구성된 후방 움직임 벡터를 후방 움직임 벡터 버퍼에 버퍼링한다. 전방 모드에서, 인코더/디코더는 재구성된 전방 움직임 벡터를 전방 움직임 벡터 버퍼에 저장한다. 후방 모드에서, 인코더/디코더는 재구성된 후방 움직임 벡터를 후방 움직임 벡터 버퍼에 저장한다. 직접 또는 보간 예측 모드를 사용하는 매크로블록의 경우, 인코더/디코더는 전방 움직임 벡터 성분(들)을 전방 움직임 벡터 버퍼에 저장하고 후방 움직임 벡터 성분(들)을 후방 움직임 벡터 버퍼에 저장한다.
예를 들어, 인코더가 인터레이스형 B-픽처에서의 매크로블록 좌표 위치(12, 13)에 있는 전방-예측 매크로블록을 인코딩하고 있는 경우, 인코더는 전방 움직임 벡터 예측자를 계산하고 전방 움직임 벡터에 대한 잔차(매크로블록이 "건너뜀"이 아닌 것으로 가정함)를 비트스트림으로 전송한다. 디코더는 잔차(즉, 차분)을 디코딩하고 움직임 벡터를 재구성한다. 인코더/디코더는 재구성된 움직임 벡터를 전방 움직임 벡터 버퍼에 삽입한다. 이어서, 인코더/디코더는 채움 후방 움직임 벡터(fill-in backward motion vector)가 될 후방 움직임 벡터 예측자를 계산하는 데 움직임 벡터 예측 논리를 사용하고 후방 움직임 벡터를 후방 움직임 벡터 버퍼에서 위치(12, 13)에 넣는다. 예를 들어, 3개 중의 메디안(median-of-3) 예측 시나리오에서, 인코더/디코더는 (12, 13)에 대한 후방 움직임 벡터를 채우기 위해 위치 (11, 13), (12, 12) 및 (13, 12)(현재의 전방-예측 매크로블록의 좌측, 상부 및 우측-상부 이웃)에 있는 버퍼링된 후방 움직임 벡터의 메디안을 취할 수 있다.
도 44는 전방 및/또는 후방 움직임 벡터 버퍼를 사용하여 인터레이스형 B-픽처에서의 현재 매크로블록에 대한 움직임 벡터를 예측하는 기술(4400)을 나타낸 것이다. 단계(4410)에서, 예측될 움직임 벡터가 전방 또는 후방 움직임 벡터인지에 따라, 인코더/디코더는 전방 또는 후방 움직임 벡터 버퍼를 사용할지를 선택한다. 현재의 움직임 벡터가 전방 움직임 벡터인 경우, 단계(4420)에서 인코더/디코더는 전방 움직임 벡터 버퍼로부터 움직임 벡터 예측자 후보 세트를 선택한다. 현재의 움직임 벡터가 후방 움직임 벡터인 경우, 단계(4430)에서 인코더/디코더는 후방 움직임 벡터 버퍼로부터 움직임 벡터 예측자 후보 세트를 선택한다. 단계(4440)에서, 인코더/디코더는 상기 일련의 움직임 벡터 예측자 후보 세트에 기초하여 움직임 벡터 예측자를 계산한다. 예를 들어, 인코더/디코더는 움직임 벡터 예측자 후보 세트의 메디안을 계산한다. 간단한 경우, 인코더/디코더는 모두 1MV 매크로블록이었던 예측자에 기초하여 1MV 현재 매크로블록에 대한 움직임 벡터 예측자를 계산한다. 현재 매크로블록 및/또는 이웃 매크로블록이 서로 다른 모드를 갖는 보다 복잡한 변형예에 대해서는 이하에서 설명한다.
도 45는 전방 움직임 벡터 버퍼(4510) 및 후방 움직임 벡터 버퍼(4520)에서의 움직임 벡터를 나타낸 것이다. 도 45에 도시한 예에서, 재구성된 매크로블록(4530-4570)의 경우, 인코더/디코더는 전방 움직임 벡터를 전방 움직임 벡터 버퍼(4510)에 저장하고 후방 움직임 벡터를 후방 움직임 벡터 버퍼(4520)에 저장한다. 현재 매크로블록(4580)에 대한 움직임 벡터를 예측하기 위해, 인코더/디코더는 이웃 매크로블록으로부터의 후보 예측자를 사용한다. 예를 들어, 현재 매크로블록(4580)이 전방 모드로 예측되는 경우, 인코더는 전방 움직임 벡터 버퍼에서의 이웃하는 전방 움직임 벡터를 사용하여(예를 들어, 3개 중의 메디안 예측을 사용하여) 전방 움직임 벡터를 예측할 수 있으며, 이어서 나중에 전방 움직임 벡터 버퍼에서의 현재 매크로블록 위치를 재구성된 움직임 벡터 값으로 채울 수 있다. 후방 움직임 벡터 버퍼(4520)에서의 대응하는 현재 매크로블록 위치를 채우기 위해, 인코더/디코더는 후방 움직임 벡터 버퍼에서의 이웃하는 후방 움직임 벡터를 사용하여 후방 움직임 벡터를 예측하고 그 예측자를 후방 움직임 벡터 버퍼에서의 현재 매크로블록에 대한 위치에 넣을 수 있다.
B. 인터레이스형 B-프레임에서의 움직임 벡터 예측
어떤 구현에서, 인코더/디코더는 인터레이스형 B-프레임에서의 매크로블록(그의 개별적인 필드를 포함함)에 대한 움직임 벡터를 예측하기 위해 이하의 방식을 이용하며, 이는 개별적인 전방 및 후방 움직임 벡터 컨텍스트를 사용한다. 도 40a 및 도 40b는 후보 움직임 벡터가 수집되는 이웃 매크로블록을 나타낸 것이다.
1MV 매크로블록이 전방-예측된 경우, 인코더/디코더는 (예를 들어, 도 40a 및 도 40b 또는 다른 곳에 도시한 것 등의 예측 패턴 및 3개 중의 메디안 예측을 사용하여) 전방 움직임 벡터 버퍼의 후보 움직임 벡터로부터 그의 전방 움직임 벡터를 예측한다. 인코더/디코더는 전방 움직임 벡터를 (움직임 벡터 예측 오차를 가산한 다음에) 전방 움직임 벡터 버퍼에 저장한다. 인코더/디코더는 후방 움직임 벡터 버퍼의 후보 움직임 벡터로부터 후방 움직임 벡터를 예측함으로써 "구멍"을 채우고(예를 들어, 전방-예측 경우에서와 같음), 후방 움직임 벡터(여기서는, 예측자)를 후방 움직임 벡터 버퍼에 저장한다.
1MV 매크로블록이 후방-예측된 경우, 인코더/디코더는 후방 움직임 벡터 버퍼의 후보 움직임 벡터로부터 그의 후방 움직임 벡터를 예측한다(예를 들어, 전방-예측 경우에서와 같음). 인코더/디코더는 후방 움직임 벡터를 (예측 오차를 가산한 다음에) 후방 움직임 벡터 버퍼에 저장한다. 인코더/디코더는 전방 움직임 벡터 버퍼의 후보 움직임 벡터로부터 전방 움직임 벡터를 예측함으로써 "구멍"을 채우고, 전방 움직임 벡터(여기서는, 예측자)를 전방 움직임 벡터 버퍼에 저장한다.
인트라-코딩된 매크로블록인 이웃은 전방 및 후방 움직임 벡터 버퍼에서 무시된다.
여러가지 특수한 경우는 인터레이스형 B-프레임에서의 1MV 및 필드-코딩된 2MV 매크로블록의 조합에 대한 것이다. 현재의 1MV 매크로블록에 대한 위치 A, B 또는 C에 있는 이웃 매크로블록이 필드-코딩된 2MV 매크로블록인 경우, 인코더/디코더는 그 위치에 대한 움직임 벡터 예측자로서 2MV 매크로블록에 대한 필드 움직임 벡터들의 평균을 취한다.
예를 들어, 2개의 전방-예측된 필드 움직임 벡터들 각각에 대한 전방-예측된 현재의 2 필드 MV 매크로블록의 경우, 이웃들로부터의 후보 움직임 벡터는 전방 움직임 벡터 버퍼로부터 수집된다. 인코더/디코더는 이웃하는 매크로블록의 코딩 모드(예를 들어, 인트라, 1MV, 2 필드 MV)에 기초하여 후보 움직임 벡터 세트(이들은 전방 움직임 벡터 버퍼에 저장되어 있음)를 선택한다. 이웃하는 매크로블록이 존재하고 인트라 코딩되어 있지 않은 경우, 인코더/디코더는 후보 세트에 부가할 매크로블록에 대한 움직임 벡터(들)를 찾는다. 어떤 실시예에서, 인코더/디코더는 다음과 같이 진행한다. 상부 필드 전방 움직임 벡터의 경우, 위치 A, B 또는 C에 있는 이웃 매크로블록이 1MV 매크로블록인 경우, 인코더는 전방 움직임 벡터 버퍼의 대응하는 위치로부터의 매크로블록의 움직임 벡터를 후보 세트에 부가한다. 2 필드 MV 매크로블록인 위치 A, B 또는 C에 있는 이웃 매크로블록의 경우, 인코더/디코더는 전방 움직임 벡터 버퍼의 대응하는 위치로부터의 상부 필드 MV를 후보 세트에 부가한다.
하부 필드 전방 움직임 벡터의 경우, 위치 A, B 또는 C에 있는 이웃 매크로블록이 1MV 매크로블록인 경우, 인코더는 전방 움직임 벡터 버퍼의 대응하는 위치로부터의 매크로블록의 움직임 벡터를 후보 세트에 부가한다. 2 필드 MV 매크로블록인 위치 A, B 또는 C에 있는 이웃 매크로블록의 경우, 인코더/디코더는 전방 움직임 벡터 버퍼의 대응하는 위치로부터의 하부 필드 움직임 벡터를 후보 세트에 부가한다.
2 필드 MV 매크로블록에서의 필드 움직임 벡터에 대한 예측자를 계산하기 위해, 인코더/디코더는 후보 세트들의 메디안을 계산한다.
2 필드 MV 매크로블록에 대한 후방-예측 움직임 벡터를 계산하기 위해, 논리는 전방 예측 경우와 동일하지만, 이웃으로부터의 후보 움직임 벡터는 후방 움직임 벡터 버퍼로부터 수집된다.
다시 말하면, 인트라-코딩되어 있는 위치 A, B 또는 C에 있는 이웃들은 움직임 벡터 예측에 있어서 무시된다.
(예를 들어, 움직임 벡터 차분 정보를 가산함으로써) 2 필드 MV 매크로블록에 대한 움직임 벡터의 재구성 후에, 재구성된 실제 움직임 벡터는 재구성된 움직임 벡터의 예측 방향에 대해 적절한 경우 전방 움직임 벡터 버퍼 또는 후방 움직임 벡터 버퍼에 넣어진다. 없는 방향에 대한 움직임 벡터 버퍼의 대응하는 비어있는 슬롯은 없는 방향에 대한 움직임 벡터 예측자를 계산하고 이 움직임 벡터 예측자를 비어있는 슬롯에 저장함으로써 채워진다.
예측 모드 전환이 사용되고 있는 경우 인터레이스형 B-프레임 내의 필드-코딩된 매크로블록에 대한 구멍 채우기를 위해 예외가 적용된다(상기한 섹션 VI를 참조). 이 경우, 주어진 필드-코딩된 2MV 매크로블록은 하나의 전방 움직임 벡터와 하나의 후방 움직임 벡터를 갖는다. 인터레이스형 B-프레임의 필드-코딩된 매크로블록의 재구성 후에, 필드-코딩된 매크로블록이 상부와 하부 필드 간에 예측 방향을 전환하는 경우, 인코더/디코더는 전방 움직임 벡터 버퍼의 상부 및 하부 움직임 벡터 "슬롯" 둘다를 전방 움직임 벡터로 채우고, 후방 버퍼의 상부 및 하부 움직임 벡터 슬롯 둘다를 후방 움직임 벡터로 채운다. 전방 움직임 벡터가 한 필드(예를 들어, 상부 필드)에 대해서만 전송되지만, 인코더는 동일한 움직임 벡터를 전방 움직임 벡터 버퍼에 대한 상부 및 하부 필드 움직임 벡터 슬롯 둘다에 넣는다. 이와 유사하게, 후방 움직임 벡터가 하부 필드에 대해서만 전송되지만, 인코더는 이를 후방 움직임 벡터 버퍼의 상부 및 하부 필드 움직임 벡터 슬롯 둘다에 넣는다.
예를 들어, 도 46은 전방 움직임 벡터 버퍼(4610) 및 후방 움직임 벡터 버퍼(4620)에서의 재구성된 매크로블록(4680)에 대한 상부 및 하부 움직임 벡터를 나타낸 것이다. 도 46에 도시된 예에서, 재구성된 매크로블록(4630-4670)의 경우, 인코더/디코더는 전방 움직임 벡터를 전방 움직임 벡터 버퍼(4610)에 저장하고 후방 움직임 벡터를 후방 버퍼(4620)에 저장한다. 재구성된 매크로블록(4680)은 예측 전환을 사용하여 필드 코딩되어 있으며, 그의 상부 필드 움직임 벡터는 (상부 필드 움직임 벡터의 예측 방향에 따라) 전방 또는 후방 움직임 벡터 버퍼에서 상부 및 하부 위치에 저장된다. 매크로블록(4680)의 하부 필드 움직임 벡터는 다른쪽 움직임 벡터 버퍼의 상부 및 하부 위치에 저장된다. 이 예에서, 재구성된 매크로블록(4680)은 예측 모드 전환을 사용한다. 전방 움직임 벡터 및 후방 움직임 벡터 각각이 한 필드에 대해서만 전송되지만, 인코더는 동일한 움직임 벡터를 각자의 전방 및 후방 움직임 벡터 버퍼에대한 상부 및 하부 필드 움직임 벡터 슬롯 둘다에 넣는다.
현재 매크로블록이 보간된 경우, 인코더/디코더는 전방 움직임 벡터(또는 2 필드 MV 매크로블록에 대한 전방 움직임 벡터)를 예측하기 위해 전방 움직임 벡터 버퍼를 사용하고, 후방 움직임 벡터(또는 2 필드 MV 매크로블록에 대한 후방 움직임 벡터)를 예측하기 위해 후방 움직임 벡터 버퍼를 사용하며, 전방 및 후방 움직임 벡터를 각각 (예측 오차가 계산되었으면 이들 값을 가산한 후에) 전방 및 후방 움직임 벡터 버퍼에 저장한다.
인터레이스형 B-프레임에서 매크로블록이 직접-예측된 경우, 인코더/디코더는 상기한 섹션 VII에서 설명한 기술을 사용할 수 있다.
어떤 구현에서, 인터레이스형 B-프레임에 대해 1MV 매크로블록, 2 필드 MV 매크로블록 및 인트라 매크로블록이 허용되며(그렇지만 다른 MV 매크로블록 유형은 그렇지 않음), 이는 움직임 벡터를 예측하기 위한 논리를 간단하게 해주는데 그 이유는 더 적은 현재/이웃 모드 조합에만 대처하면 되기 때문이다. 다른 대안으로서, 4 프레임 MV 매크로블록 및 4 필드 MV 매크로블록 등의 다른 및/또는 추가의 MV 모드가 허용된다. 예를 들어, 도 64, 도 69 및 도 70에 도시된 의사 코드의 일부는 인터레이스형 B-프레임에서의 이러한 다른 조합에 대처하는 데 사용될 수 있다.
C. 인터레이스형 B-필드에 대한 움직임 벡터 예측
일반적으로, 인터레이스형 B-필드의 경우, 이전에 재구성된(또는 도출된) 전방 필드 움직임 벡터는 현재의 전방 필드 움직임 벡터에 대한 예측자로서 사용되고, 이전에 재구성된(또는 도출된) 후방 필드 움직임 벡터는 현재의 후방 필드 움직임 벡터에 대한 예측자로서 사용된다. 전방 또는 후방 모드에서, 현재의 전방 또는 후방 필드 움직임 벡터는 적절한 움직임 벡터 버퍼에 부가되고, 다른쪽(없는) 방향(예를 들어, 전방 모드에서의 후방 방향 또는 후방 모드에서의 전방 방향)에 대한 움직임 벡터가 나중에 예측자로서 사용하기 위해 도출된다.
어떤 구현에서, 필드 움직임 벡터 예측 선택은 상세한 설명의 상기 섹션 III.A.2 및 이하의 섹션 XIV.B.3에 기술된 2-참조 필드 움직임 벡터 예측 논리에 따라 수행된다. 예를 들어, 도 33a 내지 도 33f에 도시된 의사 코드는 인터레이스형 B-필드의 매크로블록에 대한 2개의 필드 전방 움직임 벡터 예측자를 계산하는 데 사용되고, 하나의 움직임 벡터 예측자는 전방 필드 움직임 벡터를 재구성하는 데 사용하기 위해 선택된다. 이어서, 재구성된 움직임 벡터 값은 전방 움직임 벡터 버퍼에 넣어진다. 의사 코드는 또한 매크로블록에 대한 2개의 필드 후방 움직임 벡터 예측자를 계산하는 데도 사용되며, 하나의 예측자는 후방 움직임 벡터 버퍼에 대한 채움 값(fill-in value)으로서 사용하기 위해 선택된다. 인터레이스형 B-필드의 경우, 없는-방향 움직임 벡터 버퍼에서의 "구멍"을 채우기 위해, 인코더/디코더는 동일 극성 및 반대 극성의 움직임 벡터 예측자 간에 선택한다. 이 극성 간의 선택이 행해지는 이유는 주어진 없는 방향에서 2개의 예측자가 발생되기 때문이다(동일 극성의 예측자가 현재 필드로서 또 반대 극성의 예측자가 현재 필드로서 발생됨). 따라서, 어떤 구현에서, 인코더/디코더는 없는-방향 움직임 벡터에 대한 과반수 또는 "우세" 극성 예측자를 선택한다. 이와 같이, 전방 및 후방 움직임 벡터 둘다의 전체 세트가 움직임 벡터 예측에서 사용하기 위해 존재한다. 다른 대안으로서, 우세 극성이 결정되고 예측자 선택이 먼저 수행되며, 단지 선택된 움직임 벡터 예측자만이 계산된다.
한 구현에서 서로 다른 극성의 필드 움직임 벡터 예측자 중에서 선택함으로써 실제-값을 버퍼링하고 구멍을 채우는 프로세스는 도 47의 의사 코드(4700)에 도시되어 있다. 의사 코드(4700)는 구멍-채우기 예측 동안에 없는 방향(missing direction)에 대해 어떤 실제 움직임 벡터도 존재하지 않으며 따라서 우세 극성을 갖는 예측된 없는-방향 움직임 벡터가 인코더/디코더에 의해 선택되는 것을 나타낸 것이다.
어떤 구현에서, 인터레이스형 B-필드 움직임 벡터 예측에 대한 전체적인 방식은 다음과 같다.
매크로블록이 전방 예측된 경우, 인코더/디코더는 전방 움직임 벡터 버퍼의 동일 및/또는 반대 극성 움직임 벡터 후보(예를 들어, 대부분의 경우 좌측, 상부 및 우측-상부 이웃으로부터의 3개 중의 메디안 예측을 사용함) 또는 버퍼링된 움직임 벡터로부터 도출된 움직임 벡터로부터 그의 전방 움직임 벡터를 예측한다. 인코더/디코더는 재구성된 전방 움직임 벡터를 전방 움직임 벡터 버퍼에 저장하고 우세 후방 움직임 벡터 예측자(이와 유사하게 후방 움직임 벡터 버퍼의 공간상 이웃으로부터의 3개 중의 메디안으로 예측됨)를 계산하여 후방 움직임 벡터 버퍼에서의 대응하는 위치에 저장한다.
매크로블록이 후방 예측된 경우, 인코더/디코더는 후방 움직임 벡터 버퍼의 동일 및/또는 반대 극성 움직임 벡터 후보(예를 들어, 대부분의 경우 좌측, 상부 및 우측-상부 이웃으로부터의 3개 중의 메디안 예측을 사용함) 또는 버퍼링된 움직임 벡터로부터 도출된 움직임 벡터로부터 그의 후방 움직임 벡터를 예측한다. 인코더/디코더는 재구성된 후방 움직임 벡터를 후방 움직임 벡터 버퍼에 저장하고 우세 전방 움직임 벡터 예측자(이와 유사하게 전방 움직임 벡터 버퍼의 공간상 이웃으로부터의 3개 중의 메디안으로 예측됨)를 계산하여 전방 움직임 벡터 버퍼에서의 대응하는 위치에 저장한다.
매크로블록이 보간된 경우, 인코더/디코더는 전방 움직임 벡터 성분을 예측하는 데 전방 움직임 벡터를 사용하고, 후방 움직임 벡터 성분을 예측하는 데 후방 움직임 벡터를 사용하며, 재구성된 전방 및 후방 움직임 벡터를 각각 (예측 오차가 계산되었으면 이들 오차를 부가한 후에) 전방 및 후방 움직임 벡터 버퍼에 저장한다.
매크로블록이 직접 예측된 경우, 인코더/디코더는 현재 필드에 대한 직접 모드 움직임 벡터를 계산하고 전방 및 후방 움직임 벡터 성분을 각자의 움직임 벡터 버퍼에 저장한다.
인트라-코딩된 매크로블록인 이웃들은 움직임 벡터 예측에서 무시된다.
여러가지 특수한 경우는 인터레이스형 B-필드에서의 1MV 및 4MV 매크로블록의 조합들에 대한 것이다. 도 6a 내지 도 10은 순차 P-프레임에 대한 움직임 벡터 예측의 예측자 패턴을 나타낸 것이다. 바로 이들 패턴은 혼합-MV 인터레이스형 B-필드에서의 1MV 또는 4MV 매크로블록에 대한 움직임 벡터의 움직임 벡터 예측을 위한 후보 움직임 벡터에 대해 고려되는 블록 또는 매크로블록의 위치를 나타낸다. 프레임이 한 매크로블록 폭인 특별한 경우에, 예측자는 항상 예측자 A(상부 예측자)이다. 여러가지 다른 규칙은 상부 행 4MV 매크로블록에 대한 상부 행 블록, 상부 행 1MV 매크로블록, 및 인트라-코딩된 예측자 등의 다른 특별한 경우에 대한 것이다.
도 6a 내지 도 10에 도시된 예측자 패턴은 전방 움직임 벡터 버퍼 내의 위치들로부터의 후보를 사용하는 전방 예측에 대해 사용되고 후방 움직임 벡터 버퍼 내의 위치들로부터의 후보를 사용하는 후방 예측에 대해서도 사용된다. 게다가, 도 6a 내지 도 10에 도시된 예측자 패턴은 인터레이스형 B-프레임에 대해 상기한 2-참조 필드 움직임 벡터 예측 논리와 관련하여 사용된다.
도 6a 및 도 6b는 혼합-MV 인터레이스형 B-필드에서의 1MV 현재 매크로블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타낸 것이다. 이웃하는 매크로블록은 1MV 또는 4MV 매크로블록일 수 있다. 도 6a 및 도 6b는 이웃들이 4MV인 것으로 가정할 때 후보 움직임 벡터의 위치를 나타낸 것이다(즉, 예측자 A는 현재 매크로블록 상부의 매크로블록에서의 블록 2에 대한 움직임 벡터이고, 예측자 C는 현재 매크로블록의 바로 좌측의 매크로블록에서의 블록 1에 대한 움직임 벡터이다). 이웃들 중 어느 것이라도 1MV 매크로블록인 경우, 도 5a 및 도 5b에 도시된 움직임 벡터 예측자는 전체 매크로블록에 대한 움직임 벡터 예측자로 취해진다. 도 6b가 도시하는 바와 같이, 매크로블록이 그 행에서의 마지막 매크로블록인 경우, 예측자 B는 그렇지 않은 경우에서와 같이 우측-상부 매크로블록에서의 블록 2로부터가 아니라 좌측-상부 매크로블록의 블록 3으로부터 온 것이다.
도 7a 내지 도 10은 혼합-MV 인터레이스형 B-필드의 4MV 매크로블록에서의 4개의 루미넌스 블록 각각에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타낸 것이다. 도 7a 및 도 7b는 위치 0에 있는 블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타내고, 도 8a 및 도 8b는 위치 1에 있는 블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타내며, 도 9는 위치 2에 있는 블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타내고, 도 10은 위치 3에 있는 블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 블록들의 위치를 나타낸다. 다시 말하면, 이웃이 1MV 매크로블록인 경우, 그 매크로블록에 대한 움직임 벡터 예측자는 그 매크로블록의 블록들에 대해 사용된다.
매크로블록이 그 행에서의 첫번째 매크로블록인 경우, 블록 0에 대한 예측자 B는 그 행에 있는 나머지 매크로블록에 대한 블록 0와 다르게 처리된다(도 7a 및 도 7b 참조). 이 경우, 예측자 B는 그렇지 않은 경우에서와 같이 현재 매크로블록의 좌측 상부의 매크로블록에서의 블록 3으로부터가 아니라 현재 매크로블록 바로 상부의 매크로블록에서의 블록 3으로부터 취해진다. 이와 유사하게, 매크로블록이 그 행에서 마지막 매크로블록인 경우, 블록 1에 대한 예측자 B는 다르게 처리된다(도 8a 및 도 8b 참조). 이 경우, 예측자는 그렇지 않은 경우에서와 같이 현재 매크로블록의 우측 상부의 매크로블록에서의 블록 2로부터가 아니라 현재 매크로블록 바로 상부의 매크로블록에서의 블록 2로부터 취해진다. 일반적으로, 매크로블록이 첫번째 매크로블록 열에 있는 경우, 블록 0 및 2에 대한 예측자 C는 0으로 설정된다.
다시 말하면, 인트라-코딩되어 있는 위치 A, B 또는 C에 있는 이웃들은 움직임 벡터 예측에 있어서 무시된다.
(예를 들어, 움직임 벡터 차분 정보를 가산함으로써) 4MV 매크로블록에 대한 움직임 벡터의 재구성 후에, 재구성된 실제 움직임 벡터는 재구성된 움직임 벡터의 예측 방향에 대해 적절한 경우 전방 움직임 벡터 버퍼 또는 후방 움직임 벡터 버퍼에 넣어진다. 없는 방향에 대한 움직임 벡터 버퍼의 대응하는 비어있는 슬롯은 동일 및 반대 극성에 대한 없는 방향의 움직임 벡터 예측자를 계산하고 서로 다른 극성 움직임 벡터 예측자 간에 선택하며 움직임 벡터 예측자를 비어있는 슬롯에 저장함으로써 채워진다.
다시 도 34a 및 도 34b를 참조하면, 움직임 벡터 예측을 위해, 인코더/디코더는 의사 코드(3400)에 예시한 스케일링 동작을 사용하여 한 필드 움직임 벡터 예측자를 다른 필드 움직임 벡터 예측자로부터 도출한다. 현재 필드가 인터레이스형 비디오 프레임에서의 첫번째 필드인 경우에 대한 2가지 가능한 값 세트가 도 35의 테이블(3500)에 나타내어져 있고, 현재 필드가 인터레이스형 비디오 프레임에서의 두번째 필드인 경우에 대한 2가지 가능한 값 세트가 도 36의 테이블(3600)에 나타내어져 있다. 테이블(3500, 3600)에서, SCALEOPP, SCALESAME1, SCALESAME2, SCALEZONE1_X, SCALEZONE1_Y, ZONE1OFFSET_X 및 ZONE1OFFSET_Y는 참조 프레임 거리에 의존한다.
어떤 구현에서, 인터레이스형 B-필드에서의 전방 및 후방 참조에 대한 참조 프레임 거리는 비율 코딩(fraction coding)을 사용하여 계산된다. BFRACTION 신택스 요소(이는 단지 인터레이스형 B-필드의 직접 모드 매크로블록에 대해서가 아니라 인터레이스형 B-필드의 전방 또는 후방 예측 모드 매크로블록에 대해 신호됨)는 이하의 의사 코드에 나타낸 바와 같이 전방 및 후방 참조 픽처 거리를 도출하는 데 사용된다.
전방 참조 프레임 거리(FRFD) =
NINT((BFRACTION 분자/ BFRACTION 분모) * 참조 프레임 거리) - 1
if(FRFD < 0) then = 0
후방 참조 프레임 거리(BRFD) =
참조 프레임 거리 - FRFD - 1
(여기서, NINT는 가장 가까운 정수(nearest integer) 연산자임)
BFRACTION 분자 및 분모는 BFRACTION 신택스 요소로부터 디코딩된다. 요소 BFRACTION은 (예를 들어, 인터레이스형 B-필드에 대한 프레임 레벨에서) 비트스트림으로 전송될 수 있는 서로 다른 비율을 나타내는 데 사용될 수 있다. 비율은 0과 1 사이의 제한된 일련의 이산 값을 취하며 그의 앵커에 의해 형성된 구간 내에서의 B-픽처의 상대적 시간 위치를 나타낸다.
인터레이스형 B-필드를 갖는 프레임에서의 두번째 필드의 전방 예측 및 후방 예측의 경우, 인코더/디코더는 도 34a 및 도 34b의 의사 코드(3400)에 따라 움직임 벡터 스케일링을 수행한다. 그렇지만, 어떤 구현에서, 첫번째 필드에 대한 후방 움직임 벡터 예측을 수행하는 인코더/디코더는 도 48의 의사 코드(4800)에 정의된 함수 scaleforopposite_x, scaleforopposite_y, scaleforsame_x 및 scaleforsame_y를 사용한다. 한 구현에서의 첫번째 인터레이스형 B-필드에 대한 SCALESAME, SCALEOPP1, SCALEOPP2, SCALEZONE1_X, SCALEZONE1_Y, ZONE1OFFSET_X 및 ZONE1OFFSET_Y의 값이 도 49의 테이블(4900)에 나타내어져 있다.
테이블(4900)에서, 변수 N과 움직임 벡터 범위 간의 관계는 도 35 및 도 36 및 상기 표 1을 참조하여 기술된 관계와 동일하다.
다른 대안으로서, 참조 프레임 거리는 다른 방식으로 계산되거나 스케일링이 다른 알고리즘에 따라 수행된다. 예를 들어, 스케일링은 N의 값에 상관없이 수행된다(즉, N은 1인 것으로 가정됨).
X. 인터레이스형 B-필드를 갖는 "자기-참조" 프레임
인터레이스형 B-필드를 갖는 프레임은 2개의 개별적인(또 얼마간 독립적으로 코딩된) 필드로서 인코딩된다. 상부 필드는 프레임의 짝수 래스터 라인(라인 0부터 시작함)으로 이루어져 있고, 하부 필드는 프레임의 홀수 래스터 라인으로 이루어져 있다. "필드 픽처" 내의 필드들이 독립적으로 디코딩가능하기 때문에, 이들은 임의의 사전 설정된 순서로 전송될 필요가 없다. 예를 들어, 인코더는 하부 필드를 먼저, 그 뒤를 따라 상부 필드를 전송할 수 있고, 그 역도 마찬가지이다. 어떤 구현에서, 2개의 필드의 순서는 "상부 필드 먼저(top field first)" 신택스 요소로 표시되며, 이 요소는 프레임의 2개의 필드를 디코딩하기 위한 정확한 시간상 순서에 따라 참 또는 거짓이다.
종래의 인코더 및 디코더는 이전 및 그 다음의 앵커 프레임(예를 들어, I- 또는 P-프레임) 또는 이전 및 그 다음 앵커 프레임에서의 필드를 현재의 B-픽처에 대한 움직임 보상을 수행하기 위한 "참조" 픽처로서 사용하였다. 종래의 인코더 및 디코더는 또한 B-픽처 또는 그의 일부가 임의의 픽처에 대한 움직임 보상 참조로서 사용되지 못하도록 제한하였다. 그렇지만, 설명된 기술 및 도구의 어떤 구현에서, 이들 "규칙" 중 하나 이상이 완화되었다.
예를 들어, 어떤 구현에서, 첫번째 인터레이스형 B-필드는 이전 및 그 다음 앵커 픽처로부터의 첫번째 및 두번째 필드를 참조한다. 두번째 인터레이스형 B-필드는, 그 다음 앵커 픽처의 첫번째 및 두번째 필드 이외에, 현재의 픽처로부터의 첫번째 인터레이스형 B-필드를 "반대 극성" 필드로서 참조하고 이전의 앵커 프레임의 동일 극성 필드를 "동일 극성" 필드로서 참조한다.
도 50b는 인터레이스형 비디오 프레임 B2에서의 2개의 인터레이스형 B-필드 각각에 대한 참조 필드를 나타낸 도면이다. 도 50b에 도시한 예에서, 디코딩될 첫번째 B-필드(여기서는, 상부 필드)는 총 4개의 참조 필드를 위해 전방(시간상 과거) 앵커 P1에서의 2개의 참조 필드 및 후방(시간상 미래) 앵커 P3로부터의 2개의 참조 필드를 참조하도록 허용된다. B2에 대해 디코딩될 두번째 인터레이스형 B-필드는 미래의 앵커 P3로부터의 양 필드 뿐만 아니라, 동일한 인터레이스형 비디오 프레임으로부터의 첫번째 필드(따라서 B-픽처의 일부가 참조로서 동작할 수 없게 하는 규약을 깨뜨림) 및 이전의 앵커 P1으로부터의 하나의 참조 필드를 참조하도록 허용된다. 비교를 위해, 도 50a는 인터레이스형 비디오 프레임의 인터레이스형 P-필드가 따르는 규약을 나타낸 것이다.
이들 인터레이스형 B-필드 참조 규칙을 구현하는 기술 및 도구는 더 나은 압축을 제공할 수 있다. 인터레이스형 비디오의 필드 코딩은 많은 움직임(즉, 상부 필드와 하부 필드 간에 상당한 움직임이 있는 경우)을 인코딩하는 데 가장 효율적이다. 이 시나리오에서, 예를 들어, 프레임의 상부(및 첫번째 코딩된) 필드는 시간상 훨씬 더 멀리 떨어져 있는 이전의 프레임으로부터 취해진 상부 필드보다 동일 프레임의 하부 필드에서의 픽셀들에 대해 훨씬 더 나은 예측자가 된다. 이들의 훨씬 더 먼 시간상 거리 때문에, 이들 시간상으로 더 먼 예측자는 움직임이 많은 경우 훨씬 더 약한 예측을 제공한다. 게다가, 시간상으로 더 멀리 떨어져 있는 예측자에 대해 폐색(occlusion)의 확률이 증가되며, 이 결과 코딩하기 어려운 인트라-코딩된 매크로블록이 더 많아진다. 상세하게는, 실험 결과 프레임의 시간상 두번째 인터레이스형 B-필드가 동일 프레임의 시간상 첫번째 인터레이스형 B-필드를 참조할 수 있게 하는 것이 상당한 압축 이득을 얻을 수 있음을 확인하였다.
XI. 인터레이스형 B-필드에서의 전방 모드의 비트플레인 코딩
상기 섹션 X에서 언급한 바와 같이, 어떤 구현에서, 현재 프레임의 두번째 코딩된 인터레이스형 B-필드는 현재 프레임의 첫번째 코딩된 인터레이스형 B-필드를 참조할 수 있다. 이 "자기-참조" 기술은 많은 움직임을 갖는 프레임에서의 인터레이스형 B-필드에서 효과적인데 그 이유는 현재 프레임 내에서의 시간상 더 가까운 B-필드가 종종 시간상 더 먼 앵커 필드보다 더 나은 예측자이기 때문이다. 인터레이스형 B-필드를 갖는 프레임이 많은 움직임을 가지고 또 시간상 두번째 인터레이스형 B-필드가 시간상 첫번째 인터레이스형 B-필드보다 예측 참조로서 선호되는 경우, 두번째 인터레이스형 B-필드에서의 매크로블록에 대한 보다 효율적인 예측 모드는 종종 "전방"이 된다.
인터레이스형 B-필드에서의 전방 모드 예측이 비트 레이트를 감소시키기 위한 효과적인 도구이기 때문에, 전방 모드 예측 시그널링의 전체 비용을 감소시키기 위해 시그널링 오버헤드를 감소시키는 것이 유리하며, 낮은 비트 레이트 상황에서 특히 그렇다. 따라서, 어떤 실시예에서, 인코더는 통합된 비트플레인 코딩 기술을 사용하여 전방 모드 예측 정보를 인코딩한다. 예를 들어, 인코더는 전방 모드 예측 정보를 압축된 비트플레인에 인코딩하며, 이 경우 비트플레인 내의 각각의 비트는 매크로블록과 연관되어 있고, 각각의 비트의 값은 매크로블록이 전방 모드 또는 비전방 예측 모드로 코딩되었는지를 신호한다.
압축된 비트플레인은 프레임 레벨, 필드 레벨 또는 어떤 다른 레벨에서 전송될 수 있다. 비트플레인 코딩 기술은 인터레이스형 B-필드에 대한 다른 예측 모드와 비교하여 전방 모드 바이어스(forward mode bias)를 이용한다. 예를 들어, 인터레이스형 B-필드에서의 매크로블록의 대부분이 전방 예측을 사용하는 경우, 인코더는 전방/비전방 결정을 비트플레인 코딩함으로써 매크로블록당 1비트 이하로 시그널링 오버헤드를 감소시킬 수 있다.
도 51은 하나 이상의 비트플레인 코딩 모드를 갖는 비디오 인코더에서의 인터레이스형 B-필드의 매크로블록에 대한 전방/비전방 예측 모드 결정 정보를 인코딩하는 기술(5100)을 나타낸 것이다. 도 52는 하나 이상의 비트플레인 코딩 모드를 갖는 비디오 인코더에 의해 인코딩된 전방/비전방 예측 모드 결정 정보를 디코딩하는 대응하는 기술(5200)을 나타낸 것이다.
도 51을 참조하면, 인코더는 전방/비전방 예측 모드 결정 정보를 코딩하기 위한 비트플레인 코딩 모드를 선택한다(단계 5110). 코딩 모드가 선택된 후에, 인코더는 전방/비전방 예측 모드 결정 정보를 선택된 모드로 인코딩한다(단계 5120). 인코더는 필드별로 비트플레인 코딩 모드를 선택한다. 다른 대안으로서, 인코더는 어떤 다른 방식으로(예를 들어, 시퀀스 레벨에서) 비트플레인 코딩 모드를 선택한다. 또는, 단지 하나의 비트플레인 코딩 모드만이 사용되는 경우, 비트플레인 코딩 모드의 선택이 수행되지 않는다. 인코더가 전방/비전방 예측 모드 결정 정보의 인코딩을 완료한 경우(단계 5130), 전방/비전방 예측 모드 결정 정보의 인코딩이 종료한다.
도 52를 참조하면, 디코더는 전방/비전방 예측 모드 결정 정보를 인코딩하기 위해 인코더에 의해 사용된(및 신호된) 비트플레인 코딩 모드를 판정한다(단계 5210). 디코더는 이어서 전방/비전방 예측 모드 결정 정보를 선택된 모드로 디코딩한다(단계 5220). 디코더는 필드별로 비트플레인 코딩 모드를 판정한다. 다른 대안으로서, 디코더는 어떤 다른 방식으로(예를 들어, 시퀀스 레벨에서) 비트플레인 코딩 모드를 판정한다. 또는, 단지 하나의 비트플레인 코딩 모드만이 이용가능한 경우, 비트플레인 코딩 모드의 선택이 수행되지 않는다. 디코더가 전방/비전방 예측 모드 결정 정보의 디코딩을 완료한 경우(단계 5230), 전방/비전방 예측 모드 결정 정보의 디코딩이 종료한다.
몇가지 결합 구현에 따른 여러가지 비트플레인 코딩 모드에 대한 시그널링 및 디코딩에 관한 추가의 상세에 대해서는, 이하의 섹션 XIV를 참조하기 바란다. 일반적인 비트플레인 코딩에 관한 더 많은 정보에 대해서는, 2002년 12월 16일자로 출원된 발명의 명칭이 "Skip Macroblock Coding(건너뜀 매크로블록 코딩)"인 미국 특허 출원 제10/321,415호를 참조하기 바라며, 이는 여기에 인용함으로써 그 전체 내용이 본 명세서에 포함된다. 다른 대안으로서, 전방/비전방 모드 정보를 나타내는 비트가 미압축 상태로 및/또는 어떤 다른 레벨(예를 들어, 매크로블록 레벨)에서 전송될 수 있다.
비전방 예측이 표시되어 있는 경우, 인코더는 매크로블록에 대해 비전방 예측 모드(예를 들어, 후방 모드, 직접 모드, 보간 모드, 또는 인트라 모드)를 지정한다. 어떤 실시예에서, 인코더는 이하의 표 2에 나타낸 바와 같은 VLC 테이블을 참조하여 매크로블록 레벨에서 비전방 예측 모드를 코딩한다.
움직임 예측
모드
VLC
테이블
BMVTYPE VLC |
움직임 예측 모드 |
0 |
후방 |
10 |
직접 |
11 |
보간 |
표 2에 나타낸 예에서, 후방 모드는 선호되는 비전방 예측 모드이다. 인코더는 1-비트 신호로 후방 모드를 나타내고 2-비트 신호로 직접 및 보간 모드를 나타낸다. 다른 대안으로서, 인코더는 다른 예측 모드를 나타내기 위해 다른 코드를 사용하고 및/또는 다른 비전방 예측 모드를 선호한다.
어떤 실시예에서, 인트라 모드는 특별한 차분 움직임 벡터 값에 의해 신호되며, 이 값은 그것이 코딩되는 방식으로 예측 모드가 인트라 모드임을 나타낸다. 따라서, 차분 움직임 벡터 값은 매크로블록이 인트라 코딩된 것으로 추정하는 데 사용되지만, 규약으로서 인코더는 미정의된 예측 유형을 갖지 않도록 하기 위해 예측 유형을 후방으로 설정한다.
XII. 인터레이스형 B-필드에서의 직접 모드에 대한 동일 위치의 움직임 벡터의 선택
어떤 구현에서, 필드-코딩된 B-픽처에서의 매크로블록에 대한 직접 모드 움직임 벡터는 특별한 논리를 사용하여 선택된다. 인터레이스형 B-필드에서의 현재 매크로블록에 대해, 그 다음 앵커 픽처의 대응하는 필드에서의 동일 위치의 매크로블록이 4개의 움직임 벡터를 사용하여 코딩된 경우, 이 논리는 동일 위치의 매크로블록에 대한 최대 4개의 움직임 벡터 중에서 보다 우세한 극성(예를 들어, 동일 또는 반대)을 선호한다. 현재 매크로블록에 대해 사용하기 위한 움직임 벡터가 선택되었으면, 인코더/디코더는 직접 모드 움직임 벡터를 제공하기 위해 스케일링 동작을 적용할 수 있다.
어떤 구현에서, 인터레이스형 B-필드의 직접 모드 1MV 매크로블록에 대해, 인코더/디코더는 동일 극성을 갖는 참조 필드(예를 들어, 시간상으로 그 다음 P-필드)에서의 동일 위치의 매크로블록에 대한 움직임 벡터를 계산한다. 참조 필드에서의 동일 위치의 매크로블록이 1MV 매크로블록인 경우, 인코더/디코더는 인터레이스형 B-필드에서의 매크로블록에 대한 직접 모드 움직임 벡터를 도출하기 위해 단일의 움직임 벡터를 사용한다. 반면에, 참조 필드에서의 동일 위치의 매크로블록이 4MV 매크로블록인 경우, 인코더/디코더는 인터레이스형 B-필드에서의 매크로블록에 대한 직접 모드 움직임 벡터를 도출하는 데 사용되는 움직임 벡터를 선택함에 있어서 4개의 움직임 벡터의 극성을 고려하고 우세 극성을 선호한다. 인코더/디코더는 인터레이스형 B-필드의 디코딩 동안에 필요한 경우 이 선택 논리를 참조 필드에서의 4MV 매크로블록에 적용할 수 있다. 또는, 인코더/디코더는 참조 필드의 디코딩한 후에 이 선택 논리를 적용할 수 있으며, 이어서 나중의 인터레이스형 B-필드 디코딩 시에 사용될 값만을 버퍼링한다.
예를 들어, 참조 필드에서의 동일 위치의 4MV 매크로블록에 대해, (4개 중에서) 동일 극성 필드로부터의 움직임 벡터의 수가 반대 극성 필드로부터의 수보다 많으면, 인코더/디코더는 직접 모드 인터레이스형 B-필드 디코딩에서 사용하기 위한 움직임 벡터를 계산하기 위해, 동일 극성 움직임 벡터의 수가 4개, 3개, 2개 또는 1개인 경우, 각각 4개 중의 메디안, 3개 중의 메디안, 2개의 산술 평균 또는 동일 극성 필드 움직임 벡터의 값을 사용할 수 있다. 그렇지 않고, 반대 극성 필드로부터의 움직임 벡터의 수가 동일 극성 필드로부터의 수보다 많으면, 인코더/디코더는 직접 모드 인터레이스형 B-필드 디코딩에서 사용하기 위한 반대 극성 필드 움직임 벡터들로부터 대표적인 움직임 벡터를 가져오기 위해 유사한 연산을 사용할 수 있다. 동일 위치의 매크로블록에 대한 원래 4개의 움직임 벡터 세트 중의 3개 이상이 (극성에 상관없이) 인트라인 경우, 인코더/디코더는 간단히 동일 위치의 대표적인 움직임 벡터를 인트라(즉, (0,0))로서 취급할 수 있다. 그렇지만, 어떤 구현에서, 인터레이스형 B-필드에서의 모든 인트라 MB는 1MV로서 코딩되고, 따라서 원래의 4개의 움직임 벡터 중 3개 이상이 인트라이면 동일 위치의 대표적인 움직임 벡터가 인트라로서 취급되는 경우가 실제로는 결코 일어나지 않는다.
도 53의 의사 코드(5300)는 인터레이스형 B-필드에서의 직접 모드 움직임 벡터에 대한 기초로서 사용하기 위한 움직임 벡터의 선택 프로세스를 나타낸 것이다. 어떤 구현에서, 이 선택 프로세스는 전방 및 후방 지향 직접 모드 움직임 벡터를 생성하는 스케일링 동작에 선행하는 것이다.
XIII. 인터레이스형 비디오 프레임에서의 인트라-코딩된 B-필드
인터레이스형 BI-필드(또는 "인트라 B-필드")는 그의 참조 픽처와 독립적으로 코딩된 필드를 말한다. 인터레이스형 BI-필드는 이들이 다른 픽처를 예측하기 위한 앵커로서 사용될 수 없다는 점에서 다른 인트라 필드(예를 들어, 인터레이스형 I-필드)와 다르다. 인터레이스형 BI-필드에 대한 픽처간 의존성(inter-picture dependency)이 없으며, 비트스트림에 존재한다는 것이 독립적으로 디코딩가능한 픽처 세그먼트 또는 그룹의 시작을 나타내지는 않는다. 그렇지만, 인터레이스형 비디오 프레임에서의 첫번째 필드는 BI-필드로서 코딩되어 있는 경우 프레임에서의 두번째 필드를 예측하는 데 사용될 수 있으며, 이는 인터레이스형 B-필드로서 코딩될 수 있다. 이러한 혁신은 또한 전체 프레임을 인트라 프레임으로서 인코딩하거나 양 필드를 인트라 필드로 인코딩하는 것이 아니라 많은 경우에 프레임의 1/2에 대해서만 인트라 코딩을 사용함으로써 전체적인 압축을 향상시킨다. 어떤 구현에서, 프레임은 2개의 B-필드, 2개의 BI-필드 또는 하나의 B-필드 및 하나의 BI-필드를 포함할 수 있다.
인터레이스형 I-필드보다 오히려 인터레이스형 BI-필드를 사용하는 이유가 있다. 한가지 이유는 시간 확장성(temporal scalability)을 희생시키지 않는다는 것이다. 예를 들어, 디코더가 디지털 비디오를 렌더링하는 중이고 프로세싱 요구를 따라가기 위해 어떤 픽처를 즉각 누락시킬 필요가 있을 때, 디코더는 누락시킬 수 있는 필드 시퀀스를 찾을 수 있다. 시퀀스에서의 인트라 필드가 키 필드(key field)인 것으로 밝혀지면, 디코더는 다른 필드에 대한 참조로서 사용하기 위해 이들을 디코딩해야만 하며 이들을 누락시킬 수 없다. 그렇지만, 시퀀스에서의 인트라 필드가 BI-필드로서 코딩되어 있는 경우, 디코더는 여전히 차후의 움직임 보상을 훼손시키지 않고 이들을 누락시키는 옵션을 가지고 있다.
인터레이스형 BI-필드는 BI-필드 내에서의 움직임 보상 관련 요소(또는 그것이 없음을 신호하는 요소)가 회피될 수 있기 때문에 인터레이스형 BI-필드가 인트라 코딩 및 디코딩에 대해 사용되는 신택스 요소를 보다 효율적으로 신호한다는 점에서 인트라 매크로블록을 갖는 인터레이스형 B-필드와 다르다. 환언하면, (통상의 B-필드보다) 인터레이스형 BI-필드를 사용하는 이유는 인터-필드 예측이 (예를 들어, 장면 변화 또는 복잡한 움직임으로 인해) 실패하는 비디오 시퀀스에서의 한 지점에서 인터레이스형 B-필드를 코딩할 때 발생한다. 종종, 이러한 필드에서의 대부분의 매크로블록은 인트라 매크로블록으로서 코딩될 필요가 있다. 이 시나리오에서, 비트 레이트의 관점에서 볼 때 전체 B-필드를 BI-필드로서 코딩하는 것이 필드에서의 각 매크로블록에 대한 에측 모드 정보를 전송하는 것보다 더 간단하다. 인터레이스형 B-필드에 대한 양호한 예측이나 움직임 보상이 가능하지 않은 경우, 이는 BI-필드로서 코딩될 수 있다.
어떤 구현에서, 인코더는 비트스트림에 BI-필드가 있는 것을 픽처 유형의 가능한 값들 중 하나로서 신호할 수 있다. 다른 대안으로서, BI-필드의 존재는 어떤 다른 방식으로 표시될 수 있다.
XIV. 결합 구현
이제부터 주요 결합 구현과 사소한 차이점을 갖는 대체 결합 구현 이외에, 비트스트림 신택스, 시맨틱스 및 디코더에 대한 상세한 결합 구현에 대해 설명한다.
A. 비트스트림 신택스
여러가지 결합 구현에서, 인터레이스형 B-픽처에 대한 데이터는 복수의 계층(예를 들어, 시퀀스, 프레임, 필드, 매크로블록, 블록 및/또는 서브-블록 계층)을 갖는 비트스트림의 형태로 제공된다.
인터레이스형 B-필드 및/또는 BI-필드를 갖는 인터레이스형 비디오 프레임의 경우, 프레임-레벨 비트스트림 요소는 도 54에 나타내어져 있다. 각 프레임에 대한 데이터는 프레임 헤더 및 그에 뒤따르는 필드 계층에 대한 데이터(필드마다 반복되는 "FieldPicLayer" 요소로 나타내어져 있음)로 이루어져 있다. 인터레이스형 B-필드 및 BI-필드에 대한 필드 헤더를 구성하는 비트스트림 요소는 각각 도 55 및 도 56에 나타내어져 있다. 인터레이스형 B-필드(인트라, 1MV, 또는 4MV 매크로블록에 대한 것인지에 상관없이) 및 BI-필드에 대한 매크로블록 계층을 구성하는 비트스트림 요소는 각각 도 57 및 도 58에 나타내어져 있다.
인터레이스형 B-프레임의 경우, 프레임-레벨 비트스트림 요소는 도 59에 도시되어 있다. 각 프레임에 대한 데이터는 프레임 헤더 및 그에 뒤따르는 매크로블록 계층에 대한 데이터로 이루어져 있다. 인터레이스형 B-프레임(인트라 또는 여러가지 인터 유형 매크로블록에 대한 것인지에 상관없이)에 대한 매크로블록 계층을 구성하는 비트스트림 요소는 도 60에 도시되어 있다.
이하의 섹션들은 양방향 예측 인터레이스형 픽처와 관련한 시그널링에 관련된 프레임, 필드 및 매크로블록 계층에서의 선택된 비트스트림 요소에 대해 기술한다. 선택된 비트스트림 요소가 특정의 계층과 관련하여 기술되어 있지만, 어떤 비트스트림 요소는 2개 이상의 계층에서 사용될 수 있다.
1. 선택된 프레임 계층 요소
도 54는 인터레이스형 B-필드 및/또는 BI-필드(또는 아마도 다른 종류의 인터레이스형 필드)를 포함하는 프레임에 대한 프레임-레벨 비트스트림 신택스를 나타낸 도면이다. 도 59는 인터레이스형 B-프레임에 대한 프레임-레벨 비트스트림 신택스를 나타낸 도면이다. 구체적인 비트스트림 요소에 대해서는 이하에서 설명한다.
프레임 코딩 모드(FCM)(가변 크기)
FCM은 픽처 코딩 유형을 가리키는 데 사용되는 가변 길이 코드["VLC"]이다. FCM은 이하의 표 3에 나타낸 바와 같은 프레임 코딩 모드에 대한 값을 취한다.
프레임 코딩 모드 VLC
FCM 값 |
프레임 코딩 모드 |
0 |
순차 |
10 |
프레임-인터레이스 |
11 |
필드-인터레이스 |
필드 픽처 유형(FPTYPE)(3비트)
FPTYPE은 인터레이스형 P-필드, 인터레이스형 I-필드, 인터레이스형 B-필드, 및/또는 인터레이스형 BI 필드를 포함하는 프레임에 대한 프레임 헤더에 존재하는 3-비트 신택스 요소이다. FPTYPE는 이하의 표 4에 따라 인터레이스형 비디오 프레임에서의 필드 유형의 여러가지 조합에 대한 값을 갖는다.
필드 픽처 유형 FLC
FPTYPE FLC |
첫번째 필드 유형 |
두번째 필드 유형 |
000 |
I |
I |
001 |
I |
P |
010 |
P |
I |
011 |
P |
P |
100 |
B |
B |
101 |
B |
BI |
110 |
BI |
B |
111 |
BI |
BI |
참조 거리(REFDIST)(가변 크기)
REFDIST는 가변 크기의 신택스 요소이다. 이 요소는 현재 프레임과 참조 프레임 간의 프레임 수를 가리킨다. 표 5는 REFDIST 값을 인코딩하는 데 사용되는 VLC를 나타낸 것이다.
REFDIST VLC 테이블
참조 프레임 거리 |
VLC 코드워드(이진) |
VLC 크기 |
0 |
00 |
2 |
1 |
01 |
2 |
2 |
10 |
2 |
N |
11[(N-3)개의 1]0 |
N |
표 5에서의 마지막 행은 2보다 큰 참조 프레임 거리를 나타내는 데 사용되는 코드워드를 가리킨다. 이들은 이진 (11) 및 그에 뒤따른 N-3개의 1(여기서, N은 참조 프레임 거리임)로서 코딩된다. 코드워드에서의 마지막 비트는 0이다. 예를 들어,
N = 3, VLC 코드워드 = 110, VLC 크기 = 3
N = 4, VLC 코드워드 = 1110, VLC 크기 = 4
N = 5, VLC 코드워드 = 11110, VLC 크기 = 5
픽처 유형(PTYPE)(가변 크기)
PTYPE은 인터레이스형 B-프레임(또는 인터레이스형 I-프레임 또는 인터레이스형 P-프레임 등의 다른 종류의 인터레이스형 프레임)에 대한 프레임 헤더에 존재하는 가변 크기 신택스 요소이다. PTYPE은 이하의 표 6에 따라 서로 다른 프레임 유형에 대한 값들을 갖는다.
픽처 유형 VLC
PTYPE VLC |
픽처 유형 |
110 |
I |
0 |
P |
10 |
B |
1110 |
BI |
1111 |
건너뜀 |
PTYPE이 프레임이 건너뜀임을 가리키는 경우, 이 프레임은 그의 참조 프레임과 동일한 P 프레임으로서 취급된다. 건너뜀 프레임의 재구성은 개념적으로 참조 프레임을 복사하는 것과 동등하다. 건너뜀 프레임은 이 프레임을 위해 어떤 추가의 데이터도 전송되지 않음을 의미한다.
B-프레임 직접 모드 MB 비트 신택스 요소(DIRECTMB)(가변 크기)
DIRECTMB 신택스 요소는 직접 모드로 코딩되어 있는 B 픽처(여기서는, 인터레이스형 B-프레임)에서의 매크로블록을 가리키기 위해 비트플레인 코딩을 사용한다. DIRECTMB 신택스 요소는 또한 직접 모드가 미처리 모드(raw mode)로 신호됨을 신호할 수 있으며, 이 경우 직접 모드는 인터레이스형 B-프레임의 매크로블록에 대한 매크로블록 레벨에서 신호된다.
확장된 MV 범위 플래그(MVRANGE)(가변 크기)
MVRANGE는 시퀀스-레벨 EXTENDED_MV 비트가 1로 설정되어 있는 경우 존재하는 가변 크기의 신택스 요소이다. MVRANGE VLC는 움직임 벡터 범위를 나타낸다.
확장된 차분 MV 범위 플래그(DMVRANGE)(가변 크기)
DVMRANGE는 시퀀스 레벨 신택스 요소 EXTENDED_DMV = 1인 경우에 존재하는 가변 크기의 신택스 요소이다. DMVRANGE VLC는 움직임 벡터 차분 범위를 나타낸다.
매크로블록 모드 테이블(MBMODETAB)(2 또는 3 비트)
MBMODETAB 신택스 요소는 고정 길이 필드이다. 인터레이스형 P-필드의 경우, MBMODETAB은 8개의 허프만 테이블 중 어느 것이 매크로블록 계층에서의 매크로블록 모드 신택스 요소(MBMODE)를 디코딩하는 데 사용되는지를 가리키는 3 비트 값이다.
움직임 벡터 테이블(MVTAB)(2 또는 3 비트)
MVTAB 신택스 요소는 2 또는 3 비트 값이다. NUMREF = 1인 인터레이스형 P-필드의 경우, MVTAB는 움직임 벡터 데이터를 디코딩하는 데 8개의 인터레이스 허프만 테이블 중 어느 것이 사용되는지를 가리키는 3 비트 신택스 요소이다.
2MV 블록 패턴 테이블(2MVPBTAB)(2 비트)
2MVBPTAB 신택스 요소는 2MV 필드 매크로블록에서의 2MV 블록 패턴(2MVBP) 신택스 요소를 디코딩하는 데 4개의 허프만 테이블 중 어느 것이 사용되는지를 가리키는 2 비트 값이다.
4MV 블록 패턴 테이블(4MVBPTAB)(2 비트)
4MVBPTAB 신택스 요소는 4MV 매크로블록에서의 4MV 블록 패턴(4MVBP) 신택스 요소를 디코딩하는 데 4개의 허프만 테이블 중 어느 것이 사용되는지를 신호하는 2 비트 값이다.
대체 결합 구현에서, 픽처 유형 정보는 인터레이스형 B-필드를 포함하는 인터레이스형 비디오 프레임에 대한 필드 레벨에서가 아니라 인터레이스형 B-필드에 대한 필드 레벨의 시작에서 신호되며, 참조 거리는 생략된다.
2. 선택된 필드 계층 요소
도 55는 결합 구현에서의 인터레이스형 B-필드에 대한 필드-레벨 비트스트림 신택스를 나타낸 도면이다. 구체적인 비트스트림 요소에 대해서는 이하에 설명한다.
움직임 벡터 모드(MVMODE)(가변 크기 또는 1 비트)
MVMODE 신택스 요소는 4개의 움직임 벡터 코딩 모드 중 하나 또는 하나의 세기 보상 모드(어떤 유형의 픽처에 대해서는 가능성이 더 적음)를 신호한다. 몇가지 차후의 요소는 부가의 움직임 벡터 모드 및/또는 세기 보상 정보를 제공한다.
B-필드 전방 모드 MB 비트 신택스 요소(FORWARDMB)(가변 크기)
FORWARDMB 신택스 요소는 전방 모드로 코딩된 B-필드에서의 매크로블록을 가리키기 위해 비트플레인 코딩을 사용한다. FORWARDMB 신택스 요소는 또한 전방 모드가 미처리 모드로 신호되는지를 신호하며, 이 경우 전방/비전방 모드 결정은 매크로블록 레벨에서 신호된다.
도 56은 결합 구현에서의 인터레이스형 BI-필드에 대한 필드-레벨 비트스트림 신택스를 나타낸 도면이다. 결합 구현에서, 인터레이스형 BI-필드에 대한 필드-레벨 비트스트림 신택스는 인터레이스형 I-필드와 동일한 신택스 요소를 사용한다.
3. 선택된 매크로블록 계층 요소
도 57은 결합 구현에서의 인터레이스형 B-필드의 매크로블록에 대한 매크로블록-레벨 비트스트림 신택스를 나타낸 도면이다. 도 60은 결합 구현에서의 인터레이스형 B-프레임의 매크로블록에 대한 매크로블록-레벨 비트스트림 신택스를 나타낸 도면이다. 구체적인 비트스트림 요소에 대해서는 이하에서 설명한다. 매크로블록에 대한 데이터는 매크로블록 헤더 및 그에 뒤따르는 블록 계층 데이터로 이루어져 있다.
매크로블록 모드(MBMODE)(가변 크기)
MBMODE 신택스 요소는 매크로블록 유형(예를 들어, 인터레이스형 B-필드에 대한 1MV, 4MV 또는 인트라) 또한 CBP 플래그 및 움직임 벡터 데이터의 존재를 가리킨다.
전방 B 필드 코딩 모드(FORWARDBIT)(1 비트)
FORWARDBIT는 필드 레벨 신택스 요소 FORWARDMB가 미처리 모드가 사용됨을 가리키는 경우 인터레이스형 B-필드 매크로블록에 존재하는 1-비트 신택스 요소이다. FORWARDBIT = 1인 경우, 매크로블록은 전방 모드를 사용하여 코딩된다.
B 매크로블록 움직임 예측 유형(BMVTYPE)(가변 크기)
BMVTYPE은 매크로블록이 전방, 후방 또는 보간 예측을 사용하는지를 가리키는, 인터레이스형 B-프레임 매크로블록 및 인터레이스형 B-필드 매크로블록에 존재하는 가변 크기의 신택스 요소이다. 표 7이 나타내는 바와 같이, 인터레이스형 B-르레임의 매크로블록의 경우, BFRACTION의 값은 BMVTYPE와 함께 어느 유형이 사용되는지를 결정한다.
BMVTYPE VLC
BMVTYPE |
움직임 예측 유형 |
BFRACTION <= 1/2 |
BFRACTION > 1/2 |
0 |
후방 |
전방 |
10 |
전방 |
후방 |
11 |
보간 |
보간 |
인터레이스형 B-필드에서, BMVTYPE은 매크로블록 모드가 전방이 아니고(FORWARDMB 또는 FORWARDBIT 신택스 요소로 표시됨) 4MV가 사용 중이 아닌 경우에 전송된다. 이 경우, BMVTYPE은 B 매크로블록이 전방, 직접 또는 보간인지를 신호하는 데 사용된다. 매크로블록 모드가 전방이 아니고 4MV가 사용 중인 경우, BMVTYPE은 후방인데 그 이유는 4MV에서 전방 및 후방 모드만이 허용되기 때문이다.
보간 MV 존재(INTERPMVP)(1 비트)
INTERPMVP는 필드-레벨 신택스 요소 BMVTYPE가 매크로블록 유형이 보간임을 가리키는 경우 B-필드 매크로블록에 존재하는 1-비트 신택스 요소이다. INTERPMVP = 1인 경우, 보간 MV가 존재하고, 그렇지 않은 경우 이는 존재하지 않는다.
B 매크로블록 움직임 벡터 1(BMV1)(가변 크기)
BMV1은 매크로블록에 대한 첫번째 움직임 벡터를 차분 인코딩하는 가변-크기의 신택스 요소이다.
B 매크로블록 움직임 벡터 2(BMV2)(가변 크기)
BMV2는 보간 모드가 사용되는 경우 인터레이스형 B-프레임 매크로블록 및 인터레이스형 B-필드 매크로블록에 존재하는 가변 크기의 신택스 요소이다. 이 신택스 요소는 매크로블록에 대한 두번째 움직임 벡터를 차분 인코딩한다.
4MV 블록 패턴(4MVBP)(4 비트)
4MVBP 신택스 요소는 4개의 루미넌스 블록 중 어느 것이 영이 아닌 움직임 벡터 차분을 포함하는지를 가리키며, 이의 사용법은 이하에서 상세히 기술한다.
블록-레벨 움직임 벡터 데이터(BLKMVDATA)(가변 크기)
BLKMVDATA는 블록에 대한 움직임 정보를 포함하는 가변 크기의 신택스 요소이며, 4MV 매크로블록에 존재한다.
필드 변환 플래그(FIELDTX)(1 비트)
FIELDTX는 인터레이스형 B-프레임 인트라-코딩된 매크로블록에 존재하는 1-비트 신택스이다. 이 신택스 요소는 매크로블록이 프레임 또는 필드 코딩되어 있는지(기본적으로, 매크로블록의 내부 구성)를 가리킨다. FIELDTX = 1은 매크로블록이 필드-코딩되어 있음을 가리킨다. 그렇지 않은 경우, 매크로블록은 프레임-코딩되어 있다. 인터-코딩된 매크로블록에서, 이 신택스 요소는 MBMODE로부터 추론될 수 있다.
직접 B 프레임 코딩 모드(DIRECTBBIT)(1 비트)
DIRECTBBIT는 프레임 레벨 신택스 요소 DIRECTMB가 미처리 모드가 사용됨을 가리키는 경우 인터레이스형 B-프레임 매크로블록에 존재하는 1-비트 신택스 요소이다. DIRECTBBIT = 1인 경우, 매크로블록은 직접 모드를 사용하여 코딩된다.
B 프레임 MV 전환(MVSW)(1 비트)
MVSW는 MB가 필드 모드에 있고 또 BMVTYPE이 전방 또는 후방인 경우에 인터레이스형 B-프레임 매크로블록에 존재하는 1-비트 신택스 요소이다. MVSW = 1인 경우, MV 유형 및 예측 유형은 상부 필드에서 하부 필드로 가면서 전방에서 후방으로(또는 후방에서 전방으로) 변화된다.
2 움직임 벡터 블록 패턴(2MVBP)(가변 크기)
2MVBP는 인터레이스형 B-프레임 매크로블록에 존재하는 가변 크기의 신택스 요소이다. 이 신택스 요소는 MBMODE 신택스 요소가 매크로블록이 하나의 움직임 벡터를 포함함을 가리키는 경우 또 매크로블록이 보간 매크로블록인 경우에 존재한다. 이 경우, 2MVBP는 2개의 움직임 벡터(전방 및 후방 움직임 벡터) 중 어느 것이 존재하는지를 가리킨다.
움직임 벡터 데이터(MVDATA)(가변 크기)
MVDATA는 매크로블록에 대한 움직임 벡터(들)에대한 차분을 인코딩하는 가변 크기의 신택스 요소이며, 그의 디코딩에 대해서는 이하에서 상세히 기술한다.
도 58은 결합 구현에서 인터레이스형 BI-필드에 대한 매크로블록-레벨 비트스트림 신택스를 나타낸 도면이다. 결합 구현에서, 인터레이스형 BI-필드에 대한 매크로블록-레벨 비트스트림 신택스는 인터레이스형 I-필드와 동일한 신택스 요소를 사용한다.
B. 인터레이스형 B-필드의 디코딩
이하의 섹션들은 결합 구현에서 인터레이스형 B-필드를 디코딩하는 프로세스를 설명한다.
1. 프레임/필드 계층 디코딩
인터레이스형 B-필드는 2가지 유형, 즉 1MV 또는 혼합-MV 중 하나일 수 있다.
1MV 인터레이스형 B-필드에서, 그 매크로블록의 예측 유형(BMVTYPE)에 따라 예측 블록의 변위를 나타내기 위해 0, 1 또는 2개의 움직임 벡터가 사용된다. BMVTYPE이 DIRECT와 같은 경우, 전방 및 후방 움직임 벡터가 추론되고 어떤 추가의 움직임 벡터도 명시적으로 신호되지 않는다. BMVTYPE이 INTERPOLATED인 경우, 2개의 움직임 벡터, 즉 전방 및 후방이 디코딩된다. 전방 및 후방 경우에, 단지 하나의 움직임 벡터만이 디코딩된다. 1MV 모드는 MVMODE 픽처 계층 신택스 요소에 의해 신호된다.
혼합-MV 인터레이스형 B-필드에서, 각각의 매크로블록은 1MV 또는 4MV 매크로블록으로서 인코딩될 수 있다. 4MV 매크로블록에서, 4개의 루미넌스 블록 각각은 그와 연관된 움직임 벡터를 갖는다. 게다가, 4MV 매크로블록은 인터레이스형 B-필드에서의 전방 또는 후방 예측 유형(BMVTYPE)에만 연관되어 있을 수 있다. 각각의 매크로블록에 대한 1MV 또는 4MV 모드는 모든 매크로블록에서의 MBMODE 신택스 요소로 표시된다. 혼합-MV 모드는 MVMODE 픽처 계층 신택스 요소에 의해 신호된다.
2. 매크로블록 계층 디코딩
인터레이스형 B-필드에서의 매크로블록은 3가지 가능한 유형, 즉 1MV, 4MV 및 인트라 중 하나일 수 있다. 게다가, 매크로블록은 4가지 예측 유형(BMVTYPE), 즉 전방, 후방, 직접 또는 보간 중 하나일 수 있다. 매크로블록 유형은 매크로블록 계층에서의 MBMODE 신택스 요소로 신호된다. 예측 유형은 각각의 매크로블록에 대한 전방/비전방을 신호하는 프레임-레벨 비트플레인 FORWARDMB 및 예측 유형이 비전방인 경우에 매크로블록 레벨 BMVTYPE 신택스 요소의 조합으로 신호된다.
이하의 섹션들은 1MV 및 4MV 유형 및 이들이 어떻게 신호되는지를 설명한다.
인터레이스형 B-필드에서의 1MV 매크로블록
1MV 매크로블록은 1MV 및 혼합-MV 인터레이스형 B-필드에 있을 수 있다. 1MV 매크로블록에서, 단일의 움직임 벡터가 매크로블록 내의 6개 블록 모두에 대해 현재 및 참조 픽처 간의 변위를 나타낸다. 1MV 매크로블록의 경우, 매크로블록 계층에서의 MBMODE 신택스 요소는 이하의 3가지를 가리킨다.
1) 매크로블록 유형이 1MV임.
2) CBPCY 신택스 요소가 존재하는지 여부.
3) BMV1 신택스 요소가 존재하는지 여부.
MBMODE 신택스 요소가 BMV1 신택스 요소가 존재함을 가리키는 경우, BMV1 신택스 요소는 매크로블록 계층에서 대응하는 위치에 존재한다. BMV1 신택스 요소는 움직임 벡터 차분을 인코딩한다. 움직임 벡터 차분은 움직임 벡터를 재구성하기 위해 움직임 벡터 예측자와 합성된다. MBMODE 신택스 요소가 BMV1 신택스 요소가 존재하지 않음을 가리키는 경우, 움직임 벡터 차분은 0인 것으로 가정되고 따라서 움직임 벡터는 움직임 벡터 예측자와 동일하다.
MBMODE 신택스 요소가 CBPCY 신택스 요소가 존재함을 가리키는 경우, CBPCY 신택스 요소는 매크로블록 계층에서 대응하는 위치에 존재한다. CBPCY는 6개의 블록 중 어느 것이 블록 계층에 코딩되는지를 가리킨다. MBMODE 신택스 요소가 CBPCY가 존재하지 않음을 가리키는 경우, CBPCY는 0인 것으로 가정되고 매크로블록에서의 6개 블록 중 어느 것에 대해서도 블록 데이터가 존재하지 않는다.
게다가, 매크로블록 유형이 1MV이고 매크로블록의 예측 유형이 보간인 경우, 인코더는 두번째 움직임 벡터 차분 BMV2가 존재하는지 여부를 신호하기 위해 INTERPMVP 신택스 요소를 사용한다. 존재하는 경우, 디코더는 BMV1 바로 다음에 오는 BMV2를 디코딩한다. 그렇지 않은 경우, BMV2에 대한 움직임 벡터 차분은 0인 것으로 가정되고, 두번째 움직임 벡터는 움직임 벡터 예측자와 같다.
예측 유형이 보간인 경우, BMV1은 전방 움직임 벡터에 대응하고 BMV2는 후방 움직임 벡터에 대응한다.
인터레이스형 B-필드에서의 4MV 매크로블록
4MV 매크로블록은 혼합-MV B-필드 픽처에서만 있을 수 있으며 전방 및 후방 예측 유형으로 제한된다. 4MV 매크로블록에서, 4개의 루미넌스 블록 각각은 관련 움직임 벡터를 갖는다. 크로마 블록에 대한 변위는 4개의 루미넌스 움직임 벡터로부터 도출된다. 혼합-MV 인터레이스형 B-필드에서, 4MV 매크로블록은 전방 및 후방 예측 유형에만 관련될 수 있다.
4MV 매크로블록의 경우, 매크로블록 계층에서의 MBMODE 신택스 요소는 이하의 3가지를 가리킨다.
1) 매크로블록 유형이 4MV임.
2) CBPCY 신택스 요소가 존재하는지 여부.
3) 4MVBP 신택스 요소가 존재하는지 여부.
4MVBP 신택스 요소는 4개의 루미넌스 블록 중 어느 것이 영이 아닌 움직임 벡터 차분을 포함하는지를 가리킨다. 4MVBP 신택스 요소는 0 내지 15의 값으로 디코딩된다. 4MVBP에서의 4개의 비트 위치 각각에 대해, 0의 값은 그 블록에 대해 움직임 벡터 차분(BLKMVDATA)이 존재하지 않음을 가리키고 움직임 벡터 차분은 0인 것으로 가정된다. 1의 값은 대응하는 위치에서 그 블록에 대해 움직임 벡터 차분(BLKMVDATA)이 존재함을 가리킨다. 예를 들어, 4MVBP가 1100(이진)의 값으로 디코딩되는 경우, 비트스트림은 블록 0 및 1에 대한 BLKMVDATA를 포함하고 블록 2 및 3에 대한 BLKMVDATA가 존재하지 않는다.
MBMODE 신택스 요소가 4MVBP 신택스 요소가 존재하지 않음을 가리키는 경우, 4개의 루미넌스 블록 모두에 대해 움직임 벡터 차분 데이터(BLKMVDATA)가 존재하는 것으로 가정된다.
MVMODE 신택스 요소가 혼합-MV 또는 모두-1MV를 가리키는지에 따라, MBMODE는 다음과 같이 정보를 신호한다. 이하의 표 8은 MBMODE 요소가 모두-1MV 픽처에서의 매크로블록에 관한 정보를 어떻게 신호하는지를 보여준다.
모두-1MV 픽처에서의 매크로블록 모드
인덱스 |
매크로블록 유형 |
CBP 존재 |
MV 존재 |
0 |
인트라 |
아니오 |
적용없음 |
1 |
인트라 |
예 |
적용없음 |
2 |
1MV |
아니오 |
아니오 |
3 |
1MV |
아니오 |
예 |
4 |
1MV |
예 |
아니오 |
5 |
1MV |
예 |
예 |
이하의 표 9는 MBMODE 요소가 혼합-MV 픽처에서의 매크로블록에 관한 정보를 어떻게 신호하는지를 보여준다.
혼합-1MV 픽처에서의 매크로블록 모드
인덱스 |
매크로블록 유형 |
CBP 존재 |
MV 존재 |
0 |
인트라 |
아니오 |
적용없음 |
1 |
인트라 |
예 |
적용없음 |
2 |
1MV |
아니오 |
아니오 |
3 |
1MV |
아니오 |
예 |
4 |
1MV |
예 |
아니오 |
5 |
1MV |
예 |
예 |
6 |
4MV |
아니오 |
적용없음 |
7 |
4MV |
예 |
적용없음 |
8개의 코딩 테이블 중 하나가 MBMODE를 신호하는 데 사용된다. 사용되는 특정의 테이블은 MBMODETAB 신택스 요소를 통해 신호된다.
이하의 섹션들은 예측 유형 디코딩 및 직접 모드 움직임 벡터의 디코딩에 대해 설명한다.
인터레이스형 B-필드에서의 예측 유형 디코딩(BMVTYPE)
예측 유형은 이하의 규칙에 따라 디코딩된다. 픽처 레벨 비트플레인 FORWARDMB가 매크로블록이 전방 유형임을 가리키는 경우, 그 매크로블록에 대한 예측 유형은 전방으로 설정된다. FORWARDMB 요소가 미처리(raw)로서 코딩되어 있는 경우, 인코더/디코더는 예측 유형이 전방인지 여부를 결정하기 위해 매크로블록 레벨에서 부가의 비트 FORWARDBIT를 사용한다.
예측 유형이 비전방인 경우 또 MBMODE 신택스 요소(혼합-MV B 픽처에서만 가능함)에 의해 신호되는 바와 같이 매크로블록이 4MV를 사용하는 경우, 디코더는 예측 유형이 후방인 것으로 직접 추론할 수 있는데 그 이유는 전방 및 후방 유형만이 4MV 모드와 연관될 수 있기 때문이다. 그렇지 않은 경우, 디코더는 BMVTYPE 신택스 요소를 명시적으로 디코딩한다.
인터레이스형 B-필드에서의 직접 모드 움직임 벡터의 디코딩
인터레이스형 B-필드에서의 직접 모드 움직임 벡터를 디코딩하기 위해, 디코더는 먼저 이전에 디코딩된 (즉, 시간상 미래의) 앵커(I 또는 P) 픽처로부터의 움직임 벡터를 버퍼링한다. 이들 중에서, 디코더는 상부 B-필드에서의 직접 모드 움직임 벡터를 계산하기 위해 상부 필드에 대응하는 버퍼링된 움직임 벡터를 예측자로서 사용하고 하부 B-필드의 움직임 벡터를 계산하기 위해 하부 필드에 대응하는 것을 사용한다. 예를 들어, 필드 z(z = 상부/하부)에서의 매크로블록(x,y)은 이전에 디코딩된 I 또는 P 필드 z의 매크로블록(x,y)(즉, 현재 필드와 동일 극성의 앵커 필드에서의 동일 위치의 매크로블록)로부터 버퍼링된 움직임 벡터를 참조하게 된다.
앵커 픽처로부터의 버퍼링된 움직임 벡터가 인트라인 경우(이전에 디코딩된 필드 z가 I-필드인 경우 등) 또는 앵커 픽처가 P-필드이지만 매크로블록(x,y)이 인트라-코딩되어 있는 경우, 디코더는 버퍼링된 움직임 벡터를 (0,0)로서 취급한다. 동일 위치의 매크로블록이 1MV인 경우, 디코더는 그 움직임 벡터를 사용한다. 동일 위치의 매크로블록이 4MV인 경우, 디코더는 움직임 벡터 예측자를 계산하기 위해 도 53의 의사 코드(5300)에 기술된 논리를 사용한다.
의사 코드(5300)에서, SelectDirectModeMVFromColocatedMB는 직접 모드 계산에서 사용할 움직임 벡터 예측자를 도출한다. 디코더는 이전에 디코딩된 앵커 픽처로부터의 모든 움직임 벡터를 버퍼링하고 이어서 B-필드의 디코딩 동안에 상기 직접 모드 규칙을 적용할 수 있거나, 디코더는 앵커 필드를 디코딩하면서 상기 직접 모드 규칙을 적용하고 B-필드에 대한 결과 움직임 벡터를 버퍼링할 수 있다.
상기 획득된 움직임 벡터를 가지고, 디코더는 스케일링 논리(도 19의 Scale_Direct_MV)를 적용한다. Scale_Direct_MV는 전방 및 후방 지향 움직임 벡터를 획득한다. Scale_Direct_MV의 결과 상부 및 하부 필드 둘다를 가리키는 전방 및 후방 움직임 벡터가 얻어질 수 있다. 이것이 효과적인 이유는 직접 움직임 벡터가 인코더에 의해 평가되고 또 이들이 양호한 예측을 제공하는 경우에만 선택되기 때문이며 또한 인터레이스형 B-필드가 전방 및 후방 방향 둘다에서 2개의 참조 필드를 사용하기 때문이다.
대체 구현에서, 어떤 버퍼링도 수반하지 않는 프로세스를 포함하여 직접 모드에서 스케일링하기 위해 움직임 벡터를 생성하는 임의의 다른 프로세스가 사용될 수 있으며, 이는 메모리 제약된 장치(예를 들어, 제로-바이어스 라플라스 분포(zero-biased Laplacian distribution)를 시뮬레이션하기 위해 난수 발생기를 사용함)에서 유용할 수 있다. 이러한 프로세스가 여전히 동작하는 이유는 양호한 인코더라면 직접 모드 움직임 벡터에 대한 좋지 않은 추측을 폐기하고 보다 정확한 것을 비트스트림이 남겨두기 때문이다.
3. 움직임 벡터 디코딩 프로세스
이하의 섹션들은 결합 구현에서 인터레이스형 B-필드의 블록 및 매크로블록에 대한 움직임 벡터 디코딩 프로세스에 대해 설명한다.
전방 및 후방 예측 컨텍스트 채우기
전방 및 후방 움직임 벡터는 개별적으로 버퍼링되고 각각 전방 및 후방 움직임 벡터를 예측하는 데 사용된다. 전방 및 후방 컨텍스트에 대해 개별적인 버퍼를 사용하는 것은 예를 들어 상기 섹션 X에 설명되어 있다. 움직임 벡터 예측자의 선택을 위한 기술은 배경의 섹션 III, 상세한 설명의 섹션 III 및 명세서의 다른 부분에 설명되어 있다.
전방 움직임 벡터가 디코딩될 때 후방 버퍼("없는 방향" 버퍼)를 예측된 움직임 벡터로 채우는 경우(또는 후방 움직임 벡터가 디코딩될 때 전방 버퍼를 채우기 위해) 부가할 2가지 부가적인 상세가 있다. 일반적으로, 인코더/디코더는 예측을 형성하기 위해 움직임 벡터 유형 정보(예를 들어, 1MV)는 물론 이전에 디코딩된 움직임 벡터의 극성 둘다를 사용할 수 있다. 그렇지만, "구멍 채우기" 경우에, 인코더/디코더는 움직임 벡터 유형 정보 또는 극성 정보(예를 들어, 동일 극성 또는 반대 극성)를 갖지 않는데 그 이유는 인코더/디코더가 없는-방향 유형의 움직임 벡터를 실제로 디코딩하지 않았기 때문이다. 이 결합 구현에서, 인코더/디코더는 움직임 벡터 유형을 1MV로 설정하고 우세 필드 움직임 벡터를 예측자로서 선택한다. 도 47의 의사 코드(4700)는 이 결합 구현에서 극성 선택 프로세스에 대해 설명한다.
인트라 코딩된 매크로블록의 경우, 전방 및 후방 움직임 예측 플레인 둘다를 채우는 데 "인트라 움직임 벡터"가 사용된다. "인트라 움직임 벡터"의 일관성있는 표현은 디코더 구현에 의해 선택될 수 있다. 예를 들어, 움직임 벡터가 2-바이트 짧은 어레이(2-byte short array)에 저장되는 경우, "인트라 움직임 벡터"는 매크로블록이 인트라로서 코딩되었음을 나타내기 위해 움직임 벡터 어레이에 채워지는 고유한 큰 상수로서 표현될 수 있다.
B-필드에서의 전방 움직임 벡터 예측
전방 참조 프레임 거리는 BFRACTION 신택스 요소로부터 또 REFDIST 신택스 요소로부터 계산된다. 전방 움직임 벡터 예측은 상기 섹션 X에 설명한 바와 같이 진행된다.
B-필드에서의 후방 움직임 벡터 예측
후방 참조 프레임 거리는 BFRACTION 신택스 요소로부터 또 REFDIST 신택스 요소로부터 계산된다. 전방 움직임 벡터 예측은 상기 섹션 X에 설명한 바와 같이 진행된다.
움직임 벡터 차분 디코딩
BMV1, BMV2, 또는 BLKMVDATA 신택스 요소는 매크로블록 또는 매크로블록에서의 블록에 대한 움직임 정보를 인코딩한다. 1MV 매크로블록은 BMV1 및 BMV2 신택스 요소를 가지며, 4MV 매크로블록은 0 내지 4개의 BLKMVDATA 요소를 가질 수 있다.
예측 유형(BMVTYPE)이 보간인 경우, BMV1은 전방에 대응하고 BMV2는 후방 움직임 벡터 잔차에 대응한다.
이하의 섹션들은 B-픽처에 적용되는 2-참조 경우에 대한 움직임 벡터 차분을 어떻게 계산하는지를 설명한다.
2-참조 필드 픽처에서의 움직임 벡터 차분
2-참조 필드 픽처는 필드 픽처를 사용하여 인터레이스 프레임을 코딩할 때 발생된다. 이 시퀀스의 각각의 프레임은 2개의 필드로 분할되고, 각 필드는 기본적으로 순차 코드 경로인 것을 사용하여 코딩된다.
2개의 참조 필드를 갖는 필드 픽처(인터레이스형 B-필드를 갖는 픽처 등)에서, 매크로블록 계층에서의 각각의 MVDATA 또는 BLKMVDATA 신택스 요소는 이하의 3가지, 즉 1) 수평 움직임 벡터 차분 성분, 2) 수직 움직임 벡터 차분 성분, 및 3) 우세 또는 비우세 예측자가 사용되는지, 즉 2개의 필드 중 어느 것이 움직임 벡터에 의해 참조되는지를 공동으로 인코딩한다.
MVDATA 또는 BLKMVDATA 신택스 요소는 고정 길이 코드워드가 뒤따라 오는 가변 길이 허프만 코드워드이다. 허프만 코드워드의 값은 고정 길이 코드워드의 크기를 결정한다. 픽처 계층에서의 MVTAB 신택스 요소는 가변 크기의 코드워드를 디코딩하는 데 사용되는 허프만 테이블을 지정한다. 도 61a의 의사 코드(6100)는 움직임 벡터 차분 및 우세/비우세 예측자 정보가 어떻게 디코딩되는지를 나타낸다.
값 predictor_flag, dmv_x 및 dmv_y는 도 61a의 의사 코드(6100)에서 계산된다. 의사 코드(6100)에서의 값들은 다음과 같이 정의된다.
dmv_x: 차분 수평 움직임 벡터 성분
dmv_y: 차분 수직 움직임 벡터 성분
k_x, k_y: 긴 움직임 벡터(long motion vector)에 대한 고정 길이
k_x 및 k_y는 MVRANGE 심볼에 의해 정의된 바와 같이 움직임 벡터 범위에 의존한다.
MVRANGE에 의해 지정된 k_x 및 k_y
MVRANGE |
k_x |
k_y |
range_x |
range_y |
0(디폴트) |
9 |
8 |
256 |
128 |
10 |
10 |
9 |
512 |
256 |
110 |
12 |
10 |
2048 |
512 |
111 |
13 |
11 |
2048 |
1024 |
extend_x: 수평 움직임 벡터 차분에 대한 확장된 범위,
extend_y: 수직 움직임 벡터 차분에 대한 확장된 범위,
extend_x 및 extend_y는 DMVRANGE 픽처 필드 신택스 요소로부터 도출된다. DMVRANGE가 수평 성분에 대한 확장된 범위가 사용됨을 가리키는 경우, extend_x = 1이다. 그렇지 않은 경우, extend_x = 0이다. 이와 유사하게, DMVRANGE가 수직 성분에 대한 확장된 범위가 사용됨을 가리키는 경우, extend_y = 1이다. 그렇지 않은 경우, extend_y = 0이다.
변수 predictor_flag는 우세 또는 비우세 움직임 벡터 예측자가 사용되는지를 가리키는 이진 플래그이다(0 = 우세 예측자 사용됨, 1 = 비우세 예측자 사용됨). offset_table 어레이 및 size_table 어레이는 도 61a에 도시된 바와 같이 정의된다.
도 61b의 의사 코드(6110)는 대체 결합 구현에서 2-참조 필드에 대하 움직임 벡터 차분이 어떻게 디코딩되는지를 나타낸다. 의사 코드(6110)는 움직임 벡터 차분을 다른 방식으로 디코딩한다. 예를 들어, 의사 코드(6110)는 확장된 움직임 벡터 차분 범위의 처리를 생략한다.
움직임 벡터 예측자
움직임 벡터는 이전의 섹션에서 계산된 움직임 벡터 차분을 움직임 벡터 예측자에 가산함으로써 계산된다. 이하의 섹션들은 이 결합 구현에서 1MV 및 혼합-MV 인터레이스형 B-필드에서의 매크로블록에 대해 움직임 벡터 예측자가 어떻게 계산되는지를 설명한다.
1MV 인터레이스형 B-필드에서의 움직임 벡터 예측자
도 5a 및 도 5b는 1MV 매크로블록에 대한 후보 움직임 벡터 예측자에 대해 고려되는 매크로블록의 위치를 나타낸 도면이다. 후보 예측자는 매크로블록이 그행에서 마지막 매크로블록인 경우를 제외하고는 좌측, 상부 및 우측-상부 매크로블록으로부터 취해진다. 이 경우, 예측자 B는 우측-상부 대신에 좌측-상부 매크로블록으로부터 취해진다. 프레임이 1 매크로블록 폭인 특별한 경우에, 예측자는 항상 예측자 A(상부 예측자)이다. 현재 매크로블록이 상부 행에 있는 특별한 경우(A 및 B 예측자가 없음 또는 예측자가 전혀 없음)는 도33a 내지 도 33f를 참조하여 전술하였으며, 도 62a 내지 도 62f를 참조하여 이하에서 기술된다.
혼합-MV 인터레이스형 B-필드에서의 움직임 벡터 예측자
도 6a 내지 도 10은 혼합-MV 인터레이스형 B-필드에서의 1MV 또는 4MV 매크로블록에 대한 움직임 벡터의 후보 움직임 벡터에 대해 고려되는 블록 또는 매크로블록의 위치를 나타낸 것이다.
인터레이스형 B-필드에서의 우세 및 비우세 MV 예측자
각각의 인터-코딩된 매크로블록의 경우, 2개의 움직임 벡터 예측자가 도출된다. 하나는 우세 필드로부터이고 다른 하나는 비우세 필드로부터이다. 우세 필드는 이웃에서의 실제값 움직임 벡터 예측자 후보의 대부분을 포함하는 필드인 것으로 간주된다. 동수인 경우, 반대 필드에 대한 움직임 벡터 예측자가 우세 예측자인 것으로 간주된다(왜냐하면 시간상 더 가깝기 때문임). 인트라-코딩된 매크로블록은 우세/비우세 예측자의 계산에서 고려되지 않는다. 모든 후보 예측자 매크로블록이 인트라-코딩되어 있는 경우, 우세 및 비우세 움직임 벡터 예측자는 0으로 설정되고, 우세 예측자는 반대 필드로부터 온 것으로 간주된다.
인터레이스형 B-필드에서의 움직임 벡터 예측자 계산
블록 또는 매크로블록의 각각의 움직임 벡터에 대해 2개의 움직임 벡터 예측자가 계산된다, 즉 각각의 참조에 대해 하나씩 계산된다. 도 62a 내지 도 62f의 의사 코드(6200)는 결합 구현에서 2-참조 경우에 움직임 벡터 예측자가 어떻게 계산되는지를 설명한다. (도 33a 내지 도 33f의 의사 코드(3300)는 다른 구현에서 2-참조 경우에 대해 움직임 벡터 예측자가 어떻게 계산되는지를 설명한다.) 2-참조 픽처에서, 현재 필드는 2개의 가장 최근의 필드를 참조할 수 있다. 한 예측자는 동일 극성의 참조 필드에 대한 것이고 다른 하나는 반대 극성을 갖는 참조 필드에 대한 것이다.
인터레이스형 B-필드에서의 움직임 벡터 재구성
이하의 섹션들은 1MV 및 4MV 매크로블록에 대한 루미넌스 및 크로마 움직임 벡터를 어떻게 재구성하는지를 설명한다. 움직임 벡터가 재구성된 후에, 이는 근방의 매크로블록에 대한 움직임 벡터를 예측하기 위해 차후에 이웃 움직임 벡터로서 사용될 수 있다. 움직임 벡터는 "동일" 또는 "반대"의 연관 극성을 가지게 되고 움직임 벡터 예측을 위한 다른 필드 극성에대한 움직임 벡터 예측자를 도출하는 데 사용될 수 있다.
인터레이스형 B-필드에서의 루미넌스 움직임 벡터 재구성
모든 경우(1MV 및 4MV 매크로블록)에, 루미넌스 움직임 벡터는 다음과 같이 차분을 예측자에 가산함으로써 재구성된다.
mv_x = (dmv_x + predictor_x) smod range_x
mv_y = (dmv_y + predictor_y) smod range_y
모듈러스 연산 "smod"은 다음과 같이 정의되는 부호를 갖는 모듈러스(signed modulus)이다.
A smod b = ((A + b) % (2*b)) - b
이것은 재구성된 벡터가 유효하도록 보장해준다. (A smod b)는 -b에서 b-1 내에 있다. range_x 및 range_y는 MVRANGE에 의존한다.
인터레이스형 B-필드 픽처가 2개의 참조 픽처를 사용하기 때문에, 움직임 벡터 차분을 디코딩한 후에 도출된 predictor_flag는 어느 필드가 참조인지를 판정하기 위해 움직임 벡터 예측으로부터 도출된 dominantpredictor의 값과 합성된다. 도 63의 의사 코드(6300)는 참조 필드가 어떻게 판정되는지를 설명한다.
1MV 매크로블록에서, 매크로블록의 루미넌스 성분을 구성하는 4개의 블록에 대해 단일의 움직임 벡터가 있게 된다. MBMODE 신택스 요소가 매크로블록 계층에서 MV 데이터가 존재하지 않음을 가리키는 경우, dmv_x = 0이고 dmv_y = 0이다(mv_x = predictor_x 이고 mv_y = predictor_y임).
4MV 매크로블록에서, 매크로블록에서의 인터-코딩된 루미넌스 블록 각각은 그 자신의 움직임 벡터를 갖는다. 따라서, 각각의 4MV 매크로블록에 0 내지 4개의 루미넌스 움직임 벡터가 있게 된다. 4MVBP 신택스 요소가 블록에 대해 움직임 벡터 정보가 존재하지 않음을 가리키는 경우, 그 블록에 대해 dmv_x = 0이고 dmv_y = 0이다(mv_x = predictor_x이고 mv_y = predictor_y임).
크로마 움직임 벡터 재구성
크로마 움직임 벡터는 루미넌스 움직임 벡터로부터 도출된다. 또한, 4MV 매크로블록의 경우, 크로마 블록을 인터 또는 인트라로서 코딩할지에 관한 결정은 루미넌스 블록 또는 필드의 상태에 기초하여 행해진다.
C. 인터레이스형 P-프레임 디코딩
결합 구현에서 인터레이스형 B-프레임을 디코딩하기 위한 프로세스에 대해 설명하기 전에, 인터레이스형 P-프레임을 디코딩하는 프로세스에 대해 설명한다. 인터레이스형 B-프레임을 디코딩하는 프로세스를 설명하는 섹션은 이 섹션에서 논의된 개념을 참조하여 진행된다.
1. 인터레이스형 P-프레임의 매크로블록 계층 디코딩
인터레이스형 P-프레임에서, 각각의 매크로블록은 하나 또는 4개의 움직임 벡터를 사용하여 프레임 모드로 또는 2개 또는 4개의 움직임 벡터를 사용하여 필드 모드로 움직임 보상될 수 있다. 인터-코딩되어 있는 매크로블록은 인트라 블록을 포함하지 않는다. 게다가, 움직임 보상 후의 잔차는 프레임 변환 모드 또는 필드 변환 모드로 코딩될 수 있다. 보다 구체적으로는, 잔차의 루미넌스 성분은 그것이 필드 변환 모드로 코딩되어 있고 프레임 변환 모드로는 불변인 채로 있으면서 크로마 성분이 동일하게 유지되는 경우 필드에 따라 재정렬된다. 매크로블록도 역시 인트라로서 코딩될 수 있다.
움직임 보상은 4개(필드/프레임 둘다)의 움직임 벡터를 포함하지 않도록 제한될 수 있으며, 이것은 4MVSWITCH를 통해 신호된다. 움직임 보상 및 잔차 코딩의 유형은 MBMODE 및 SKIPMB를 통해 각각의 매크로블록에 대해 공동으로 표시된다. MBMODE는 4MVSWITCH에 따라 서로 다른 일련의 테이블을 이용한다.
인터레이스형 P-프레임에서의 매크로블록은 5가지 유형, 즉 1MV, 2 필드 MV, 4 프레임 MV, 4 필드 MV 및 인트라로 분류된다. 처음 4가지 유형의 매크로블록은 인터-코딩되고 마지막 유형은 매크로블록이 인트라-코딩되어 있음을 가리킨다. 매크로블록 유형은 건너뜀 비트(skip bit)와 함께 매크로블록 계층에서 MBMODE 신택스 요소에 의해 신호된다. MBMODE는 서로 다른 유형의 매크로블록에 대한 매크로블록에 관한 여러가지 정보와 함께 매크로블록 유형을 공동으로 인코딩한다.
건너뜀 매크로블록 시그널링
SKIPMB 필드는 매크로블록에 대한 건너뜀 조건을 가리킨다. SKIPMB 필드가 1인 경우, 현재 매크로블록은 건너뛴 것으로 말해지며, SKIPMB 필드 이후에 다른 정보가 전송되지 않는다. 건너뜀 조건은 현재 매크로블록이 0 차분 움직임 벡터를 갖는 1MV이고(즉, 매크로블록이 그의 1MV 움직임 예측자를 사용하여 움직임 보상되고) 코딩된 블록이 없음(CBP = 0)을 의미한다.
반면에, SKIPMB가 1이 아닌 경우, MBMODE 필드는 매크로블록의 유형 및 이하의 섹션에 기술된 정보 등의 현재 매크로블록에 관한 다른 정보를 나타내도록 디코딩된다.
매크로블록 모드 시그널링
MBMODE에 의해 표시되는 15가지 가능한 사건이 있으며, MBMODE는 매크로블록의 유형(1MV, 4 프레임 MV, 2 필드 MV, 4 필드 MV 또는 인트라), 인터-코딩된 매크로블록에 대한 변환의 유형(즉, 필드 또는 프레임 또는 코딩된 블록 없음) 및 1MV 매크로블록에 대한 차분 움직임 벡터가 있는지 여부를 공동으로 지정한다.
<MVP>가 영이 아닌 1MV 차분 움직임 벡터가 있는지 여부를 신호하는 이진 사건(binary event)을 표시하는 것으로 한다. <필드/프레임 변환>이 매크로블록의 잔차가 프레임 변환 코딩되는지, 필드 변환 코딩되는지 또는 제로 코딩된 블록(즉, CBP = 0)인지를 신호하는 3원 사건(ternary event)을 표시하는 것으로 한다. MBMODE는 이하의 일련의 사건을 공동으로 신호한다.
MBMODE = {<1MV, MVP, 필드/프레임 변환>, <2 필드 MV, 필드/프레임 변환>, <4 프레임 MV, 필드/프레임 변환>, <4 필드 MV, 필드/프레임 변환>, <INTRA>}
<1MV, MVP = 0, CBP = 0>인 사건을 제외하며, 이는 건너뜀 조건으로 신호된다.
인터-코딩된 매크로블록의 경우, MBMODE에서의 필드/프레임 변환 사건이 코딩된 블록 없음을 가리키는 경우, CBPCY 신택스 요소는 디코딩되지 않는다. 반면에, MBMODE에서의 필드/프레임 변환 사건이 필드 또는 프레임 변환을 가리키는 경우, CBPCY는 디코딩된다. 디코딩된 사건 <필드/프레임 변환>은 플래그 FIELDTX를 설정하는 데 사용된다. 이 사건이 매크로블록이 필드 변환 코딩되어 있음을 가리키는 경우, FIELDTX는 1로 설정된다. 사건이 매크로블록이 프레임 변환 코딩되어 있음을 가리키는 경우, FIELDTX는 0으로 설정된다. 사건이 제로-코딩된 블록을 가리키는 경우, FIELDTX는 움직임 벡터와 동일한 유형으로 설정된다, 즉 FIELDMV인 경우 FIELDTX가 1로 설정되고, FRAMEMV인 경우 0으로 설정된다.
비-1MV 인터-코딩된 매크로블록의 경우, 제로 차분 움직임 벡터 사건을 가리키기 위해 부가의 필드가 전송된다. 2 필드 MV 매크로블록의 경우, 2개의 움직임 벡터 중 어느 것이 영이 아닌 차분 움직임 벡터를 포함하는지를 가리키기 위해 2MVBP 필드가 전송된다. 이와 유사하게, 4개의 움직임 벡터 중 어느 것이 영이 아닌 차분 움직임 벡터를 포함하는지를 가리키기 위해 4MVBP 필드가 전송된다.
인트라-코딩된 매크로블록의 경우, 필드/프레임 변환 및 제로 코딩된 블록은 별도의 필드에 코딩된다.
2. 인터레이스형 P-프레임에 대한 움직임 벡터 디코딩
인터레이스형 P-프레임에 대한 움직임 벡터 예측자
현재 매크로블록에 대한 움직임 벡터 예측자(들)을 계산하는 프로세스는 2 단계로 이루어져 있다. 첫째, 현재 매크로블록에 대한 3개의 후보 움직임 벡터는 그의 이웃하는 매크로블록으로부터 수집된다. 둘째, 현재 매크로블록에 대한 움직임 벡터 예측자(들)는 후보 움직임 벡터 세트로부터 계산된다. 도 40a 및 도 40b는 후보 움직임 벡터가 수집되는 이웃 매크로블록을 나타낸 것이다. 후보 움직임 벡터의 수집 순서가 중요하다. 이 결합 구현에서, 수집 순서는 항상 A에서 시작하여 B로 가고 C에서 끝난다. 유의할 점은 대응하는 블록이 프레임 경계 밖에 있는 경우 또는 대응하는 블록이 다른 슬라이스의 일부인 경우 예측자 후보가 존재하지 않는 것으로 간주된다는 것이다. 따라서, 움직임 벡터 예측은 슬라이스 경계에 걸쳐 수행되지 않는다.
이하의 섹션들은 후보 움직임 벡터가 다른 유형의 매크로블록에 대해 어떻게 수집되는지 및 움직임 벡터 예측자가 어떻게 계산되는지를 설명한다.
1MV 후보 움직임 벡터
이 결합 구현에서, 도 64의 의사 코드(6400)는 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다.
4 프레임 MV 후보 움직임 벡터
4 프레임 MV 매크로블록의 경우, 현재 매크로블록에서의 4개의 프레임 블록 움직임 벡터 각각에 대해, 이웃 블록들로부터의 후보 움직임 벡터가 수집된다. 이 결합 구현에서, 도 65의 의사 코드(6500)는 좌측 상부 프레임 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 66의 의사 코드(6600)는 우측 상부 프레임 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 67의 의사 코드(6700)는 좌측 하부 프레임 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 68의 의사 코드(6800)는 우측 하부 프레임 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다.
2 필드 MV 후보 움직임 벡터 도출
2 필드 MV 매크로블록의 경우, 현재 매크로블록에서의 2개의 필드 움직임 벡터 각각에 대해, 이웃 블록으로부터의 후보 움직임 벡터가 수집된다. 도 69의 의사 코드(6900)는 상부 필드 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 70의 의사 코드(7000)는 하부 필드 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다.
4 필드 MV 후보 움직임 벡터 도출
4 필드 MV 매크로블록의 경우, 현재 매크로블록에서의 4개의 필드 블록 각각에 대해, 이웃 블록들로부터의 후보 움직임 벡터가 수집된다. 도 71의 의사 코드(7100)는 좌측 상부 필드 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 72의 의사 코드(7200)는 우측 상부 필드 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 73의 의사 코드(7300)는 좌측 하부 필드 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다. 도 74의 의사 코드(7400)는 우측 하부 필드 블록 움직임 벡터에 대한 최대 3개의 후보 움직임 벡터를 수집하는 데 사용된다.
평균 필드 움직임 벡터
2개의 필드 움직임 벡터 (MVX1, MVY1) 및 (MVX2, MVY2)가 주어지면, 후보 움직임 벡터 (MVXA, MVYA)를 형성하기 위한 평균 연산은 다음과 같다.
MVXA = (MVX1 + MVX2 + 1) >> 1,
MVYA = (MVY1 + MVY2 + 1) >> 1.
후보 움직임 벡터로부터 프레임 MV 예측자 계산
이 섹션은 일련의 후보 움직임 벡터가 주어지면 프레임 움직임 벡터에 대한움직임 벡터 예측자가 어떻게 계산되는지를 설명한다. 이 결합 구현에서, 1MV에 대해 또는 4 프레임 MV 매크로블록에서의 4개의 프레임 블록 움직임 벡터 각각에 대해 예측자를 계산하는 연산은 동일하다.
도 75의 의사 코드(7500)는 프레임 움직임 벡터에 대한 움직임 벡터 예측자(PMVx, PMVy)가 어떻게 계산되는지를 설명한다. 의사 코드(7500)에서, TotalValidMV는 후보 움직임 벡터 세트 내의 움직임 벡터의 총수(TotalValidVM = 0, 1, 2 또는 3)를 나타내고, ValidMV 어레이는 후보 움직임 벡터 세트 내의 움직임 벡터를 나타낸다.
후보 움직임 벡터로부터 필드 MV 예측자 계산
이 섹션은 후보 움직임 벡터 세트가 주어지면 필드 움직임 벡터에 대한 움직임 벡터 예측자가 어떻게 계산되는지를 설명한다. 2 필드 MV 매크로블록에서의 2개의 필드 움직임 벡터 각각에 대해 또는 4 필드 MV 매크로블록에서의 4개의 필드 블록 움직임 벡터 각각에 대해 예측자를 계산하는 연산은 동일하다.
먼저, 후보 움직임 벡터는 2 세트로 분할되고, 한 세트는 현재 필드와 동일한 필드를 가리키는 후보 움직임 벡터만을 포함하고 다른 한 세트는 반대 필드를 가리키는 후보 움직임 벡터를 포함한다. 후보 움직임 벡터가 1/4 픽셀 단위로 표현되는 것으로 가정하면, 인코더 또는 디코더는 그의 y-성분에 대한 이하의 검사에 의해 후보 움직임 벡터가 동일 필드를 가리키는지 여부를 검사할 수 있다.
if(ValidMVy & 4) {
ValidMV는 반대 필드를 가리킴
} else {
ValidMV는 동일 필드를 가리킴
}
도 76의 의사 코드(7600)는 필드 움직임 벡터에 대해 움직임 벡터 예측자 (PMVx, PMVy)가 어떻게 계산되는지를 설명한다. 의사 코드(7600)에서, SameFieldMV 및 OppFieldMV는 2 세트의 후보 움직임 벡터를 나타내고, NumSameFieldMV 및 NumOppFieldMV는 각 세트에 속하는 후보 움직임 벡터의 수를 나타낸다. 각 세트에서의 후보 움직임 벡터의 순서는 후보 A가 존재하는 경우 후보 A에서 시작하고 후보 B가 존재하는 경우 이어서 후보 B가 오며, 후보 C가 존재하는 경우 그 다음에 후보 C가 온다. 예를 들어, SameFieldMV 후보 움직임 벡터 세트가 후보 B 및 후보 C만을 포함하는 경우, SameFieldMV[0]는 후보 B이다.
움직임 벡터 차분 디코딩
MVDATA 신택스 요소는 매크로블록에 대한 움직임 벡터 차분 정보를 포함한다. 각각의 매크로블록에서 신호되는 움직임 보상 및 움직임 벡터 블록 패턴의 유형에 따라, 매크로블록마다 최대 4개의 MVDATA 신택스 요소가 있을 수 있다. 보다 구체적으로는,
● 1MV 매크로블록의 경우, MBMODE에서의 MVP 필드에 따라 0 또는 1개의 MVDATA 신택스 요소가 존재할 수 있다.
● 2 필드 MV 매크로블록의 경우, 2MVBP에 따라 0, 1 또는 2개의 MVDATA 신택스 요소(들)가 존재할 수 있다.
● 4 프레임/필드 MV 매크로블록의 경우, 4MVBP에 따라 0, 1, 2, 3 또는 4개의 MVDATA 신택스 요소(들)가 존재할 수 있다.
이 결합 구현에서, 움직임 벡터 차분은 인터레이스형 P-필드에 대한 1 참조 필드 움직임 벡터 차분과 동일한 방식으로 디코딩된다. (도 77a의 의사 코드(7700)는 1-참조 필드에 대해 움직임 벡터 차분이 어떻게 디코딩되는지를 나타낸다. 도 77b의 의사 코드(7710)는 대체 결합 구현에서 1-참조 필드에 대해 움직임 벡터 차분이 어떻게 디코딩되는지를 나타낸다. 의사 코드(7710)는 확장된 움직임 벡터 차분 범위의 처리를 생략한다.)
움직임 벡터 재구성
움직임 벡터 차분 dmv가 주어지면, 루미넌스 움직임 벡터는 상기 섹션 XV.B.3에 기술된 바와 같이 차분을 예측자에 가산함으로써 재구성된다. 루마 프레임 또는 필드 움직임 벡터가 주어지면, 대응하는 크로마 프레임 또는 필드 움직임 벡터가 Cb/Cr 블록의 일부분 또는 그 전체를 보상하기 위해 도출된다. 도 78의 의사 코드(7800)는 인터레이스형 P-프레임에서의 루마 움직임 벡터 LMV로부터 크로마 움직임 벡터 CMV가 어떻게 도출되는지를 설명한다.
D. 인터레이스형 B-프레임 디코딩
이 섹션은 결합 구현에서 이전의 섹션에서 논의된 개념을 참조하여 인터레이스형 B-프레임을 디코딩하는 프로세스를 설명한다.
1. 인터레이스형 B-프레임의 매크로블록 계층 디코딩
매크로블록 레벨에서, 인터레이스형 B-프레임 신택스는 상기한 인터레이스 P-프레임 신택스와 유사하다. 인터레이스형 B-프레임에서의 매크로블록은 3가지 유형, 즉 1MV, 2 필드 MV 및 인트라로 분류된다. 4 프레임 MV 및 4 필드 MV 모드는 이 결합 구현에서의 인터레이스형 B-프레임에 대해 허용되지 않는다. 이 3가지 모드는 인터레이스형 P-프레임에서와 같이 MBMODE 신택스 요소와 공동으로 코딩된다. 각각의 매크로블록은 또한 전방, 후방, 직접 또는 보간으로서 예측된다(DIRECTMB 및 BMVTYPE 신택스 요소를 사용함). 1MV 매크로블록이 전방 또는 후방인 경우, 이는 단일의 움직임 벡터를 사용한다. 매크로블록이 1MV이지만 직접이나 보간이 아닌 경우, 이는 2개의 움직임 벡터를 사용한다. 매크로블록이 2 필드 MV 유형이고 전방 또는 후방 예측된 경우, 이는 2개의 움직임 벡터를 사용한다. 매크로블록이 2 필드 MV 유형이고 직접 또는 보간인 경우, 이는 4개의 움직임 벡터를 사용한다.
이하의 섹션들은 인터레이스형 B-프레임에서의 서로 다른 인터-코딩된 매크로블록 유형의 특성을 설명한다.
인터레이스형 B-프레임에서의 1MV 매크로블록
인터레이스형 B-프레임에서의 1MV 매크로블록에서, 루미넌스 블록의 변위는 예측 유형이 전방 또는 후방인 경우 단일의 움직임 벡터로 표현되고, 유형이 직접 또는 보간인 경우 2개의 움직임 벡터로 표현된다. 각각의 경우에 대응하는 크로마 움직임 벡터가 도출된다. 보간 및 직접 예측의 경우에, 전방 및 후방 참조 픽처로부터의 움직임 보상된 픽셀은 최종 예측을 형성하기 위해 평균된다.
인터레이스형 B-프레임에서의 2 필드 MV 매크로블록
인터레이스형 B-프레임에서의 2 필드 MV 매크로블록에서, 루미넌스 블록의 각 필드의 변위는 도 37에 나타낸 바와 같이 다른 움직임 벡터로 기술된다. 게다가, 예측 유형은 상부 필드에서 하부 필드로 가면서 전방으로부터 후방으로 전환될 수 있고 그 역도 마찬가지이며, 따라서 상기 섹션 VII에서 논의된 바와 같이 상부 필드가 하나의 참조 픽처로부터 움직임 보상될 수 있고 하부 필드가 다른 하나의 참조 필드로부터 움직임 보상될 수 있게 된다.
인터레이스형 B-프레임에서의 2MVBP, 4MVBP의 해석 및 움직임 벡터의 순서
1MV 매크로블록에서, 인코더는 2개의 움직임 벡터 중 어느 것이 존재하는지를 가리키기 위해 보간 모드에서 2MVBP 신택스 요소를 사용한다. 비트 1은 전방 움직임 벡터에 대응하고, 비트 0은 후방 움직임 벡터에 대응한다.
2 필드 MV 매크로블록에서, 인코더는 2개의 필드의 움직임 벡터 중 어느 것이 존재하는지를 가리키기 위해 전방 및 후방 모드에서 2MVBP 신택스 요소를 사용한다. 비트 1은 상부 필드 움직임 벡터에 대응하고, 비트 0은 하부 필드 움직임 벡터에 대응한다. 상부 필드에 대한 전방 예측에서 하부 필드에 대한 후방 예측으로 또는 그 역으로 전환하기 위해 MVSW 신택스 요소가 사용되는 경우, 인코더는 동일한 상부/하부 시그널링을 사용한다. 인코더는 4개의 움직임 벡터 중 어느 것이 존재하는지를 가리키기 위해 보간 모드에서 4MVBP 신택스 요소를 사용한다. 비트 3은 상부 필드 전방 움직임 벡터에 대응하고, 비트 2는 상부 필드 후방 움직임 벡터에 대응하며, 비트 1은 하부 필드 전방 움직임 벡터에 대응하고, 비트 0은 하부 필드 후방 움직임 벡터에 대응한다.
1로 설정된 2MVBP 및 4MVBP의 비트는 대응하는 움직임 벡터 차분이 존재함을 뜻하고, 0으로 설정된 비트는 대응하는 움직임 벡터가 예측된 움직임 벡터와 같음을, 즉 대응하는 움직임 벡터 차분이 존재하지 않음을 뜻한다. 실제의 디코딩된 움직임 벡터는 2MVBP 또는 4MVBP에서의 비트와 동일한 순서로 전송된다. 예를 들어, 보간 모드를 사용하는 2 필드 MV 매크로블록에서, 디코더에 의해 수신될 첫번째 움직임 벡터는 상부 필드 전방 움직임 벡터이고, 수신될 마지막(즉, 4번째) 움직임 벡터는 하부 필드 후방 움직임 벡터이다.
건너뜀 매크로블록 시그널링
건너뜀 매크로블록은 P 프레임에서와 동일한 방식으로 신호된다. 그렇지만, 인터레이스형 B-프레임에서의 건너뜀 매크로블록은 1MV 프레임 유형으로 제한된다, 즉 필드 유형이 허용되지 않는다. 움직임 벡터는 제로 차분 움직임 벡터로 코딩되고(즉, 매크로블록은 그의 1MV 움직임 예측자를 사용하여 움직임 보상되고), 코딩된 블록이 없다(CBP = 0). 매크로블록이 건너뜀인 경우, 인코더는 그 매크로블록에 대한 BMVTYPE 정보만을 전송하고, 따라서 움직임 벡터는 전방, 후방, 직접 또는 보간으로서 정확하게 예측될 수 있다.
매크로블록 모드 시그널링
매크로블록 모드 시그널링은 상기 섹션 XV.C에 설명한 바와 같이 인터레이스형 P-프레임에서와 동일한 방식으로 수행된다.
예측 유형 디코딩(BMVTYPE 및 MVSW)
인터레이스형 B-프레임에 있어서 예측 유형은 이하의 규칙에 따라 디코딩된다. 픽처 레벨 비트플레인 DIRECTMB가 매크로블록이 직접 유형임을 가리키는 경우, 그 매크로블록에 대한 예측 유형은 직접으로 설정된다. 직접/비직접 결정이 미처리 모드로 코딩되어 있는 경우, 인코더는 예측 유형이 직접인지 여부를 가리키기 위해 매크로블록 레벨에서 부가의 비트 DIRECTBIT를 사용한다.
예측 유형이 비직접인 경우, 디코더는 BMVTYPE 신택스 요소를 디코딩한다. 매크로블록 모드가 "2MV 필드 코딩됨"이고 BMVTYPE가 전방 또는 후방인 경우, 디코더는 또한 예측 유형이 그 매크로블록에 대한 상부 필드에서 하부 필드로 가면서 변하는지(즉, 전방에서 후방으로 또는 그 역으로 변동하는지) 여부를 결정하기 위해 MVSW 비트를 디코딩한다.
직접 모드 움직임 벡터 디코딩
직접 모드 움직임 벡터를 디코딩하기 위해, 디코더는 먼저 이전에 디코딩된 앵커 프레임으로부터의 움직임 벡터를 버퍼링한다. 구체적으로는, 이전에 디코딩된 미래의 P-프레임에 대해, 디코더는 미래의 P-프레임으로부터의 디코딩된 루마 움직임 벡터의 가능한 최대 수의 1/2(즉, (2* NumberOfMB)개의 움직임 벡터)를 버퍼링한다. 앵커 프레임으로부터 버퍼링할 이들 움직임 벡터를 선택하는 방법은 상기 섹션 XIII에 설명되어 있다.
상기 획득한 움직임 벡터로, 디코더는 도 19의 의사 코드(1900)에 도시한 바와 같이 움직임 벡터 풀백없이 전방 및 후방 지향 움직임 벡터를 획득하기 위해 Scale_Direct_MV에서 스케일링 논리를 적용한다.
이 결합 구현에서, 전방 및 후방 예측 매크로블록 등의 직접 모드 예측을 사용하지 않는 매크로블록에 대한 직접 모드 움직임 벡터의 계산이 없다. 그 대신에, 비직접 매크로블록에 대한 움직임 벡터는 전방 또는 후방 움직임 벡터 버퍼에 기초하여 예측된다.
2. 인터레이스형 B-프레임에 대한 움직임 벡터 디코딩
인터레이스형 B-프레임에 대한 움직임 벡터 예측자
인터레이스형 P-프레임에서와 같이, 인터레이스형 B-프레임에서의 현재 매크로블록에 대한 움직임 벡터 예측자를 계산하는 프로세스는 그의 이웃 매크로블록으로부터 현재 매크로블록에 대한 후보 움직임 벡터를 수집하는 단계 및 후보 움직임 벡터 세트로부터 현재 매크로블록에 대한 움직임 벡터 예측자를 계산하는 단계를 포함한다. 도 40a 및 도 40b는 후보 움직임 벡터가 수집되는 이웃 매크로블록을 나타낸 것이다. 이 결합 구현에서, 인터레이스형 B-프레임에 대한 움직임 벡터 예측자는 인터레이스형 P-프레임에 대해 상기 섹션 XV.C에서 설명한 규칙에 따라 후보 세트로부터 선택된다.
전방 및 후방 모드 움직임 벡터에 대해 개별적인 예측 컨텍스트가 사용된다. 디코더는 전방 움직임 벡터를 예측하는 데 전방 예측 컨텍스트를 사용하고 후방 움직임 벡터를 예측하는 데 후방 예측 컨텍스트를 사용한다.
인터레이스형 B-프레임에서의 전방 및 후방 예측 컨텍스트 채우기
디코더는 전방 및 후방 움직임 벡터를 개별적으로 버퍼링하고 이들을 사용하여 전방 및 후방 움직임 벡터를 각각 예측한다. 보간 매크로블록의 경우, 디코더는 전방 움직임 벡터를 예측하기 위해 전방 예측 버퍼를 사용하고(첫번째 디코딩된 MVDATA 요소) 후방 움직임 벡터를 예측하기 위해 후방 버퍼를 사용한다(두번째 디코딩된 MVDATA 요소). 매크로블록이 직접 또는 보간인 경우, 디코더는 전방 MV 성분을 전방 버퍼에 버퍼링하고 후방 MV 성분을 후방 버퍼에 버퍼링한다. 후보 세트 중에서 움직임 벡터 예측자를 선택하기 위한 각각의 경우에서의 (예를 들어, 1MV 매크로블록, 2 필드 MV 매크로블록, 기타 등등에 대한) 실제 예측 논리는 상기 섹션 XV.C에 설명되어 있다.
전방 및 후방 움직임 벡터 버퍼를 채우고 이들 버퍼 내의 움직임 벡터로부터 움직임 벡터를 예측하는 방식은 상기 섹션 X.C에 설명되어 있다.
인터레이스형 B-프레임에서의 움직임 벡터 차분 디코딩
인터레이스형 B-프레임에서의 움직임 벡터 차분은 상기 섹션 XV.C.2에서 논의된 바와 같이 도 77a 및 도 77b의 의사 코드(7700, 7710)에 따라 디코딩된다.
인터레이스형 B-프레임에서의 움직임 벡터 재구성
인터레이스형 B-프레임에서의 움직임 벡터 재구성은 도 78의 의사 코드(7800)에 따라 디코딩되고 이에 대해 상기 섹션 XV.B.3 및 XV.C.2에 논의되어 있다.
E. 비트플레인 코딩
(1) 인터레이스형 B-필드의 매크로블록에 대한 전방/비전방 결정(즉, FORWARDMB 플래그) 및 (2) 인터레이스형 B-프레임의 매크로블록에 대한 직접/비직접 결정(즉, DIRECTMB 플래그) 등의 매크로블록-관련 이진 정보는 매크로블록당 하나의 이진 심볼로 인코딩될 수 있다. 예를 들어, 인터레이스형 B-필드의 매크로블록이 (후방, 직접 또는 보간 등의 다른 모드에 대하여) 전방 모드로 움직임 보상되어 있는지 여부는 1 비트로 신호될 수 있다. 이들 경우에, 필드 또는 프레임에서의 모든 매크로블록에 대한 상태는 비트플레인으로서 코딩되어 필드 또는 프레임 헤더로 전송될 수 있다. 이 규칙에 대한 한 예외는 비트플레인 코딩 모드가 미처리 모드로 설정되어 있는 경우이며, 이 경우 각각의 매크로블록에 대한 상태는 심볼당 1비트로서 코딩되어 다른 매크로블록 레벨 신택스 요소와 함께 매크로블록 레벨에서 전송된다.
필드/프레임-레벨 비트플레인 코딩은 2차원 이진 어레이를 인코딩하는 데 사용된다. 각 어레이의 크기는 rowMB x colMB이며, 여기서 rowMB 및 colMB는 각각 문제의 필드 또는 프레임에서의 매크로블록 행 및 열의 수이다. 비트스트림 내에서, 각각의 어레이는 일련의 연속적인 비트로서 코딩된다. 7가지 모드 중 하나가 각각의 어레이를 인코딩하는 데 사용된다. 이 7가지 모드는 다음과 같다.
1. 미처리(raw) 모드 - 정보가 심볼당 1 비트로서 코딩되어 MB 레벨 신택스의 일부로서 전송됨,
2. 정규-2(normal-2) 모드 - 2개의 심볼이 공동으로 코딩됨,
3. 차분-2(differential-2) 모드 - 비트플레인의 차분 코딩, 뒤이어 2개의 잔차 심볼을 공동으로 코딩함,
4. 정규-6 모드 - 6개의 심볼이 공동으로 코딩됨,
5. 차분-6 모드 - 비트플레인의 차분 코딩, 뒤이어서 6개의 잔차 심볼을 공동으로 코딩함,
6. 행 건너뜀(rowskip) 모드 - 설정된 비트가 없는 행을 신호하기 위해 1 비트 건너뜀, 및
7. 열 건너뜀(columnskip) 모드 - 설정된 비트가 없는 열을 신호하기 위해 1 비트 건너뜀.
필드 또는 프레임 레벨에서의 비트플레인에 대한 신택스 요소는 이하의 순서로 있다, 즉 INVERT, IMODE 및 DATABITS가 있다.
반전 플래그(INVERT)
INVERT 신택스 요소는 1-비트 값이고, 설정되어 있는 경우 이는 비트플레인이 0 비트보다 많은 설정된 비트를 가짐을 가리킨다. INVERT 및 모드에 따라, 디코더는 해석된 비트플레인을 반전시켜 원본을 재생성하게 된다. 유의할 점은 미처리 모드가 사용되는 경우 이 비트의 값이 무시되어진다는 것이다. 비트플레인을 디코딩함에 있어서 INVERT 값이 어떻게 사용되는지에 대한 설명은 이하에 제공된다.
코딩 모드(IMODE)
IMODE 신택스 요소는 비트플레인을 인코딩하는 데 사용되는 코딩 모드를 가리키는 가변 길이 값이다. 표 11은 IMODE 신택스 요소를 인코딩하는 데 사용되는 코드 테이블을 나타낸 것이다. 비트플레인을 디코딩함에 있어서 IMODE 값이 어떻게 사용되는지에 대한 설명은 이하에 제공된다.
IMODE VLC 코드테이블
IMODE VLC |
코딩 모드 |
10 |
정규-2 |
11 |
정규-6 |
010 |
행건너뜀 |
011 |
열건너뜀 |
001 |
차분-2 |
0001 |
차분-6 |
0000 |
미처리 |
비트플레인 코딩 비트(DATABITS)
DATABITS 신택스 요소는 비트플레인에 대한 심볼의 스트림을 인코딩하는 가변 크기 신택스 요소이다. 비트플레인을 인코딩하는 데 사용되는 방법은 IMODE의 값에 의해 결정된다. 7가지 코딩 모드에 대해서는 이하의 섹션들에서 설명된다.
미처리 모드
이 모드에서, 비트플레인은 매크로블록의 래스터 스캔 순서로 스캔된 심볼당 1 비트로서 인코딩되고 매크로블록 계층의 일부로서 전송된다. 다른 대안으로서, 정보는 필드 또는 프레임 레벨에서 미처리 모드로 코딩되고, DATABITS는 길이가 rowMB x colMB 비트이다.
정규-2 모드
rowMB x colMB가 홀수이면, 첫번째 심볼은 미처리로 인코딩된다. 차후의 심볼은 자연스런 스캔 순서로 쌍으로 인코딩된다. 표 12의 이진 VLC 테이블은 심볼 쌍을 인코딩하는 데 사용된다.
정규-2/차분-2 코드 테이블
심볼 2n |
심볼 2n+1 |
코드워드 |
0 |
0 |
0 |
1 |
0 |
100 |
0 |
1 |
101 |
1 |
1 |
11 |
차분-2 모드
정규-2 방법은 전술한 바와 같이 비트플레인을 생성하는 데 사용되고 Diff-1 연산이 이하에 기술하는 바와 같이 비트플레인에 적용된다.
정규-6
모드
정규-6 및 차분-6 모드에서, 비트플레인은 6개의 픽셀의 그룹으로 인코딩된다. 이들 픽셀은 2x3 또는 3x2 타일로 그룹화된다. 비트플레인은 규칙 세트를 사용하여 최대로 타일화되고, 나머지 픽셀은 행-건너뜀 및 열-건너뜀 모드의 변형을 사용하여 인코딩된다. 2x3 "수직" 타일은 rowMB가 3의 배수이고 colMB가 아닌 경우에만 사용된다. 그렇지 않은 경우, 3x2 "수평" 타일이 사용된다. 도 79a는 2x3 "수직" 타일의 간단화된 예를 나타낸 것이다. 도 79b는 가늘고 긴 어두운 사각형이 1 픽셀 폭이고 행-건너뜀 및 열-건너뜀 코딩을 사용하여 인코딩되는 3x2 "수평" 타일의 간단화된 예를 나타낸 것이다. 도 79c에 도시한 바와 같이 타일화된 플레인의 경우, 픽처의 상부 및 좌측 엣지를 따라 있는 직선 타일에 있어서, 타일의 코딩 순서는 이하의 패턴을 따른다. 6-요소 타일이 먼저 인코딩되고 이어서 열-건너뜀 및 행-건너뜀 인코딩된 직선 타일이 있다. 어레이 크기가 2x3 또는 3x2의 배수인 경우, 후자의 직선 타일은 존재하지 않고 비트플레인은 완벽하게 타일화된다.
6-요소 직사각형 타일은 불완전한 허프만 코드, 즉 인코딩을 위해 모든 종단 노드를 사용하는 것은 아닌 허프만 코드를 사용하여 인코딩된다. N을 타일에서의 설정된 비트의 수라고 하자, 즉 0 ≤ N ≤ 6이라고 하자. N < 3인 경우, VLC는 타일을 인코딩하는 데 사용된다. N = 3인 경우, 고정 길이 이스케이프(fixed length escape)에 뒤따라서 5 비트 고정 길이 코드가 오며, N > 3인 경우, 고정 길이 이스케이프에 뒤따라서 타일의 보수 코드가 온다.
직사각형 타일은 6 비트의 정보를 포함한다. k가 타일과 연관된 코드라고 하고, 여기서 k = bi2i, bi는 타일 내에서의 자연스런 스캔 순서에서의 i번째 비트의 이진값이다. 따라서, 0 ≤ k ≤ 64이다. VLC 및 이스케이프 코드의 조합은 k를 신호하는 데 사용되는 고정 길이 코드를 만족시킨다.
차분-6 모드
정규-6 방법은 전술한 바와 같이 비트플레인을 생성하는 데 사용되고, Diff-1 연산은 이하에 기술하는 바와 같이 비트플레인에 적용된다.
행 건너뜀 모드
행 건너뜀 코딩 모드에서, 모두 제로인 행은 1 비트 오버헤드로 건너뛴다. 신택스는 다음과 같다. 각각의 행에 대해, 단일의 ROWSKIP 비트는 그 행이 건너뜀인지를 가리킨다. 행이 건너뜀이면, 그 다음 행에 대한 ROWSKIP 비트는 그 다음(next)이고, 그렇지 않은 경우(행이 건너뜀이 아닌 경우), ROWBITS 비트(행에서의 각 매크로블록에 대한 비트)가 그 다음(next)이다. 따라서, 전체 행이 제로인 경우, 제로 비트가 ROWSKIP 심볼로서 전송되고, ROWBITS는 건너뜀이다. 행에 설정된 비트가 있는 경우, ROWSKIP는 1로 설정되고, 전체 행은 미처리로 전송된다(ROWBITS). 행들은 필드 또는 프레임의 상부로부터 하부로 스캔된다.
열 건너뜀 모드
열 건너뜀은 행 건너뜀의 전치(transpose)이다. 열들은 필드 또는 프레임의 좌측에서 우측으로 스캔된다.
Diff
-1
: 역 차분 디코딩(inverse differential decoding)
어느 한 차분 모드(차분-2 또는 차분-6)가 사용되는 경우, "차분 비트"의 비트플레인은 먼저 대응하는 정규 모드(각각 정규-2 또는 정규-6)를 사용하여 디코딩된다. 차분 비트는 원래의 비트플레인을 재생성하는 데 사용된다. 재생성 프로세스는 이진 알파벳에 대한 2-D DPCM이다. 위치 (i,j)에 있는 비트를 재생성하기 위해, 예측자 bp(i,j)가 다음과 같이 (위치 (i,j)에 있는 비트 b(i,j)로부터) 생성된다.
차분 코딩 모드의 경우, INVERT에 기초한 비트별 반전 프로세스는 수행되지 않는다. 그렇지만, INVERT 플래그는 상기한 바와 같이 예측자의 도출을 위한 심볼 A의 값을 가리키기 위해 다른 자격으로 사용된다. 보다 구체적으로는, INVERT가 0이면 A가 0이고, INVERT가 1이면 A가 1이다. 비트플레인의 실제 값은 예측자를 디코딩된 차분 비트 값과 XOR함으로써 얻어진다. 상기 식에서, b(i,j)는 최종 디코딩 후의(즉, 정규-2/정규-6을 행하고 뒤이어서 그의 예측자와의 차분 XOR을 행한 후의) i,j번째 위치에 있는 비트이다.