From a0560d4679635de400655860810f8148acbdafc8 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Wed, 6 Jan 2010 20:54:42 +0200 Subject: Ignore unsupported BluRay SPU streams (interactive (0x91) and text (0x92)) --- src/demuxers/demux_ts.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 6844f6a01..a093980d1 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -226,7 +226,6 @@ ISO_14496_PART10_VIDEO = 0x1b, /* ISO/IEC 14496-10 Video (MPEG-4 part 10/AVC, aka H.264) */ STREAM_VIDEO_MPEG = 0x80, STREAM_AUDIO_AC3 = 0x81, - STREAM_SPU_BITMAP_HDMV = 0x90, STREAM_VIDEO_VC1 = 0xea, /* VC-1 Video */ @@ -237,6 +236,10 @@ HDMV_AUDIO_85_DTS_HRA = 0x85, /* DTS-HRA */ HDMV_AUDIO_86_DTS_HD_MA = 0x86, /* DTS-HD Master audio */ + HDMV_SPU_BITMAP = 0x90, + HDMV_SPU_INTERACTIVE = 0x91, + HDMV_SPU_TEXT = 0x92, + } streamType; #define WRAP_THRESHOLD 270000 @@ -777,7 +780,7 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, return 1; } - if (m->descriptor_tag == STREAM_SPU_BITMAP_HDMV) { + if (m->descriptor_tag == HDMV_SPU_BITMAP) { long payload_len = ((buf[4] << 8) | buf[5]) - header_len - 3; m->content = p; @@ -1499,7 +1502,16 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num } break; - case STREAM_SPU_BITMAP_HDMV: + case HDMV_SPU_INTERACTIVE: + case HDMV_SPU_TEXT: + if (this->hdmv > 0) { + printf("demux_ts: Skipping unsupported HDMV subtitle stream_type: 0x%.2x pid: 0x%.4x\n", + stream[0], pid); + break; + } + /* fall thru */ + + case HDMV_SPU_BITMAP: if (this->hdmv > 0) { if (pid >= 0x1200 && pid < 0x1300) { /* HDMV Presentation Graphics / SPU */ -- cgit v1.2.3 From c304388520db72f3c87d0af9650f8a1530210f80 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Tue, 12 Jan 2010 13:26:08 +0200 Subject: Do not reset decoder flags from parse_pes_header() when setting BUF_FLAG_FRAME_END. Fixes BluRay PCM audio when PES payload size is less than 2048 bytes. --- src/demuxers/demux_ts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index a093980d1..68a96b181 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -983,7 +983,7 @@ static void demux_ts_buffer_pes(demux_ts_t*this, unsigned char *ts, else if ( this->numPreview<5 ) m->buf->decoder_flags=BUF_FLAG_PREVIEW; else - m->buf->decoder_flags=BUF_FLAG_FRAME_END; + m->buf->decoder_flags |= BUF_FLAG_FRAME_END; } m->buf->pts = m->pts; m->buf->decoder_info[0] = 1; -- cgit v1.2.3 From 5a48c726a76dac9b2a5612d65af2a65622e1b680 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Tue, 12 Jan 2010 18:02:29 +0200 Subject: Demux BluRay DTS (stream 0x82) --- src/demuxers/demux_ts.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 68a96b181..1a19340f3 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -818,7 +818,8 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, m->type |= BUF_AUDIO_A52; return 1; - } else if (m->descriptor_tag == HDMV_AUDIO_86_DTS_HD_MA ) { + } else if (m->descriptor_tag == HDMV_AUDIO_82_DTS || + m->descriptor_tag == HDMV_AUDIO_86_DTS_HD_MA ) { m->content = p; m->size = packet_len; m->type |= BUF_AUDIO_DTS; -- cgit v1.2.3 From f95b2adaeccea14060f232d4f9e67dd25eb1801e Mon Sep 17 00:00:00 2001 From: Julian Scheel Date: Tue, 12 Jan 2010 21:34:01 +0100 Subject: fix a/v sync send the pts to the decoders, even if the pes packet is just a continuation packet --- src/demuxers/demux_ts.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 9053db60d..8213ceedf 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -1014,7 +1014,7 @@ static void demux_ts_buffer_pes(demux_ts_t*this, unsigned char *ts, m->buf->content = m->buf->mem; m->buf->size = m->buffered_bytes; m->buf->type = m->type; - m->buf->pts = 0; /* m->pts */ + m->buf->pts = m->pts; m->buf->decoder_info[0] = 1; if( this->input->get_length (this->input) ) m->buf->extra_info->input_normpos = (int)( (double) this->input->get_current_pos (this->input) * -- cgit v1.2.3