상기의 목적을 달성하기 위하여 본 발명에 따른 B 픽쳐의 다이렉트 모드 모션벡터 연산 방법은, list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 list 0, list 1 모션벡터를 가지고 있으면 다이렉트 모드의 모션벡터를 유도하기 위해 사용될 모션벡터는 두 가지 방법에 의해 list 0 또는 list 1 모션벡터를 선택하는 점에 그 특징이 있다.
여기서 본 발명에 의하면, list 0, list 1 모션벡터 중 동일 위치의 블록이 존재하는 list 1 레퍼런스 픽쳐에서 시간적 거리가 가까운 모션벡터를 다이렉트 모드의 모션벡터를 유도하는 모션벡터로서 선택하고 만일 두 모션벡터가 동일 레퍼런스를 가리키면 list 0 모션벡터를 다이렉트 모드의 모션벡터를 유도하는 모션벡터로서 선택하는 방법이 있고, 다른 방법은 시간적 거리와 관계없이 무조건 list 0 모션벡터를 다이렉트 모드의 모션벡터를 유도하는 모션벡터로서 선택하는 점에 그 특징이 있다.
또한 본 발명에 의하면, 다이렉트 모드의 모션벡터는 동일위치의 블록이 갖는 list 0 모션벡터로부터 유도된다는 종래 기법을 list 1 레퍼런스 픽쳐의 동일 위치에 있는 블록이 오직 list 1 모션벡터만을 갖고 있는 경우에 적용할 경우, 동일 위치의 블록의 list 0 모션벡터는 0 이므로 다이렉트 모드의 모션벡터는 모두 0이 되는 문제를 발견하고 이것을 해결하기 위해, 본 발명은 동일위치의 블록이 갖는 모드 종류와 관계없이 그 블록이 갖고 있는 모션벡터를 이용하여 다이렉트 모드의 모션벡터를 유도하는 점에 그 특징이 있다.
여기서 본 발명은, list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 오직 list 1 모션벡터만을 갖고 있는 경우에 다이렉트 모션벡터를 구할 수 있는 방법을 제시한다. 첫번째 방법은 다이렉트 모드 모션벡터 계산에 사용될 모션벡터 값을 0 으로 하고, 다이렉트 모드의 list 0 레퍼런스 픽쳐(list 0 reference picture for direct mode)는 시간적으로 B 픽쳐 바로 이전 위치에 존재하는 디코딩된 픽쳐라고 정의하는 것을 특징으로 한다. 두번째 방법은 다이렉트 모드 모션벡터 계산에 사용될 모션벡터 값은 동일위치의 블록이 갖고 있는 list 1 모션벡터를 그대로 이용하고, 대신 다이렉트 모드의 list 0 레퍼런스 픽쳐는 시간적으로 B 픽쳐 바로 이전 위치에 존재하는 디코딩된 픽쳐라고 정의하는 점에 그 특징이 있다. 세번째 방법은 다이렉트 모드 모션벡터 계산에 사용될 모션벡터 값은 동일위치의 블록이 갖고 있는 list 1 모션벡터를 그대로 이용하고, list 1 모션벡터가 가리키고 있는 레퍼런스 픽쳐를 다이렉트 모드의 list 0 레퍼런스 픽쳐로 결정하는 것을 특징으로 한다.
또한 본 발명에 의하면, 종래 기법대로 다이렉트 모드의 list 1 레퍼런스 픽쳐를 list 1 예측에 사용되는 인덱스가 0 인 픽쳐로서 정의할 경우, B 픽쳐와 인덱스 0인 픽쳐 사이에 다른 픽쳐가 디코딩될 때 인덱스 0인 픽쳐의 모션정보 및 레퍼런스 픽쳐 정보가 유지되어야 하므로 추가적인 메모리 사용이 필수적이지만 본 발명에서는 다이렉트 모드의 list 1 레퍼런스 픽쳐를 가장 최근에 디코딩된 픽쳐로서 정의함으로써 추가적인 메모리 사용이 절약될 수 있는 특징이 있다.
또한 본 발명에 의하면, 동영상 코딩 시스템에서 B(bi-predictive) 픽쳐의 다이렉트 모드 모션벡터를 추출함에 있어, B 픽쳐의 다이렉트 모드의 list 1 레퍼런스 픽쳐가 상기 B 픽쳐 보다 시간적으로 앞에 위치하는 경우에, 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록(co-located macroblock)이 가지고 있는 모션벡터를 스케일링하여, list 0 모션벡터(MVF)와 list 1 모션벡터 (MVB)를 유도하여 B 픽쳐의 다이렉트 모드 모션벡터를 연산하는 점에 그 특징이 있다.
여기서 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임(frame) 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
또는
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
*또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = - TDB x MV / TDD
MVB = - (TDB + TDD) x MV / TDD
또는
Z = - TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
또는
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = - TDB,i x MVi / TDD,i
MVB,i = - (TDB,i + TDD,i) x MVi / TDD,i
또는
Z = -TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >>8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MV / TDD
MVB,i = (TDB,i - TDD) x MV / TDD
또는
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = - TDB,i x MV / TDD
MVB,i = - (TDB,i + TDD) x MV / TDD
또는
Z = - TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다. 여기서 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 갖는 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
MVF = TDB x MV1 / TDD,1
MVB = (TDB - TDD,1) x MV1/ TDD,1
또는
Z = TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV1는 상기 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, 상기 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다. 여기서 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 갖는 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
MVF = - TDB x MV1 / TDD,1
MVB = - (TDB + TDD,1) x MV1/ TDD,1
또는
Z = - TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV1는 상기 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 다이렉트 모드의 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 두 개의 모션벡터를 가질 경우에는 하나의 모션벡터(list 0 또는 list 1 모션벡터)를 선택하고, 이 선택된 모션벡터로부터 B 픽쳐의 다이렉트 모드의 모션벡터를 유도하는 점에 그 특징이 있다.
또한, 상기의 목적을 달성하기 위하여 본 발명에 따른 B 픽쳐의 다이렉트 모드 모션벡터 연산 방법의 다른 실시 예는,
동영상 코딩 시스템에서 B(bi-predictive) 픽쳐의 다이렉트 모드 모션벡터를 추출함에 있어, B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐와 list 1 레퍼런스 픽쳐가 모두 상기 B 픽쳐보다 시간적으로 뒤에 존재할 경우에, 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록(co-located block)이 가지고 있는 모션벡터를 스케일링하여, list 0 모션벡터(MVF)와 list 1 모션벡터(MVB)를 유도하여 B 픽쳐의 다이렉트 모드 모션벡터를 연산하는 점에 그 특징이 있다.
여기서 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 뒤에 존재하는 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
또는
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 앞에 존재하는 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = - TDB x MV / TDD
MVB = - (TDB + TDD) x MV / TDD
또는
Z = - TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 뒤에 존재하는 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
또는
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 앞에 존재하는 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = - TDB,i x MVi / TDD,i
MVB,i = - (TDB,i + TDD,i) x MVi / TDD,i
또는
Z = -TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >>8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 뒤에 존재하는 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MV / TDD
MVB,i = (TDB,i - TDD) x MV / TDD
또는
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 앞에 존재하는 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = - TDB,i x MV / TDD
MVB,i = - (TDB,i + TDD) x MV / TDD
또는
Z = - TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 매크로블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 뒤에 존재하는 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다. 여기서 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 갖는 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
MVF = TDB x MV0 / TDD,1
MVB = (TDB - TDD,0) x MV0/ TDD,0
또는
Z = TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 0과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV0는 상기 다이렉트 모드를 위한 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, 상기 B 픽쳐의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐에 비해 시간적으로 앞에 존재하는 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다. 여기서 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 갖는 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
MVF = - TDB x MV0 / TDD,0
MVB = - (TDB + TDD,0) x MV0/ TDD,0
또는
Z = - TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 0과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV0는 상기 다이렉트 모드 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 다이렉트 모드의 list 1 레퍼런스 픽쳐의 동일 위치에 있는 블록이 두 개의 모션벡터를 가질 경우에는 하나의 모션벡터(MV1 또는 MV2)를 선택하고, 이 선택된 모션벡터로부터 B 픽쳐의 다이렉트 모드의 모션벡터를 유도하는 점에 그 특징이 있다.
또한, 상기의 목적을 달성하기 위하여 본 발명에 따른 B 픽쳐의 다이렉트 모드 모션벡터 연산 방법의 또 다른 실시 예는,
동영상 코딩 시스템에서 B(bi-predictive) 픽쳐의 다이렉트 모드 모션벡터를 추출함에 있어, 다이렉트 모드 모션벡터를 구하는데 사용하는 수식을 단순화하기 위해 픽쳐 사이의 시간적 거리를 부호가 있는 값으로 표현함으로써 B 픽쳐의 다이렉트 모드의 list 0 레퍼런스 픽쳐와 list 1 레퍼런스 픽쳐의 위치에 관계없이 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록(co-located block)이 가지고 있는 모션벡터를 스케일링하여, list 0 모션벡터 (MVF)와 list 1 모션벡터(MVB)를 유도하여 B 픽쳐의 다이렉트 모드 모션벡터를 연산하는 점에 그 특징이 있다.
여기서 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드일 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
또는
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 list 1 레퍼런스 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드일 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
또는
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 B 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,i는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드일 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF,i = TDB,i x MV / TDD
MVB,i = (TDB,i - TDD) x MV / TDD
또는
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 B 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 list 1 레퍼런스 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, list 1 레퍼런스 픽쳐가 상기 B 픽쳐보다 시간적으로 뒤에 존재하는 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 list 1 레퍼런스 프레임의 피일드 0 에 있는 동일 위치의 매크로블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용되는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF = TDB x MV0 / TDD,0
MVB = (TDB - TDD,0) x MV0/ TDD,0
또는
Z = TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,0는 list 1 레퍼런스 프레임의 피일드 0과 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 프레임의 피일드 0으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV0는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한 본 발명에 의하면, 상기 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, list 1 레퍼런스 픽쳐가 상기 B 픽쳐보다 시간적으로 앞에 존재하는 경우, 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 list 1 레퍼런스 프레임의 피일드 1 에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용되는 다음식으로부터 산출되는 점에 그 특징이 있다.
MVF =TDB x MV1 / TDD,1
MVB = (TDB -TDD,1) x MV1 / TDD,1
또는
Z = TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 프레임의 피일드 1로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV1는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
또한, 상기의 목적을 달성하기 위하여 본 발명에 따른 B 픽쳐의 다이렉트 모드 모션벡터 연산 방법의 또 다른 실시 예는,
동영상 코딩 시스템에서 B(bi-predictive) 픽쳐의 다이렉트 모드 모션벡터를 추출함에 있어, B 픽쳐의 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 매크로블록(co-located macroblock)이 인트라 모드인 경우에는, 공간적 중복성 (spatial redundancy)을 이용하여, 상기 B 픽쳐의 코딩하려는 매크로블록의 주변 블록으로부터 list 0, list 1 레퍼런스 픽쳐와 각 list에 대한 모션벡터를 예측, 산출하고 B 픽쳐의 다이렉트 모드 모션벡터를 연산하는 점에 그 특징이 있다.
여기서 본 발명에 의하면, 상기 list 1 레퍼런스 픽쳐를 선택함에 있어, 상기 코딩하려는 매크로블록의 주변 매크로블록 A, B, C가 참조하는 레퍼런스 픽쳐가 서로 다를 경우에는, 가장 작은 인덱스를 갖는 레퍼런스 픽쳐를 list 1 레퍼런스 픽쳐로 선택하는 점에 그 특징이 있다.
또한 본 발명에 의하면, 상기 list 1 레퍼런스 픽쳐를 선택함에 있어, 상기 코딩하려는 매크로블록의 주변 매크로블록 중 두 개 이상의 매크로블록이 참조하는 레퍼런스 픽쳐가 동일한 인덱스를 가지고 있으면, 그 인덱스를 갖는 레퍼런스 픽쳐를 list 1 레퍼런스 픽쳐로 선택하는 점에 그 특징이 있다.
또한 본 발명에 의하면, 상기 각 list에 대한 모션벡터를 예측함에 있어, 주변 매크로블록 A, B, C 중 인트라 모드를 갖는 매크로블록이 있으면, 그 매크로블록의 list 0와 list 1의 모션벡터를 각각 0으로 설정하고, 상기 각 list 레퍼런스 픽쳐의 시간적 위치와 동일한 방향을 갖는 모션벡터를 주변 매크로블록으로부터 선택하고 미디언 연산을 통해 각 list의 모션벡터를 구하거나, 만일 주변 매크로블록이 동일한 방향의 모션벡터를 두 개 가지고 있으면 그 매크로블록에서 한 개만을 선택하여 미디언 연산에 포함하여 각 list의 모션벡터를 구하는 것에 그 특징이 있다.
또한 본 발명에 의하면, 상기 각 list에 대한 유효한 레퍼런스 픽쳐 인덱스를 모두 유도해낼 수 없다면, list 0, list 1의 레퍼런스 픽쳐 인덱스는 각각 0이 되고 각 list에 대한 모션벡터는 0으로 설정하는 것에 그 특징이 있다.
이와 같은 본 발명에 의하면, 차세대 동영상 압축 기술에 정의된 B(Bi-predictive) 픽쳐에서 다이렉트 모드 모션벡터 추출 기법을 제시하여, 다이렉트 모드가 매크로블록의 예측 모드로서 선택될 가능성을 높임으로서 B 픽쳐 코딩 효율(coding efficiency)을 향상시킬 수 있는 장점이 있다.
이하, 첨부된 도면을 참조하여 본 발명에 따른 실시 예를 상세히 설명한다.
본 발명은 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 매크로블록이 인트라 모드일 때 다이렉트 모션벡터를 유도하는 방법과, list 1 레퍼런스 픽쳐가 B 픽쳐보다 시간적으로 뒤에 위치하는 경우, 그리고 B 픽쳐보다 시간적으로 앞에 위치하는 경우에 대해 다이렉트 모션벡터를 구하는 방법, 그리고 다이렉트 모드 모션벡터를 구하는데 사용하는 수식을 단순화하기 위해 픽쳐 사이의 시간적 거리를 부호가 있는 값으로 표현함으로써 다이렉트 모드를 위한 list 0, list 1 레퍼런스 픽쳐 위치에 관계없이 다이렉트 모드 모션벡터를 구하는 방법에 대해 각각 구분하여 제시한다. 이때 픽쳐 레벨(picture level) 에서 프레임(frame) 모드와 피일드(field) 모드가 스위칭 되어지므로 B 픽쳐와 list 1 레퍼런스 픽쳐는 프레임 구조 또는 피일드 구조로 코딩될 수 있다. 따라서 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐에 있는 동일 위치의 매크로블록은 4 가지 경우의 프레임/피일드 코딩 조합을 갖게 된다.
[1] list 1 레퍼런스 픽쳐에 있는 동일위치의 매크로블록이 인트라 모드를 갖는 경우
도 3의 (f) 및 도 4의 (f)에 나타낸 바와 같이, 다이렉트 모드의 list 1 레퍼런스 픽쳐(list 1 reference picture for direct mode)에 있는 동일 위치의 매크로블록은 레퍼런스 픽쳐의 시간적 위치에 관계없이 인트라 모드를 가질 수 있다. 이러한 모드를 갖는 매크로블록은 모션정보를 갖고 있지 않으므로, 종래 기법에서는 단순히 다이렉트 모션벡터를 0으로 놓고 list 0 레퍼런스 픽쳐는 가장 최근에 디코딩된 픽쳐로 정의하였다. 하지만 종래 기법은 높은 코딩 효율을 보장할 수 없으므로 본 발명에서는 B 픽쳐의 코딩하려는 매크로블록의 주변 블록으로부터 list 0, list 1 레퍼런스 픽쳐와 각 list에 대한 모션벡터를 공간적 중복성(spatial redundancy)을 이용하여 예측, 산출한다.
각 list에 대한 레퍼런스 픽쳐 인덱스는 다음과 같은 방법으로 구한다. 도 5는 일반적인 공간적 중복성을 고려하여, 주변 블록 A, B, C의 모션벡터를 이용하여 블록 E의 예측 모션벡터를 연산하는 것을 설명하기 위한 도면이다.
-- 만일, 주변 매크로블록 A, B, C의 레퍼런스 픽쳐 인덱스가 서로 다를 경우에는, 그 중에서 가장 작은 레퍼런스 픽쳐 인덱스가 다이렉트 모드의 레퍼런스 픽쳐 인덱스로 결정된다.
-- 만일, 주변 매크로블록 중 두 개의 블록이 동일한 레퍼런스 픽쳐 인덱스를 가지고 있으면, 그 인덱스가 다이렉트 모드의 레퍼런스 픽쳐 인덱스로 결정된다.
-- 만일, 주변 매크로블록 모두 같은 레퍼런스 픽쳐 인덱스를 가지고 있으면, 그 인덱스가 다이렉트 모드의 레퍼런스 픽쳐 인덱스로 결정된다.
또한, 각 list에 대한 모션벡터는 다음과 같은 모션벡터 예측을 통해 구한다. 이때 주변 매크로블록 A, B, C 중 인트라 모드를 갖는 매크로블록이 있으면, 그 매크로블록의 list 0와 list 1의 모션벡터를 각각 0으로 설정한다.
-- 위에서 구한 각 list의 레퍼런스 픽쳐의 시간적 위치와 동일한 방향을 갖는 모션벡터를 주변 매크로블록으로부터 선택하고 미디언 연산을 통해 각 list의 모션벡터를 구한다.
-- 만일, 주변 매크로블록이 동일한 방향의 모션벡터를 두 개 가지고 있으면, 그 매크로블록에서는 한 개만을 선택하여 미디언 연산에 포함시키도록 한다.
한편, 만일 주변 블록으로부터 list 0, list 1에 대한 유효한 레퍼런스 픽쳐 인덱스를 모두 유도해낼 수 없다면, list 0, list 1의 레퍼런스 픽쳐 인덱스는 각각 0이 되고 각 list에 대한 모션벡터는 0으로 설정한다.
[2] 다이렉트 모드의 list 1 레퍼런스 픽쳐가 B 픽쳐보다 시간적으로 뒤에 위치하는 경우
Case 1: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드일 때
도 3의 (a)~(f)에서 알 수 있듯이, list 1 레퍼런스 픽쳐의 동일 위치에 있는 블록은 한 개의 모션벡터를 갖거나 두 개의 모션벡터를 가질 수 있다. 본 발명에서는 동일 위치의 블록이 두 개의 모션벡터를 가질 경우에는 하나의 모션벡터(L0 MV 또는 L1 MV)를 선택하고, 이 선택된 모션벡터로부터 다이렉트 모드의 모션벡터를 유도하기로 한다(이하에서는 L0 MV(list 0 모션벡터)가 선택된 경우를 기준으로 설명하기로 한다).
따라서 도 3의 (a)(c)는 도 6의 (a)와 같게 되며, 도 3의 (b)(d)(e)는 도 6의 (c), 도 3의 (g)(h)는 도 6의 (b)와 같이 단순화되어 표시될 수 있게 된다.
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐와 list 1 레퍼런스 픽쳐가 B 픽쳐를 중심으로 시간적으로 앞, 뒤에 존재할 경우(도 6의 (a)), 또는 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 뒤에 존재할 경우(도 6의 (b))에 다이렉트 모드의 모션벡터 MVF , MVB 는 다음과 같이 계산되어진다.
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
여기서, TDB 는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리를 나타내고, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리를 각각 나타낸다.
그리고 윗 식은 다음과 같이 표현될 수도 있는데, 이는 실제 연산 수행시의 편리성을 위하여 비트 오퍼레이션(bit operation)을 적용하는 경우를 나타낸 것이다.
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
만일, 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 앞에 존재할 경우(도 6의 (c))에 다이렉트 모드의 모션벡터 MVF, MVB 는 다음과 같이 계산되어진다.
MVF = - TDB x MV / TDD
MVB = - (TDB + TDD) x MV / TDD
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
Case 2: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드 모드일 때
도 7에서는 B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드 모드인 경우를 보여준다. B 픽쳐의 매크로블록의 각 블록에서의 모션벡터는 동일 패러티(parity) 의 list 1 레퍼런스 피일드에 있는 동일 위치의 list 0 모션벡터로부터 유도되어진다.
만일 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐가 B 픽쳐를 중심으로 시간적으로 앞, 뒤에 존재하는 경우(도 7의 (a)), 또는 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 뒤에 존재할 경우(도 7의 (b))에는 B 프레임의 각 피일드 i(i=0은 첫번째 피일드, i=1은 두번째 피일드를 의미)에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i , MVB,i 는 다음과 같이 계산되어진다.
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
여기서, MVi 는 list 1 레퍼런스 프레임의 i 에 있는 동일 위치의 블록이 갖는 list 0 모션벡터, TDB,i 는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리를 각각 의미한다. 윗 식은 다음과 같이 표현될 수 있다.
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
만일 list 1 레퍼런스 프레임의 피일드 i에 있는 동일 위치의 블록이 B 픽쳐보다 시간적으로 뒤에 존재하는 프레임의 피일드를 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 앞에 존재할 경우(도 7의 (c) 및 (d)), 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i 는 다음과 같이 계산되어진다.
MVF,i = - TDB,i x MVi / TDD,i
MVB,i = - (TDB,i + TDD,i) x MVi / TDD,i
또는 다음과 같은 식으로 표현될 수도 있다.
Z = -TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
Case 3: B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드일 때
도 8은 B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드인 경우를 보여준다. 여기서 현재 매크로블록의 수직 좌표가 ycurrent 이고 list 1 레퍼런스 픽쳐의 동일위치의 매크로블록 수직 좌표를 yco-located라 하면, 두 좌표 사이에는 yco-located=2 x ycurrent 관계가 성립된다. 그리고 list 0, list 1 레퍼런스 피일드는 각각의 list 0, list1 레퍼런스 프레임의 동일 패러티에 존재하게 된다.
만일 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐가 B 픽쳐를 중심으로 시간적으로 앞, 뒤에 존재하는 경우(도 8의 (a)), 또는 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 뒤에 존재할 경우(도 8의 (b)), B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다.
MVF,i =TDB,i x MV / TDD
MVB,i = (TDB,i -TDD) x MV / TDD
윗 식은 다음과 같이 표현될 수 있다.
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
만일 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 B 픽쳐보다 시간적으로 뒤에 존재하는 프레임을 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하며서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 앞에 존재할 경우(도 8의 (c)), B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다.
MVF,i = -TDB,i x MV / TDD
MVB,i = - (TDB,i +TDD) x MV / TDD
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 4: B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드일 때
도 9는 B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드인 경우를 보여준다. 여기서 현재 매크로블록의 수직 좌표가 ycurrent 이고 list 1 레퍼런스 픽쳐의 동일 위치의 매크로블록 수직 좌표를 yco-located라 하면, 두 좌표 사이에는 yco-located= ycurrent / 2 관계가 성립된다. 그리고 list 1 레퍼런스 프레임의 피일드 0가 피일드 1 보다 B 픽쳐에 시간적 거리가 가까우므로 피일드 0에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
만일 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐가 B 픽쳐를 중심으로 시간적으로 앞, 뒤에 존재하는 경우(도 9의 (a)) 또는 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 픽쳐보다 뒤에 존재할 경우(도 9의 (b)), B 프레임의 다이렉트 모드의 list 0, list 1 모션벡터 MVF, MVB는 다음과 같이 계산되어진다.
MVF = TDB x MV0 / TDD,0
MVB = (TDB -TDD,0) x MV0 / TDD,0
*윗 식은 다음과 같이 표현될 수 있다.
Z = TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
만일 list 1 레퍼런스 프레임의 피일드 0 에 있는 동일 위치의 블록이 B 픽쳐보다 시간적으로 뒤에 존재하는 프레임의 피일드를 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 시간적으로 뒤에 존재하면서 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 앞에 존재할 경우(도 9의 (c)), 다이렉트 모드의 list 0, list 1 모션벡터 MVF, MVB 는 다음과 같이 계산되어진다.
MVF = - TDB x MV0 / TDD,0
MVB = - (TDB +TDD,0) x MV0 / TDD,0
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 0과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV0는 상기 다이렉트 모드의 list 1 레퍼런스 피일드 0에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
[3] 다이렉트 모드의 list 1 레퍼런스 픽쳐가 B 픽쳐보다 시간적으로 앞에 위치하는 경우
이 경우에는 list 0, list 1 레퍼런스 픽쳐 모두 B 픽쳐보다 항상 시간적으로 앞에 위치하고 있다.
Case 1: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드일 때
도 4에 나타낸 바와 같이, list 1 레퍼런스 픽쳐의 동일 위치에 있는 블록은 한 개의 모션벡터를 갖거나 두 개의 모션벡터를 가질 수 있다. 본 발명에서는 동일 위치의 블록이 두 개의 모션벡터를 가질 경우에는 하나의 모션벡터 (L0 MV 또는 L1 MV)를 선택하고, 이 선택된 모션벡터로부터 다이렉트 모드의 모션벡터를 유도하기로 한다(이하에서는 L0 MV(list 0 모션벡터)이 선택된 경우를 기준으로 설명하기로 한다).
따라서 도 4의 (a)(c)(e)(g)(h)는 도 10의 (a)와 같게 되며, 도 4의 (b)(d)는 도 10의 (b)와 같이 단순화 되어 표시될 수 있게 된다.
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, 다이렉트 모드의 모션벡터 MVF , MVB 는 다음과 같이 계산되어진다(도 10의 (a)).
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
그리고 윗 식은 다음과 같이 표현될 수 있다.
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, 다이렉트 모드의 모션벡터 MVF, MVB 는 다음과 같이 계산되어진다(도 10의 (b)).
MVF = - TDB x MV / TDD
MVB = - (TDB + TDD) x MV / TDD
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 2: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드 모드일 때
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다(도 11의 (a) 및 (b)).
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
윗 식은 다음과 같이 표현될 수 있다.
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
만일 list 1 레퍼런스 프레임의 피일드 i에 있는 동일 위치의 블록이 시간적으로 뒤에 존재하는 프레임의 피일드를 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다(도 11의 (c) 및 (d)).
MVF,i = -TDB,i x MVi / TDD,i
MVB,i = - (TDB,i +TDD,i) x MVi / TDD,i
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD,i 는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 3: B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드일 때
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다(도 12의 (a)).
MVF,i = TDB,i x MV / TDD
MVB,i = (TDB,i - TDD) x MV / TDD
윗 식은 다음과 같이 표현될 수 있다.
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
만일 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 시간적으로 뒤에 존재하는 프레임을 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우, B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF,i, MVB,i는 다음과 같이 계산되어진다(도 12의 (b)).
MVF,i = - TDB,i x MV / TDD
MVB,i = - (TDB,i + TDD) x MV / TDD
또는 다음과 같은 식으로 표현될 수도 있다.
Z = - TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리이며, TDD 는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이고, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 4: B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드일 때
list 1 레퍼런스 프레임의 피일드 1(f1)이 피일드 0(f0) 보다 B 픽쳐에 시간적 거리가 가까우므로 피일드 1(f1)에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다.
만일 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 앞에 존재할 경우, B 프레임의 각 피일드 i에 대한 다이렉트 모드의 list 0, list 1 모션벡터 MVF, MVB 는 다음과 같이 계산되어진다(도 13의 (a)).
MVF =TDB x MV1 / TDD,1
MVB = (TDB -TDD,1) x MV1 / TDD,1
윗 식은 다음과 같이 표현될 수 있다.
Z = TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV1는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
만일 list 1 레퍼런스 프레임의 피일드 1(f1)에 있는 동일 위치의 블록이 시간적으로 뒤에 존재하는 프레임의 피일드를 가리키는 모션벡터를 가짐으로써, 다이렉트 모드의 list 0 레퍼런스 픽쳐가 list 1 레퍼런스 픽쳐보다 시간적으로 뒤에 존재할 경우 다이렉트 모드의 list 0, list 1 모션벡터 MVF, MVB는 다음과 같이 계산되어진다(도 13의 (b)).
MVF = - TDB x MV1 / TDD,1
MVB = - (TDB + TDD,1) x MV1 / TDD,1
또는 다음과 같은 식으로 표현될 수도 있다.
Z = -TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리이며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리이고, MV1는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
[4] 픽쳐 사이의 시간적 거리를 부호가 있는 값으로 표현하여 다이렉트 모드 모션벡터를 연산하는 경우
상기 다이렉트 모드의 list 1 레퍼런스 픽쳐가 B 픽쳐보다 시간적으로 앞에 위치하거나 또는 뒤에 위치하는 경우에, 각 case에 대해 두 가지 종류의 수식이 존재하게 되므로 이를 단순화하기 위한 방법으로써 픽쳐 사이의 시간적 거리를 부호가 있는 값으로 표현하면 다음과 같이 단순화되어 표현될 수 있게 된다.
Case 1: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드일 때
B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 프레임 모드일 경우, 상기 B 픽쳐의 다이렉트 모드의 모션벡터 MVF, MVB는 다음식으로부터 구할 수 있다.
MVF = TDB x MV / TDD
MVB = (TDB - TDD) x MV / TDD
또는
Z = TDB x 256 / TDD MVF = (Z x MV + 128) >> 8
W = Z - 256 MVB = (W x MV + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 list 1 레퍼런스 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV는 상기 다이렉트 모드의 list 1 레퍼런스 픽쳐에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 2: B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드 모드일 때
B 픽쳐의 매크로블록과 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 모두 피일드(field) 모드일 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 구할 수 있다.
MVF,i = TDB,i x MVi / TDD,i
MVB,i = (TDB,i - TDD,i) x MVi / TDD,i
또는
Z = TDB,i x 256 / TDD,i MVF,i = (Z x MVi + 128) >> 8
W = Z - 256 MVB,i = (W x MVi + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 B 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,i는 list 1 레퍼런스 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MVi는 상기 다이렉트 모드의 list 1 레퍼런스 피일드에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 3: B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드일 때
B 픽쳐의 매크로블록이 피일드 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 프레임 모드일 경우, 상기 B 프레임의 각 피일드 i에 대한 다이렉트 모드의 모션벡터 MVF,i, MVB,i는 다음식으로부터 구할 수 있다.
MVF,i = TDB,i x MV / TDD
MVB,i = (TDB,i - TDD) x MV / TDD
또는
Z = TDB,i x 256 / TDD MVF,i = (Z x MV + 128) >> 8
W = Z - 256 MVB,i = (W x MV + 128) >> 8
여기서, TDB,i는 현재 B 피일드와 list 0 레퍼런스 피일드 사이의 시간적 거리로써 B 피일드로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD는 list 1 레퍼런스 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 list 1 레퍼런스 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV는 상기 다이렉트 모드의 list 1 레퍼런스 프레임에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
Case 4: B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드일 때
B 픽쳐의 매크로블록이 프레임 모드이고 list 1 레퍼런스 픽쳐의 동일 위치에 있는 매크로블록이 피일드 모드이며, list 1 레퍼런스 픽쳐가 상기 B 픽쳐보다 시간적으로 뒤에 존재하는 경우, list 1 레퍼런스 프레임의 피일드 0가 피일드 1 보다 B 픽쳐에 시간적 거리가 가까우므로 피일드 0에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다. 따라서 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 list 1 레퍼런스 프레임의 피일드 0 에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용되는 다음식으로부터 구할 수 있다.
MVF = TDB x MV0 / TDD,0
MVB = (TDB - TDD,0) x MV0/ TDD,0
또는
Z = TDB x 256 / TDD,0 MVF = (Z x MV0 + 128) >> 8
W = Z - 256 MVB = (W x MV0 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,0는 list 1 레퍼런스 프레임의 피일드 0과 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 프레임의 피일드 0으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고, list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV0는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 0에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.
만일, list 1 레퍼런스 픽쳐가 상기 B 픽쳐보다 시간적으로 앞에 존재하는 경우, list 1 레퍼런스 프레임의 피일드 1이 피일드 0 보다 B 픽쳐에 시간적 거리가 가까우므로 피일드 1에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용된다. 따라서 상기 B 프레임의 다이렉트 모드의 모션벡터 MVF, MVB는 list 1 레퍼런스 프레임의 피일드 1 에 있는 동일 위치의 블록의 모션정보가 다이렉트 모드의 모션벡터를 구하는데 사용되는 다음식으로부터 구할 수 있다.
MVF =TDB x MV1 / TDD,1
MVB = (TDB -TDD,1) x MV1 / TDD,1
또는
Z = TDB x 256 / TDD,1 MVF = (Z x MV1 + 128) >> 8
W = Z - 256 MVB = (W x MV1 + 128) >> 8
여기서, TDB는 현재 B 프레임과 list 0 레퍼런스 프레임 사이의 시간적 거리로써 B 프레임으로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 프레임으로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, TDD,1는 list 1 레퍼런스 프레임의 피일드 1과 list 0 레퍼런스 피일드 사이의 시간적 거리로써 list 1 레퍼런스 프레임의 피일드 1로부터 계산된 시간적 거리는 양(+)의 부호로 표시되고 list 0 레퍼런스 피일드로부터 계산된 시간적 거리는 음(-)의 부호로 표시되며, MV1는 상기 다이렉트 모드의 list 1 레퍼런스 프레임의 피일드 1에 있는 동일 위치의 블록이 가지고 있는 모션벡터이다.