Blame gst/gststreams.c

Packit Service 963350
/* GStreamer
Packit Service 963350
 *
Packit Service 963350
 * Copyright (C) 2015 Centricular Ltd
Packit Service 963350
 *  @author: Edward Hervey <edward@centricular.com>
Packit Service 963350
 *  @author: Jan Schmidt <jan@centricular.com>
Packit Service 963350
 *
Packit Service 963350
 * gststreams.c: GstStream and GstStreamCollection object and methods
Packit Service 963350
 *
Packit Service 963350
 * This library is free software; you can redistribute it and/or
Packit Service 963350
 * modify it under the terms of the GNU Library General Public
Packit Service 963350
 * License as published by the Free Software Foundation; either
Packit Service 963350
 * version 2 of the License, or (at your option) any later version.
Packit Service 963350
 *
Packit Service 963350
 * This library is distributed in the hope that it will be useful,
Packit Service 963350
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 963350
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 963350
 * Library General Public License for more details.
Packit Service 963350
 *
Packit Service 963350
 * You should have received a copy of the GNU Library General Public
Packit Service 963350
 * License along with this library; if not, write to the
Packit Service 963350
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
Packit Service 963350
 * Boston, MA 02110-1301, USA.
Packit Service 963350
 *
Packit Service 963350
 * MT safe.
Packit Service 963350
 */
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * SECTION:gststreams
Packit Service 963350
 * @title: GstStreams
Packit Service 963350
 * @short_description: Base class for stream objects
Packit Service 963350
 *
Packit Service 963350
 * A #GstStream is a high-level object defining a stream of data which is, or
Packit Service 963350
 * can be, present in a #GstPipeline.
Packit Service 963350
 *
Packit Service 963350
 * It is defined by a unique identifier, a "Stream ID". A #GstStream does not
Packit Service 963350
 * automatically imply the stream is present within a pipeline or element.
Packit Service 963350
 *
Packit Service 963350
 * Any element that can introduce new streams in a pipeline should create the
Packit Service 963350
 * appropriate #GstStream object, and can convey that object via the
Packit Service 963350
 * %GST_EVENT_STREAM_START event and/or the #GstStreamCollection.
Packit Service 963350
 *
Packit Service 963350
 * Elements that do not modify the nature of the stream can add extra information
Packit Service 963350
 * on it (such as enrich the #GstCaps, or #GstTagList). This is typically done
Packit Service 963350
 * by parsing elements.
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
Packit Service 963350
#include "gst_private.h"
Packit Service 963350
Packit Service 963350
#include "gstenumtypes.h"
Packit Service 963350
#include "gstevent.h"
Packit Service 963350
#include "gststreams.h"
Packit Service 963350
Packit Service 963350
GST_DEBUG_CATEGORY_STATIC (streams_debug);
Packit Service 963350
#define GST_CAT_DEFAULT streams_debug
Packit Service 963350
Packit Service 963350
#define GST_STREAM_GET_PRIVATE(obj)  \
Packit Service 963350
   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_STREAM, GstStreamPrivate))
Packit Service 963350
Packit Service 963350
struct _GstStreamPrivate
Packit Service 963350
{
Packit Service 963350
  GstStreamFlags flags;
Packit Service 963350
  GstStreamType type;
Packit Service 963350
  GstTagList *tags;
Packit Service 963350
  GstCaps *caps;
Packit Service 963350
};
Packit Service 963350
Packit Service 963350
/* stream signals and properties */
Packit Service 963350
enum
Packit Service 963350
{
Packit Service 963350
  LAST_SIGNAL
Packit Service 963350
};
Packit Service 963350
Packit Service 963350
enum
Packit Service 963350
{
Packit Service 963350
  PROP_0,
Packit Service 963350
  PROP_STREAM_ID,
Packit Service 963350
  PROP_STREAM_FLAGS,
Packit Service 963350
  PROP_STREAM_TYPE,
Packit Service 963350
  PROP_TAGS,
Packit Service 963350
  PROP_CAPS,
Packit Service 963350
  PROP_LAST
Packit Service 963350
};
Packit Service 963350
Packit Service 963350
static GParamSpec *gst_stream_pspecs[PROP_LAST] = { 0 };
Packit Service 963350
Packit Service 963350
#if 0
Packit Service 963350
static guint gst_stream_signals[LAST_SIGNAL] = { 0 };
Packit Service 963350
#endif
Packit Service 963350
Packit Service 963350
static void gst_stream_finalize (GObject * object);
Packit Service 963350
Packit Service 963350
static void gst_stream_set_property (GObject * object, guint prop_id,
Packit Service 963350
    const GValue * value, GParamSpec * pspec);
