[FFmpeg-cvslog] avcodec/mpegaudio_parser: fix off by 1 error in bitrate calculation

Michael Niedermayer git at videolan.org
Thu Nov 6 01:20:54 CET 2014


ffmpeg | branch: release/2.4 | Michael Niedermayer <michaelni at gmx.at> | Thu Nov  6 00:04:51 2014 +0100| [c7b64a904ae3f90f3994a4abd599bbc76ca540be] | committer: Carl Eugen Hoyos

avcodec/mpegaudio_parser: fix off by 1 error in bitrate calculation

Fixes Ticket3918

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
(cherry picked from commit 817663897e59f45f60016fa9d3d16e325b803967)

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

 libavcodec/mpegaudio_parser.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavcodec/mpegaudio_parser.c b/libavcodec/mpegaudio_parser.c
index 3d9e946..79dbf63 100644
--- a/libavcodec/mpegaudio_parser.c
+++ b/libavcodec/mpegaudio_parser.c
@@ -73,20 +73,21 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
                     if (i > 4)
                         s->header_count = -2;
                 } else {
+                    int header_threshold = avctx->codec_id != AV_CODEC_ID_NONE && avctx->codec_id != codec_id;
                     if((state&SAME_HEADER_MASK) != (s->header&SAME_HEADER_MASK) && s->header)
                         s->header_count= -3;
                     s->header= state;
                     s->header_count++;
                     s->frame_size = ret-4;
 
-                    if (s->header_count > 0 + (avctx->codec_id != AV_CODEC_ID_NONE && avctx->codec_id != codec_id)) {
+                    if (s->header_count > header_threshold) {
                         avctx->sample_rate= sr;
                         avctx->channels   = channels;
                         s1->duration      = frame_size;
                         avctx->codec_id   = codec_id;
                         if (s->no_bitrate || !avctx->bit_rate) {
                             s->no_bitrate = 1;
-                            avctx->bit_rate += (bit_rate - avctx->bit_rate) / s->header_count;
+                            avctx->bit_rate += (bit_rate - avctx->bit_rate) / (s->header_count - header_threshold);
                         }
                     }
                     break;



More information about the ffmpeg-cvslog mailing list