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,
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->sink_event = GST_DEBUG_FUNCPTR (gst_speex_enc_sink_event);
- base_class->pre_push = GST_DEBUG_FUNCPTR (gst_speex_enc_pre_push);
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_QUALITY,
g_param_spec_float ("quality", "Quality", "Encoding quality",
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));
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)
{
GstCaps *caps;
guchar *data;
gint data_len;
+ GList *headers;
/* create header buffer */
data = (guint8 *) speex_header_to_packet (&enc->header, &data_len);
/* 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;
}
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)