コード例 #1
0
/**
 * gst_tag_setter_get_tag_merge_mode:
 * @setter: a #GstTagSetter
 *
 * Queries the mode by which tags inside the setter are overwritten by tags
 * from events
 *
 * Returns: the merge mode used inside the element.
 */
GstTagMergeMode
gst_tag_setter_get_tag_merge_mode (GstTagSetter * setter)
{
    g_return_val_if_fail (GST_IS_TAG_SETTER (setter), FALSE);

    return gst_tag_setter_get_data (setter)->mode;
}
コード例 #2
0
/**
 * gst_tag_setter_get_tag_list:
 * @setter: a #GstTagSetter
 *
 * Returns the current list of tags the setter uses.  The list should not be
 * modified or freed.
 *
 * Returns: a current snapshot of the taglist used in the setter
 *          or NULL if none is used.
 */
G_CONST_RETURN GstTagList *
gst_tag_setter_get_tag_list (GstTagSetter * setter)
{
    g_return_val_if_fail (GST_IS_TAG_SETTER (setter), NULL);

    return gst_tag_setter_get_data (setter)->list;
}
コード例 #3
0
/**
 * gst_tag_setter_set_tag_merge_mode:
 * @setter: a #GstTagSetter
 * @mode: The mode with which tags are added
 *
 * Sets the given merge mode that is used for adding tags from events to tags
 * specified by this interface. The default is #GST_TAG_MERGE_KEEP, which keeps
 * the tags set with this interface and discards tags from events.
 */
void
gst_tag_setter_set_tag_merge_mode (GstTagSetter * setter, GstTagMergeMode mode)
{
    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));

    gst_tag_setter_get_data (setter)->mode = mode;
}
コード例 #4
0
/*
 * metadata_write_probe:
 * @pad: sink pad of metadata muxer
 * @buffer: received buffer
 * @u_data: image bin object
 *
 * Buffer probe that sets Xmp.dc.type and Xmp.dc.format tags
 * to metadata muxer based on preceding element src pad caps.
 *
 * Returns: TRUE always
 */
static gboolean
metadata_write_probe (GstPad * pad, GstBuffer * buffer, gpointer u_data)
{
  /* Add XMP tags */
  GstCameraBinImage *img = NULL;
  GstTagSetter *setter = NULL;
  GstPad *srcpad = NULL;
  GstCaps *caps = NULL;
  GstStructure *st = NULL;

  img = GST_CAMERABIN_IMAGE (u_data);

  g_return_val_if_fail (img != NULL, TRUE);

  if (GST_IS_TAG_SETTER (img->formatter)) {
    setter = GST_TAG_SETTER (img->formatter);
  }

  if (!setter) {
    GST_WARNING_OBJECT (img, "setting tags failed");
    goto done;
  }

  /* Xmp.dc.type tag */
  gst_tag_setter_add_tags (setter, GST_TAG_MERGE_REPLACE,
      GST_TAG_CODEC, "Image", NULL);
  /* Xmp.dc.format tag */
  if (img->enc) {
    srcpad = gst_element_get_static_pad (img->enc, "src");
  }
  GST_LOG_OBJECT (img, "srcpad:%" GST_PTR_FORMAT, srcpad);
  if (srcpad) {
    caps = gst_pad_get_negotiated_caps (srcpad);
    GST_LOG_OBJECT (img, "caps:%" GST_PTR_FORMAT, caps);
    if (caps) {
      /* If there are many structures, we can't know which one to use */
      if (gst_caps_get_size (caps) != 1) {
        GST_WARNING_OBJECT (img, "can't decide structure for format tag");
        goto done;
      }
      st = gst_caps_get_structure (caps, 0);
      if (st) {
        GST_DEBUG_OBJECT (img, "Xmp.dc.format:%s", gst_structure_get_name (st));
        gst_tag_setter_add_tags (setter, GST_TAG_MERGE_REPLACE,
            GST_TAG_VIDEO_CODEC, gst_structure_get_name (st), NULL);
      }
    }
  }
done:
  if (caps)
    gst_caps_unref (caps);
  if (srcpad)
    gst_object_unref (srcpad);

  return TRUE;
}
コード例 #5
0
ファイル: qtcammetadata.cpp プロジェクト: ballock/cameraplus
  GstTagSetter *setter() {
    if (!device || !device->d_ptr->cameraBin) {
      return 0;
    }

    if (!GST_IS_TAG_SETTER(device->d_ptr->cameraBin)) {
      return 0;
    }

    return GST_TAG_SETTER(gst_object_ref(device->d_ptr->cameraBin));
  }
コード例 #6
0
/**
 * gst_tag_setter_add_tag_values:
 * @setter: a #GstTagSetter
 * @mode: the mode to use
 * @tag: tag to set
 * @...: more tag / GValue pairs to set
 *
 * Adds the given tag / GValue pairs on the setter using the given merge mode.
 * The list must be terminated with NULL.
 */
