[vlc-devel] keep new decoders deselected state
Francois Cartegnie
fcvlcdev at free.fr
Wed May 16 22:32:51 CEST 2018
untested
---
modules/demux/adaptive/plumbing/FakeESOut.cpp | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/modules/demux/adaptive/plumbing/FakeESOut.cpp b/modules/demux/adaptive/plumbing/FakeESOut.cpp
index 73b39954b9..1e814b8f7c 100644
--- a/modules/demux/adaptive/plumbing/FakeESOut.cpp
+++ b/modules/demux/adaptive/plumbing/FakeESOut.cpp
@@ -119,6 +119,7 @@ void FakeESOut::createOrRecycleRealEsID( FakeESOutID *es_id )
vlc_mutex_lock(&lock);
+ bool b_preexisting = false;
bool b_select = false;
for( it=recycle_candidates.begin(); it!=recycle_candidates.end(); ++it )
{
@@ -133,6 +134,7 @@ void FakeESOut::createOrRecycleRealEsID( FakeESOutID *es_id )
}
else if( cand->getFmt()->i_cat == es_id->getFmt()->i_cat && cand->realESID() )
{
+ b_preexisting = true;
/* We need to enforce same selection when not reused
Otherwise the es will select any other compatible track
and will end this in a activate/select loop when reactivating a track */
@@ -144,8 +146,18 @@ void FakeESOut::createOrRecycleRealEsID( FakeESOutID *es_id )
if( !realid )
{
realid = es_out_Add( real_es_out, es_id->getFmt() );
- if( b_select )
- es_out_Control( real_es_out, ES_OUT_SET_ES, realid );
+ if( b_preexisting )
+ {
+ if( b_select ) /* was previously selected on other format */
+ es_out_Control( real_es_out, ES_OUT_SET_ES, realid );
+ else
+ {
+ /* ensure no auto selection */
+ es_out_Control( real_es_out, ES_OUT_GET_ES_STATE, realid, &b_select );
+ if( b_select ) /* was single es, now selected and != prev state */
+ es_out_Control( real_es_out, ES_OUT_SET_ES_STATE, realid, false );
+ }
+ }
}
es_id->setRealESID( realid );
--
2.14.3
More information about the vlc-devel
mailing list