Use new gst_element_class_set_static_metadata()
[platform/upstream/gstreamer.git] / ext / speex / gstspeexenc.c
index 8a881d5..f475cab 100644 (file)
@@ -139,8 +139,6 @@ static GstFlowReturn gst_speex_enc_handle_frame (GstAudioEncoder * enc,
     GstBuffer * in_buf);
 static gboolean gst_speex_enc_sink_event (GstAudioEncoder * enc,
     GstEvent * event);
-static GstFlowReturn
-gst_speex_enc_pre_push (GstAudioEncoder * benc, GstBuffer ** buffer);
 
 #define gst_speex_enc_parent_class parent_class
 G_DEFINE_TYPE_WITH_CODE (GstSpeexEnc, gst_speex_enc, GST_TYPE_AUDIO_ENCODER,
@@ -166,8 +164,7 @@ gst_speex_enc_class_init (GstSpeexEncClass * klass)
   base_class->stop = GST_DEBUG_FUNCPTR (gst_speex_enc_stop);
   base_class->set_format = GST_DEBUG_FUNCPTR (gst_speex_enc_set_format);
   base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_speex_enc_handle_frame);
-  base_class->event = GST_DEBUG_FUNCPTR (gst_speex_enc_sink_event);
-  base_class->pre_push = GST_DEBUG_FUNCPTR (gst_speex_enc_pre_push);
+  base_class->sink_event = GST_DEBUG_FUNCPTR (gst_speex_enc_sink_event);
 
   g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_QUALITY,
       g_param_spec_float ("quality", "Quality", "Encoding quality",
@@ -218,8 +215,8 @@ gst_speex_enc_class_init (GstSpeexEncClass * klass)
       gst_static_pad_template_get (&src_factory));
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&sink_factory));
-  gst_element_class_set_details_simple (gstelement_class, "Speex audio encoder",
-      "Codec/Encoder/Audio",
+  gst_element_class_set_static_metadata (gstelement_class,
+      "Speex audio encoder", "Codec/Encoder/Audio",
       "Encodes audio in Speex format", "Wim Taymans <wim@fluendo.com>");
 
   GST_DEBUG_CATEGORY_INIT (speexenc_debug, "speexenc", 0, "Speex encoder");
@@ -274,8 +271,6 @@ gst_speex_enc_stop (GstAudioEncoder * benc)
   speex_bits_destroy (&enc->bits);
   gst_tag_list_free (enc->tags);
   enc->tags = NULL;
-  g_slist_foreach (enc->headers, (GFunc) gst_buffer_unref, NULL);
-  enc->headers = NULL;
 
   gst_tag_setter_reset_tags (GST_TAG_SETTER (enc));
 
@@ -494,16 +489,6 @@ gst_speex_enc_setup (GstSpeexEnc * enc)
   return TRUE;
 }
 
-/* push out the buffer */
-static GstFlowReturn
-gst_speex_enc_push_buffer (GstSpeexEnc * enc, GstBuffer * buffer)
-{
-  GST_DEBUG_OBJECT (enc, "pushing output buffer of size %" G_GSIZE_FORMAT,
-      gst_buffer_get_size (buffer));
-
-  return gst_pad_push (GST_AUDIO_ENCODER_SRC_PAD (enc), buffer);
-}
-
 static gboolean
 gst_speex_enc_sink_event (GstAudioEncoder * benc, GstEvent * event)
 {
@@ -530,7 +515,7 @@ gst_speex_enc_sink_event (GstAudioEncoder * benc, GstEvent * event)
   }
 
   /* we only peeked, let base class handle it */
-  return GST_AUDIO_ENCODER_CLASS (parent_class)->event (benc, event);
+  return GST_AUDIO_ENCODER_CLASS (parent_class)->sink_event (benc, event);
 }
 
 static GstFlowReturn
@@ -699,6 +684,7 @@ gst_speex_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
     GstCaps *caps;
     guchar *data;
     gint data_len;
+    GList *headers;
 
     /* create header buffer */
     data = (guint8 *) speex_header_to_packet (&enc->header, &data_len);
@@ -722,11 +708,11 @@ gst_speex_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
 
     /* push out buffers */
     /* store buffers for later pre_push sending */
-    g_slist_foreach (enc->headers, (GFunc) gst_buffer_unref, NULL);
-    enc->headers = NULL;
+    headers = NULL;
     GST_DEBUG_OBJECT (enc, "storing header buffers");
-    enc->headers = g_slist_prepend (enc->headers, buf2);
-    enc->headers = g_slist_prepend (enc->headers, buf1);
+    headers = g_list_prepend (headers, buf2);
+    headers = g_list_prepend (headers, buf1);
+    gst_audio_encoder_set_headers (benc, headers);
 
     enc->header_sent = TRUE;
   }
@@ -739,36 +725,6 @@ gst_speex_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
   return ret;
 }
 
-static GstFlowReturn
-gst_speex_enc_pre_push (GstAudioEncoder * benc, GstBuffer ** buffer)
-{
-  GstSpeexEnc *enc;
-  GstFlowReturn ret = GST_FLOW_OK;
-
-  enc = GST_SPEEX_ENC (benc);
-
-  /* FIXME 0.11 ? get rid of this special ogg stuff and have it
-   * put and use 'codec data' in caps like anything else,
-   * with all the usual out-of-band advantage etc */
-  if (G_UNLIKELY (enc->headers)) {
-    GSList *header = enc->headers;
-
-    /* try to push all of these, if we lose one, might as well lose all */
-    while (header) {
-      if (ret == GST_FLOW_OK)
-        ret = gst_speex_enc_push_buffer (enc, header->data);
-      else
-        gst_speex_enc_push_buffer (enc, header->data);
-      header = g_slist_next (header);
-    }
-
-    g_slist_free (enc->headers);
-    enc->headers = NULL;
-  }
-
-  return ret;
-}
-
 static void
 gst_speex_enc_get_property (GObject * object, guint prop_id, GValue * value,
     GParamSpec * pspec)