ffplay: get rid of the global cur_stream variable
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
5db1f94b8d
commit
84506ebd48
64
ffplay.c
64
ffplay.c
@ -267,7 +267,6 @@ static char *vfilters = NULL;
|
||||
|
||||
/* current context */
|
||||
static int is_full_screen;
|
||||
static VideoState *cur_stream;
|
||||
static int64_t audio_callback_time;
|
||||
|
||||
static AVPacket flush_pkt;
|
||||
@ -887,11 +886,10 @@ static void stream_close(VideoState *is)
|
||||
av_free(is);
|
||||
}
|
||||
|
||||
static void do_exit(void)
|
||||
static void do_exit(VideoState *is)
|
||||
{
|
||||
if (cur_stream) {
|
||||
stream_close(cur_stream);
|
||||
cur_stream = NULL;
|
||||
if (is) {
|
||||
stream_close(is);
|
||||
}
|
||||
uninit_opts();
|
||||
#if CONFIG_AVFILTER
|
||||
@ -942,7 +940,7 @@ static int video_open(VideoState *is){
|
||||
#endif
|
||||
if (!screen) {
|
||||
fprintf(stderr, "SDL: could not set video mode - exiting\n");
|
||||
do_exit();
|
||||
do_exit(is);
|
||||
}
|
||||
if (!window_title)
|
||||
window_title = input_filename;
|
||||
@ -958,7 +956,7 @@ static int video_open(VideoState *is){
|
||||
static void video_display(VideoState *is)
|
||||
{
|
||||
if(!screen)
|
||||
video_open(cur_stream);
|
||||
video_open(is);
|
||||
if (is->audio_st && is->show_mode != SHOW_MODE_VIDEO)
|
||||
video_audio_display(is);
|
||||
else if (is->video_st)
|
||||
@ -1280,7 +1278,7 @@ static void alloc_picture(void *opaque)
|
||||
fprintf(stderr, "Error: the video system does not support an image\n"
|
||||
"size of %dx%d pixels. Try using -lowres or -vf \"scale=w:h\"\n"
|
||||
"to reduce the image size.\n", vp->width, vp->height );
|
||||
do_exit();
|
||||
do_exit(is);
|
||||
}
|
||||
|
||||
SDL_LockMutex(is->pictq_mutex);
|
||||
@ -1794,8 +1792,8 @@ static int video_thread(void *arg)
|
||||
if (ret < 0)
|
||||
goto the_end;
|
||||
|
||||
if (cur_stream && cur_stream->step)
|
||||
stream_toggle_pause(cur_stream);
|
||||
if (is->step)
|
||||
stream_toggle_pause(is);
|
||||
}
|
||||
the_end:
|
||||
#if CONFIG_AVFILTER
|
||||
@ -2496,7 +2494,7 @@ static int read_thread(void *arg)
|
||||
SDL_Delay(10);
|
||||
if(is->audioq.size + is->videoq.size + is->subtitleq.size ==0){
|
||||
if(loop!=1 && (!loop || --loop)){
|
||||
stream_seek(cur_stream, start_time != AV_NOPTS_VALUE ? start_time : 0, 0, 0);
|
||||
stream_seek(is, start_time != AV_NOPTS_VALUE ? start_time : 0, 0, 0);
|
||||
}else if(autoexit){
|
||||
ret=AVERROR_EOF;
|
||||
goto fail;
|
||||
@ -2641,10 +2639,10 @@ static void stream_cycle_channel(VideoState *is, int codec_type)
|
||||
}
|
||||
|
||||
|
||||
static void toggle_full_screen(void)
|
||||
static void toggle_full_screen(VideoState *is)
|
||||
{
|
||||
is_full_screen = !is_full_screen;
|
||||
video_open(cur_stream);
|
||||
video_open(is);
|
||||
}
|
||||
|
||||
static void toggle_pause(VideoState *is)
|
||||
@ -2661,20 +2659,18 @@ static void step_to_next_frame(VideoState *is)
|
||||
is->step = 1;
|
||||
}
|
||||
|
||||
static void toggle_audio_display(void)
|
||||
static void toggle_audio_display(VideoState *is)
|
||||
{
|
||||
if (cur_stream) {
|
||||
int bgcolor = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
|
||||
cur_stream->show_mode = (cur_stream->show_mode + 1) % SHOW_MODE_NB;
|
||||
fill_rectangle(screen,
|
||||
cur_stream->xleft, cur_stream->ytop, cur_stream->width, cur_stream->height,
|
||||
bgcolor);
|
||||
SDL_UpdateRect(screen, cur_stream->xleft, cur_stream->ytop, cur_stream->width, cur_stream->height);
|
||||
}
|
||||
int bgcolor = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
|
||||
is->show_mode = (is->show_mode + 1) % SHOW_MODE_NB;
|
||||
fill_rectangle(screen,
|
||||
is->xleft, is->ytop, is->width, is->height,
|
||||
bgcolor);
|
||||
SDL_UpdateRect(screen, is->xleft, is->ytop, is->width, is->height);
|
||||
}
|
||||
|
||||
/* handle an event sent by the GUI */
|
||||
static void event_loop(void)
|
||||
static void event_loop(VideoState *cur_stream)
|
||||
{
|
||||
SDL_Event event;
|
||||
double incr, pos, frac;
|
||||
@ -2685,16 +2681,16 @@ static void event_loop(void)
|
||||
switch(event.type) {
|
||||
case SDL_KEYDOWN:
|
||||
if (exit_on_keydown) {
|
||||
do_exit();
|
||||
do_exit(cur_stream);
|
||||
break;
|
||||
}
|
||||
switch(event.key.keysym.sym) {
|
||||
case SDLK_ESCAPE:
|
||||
case SDLK_q:
|
||||
do_exit();
|
||||
do_exit(cur_stream);
|
||||
break;
|
||||
case SDLK_f:
|
||||
toggle_full_screen();
|
||||
toggle_full_screen(cur_stream);
|
||||
break;
|
||||
case SDLK_p:
|
||||
case SDLK_SPACE:
|
||||
@ -2718,7 +2714,8 @@ static void event_loop(void)
|
||||
stream_cycle_channel(cur_stream, AVMEDIA_TYPE_SUBTITLE);
|
||||
break;
|
||||
case SDLK_w:
|
||||
toggle_audio_display();
|
||||
if (cur_stream)
|
||||
toggle_audio_display(cur_stream);
|
||||
break;
|
||||
case SDLK_LEFT:
|
||||
incr = -10.0;
|
||||
@ -2759,7 +2756,7 @@ static void event_loop(void)
|
||||
break;
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
if (exit_on_mousedown) {
|
||||
do_exit();
|
||||
do_exit(cur_stream);
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEMOTION:
|
||||
@ -2806,7 +2803,7 @@ static void event_loop(void)
|
||||
break;
|
||||
case SDL_QUIT:
|
||||
case FF_QUIT_EVENT:
|
||||
do_exit();
|
||||
do_exit(cur_stream);
|
||||
break;
|
||||
case FF_ALLOC_EVENT:
|
||||
video_open(event.user.data1);
|
||||
@ -3007,6 +3004,7 @@ static int opt_help(const char *opt, const char *arg)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int flags;
|
||||
VideoState *is;
|
||||
|
||||
av_log_set_flags(AV_LOG_SKIP_REPEATED);
|
||||
|
||||
@ -3063,9 +3061,13 @@ int main(int argc, char **argv)
|
||||
av_init_packet(&flush_pkt);
|
||||
flush_pkt.data= "FLUSH";
|
||||
|
||||
cur_stream = stream_open(input_filename, file_iformat);
|
||||
is = stream_open(input_filename, file_iformat);
|
||||
if (!is) {
|
||||
fprintf(stderr, "Failed to initialize VideoState!\n");
|
||||
do_exit(NULL);
|
||||
}
|
||||
|
||||
event_loop();
|
||||
event_loop(is);
|
||||
|
||||
/* never returns */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user