Packit Service 963350
static void gst_stream_get_property (GObject * object, guint prop_id,
Packit Service 963350
    GValue * value, GParamSpec * pspec);
Packit Service 963350
Packit Service 963350
#define _do_init				\
Packit Service 963350
{ \
Packit Service 963350
  GST_DEBUG_CATEGORY_INIT (streams_debug, "streams", GST_DEBUG_BOLD, \
Packit Service 963350
      "debugging info for the stream and stream collection objects"); \
Packit Service 963350
  \
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
#define gst_stream_parent_class parent_class
Packit Service 963350
G_DEFINE_TYPE_WITH_CODE (GstStream, gst_stream, GST_TYPE_OBJECT, _do_init);
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_class_init (GstStreamClass * klass)
Packit Service 963350
{
Packit Service 963350
  GObjectClass *gobject_class;
Packit Service 963350
Packit Service 963350
  gobject_class = (GObjectClass *) klass;
Packit Service 963350
Packit Service 963350
  g_type_class_add_private (klass, sizeof (GstStreamPrivate));
Packit Service 963350
Packit Service 963350
  gobject_class->set_property = gst_stream_set_property;
Packit Service 963350
  gobject_class->get_property = gst_stream_get_property;
Packit Service 963350
Packit Service 963350
  /**
Packit Service 963350
   * GstStream:stream-id:
Packit Service 963350
   *
Packit Service 963350
   * The unique identifier of the #GstStream. Can only be set at construction
Packit Service 963350
   * time.
Packit Service 963350
   */
Packit Service 963350
  g_object_class_install_property (gobject_class, PROP_STREAM_ID,
Packit Service 963350
      g_param_spec_string ("stream-id", "Stream ID",
Packit Service 963350
          "The stream ID of the stream",
Packit Service 963350
          NULL,
Packit Service 963350
          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
Packit Service 963350
Packit Service 963350
  /**
Packit Service 963350
   * GstStream:flags:
Packit Service 963350
   *
Packit Service 963350
   * The #GstStreamFlags of the #GstStream. Can only be set at construction time.
Packit Service 963350
   **/
Packit Service 963350
  gst_stream_pspecs[PROP_STREAM_FLAGS] =
Packit Service 963350
      g_param_spec_flags ("stream-flags", "Stream Flags", "The stream flags",
Packit Service 963350
      GST_TYPE_STREAM_FLAGS, GST_STREAM_FLAG_NONE,
Packit Service 963350
      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
Packit Service 963350
  g_object_class_install_property (gobject_class, PROP_STREAM_FLAGS,
Packit Service 963350
      gst_stream_pspecs[PROP_STREAM_FLAGS]);
Packit Service 963350
Packit Service 963350
  /**
Packit Service 963350
   * GstStream:stream-type:
Packit Service 963350
   *
Packit Service 963350
   * The #GstStreamType of the #GstStream. Can only be set at construction time.
Packit Service 963350
   **/
Packit Service 963350
  gst_stream_pspecs[PROP_STREAM_TYPE] =
Packit Service 963350
      g_param_spec_flags ("stream-type", "Stream Type", "The type of stream",
Packit Service 963350
      GST_TYPE_STREAM_TYPE, GST_STREAM_TYPE_UNKNOWN,
Packit Service 963350
      G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
Packit Service 963350
  g_object_class_install_property (gobject_class, PROP_STREAM_TYPE,
Packit Service 963350
      gst_stream_pspecs[PROP_STREAM_TYPE]);
Packit Service 963350
Packit Service 963350
  /**
Packit Service 963350
   * GstStream:caps:
Packit Service 963350
   *
Packit Service 963350
   * The #GstCaps of the #GstStream.
Packit Service 963350
   **/
Packit Service 963350
  gst_stream_pspecs[PROP_CAPS] =
Packit Service 963350
      g_param_spec_boxed ("caps", "Caps", "The caps of the stream",
Packit Service 963350
      GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
Packit Service 963350
  g_object_class_install_property (gobject_class, PROP_CAPS,
Packit Service 963350
      gst_stream_pspecs[PROP_CAPS]);
Packit Service 963350
Packit Service 963350
  /**
Packit Service 963350
   * GstStream:tags:
Packit Service 963350
   *
Packit Service 963350
   * The #GstTagList of the #GstStream.
Packit Service 963350
   **/
Packit Service 963350
  gst_stream_pspecs[PROP_TAGS] =
Packit Service 963350
      g_param_spec_boxed ("tags", "Tags", "The tags of the stream",
Packit Service 963350
      GST_TYPE_TAG_LIST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
Packit Service 963350
  g_object_class_install_property (gobject_class, PROP_TAGS,
Packit Service 963350
      gst_stream_pspecs[PROP_TAGS]);
Packit Service 963350
Packit Service 963350
  gobject_class->finalize = gst_stream_finalize;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_init (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  stream->priv = GST_STREAM_GET_PRIVATE (stream);
Packit Service 963350
  stream->priv->type = GST_STREAM_TYPE_UNKNOWN;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_finalize (GObject * object)
Packit Service 963350
{
Packit Service 963350
  GstStream *stream = GST_STREAM_CAST (object);
Packit Service 963350
Packit Service 963350
  gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
Packit Service 963350
      (GstMiniObject *) NULL);
Packit Service 963350
  gst_caps_replace (&stream->priv->caps, NULL);
Packit Service 963350
  g_free ((gchar *) stream->stream_id);
Packit Service 963350
Packit Service 963350
  G_OBJECT_CLASS (parent_class)->finalize (object);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_new:
Packit Service 963350
 * @stream_id: (allow-none): the id for the new stream. If %NULL,
Packit Service 963350
 * a new one will be automatically generated
Packit Service 963350
 * @caps: (allow-none) (transfer none): the #GstCaps of the stream
Packit Service 963350
 * @type: the #GstStreamType of the stream
Packit Service 963350
 * @flags: the #GstStreamFlags of the stream
Packit Service 963350
 *
Packit Service 963350
 * Create a new #GstStream for the given @stream_id, @caps, @type
Packit Service 963350
 * and @flags
Packit Service 963350
 *
Packit Service 963350
 * Returns: (transfer full): The new #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
GstStream *
Packit Service 963350
gst_stream_new (const gchar * stream_id, GstCaps * caps, GstStreamType type,
Packit Service 963350
    GstStreamFlags flags)
Packit Service 963350
{
Packit Service 963350
  GstStream *stream;
Packit Service 963350
Packit Service 963350
  stream = g_object_new (GST_TYPE_STREAM, "stream-id", stream_id, "caps", caps,
Packit Service 963350
      "stream-type", type, "stream-flags", flags, NULL);
Packit Service 963350
Packit Service 963350
  /* Clear floating flag */
Packit Service 963350
  gst_object_ref_sink (stream);
Packit Service 963350
Packit Service 963350
  return stream;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_set_stream_id (GstStream * stream, const gchar * stream_id)
Packit Service 963350
{
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  g_assert (stream->stream_id == NULL);
Packit Service 963350
  if (stream_id)
Packit Service 963350
    stream->stream_id = g_strdup (stream_id);
Packit Service 963350
  else {
Packit Service 963350
    /* Create a randoom stream_id if NULL */
Packit Service 963350
    GST_FIXME_OBJECT (stream, "Creating random stream-id, consider "
Packit Service 963350
        "implementing a deterministic way of creating a stream-id");
Packit Service 963350
    stream->stream_id =
Packit Service 963350
        g_strdup_printf ("%08x%08x%08x%08x", g_random_int (), g_random_int (),
Packit Service 963350
        g_random_int (), g_random_int ());
Packit Service 963350
  }
Packit Service 963350
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_get_stream_id:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Returns the stream ID of @stream.
Packit Service 963350
 *
Packit Service 963350
 * Returns: (transfer none) (nullable): the stream ID of @stream. Only valid
Packit Service 963350
 * during the lifetime of @stream.
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
const gchar *
Packit Service 963350
gst_stream_get_stream_id (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  return stream->stream_id;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_set_stream_flags:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 * @flags: the flags to set on @stream
Packit Service 963350
 *
Packit Service 963350
 * Set the @flags for the @stream.
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
void
Packit Service 963350
gst_stream_set_stream_flags (GstStream * stream, GstStreamFlags flags)
Packit Service 963350
{
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  stream->priv->flags = flags;
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  g_object_notify_by_pspec (G_OBJECT (stream),
Packit Service 963350
      gst_stream_pspecs[PROP_STREAM_FLAGS]);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_get_stream_flags:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Retrieve the current stream flags for @stream
Packit Service 963350
 *
Packit Service 963350
 * Returns: The #GstStreamFlags for @stream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
GstStreamFlags
Packit Service 963350
gst_stream_get_stream_flags (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  GstStreamFlags res;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  res = stream->priv->flags;
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  return res;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_set_stream_type:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 * @stream_type: the type to set on @stream
Packit Service 963350
 *
Packit Service 963350
 * Set the stream type of @stream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
void
Packit Service 963350
gst_stream_set_stream_type (GstStream * stream, GstStreamType stream_type)
Packit Service 963350
{
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  stream->priv->type = stream_type;
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  g_object_notify_by_pspec (G_OBJECT (stream),
Packit Service 963350
      gst_stream_pspecs[PROP_STREAM_TYPE]);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_get_stream_type:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Retrieve the stream type for @stream
Packit Service 963350
 *
Packit Service 963350
 * Returns: The #GstStreamType for @stream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
GstStreamType
Packit Service 963350
gst_stream_get_stream_type (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  GstStreamType res;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  res = stream->priv->type;
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  return res;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_set_tags:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 * @tags: (transfer none) (allow-none): a #GstTagList
Packit Service 963350
 *
Packit Service 963350
 * Set the tags for the #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
void
Packit Service 963350
gst_stream_set_tags (GstStream * stream, GstTagList * tags)
Packit Service 963350
{
Packit Service 963350
  gboolean notify = FALSE;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  if (stream->priv->tags == NULL || tags == NULL
Packit Service 963350
      || !gst_tag_list_is_equal (stream->priv->tags, tags)) {
Packit Service 963350
    gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
Packit Service 963350
        (GstMiniObject *) tags);
Packit Service 963350
    notify = TRUE;
Packit Service 963350
  }
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  if (notify)
Packit Service 963350
    g_object_notify_by_pspec (G_OBJECT (stream), gst_stream_pspecs[PROP_TAGS]);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_get_tags:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Retrieve the tags for @stream, if any
Packit Service 963350
 *
Packit Service 963350
 * Returns: (transfer full) (nullable): The #GstTagList for @stream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
GstTagList *
Packit Service 963350
gst_stream_get_tags (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  GstTagList *res = NULL;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  if (stream->priv->tags)
Packit Service 963350
    res = gst_tag_list_ref (stream->priv->tags);
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  return res;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_set_caps:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 * @caps: (transfer none) (allow-none): a #GstCaps
Packit Service 963350
 *
Packit Service 963350
 * Set the caps for the #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
void
Packit Service 963350
gst_stream_set_caps (GstStream * stream, GstCaps * caps)
Packit Service 963350
{
Packit Service 963350
  gboolean notify = FALSE;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  if (stream->priv->caps == NULL || (caps
Packit Service 963350
          && !gst_caps_is_equal (stream->priv->caps, caps))) {
Packit Service 963350
    gst_caps_replace (&stream->priv->caps, caps);
Packit Service 963350
    notify = TRUE;
Packit Service 963350
  }
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  if (notify)
Packit Service 963350
    g_object_notify_by_pspec (G_OBJECT (stream), gst_stream_pspecs[PROP_CAPS]);
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_get_caps:
Packit Service 963350
 * @stream: a #GstStream
Packit Service 963350
 *
Packit Service 963350
 * Retrieve the caps for @stream, if any
Packit Service 963350
 *
Packit Service 963350
 * Returns: (transfer full) (nullable): The #GstCaps for @stream
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
GstCaps *
Packit Service 963350
gst_stream_get_caps (GstStream * stream)
Packit Service 963350
{
Packit Service 963350
  GstCaps *res = NULL;
Packit Service 963350
Packit Service 963350
  GST_OBJECT_LOCK (stream);
Packit Service 963350
  if (stream->priv->caps)
Packit Service 963350
    res = gst_caps_ref (stream->priv->caps);
Packit Service 963350
  GST_OBJECT_UNLOCK (stream);
Packit Service 963350
Packit Service 963350
  return res;
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_set_property (GObject * object, guint prop_id,
Packit Service 963350
    const GValue * value, GParamSpec * pspec)
Packit Service 963350
{
Packit Service 963350
  GstStream *stream;
Packit Service 963350
Packit Service 963350
  stream = GST_STREAM_CAST (object);
Packit Service 963350
Packit Service 963350
  switch (prop_id) {
Packit Service 963350
    case PROP_STREAM_ID:
Packit Service 963350
      gst_stream_set_stream_id (stream, g_value_get_string (value));
Packit Service 963350
      break;
Packit Service 963350
    case PROP_STREAM_FLAGS:
Packit Service 963350
      GST_OBJECT_LOCK (stream);
Packit Service 963350
      stream->priv->flags = g_value_get_flags (value);
Packit Service 963350
      GST_OBJECT_UNLOCK (stream);
Packit Service 963350
      break;
Packit Service 963350
    case PROP_STREAM_TYPE:
Packit Service 963350
      GST_OBJECT_LOCK (stream);
Packit Service 963350
      stream->priv->type = g_value_get_flags (value);
Packit Service 963350
      GST_OBJECT_UNLOCK (stream);
Packit Service 963350
      break;
Packit Service 963350
    case PROP_TAGS:
Packit Service 963350
      GST_OBJECT_LOCK (stream);
Packit Service 963350
      gst_mini_object_replace ((GstMiniObject **) & stream->priv->tags,
Packit Service 963350
          (GstMiniObject *) g_value_get_boxed (value));
Packit Service 963350
      GST_OBJECT_UNLOCK (stream);
Packit Service 963350
      break;
Packit Service 963350
    case PROP_CAPS:
Packit Service 963350
      GST_OBJECT_LOCK (stream);
Packit Service 963350
      gst_mini_object_replace ((GstMiniObject **) & stream->priv->caps,
Packit Service 963350
          (GstMiniObject *) g_value_get_boxed (value));
Packit Service 963350
      GST_OBJECT_UNLOCK (stream);
Packit Service 963350
      break;
Packit Service 963350
    default:
Packit Service 963350
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service 963350
      break;
Packit Service 963350
  }
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
static void
Packit Service 963350
gst_stream_get_property (GObject * object, guint prop_id,
Packit Service 963350
    GValue * value, GParamSpec * pspec)
Packit Service 963350
{
Packit Service 963350
  GstStream *stream;
Packit Service 963350
Packit Service 963350
  stream = GST_STREAM_CAST (object);
Packit Service 963350
Packit Service 963350
  switch (prop_id) {
Packit Service 963350
    case PROP_STREAM_ID:
Packit Service 963350
      g_value_set_string (value, gst_stream_get_stream_id (stream));
Packit Service 963350
      break;
Packit Service 963350
    case PROP_STREAM_FLAGS:
Packit Service 963350
      g_value_set_flags (value, gst_stream_get_stream_flags (stream));
Packit Service 963350
      break;
Packit Service 963350
    case PROP_STREAM_TYPE:
Packit Service 963350
      g_value_set_flags (value, gst_stream_get_stream_type (stream));
Packit Service 963350
      break;
Packit Service 963350
    case PROP_TAGS:
Packit Service 963350
      g_value_take_boxed (value, gst_stream_get_tags (stream));
Packit Service 963350
      break;
Packit Service 963350
    case PROP_CAPS:
Packit Service 963350
      g_value_take_boxed (value, gst_stream_get_caps (stream));
Packit Service 963350
      break;
Packit Service 963350
    default:
Packit Service 963350
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service 963350
      break;
Packit Service 963350
  }
Packit Service 963350
}
Packit Service 963350
Packit Service 963350
/**
Packit Service 963350
 * gst_stream_type_get_name:
Packit Service 963350
 * @stype: a #GstStreamType
Packit Service 963350
 *
Packit Service 963350
 * Get a descriptive string for a given #GstStreamType
Packit Service 963350
 *
Packit Service 963350
 * Returns: (nullable): A string describing the stream type
Packit Service 963350
 *
Packit Service 963350
 * Since: 1.10
Packit Service 963350
 */
Packit Service 963350
const gchar *
Packit Service 963350
gst_stream_type_get_name (GstStreamType stype)
Packit Service 963350
{
Packit Service 963350
  /* FIXME : Make this more flexible */
Packit Service 963350
  switch (stype) {
Packit Service 963350
    case GST_STREAM_TYPE_UNKNOWN:
Packit Service 963350
      return "unknown";
Packit Service 963350
    case GST_STREAM_TYPE_AUDIO:
Packit Service 963350
      return "audio";
Packit Service 963350
    case GST_STREAM_TYPE_VIDEO:
Packit Service 963350
      return "video";
Packit Service 963350
    case GST_STREAM_TYPE_CONTAINER:
Packit Service 963350
      return "container";
Packit Service 963350
    case GST_STREAM_TYPE_TEXT:
Packit Service 963350
      return "text";
Packit Service 963350
    default:
Packit Service 963350
      return NULL;
Packit Service 963350
  }
Packit Service 963350
Packit Service 963350
  return NULL;
Packit Service 963350
}