Merge commit '46c477c2a14b04a63ab11d31003b48fab6146a96' into release/2.2
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 14 Jul 2014 20:26:06 +0000 (22:26 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 14 Jul 2014 20:26:06 +0000 (22:26 +0200)
* commit '46c477c2a14b04a63ab11d31003b48fab6146a96':
  Check mp3 header before calling avpriv_mpegaudio_decode_header().

Conflicts:
libavformat/mp3enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/libmp3lame.c
libavformat/mp3enc.c

Simple merge
@@@ -259,43 -250,20 +259,43 @@@ static int mp3_write_audio_packet(AVFor
  {
      MP3Context  *mp3 = s->priv_data;
  
 -    if (mp3->xing_offset && pkt->size >= 4) {
 -        MPADecodeHeader c;
 +    if (pkt->data && pkt->size >= 4) {
 +        MPADecodeHeader mpah;
 +        int av_unused base;
-         uint32_t head = AV_RB32(pkt->data);
-         if (ff_mpa_check_header(head) < 0) {
+         uint32_t h;
+         h = AV_RB32(pkt->data);
+         if (ff_mpa_check_header(h) == 0) {
 -            avpriv_mpegaudio_decode_header(&c, h);
++            avpriv_mpegaudio_decode_header(&mpah, h);
+             if (!mp3->initial_bitrate)
 -                mp3->initial_bitrate = c.bit_rate;
 -            if ((c.bit_rate == 0) || (mp3->initial_bitrate != c.bit_rate))
++                mp3->initial_bitrate = mpah.bit_rate;
++            if ((mpah.bit_rate == 0) || (mp3->initial_bitrate != mpah.bit_rate))
+                 mp3->has_variable_bitrate = 1;
++        } else {
 +            av_log(s, AV_LOG_WARNING, "Audio packet of size %d (starting with %08X...) "
-                    "is invalid, writing it anyway.\n", pkt->size, head);
-             return ff_raw_write_packet(s, pkt);
++                   "is invalid, writing it anyway.\n", pkt->size, h);
 +        }
-         avpriv_mpegaudio_decode_header(&mpah, head);
-         if (!mp3->initial_bitrate)
-             mp3->initial_bitrate = mpah.bit_rate;
-         if ((mpah.bit_rate == 0) || (mp3->initial_bitrate != mpah.bit_rate))
-             mp3->has_variable_bitrate = 1;
 +
 +#ifdef FILTER_VBR_HEADERS
 +        /* filter out XING and INFO headers. */
 +        base = 4 + xing_offtbl[mpah.lsf == 1][mpah.nb_channels == 1];
 +
 +        if (base + 4 <= pkt->size) {
 +            uint32_t v = AV_RB32(pkt->data + base);
 +
 +            if (MKBETAG('X','i','n','g') == v || MKBETAG('I','n','f','o') == v)
 +                return 0;
          }
  
 -        mp3_xing_add_frame(mp3, pkt);
 +        /* filter out VBRI headers. */
 +        base = 4 + 32;
 +
 +        if (base + 4 <= pkt->size && MKBETAG('V','B','R','I') == AV_RB32(pkt->data + base))
 +            return 0;
 +#endif
 +
 +        if (mp3->xing_offset)
 +            mp3_xing_add_frame(mp3, pkt);
      }
  
      return ff_raw_write_packet(s, pkt);