Merge branch 'master' into 0.11
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 10 Oct 2011 09:48:20 +0000 (11:48 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 10 Oct 2011 09:48:20 +0000 (11:48 +0200)
Conflicts:
ext/speex/gstspeexenc.c

1  2 
ext/speex/gstspeexenc.c

@@@ -132,11 -132,36 +132,13 @@@ static GstFlowReturn gst_speex_enc_hand
      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);
  
 -static void
 -gst_speex_enc_setup_interfaces (GType speexenc_type)
 -{
 -  static const GInterfaceInfo tag_setter_info = { NULL, NULL, NULL };
 -
 -  g_type_add_interface_static (speexenc_type, GST_TYPE_TAG_SETTER,
 -      &tag_setter_info);
 -
 -  GST_DEBUG_CATEGORY_INIT (speexenc_debug, "speexenc", 0, "Speex encoder");
 -}
 -
 -GST_BOILERPLATE_FULL (GstSpeexEnc, gst_speex_enc, GstAudioEncoder,
 -    GST_TYPE_AUDIO_ENCODER, gst_speex_enc_setup_interfaces);
 -
 -static void
 -gst_speex_enc_base_init (gpointer g_class)
 -{
 -  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
 -
 -  gst_element_class_add_pad_template (element_class,
 -      gst_static_pad_template_get (&src_factory));
 -  gst_element_class_add_pad_template (element_class,
 -      gst_static_pad_template_get (&sink_factory));
 -  gst_element_class_set_details_simple (element_class, "Speex audio encoder",
 -      "Codec/Encoder/Audio",
 -      "Encodes audio in Speex format", "Wim Taymans <wim@fluendo.com>");
 -}
 +#define gst_speex_enc_parent_class parent_class
 +G_DEFINE_TYPE_WITH_CODE (GstSpeexEnc, gst_speex_enc, GST_TYPE_AUDIO_ENCODER,
 +    G_IMPLEMENT_INTERFACE (GST_TYPE_TAG_SETTER, NULL);
 +    G_IMPLEMENT_INTERFACE (GST_TYPE_PRESET, NULL));
  
  static void
  gst_speex_enc_class_init (GstSpeexEncClass * klass)
@@@ -698,18 -707,18 +703,16 @@@ gst_speex_enc_handle_frame (GstAudioEnc
      /* negotiate with these caps */
      GST_DEBUG_OBJECT (enc, "here are the caps: %" GST_PTR_FORMAT, caps);
  
-     /* push out buffers */
-     ret = gst_speex_enc_push_buffer (enc, buf1);
-     if (ret != GST_FLOW_OK) {
-       gst_buffer_unref (buf2);
-       goto done;
-     }
-     ret = gst_speex_enc_push_buffer (enc, buf2);
 -    gst_buffer_set_caps (buf1, caps);
 -    gst_buffer_set_caps (buf2, caps);
+     gst_pad_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc), caps);
+     gst_caps_unref (caps);
  
-     if (ret != GST_FLOW_OK)
-       goto done;
+     /* push out buffers */
+     /* store buffers for later pre_push sending */
+     g_slist_foreach (enc->headers, (GFunc) gst_buffer_unref, NULL);
+     enc->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);
  
      enc->header_sent = TRUE;
    }