From 9dd671abe3066669f41c5f87026bf5b24500c4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 23 Mar 2015 13:15:30 +0100 Subject: [PATCH] opusenc: Set output format immediately after creating the encoder instance We know the caps by then, there's no need to wait until we actually receive the first buffer. --- ext/opus/gstopusenc.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c index 5f897c82fd..ef1553fc3a 100644 --- a/ext/opus/gstopusenc.c +++ b/ext/opus/gstopusenc.c @@ -693,6 +693,8 @@ static gboolean gst_opus_enc_setup (GstOpusEnc * enc) { int error = OPUS_OK; + GstCaps *caps; + gboolean ret; #ifndef GST_DISABLE_GST_DEBUG GST_DEBUG_OBJECT (enc, @@ -732,7 +734,18 @@ gst_opus_enc_setup (GstOpusEnc * enc) GST_LOG_OBJECT (enc, "we have frame size %d", enc->frame_size); - return TRUE; + gst_opus_header_create_caps (&caps, NULL, enc->n_channels, + enc->n_stereo_streams, enc->sample_rate, enc->channel_mapping_family, + enc->decoding_channel_mapping, + gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc))); + + /* negotiate with these caps */ + GST_DEBUG_OBJECT (enc, "here are the caps: %" GST_PTR_FORMAT, caps); + + ret = gst_audio_encoder_set_output_format (GST_AUDIO_ENCODER (enc), caps); + gst_caps_unref (caps); + + return ret; encoder_creation_failed: GST_ERROR_OBJECT (enc, "Encoder creation failed"); @@ -962,22 +975,6 @@ gst_opus_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf) enc = GST_OPUS_ENC (benc); GST_DEBUG_OBJECT (enc, "handle_frame"); - - if (!gst_pad_has_current_caps (GST_AUDIO_ENCODER_SRC_PAD (benc))) { - GstCaps *caps; - - gst_opus_header_create_caps (&caps, NULL, enc->n_channels, - enc->n_stereo_streams, enc->sample_rate, enc->channel_mapping_family, - enc->decoding_channel_mapping, - gst_tag_setter_get_tag_list (GST_TAG_SETTER (enc))); - - /* negotiate with these caps */ - GST_DEBUG_OBJECT (enc, "here are the caps: %" GST_PTR_FORMAT, caps); - - gst_audio_encoder_set_output_format (benc, caps); - gst_caps_unref (caps); - } - GST_DEBUG_OBJECT (enc, "received buffer %p of %" G_GSIZE_FORMAT " bytes", buf, buf ? gst_buffer_get_size (buf) : 0);