[FFmpeg-devel] [PATCH] Incorrect aspect ratio in MPEG2 essence

Erik Johansson erik.c.johansson at gmail.com
Tue Dec 9 10:21:01 CET 2014


On Thu, Dec 4, 2014 at 5:27 PM, Michael Niedermayer <michaelni at gmx.at> wrote:
>
> On Thu, Dec 04, 2014 at 01:11:08PM +0100, Erik Johansson wrote:
> > Hi,
> >
> > Setting setting sample_aspect_ratio in AVContext does not produce the
> > expected aspect index value in the MPEG2 sequence header.
> >
> > Problem seems to be around line 263 in mpeg12enc.c. Setting the
> > sample_aspect_ratio to 16/9 leads the current error minimization
> > routine to determine that
> >
> > error -= (1LL<<32)*(221/100)*(1080/1920)
> >
> > is smaller than
> >
> > error -= (1LL<<32)*(16/9)*(1080/1920)
> >
> > thus picking aspect index value 4 rather than 3.
> >
> > Proposed fix in attached patch.
>
> how can this bug be reproduced ?
>

The problem was detected by a client using 'Baton', file based QC
software from Interra Systems.

In summary, we create the MPEG2 essence as follows:

m_avcodec = avcodec_find_encoder(CODEC_ID_MPEG2VIDEO)
m_avcontext = avcodec_alloc_context3(m_avcodec)
m_avcontext->sample_aspect_ratio = (AVRational){16,9}
m_avcontext->width = 1920
m_avcontext->width = 1080
avcodec_encode_video2(m_avcontext, &pkt, m_avframe_yuv, &got_packet)

The problem can be seen on subsequent decode by putting a breakpoint
in libavcodec/mpeg12dec.c:mpeg_decode_postinit().

s->aspect_ratio_info will have the value 4. ff_mpeg2_aspect[4] which
is {221,100}, will then be used in the calculations that follow,
rather than the expected {16,9}.

I could not immediately see a way to illustrate the issue using the
ffmpeg CLI, sorry.

// Erik


More information about the ffmpeg-devel mailing list