SDL_UpdateRect(screen, s->xleft, s->ytop, s->width, s->height);
}
+static int video_open(VideoState *is){
+ int flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
+ int w,h;
+
+ if(is_full_screen) flags |= SDL_FULLSCREEN;
+ else flags |= SDL_RESIZABLE;
+
+ if (is_full_screen && fs_screen_width) {
+ w = fs_screen_width;
+ h = fs_screen_height;
+ } else if(!is_full_screen && screen_width){
+ w = screen_width;
+ h = screen_height;
+ }else if (is->video_st && is->video_st->codec->width){
+ w = is->video_st->codec->width;
+ h = is->video_st->codec->height;
+ } else {
+ w = 640;
+ h = 480;
+ }
+#ifndef CONFIG_DARWIN
+ screen = SDL_SetVideoMode(w, h, 0, flags);
+#else
+ /* setting bits_per_pixel = 0 or 32 causes blank video on OS X */
+ screen = SDL_SetVideoMode(w, h, 24, flags);
+#endif
+ if (!screen) {
+ fprintf(stderr, "SDL: could not set video mode - exiting\n");
+ return -1;
+ }
+ SDL_WM_SetCaption("FFplay", "FFplay");
+
+ is->width = screen->w;
+ is->height = screen->h;
+
+ return 0;
+}
+
/* display the current picture, if any */
static void video_display(VideoState *is)
{
+ if(!screen)
+ video_open(cur_stream);
if (is->audio_st && is->show_audio)
video_audio_display(is);
else if (is->video_st)
}
}
-static int video_open(VideoState *is){
- int flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
- int w,h;
-
- if (is_full_screen && fs_screen_width) {
- w = fs_screen_width;
- h = fs_screen_height;
- flags |= SDL_FULLSCREEN;
- } else {
- if(screen_width){
- w = screen_width;
- h = screen_height;
- }else if (is->video_st && is->video_st->codec->width){
- w = is->video_st->codec->width;
- h = is->video_st->codec->height;
- } else {
- w = 640;
- h = 480;
- }
- flags |= SDL_RESIZABLE;
- }
-#ifndef CONFIG_DARWIN
- screen = SDL_SetVideoMode(w, h, 0, flags);
-#else
- /* setting bits_per_pixel = 0 or 32 causes blank video on OS X */
- screen = SDL_SetVideoMode(w, h, 24, flags);
-#endif
- if (!screen) {
- fprintf(stderr, "SDL: could not set video mode - exiting\n");
- return -1;
- }
- SDL_WM_SetCaption("FFplay", "FFplay");
-
- is->width = screen->w;
- is->height = screen->h;
-
- return 0;
-}
-
/* open a given stream. Return 0 if OK */
static int stream_component_open(VideoState *is, int stream_index)
{
static void toggle_full_screen(void)
{
- int w, h, flags;
is_full_screen = !is_full_screen;
if (!fs_screen_width) {
/* use default SDL method */
- SDL_WM_ToggleFullScreen(screen);
- } else {
- /* use the recorded resolution */
- flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
- if (is_full_screen) {
- w = fs_screen_width;
- h = fs_screen_height;
- flags |= SDL_FULLSCREEN;
- } else {
- w = screen_width;
- h = screen_height;
- flags |= SDL_RESIZABLE;
- }
- screen = SDL_SetVideoMode(w, h, 0, flags);
- cur_stream->width = w;
- cur_stream->height = h;
+// SDL_WM_ToggleFullScreen(screen);
}
+ video_open(cur_stream);
}
static void toggle_pause(void)
if (cur_stream) {
screen = SDL_SetVideoMode(event.resize.w, event.resize.h, 0,
SDL_HWSURFACE|SDL_RESIZABLE|SDL_ASYNCBLIT|SDL_HWACCEL);
- cur_stream->width = event.resize.w;
- cur_stream->height = event.resize.h;
+ screen_width = cur_stream->width = event.resize.w;
+ screen_height= cur_stream->height= event.resize.h;
}
break;
case SDL_QUIT:
void opt_width(const char *arg)
{
screen_width = atoi(arg);
+ if(screen_width<=0){
+ fprintf(stderr, "invalid width\n");
+ exit(1);
+ }
}
void opt_height(const char *arg)
{
screen_height = atoi(arg);
+ if(screen_height<=0){
+ fprintf(stderr, "invalid height\n");
+ exit(1);
+ }
}
static void opt_format(const char *arg)
cur_stream = stream_open(input_filename, file_iformat);
- if(video_disable && !display_disable)
- video_open(cur_stream);
-
event_loop();
/* never returns */