summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--src/demuxers/demux_flv.c17
-rw-r--r--src/demuxers/demux_matroska.c2
-rw-r--r--src/libreal/real_common.c1
4 files changed, 12 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 4301066d0..24ccf9521 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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")