void
gst_tag_setter_add_tag_values (GstTagSetter * setter, GstTagMergeMode mode,
                               const gchar * tag, ...)
{
    va_list args;

    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));

    va_start (args, tag);
    gst_tag_setter_add_tag_valist_values (setter, mode, tag, args);
    va_end (args);
}
コード例 #7
0
/**
 * gst_tag_setter_reset_tags:
 * @setter: a #GstTagSetter
 *
 * Reset the internal taglist. Elements should call this from within the
 * state-change handler.
 *
 * Since: 0.10.22
 */
void
gst_tag_setter_reset_tags (GstTagSetter * setter)
{
  GstTagData *data;

  g_return_if_fail (GST_IS_TAG_SETTER (setter));

  data = gst_tag_setter_get_data (setter);
  if (data->list) {
    gst_tag_list_free (data->list);
    data->list = NULL;
  }
}
コード例 #8
0
/**
 * gst_tag_setter_set_tag_merge_mode:
 * @setter: a #GstTagSetter
 * @mode: The mode with which tags are added
 *
 * Sets the given merge mode that is used for adding tags from events to tags
 * specified by this interface. The default is #GST_TAG_MERGE_KEEP, which keeps
 * the tags set with this interface and discards tags from events.
 */
void
gst_tag_setter_set_tag_merge_mode (GstTagSetter * setter, GstTagMergeMode mode)
{
    GstTagData *data;

    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));

    data = gst_tag_setter_get_data (setter);

    g_static_mutex_lock (&data->lock);
    data->mode = mode;
    g_static_mutex_unlock (&data->lock);
}
コード例 #9
0
/**
 * gst_tag_setter_add_tag_valist_values:
 * @setter: a #GstTagSetter
 * @mode: the mode to use
 * @tag: tag to set
 * @var_args: tag / GValue pairs to set
 *
 * Adds the given tag / GValue pairs on the setter using the given merge mode.
 * The list must be terminated with NULL.
 */
void
gst_tag_setter_add_tag_valist_values (GstTagSetter * setter,
                                      GstTagMergeMode mode, const gchar * tag, va_list var_args)
{
    GstTagData *data;

    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));

    data = gst_tag_setter_get_data (setter);
    if (!data->list)
        data->list = gst_tag_list_new ();

    gst_tag_list_add_valist_values (data->list, mode, tag, var_args);
}
コード例 #10
0
/**
 * gst_tag_setter_get_tag_merge_mode:
 * @setter: a #GstTagSetter
 *
 * Queries the mode by which tags inside the setter are overwritten by tags
 * from events
 *
 * Returns: the merge mode used inside the element.
 */
GstTagMergeMode
gst_tag_setter_get_tag_merge_mode (GstTagSetter * setter)
{
    GstTagMergeMode mode;
    GstTagData *data;

    g_return_val_if_fail (GST_IS_TAG_SETTER (setter), FALSE);

    data = gst_tag_setter_get_data (setter);

    g_static_mutex_lock (&data->lock);
    mode = data->mode;
    g_static_mutex_unlock (&data->lock);

    return mode;
}
コード例 #11
0
/**
 * gst_tag_setter_merge_tags:
 * @setter: a #GstTagSetter
 * @list: a tag list to merge from
 * @mode: the mode to merge with
 *
 * Merges the given list into the setter's list using the given mode.
 */
void
gst_tag_setter_merge_tags (GstTagSetter * setter, const GstTagList * list,
                           GstTagMergeMode mode)
{
    GstTagData *data;

    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));
    g_return_if_fail (GST_IS_TAG_LIST (list));

    data = gst_tag_setter_get_data (setter);
    if (data->list == NULL) {
        if (mode != GST_TAG_MERGE_KEEP_ALL)
            data->list = gst_tag_list_copy (list);
    } else {
        gst_tag_list_insert (data->list, list, mode);
    }
}
コード例 #12
0
/**
 * gst_tag_setter_add_tag_value:
 * @setter: a #GstTagSetter
 * @mode: the mode to use
 * @tag: tag to set
 * @value: GValue to set for the tag
 *
 * Adds the given tag / GValue pair on the setter using the given merge mode.
 *
 * Since: 0.10.24
 */
void
gst_tag_setter_add_tag_value (GstTagSetter * setter,
                              GstTagMergeMode mode, const gchar * tag, const GValue * value)
{
    GstTagData *data;

    g_return_if_fail (GST_IS_TAG_SETTER (setter));
    g_return_if_fail (GST_TAG_MODE_IS_VALID (mode));

    data = gst_tag_setter_get_data (setter);

    g_static_mutex_lock (&data->lock);

    if (!data->list)
        data->list = gst_tag_list_new ();

    gst_tag_list_add_value (data->list, mode, tag, value);

    g_static_mutex_unlock (&data->lock);
}