[XviD-devel] B frame help
Christoph Lampert
chl at math.uni-bonn.de
Sat Feb 8 01:14:20 CET 2003
On Sat, 8 Feb 2003, Zoltan Kocsi wrote:
> > * co-located block skipping semantics
>
> Well, with that I have also some problems.
> According to the standard MB-s that were not encoded in the last P
If "last"="last in encoding order", then yes.
If "last"="last in viewing order", then no, then it has to be "next".
> frame should be skipped in all B-s that have that P as backward
> reference.
>
> I have to apologise for the long ASCII art, but here is a testcase.
> My test image is a 16x16 square moving by 8,8 in every frame. In
> the ASCII a macroblock is 4x4 chars.
>
> The frame sequence is I1 b0 P3 B2 P5 B4 I7 B6 P9 B8 ... where b0 is
> thrown away.
>
> ####.... I1
> ####....
> ####....
> ####....
> ........
> ........
> ........
> ........
>
> ........ P3, the square moved 16 pixels
> ........
> ........
> ........
> ....####
> ....####
> ....####
> ....####
>
> ........ The B between the two. The top right and bottom
> ........ left of the square are missing because those
> ..##.... macroblocks were not encoded in the P and hence
> ..##.... they are not encoded in the B either, even though
> ....##.. they changed.
> ....##..
> ........
> ........
You're right on this one. MPEG-4 sucks, doesn't it?
There are two known solutions:
1) Do not use not_coded blocks for co-located blocks if intermediate
blocks should not be skipped (computationally expensive and also ugly).
2) Use S(GMC)-VOPs instead of P-VOPs, but most likely you don't support
those.
> In addition, the standard (and the XviD code as well), explicitly refers
> to the last P frame and not the last reference frame.
_That_ I believe is either a mistake in the standard or in your
interpretation. B-frame encoding usually speaks about "co-located" block,
and that is either in backwards P- or I-frame, but never in the past and
never further in the future.
gruel
More information about the XviD-devel
mailing list