From f791bb6196c70f923375f0614f178bddaece877b Mon Sep 17 00:00:00 2001 From: Julian Scheel Date: Sun, 8 Nov 2009 13:33:39 +0000 Subject: Fix playback of HTTP URLs with escaped characters (terminate the string). --- src/input/http_helper.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/input/http_helper.c b/src/input/http_helper.c index d7f9a93ff..db93b9b45 100644 --- a/src/input/http_helper.c +++ b/src/input/http_helper.c @@ -198,6 +198,7 @@ int _x_parse_url (char *url, char **proto, char** host, int *port, } else *it = start[i]; } + *it = '\0'; } } } else { -- cgit v1.2.3 From 08fa8374933dc8b923e4fd706a53bab26fe6c00e Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Thu, 19 Nov 2009 14:58:53 +0200 Subject: Demux VC-1 video (stream type 0xea) --- src/demuxers/demux_ts.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index e52c4c765..e07af9006 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -1,3 +1,4 @@ + /* * Copyright (C) 2000-2003 the xine project * @@ -226,6 +227,8 @@ STREAM_VIDEO_MPEG = 0x80, STREAM_AUDIO_AC3 = 0x81, STREAM_SPU_BITMAP_HDMV = 0x90, + + STREAM_VIDEO_VC1 = 0xea, /* VC-1 Video */ } streamType; #define WRAP_THRESHOLD 270000 @@ -760,6 +763,13 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, p += header_len + 9; packet_len -= header_len + 3; + if (m->descriptor_tag == STREAM_VIDEO_VC1) { + m->content = p; + m->size = packet_len; + m->type = BUF_VIDEO_VC1; + return 1; + } + if (m->descriptor_tag == STREAM_SPU_BITMAP_HDMV) { long payload_len = ((buf[4] << 8) | buf[5]) - header_len - 3; @@ -1330,6 +1340,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num case ISO_13818_VIDEO: case ISO_14496_PART2_VIDEO: case ISO_14496_PART10_VIDEO: + case STREAM_VIDEO_VC1: if (this->videoPid == INVALID_PID) { #ifdef TS_PMT_LOG printf ("demux_ts: PMT video pid 0x%.4x type %2.2x\n", pid, stream[0]); -- cgit v1.2.3 From 217db986e252cff5401ac28fb77e202ed7576b11 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Thu, 19 Nov 2009 15:04:13 +0200 Subject: Increase max number of audio and SPU tracks --- src/demuxers/demux_ts.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index e07af9006..a5fc6ac20 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -268,7 +268,7 @@ typedef struct { } demux_ts_media; /* DVBSUB */ -#define MAX_SPU_LANGS 16 +#define MAX_SPU_LANGS 32 typedef struct { spu_dvb_descriptor_t desc; @@ -277,7 +277,7 @@ typedef struct { } demux_ts_spu_lang; /* Audio Channels */ -#define MAX_AUDIO_TRACKS 16 +#define MAX_AUDIO_TRACKS 32 typedef struct { int pid; -- cgit v1.2.3 From d344bbc99423ac8ed989b324f9f3fb9b56d78bc7 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Sat, 28 Nov 2009 16:20:02 +0200 Subject: Honour max. number of SPU tracks --- src/demuxers/demux_ts.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index a5fc6ac20..101d49ad3 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -1471,6 +1471,14 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num if (this->hdmv > 0) { if (pid >= 0x1200 && pid < 0x1300) { /* HDMV Presentation Graphics / SPU */ + + if (this->spu_langs_count >= MAX_SPU_LANGS) { + xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, + "demux_ts: too many SPU tracks! ignoring pid 0x%.4x\n", + pid); + break; + } + demux_ts_spu_lang *lang = &this->spu_langs[this->spu_langs_count]; memset(lang->desc.lang, 0, sizeof(lang->desc.lang)); -- cgit v1.2.3 From c9567a7fa4d2f182d050c5e17855d5eed6548019 Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Sat, 28 Nov 2009 19:34:26 +0200 Subject: Fixed PMT parsing when PMT does not fit in single TS packet and PAT is in the middle of PMT packets. Parsing PAT resets PMT buffer. If PMT does not fit to single TS packet and PAT packet is scheduled in middle of PMT packets, PMT is never parsed and TS demuxer falls to PID auto detection mode. This moves PMT buffer reset to the case where PMT PID changes and all PIDs are reset. [As far as I can see, worst regression can be invalid PMT sections when stream changes, new PMT pid equals to old one and demuxer is not reset(?), but this should be OK as PMT checksums are always checked.] --- src/demuxers/demux_ts.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index 101d49ad3..d258d9c54 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -669,13 +669,12 @@ static void demux_ts_parse_pat (demux_ts_t*this, unsigned char *original_pkt, this->last_pmt_crc = 0; this->videoPid = INVALID_PID; this->spu_pid = INVALID_PID; - } - this->pmt_pid[program_count] = pmt_pid; - if (this->pmt[program_count] != NULL) { - free(this->pmt[program_count]); - this->pmt[program_count] = NULL; - this->pmt_write_ptr[program_count] = NULL; + if (this->pmt[program_count] != NULL) { + free(this->pmt[program_count]); + this->pmt[program_count] = NULL; + this->pmt_write_ptr[program_count] = NULL; + } } #ifdef TS_PAT_LOG if (this->program_number[program_count] != INVALID_PROGRAM) -- cgit v1.2.3