diff options
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | src/demuxers/demux_flv.c | 17 | ||||
-rw-r--r-- | src/demuxers/demux_matroska.c | 2 | ||||
-rw-r--r-- | src/libreal/real_common.c | 1 |
4 files changed, 12 insertions, 9 deletions
@@ -53,6 +53,7 @@ xine-lib (1.1.9) (unreleased) * Add UI option to configure FFmpeg's video decoder thread count. * Improve syncing of audio and video in the presence of bad frames. * Improve handling of invalid or unknown frame sizes. + * Fixed handling of streamed Flash videos (broken in 1.1.5). xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff --git a/src/demuxers/demux_flv.c b/src/demuxers/demux_flv.c index e8ba46ee5..cb811ae33 100644 --- a/src/demuxers/demux_flv.c +++ b/src/demuxers/demux_flv.c @@ -183,10 +183,7 @@ static int open_flv_file(demux_flv_t *this) { this->start = _X_BE_32(&buffer[5]); this->size = this->input->get_length(this->input); - if (INPUT_IS_SEEKABLE(this->input)) - this->input->seek(this->input, this->start, SEEK_SET); - else if (this->start > 9) - this->input->seek(this->input, this->start-9, SEEK_CUR); + this->input->seek(this->input, this->start, SEEK_SET); lprintf(" qualified FLV file, repositioned @ offset 0x%" PRIxMAX "\n", (intmax_t)this->start); @@ -340,7 +337,7 @@ static void parse_flv_script(demux_flv_t *this, int size) { free(buf); } -static int read_flv_packet(demux_flv_t *this) { +static int read_flv_packet(demux_flv_t *this, int preview) { fifo_buffer_t *fifo = NULL; buf_element_t *buf = NULL; unsigned char buffer[12]; @@ -487,7 +484,9 @@ static int read_flv_packet(demux_flv_t *this) { buf = fifo->buffer_pool_alloc(fifo); buf->type = buf_type; buf->pts = (int64_t) pts * 90; - check_newpts(this, buf->pts, (tag_type == FLV_TAG_TYPE_VIDEO)); + + if (!preview) + check_newpts(this, buf->pts, (tag_type == FLV_TAG_TYPE_VIDEO)); buf->extra_info->input_time = pts; if (this->input->get_length(this->input)) { @@ -502,6 +501,8 @@ static int read_flv_packet(demux_flv_t *this) { remaining_bytes -= buf->size; buf->decoder_flags = buf_flags; + if (preview) + buf->decoder_flags |= BUF_FLAG_PREVIEW; if (!remaining_bytes) buf->decoder_flags |= BUF_FLAG_FRAME_END; @@ -609,7 +610,7 @@ static void seek_flv_file(demux_flv_t *this, int seek_pts) { static int demux_flv_send_chunk(demux_plugin_t *this_gen) { demux_flv_t *this = (demux_flv_t *) this_gen; - return read_flv_packet(this); + return read_flv_packet(this, 0); } static void demux_flv_send_headers(demux_plugin_t *this_gen) { @@ -632,7 +633,7 @@ static void demux_flv_send_headers(demux_plugin_t *this_gen) { /* find first audio/video packets and send headers */ for (i = 0; i < 20; i++) { - if (read_flv_packet(this) != DEMUX_OK) + if (read_flv_packet(this, 1) != DEMUX_OK) break; if (((this->flags & FLV_FLAG_HAS_VIDEO) && this->got_video) && ((this->flags & FLV_FLAG_HAS_AUDIO) && this->got_audio)) { diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c index 8d1019dc0..b45db701e 100644 --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1856,7 +1856,7 @@ static int parse_block (demux_matroska_t *this, uint64_t block_size, gap = flags & 1; lacing = (flags >> 1) & 0x3; - fprintf(stderr, "lacing: %x\n", lacing); +/*fprintf(stderr, "lacing: %x\n", lacing);*/ if (!find_track_by_id(this, (int)track_num, &track)) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, diff --git a/src/libreal/real_common.c b/src/libreal/real_common.c index 82a947e7c..371ffd246 100644 --- a/src/libreal/real_common.c +++ b/src/libreal/real_common.c @@ -89,6 +89,7 @@ void _x_real_codecs_init(xine_t *const xine) { /* The priority is for the first found */ try_real_subpath("lib/win32") else try_real_subpath("lib/codecs") + else try_real_subpath("lib64/real") else try_real_subpath("lib/real") else try_real_subpath("lib/RealPlayer10GOLD/codecs") else try_real_subpath("lib64/RealPlayer10/codecs") |