From 787ed5780c3569ba32ab9c1cc0d77638af7acdcc Mon Sep 17 00:00:00 2001 From: Petri Hintukainen Date: Wed, 30 Jan 2013 22:58:57 +0200 Subject: demux_ts: Fix some H.264 and VC1 still images Append sequence end code to video stream at end of stream --- src/demuxers/demux_ts.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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); } /* -- cgit v1.2.3