Mercurial > libavformat.hg
changeset 6429:3e32902d7025 libavformat
move DTS demuxer to its own file
author | aurel |
---|---|
date | Sun, 29 Aug 2010 19:00:40 +0000 |
parents | f53a4103bec4 |
children | d3a51b32b769 |
files | Makefile dtsdec.c raw.c raw.h |
diffstat | 4 files changed, 88 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Sun Aug 29 18:33:39 2010 +0000 +++ b/Makefile Sun Aug 29 19:00:40 2010 +0000 @@ -57,7 +57,7 @@ OBJS-$(CONFIG_DNXHD_DEMUXER) += raw.o OBJS-$(CONFIG_DNXHD_MUXER) += raw.o OBJS-$(CONFIG_DSICIN_DEMUXER) += dsicin.o -OBJS-$(CONFIG_DTS_DEMUXER) += raw.o +OBJS-$(CONFIG_DTS_DEMUXER) += dtsdec.o raw.o OBJS-$(CONFIG_DTS_MUXER) += raw.o OBJS-$(CONFIG_DV_DEMUXER) += dv.o OBJS-$(CONFIG_DV_MUXER) += dvenc.o
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dtsdec.c Sun Aug 29 19:00:40 2010 +0000 @@ -0,0 +1,78 @@ +/* + * RAW DTS demuxer + * Copyright (c) 2008 Benjamin Larsson + * + * 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 "libavcodec/bytestream.h" +#include "avformat.h" +#include "raw.h" + +#define DCA_MARKER_14B_BE 0x1FFFE800 +#define DCA_MARKER_14B_LE 0xFF1F00E8 +#define DCA_MARKER_RAW_BE 0x7FFE8001 +#define DCA_MARKER_RAW_LE 0xFE7F0180 + +static int dts_probe(AVProbeData *p) +{ + const uint8_t *buf, *bufp; + uint32_t state = -1; + int markers[3] = {0}; + int sum, max; + + buf = p->buf; + + for(; buf < (p->buf+p->buf_size)-2; buf+=2) { + bufp = buf; + state = (state << 16) | bytestream_get_be16(&bufp); + + /* regular bitstream */ + if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE) + markers[0]++; + + /* 14 bits big-endian bitstream */ + if (state == DCA_MARKER_14B_BE) + if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0) + markers[1]++; + + /* 14 bits little-endian bitstream */ + if (state == DCA_MARKER_14B_LE) + if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007) + markers[2]++; + } + sum = markers[0] + markers[1] + markers[2]; + max = markers[1] > markers[0]; + max = markers[2] > markers[max] ? 2 : max; + if (markers[max] > 3 && p->buf_size / markers[max] < 32*1024 && + markers[max] * 4 > sum * 3) + return AVPROBE_SCORE_MAX/2+1; + + return 0; +} + +AVInputFormat dts_demuxer = { + "dts", + NULL_IF_CONFIG_SMALL("raw DTS"), + 0, + dts_probe, + ff_raw_audio_read_header, + ff_raw_read_partial_packet, + .flags= AVFMT_GENERIC_INDEX, + .extensions = "dts", + .value = CODEC_ID_DTS, +};
--- a/raw.c Sun Aug 29 18:33:39 2010 +0000 +++ b/raw.c Sun Aug 29 19:00:40 2010 +0000 @@ -233,7 +233,7 @@ return 0; } -static int audio_read_header(AVFormatContext *s, +int ff_raw_audio_read_header(AVFormatContext *s, AVFormatParameters *ap) { AVStream *st = av_new_stream(s, 0); @@ -519,49 +519,6 @@ } #endif -#if CONFIG_DTS_DEMUXER -#define DCA_MARKER_14B_BE 0x1FFFE800 -#define DCA_MARKER_14B_LE 0xFF1F00E8 -#define DCA_MARKER_RAW_BE 0x7FFE8001 -#define DCA_MARKER_RAW_LE 0xFE7F0180 -static int dts_probe(AVProbeData *p) -{ - const uint8_t *buf, *bufp; - uint32_t state = -1; - int markers[3] = {0}; - int sum, max; - - buf = p->buf; - - for(; buf < (p->buf+p->buf_size)-2; buf+=2) { - bufp = buf; - state = (state << 16) | bytestream_get_be16(&bufp); - - /* regular bitstream */ - if (state == DCA_MARKER_RAW_BE || state == DCA_MARKER_RAW_LE) - markers[0]++; - - /* 14 bits big-endian bitstream */ - if (state == DCA_MARKER_14B_BE) - if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0) - markers[1]++; - - /* 14 bits little-endian bitstream */ - if (state == DCA_MARKER_14B_LE) - if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007) - markers[2]++; - } - sum = markers[0] + markers[1] + markers[2]; - max = markers[1] > markers[0]; - max = markers[2] > markers[max] ? 2 : max; - if (markers[max] > 3 && p->buf_size / markers[max] < 32*1024 && - markers[max] * 4 > sum * 3) - return AVPROBE_SCORE_MAX/2+1; - - return 0; -} -#endif - #if CONFIG_DIRAC_DEMUXER static int dirac_probe(AVProbeData *p) { @@ -656,7 +613,7 @@ NULL_IF_CONFIG_SMALL("raw AC-3"), 0, ac3_probe, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "ac3", @@ -735,20 +692,6 @@ }; #endif -#if CONFIG_DTS_DEMUXER -AVInputFormat dts_demuxer = { - "dts", - NULL_IF_CONFIG_SMALL("raw DTS"), - 0, - dts_probe, - audio_read_header, - ff_raw_read_partial_packet, - .flags= AVFMT_GENERIC_INDEX, - .extensions = "dts", - .value = CODEC_ID_DTS, -}; -#endif - #if CONFIG_DTS_MUXER AVOutputFormat dts_muxer = { "dts", @@ -770,7 +713,7 @@ NULL_IF_CONFIG_SMALL("raw E-AC-3"), 0, eac3_probe, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "eac3", @@ -799,7 +742,7 @@ NULL_IF_CONFIG_SMALL("raw GSM"), 0, NULL, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "gsm", @@ -987,7 +930,7 @@ NULL_IF_CONFIG_SMALL("raw MLP"), 0, NULL, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "mlp", @@ -1028,7 +971,7 @@ NULL_IF_CONFIG_SMALL("raw TrueHD"), 0, NULL, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "thd", @@ -1157,7 +1100,7 @@ NULL_IF_CONFIG_SMALL("raw Shorten"), 0, NULL, - audio_read_header, + ff_raw_audio_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "shn",