Merge commit '72d658766e6ccf198317dffd6499c5e288847a1c'
authorHendrik Leppkes <h.leppkes@gmail.com>
Fri, 1 Jan 2016 15:57:40 +0000 (16:57 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Fri, 1 Jan 2016 15:57:40 +0000 (16:57 +0100)
* commit '72d658766e6ccf198317dffd6499c5e288847a1c':
  mp3dec: replace avpriv_mpa_decode_header with avpriv_mpegaudio_decode_header

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavformat/mp3dec.c

@@@ -64,13 -53,9 +64,9 @@@ static int check(AVIOContext *pb, int64
  static int mp3_read_probe(AVProbeData *p)
  {
      int max_frames, first_frames = 0;
-     int fsize, frames;
 -    int frames, ret;
++    int fsize, frames, ret;
      uint32_t header;
 -    uint8_t *buf, *buf0, *buf2, *end;
 +    const uint8_t *buf, *buf0, *buf2, *end;
-     AVCodecContext *avctx = avcodec_alloc_context3(NULL);
-     if (!avctx)
-         return AVERROR(ENOMEM);
  
      buf0 = p->buf;
      end = p->buf + p->buf_size - sizeof(uint32_t);
  
      for(; buf < end; buf= buf2+1) {
          buf2 = buf;
 -
          for(frames = 0; buf2 < end; frames++) {
-             int dummy;
+             MPADecodeHeader h;
              header = AV_RB32(buf2);
-             fsize = avpriv_mpa_decode_header(avctx, header,
-                                              &dummy, &dummy, &dummy, &dummy);
-             if(fsize < 0)
+             ret = avpriv_mpegaudio_decode_header(&h, header);
+             if (ret != 0)
                  break;
-             buf2 += fsize;
+             buf2 += h.frame_size;
          }
          max_frames = FFMAX(max_frames, frames);
          if(buf == buf0)
              first_frames= frames;
      }
-     avcodec_free_context(&avctx);
      // keep this in sync with ac3 probe, both need to avoid
      // issues with MPEG-files!
 -    if (first_frames >= 10)
 -        return AVPROBE_SCORE_EXTENSION + 5;
 -    if (first_frames >= 4)
 -        return AVPROBE_SCORE_EXTENSION + 1;
 -
 -    if (max_frames) {
 -        int pes = 0, i;
 -        unsigned int code = -1;
 -
 -#define VIDEO_ID 0x000001e0
 -#define AUDIO_ID 0x000001c0
 -        /* do a search for mpegps headers to be able to properly bias
 -         * towards mpegps if we detect this stream as both. */
 -        for (i = 0; i<p->buf_size; i++) {
 -            code = (code << 8) + p->buf[i];
 -            if ((code & 0xffffff00) == 0x100) {
 -                if     ((code & 0x1f0) == VIDEO_ID) pes++;
 -                else if((code & 0x1e0) == AUDIO_ID) pes++;
 -            }
 -        }
 -
 -        if (pes)
 -            max_frames = (max_frames + pes - 1) / pes;
 -    }
 -    if      (max_frames >  500) return AVPROBE_SCORE_EXTENSION;
 -    else if (max_frames >= 4)   return AVPROBE_SCORE_EXTENSION / 2;
 -    else if (max_frames >= 1)   return 1;
 -    else                        return 0;
 +    if   (first_frames>=7) return AVPROBE_SCORE_EXTENSION + 1;
 +    else if(max_frames>200)return AVPROBE_SCORE_EXTENSION;
 +    else if(max_frames>=4 && max_frames >= p->buf_size/10000) return AVPROBE_SCORE_EXTENSION / 2;
 +    else if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC) && 2*ff_id3v2_tag_len(buf0) >= p->buf_size)
 +                           return p->buf_size < PROBE_BUF_MAX ? AVPROBE_SCORE_EXTENSION / 4 : AVPROBE_SCORE_EXTENSION - 2;
 +    else if(max_frames>=1 && max_frames >= p->buf_size/10000) return 1;
 +    else                   return 0;
  //mpegps_mp3_unrecognized_format.mpg has max_frames=3
  }