[Ffmpeg-devel] Mpeg-4 playback: issues with CBR padding

Michael Niedermayer michaelni
Wed Nov 8 16:53:41 CET 2006


Hi

On Wed, Nov 08, 2006 at 01:41:43PM -0000, M?ns Rullg?rd wrote:
> 
> Michael Niedermayer said:
> > Hi
> >
> > On Wed, Nov 08, 2006 at 12:04:12PM +0100, Mathieu Monnier wrote:
> >> Hi,
> >>
> >> It's a late answer, but after rechecking the ISO/IEC standard, I may
> >> disagree with that :
> >> >i dont think that stuffing macroblocks are allowed _after_ all macroblocks,
> >> >the mpeg4 syntax places the stuffing mb in the mb type decoding loop and
> >> >it seems like this loop must terminate with decoding a non stuffing mb
> >> >which cannot happen after all mbs, that is my interpretation of the spec
> >> >...
> >> >
> >> There are two cases :
> >>  - the decoding loop of the macroblocks is a gob loop, in which case
> >> the statement is true ( since the pseudo code is : "for ( i=0; i <
> >> nMacroblock; i++ ) macroblock();" )
> >>  - the decoding loop of the macroblocks is in a
> >> combined_motion_shape_texture(), in which case the pseudo code is : "do
> >> { macroblock(); } while ( !resync_marker && !start_code );". In that
> >> case, padding after the last macroblock seems allowed, unless I
> >> misinterpreted something else ?
> >
> > combined_motion_shape_texture() {
> >    do{
> >        macroblock()
> >    } while (nextbits_bytealigned() != resync_marker && nextbits_bytealigned()
> >             != "000 0000 0000 0000 0000 0000")
> > }
> >
> > and in macroblock() i think you end up at
> >
> > do{
> >     if (vop_coding_type != "I" && !(sprite_enable == "s
> >           && sprite_transmit_mode == "piece"))
> >           not_coded
> >     if (!not_coded || vop_coding_type == "I"
> >           || (vop_coding_type == "S"
> >           && low_latency_sprite_enable
> >           && sprite_transmit_mode == "piece"))
> >           mcbpc
> > } while(!(not_coded || derived_mb_type != "stuffing"))
> >
> > and the only way i see to get out of this loop is with a non stuffing
> > macroblock so there has to be a non stuffing mb at the end, or i
> > missed something
> 
> That loop is inside an if(video_object_layer_shape != "rectangular").  The else
> case is the same but without the loop.

indeed, ive missed that, ill fix lavc to accpet mb-stuffing at the end too
without any -bug command line options

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

In the past you could go to a library and read, borrow or copy any book
Today you'd get arrested for mere telling someone where the library is




More information about the ffmpeg-devel mailing list