summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2013-01-30 22:58:57 +0200
committerPetri Hintukainen <phintuka@users.sourceforge.net>2013-01-30 22:58:57 +0200
commit787ed5780c3569ba32ab9c1cc0d77638af7acdcc (patch)
treec3f821cd24d7484f7dbb592d3df6527df7c7e058 /src
parentd27acda147735d7d2fbfb86d83dadec8748f5a67 (diff)
downloadxine-lib-787ed5780c3569ba32ab9c1cc0d77638af7acdcc.tar.gz
xine-lib-787ed5780c3569ba32ab9c1cc0d77638af7acdcc.tar.bz2
demux_ts: Fix some H.264 and VC1 still images
Append sequence end code to video stream at end of stream
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_ts.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index bd67c269e..eeab1344c 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -790,6 +790,27 @@ static void demux_ts_flush_media(demux_ts_media *m)
demux_ts_send_buffer(m, BUF_FLAG_FRAME_END);
}
+static void post_sequence_end(fifo_buffer_t *fifo, uint32_t video_type) {
+
+ if (video_type == BUF_VIDEO_H264 ||
+ video_type == BUF_VIDEO_MPEG ||
+ video_type == BUF_VIDEO_VC1) {
+
+ buf_element_t *buf = fifo->buffer_pool_try_alloc(fifo);
+ if (buf) {
+ buf->type = video_type;
+ buf->size = 4;
+ buf->decoder_flags = BUF_FLAG_FRAME_END;
+ buf->content[0] = 0x00;
+ buf->content[1] = 0x00;
+ buf->content[2] = 0x01;
+ buf->content[3] = (video_type == BUF_VIDEO_MPEG) ? 0xb7 : 0x0a;
+ fifo->put(fifo, buf);
+ }
+ }
+}
+
+
static void demux_ts_flush(demux_ts_t *this)
{
unsigned int i;
@@ -797,6 +818,10 @@ static void demux_ts_flush(demux_ts_t *this)
demux_ts_flush_media(&this->media[i]);
this->media[i].corrupted_pes = 1;
}
+
+ /* append sequence end code to video stream */
+ if (this->videoPid != INVALID_PID)
+ post_sequence_end(this->stream->video_fifo, this->media[this->videoMedia].type);
}
/*