From e94204dfd88b80c21f8756ea354dc12e1c4b206e Mon Sep 17 00:00:00 2001 From: Aurelien Jacobs Date: Mon, 30 Aug 2010 21:17:34 +0000 Subject: move pcm demuxers to their own file Originally committed as revision 24993 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/Makefile | 60 ++++++++++++------------- libavformat/aea.c | 2 +- libavformat/aiffdec.c | 2 +- libavformat/au.c | 2 +- libavformat/mmf.c | 2 +- libavformat/oma.c | 2 +- libavformat/pcm.c | 55 +++++++++++++++++++++++ libavformat/pcm.h | 30 +++++++++++++ libavformat/pcmdec.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ libavformat/raw.c | 82 ++------------------------------- libavformat/raw.h | 5 +-- libavformat/rsodec.c | 2 +- libavformat/sol.c | 2 +- libavformat/soxdec.c | 2 +- libavformat/wav.c | 2 +- 15 files changed, 251 insertions(+), 121 deletions(-) create mode 100644 libavformat/pcm.c create mode 100644 libavformat/pcm.h create mode 100644 libavformat/pcmdec.c (limited to 'libavformat') diff --git a/libavformat/Makefile b/libavformat/Makefile index a7598d9a9b..66718425f4 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -21,8 +21,8 @@ OBJS-$(CONFIG_AAC_DEMUXER) += aacdec.o id3v1.o id3v2.o raw.o OBJS-$(CONFIG_AC3_DEMUXER) += ac3dec.o raw.o OBJS-$(CONFIG_AC3_MUXER) += raw.o OBJS-$(CONFIG_ADTS_MUXER) += adtsenc.o -OBJS-$(CONFIG_AEA_DEMUXER) += aea.o raw.o -OBJS-$(CONFIG_AIFF_DEMUXER) += aiffdec.o riff.o raw.o +OBJS-$(CONFIG_AEA_DEMUXER) += aea.o pcm.o +OBJS-$(CONFIG_AIFF_DEMUXER) += aiffdec.o riff.o pcm.o OBJS-$(CONFIG_AIFF_MUXER) += aiffenc.o riff.o OBJS-$(CONFIG_AMR_DEMUXER) += amr.o OBJS-$(CONFIG_AMR_MUXER) += amr.o @@ -35,7 +35,7 @@ OBJS-$(CONFIG_ASF_DEMUXER) += asfdec.o asf.o asfcrypt.o \ OBJS-$(CONFIG_ASF_MUXER) += asfenc.o asf.o riff.o OBJS-$(CONFIG_ASS_DEMUXER) += assdec.o OBJS-$(CONFIG_ASS_MUXER) += assenc.o -OBJS-$(CONFIG_AU_DEMUXER) += au.o raw.o +OBJS-$(CONFIG_AU_DEMUXER) += au.o pcm.o OBJS-$(CONFIG_AU_MUXER) += au.o OBJS-$(CONFIG_AVI_DEMUXER) += avidec.o riff.o avi.o OBJS-$(CONFIG_AVI_MUXER) += avienc.o riff.o avi.o @@ -116,7 +116,7 @@ OBJS-$(CONFIG_MJPEG_MUXER) += raw.o OBJS-$(CONFIG_MLP_DEMUXER) += raw.o OBJS-$(CONFIG_MLP_MUXER) += raw.o OBJS-$(CONFIG_MM_DEMUXER) += mm.o -OBJS-$(CONFIG_MMF_DEMUXER) += mmf.o raw.o +OBJS-$(CONFIG_MMF_DEMUXER) += mmf.o pcm.o OBJS-$(CONFIG_MMF_MUXER) += mmf.o riff.o OBJS-$(CONFIG_MOV_DEMUXER) += mov.o riff.o isom.o OBJS-$(CONFIG_MOV_MUXER) += movenc.o riff.o isom.o avc.o movenchint.o @@ -160,46 +160,46 @@ OBJS-$(CONFIG_OGG_DEMUXER) += oggdec.o \ vorbiscomment.o OBJS-$(CONFIG_OGG_MUXER) += oggenc.o \ vorbiscomment.o -OBJS-$(CONFIG_OMA_DEMUXER) += oma.o raw.o id3v2.o id3v1.o -OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += raw.o +OBJS-$(CONFIG_OMA_DEMUXER) += oma.o pcm.o id3v2.o id3v1.o +OBJS-$(CONFIG_PCM_ALAW_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_ALAW_MUXER) += raw.o -OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_F32BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_F32BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_F32LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_F32LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_F64BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_F64BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_F64LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_F64LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_MULAW_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_MULAW_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S16BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S16BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S16LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S16LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S24BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S24BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S24LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S24LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S32BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S32BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S32LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S32LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_S8_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_S8_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_S8_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U16BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U16BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U16LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U16LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U24BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U24BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U24LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U24LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U32BE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U32BE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U32LE_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U32LE_MUXER) += raw.o -OBJS-$(CONFIG_PCM_U8_DEMUXER) += raw.o +OBJS-$(CONFIG_PCM_U8_DEMUXER) += pcmdec.o pcm.o raw.o OBJS-$(CONFIG_PCM_U8_MUXER) += raw.o OBJS-$(CONFIG_PVA_DEMUXER) += pva.o OBJS-$(CONFIG_QCP_DEMUXER) += qcp.o @@ -211,7 +211,7 @@ OBJS-$(CONFIG_RM_DEMUXER) += rmdec.o rm.o OBJS-$(CONFIG_RM_MUXER) += rmenc.o rm.o OBJS-$(CONFIG_ROQ_DEMUXER) += idroqdec.o OBJS-$(CONFIG_ROQ_MUXER) += idroqenc.o raw.o -OBJS-$(CONFIG_RSO_DEMUXER) += rsodec.o rso.o raw.o +OBJS-$(CONFIG_RSO_DEMUXER) += rsodec.o rso.o pcm.o OBJS-$(CONFIG_RSO_MUXER) += rsoenc.o rso.o OBJS-$(CONFIG_RPL_DEMUXER) += rpl.o OBJS-$(CONFIG_RTP_MUXER) += rtp.o \ @@ -244,8 +244,8 @@ OBJS-$(CONFIG_SEGAFILM_DEMUXER) += segafilm.o OBJS-$(CONFIG_SHORTEN_DEMUXER) += raw.o OBJS-$(CONFIG_SIFF_DEMUXER) += siff.o OBJS-$(CONFIG_SMACKER_DEMUXER) += smacker.o -OBJS-$(CONFIG_SOL_DEMUXER) += sol.o raw.o -OBJS-$(CONFIG_SOX_DEMUXER) += soxdec.o raw.o +OBJS-$(CONFIG_SOL_DEMUXER) += sol.o pcm.o +OBJS-$(CONFIG_SOX_DEMUXER) += soxdec.o pcm.o OBJS-$(CONFIG_SOX_MUXER) += soxenc.o OBJS-$(CONFIG_SPDIF_MUXER) += spdif.o OBJS-$(CONFIG_SRT_DEMUXER) += srtdec.o @@ -268,8 +268,8 @@ OBJS-$(CONFIG_VMD_DEMUXER) += sierravmd.o OBJS-$(CONFIG_VOC_DEMUXER) += vocdec.o voc.o OBJS-$(CONFIG_VOC_MUXER) += vocenc.o voc.o OBJS-$(CONFIG_VQF_DEMUXER) += vqf.o -OBJS-$(CONFIG_W64_DEMUXER) += wav.o riff.o raw.o -OBJS-$(CONFIG_WAV_DEMUXER) += wav.o riff.o raw.o +OBJS-$(CONFIG_W64_DEMUXER) += wav.o riff.o pcm.o +OBJS-$(CONFIG_WAV_DEMUXER) += wav.o riff.o pcm.o OBJS-$(CONFIG_WAV_MUXER) += wav.o riff.o OBJS-$(CONFIG_WC3_DEMUXER) += wc3movie.o OBJS-$(CONFIG_WEBM_MUXER) += matroskaenc.o matroska.o \ diff --git a/libavformat/aea.c b/libavformat/aea.c index 518995c4b0..2c4f471b20 100644 --- a/libavformat/aea.c +++ b/libavformat/aea.c @@ -21,7 +21,7 @@ */ #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "libavutil/intreadwrite.h" #define AT1_SU_SIZE 212 diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index f72af00f4c..255caa3a5b 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -21,7 +21,7 @@ #include "libavutil/intfloat_readwrite.h" #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "aiff.h" #define AIFF 0 diff --git a/libavformat/au.c b/libavformat/au.c index a9c7d03c57..cb1c31dc18 100644 --- a/libavformat/au.c +++ b/libavformat/au.c @@ -28,7 +28,7 @@ */ #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "riff.h" /* if we don't know the size in advance */ diff --git a/libavformat/mmf.c b/libavformat/mmf.c index 540407f659..85b23a3a6a 100644 --- a/libavformat/mmf.c +++ b/libavformat/mmf.c @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "riff.h" typedef struct { diff --git a/libavformat/oma.c b/libavformat/oma.c index a47fde02f9..cdf11067e7 100644 --- a/libavformat/oma.c +++ b/libavformat/oma.c @@ -45,7 +45,7 @@ #include "avformat.h" #include "libavutil/intreadwrite.h" -#include "raw.h" +#include "pcm.h" #include "riff.h" #include "id3v2.h" diff --git a/libavformat/pcm.c b/libavformat/pcm.c new file mode 100644 index 0000000000..5de23af1cb --- /dev/null +++ b/libavformat/pcm.c @@ -0,0 +1,55 @@ +/* + * PCM common functions + * Copyright (c) 2003 Fabrice Bellard + * + * 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 "avformat.h" +#include "pcm.h" + +int pcm_read_seek(AVFormatContext *s, + int stream_index, int64_t timestamp, int flags) +{ + AVStream *st; + int block_align, byte_rate; + int64_t pos, ret; + + st = s->streams[0]; + + block_align = st->codec->block_align ? st->codec->block_align : + (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3; + byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 : + block_align * st->codec->sample_rate; + + if (block_align <= 0 || byte_rate <= 0) + return -1; + if (timestamp < 0) timestamp = 0; + + /* compute the position by aligning it to block_align */ + pos = av_rescale_rnd(timestamp * byte_rate, + st->time_base.num, + st->time_base.den * (int64_t)block_align, + (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP); + pos *= block_align; + + /* recompute exact position */ + st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num); + if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0) + return ret; + return 0; +} diff --git a/libavformat/pcm.h b/libavformat/pcm.h new file mode 100644 index 0000000000..7c0b7d70aa --- /dev/null +++ b/libavformat/pcm.h @@ -0,0 +1,30 @@ +/* + * PCM common functions + * Copyright (C) 2007 Aurelien Jacobs + * + * 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 + */ + +#ifndef AVFORMAT_PCM_H +#define AVFORMAT_PCM_H + +#include "avformat.h" + +int pcm_read_seek(AVFormatContext *s, + int stream_index, int64_t timestamp, int flags); + +#endif /* AVFORMAT_PCM_H */ diff --git a/libavformat/pcmdec.c b/libavformat/pcmdec.c new file mode 100644 index 0000000000..b657fb680b --- /dev/null +++ b/libavformat/pcmdec.c @@ -0,0 +1,122 @@ +/* + * RAW PCM demuxers + * Copyright (c) 2002 Fabrice Bellard + * + * 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 "avformat.h" +#include "raw.h" +#include "pcm.h" + +#define RAW_SAMPLES 1024 + +static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + int ret, size, bps; + // AVStream *st = s->streams[0]; + + size= RAW_SAMPLES*s->streams[0]->codec->block_align; + + ret= av_get_packet(s->pb, pkt, size); + + pkt->stream_index = 0; + if (ret < 0) + return ret; + + bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id); + assert(bps); // if false there IS a bug elsewhere (NOT in this function) + pkt->dts= + pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels); + + return ret; +} + +#define PCMDEF(name, long_name, ext, codec) \ +AVInputFormat pcm_ ## name ## _demuxer = {\ + #name,\ + NULL_IF_CONFIG_SMALL(long_name),\ + 0,\ + NULL,\ + ff_raw_read_header,\ + raw_read_packet,\ + NULL,\ + pcm_read_seek,\ + .flags= AVFMT_GENERIC_INDEX,\ + .extensions = ext,\ + .value = codec,\ +}; + +PCMDEF(f64be, "PCM 64 bit floating-point big-endian format", + NULL, CODEC_ID_PCM_F64BE) + +PCMDEF(f64le, "PCM 64 bit floating-point little-endian format", + NULL, CODEC_ID_PCM_F64LE) + +PCMDEF(f32be, "PCM 32 bit floating-point big-endian format", + NULL, CODEC_ID_PCM_F32BE) + +PCMDEF(f32le, "PCM 32 bit floating-point little-endian format", + NULL, CODEC_ID_PCM_F32LE) + +PCMDEF(s32be, "PCM signed 32 bit big-endian format", + NULL, CODEC_ID_PCM_S32BE) + +PCMDEF(s32le, "PCM signed 32 bit little-endian format", + NULL, CODEC_ID_PCM_S32LE) + +PCMDEF(s24be, "PCM signed 24 bit big-endian format", + NULL, CODEC_ID_PCM_S24BE) + +PCMDEF(s24le, "PCM signed 24 bit little-endian format", + NULL, CODEC_ID_PCM_S24LE) + +PCMDEF(s16be, "PCM signed 16 bit big-endian format", + AV_NE("sw", NULL), CODEC_ID_PCM_S16BE) + +PCMDEF(s16le, "PCM signed 16 bit little-endian format", + AV_NE(NULL, "sw"), CODEC_ID_PCM_S16LE) + +PCMDEF(s8, "PCM signed 8 bit format", + "sb", CODEC_ID_PCM_S8) + +PCMDEF(u32be, "PCM unsigned 32 bit big-endian format", + NULL, CODEC_ID_PCM_U32BE) + +PCMDEF(u32le, "PCM unsigned 32 bit little-endian format", + NULL, CODEC_ID_PCM_U32LE) + +PCMDEF(u24be, "PCM unsigned 24 bit big-endian format", + NULL, CODEC_ID_PCM_U24BE) + +PCMDEF(u24le, "PCM unsigned 24 bit little-endian format", + NULL, CODEC_ID_PCM_U24LE) + +PCMDEF(u16be, "PCM unsigned 16 bit big-endian format", + AV_NE("uw", NULL), CODEC_ID_PCM_U16BE) + +PCMDEF(u16le, "PCM unsigned 16 bit little-endian format", + AV_NE(NULL, "uw"), CODEC_ID_PCM_U16LE) + +PCMDEF(u8, "PCM unsigned 8 bit format", + "ub", CODEC_ID_PCM_U8) + +PCMDEF(alaw, "PCM A-law format", + "al", CODEC_ID_PCM_ALAW) + +PCMDEF(mulaw, "PCM mu-law format", + "ul", CODEC_ID_PCM_MULAW) diff --git a/libavformat/raw.c b/libavformat/raw.c index af8e392921..f863d24e1a 100644 --- a/libavformat/raw.c +++ b/libavformat/raw.c @@ -36,7 +36,7 @@ int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt) #if CONFIG_DEMUXERS /* raw input */ -static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap) +int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) { AVStream *st; enum CodecID id; @@ -81,28 +81,6 @@ static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap) } #define RAW_PACKET_SIZE 1024 -#define RAW_SAMPLES 1024 - -static int raw_read_packet(AVFormatContext *s, AVPacket *pkt) -{ - int ret, size, bps; - // AVStream *st = s->streams[0]; - - size= RAW_SAMPLES*s->streams[0]->codec->block_align; - - ret= av_get_packet(s->pb, pkt, size); - - pkt->stream_index = 0; - if (ret < 0) - return ret; - - bps= av_get_bits_per_sample(s->streams[0]->codec->codec_id); - assert(bps); // if false there IS a bug elsewhere (NOT in this function) - pkt->dts= - pkt->pts= pkt->pos*8 / (bps * s->streams[0]->codec->channels); - - return ret; -} int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt) { @@ -150,38 +128,6 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) #endif #if CONFIG_DEMUXERS -int pcm_read_seek(AVFormatContext *s, - int stream_index, int64_t timestamp, int flags) -{ - AVStream *st; - int block_align, byte_rate; - int64_t pos, ret; - - st = s->streams[0]; - - block_align = st->codec->block_align ? st->codec->block_align : - (av_get_bits_per_sample(st->codec->codec_id) * st->codec->channels) >> 3; - byte_rate = st->codec->bit_rate ? st->codec->bit_rate >> 3 : - block_align * st->codec->sample_rate; - - if (block_align <= 0 || byte_rate <= 0) - return -1; - if (timestamp < 0) timestamp = 0; - - /* compute the position by aligning it to block_align */ - pos = av_rescale_rnd(timestamp * byte_rate, - st->time_base.num, - st->time_base.den * (int64_t)block_align, - (flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP); - pos *= block_align; - - /* recompute exact position */ - st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num); - if ((ret = url_fseek(s->pb, pos + s->data_offset, SEEK_SET)) < 0) - return ret; - return 0; -} - int ff_raw_audio_read_header(AVFormatContext *s, AVFormatParameters *ap) { @@ -529,7 +475,7 @@ AVInputFormat rawvideo_demuxer = { NULL_IF_CONFIG_SMALL("raw video format"), 0, NULL, - raw_read_header, + ff_raw_read_header, rawvideo_read_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "yuv,cif,qcif,rgb", @@ -581,21 +527,6 @@ AVInputFormat vc1_demuxer = { /* PCM formats */ -#define PCMINPUTDEF(name, long_name, ext, codec) \ -AVInputFormat pcm_ ## name ## _demuxer = {\ - #name,\ - NULL_IF_CONFIG_SMALL(long_name),\ - 0,\ - NULL,\ - raw_read_header,\ - raw_read_packet,\ - NULL,\ - pcm_read_seek,\ - .flags= AVFMT_GENERIC_INDEX,\ - .extensions = ext,\ - .value = codec,\ -}; - #define PCMOUTPUTDEF(name, long_name, ext, codec) \ AVOutputFormat pcm_ ## name ## _muxer = {\ #name,\ @@ -611,15 +542,8 @@ AVOutputFormat pcm_ ## name ## _muxer = {\ }; -#if !CONFIG_MUXERS && CONFIG_DEMUXERS -#define PCMDEF(name, long_name, ext, codec) \ - PCMINPUTDEF(name, long_name, ext, codec) -#elif CONFIG_MUXERS && !CONFIG_DEMUXERS -#define PCMDEF(name, long_name, ext, codec) \ - PCMOUTPUTDEF(name, long_name, ext, codec) -#elif CONFIG_MUXERS && CONFIG_DEMUXERS +#if CONFIG_MUXERS #define PCMDEF(name, long_name, ext, codec) \ - PCMINPUTDEF(name, long_name, ext, codec)\ PCMOUTPUTDEF(name, long_name, ext, codec) #else #define PCMDEF(name, long_name, ext, codec) diff --git a/libavformat/raw.h b/libavformat/raw.h index 73d1d5d069..9621e0c45d 100644 --- a/libavformat/raw.h +++ b/libavformat/raw.h @@ -24,11 +24,10 @@ #include "avformat.h" -int pcm_read_seek(AVFormatContext *s, - int stream_index, int64_t timestamp, int flags); - int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt); +int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap); + int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt); int ff_raw_audio_read_header(AVFormatContext *s, AVFormatParameters *ap); diff --git a/libavformat/rsodec.c b/libavformat/rsodec.c index fbcf918c7e..e86b8e7d5f 100644 --- a/libavformat/rsodec.c +++ b/libavformat/rsodec.c @@ -23,7 +23,7 @@ #include "libavutil/intreadwrite.h" #include "avformat.h" #include "internal.h" -#include "raw.h" +#include "pcm.h" #include "riff.h" #include "rso.h" diff --git a/libavformat/sol.c b/libavformat/sol.c index a7faacc8e8..5573ddd68a 100644 --- a/libavformat/sol.c +++ b/libavformat/sol.c @@ -25,7 +25,7 @@ #include "libavutil/bswap.h" #include "avformat.h" -#include "raw.h" +#include "pcm.h" /* if we don't know the size in advance */ #define AU_UNKNOWN_SIZE ((uint32_t)(~0)) diff --git a/libavformat/soxdec.c b/libavformat/soxdec.c index 42fa53e430..10c5bbe387 100644 --- a/libavformat/soxdec.c +++ b/libavformat/soxdec.c @@ -31,7 +31,7 @@ #include "libavutil/intreadwrite.h" #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "sox.h" static int sox_probe(AVProbeData *p) diff --git a/libavformat/wav.c b/libavformat/wav.c index 4c72bec8e9..ca687a3adb 100644 --- a/libavformat/wav.c +++ b/libavformat/wav.c @@ -23,7 +23,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avformat.h" -#include "raw.h" +#include "pcm.h" #include "riff.h" typedef struct { -- cgit v1.2.1