mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-25 16:48:11 +00:00
decklinksrc: Process EOS even when there are no incoming video frames.
https://bugzilla.gnome.org/show_bug.cgi?id=680700
This commit is contained in:
parent
d5eccb2285
commit
44b9429516
1 changed files with 10 additions and 7 deletions
|
@ -362,6 +362,7 @@ gst_decklink_src_send_event (GstElement * element, GstEvent * event)
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
g_atomic_int_set (&src->pending_eos, TRUE);
|
g_atomic_int_set (&src->pending_eos, TRUE);
|
||||||
GST_INFO_OBJECT (src, "EOS pending");
|
GST_INFO_OBJECT (src, "EOS pending");
|
||||||
|
g_cond_signal (&src->cond);
|
||||||
result = TRUE;
|
result = TRUE;
|
||||||
break;
|
break;
|
||||||
break;
|
break;
|
||||||
|
@ -745,7 +746,8 @@ gst_decklink_src_task (void *priv)
|
||||||
GST_DEBUG_OBJECT (decklinksrc, "task");
|
GST_DEBUG_OBJECT (decklinksrc, "task");
|
||||||
|
|
||||||
g_mutex_lock (&decklinksrc->mutex);
|
g_mutex_lock (&decklinksrc->mutex);
|
||||||
while (decklinksrc->video_frame == NULL && !decklinksrc->stop) {
|
while (decklinksrc->video_frame == NULL && !decklinksrc->stop &&
|
||||||
|
!decklinksrc->pending_eos) {
|
||||||
g_cond_wait (&decklinksrc->cond, &decklinksrc->mutex);
|
g_cond_wait (&decklinksrc->cond, &decklinksrc->mutex);
|
||||||
}
|
}
|
||||||
video_frame = decklinksrc->video_frame;
|
video_frame = decklinksrc->video_frame;
|
||||||
|
@ -763,6 +765,13 @@ gst_decklink_src_task (void *priv)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_atomic_int_compare_and_exchange (&decklinksrc->pending_eos, TRUE,
|
||||||
|
FALSE)) {
|
||||||
|
GST_INFO_OBJECT (decklinksrc, "EOS pending");
|
||||||
|
flow = GST_FLOW_EOS;
|
||||||
|
goto pause;
|
||||||
|
}
|
||||||
|
|
||||||
/* warning on dropped frames */
|
/* warning on dropped frames */
|
||||||
/* FIXME: post QoS message */
|
/* FIXME: post QoS message */
|
||||||
if (decklinksrc->dropped_frames - decklinksrc->dropped_frames_old > 0) {
|
if (decklinksrc->dropped_frames - decklinksrc->dropped_frames_old > 0) {
|
||||||
|
@ -887,12 +896,6 @@ gst_decklink_src_task (void *priv)
|
||||||
else
|
else
|
||||||
flow = video_flow;
|
flow = video_flow;
|
||||||
|
|
||||||
if (g_atomic_int_compare_and_exchange (&decklinksrc->pending_eos, TRUE,
|
|
||||||
FALSE)) {
|
|
||||||
GST_INFO_OBJECT (decklinksrc, "EOS pending");
|
|
||||||
flow = GST_FLOW_EOS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flow != GST_FLOW_OK)
|
if (flow != GST_FLOW_OK)
|
||||||
goto pause;
|
goto pause;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue