changeset 6445:4aaed59641ff libavformat

move pcm demuxers to their own file
author aurel
date Mon, 30 Aug 2010 21:17:34 +0000
parents 505f0bb17a5d
children 659a7e022950
files Makefile aea.c aiffdec.c au.c mmf.c oma.c pcm.c pcm.h pcmdec.c raw.c raw.h rsodec.c sol.c soxdec.c wav.c
diffstat 15 files changed, 251 insertions(+), 121 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Mon Aug 30 16:43:33 2010 +0000
+++ b/Makefile	Mon Aug 30 21:17:34 2010 +0000
@@ -21,8 +21,8 @@
 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_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_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 @@
                                             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_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_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_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 \
--- a/aea.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/aea.c	Mon Aug 30 21:17:34 2010 +0000
@@ -21,7 +21,7 @@
  */
 
 #include "avformat.h"
-#include "raw.h"
+#include "pcm.h"
 #include "libavutil/intreadwrite.h"
 
 #define AT1_SU_SIZE     212
--- a/aiffdec.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/aiffdec.c	Mon Aug 30 21:17:34 2010 +0000
@@ -21,7 +21,7 @@
 
 #include "libavutil/intfloat_readwrite.h"
 #include "avformat.h"
-#include "raw.h"
+#include "pcm.h"
 #include "aiff.h"
 
 #define AIFF                    0
--- a/au.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/au.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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 */
--- a/mmf.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/mmf.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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 {
--- a/oma.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/oma.c	Mon Aug 30 21:17:34 2010 +0000
@@ -45,7 +45,7 @@
 
 #include "avformat.h"
 #include "libavutil/intreadwrite.h"
-#include "raw.h"
+#include "pcm.h"
 #include "riff.h"
 #include "id3v2.h"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pcm.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pcm.h	Mon Aug 30 21:17:34 2010 +0000
@@ -0,0 +1,30 @@
+/*
+ * PCM common functions
+ * Copyright (C) 2007  Aurelien Jacobs <aurel@gnuage.org>
+ *
+ * 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 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pcmdec.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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)
--- a/raw.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/raw.c	Mon Aug 30 21:17:34 2010 +0000
@@ -36,7 +36,7 @@
 
 #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 @@
 }
 
 #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 @@
 #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 @@
     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 @@
 
 /* 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,16 +542,9 @@
 };
 
 
-#if  !CONFIG_MUXERS && CONFIG_DEMUXERS
-#define PCMDEF(name, long_name, ext, codec) \
-        PCMINPUTDEF(name, long_name, ext, codec)
-#elif CONFIG_MUXERS && !CONFIG_DEMUXERS
+#if CONFIG_MUXERS
 #define PCMDEF(name, long_name, ext, codec) \
         PCMOUTPUTDEF(name, long_name, ext, codec)
-#elif CONFIG_MUXERS && CONFIG_DEMUXERS
-#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)
 #endif
--- a/raw.h	Mon Aug 30 16:43:33 2010 +0000
+++ b/raw.h	Mon Aug 30 21:17:34 2010 +0000
@@ -24,10 +24,9 @@
 
 #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_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);
 
--- a/rsodec.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/rsodec.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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"
 
--- a/sol.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/sol.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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))
--- a/soxdec.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/soxdec.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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)
--- a/wav.c	Mon Aug 30 16:43:33 2010 +0000
+++ b/wav.c	Mon Aug 30 21:17:34 2010 +0000
@@ -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 {