diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2007-11-07 23:56:00 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2007-11-07 23:56:00 +0000 |
commit | 8cd4ac3d63abff11201810aff9f3521876c2fb70 (patch) | |
tree | 567bfa41f0f3bb7d722516849a652fcbb1cdc3fe /libavformat/mpeg.c | |
parent | c16d6c50617bb2a5e378be918d03f43c6562a491 (diff) | |
download | ffmpeg-8cd4ac3d63abff11201810aff9f3521876c2fb70.tar.gz |
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/mpeg.c')
-rw-r--r-- | libavformat/mpeg.c | 12 |
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; |