# HG changeset patch # User arpi # Date 1036936662 0 # Node ID 530d1c5f0c78963cd52a72f64f9e89190bdfb90f # Parent 1831ce78478334ae0b4e244877368e2d106e26a8 Switch containing options for DirectFB library was renamed to dfbopts. Layer selection is done as "subdevice" - integer nuber after -vo directfb: where -1 is autodetection and 0,1,2... are for layers example: mplayer -vo directfb:2 -dfbopts matrox-crtc2,matrox-tv-standard=pal *.avi diff -r 1831ce784783 -r 530d1c5f0c78 cfg-mplayer.h --- a/cfg-mplayer.h Sun Nov 10 13:12:53 2002 +0000 +++ b/cfg-mplayer.h Sun Nov 10 13:57:42 2002 +0000 @@ -21,6 +21,11 @@ extern char *fb_dev_name; #endif #endif +#ifdef HAVE_DIRECTFB +#if DIRECTFBVERSION > 912 +extern char *dfb_params; +#endif +#endif #ifdef HAVE_PNG extern int z_compression; #endif @@ -237,6 +242,11 @@ {"fb", &fb_dev_name, CONF_TYPE_STRING, 0, 0, 0, NULL}, #endif #endif +#ifdef HAVE_DIRECTFB +#if DIRECTFBVERSION > 912 + {"dfbopts", &dfb_params, CONF_TYPE_STRING, 0, 0, 0, NULL}, +#endif +#endif // force window width/height or resolution (with -vm) {"x", &opt_screen_size_x, CONF_TYPE_INT, CONF_RANGE, 0, 4096, NULL}, diff -r 1831ce784783 -r 530d1c5f0c78 libvo/vo_directfb2.c --- a/libvo/vo_directfb2.c Sun Nov 10 13:12:53 2002 +0000 +++ b/libvo/vo_directfb2.c Sun Nov 10 13:57:42 2002 +0000 @@ -38,7 +38,11 @@ #include #include +#ifdef __linux__ #include +#else +#include +#endif #include "config.h" #include "video_out.h" @@ -59,7 +63,7 @@ "Direct Framebuffer Device", "directfb", "Jiri Svoboda Jiri.Svoboda@seznam.cz", - "version 2.0beta" + "v 2.0 (for DirectFB version >=0.9.13)" }; extern int verbose; @@ -130,6 +134,8 @@ #else char *fb_dev_name; #endif +char *dfb_params; +int layer_id = -1; /****************************** * implementation * @@ -148,7 +154,36 @@ if (verbose) printf("DirectFB: Preinit entered\n"); + if (arg) { + int tmp=-1; + if (sscanf(arg,"%i",&tmp)) { + layer_id=tmp; + if (verbose) printf("DirectFB: Layer id forced to %i\n",layer_id); + }; + } + + if (dfb_params) + { + int argc = 2; + char arg0[10] = "mplayer"; + char arg1[256] = "--dfb:"; + char* argv[3]; + char ** a; + + a = &argv[0]; + + strncat(arg1,dfb_params,249); + + argv[0]=arg0; + argv[1]=arg1; + argv[2]=NULL; + + DFBCHECK (DirectFBInit (&argc,&a)); + + } else { + DFBCHECK (DirectFBInit (NULL,NULL)); + } if (((directfb_major_version <= 0) && (directfb_minor_version <= 9) && @@ -182,7 +217,9 @@ */ DFBCHECK (DirectFBCreate (&dfb)); - DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)); + if (DFB_OK != dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)) { + printf("DirectFB: Warning - cannot swith to fullscreen mode"); + }; /* * (Get keyboard) @@ -255,6 +292,8 @@ IDirectFBDisplayLayer *layer; DFBResult ret; + if ((layer_id == -1 )||(layer_id == id)) { + ret = dfb->GetDisplayLayer( dfb, id, &layer); if (ret) { DirectFBError( "dfb->GetDisplayLayer failed", ret ); @@ -298,6 +337,8 @@ }; }; + }; + return DFENUM_OK; } @@ -539,12 +580,16 @@ // test surface for flipping DFBCHECK(primary->GetCapabilities(primary,&caps)); -// primary->Clear(primary,0,0,0,0); +#if DIRECTFBVERSION > 913 + primary->Clear(primary,0,0,0,0); +#endif flipping = 0; if (caps & DSCAPS_FLIPPING) { ret = primary->Flip(primary,NULL,0); if (ret==DFB_OK) { -// primary->Clear(primary,0,0,0,0); +#if DIRECTFBVERSION > 913 + primary->Clear(primary,0,0,0,0); +#endif flipping = 1; } };