diff --git a/ext/taglib/gstapev2mux.cc b/ext/taglib/gstapev2mux.cc index eb46f823ec..e69de7e256 100644 --- a/ext/taglib/gstapev2mux.cc +++ b/ext/taglib/gstapev2mux.cc @@ -71,7 +71,7 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", G_DEFINE_TYPE (GstApev2Mux, gst_apev2_mux, GST_TYPE_TAG_MUX); -static GstBuffer *gst_apev2_mux_render_tag (GstTagMux * mux, +static GstBuffer *gst_apev2_mux_render_start_tag (GstTagMux * mux, const GstTagList * taglist); static GstBuffer *gst_apev2_mux_render_end_tag (GstTagMux * mux, const GstTagList * taglist); @@ -82,7 +82,7 @@ gst_apev2_mux_class_init (GstApev2MuxClass * klass) GstElementClass *element_class = GST_ELEMENT_CLASS (klass); GST_TAG_MUX_CLASS (klass)->render_start_tag = - GST_DEBUG_FUNCPTR (gst_apev2_mux_render_tag); + GST_DEBUG_FUNCPTR (gst_apev2_mux_render_start_tag); GST_TAG_MUX_CLASS (klass)->render_end_tag = GST_DEBUG_FUNCPTR (gst_apev2_mux_render_end_tag); @@ -106,6 +106,29 @@ gst_apev2_mux_init (GstApev2Mux * apev2mux) /* nothing to do */ } +static gboolean +gst_apev2_mux_have_wavpack (GstApev2Mux * apev2mux) +{ + const GstStructure *s; + gboolean ret; + GstCaps *caps; + GstPad *sink; + + sink = gst_element_get_static_pad (GST_ELEMENT_CAST (apev2mux), "sink"); + caps = gst_pad_get_current_caps (sink); + gst_object_unref (sink); + + if (caps == NULL) + return FALSE; + + s = gst_caps_get_structure (caps, 0); + ret = gst_structure_has_name (s, "audio/x-wavpack"); + gst_caps_unref (caps); + + GST_LOG_OBJECT (apev2mux, "got wavpack input: %s", ret ? "yes" : "no"); + return ret; +} + static void add_one_tag (const GstTagList * list, const gchar * tag, gpointer user_data) { @@ -368,8 +391,20 @@ gst_apev2_mux_render_tag (GstTagMux * mux, const GstTagList * taglist) return buf; } +static GstBuffer * +gst_apev2_mux_render_start_tag (GstTagMux * mux, const GstTagList * taglist) +{ + if (gst_apev2_mux_have_wavpack (GST_APEV2_MUX (mux))) + return NULL; + + return gst_apev2_mux_render_tag (mux, taglist); +} + static GstBuffer * gst_apev2_mux_render_end_tag (GstTagMux * mux, const GstTagList * taglist) { + if (gst_apev2_mux_have_wavpack (GST_APEV2_MUX (mux))) + return gst_apev2_mux_render_tag (mux, taglist); + return NULL; }