Skip to content

Commit b542aa1

Browse files
committed
clapper: Wait with flush after streams are selected
Instead flushing right after select streams request, wait until they are selected before doing a flush. This fixes a hang when changing audio language with hlsdemux2.
1 parent 6534fb1 commit b542aa1

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

src/lib/clapper/clapper-playbin-bus.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ _handle_stream_change_msg (GstMessage *msg,
755755
&& player->current_state >= GST_STATE_PAUSED) {
756756
/* XXX: I am not sure if we "officially" need to flush seek after select
757757
* streams, but as of GStreamer 1.22 it doesn't work otherwise. */
758-
_perform_flush_seek (player);
758+
player->pending_flush = TRUE;
759759
}
760760
g_list_free (list);
761761
}
@@ -1021,6 +1021,13 @@ _handle_streams_selected_msg (GstMessage *msg, ClapperPlayer *player)
10211021
* we iterate in search for all active ones */
10221022
clapper_player_playbin_update_current_decoders (player);
10231023
}
1024+
1025+
if (player->pending_flush) {
1026+
player->pending_flush = FALSE;
1027+
1028+
if (player->current_state >= GST_STATE_PAUSED)
1029+
_perform_flush_seek (player);
1030+
}
10241031
}
10251032

10261033
static inline void

src/lib/clapper/clapper-player-private.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ struct _ClapperPlayer
8585
gboolean seeking; // during seek operation
8686
gboolean speed_changing; // during rate change operation
8787
gboolean pending_eos; // when pausing due to EOS
88+
gboolean pending_flush; // after another stream selection
8889
gint eos; // atomic integer
8990

9091
/* Set adaptive props immediately */

src/lib/clapper/clapper-player.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,7 @@ clapper_player_reset (ClapperPlayer *self, gboolean pending_dispose)
751751
GST_DEBUG_OBJECT (self, "Reset");
752752

753753
self->had_error = FALSE;
754+
self->pending_flush = FALSE;
754755
gst_clear_object (&self->played_item);
755756

756757
if (pending_dispose) {

0 commit comments

Comments
 (0)