Merge commit 'f66d0c57b13c1b7102e1e353237af178960dd3c5'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 3 May 2014 21:53:52 +0000 (23:53 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 3 May 2014 22:19:35 +0000 (00:19 +0200)
* commit 'f66d0c57b13c1b7102e1e353237af178960dd3c5':
  latm: Add a probe function

Conflicts:
libavformat/rawdec.c

See: 47818b2a675cbb2a2fe0066c0657f3169047dd4d
See: 097f668047c8dd6308217c244075b1f97d496116
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/loasdec.c
libavformat/rawdec.c

index 05ef0fe,0000000..c41809b
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,94 @@@
-     for(; buf < end; buf= buf2+1) {
 +/*
 + * LOAS AudioSyncStream demuxer
 + * Copyright (c) 2008 Michael Niedermayer <michaelni@gmx.at>
 + *
 + * This file is part of FFmpeg.
 + *
 + * FFmpeg is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation; either
 + * version 2.1 of the License, or (at your option) any later version.
 + *
 + * FFmpeg is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with FFmpeg; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 + */
 +
 +#include "libavutil/intreadwrite.h"
 +#include "libavutil/internal.h"
 +#include "avformat.h"
 +#include "internal.h"
 +#include "rawdec.h"
 +
++#define LOAS_SYNC_WORD 0x2b7
++
 +static int loas_probe(AVProbeData *p)
 +{
 +    int max_frames = 0, first_frames = 0;
 +    int fsize, frames;
 +    const uint8_t *buf0 = p->buf;
 +    const uint8_t *buf2;
 +    const uint8_t *buf;
 +    const uint8_t *end = buf0 + p->buf_size - 3;
 +    buf = buf0;
 +
-         for(frames = 0; buf2 < end; frames++) {
++    for (; buf < end; buf = buf2 + 1) {
 +        buf2 = buf;
 +
-             if((header >> 13) != 0x2B7)
++        for (frames = 0; buf2 < end; frames++) {
 +            uint32_t header = AV_RB24(buf2);
-             if(fsize < 7)
++            if ((header >> 13) != LOAS_SYNC_WORD)
 +                break;
 +            fsize = (header & 0x1FFF) + 3;
-         if(buf == buf0)
-             first_frames= frames;
++            if (fsize < 7)
 +                break;
 +            fsize = FFMIN(fsize, end - buf2);
 +            buf2 += fsize;
 +        }
 +        max_frames = FFMAX(max_frames, frames);
-     if   (first_frames>=3) return AVPROBE_SCORE_EXTENSION+1;
-     else if(max_frames>100)return AVPROBE_SCORE_EXTENSION;
-     else if(max_frames>=3) return AVPROBE_SCORE_EXTENSION / 2;
-     else                   return 0;
++        if (buf == buf0)
++            first_frames = frames;
 +    }
++
++    if (first_frames >= 3)
++        return AVPROBE_SCORE_EXTENSION + 1;
++    else if (max_frames > 100)
++        return AVPROBE_SCORE_EXTENSION;
++    else if (max_frames >= 3)
++        return AVPROBE_SCORE_EXTENSION / 2;
++    else
++        return 0;
 +}
 +
 +static int loas_read_header(AVFormatContext *s)
 +{
 +    AVStream *st;
 +
 +    st = avformat_new_stream(s, NULL);
 +    if (!st)
 +        return AVERROR(ENOMEM);
 +
 +    st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
 +    st->codec->codec_id = s->iformat->raw_codec_id;
 +    st->need_parsing = AVSTREAM_PARSE_FULL_RAW;
 +
 +    //LCM of all possible AAC sample rates
 +    avpriv_set_pts_info(st, 64, 1, 28224000);
 +
 +    return 0;
 +}
 +
 +AVInputFormat ff_loas_demuxer = {
 +    .name           = "loas",
 +    .long_name      = NULL_IF_CONFIG_SMALL("LOAS AudioSyncStream"),
 +    .read_probe     = loas_probe,
 +    .read_header    = loas_read_header,
 +    .read_packet    = ff_raw_read_partial_packet,
 +    .flags= AVFMT_GENERIC_INDEX,
 +    .raw_codec_id = AV_CODEC_ID_AAC_LATM,
 +};
@@@ -27,7 -27,7 +27,8 @@@
  #include "libavutil/opt.h"
  #include "libavutil/parseutils.h"
  #include "libavutil/pixdesc.h"
 +#include "libavutil/avassert.h"
+ #include "libavutil/intreadwrite.h"
  
  #define RAW_PACKET_SIZE 1024
  
@@@ -110,17 -109,58 +111,18 @@@ const AVOption ff_rawvideo_options[] = 
      { NULL },
  };
  
 -#if CONFIG_LATM_DEMUXER
 -
 -#define LOAS_SYNC_WORD 0x2b7
 -
 -static int latm_read_probe(AVProbeData *p)
 -{
 -    int max_frames = 0, first_frames = 0;
 -    int fsize, frames;
 -    uint8_t *buf0 = p->buf;
 -    uint8_t *buf2;
 -    uint8_t *buf;
 -    uint8_t *end = buf0 + p->buf_size - 3;
 -
 -    buf = buf0;
 -
 -    for (; buf < end; buf = buf2 + 1) {
 -        buf2 = buf;
 -
 -        for (frames = 0; buf2 < end; frames++) {
 -            uint32_t header = AV_RB24(buf2);
 -            if ((header >> 13) != LOAS_SYNC_WORD) {
 -                if (buf != buf0) {
 -                    // Found something that isn't a LOAS header, starting
 -                    // from a position other than the start of the buffer.
 -                    // Discard the count we've accumulated so far since it
 -                    // probably was a false positive.
 -                    frames = 0;
 -                }
 -                break;
 -            }
 -            fsize = (header & 0x1FFF) + 3;
 -            if (fsize < 7)
 -                break;
 -            buf2 += fsize;
 -        }
 -        max_frames = FFMAX(max_frames, frames);
 -        if (buf == buf0)
 -            first_frames = frames;
 -    }
 +#if CONFIG_DATA_DEMUXER
 +AVInputFormat ff_data_demuxer = {
 +    .name           = "data",
 +    .long_name      = NULL_IF_CONFIG_SMALL("raw data"),
 +    .read_header    = ff_raw_data_read_header,
 +    .read_packet    = ff_raw_read_partial_packet,
 +    .raw_codec_id   = AV_CODEC_ID_NONE,
 +};
 +#endif
  
 -    if (first_frames >= 3)
 -        return AVPROBE_SCORE_EXTENSION + 1;
 -    else if (max_frames > 100)
 -        return AVPROBE_SCORE_EXTENSION;
 -    else if (max_frames >= 3)
 -        return AVPROBE_SCORE_EXTENSION / 2;
 -    else if (max_frames >= 1)
 -        return 1;
 -    else
 -        return 0;
 -}
 +#if CONFIG_LATM_DEMUXER
  AVInputFormat ff_latm_demuxer = {
      .name           = "latm",
      .long_name      = NULL_IF_CONFIG_SMALL("raw LOAS/LATM"),