summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorAurelien Jacobs <aurel@gnuage.org>2007-11-07 23:56:00 +0000
committerAurelien Jacobs <aurel@gnuage.org>2007-11-07 23:56:00 +0000
commit8cd4ac3d63abff11201810aff9f3521876c2fb70 (patch)
tree567bfa41f0f3bb7d722516849a652fcbb1cdc3fe /libavformat
parentc16d6c50617bb2a5e378be918d03f43c6562a491 (diff)
correctly set audio codec when demuxing sofdec files
samples: http://samples.mplayerhq.hu/game-formats/sfd/ Originally committed as revision 10953 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mpeg.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index 93b5f40d5f..3a009b606c 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -107,15 +107,25 @@ static int mpegps_probe(AVProbeData *p)
typedef struct MpegDemuxContext {
int32_t header_state;
unsigned char psm_es_type[256];
+ int sofdec;
} MpegDemuxContext;
static int mpegps_read_header(AVFormatContext *s,
AVFormatParameters *ap)
{
MpegDemuxContext *m = s->priv_data;
+ uint8_t buffer[8192];
+ char *p;
+
m->header_state = 0xff;
s->ctx_flags |= AVFMTCTX_NOHEADER;
+ get_buffer(&s->pb, buffer, sizeof(buffer));
+ if ((p=memchr(buffer, 'S', sizeof(buffer))))
+ if (!memcmp(p, "Sofdec", 6))
+ m->sofdec = 1;
+ url_fseek(&s->pb, -sizeof(buffer), SEEK_CUR);
+
/* no need to do more */
return 0;
}
@@ -449,7 +459,7 @@ static int mpegps_read_packet(AVFormatContext *s,
type = CODEC_TYPE_VIDEO;
} else if (startcode >= 0x1c0 && startcode <= 0x1df) {
type = CODEC_TYPE_AUDIO;
- codec_id = CODEC_ID_MP2;
+ codec_id = m->sofdec ? CODEC_ID_ADPCM_ADX : CODEC_ID_MP2;
} else if (startcode >= 0x80 && startcode <= 0x87) {
type = CODEC_TYPE_AUDIO;
codec_id = CODEC_ID_AC3;