mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-07-05 00:06:16 -04:00
Merge branch 'pipewiresrc-fix-caps-negotiation-failure-when-changing-state-from-playing-to-paused' into 'master'
pipewiresrc: fix caps negotiation failure in some cases when changing state from playing to paused See merge request pipewire/pipewire!2885
This commit is contained in:
commit
0f3b98b402
1 changed files with 15 additions and 0 deletions
|
|
@ -1240,6 +1240,14 @@ gst_pipewire_src_negotiate (GstBaseSrc * basesrc)
|
|||
|
||||
result = gst_pipewire_src_stream_start (pwsrc);
|
||||
|
||||
/* Return true when flushing to avoid caps negotiation failure */
|
||||
pw_thread_loop_lock (pwsrc->stream->core->loop);
|
||||
if (pwsrc->flushing) {
|
||||
GST_DEBUG_OBJECT (pwsrc, "is flushing");
|
||||
result = TRUE;
|
||||
}
|
||||
pw_thread_loop_unlock (pwsrc->stream->core->loop);
|
||||
|
||||
return result;
|
||||
|
||||
no_nego_needed:
|
||||
|
|
@ -1797,6 +1805,13 @@ gst_pipewire_src_change_state (GstElement * element, GstStateChange transition)
|
|||
/* stop recording ASAP by corking */
|
||||
GST_DEBUG_OBJECT (this, "in-activating stream");
|
||||
pw_thread_loop_lock (this->stream->core->loop);
|
||||
/* Wait if caps negotiation is currently in progress
|
||||
* to prevent caps negotiation failure which can cause
|
||||
* error in basesrc.
|
||||
*/
|
||||
if (wait_negotiated(this) == PW_STREAM_STATE_ERROR) {
|
||||
GST_DEBUG_OBJECT (this, "stream state error");
|
||||
}
|
||||
pw_stream_set_active (this->stream->pwstream, false);
|
||||
pw_thread_loop_unlock (this->stream->core->loop);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue