summaryrefslogtreecommitdiffstats
path: root/ext/mimic/gstmimenc.c
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2009-07-07 18:27:36 +0100
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2009-07-07 19:21:45 +0100
commit316236761c6fd3063471e9cab267a11d0466dfa2 (patch)
tree48699c3ad74d267aa68dd7086896a99c1157c37b /ext/mimic/gstmimenc.c
parent4bf9fe969e154ee5f20a8f3946589a642ab746c0 (diff)
downloadgst-plugins-bad-316236761c6fd3063471e9cab267a11d0466dfa2.tar.gz
gst-plugins-bad-316236761c6fd3063471e9cab267a11d0466dfa2.tar.bz2
gst-plugins-bad-316236761c6fd3063471e9cab267a11d0466dfa2.zip
mimenc: Put keyframe/paused flags in tcp header
Diffstat (limited to 'ext/mimic/gstmimenc.c')
-rw-r--r--ext/mimic/gstmimenc.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/ext/mimic/gstmimenc.c b/ext/mimic/gstmimenc.c
index 9f6727f5..ab2f4a01 100644
--- a/ext/mimic/gstmimenc.c
+++ b/ext/mimic/gstmimenc.c
@@ -84,7 +84,8 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
static gboolean gst_mimenc_setcaps (GstPad * pad, GstCaps * caps);
static GstFlowReturn gst_mimenc_chain (GstPad * pad, GstBuffer * in);
static GstBuffer *gst_mimenc_create_tcp_header (GstMimEnc * mimenc,
- guint32 payload_size, GstClockTime timestamp);
+ guint32 payload_size, GstClockTime timestamp, gboolean keyframe,
+ gboolean paused);
static gboolean gst_mimenc_event (GstPad * pad, GstEvent * event);
static GstStateChangeReturn
@@ -260,6 +261,7 @@ gst_mimenc_chain (GstPad * pad, GstBuffer * in)
GstBuffer *header = NULL;
GstFlowReturn res = GST_FLOW_OK;
GstEvent *event = NULL;
+ gboolean keyframe;
g_return_val_if_fail (GST_IS_PAD (pad), GST_FLOW_ERROR);
mimenc = GST_MIMENC (gst_pad_get_parent (pad));
@@ -310,9 +312,9 @@ gst_mimenc_chain (GstPad * pad, GstBuffer * in)
GST_BUFFER_TIMESTAMP (buf));
mimenc->last_buffer = GST_BUFFER_TIMESTAMP (out_buf);
buffer_size = mimenc->buffer_size;
+ keyframe = (mimenc->frames % MAX_INTERFRAMES) == 0 ? TRUE : FALSE;
if (!mimic_encode_frame (mimenc->enc, data, GST_BUFFER_DATA (out_buf),
- &buffer_size,
- ((mimenc->frames % MAX_INTERFRAMES) == 0 ? TRUE : FALSE))) {
+ &buffer_size, keyframe)) {
GST_WARNING_OBJECT (mimenc, "mimic_encode_frame error\n");
gst_buffer_unref (out_buf);
gst_buffer_unref (buf);
@@ -327,7 +329,7 @@ gst_mimenc_chain (GstPad * pad, GstBuffer * in)
// now let's create that tcp header
header = gst_mimenc_create_tcp_header (mimenc, buffer_size,
- GST_BUFFER_TIMESTAMP (out_buf));
+ GST_BUFFER_TIMESTAMP (out_buf), keyframe, FALSE);
if (!header) {
gst_buffer_unref (out_buf);
@@ -376,7 +378,7 @@ out_unlock:
static GstBuffer *
gst_mimenc_create_tcp_header (GstMimEnc * mimenc, guint32 payload_size,
- GstClockTime timestamp)
+ GstClockTime timestamp, gboolean keyframe, gboolean paused)
{
// 24 bytes
GstBuffer *buf_header = gst_buffer_new_and_alloc (24);
@@ -385,10 +387,10 @@ gst_mimenc_create_tcp_header (GstMimEnc * mimenc, guint32 payload_size,
GST_BUFFER_TIMESTAMP (buf_header) = timestamp;
p[0] = 24;
- *((guchar *) (p + 1)) = 0;
+ *((guchar *) (p + 1)) = paused ? 1 : 0;
*((guint16 *) (p + 2)) = GUINT16_TO_LE (mimenc->width);
*((guint16 *) (p + 4)) = GUINT16_TO_LE (mimenc->height);
- *((guint16 *) (p + 6)) = 0;
+ *((guint16 *) (p + 6)) = keyframe ? 1 : 0;
*((guint32 *) (p + 8)) = GUINT32_TO_LE (payload_size);
*((guint32 *) (p + 12)) =
GUINT32_TO_LE (GST_MAKE_FOURCC ('M', 'L', '2', '0'));