[FFmpeg-devel] [PATCH] mpeg: fix dvdaudio with multiple private streams
Baptiste Coudurier
baptiste.coudurier at gmail.com
Mon Aug 29 20:35:22 CEST 2011
---
libavformat/mpeg.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index 364473a..e6e5cfb 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -425,14 +425,16 @@ static int mpegps_read_packet(AVFormatContext *s,
enum AVMediaType type;
int64_t pts, dts, dummy_pos; //dummy_pos is needed for the index building to work
uint8_t av_uninit(dvdaudio_substream_type);
+ int sub_id;
redo:
len = mpegps_read_pes_header(s, &dummy_pos, &startcode, &pts, &dts);
if (len < 0)
return len;
+ sub_id = startcode;
if(startcode == 0x1bd) {
- dvdaudio_substream_type = get_byte(s->pb);
+ sub_id = dvdaudio_substream_type = get_byte(s->pb);
url_fskip(s->pb, 3);
len -= 4;
}
@@ -440,7 +442,7 @@ static int mpegps_read_packet(AVFormatContext *s,
/* now find stream */
for(i=0;i<s->nb_streams;i++) {
st = s->streams[i];
- if (st->id == startcode)
+ if (st->id == sub_id)
goto found;
}
@@ -515,6 +517,8 @@ static int mpegps_read_packet(AVFormatContext *s,
switch(dvdaudio_substream_type & 0xe0) {
case 0xa0: codec_id = CODEC_ID_PCM_DVD;
break;
+ case 0xa1: codec_id = CODEC_ID_PCM_DVD;
+ break;
case 0x80: if((dvdaudio_substream_type & 0xf8) == 0x88)
codec_id = CODEC_ID_DTS;
else codec_id = CODEC_ID_AC3;
@@ -529,7 +533,7 @@ static int mpegps_read_packet(AVFormatContext *s,
goto redo;
}
/* no stream found: add a new stream */
- st = av_new_stream(s, startcode);
+ st = av_new_stream(s, sub_id);
if (!st)
goto skip;
st->codec->codec_type = type;
--
1.7.5.4
More information about the ffmpeg-devel
mailing list