aboutsummaryrefslogtreecommitdiffstats
path: root/ffplay.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2006-12-30 11:22:46 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-12-30 11:22:46 +0000
commitfccb19e3c500a3877fbd3e595410596da096df11 (patch)
tree05df728958245d9681bbe1fd93f359c9762fc665 /ffplay.c
parent4b96d28abcbfe6467927f7b5f2b4da073dc4c503 (diff)
downloadffmpeg-fccb19e3c500a3877fbd3e595410596da096df11.tar.gz
1st attempt to fix width/height
Originally committed as revision 7385 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'ffplay.c')
-rw-r--r--ffplay.c73
1 files changed, 45 insertions, 28 deletions
diff --git a/ffplay.c b/ffplay.c
index f80a435485..11ae3aa544 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -184,8 +184,8 @@ static AVInputFormat *file_iformat;
static const char *input_filename;
static int fs_screen_width;
static int fs_screen_height;
-static int screen_width = 640;
-static int screen_height = 480;
+static int screen_width = 0;
+static int screen_height = 0;
static int audio_disable;
static int video_disable;
static int seek_by_bytes;
@@ -1595,6 +1595,44 @@ void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
}
}
+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)
@@ -2008,10 +2046,6 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat)
return NULL;
pstrcpy(is->filename, sizeof(is->filename), filename);
is->iformat = iformat;
- if (screen) {
- is->width = screen->w;
- is->height = screen->h;
- }
is->ytop = 0;
is->xleft = 0;
@@ -2270,6 +2304,7 @@ static void event_loop(void)
do_exit();
break;
case FF_ALLOC_EVENT:
+ video_open(event.user.data1);
alloc_picture(event.user.data1);
break;
case FF_REFRESH_EVENT:
@@ -2411,7 +2446,7 @@ void parse_arg_file(const char *filename)
/* Called from the main */
int main(int argc, char **argv)
{
- int flags, w, h;
+ int flags;
/* register all codecs, demux and protocols */
av_register_all();
@@ -2447,27 +2482,6 @@ int main(int argc, char **argv)
fs_screen_width = vi->current_w;
fs_screen_height = vi->current_h;
#endif
- flags = SDL_HWSURFACE|SDL_ASYNCBLIT|SDL_HWACCEL;
- if (is_full_screen && fs_screen_width) {
- w = fs_screen_width;
- h = fs_screen_height;
- flags |= SDL_FULLSCREEN;
- } else {
- w = screen_width;
- h = screen_height;
- 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");
- exit(1);
- }
- SDL_WM_SetCaption("FFplay", "FFplay");
}
SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
@@ -2480,6 +2494,9 @@ int main(int argc, char **argv)
cur_stream = stream_open(input_filename, file_iformat);
+ if(video_disable && !display_disable)
+ video_open(cur_stream);
+
event_loop();
/* never returns */