[FFmpeg-devel] [PATCH 3/4] ffplay: cycle through the streams of the current program, and not every stream
Marton Balint
cus at passwd.hu
Sun Oct 6 21:32:57 CEST 2013
When changing the audio, video or subtitle stream, from now on, ffplay will
cycle through the streams of the current program.
Signed-off-by: Marton Balint <cus at passwd.hu>
---
ffplay.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/ffplay.c b/ffplay.c
index 2f24d49..4b88146 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -3044,6 +3044,8 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
int start_index, stream_index;
int old_index;
AVStream *st;
+ AVProgram *p = NULL;
+ int nb_streams = is->ic->nb_streams;
if (codec_type == AVMEDIA_TYPE_VIDEO) {
start_index = is->last_video_stream;
@@ -3056,8 +3058,22 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
old_index = is->subtitle_stream;
}
stream_index = start_index;
+
+ if (codec_type != AVMEDIA_TYPE_VIDEO && is->video_stream != -1) {
+ p = av_find_program_from_stream(ic, NULL, is->video_stream);
+ if (p) {
+ nb_streams = p->nb_stream_indexes;
+ for (start_index = 0; start_index < nb_streams; start_index++)
+ if (p->stream_index[start_index] == stream_index)
+ break;
+ if (start_index == nb_streams)
+ start_index = -1;
+ stream_index = start_index;
+ }
+ }
+
for (;;) {
- if (++stream_index >= is->ic->nb_streams)
+ if (++stream_index >= nb_streams)
{
if (codec_type == AVMEDIA_TYPE_SUBTITLE)
{
@@ -3071,7 +3087,7 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
}
if (stream_index == start_index)
return;
- st = ic->streams[stream_index];
+ st = is->ic->streams[p ? p->stream_index[stream_index] : stream_index];
if (st->codec->codec_type == codec_type) {
/* check that parameters are OK */
switch (codec_type) {
@@ -3089,6 +3105,8 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
}
}
the_end:
+ if (p && stream_index != -1)
+ stream_index = p->stream_index[stream_index];
stream_component_close(is, old_index);
stream_component_open(is, stream_index);
}
--
1.8.1.4
More information about the ffmpeg-devel
mailing list