diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c index 1580fc99e2..4b2df82925 100644 --- a/gst-libs/gst/audio/gstaudioencoder.c +++ b/gst-libs/gst/audio/gstaudioencoder.c @@ -490,21 +490,6 @@ gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf, GST_AUDIO_ENCODER_STREAM_LOCK (enc); - if (G_UNLIKELY (enc->priv->tags)) { - GstTagList *tags; - - /* add codec info to pending tags */ - tags = enc->priv->tags; - /* no more pending */ - enc->priv->tags = NULL; - gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_CODEC, - GST_PAD_CAPS (enc->srcpad)); - gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_AUDIO_CODEC, - GST_PAD_CAPS (enc->srcpad)); - GST_DEBUG_OBJECT (enc, "sending tags %" GST_PTR_FORMAT, tags); - gst_element_found_tags_for_pad (GST_ELEMENT (enc), enc->srcpad, tags); - } - GST_LOG_OBJECT (enc, "accepting %d bytes encoded data as %d samples", buf ? GST_BUFFER_SIZE (buf) : -1, samples); @@ -523,6 +508,22 @@ gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf, g_list_free (pending_events); } + /* send after pending events, which likely includes newsegment event */ + if (G_UNLIKELY (enc->priv->tags)) { + GstTagList *tags; + + /* add codec info to pending tags */ + tags = enc->priv->tags; + /* no more pending */ + enc->priv->tags = NULL; + gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_CODEC, + GST_PAD_CAPS (enc->srcpad)); + gst_pb_utils_add_codec_description_to_tag_list (tags, GST_TAG_AUDIO_CODEC, + GST_PAD_CAPS (enc->srcpad)); + GST_DEBUG_OBJECT (enc, "sending tags %" GST_PTR_FORMAT, tags); + gst_element_found_tags_for_pad (GST_ELEMENT (enc), enc->srcpad, tags); + } + /* remove corresponding samples from input */ if (samples < 0) samples = (enc->priv->offset / ctx->info.bpf);