tee: Check for the removed pad flag also in the slow pushing path
[platform/upstream/gstreamer.git] / gst / gsttaglist.c
index faa7252..56e6a46 100644 (file)
@@ -21,6 +21,7 @@
 
 /**
  * SECTION:gsttaglist
+ * @title: GstTagList
  * @short_description: List of tags and values used to describe media metadata
  *
  * List of tags and values used to describe media metadata.
@@ -221,6 +222,10 @@ _priv_gst_tag_initialize (void)
       _("composer"),
       _("person(s) who composed the recording"),
       gst_tag_merge_strings_with_comma);
+  gst_tag_register_static (GST_TAG_CONDUCTOR, GST_TAG_FLAG_META,
+      G_TYPE_STRING,
+      _("conductor"),
+      _("conductor/performer refinement"), gst_tag_merge_strings_with_comma);
   gst_tag_register_static (GST_TAG_DURATION, GST_TAG_FLAG_DECODED,
       G_TYPE_UINT64,
       _("duration"), _("length in GStreamer time units (nanoseconds)"), NULL);
@@ -401,6 +406,10 @@ _priv_gst_tag_initialize (void)
   gst_tag_register_static (GST_TAG_MIDI_BASE_NOTE, GST_TAG_FLAG_META,
       G_TYPE_UINT,
       _("midi-base-note"), _("Midi note number of the audio track."), NULL);
+  gst_tag_register_static (GST_TAG_PRIVATE_DATA, GST_TAG_FLAG_META,
+      GST_TYPE_SAMPLE,
+      _("private-data"), _("Private data"), gst_tag_merge_use_first);
+
 }
 
 /**
@@ -462,7 +471,7 @@ gst_tag_lookup (const gchar * tag_name)
 }
 
 /**
- * gst_tag_register:
+ * gst_tag_register: (skip)
  * @name: the name or identifier string
  * @flag: a flag describing the type of tag info
  * @type: the type this data is in
@@ -501,12 +510,12 @@ gst_tag_register (const gchar * name, GstTagFlag flag, GType type,
   g_return_if_fail (blurb != NULL);
   g_return_if_fail (type != 0 && type != GST_TYPE_LIST);
 
-  return gst_tag_register_static (g_intern_string (name), flag, type,
+  gst_tag_register_static (g_intern_string (name), flag, type,
       g_intern_string (nick), g_intern_string (blurb), func);
 }
 
 /**
- * gst_tag_register_static:
+ * gst_tag_register_static: (skip)
  * @name: the name or identifier string (string constant)
  * @flag: a flag describing the type of tag info
  * @type: the type this data is in
@@ -595,7 +604,7 @@ gst_tag_get_type (const gchar * tag)
  * Returns the human-readable name of this tag, You must not change or free
  * this string.
  *
- * Returns: the human-readable name of this tag
+ * Returns: (nullable): the human-readable name of this tag
  */
 const gchar *
 gst_tag_get_nick (const gchar * tag)
@@ -604,7 +613,11 @@ gst_tag_get_nick (const gchar * tag)
 
   g_return_val_if_fail (tag != NULL, NULL);
   info = gst_tag_lookup (tag);
-  g_return_val_if_fail (info != NULL, NULL);
+  if (!info) {
+    GST_WARNING ("Unknown tag: %s", tag);
+
+    return tag;
+  }
 
   return info->nick;
 }
@@ -616,7 +629,7 @@ gst_tag_get_nick (const gchar * tag)
  * Returns the human-readable description of this tag, You must not change or
  * free this string.
  *
- * Returns: the human-readable description of this tag
+ * Returns: (nullable): the human-readable description of this tag
  */
 const gchar *
 gst_tag_get_description (const gchar * tag)
@@ -706,6 +719,10 @@ __gst_tag_list_free (GstTagList * list)
 
   gst_structure_free (GST_TAG_LIST_STRUCTURE (list));
 
+#ifdef USE_POISONING
+  memset (list, 0xff, sizeof (GstTagListImpl));
+#endif
+
   g_slice_free1 (sizeof (GstTagListImpl), list);
 }
 
@@ -1286,7 +1303,7 @@ gst_tag_list_add_valist (GstTagList * list, GstTagMergeMode mode,
       g_warning ("%s: %s", G_STRLOC, error);
       g_free (error);
       /* we purposely leak the value here, it might not be
-       * in a sane state if an error condition occoured
+       * in a sane state if an error condition occurred
        */
       return;
     }
@@ -1370,6 +1387,7 @@ void
 gst_tag_list_remove_tag (GstTagList * list, const gchar * tag)
 {
   g_return_if_fail (GST_IS_TAG_LIST (list));
+  g_return_if_fail (gst_tag_list_is_writable (list));
   g_return_if_fail (tag != NULL);
 
   gst_structure_remove_field (GST_TAG_LIST_STRUCTURE (list), tag);
@@ -1626,6 +1644,18 @@ TAG_MERGE_FUNCS (int, gint, TRUE);
  */
 TAG_MERGE_FUNCS (uint, guint, TRUE);
 /**
+ * gst_tag_list_get_int64:
+ * @list: a #GstTagList to get the tag from
+ * @tag: tag to read out
+ * @value: (out): location for the result
+ *
+ * Copies the contents for the given tag into the value, merging multiple values
+ * into one if multiple values are associated with the tag.
+ *
+ * Returns: %TRUE, if a value was copied, %FALSE if the tag didn't exist in the
+ *              given list.
+ */
+/**
  * gst_tag_list_get_int64_index:
  * @list: a #GstTagList to get the tag from
  * @tag: tag to read out