mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-29 23:32:33 +00:00
audioencoder: Simplify pushing of pending events during negotiation
And also don't send the same caps twice.
This commit is contained in:
parent
daf017ced8
commit
96ab6db422
1 changed files with 19 additions and 17 deletions
|
@ -2529,11 +2529,11 @@ static gboolean
|
||||||
gst_audio_encoder_negotiate_default (GstAudioEncoder * enc)
|
gst_audio_encoder_negotiate_default (GstAudioEncoder * enc)
|
||||||
{
|
{
|
||||||
GstAudioEncoderClass *klass;
|
GstAudioEncoderClass *klass;
|
||||||
gboolean res = FALSE;
|
gboolean res = TRUE;
|
||||||
GstQuery *query = NULL;
|
GstQuery *query = NULL;
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
GstAllocationParams params;
|
GstAllocationParams params;
|
||||||
GstCaps *caps;
|
GstCaps *caps, *prevcaps;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), FALSE);
|
g_return_val_if_fail (GST_IS_AUDIO_ENCODER (enc), FALSE);
|
||||||
g_return_val_if_fail (GST_IS_CAPS (enc->priv->ctx.caps), FALSE);
|
g_return_val_if_fail (GST_IS_CAPS (enc->priv->ctx.caps), FALSE);
|
||||||
|
@ -2545,30 +2545,32 @@ gst_audio_encoder_negotiate_default (GstAudioEncoder * enc)
|
||||||
GST_DEBUG_OBJECT (enc, "Setting srcpad caps %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (enc, "Setting srcpad caps %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
if (enc->priv->pending_events) {
|
if (enc->priv->pending_events) {
|
||||||
GList *pending_events, *l;
|
GList **pending_events, *l;
|
||||||
gboolean set_caps = FALSE;
|
|
||||||
|
|
||||||
pending_events = enc->priv->pending_events;
|
pending_events = &enc->priv->pending_events;
|
||||||
enc->priv->pending_events = NULL;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (enc, "Pushing pending events");
|
GST_DEBUG_OBJECT (enc, "Pushing pending events");
|
||||||
for (l = pending_events; l; l = l->next) {
|
for (l = *pending_events; l;) {
|
||||||
GstEvent *event = GST_EVENT (l->data);
|
GstEvent *event = GST_EVENT (l->data);
|
||||||
|
GList *tmp;
|
||||||
|
|
||||||
if (GST_EVENT_TYPE (event) > GST_EVENT_CAPS && !set_caps) {
|
if (GST_EVENT_TYPE (event) < GST_EVENT_CAPS) {
|
||||||
res = gst_pad_set_caps (enc->srcpad, caps);
|
gst_audio_encoder_push_event (enc, l->data);
|
||||||
set_caps = TRUE;
|
tmp = l;
|
||||||
|
l = l->next;
|
||||||
|
*pending_events = g_list_delete_link (*pending_events, tmp);
|
||||||
|
} else {
|
||||||
|
l = l->next;
|
||||||
}
|
}
|
||||||
gst_audio_encoder_push_event (enc, l->data);
|
|
||||||
}
|
}
|
||||||
g_list_free (pending_events);
|
|
||||||
if (!set_caps) {
|
|
||||||
res = gst_pad_set_caps (enc->srcpad, caps);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
res = gst_pad_set_caps (enc->srcpad, caps);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prevcaps = gst_pad_get_current_caps (enc->srcpad);
|
||||||
|
if (!prevcaps || !gst_caps_is_equal (prevcaps, caps))
|
||||||
|
res = gst_pad_set_caps (enc->srcpad, caps);
|
||||||
|
if (prevcaps)
|
||||||
|
gst_caps_unref (prevcaps);
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
goto done;
|
goto done;
|
||||||
enc->priv->ctx.output_caps_changed = FALSE;
|
enc->priv->ctx.output_caps_changed = FALSE;
|
||||||
|
|
Loading…
Reference in a new issue