GST_END_TEST #ifdef HAVE_GIO_UNIX_2_0 static GSocketControlMessage * get_control_message_meta (GstBuffer * buf) { GstMeta *meta; gpointer iter_state = NULL; while ((meta = gst_buffer_iterate_meta (buf, &iter_state)) != NULL) { if (meta->info->api == GST_NET_CONTROL_MESSAGE_META_API_TYPE) return ((GstNetControlMessageMeta *) meta)->message; } fail ("Expected GSocketControlMessage attached to buffer"); return NULL; }
/** * gst_buffer_get_video_meta_id: * @buffer: a #GstBuffer * @id: a metadata id * * Find the #GstVideoMeta on @buffer with the given @id. * * Buffers can contain multiple #GstVideoMeta metadata items when dealing with * multiview buffers. * * Returns: the #GstVideoMeta with @id or %NULL when there is no such metadata * on @buffer. */ GstVideoMeta * gst_buffer_get_video_meta_id (GstBuffer * buffer, gint id) { gpointer state = NULL; GstMeta *meta; const GstMetaInfo *info = GST_VIDEO_META_INFO; while ((meta = gst_buffer_iterate_meta (buffer, &state))) { if (meta->info->api == info->api) { GstVideoMeta *vmeta = (GstVideoMeta *) meta; if (vmeta->id == id) return vmeta; } } return NULL; }
/** * gst_buffer_get_audio_downmix_meta_for_channels: * @buffer: a #GstBuffer * @to_position: (array length=to_channels): the channel positions of * the destination * @to_channels: The number of channels of the destination * * Find the #GstAudioDownmixMeta on @buffer for the given destination * channel positions. * * Returns: (transfer none): the #GstAudioDownmixMeta on @buffer. */ GstAudioDownmixMeta * gst_buffer_get_audio_downmix_meta_for_channels (GstBuffer * buffer, const GstAudioChannelPosition * to_position, gint to_channels) { gpointer state = NULL; GstMeta *meta; const GstMetaInfo *info = GST_AUDIO_DOWNMIX_META_INFO; while ((meta = gst_buffer_iterate_meta (buffer, &state))) { if (meta->info->api == info->api) { GstAudioDownmixMeta *ameta = (GstAudioDownmixMeta *) meta; if (ameta->to_channels == to_channels && memcmp (ameta->to_position, to_position, sizeof (GstAudioChannelPosition) * to_channels) == 0) return ameta; } } return NULL; }
/** * gst_buffer_get_video_meta: * @buffer: a #GstBuffer * * Find the #GstVideoMeta on @buffer with the lowest @id. * * Buffers can contain multiple #GstVideoMeta metadata items when dealing with * multiview buffers. * * Returns: (transfer none): the #GstVideoMeta with lowest id (usually 0) or %NULL when there * is no such metadata on @buffer. */ GstVideoMeta * gst_buffer_get_video_meta (GstBuffer * buffer) { gpointer state = NULL; GstVideoMeta *out = NULL; GstMeta *meta; const GstMetaInfo *info = GST_VIDEO_META_INFO; while ((meta = gst_buffer_iterate_meta (buffer, &state))) { if (meta->info->api == info->api) { GstVideoMeta *vmeta = (GstVideoMeta *) meta; if (vmeta->id == 0) return vmeta; /* Early out for id 0 */ if (out == NULL || vmeta->id < out->id) out = vmeta; } } return out; }