aboutsummaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/allocators/gstdmabuf.c4
-rw-r--r--gst-libs/gst/pbutils/gstdiscoverer-types.c4
-rw-r--r--gst-libs/gst/riff/riff-read.c3
-rw-r--r--gst-libs/gst/rtsp/gstrtspconnection.c52
-rw-r--r--gst-libs/gst/rtsp/gstrtsptransport.c2
-rw-r--r--gst-libs/gst/sdp/gstmikey.c334
-rw-r--r--gst-libs/gst/sdp/gstmikey.h145
-rw-r--r--gst-libs/gst/sdp/sdp.h1
-rw-r--r--gst-libs/gst/video/gstvideodecoder.c32
-rw-r--r--gst-libs/gst/video/video-tile.c4
10 files changed, 408 insertions, 173 deletions
diff --git a/gst-libs/gst/allocators/gstdmabuf.c b/gst-libs/gst/allocators/gstdmabuf.c
index 9cf05cb..02a5eed 100644
--- a/gst-libs/gst/allocators/gstdmabuf.c
+++ b/gst-libs/gst/allocators/gstdmabuf.c
@@ -69,7 +69,7 @@ gst_dmabuf_allocator_free (GstAllocator * allocator, GstMemory * gmem)
g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC, mem);
munmap ((void *) mem->data, gmem->maxsize);
}
- if (mem->fd >= 0)
+ if (mem->fd >= 0 && gmem->parent == NULL)
close (mem->fd);
g_mutex_clear (&mem->lock);
g_slice_free (GstDmaBufMemory, mem);
@@ -176,7 +176,7 @@ gst_dmabuf_mem_share (GstMemory * gmem, gssize offset, gssize size)
GST_MINI_OBJECT_FLAG_LOCK_READONLY, mem->mem.allocator, parent,
mem->mem.maxsize, mem->mem.align, mem->mem.offset + offset, size);
- sub->fd = -1;
+ sub->fd = mem->fd;
g_mutex_init (&sub->lock);
return GST_MEMORY_CAST (sub);
diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c
index 12905ef..9cda787 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer-types.c
+++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c
@@ -1085,9 +1085,9 @@ DISCOVERER_INFO_ACCESSOR_CODE (toc, const GstToc *, NULL);
*
* Get the installer details for missing elements
*
- * Returns: (transfer full): (array zero-terminated=1): An array of strings
+ * Returns: (transfer full) (array zero-terminated=1): An array of strings
* containing informations about how to install the various missing elements
- * for @info to be usable. Free with g_strfreev.
+ * for @info to be usable. Free with g_strfreev().
*
* Since: 1.4
*/
diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c
index 824bc73..a60b9cf 100644
--- a/gst-libs/gst/riff/riff-read.c
+++ b/gst-libs/gst/riff/riff-read.c
@@ -258,8 +258,7 @@ too_small:
not_riff:
{
GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
- ("Stream is no RIFF stream: %" GST_FOURCC_FORMAT,
- GST_FOURCC_ARGS (tag)));
+ ("Stream is no RIFF stream: 0x%" G_GINT32_MODIFIER "x", tag));
gst_buffer_unmap (buf, &info);
gst_buffer_unref (buf);
return FALSE;
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index 87be31a..2218921 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -2889,25 +2889,43 @@ gst_rtsp_connection_do_tunnel (GstRTSPConnection * conn,
g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
if (conn2 != NULL) {
- g_return_val_if_fail (conn->tstate == TUNNEL_STATE_GET, GST_RTSP_EINVAL);
- g_return_val_if_fail (conn2->tstate == TUNNEL_STATE_POST, GST_RTSP_EINVAL);
+ GstRTSPTunnelState ts1 = conn->tstate;
+ GstRTSPTunnelState ts2 = conn2->tstate;
+
+ g_return_val_if_fail ((ts1 == TUNNEL_STATE_GET && ts2 == TUNNEL_STATE_POST)
+ || (ts1 == TUNNEL_STATE_POST && ts2 == TUNNEL_STATE_GET),
+ GST_RTSP_EINVAL);
g_return_val_if_fail (!memcmp (conn2->tunnelid, conn->tunnelid,
TUNNELID_LEN), GST_RTSP_EINVAL);
- /* both connections have socket0 as the read/write socket. start by taking the
- * socket from conn2 and set it as the socket in conn */
- conn->socket1 = conn2->socket0;
- conn->stream1 = conn2->stream0;
- conn->input_stream = conn2->input_stream;
- conn->control_stream = g_io_stream_get_input_stream (conn->stream0);
+ /* both connections have socket0 as the read/write socket */
+ if (ts1 == TUNNEL_STATE_GET) {
+ /* conn2 is the HTTP POST channel. take its socket and set it as read
+ * socket in conn */
+ conn->socket1 = conn2->socket0;
+ conn->stream1 = conn2->stream0;
+ conn->input_stream = conn2->input_stream;
+ conn->control_stream = g_io_stream_get_input_stream (conn->stream0);
+ conn2->output_stream = NULL;
+ } else {
+ /* conn2 is the HTTP GET channel. take its socket and set it as write
+ * socket in conn */
+ conn->socket1 = conn->socket0;
+ conn->stream1 = conn->stream0;
+ conn->socket0 = conn2->socket0;
+ conn->stream0 = conn2->stream0;
+ conn->output_stream = conn2->output_stream;
+ conn->control_stream = g_io_stream_get_input_stream (conn->stream0);
+ }
/* clean up some of the state of conn2 */
g_cancellable_cancel (conn2->cancellable);
conn2->write_socket = conn2->read_socket = NULL;
conn2->socket0 = NULL;
conn2->stream0 = NULL;
+ conn2->socket1 = NULL;
+ conn2->stream1 = NULL;
conn2->input_stream = NULL;
- conn2->output_stream = NULL;
conn2->control_stream = NULL;
g_cancellable_reset (conn2->cancellable);
@@ -3140,7 +3158,7 @@ gst_rtsp_source_dispatch_read (GPollableInputStream * stream,
(GSourceFunc) gst_rtsp_source_dispatch_read_get_channel, watch,
NULL);
g_source_add_child_source ((GSource *) watch, watch->controlsrc);
- }
+ }
goto read_done;
} else
goto eof;
@@ -3753,18 +3771,18 @@ gst_rtsp_watch_send_message (GstRTSPWatch * watch, GstRTSPMessage * message,
* Wait until there is place in the backlog queue, @timeout is reached
* or @watch is set to flushing.
*
- * If @timeout is #NULL this function can block forever. If @timeout
- * contains a valid timeout, this function will return #GST_RTSP_ETIMEOUT
+ * If @timeout is %NULL this function can block forever. If @timeout
+ * contains a valid timeout, this function will return %GST_RTSP_ETIMEOUT
* after the timeout expired.
*
* The typically use of this function is when gst_rtsp_watch_write_data
- * returns GST_RTSP_ENOMEM. The caller then calls this function to wait for
+ * returns %GST_RTSP_ENOMEM. The caller then calls this function to wait for
* free space in the backlog queue and try again.
*
- * Returns: #GST_RTSP_OK when if there is room in queue.
- * #GST_RTSP_ETIMEOUT when @timeout was reached.
- * #GST_RTSP_EINTR when @watch is flushing
- * #GST_RTSP_EINVAL when called with invalid parameters.
+ * Returns: %GST_RTSP_OK when if there is room in queue.
+ * %GST_RTSP_ETIMEOUT when @timeout was reached.
+ * %GST_RTSP_EINTR when @watch is flushing
+ * %GST_RTSP_EINVAL when called with invalid parameters.
*
* Since: 1.4
*/
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.c b/gst-libs/gst/rtsp/gstrtsptransport.c
index 81c7431..2dd9acb 100644
--- a/gst-libs/gst/rtsp/gstrtsptransport.c
+++ b/gst-libs/gst/rtsp/gstrtsptransport.c
@@ -271,7 +271,7 @@ gst_rtsp_transport_get_mime (GstRTSPTransMode trans, const gchar ** mime)
/**
* gst_rtsp_transport_get_media_type:
* @transport: a #GstRTSPTransport
- * @media_type: (out): media type of @transport
+ * @media_type: (out) (transfer none): media type of @transport
*
* Get the media type of @transport. This media type is typically
* used to generate #GstCaps events.
diff --git a/gst-libs/gst/sdp/gstmikey.c b/gst-libs/gst/sdp/gstmikey.c
index 19093bd..406d498 100644
--- a/gst-libs/gst/sdp/gstmikey.c
+++ b/gst-libs/gst/sdp/gstmikey.c
@@ -29,13 +29,22 @@
* messages.
* </para>
* </refsect2>
+ *
+ * Since: 1.4
*/
#include <string.h>
#include "gstmikey.h"
-static void payload_destroy (GstMIKEYPayload ** payload);
+GST_DEFINE_MINI_OBJECT_TYPE (GstMIKEYPayload, gst_mikey_payload);
+GST_DEFINE_MINI_OBJECT_TYPE (GstMIKEYMessage, gst_mikey_message);
+
+static void
+payload_destroy (GstMIKEYPayload ** payload)
+{
+ gst_mikey_payload_unref (*payload);
+}
#define INIT_ARRAY(field, type, init_func) \
G_STMT_START { \
@@ -92,10 +101,12 @@ get_mac_len (GstMIKEYMacAlg mac_alg)
* @enc_alg: the #GstMIKEYEncAlg
* @mac_alg: a #GstMIKEYMacAlg
*
- * Set the KEMAC parameters. @payload should point to a #GST_MIKEY_PT_KEMAC
+ * Set the KEMAC parameters. @payload should point to a %GST_MIKEY_PT_KEMAC
* payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_kemac_set (GstMIKEYPayload * payload,
@@ -113,10 +124,12 @@ gst_mikey_payload_kemac_set (GstMIKEYPayload * payload,
return TRUE;
}
-static void
-gst_mikey_payload_kemac_clear (GstMIKEYPayloadKEMAC * payload)
+static gboolean
+gst_mikey_payload_kemac_dispose (GstMIKEYPayloadKEMAC * payload)
{
FREE_ARRAY (payload->subpayloads);
+
+ return TRUE;
}
static GstMIKEYPayloadKEMAC *
@@ -127,8 +140,8 @@ gst_mikey_payload_kemac_copy (const GstMIKEYPayloadKEMAC * payload)
gst_mikey_payload_kemac_set (&copy->pt, payload->enc_alg, payload->mac_alg);
len = payload->subpayloads->len;
for (i = 0; i < len; i++) {
- GstMIKEYPayload *pay = g_array_index (payload->subpayloads,
- GstMIKEYPayload *, i);
+ GstMIKEYPayload *pay =
+ g_array_index (payload->subpayloads, GstMIKEYPayload *, i);
gst_mikey_payload_kemac_add_sub (&copy->pt, gst_mikey_payload_copy (pay));
}
return copy;
@@ -139,9 +152,11 @@ gst_mikey_payload_kemac_copy (const GstMIKEYPayloadKEMAC * payload)
* @payload: a #GstMIKEYPayload
*
* Get the number of sub payloads of @payload. @payload should be of type
- * #GST_MIKEY_PT_KEMAC.
+ * %GST_MIKEY_PT_KEMAC.
*
* Returns: the number of sub payloads in @payload
+ *
+ * Since: 1.4
*/
guint
gst_mikey_payload_kemac_get_n_sub (const GstMIKEYPayload * payload)
@@ -160,9 +175,11 @@ gst_mikey_payload_kemac_get_n_sub (const GstMIKEYPayload * payload)
* @idx: an index
*
* Get the sub payload of @payload at @idx. @payload should be of type
- * #GST_MIKEY_PT_KEMAC.
+ * %GST_MIKEY_PT_KEMAC.
*
- * Returns: the #GstMIKEYPayload at @idx.
+ * Returns: (transfer none): the #GstMIKEYPayload at @idx.
+ *
+ * Since: 1.4
*/
const GstMIKEYPayload *
gst_mikey_payload_kemac_get_sub (const GstMIKEYPayload * payload, guint idx)
@@ -186,6 +203,8 @@ gst_mikey_payload_kemac_get_sub (const GstMIKEYPayload * payload, guint idx)
* Remove the sub payload at @idx in @payload.
*
* Returns: %TRUE on success.
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_kemac_remove_sub (GstMIKEYPayload * payload, guint idx)
@@ -204,11 +223,13 @@ gst_mikey_payload_kemac_remove_sub (GstMIKEYPayload * payload, guint idx)
/**
* gst_mikey_payload_kemac_add_sub:
* @payload: a #GstMIKEYPayload
- * @newpay: a #GstMIKEYPayload to add
+ * @newpay: (transfer full): a #GstMIKEYPayload to add
*
* Add a new sub payload to @payload.
*
* Returns: %TRUE on success.
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_kemac_add_sub (GstMIKEYPayload * payload,
@@ -230,12 +251,14 @@ gst_mikey_payload_kemac_add_sub (GstMIKEYPayload * payload,
* @payload: a #GstMIKEYPayload
* @C: envelope key cache indicator
* @data_len: the length of @data
- * @data: the encrypted envelope key
+ * @data: (array length=data_len): the encrypted envelope key
*
* Set the PKE values in @payload. @payload must be of type
- * #GST_MIKEY_PT_PKE.
+ * %GST_MIKEY_PT_PKE.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_pke_set (GstMIKEYPayload * payload, GstMIKEYCacheType C,
@@ -253,10 +276,12 @@ gst_mikey_payload_pke_set (GstMIKEYPayload * payload, GstMIKEYCacheType C,
return TRUE;
}
-static void
-gst_mikey_payload_pke_clear (GstMIKEYPayloadPKE * payload)
+static gboolean
+gst_mikey_payload_pke_dispose (GstMIKEYPayloadPKE * payload)
{
FREE_MEMDUP (payload->data);
+
+ return TRUE;
}
static GstMIKEYPayloadPKE *
@@ -296,11 +321,13 @@ get_ts_len (GstMIKEYTSType type)
* gst_mikey_payload_t_set:
* @payload: a #GstMIKEYPayload
* @type: the #GstMIKEYTSType
- * @ts_value: the timestamp value
+ * @ts_value: (array): the timestamp value
*
- * Set the timestamp in a #GST_MIKEY_PT_T @payload.
+ * Set the timestamp in a %GST_MIKEY_PT_T @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_t_set (GstMIKEYPayload * payload,
@@ -321,10 +348,12 @@ gst_mikey_payload_t_set (GstMIKEYPayload * payload,
return TRUE;
}
-static void
-gst_mikey_payload_t_clear (GstMIKEYPayloadT * payload)
+static gboolean
+gst_mikey_payload_t_dispose (GstMIKEYPayloadT * payload)
{
FREE_MEMDUP (payload->ts_value);
+
+ return TRUE;
}
static GstMIKEYPayloadT *
@@ -355,6 +384,8 @@ param_clear (GstMIKEYPayloadSPParam * param)
* Set the Security Policy parameters for @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_sp_set (GstMIKEYPayload * payload,
@@ -372,10 +403,12 @@ gst_mikey_payload_sp_set (GstMIKEYPayload * payload,
return TRUE;
}
-static void
-gst_mikey_payload_sp_clear (GstMIKEYPayloadSP * payload)
+static gboolean
+gst_mikey_payload_sp_dispose (GstMIKEYPayloadSP * payload)
{
FREE_ARRAY (payload->params);
+
+ return TRUE;
}
static GstMIKEYPayloadSP *
@@ -398,10 +431,12 @@ gst_mikey_payload_sp_copy (const GstMIKEYPayloadSP * payload)
* gst_mikey_payload_sp_get_n_params:
* @payload: a #GstMIKEYPayload
*
- * Get the number of security policy parameters in a #GST_MIKEY_PT_SP
+ * Get the number of security policy parameters in a %GST_MIKEY_PT_SP
* @payload.
*
* Returns: the number of parameters in @payload
+ *
+ * Since: 1.4
*/
guint
gst_mikey_payload_sp_get_n_params (const GstMIKEYPayload * payload)
@@ -420,10 +455,12 @@ gst_mikey_payload_sp_get_n_params (const GstMIKEYPayload * payload)
* @payload: a #GstMIKEYPayload
* @idx: an index
*
- * Get the Security Policy parameter in a #GST_MIKEY_PT_SP @payload
+ * Get the Security Policy parameter in a %GST_MIKEY_PT_SP @payload
* at @idx.
*
* Returns: the #GstMIKEYPayloadSPParam at @idx in @payload
+ *
+ * Since: 1.4
*/
const GstMIKEYPayloadSPParam *
gst_mikey_payload_sp_get_param (const GstMIKEYPayload * payload, guint idx)
@@ -444,10 +481,12 @@ gst_mikey_payload_sp_get_param (const GstMIKEYPayload * payload, guint idx)
* @payload: a #GstMIKEYPayload
* @idx: an index
*
- * Remove the Security Policy parameters from a #GST_MIKEY_PT_SP
+ * Remove the Security Policy parameters from a %GST_MIKEY_PT_SP
* @payload at @idx.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_sp_remove_param (GstMIKEYPayload * payload, guint idx)
@@ -468,12 +507,14 @@ gst_mikey_payload_sp_remove_param (GstMIKEYPayload * payload, guint idx)
* @payload: a #GstMIKEYPayload
* @type: a type
* @len: a length
- * @val: @len bytes of data
+ * @val: (array length=len): @len bytes of data
*
- * Add a new parameter to the #GST_MIKEY_PT_SP @payload with @type, @len
+ * Add a new parameter to the %GST_MIKEY_PT_SP @payload with @type, @len
* and @val.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_sp_add_param (GstMIKEYPayload * payload,
@@ -499,11 +540,13 @@ gst_mikey_payload_sp_add_param (GstMIKEYPayload * payload,
* gst_mikey_payload_rand_set:
* @payload: a #GstMIKEYPayload
* @len: the length of @rand
- * @rand: random values
+ * @rand: (array length=len): random values
*
- * Set the random values in a #GST_MIKEY_PT_RAND @payload.
+ * Set the random values in a %GST_MIKEY_PT_RAND @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_rand_set (GstMIKEYPayload * payload, guint8 len,
@@ -520,10 +563,12 @@ gst_mikey_payload_rand_set (GstMIKEYPayload * payload, guint8 len,
return TRUE;
}
-static void
-gst_mikey_payload_rand_clear (GstMIKEYPayloadRAND * payload)
+static gboolean
+gst_mikey_payload_rand_dispose (GstMIKEYPayloadRAND * payload)
{
FREE_MEMDUP (payload->rand);
+
+ return TRUE;
}
static GstMIKEYPayloadRAND *
@@ -544,12 +589,14 @@ gst_mikey_payload_rand_copy (const GstMIKEYPayloadRAND * payload)
* @payload: a #GstMIKEYPayload
* @key_type: a #GstMIKEYKeyDataType
* @key_len: the length of @key_data
- * @key_data: the key of type @key_type
+ * @key_data: (array length=key_len): the key of type @key_type
*
* Set @key_len bytes of @key_data of type @key_type as the key for the
- * #GST_MIKEY_PT_KEY_DATA @payload.
+ * %GST_MIKEY_PT_KEY_DATA @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_key_data_set_key (GstMIKEYPayload * payload,
@@ -572,12 +619,14 @@ gst_mikey_payload_key_data_set_key (GstMIKEYPayload * payload,
* gst_mikey_payload_key_data_set_salt:
* @payload: a #GstMIKEYPayload
* @salt_len: the length of @salt_data
- * @salt_data: the salt
+ * @salt_data: (array length=salt_len) (allow-none): the salt
*
* Set the salt key data. If @salt_len is 0 and @salt_data is %NULL, the
* salt data will be removed.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_key_data_set_salt (GstMIKEYPayload * payload,
@@ -602,11 +651,13 @@ gst_mikey_payload_key_data_set_salt (GstMIKEYPayload * payload,
* gst_mikey_payload_key_data_set_spi:
* @payload: a #GstMIKEYPayload
* @spi_len: the length of @spi_data
- * @spi_data: the SPI/MKI data
+ * @spi_data: (array length=spi_len): the SPI/MKI data
*
- * Set the SPI/MKI validity in the #GST_MIKEY_PT_KEY_DATA @payload.
+ * Set the SPI/MKI validity in the %GST_MIKEY_PT_KEY_DATA @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_key_data_set_spi (GstMIKEYPayload * payload,
@@ -632,13 +683,15 @@ gst_mikey_payload_key_data_set_spi (GstMIKEYPayload * payload,
* gst_mikey_payload_key_data_set_interval:
* @payload: a #GstMIKEYPayload
* @vf_len: the length of @vf_data
- * @vf_data: the Valid From data
+ * @vf_data: (array length=vf_data): the Valid From data
* @vt_len: the length of @vt_data
- * @vt_data: the Valid To data
+ * @vt_data: (array length=vt_len): the Valid To data
*
- * Set the key validity period in the #GST_MIKEY_PT_KEY_DATA @payload.
+ * Set the key validity period in the %GST_MIKEY_PT_KEY_DATA @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_payload_key_data_set_interval (GstMIKEYPayload * payload,
@@ -663,13 +716,15 @@ gst_mikey_payload_key_data_set_interval (GstMIKEYPayload * payload,
return TRUE;
}
-static void
-gst_mikey_payload_key_data_clear (GstMIKEYPayloadKeyData * payload)
+static gboolean
+gst_mikey_payload_key_data_dispose (GstMIKEYPayloadKeyData * payload)
{
FREE_MEMDUP (payload->key_data);
FREE_MEMDUP (payload->salt_data);
FREE_MEMDUP (payload->kv_data[0]);
FREE_MEMDUP (payload->kv_data[1]);
+
+ return TRUE;
}
static GstMIKEYPayloadKeyData *
@@ -695,37 +750,46 @@ gst_mikey_payload_key_data_copy (const GstMIKEYPayloadKeyData * payload)
/* General Extension Payload */
+static void
+mikey_payload_free (GstMIKEYPayload * payload)
+{
+ g_slice_free1 (payload->len, payload);
+}
+
+
/**
* gst_mikey_payload_new:
* @type: a #GstMIKEYPayloadType
*
* Make a new #GstMIKEYPayload with @type.
*
- * Returns: a new #GstMIKEYPayload or %NULL on failure.
+ * Returns: (nullable): a new #GstMIKEYPayload or %NULL on failure.
+ *
+ * Since: 1.4
*/
GstMIKEYPayload *
gst_mikey_payload_new (GstMIKEYPayloadType type)
{
guint len = 0;
- GstMIKEYPayloadClearFunc clear;
- GstMIKEYPayloadCopyFunc copy;
GstMIKEYPayload *result;
+ GstMiniObjectCopyFunction copy;
+ GstMiniObjectDisposeFunction clear;
switch (type) {
case GST_MIKEY_PT_KEMAC:
len = sizeof (GstMIKEYPayloadKEMAC);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_kemac_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_kemac_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_kemac_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_kemac_copy;
break;
case GST_MIKEY_PT_T:
len = sizeof (GstMIKEYPayloadT);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_t_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_t_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_t_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_t_copy;
break;
case GST_MIKEY_PT_PKE:
len = sizeof (GstMIKEYPayloadPKE);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_pke_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_pke_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_pke_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_pke_copy;
break;
case GST_MIKEY_PT_DH:
case GST_MIKEY_PT_SIGN:
@@ -735,20 +799,20 @@ gst_mikey_payload_new (GstMIKEYPayloadType type)
case GST_MIKEY_PT_V:
case GST_MIKEY_PT_SP:
len = sizeof (GstMIKEYPayloadSP);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_sp_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_sp_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_sp_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_sp_copy;
break;
case GST_MIKEY_PT_RAND:
len = sizeof (GstMIKEYPayloadRAND);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_rand_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_rand_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_rand_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_rand_copy;
break;
case GST_MIKEY_PT_ERR:
break;
case GST_MIKEY_PT_KEY_DATA:
len = sizeof (GstMIKEYPayloadKeyData);
- clear = (GstMIKEYPayloadClearFunc) gst_mikey_payload_key_data_clear;
- copy = (GstMIKEYPayloadCopyFunc) gst_mikey_payload_key_data_copy;
+ clear = (GstMiniObjectDisposeFunction) gst_mikey_payload_key_data_dispose;
+ copy = (GstMiniObjectCopyFunction) gst_mikey_payload_key_data_copy;
break;
case GST_MIKEY_PT_GEN_EXT:
case GST_MIKEY_PT_LAST:
@@ -758,55 +822,47 @@ gst_mikey_payload_new (GstMIKEYPayloadType type)
return NULL;
result = g_slice_alloc0 (len);
+ gst_mini_object_init (GST_MINI_OBJECT_CAST (result),
+ 0, GST_TYPE_MIKEY_PAYLOAD, copy, clear,
+ (GstMiniObjectFreeFunction) mikey_payload_free);
result->type = type;
result->len = len;
- result->clear_func = clear;
- result->copy_func = copy;
return result;
}
-/**
- * gst_mikey_payload_copy:
- * @payload: a #GstMIKEYPayload
- *
- * Copy @payload.
- *
- * Returns: a new #GstMIKEYPayload that is a copy of @payload
- */
-GstMIKEYPayload *
-gst_mikey_payload_copy (const GstMIKEYPayload * payload)
+static GstMIKEYMessage *
+mikey_message_copy (GstMIKEYMessage * msg)
{
- g_return_val_if_fail (payload != NULL, NULL);
- g_return_val_if_fail (payload->copy_func != NULL, NULL);
+ GstMIKEYMessage *copy;
+ guint i, len;
- return payload->copy_func (payload);
-}
+ copy = gst_mikey_message_new ();
-/**
- * gst_mikey_payload_free:
- * @payload: a #GstMIKEYPayload
- *
- * Free @payload
- *
- * Returns: %TRUE on success
- */
-gboolean
-gst_mikey_payload_free (GstMIKEYPayload * payload)
-{
- g_return_val_if_fail (payload != NULL, FALSE);
+ gst_mikey_message_set_info (copy, msg->version, msg->type, msg->V,
+ msg->prf_func, msg->CSB_id, msg->map_type);
- if (payload->clear_func)
- payload->clear_func (payload);
- g_slice_free1 (payload->len, payload);
+ len = msg->map_info->len;
+ for (i = 0; i < len; i++) {
+ const GstMIKEYMapSRTP *srtp = gst_mikey_message_get_cs_srtp (msg, i);
+ gst_mikey_message_add_cs_srtp (copy, srtp->policy, srtp->ssrc, srtp->roc);
+ }
- return TRUE;
+ len = msg->payloads->len;
+ for (i = 0; i < len; i++) {
+ const GstMIKEYPayload *pay = gst_mikey_message_get_payload (msg, i);
+ gst_mikey_message_add_payload (copy, gst_mikey_payload_copy (pay));
+ }
+ return copy;
}
static void
-payload_destroy (GstMIKEYPayload ** payload)
+mikey_message_free (GstMIKEYMessage * msg)
{
- gst_mikey_payload_free (*payload);
+ FREE_ARRAY (msg->map_info);
+ FREE_ARRAY (msg->payloads);
+
+ g_slice_free (GstMIKEYMessage, msg);
}
/**
@@ -815,6 +871,8 @@ payload_destroy (GstMIKEYPayload ** payload)
* Make a new MIKEY message.
*
* Returns: a new #GstMIKEYMessage on success
+ *
+ * Since: 1.4
*/
GstMIKEYMessage *
gst_mikey_message_new (void)
@@ -822,6 +880,10 @@ gst_mikey_message_new (void)
GstMIKEYMessage *result;
result = g_slice_new0 (GstMIKEYMessage);
+ gst_mini_object_init (GST_MINI_OBJECT_CAST (result),
+ 0, GST_TYPE_MIKEY_MESSAGE,
+ (GstMiniObjectCopyFunction) mikey_message_copy, NULL,
+ (GstMiniObjectFreeFunction) mikey_message_free);
INIT_ARRAY (result->map_info, GstMIKEYMapSRTP, NULL);
INIT_ARRAY (result->payloads, GstMIKEYPayload *, payload_destroy);
@@ -838,6 +900,8 @@ gst_mikey_message_new (void)
* Make a new #GstMIKEYMessage from @bytes.
*
* Returns: a new #GstMIKEYMessage
+ *
+ * Since: 1.4
*/
GstMIKEYMessage *
gst_mikey_message_new_from_bytes (GBytes * bytes, GstMIKEYDecryptInfo * info,
@@ -853,23 +917,6 @@ gst_mikey_message_new_from_bytes (GBytes * bytes, GstMIKEYDecryptInfo * info,
}
/**
- * gst_mikey_message_free:
- * @msg: a #GstMIKEYMessage
- *
- * Free all resources allocated in @msg.
- */
-void
-gst_mikey_message_free (GstMIKEYMessage * msg)
-{
- g_return_if_fail (msg != NULL);
-
- FREE_ARRAY (msg->map_info);
- FREE_ARRAY (msg->payloads);
-
- g_slice_free (GstMIKEYMessage, msg);
-}
-
-/**
* gst_mikey_message_set_info:
* @msg: a #GstMIKEYMessage
* @version: a version
@@ -882,6 +929,8 @@ gst_mikey_message_free (GstMIKEYMessage * msg)
* Set the information in @msg.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_set_info (GstMIKEYMessage * msg, guint8 version,
@@ -907,6 +956,8 @@ gst_mikey_message_set_info (GstMIKEYMessage * msg, guint8 version,
* Get the number of crypto sessions in @msg.
*
* Returns: the number of crypto sessions
+ *
+ * Since: 1.4
*/
guint
gst_mikey_message_get_n_cs (const GstMIKEYMessage * msg)
@@ -924,6 +975,8 @@ gst_mikey_message_get_n_cs (const GstMIKEYMessage * msg)
* Get the policy information of @msg at @idx.
*
* Returns: a #GstMIKEYMapSRTP
+ *
+ * Since: 1.4
*/
const GstMIKEYMapSRTP *
gst_mikey_message_get_cs_srtp (const GstMIKEYMessage * msg, guint idx)
@@ -948,6 +1001,8 @@ gst_mikey_message_get_cs_srtp (const GstMIKEYMessage * msg, guint idx)
* When @idx is -1, the policy will be appended.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_insert_cs_srtp (GstMIKEYMessage * msg, gint idx,
@@ -975,6 +1030,8 @@ gst_mikey_message_insert_cs_srtp (GstMIKEYMessage * msg, gint idx,
* Replace a Crypto Session map for SRTP in @msg at @idx with @map.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_replace_cs_srtp (GstMIKEYMessage * msg, gint idx,
@@ -998,6 +1055,8 @@ gst_mikey_message_replace_cs_srtp (GstMIKEYMessage * msg, gint idx,
* Remove the SRTP policy at @idx.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_remove_cs_srtp (GstMIKEYMessage * msg, gint idx)
@@ -1021,6 +1080,8 @@ gst_mikey_message_remove_cs_srtp (GstMIKEYMessage * msg, gint idx)
* Add a Crypto policy for SRTP to @msg.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_cs_srtp (GstMIKEYMessage * msg, guint8 policy,
@@ -1046,6 +1107,8 @@ gst_mikey_message_add_cs_srtp (GstMIKEYMessage * msg, guint8 policy,
* Get the number of payloads in @msg.
*
* Returns: the number of payloads in @msg
+ *
+ * Since: 1.4
*/
guint
gst_mikey_message_get_n_payloads (const GstMIKEYMessage * msg)
@@ -1062,7 +1125,10 @@ gst_mikey_message_get_n_payloads (const GstMIKEYMessage * msg)
*
* Get the #GstMIKEYPayload at @idx in @msg
*
- * Returns: the #GstMIKEYPayload at @idx
+ * Returns: (transfer none): the #GstMIKEYPayload at @idx. The payload
+ * remains valid for as long as it is part of @msg.
+ *
+ * Since: 1.4
*/
const GstMIKEYPayload *
gst_mikey_message_get_payload (const GstMIKEYMessage * msg, guint idx)
@@ -1084,6 +1150,8 @@ gst_mikey_message_get_payload (const GstMIKEYMessage * msg, guint idx)
* Find the @nth occurence of the payload with @type in @msg.
*
* Returns: the @nth #GstMIKEYPayload of @type.
+ *
+ * Since: 1.4
*/
const GstMIKEYPayload *
gst_mikey_message_find_payload (const GstMIKEYMessage * msg,
@@ -1115,6 +1183,8 @@ gst_mikey_message_find_payload (const GstMIKEYMessage * msg,
* Remove the payload in @msg at @idx
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_remove_payload (GstMIKEYMessage * msg, guint idx)
@@ -1131,12 +1201,14 @@ gst_mikey_message_remove_payload (GstMIKEYMessage * msg, guint idx)
* gst_mikey_message_insert_payload:
* @msg: a #GstMIKEYMessage
* @idx: an index
- * @payload: a #GstMIKEYPayload
+ * @payload: (transfer full): a #GstMIKEYPayload
*
* Insert the @payload at index @idx in @msg. If @idx is -1, the payload
* will be appended to @msg.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_insert_payload (GstMIKEYMessage * msg, guint idx,
@@ -1157,11 +1229,13 @@ gst_mikey_message_insert_payload (GstMIKEYMessage * msg, guint idx,
/**
* gst_mikey_message_add_payload:
* @msg: a #GstMIKEYMessage
- * @payload: a #GstMIKEYPayload
+ * @payload: (transfer full): a #GstMIKEYPayload
*
* Add a new payload to @msg.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_payload (GstMIKEYMessage * msg, GstMIKEYPayload * payload)
@@ -1173,11 +1247,13 @@ gst_mikey_message_add_payload (GstMIKEYMessage * msg, GstMIKEYPayload * payload)
* gst_mikey_message_replace_payload:
* @msg: a #GstMIKEYMessage
* @idx: an index
- * @payload: a #GstMIKEYPayload
+ * @payload: (transfer full): a #GstMIKEYPayload
*
* Replace the payload at @idx in @msg with @payload.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_replace_payload (GstMIKEYMessage * msg, guint idx,
@@ -1190,7 +1266,7 @@ gst_mikey_message_replace_payload (GstMIKEYMessage * msg, guint idx,
g_return_val_if_fail (msg->payloads->len > idx, FALSE);
p = g_array_index (msg->payloads, GstMIKEYPayload *, idx);
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
g_array_index (msg->payloads, GstMIKEYPayload *, idx) = payload;
return TRUE;
@@ -1201,11 +1277,13 @@ gst_mikey_message_replace_payload (GstMIKEYMessage * msg, guint idx,
* @msg: a #GstMIKEYMessage
* @C: envelope key cache indicator
* @data_len: the length of @data
- * @data: the encrypted envelope key
+ * @data: (array length=data_len): the encrypted envelope key
*
* Add a new PKE payload to @msg with the given parameters.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_pke (GstMIKEYMessage * msg, GstMIKEYCacheType C,
@@ -1217,7 +1295,7 @@ gst_mikey_message_add_pke (GstMIKEYMessage * msg, GstMIKEYCacheType C,
p = gst_mikey_payload_new (GST_MIKEY_PT_PKE);
if (!gst_mikey_payload_pke_set (p, C, data_len, data)) {
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
return FALSE;
}
@@ -1228,11 +1306,13 @@ gst_mikey_message_add_pke (GstMIKEYMessage * msg, GstMIKEYCacheType C,
* gst_mikey_message_add_t:
* @msg: a #GstMIKEYMessage
* @type: specifies the timestamp type used
- * @ts_value: The timestamp value of the specified @type
+ * @ts_value: (array): The timestamp value of the specified @type
*
* Add a new T payload to @msg with the given parameters.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_t (GstMIKEYMessage * msg, GstMIKEYTSType type,
@@ -1244,7 +1324,7 @@ gst_mikey_message_add_t (GstMIKEYMessage * msg, GstMIKEYTSType type,
p = gst_mikey_payload_new (GST_MIKEY_PT_T);
if (!gst_mikey_payload_t_set (p, type, ts_value)) {
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
return FALSE;
}
@@ -1259,6 +1339,8 @@ gst_mikey_message_add_t (GstMIKEYMessage * msg, GstMIKEYTSType type,
* in NTP-UTC format.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_t_now_ntp_utc (GstMIKEYMessage * msg)
@@ -1284,11 +1366,13 @@ gst_mikey_message_add_t_now_ntp_utc (GstMIKEYMessage * msg)
* gst_mikey_message_add_rand:
* @msg: a #GstMIKEYMessage
* @len: the length of @rand
- * @rand: random data
+ * @rand: (array length=len): random data
*
* Add a new RAND payload to @msg with the given parameters.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_rand (GstMIKEYMessage * msg, guint8 len,
@@ -1301,7 +1385,7 @@ gst_mikey_message_add_rand (GstMIKEYMessage * msg, guint8 len,
p = gst_mikey_payload_new (GST_MIKEY_PT_RAND);
if (!gst_mikey_payload_rand_set (p, len, rand)) {
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
return FALSE;
}
@@ -1316,6 +1400,8 @@ gst_mikey_message_add_rand (GstMIKEYMessage * msg, guint8 len,
* Add a new RAND payload to @msg with @len random bytes.
*
* Returns: %TRUE on success
+ *
+ * Since: 1.4
*/
gboolean
gst_mikey_message_add_rand_len (GstMIKEYMessage * msg, guint8 len)
@@ -1582,6 +1668,8 @@ payloads_to_bytes (GArray * payloads, GByteArray * arr, guint8 ** ptr,
* Convert @msg to a #GBytes.
*
* Returns: a new #GBytes for @msg.
+ *
+ * Since: 1.4
*/
GBytes *
gst_mikey_message_to_bytes (GstMIKEYMessage * msg, GstMIKEYEncryptInfo * info,
@@ -1943,21 +2031,21 @@ short_data:
{
GST_DEBUG ("not enough data");
if (p)
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
return FALSE;
}
invalid_data:
{
GST_DEBUG ("invalid data");
if (p)
- gst_mikey_payload_free (p);
+ gst_mikey_payload_unref (p);
return FALSE;
}
}
/**
* gst_mikey_message_new_from_data:
- * @data: bytes to read
+ * @data: (array length=size) (element-type guint8): bytes to read
* @size: length of @data
* @info: #GstMIKEYDecryptInfo
* @error: a #GError
@@ -1967,6 +2055,8 @@ invalid_data:
*
* Returns: a #GstMIKEYMessage on success or %NULL when parsing failed and
* @error will be set.
+ *
+ * Since: 1.4
*/
GstMIKEYMessage *
gst_mikey_message_new_from_data (gconstpointer data, gsize size,
@@ -2042,19 +2132,19 @@ gst_mikey_message_new_from_data (gconstpointer data, gsize size,
short_data:
{
GST_DEBUG ("not enough data");
- gst_mikey_message_free (msg);
+ gst_mikey_message_unref (msg);
return NULL;
}
unknown_version:
{
GST_DEBUG ("unknown version");
- gst_mikey_message_free (msg);
+ gst_mikey_message_unref (msg);
return NULL;
}
parse_error:
{
GST_DEBUG ("failed to parse");
- gst_mikey_message_free (msg);
+ gst_mikey_message_unref (msg);
return NULL;
}
}
diff --git a/gst-libs/gst/sdp/gstmikey.h b/gst-libs/gst/sdp/gstmikey.h
index 0ffeb2f..91d7be2 100644
--- a/gst-libs/gst/sdp/gstmikey.h
+++ b/gst-libs/gst/sdp/gstmikey.h
@@ -26,6 +26,9 @@
G_BEGIN_DECLS
+GType gst_mikey_message_get_type(void);
+#define GST_TYPE_MIKEY_MESSAGE (gst_mikey_message_get_type())
+
typedef struct _GstMIKEYMessage GstMIKEYMessage;
typedef struct _GstMIKEYEncryptInfo GstMIKEYEncryptInfo;
typedef struct _GstMIKEYDecryptInfo GstMIKEYDecryptInfo;
@@ -140,21 +143,8 @@ typedef struct {
typedef struct _GstMIKEYPayload GstMIKEYPayload;
-/**
- * GstMIKEYPayloadClearFunc:
- * @payload: a #GstMIKEYPayload
- *
- * Function used to clear a payload
- */
-typedef void (*GstMIKEYPayloadClearFunc) (GstMIKEYPayload *payload);
-
-/**
- * GstMIKEYPayloadCopyFunc:
- * @payload: a #GstMIKEYPayload
- *
- * Function used to copy a payload
- */
-typedef GstMIKEYPayload * (*GstMIKEYPayloadCopyFunc) (const GstMIKEYPayload *payload);
+GType gst_mikey_payload_get_type(void);
+#define GST_TYPE_MIKEY_PAYLOAD (gst_mikey_payload_get_type())
/**
* GstMIKEYPayload:
@@ -166,15 +156,71 @@ typedef GstMIKEYPayload * (*GstMIKEYPayloadCopyFunc) (const GstMIKEYPayload *pay
* Hold the common fields for all payloads
*/
struct _GstMIKEYPayload {
+ GstMiniObject mini_object;
+
GstMIKEYPayloadType type;
guint len;
- GstMIKEYPayloadClearFunc clear_func;
- GstMIKEYPayloadCopyFunc copy_func;
};
GstMIKEYPayload * gst_mikey_payload_new (GstMIKEYPayloadType type);
-GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload *payload);
-gboolean gst_mikey_payload_free (GstMIKEYPayload *payload);
+
+/**
+ * gst_mikey_payload_ref:
+ * @payload: The payload to refcount
+ *
+ * Increase the refcount of this payload.
+ *
+ * Returns: (transfer full): @payload (for convenience when doing assignments)
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_ref (GstMIKEYPayload * payload);
+#endif
+
+static inline GstMIKEYPayload *
+gst_mikey_payload_ref (GstMIKEYPayload * payload)
+{
+ return (GstMIKEYPayload *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (payload));
+}
+
+/**
+ * gst_mikey_payload_unref:
+ * @payload: (transfer full): the payload to refcount
+ *
+ * Decrease the refcount of an payload, freeing it if the refcount reaches 0.
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC void gst_mikey_payload_unref (GstMIKEYPayload * payload);
+#endif
+
+static inline void
+gst_mikey_payload_unref (GstMIKEYPayload * payload)
+{
+ gst_mini_object_unref (GST_MINI_OBJECT_CAST (payload));
+}
+
+/**
+ * gst_mikey_payload_copy:
+ * @payload: a #GstMIKEYPayload.
+ *
+ * Create a copy of the given payload.
+ *
+ * Returns: (transfer full): a new copy of @payload.
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload * buf);
+#endif
+
+static inline GstMIKEYPayload *
+gst_mikey_payload_copy (const GstMIKEYPayload * payload)
+{
+ return (GstMIKEYPayload *) gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (payload));
+}
/**
* GstMIKEYEncAlg:
@@ -491,6 +537,8 @@ gboolean gst_mikey_payload_key_data_set_interval (GstMIKEYPayload *payload,
*/
struct _GstMIKEYMessage
{
+ GstMiniObject mini_object;
+
guint8 version;
GstMIKEYType type;
gboolean V;
@@ -509,7 +557,64 @@ GstMIKEYMessage * gst_mikey_message_new_from_bytes (GBytes *bytes,
GError **error);
GBytes * gst_mikey_message_to_bytes (GstMIKEYMessage *msg, GstMIKEYEncryptInfo *info,
GError **error);
-void gst_mikey_message_free (GstMIKEYMessage *msg);
+/**
+ * gst_mikey_message_ref:
+ * @message: The message to refcount
+ *
+ * Increase the refcount of this message.
+ *
+ * Returns: (transfer full): @message (for convenience when doing assignments)
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_ref (GstMIKEYMessage * message);
+#endif
+
+static inline GstMIKEYMessage *
+gst_mikey_message_ref (GstMIKEYMessage * message)
+{
+ return (GstMIKEYMessage *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (message));
+}
+
+/**
+ * gst_mikey_message_unref:
+ * @message: (transfer full): the message to refcount
+ *
+ * Decrease the refcount of an message, freeing it if the refcount reaches 0.
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC void gst_mikey_message_unref (GstMIKEYMessage * message);
+#endif
+
+static inline void
+gst_mikey_message_unref (GstMIKEYMessage * message)
+{
+ gst_mini_object_unref (GST_MINI_OBJECT_CAST (message));
+}
+
+/**
+ * gst_mikey_message_copy:
+ * @message: a #GstMIKEYMessage.
+ *
+ * Create a copy of the given message.
+ *
+ * Returns: (transfer full): a new copy of @message.
+ *
+ * Since: 1.4
+ */
+#ifdef _FOOL_GTK_DOC_
+G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_copy (const GstMIKEYMessage * buf);
+#endif
+
+static inline GstMIKEYMessage *
+gst_mikey_message_copy (const GstMIKEYMessage * message)
+{
+ return (GstMIKEYMessage *) gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (message));
+}
+
gboolean gst_mikey_message_set_info (GstMIKEYMessage *msg,
guint8 version, GstMIKEYType type, gboolean V,
diff --git a/gst-libs/gst/sdp/sdp.h b/gst-libs/gst/sdp/sdp.h
index 0647bf6..c5cc089 100644
--- a/gst-libs/gst/sdp/sdp.h
+++ b/gst-libs/gst/sdp/sdp.h
@@ -24,5 +24,6 @@
#include <gst/sdp/gstsdp.h>
#include <gst/sdp/gstsdpmessage.h>
+#include <gst/sdp/gstmikey.h>
#endif /* __GST_SDP__H__ */
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index 9760619..95577d1 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -926,26 +926,46 @@ gst_video_decoder_parse_available (GstVideoDecoder * dec, gboolean at_eos,
GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_GET_CLASS (dec);
GstVideoDecoderPrivate *priv = dec->priv;
GstFlowReturn ret = GST_FLOW_OK;
- gsize start_size, available;
+ gsize was_available, available;
+ guint inactive = 0;
available = gst_adapter_available (priv->input_adapter);
- start_size = 0;
- while (ret == GST_FLOW_OK && ((available && start_size != available)
- || new_buffer)) {
+ while (available || new_buffer) {
new_buffer = FALSE;
/* current frame may have been parsed and handled,
* so we need to set up a new one when asking subclass to parse */
if (priv->current_frame == NULL)
priv->current_frame = gst_video_decoder_new_frame (dec);
- start_size = available;
+ was_available = available;
ret = decoder_class->parse (dec, priv->current_frame,
priv->input_adapter, at_eos);
+ if (ret != GST_FLOW_OK)
+ break;
+
+ /* if the subclass returned success (GST_FLOW_OK), it is expected
+ * to have collected and submitted a frame, i.e. it should have
+ * called gst_video_decoder_have_frame(), or at least consumed a
+ * few bytes through gst_video_decoder_add_to_frame().
+ *
+ * Otherwise, this is an implementation bug, and we error out
+ * after 2 failed attempts */
available = gst_adapter_available (priv->input_adapter);
+ if (!priv->current_frame || available != was_available)
+ inactive = 0;
+ else if (++inactive == 2)
+ goto error_inactive;
}
return ret;
+
+ /* ERRORS */
+error_inactive:
+ {
+ GST_ERROR_OBJECT (dec, "Failed to consume data. Error in subclass?");
+ return GST_FLOW_ERROR;
+ }
}
static GstFlowReturn
@@ -3720,7 +3740,7 @@ gst_video_decoder_set_needs_format (GstVideoDecoder * dec, gboolean enabled)
*
* Queries decoder required format handling.
*
- * Returns: TRUE if required format handling is enabled.
+ * Returns: %TRUE if required format handling is enabled.
*
* Since: 1.4
*/
diff --git a/gst-libs/gst/video/video-tile.c b/gst-libs/gst/video/video-tile.c
index 10954a5..dd40ee6 100644
--- a/gst-libs/gst/video/video-tile.c
+++ b/gst-libs/gst/video/video-tile.c
@@ -30,10 +30,12 @@
* Get the tile index of the tile at coordinates @x and @y in the tiled
* image of @x_tiles by @y_tiles.
*
- * Use this method when @mode is of type #GST_VIDEO_TILE_MODE_INDEXED.
+ * Use this method when @mode is of type %GST_VIDEO_TILE_MODE_INDEXED.
*
* Returns: the index of the tile at @x and @y in the tiled image of
* @x_tiles by @y_tiles.
+ *
+ * Since: 1.4
*/
guint
gst_video_tile_get_index (GstVideoTileMode mode, gint x, gint y,