[FFmpeg-trac] #1175(avformat:new): mpeg2 (PS) writes bad bitrate/muxrate

FFmpeg trac at avcodec.org
Sat Apr 7 02:41:40 CEST 2012


#1175: mpeg2 (PS) writes bad bitrate/muxrate
-------------------------------------+-------------------------------------
             Reporter:  tracey_pooh  |                     Type:  defect
               Status:  new          |                 Priority:  critical
            Component:  avformat     |                  Version:  git-
             Keywords:  mpeg2        |  master
  header bug                         |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 example way to show the bug:

 /tmp/f/ffmpeg/ffmpeg -y -i  ANYVIDEO  -target ntsc-dvd  -frames 1
 xxx.mpg;
 hexdump -C -s10 -n3 xxx.mpg;

 buggy:
 0000000a  0c 4e 03

 should be (was prior to nov2011):
 0000000a  01 89 c3


 the correct value, which is the 22 bits of the 3 bytes above, * 400
 (gdb) p (0x0189c3 >> 2) * 400
 $17 = 10080000
 is the value that the "-muxrate" ffmpeg param defaults to unless
 overridden
 and is what "-target ntsc-dvd" will also set to.
 so the ffmpeg param translating into the internal storage of mpegenc.c
 is off by 400.


 You can see the bug a little more obviously because the "put_bits()" of 22
 bits
 int value in current state is 24 bits 8-)


 a sample fix/patch:


 diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
 index 0df0149..1e9e2ed 100644
 --- a/libavformat/mpegenc.c
 +++ b/libavformat/mpegenc.c
 @@ -423,7 +423,10 @@ static int mpeg_mux_init(AVFormatContext *ctx)
              video_bitrate += codec_rate;
      }

 -    if (!s->mux_rate) {
 +    if (s->mux_rate) {
 +        s->mux_rate /= 400; // internal param is in units of 50 bytes
 +    }
 +    else {
          /* we increase slightly the bitrate to take into account the
             headers. XXX: compute it exactly */
          bitrate += bitrate / 20;

-- 
Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/1175>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list