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.
This commit is contained in:
Sebastian Dröge 2015-03-23 13:15:30 +01:00
parent 78634dc2c3
commit 6f33c20b00

View file

@ -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);