[vlc-devel] [PATCH] player: input: Store tracks presence in the ml struct
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Sep 17 16:30:39 CEST 2020
In order to be able to probe the media type after it is stopped and its
track vectors have been emptied.
---
src/player/input.c | 5 +++++
src/player/medialib.c | 4 ++--
src/player/player.h | 5 +++++
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/player/input.c b/src/player/input.c
index 59b4f7345d..5e6913734e 100644
--- a/src/player/input.c
+++ b/src/player/input.c
@@ -498,6 +498,10 @@ vlc_player_input_HandleEsEvent(struct vlc_player_input *input,
if (!trackpriv)
break;
+ if (!input->ml.has_video_tracks && ev->fmt->i_cat == VIDEO_ES)
+ input->ml.has_video_tracks = true;
+ else if (!input->ml.has_audio_tracks && ev->fmt->i_cat == AUDIO_ES)
+ input->ml.has_audio_tracks = true;
if (!vlc_vector_push(vec, trackpriv))
{
vlc_player_track_priv_Delete(trackpriv);
@@ -949,6 +953,7 @@ vlc_player_input_New(vlc_player_t *player, input_item_t *item)
input->ml.restore_states = false;
input->ml.delay_restore = false;
input->ml.pos = -1.f;
+ input->ml.has_audio_tracks = input->ml.has_video_tracks = false;
input->thread = input_Create(player, input_thread_Events, input, item,
player->resource, player->renderer);
diff --git a/src/player/medialib.c b/src/player/medialib.c
index b4deb94e0a..93d8414632 100644
--- a/src/player/medialib.c
+++ b/src/player/medialib.c
@@ -129,9 +129,9 @@ vlc_player_UpdateMediaType(const struct vlc_player_input* input,
{
assert(media->i_type == VLC_ML_MEDIA_TYPE_UNKNOWN);
vlc_ml_media_type_t media_type;
- if (input->video_track_vector.size > 0)
+ if (input->ml.has_video_tracks)
media_type = VLC_ML_MEDIA_TYPE_VIDEO;
- else if (input->audio_track_vector.size > 0)
+ else if (input->ml.has_audio_tracks)
media_type = VLC_ML_MEDIA_TYPE_AUDIO;
else
return false;
diff --git a/src/player/player.h b/src/player/player.h
index 363f294e12..fde4b1dbf3 100644
--- a/src/player/player.h
+++ b/src/player/player.h
@@ -117,6 +117,11 @@ struct vlc_player_input
float pos;
bool restore_states;
bool delay_restore;
+ /* Keep a trace of tracks as they appear since they won't be available
+ * for probing when the input gets stopped
+ */
+ bool has_video_tracks;
+ bool has_audio_tracks;
} ml;
};
--
2.20.1
More information about the vlc-devel
mailing list