[FFmpeg-cvslog] mp3enc: fix playback with mp3 encoded files on some devices.

Clément Bœsch git at videolan.org
Mon Jan 2 15:35:02 CET 2012


ffmpeg | branch: master | Clément Bœsch <clement.boesch at smartjog.com> | Mon Jan  2 09:39:11 2012 +0100| [e1a8164d62fb8d1943b3f7a66500f0315ca8fe76] | committer: Clément Bœsch

mp3enc: fix playback with mp3 encoded files on some devices.

This partially reverts 1fea432b; header variable needs to keep its value
in case it triggers "if (needed <= c.frame_size)".

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e1a8164d62fb8d1943b3f7a66500f0315ca8fe76
---

 libavformat/mp3enc.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c
index 42fc39d..8d82452 100644
--- a/libavformat/mp3enc.c
+++ b/libavformat/mp3enc.c
@@ -160,7 +160,7 @@ static int mp3_write_xing(AVFormatContext *s)
     int              best_bitrate_idx;
     int              best_bitrate_error= INT_MAX;
     int64_t          xing_offset;
-    int32_t          header;
+    int32_t          header, mask;
     MPADecodeHeader  c;
     int              srate_idx, i, channels;
     int              needed;
@@ -200,8 +200,9 @@ static int mp3_write_xing(AVFormatContext *s)
     for (bitrate_idx= best_bitrate_idx;; bitrate_idx++) {
         if (15 == bitrate_idx)
             return -1;
-
-        avpriv_mpegaudio_decode_header(&c, header | (bitrate_idx << (4+8)));
+        mask = bitrate_idx << (4+8);
+        header |= mask;
+        avpriv_mpegaudio_decode_header(&c, header);
         xing_offset=xing_offtbl[c.lsf == 1][c.nb_channels == 1];
         needed = 4              // header
                + xing_offset
@@ -213,6 +214,7 @@ static int mp3_write_xing(AVFormatContext *s)
 
         if (needed <= c.frame_size)
             break;
+        header &= ~mask;
     }
 
     avio_wb32(s->pb, header);



More information about the ffmpeg-cvslog mailing list