flacparse: Post AUDIO_CODEC tag
authorSebastian Dröge <sebastian@centricular.com>
Mon, 16 Dec 2013 08:58:31 +0000 (09:58 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 16 Dec 2013 09:03:06 +0000 (10:03 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=720512

gst/audioparsers/gstflacparse.c
gst/audioparsers/gstflacparse.h

index 6b48f5e..9f3347f 100644 (file)
@@ -58,9 +58,8 @@
 #include <string.h>
 #include <gst/tag/tag.h>
 #include <gst/audio/audio.h>
-
-#include <gst/base/gstbitreader.h>
-#include <gst/base/gstbytereader.h>
+#include <gst/base/base.h>
+#include <gst/pbutils/pbutils.h>
 
 GST_DEBUG_CATEGORY_STATIC (flacparse_debug);
 #define GST_CAT_DEFAULT flacparse_debug
@@ -338,6 +337,8 @@ gst_flac_parse_start (GstBaseParse * parse)
   flacparse->sample_number = 0;
   flacparse->strategy_checked = FALSE;
 
+  flacparse->sent_codec_tag = FALSE;
+
   /* "fLaC" marker */
   gst_base_parse_set_min_frame_size (GST_BASE_PARSE (flacparse), 4);
 
@@ -1690,6 +1691,25 @@ gst_flac_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
 {
   GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
 
+  if (!flacparse->sent_codec_tag) {
+    GstTagList *taglist;
+    GstCaps *caps;
+
+    taglist = gst_tag_list_new_empty ();
+
+    /* codec tag */
+    caps = gst_pad_get_current_caps (GST_BASE_PARSE_SRC_PAD (parse));
+    gst_pb_utils_add_codec_description_to_tag_list (taglist,
+        GST_TAG_AUDIO_CODEC, caps);
+    gst_caps_unref (caps);
+
+    gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
+        gst_event_new_tag (taglist));
+
+    /* also signals the end of first-frame processing */
+    flacparse->sent_codec_tag = TRUE;
+  }
+
   /* Push tags */
   if (flacparse->tags) {
     gst_pad_push_event (GST_BASE_PARSE_SRC_PAD (flacparse),
index 5113abc..3bd718e 100644 (file)
@@ -76,6 +76,8 @@ struct _GstFlacParse {
   guint64 sample_number;
   gboolean strategy_checked;
 
+  gboolean sent_codec_tag;
+
   GstTagList *tags;
   GstToc *toc;