summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-18 15:41:54 +0300
committerPetri Hintukainen <phintuka@users.sourceforge.net>2011-10-18 15:41:54 +0300
commitfd021ba10d26c185cc6a536d69aad832ff77569a (patch)
tree01c7724c202708de135548c6bb9ec56cf6e085bf /src
parent84348c0e245c7867bdbfebc3d57bf8f3bc1a9b9f (diff)
downloadxine-lib-fd021ba10d26c185cc6a536d69aad832ff77569a.tar.gz
xine-lib-fd021ba10d26c185cc6a536d69aad832ff77569a.tar.bz2
demux_ts: factorized buffer sending
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_ts.c42
1 files changed, 15 insertions, 27 deletions
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index 65ec7859d..44c46c3f3 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -600,20 +600,31 @@ static void demux_ts_update_spu_channel(demux_ts_t *this)
this->video_fifo->put(this->video_fifo, buf);
}
-static void demux_ts_flush_media(demux_ts_media *m)
+static void demux_ts_send_buffer(demux_ts_media *m, int flags)
{
if (m->buf) {
m->buf->content = m->buf->mem;
m->buf->type = m->type;
- m->buf->decoder_flags |= BUF_FLAG_FRAME_END;
+ m->buf->decoder_flags |= flags;
m->buf->pts = m->pts;
+ m->buf->decoder_info[0] = 1;
m->buf->extra_info->input_normpos = m->input_normpos;
m->buf->extra_info->input_time = m->input_time;
+
m->fifo->put(m->fifo, m->buf);
m->buf = NULL;
+
+#ifdef TS_LOG
+ printf ("demux_ts: produced buffer, pts=%lld\n", m->pts);
+#endif
}
}
+static void demux_ts_flush_media(demux_ts_media *m)
+{
+ demux_ts_send_buffer(m, BUF_FLAG_FRAME_END);
+}
+
static void demux_ts_flush(demux_ts_t *this)
{
unsigned int i;
@@ -1098,19 +1109,7 @@ static void demux_ts_buffer_pes(demux_ts_t*this, unsigned char *ts,
if (pus) { /* new PES packet */
if (m->buf && m->buf->size) {
-
- m->buf->content = m->buf->mem;
- m->buf->type = m->type;
- m->buf->decoder_flags |= BUF_FLAG_FRAME_END;
- m->buf->pts = m->pts;
- m->buf->decoder_info[0] = 1;
- m->buf->extra_info->input_normpos = m->input_normpos;
- m->buf->extra_info->input_time = m->input_time;
- m->fifo->put(m->fifo, m->buf);
- m->buf = NULL; /* forget about buf -- not our responsibility anymore */
-#ifdef TS_LOG
- printf ("demux_ts: produced buffer, pts=%lld\n", m->pts);
-#endif
+ demux_ts_flush_media(m);
}
/* allocate the buffer here, as pes_header needs a valid buf for dvbsubs */
m->buf = m->fifo->buffer_pool_alloc(m->fifo);
@@ -1147,19 +1146,8 @@ static void demux_ts_buffer_pes(demux_ts_t*this, unsigned char *ts,
} else if (!m->corrupted_pes) { /* no pus -- PES packet continuation */
if ((m->buf->size + len) > MAX_PES_BUF_SIZE) {
- m->buf->content = m->buf->mem;
- m->buf->type = m->type;
- m->buf->pts = m->pts;
- m->buf->decoder_info[0] = 1;
- m->buf->extra_info->input_normpos = m->input_normpos;
- m->buf->extra_info->input_time = m->input_time;
- m->fifo->put(m->fifo, m->buf);
+ demux_ts_send_buffer(m, 0);
m->buf = m->fifo->buffer_pool_alloc(m->fifo);
-
-#ifdef TS_LOG
- printf ("demux_ts: produced buffer, pts=%lld\n", m->pts);
-#endif
-
}
memcpy(m->buf->mem + m->buf->size, ts, len);
m->buf->size += len;