diff options
-rw-r--r-- | DOCS/man/en/vo.rst | 30 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | configure | 62 | ||||
-rw-r--r-- | libvo/fastmemcpy.h | 2 | ||||
-rw-r--r-- | libvo/video_out.c | 9 | ||||
-rw-r--r-- | libvo/vo_directfb2.c | 1537 | ||||
-rw-r--r-- | libvo/vo_directx.c | 1143 |
7 files changed, 0 insertions, 2785 deletions
diff --git a/DOCS/man/en/vo.rst b/DOCS/man/en/vo.rst index 5f501f0348..342230fbaf 100644 --- a/DOCS/man/en/vo.rst +++ b/DOCS/man/en/vo.rst @@ -224,14 +224,6 @@ direct3d (Windows only) Same as ``direct3d_shaders``, but with the options ``disable-textures`` and ``disable-shaders`` forced. -directx (Windows only) - Video output driver that uses the DirectX interface. Deprecated, always - prefer direct3d* by default. - - noaccel - Turns off hardware acceleration. Try this option if you have display - problems. - corevideo (Mac OS X 10.6 and later) Mac OS X CoreVideo video output driver. Uses the CoreVideo APIs to fill PixelBuffers and generate OpenGL textures from them (useful as a fallback @@ -652,28 +644,6 @@ null caca Color ASCII art video output driver that works on a text console. -directfb - Play video using the DirectFB library. - - (no-)input - Use the DirectFB instead of the MPlayer keyboard code (default: - enabled). - buffermode=single|double|triple - Double and triple buffering give best results if you want to avoid - tearing issues. Triple buffering is more efficient than double - buffering as it does not block MPlayer while waiting for the vertical - retrace. Single buffering should be avoided (default: single). - fieldparity=top|bottom - Control the output order for interlaced frames (default: disabled). - Valid values are top = top fields first, bottom = bottom fields first. - This option does not have any effect on progressive film material like - most MPEG movies are. You need to enable this option if you have - tearing issues or unsmooth motions watching interlaced film material. - layer=N - Will force layer with ID N for playback (default: -1 - auto). - dfbopts=<list> - Specify a parameter list for DirectFB. - image Output each frame into an image file in the current directory. Each file takes the frame number padded with leading zeros as name. @@ -307,8 +307,6 @@ SRCS_MPLAYER-$(CACA) += libvo/vo_caca.c SRCS_MPLAYER-$(COREAUDIO) += libao2/ao_coreaudio.c SRCS_MPLAYER-$(COREVIDEO) += libvo/vo_corevideo.m SRCS_MPLAYER-$(DIRECT3D) += libvo/vo_direct3d.c libvo/w32_common.c -SRCS_MPLAYER-$(DIRECTFB) += libvo/vo_directfb2.c -SRCS_MPLAYER-$(DIRECTX) += libao2/ao_dsound.c libvo/vo_directx.c SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c libvo/vo_gl3.c \ pnm_loader.c SRCS_MPLAYER-$(GL_WIN32) += libvo/w32_common.c @@ -362,7 +362,6 @@ Video output: --enable-gl enable OpenGL video output [autodetect] --enable-caca enable CACA video output [autodetect] --enable-direct3d enable Direct3D video output [autodetect] - --enable-directx enable DirectX video output [autodetect] --enable-xv enable Xv video output [autodetect] --enable-vdpau enable VDPAU acceleration [autodetect] --enable-vm enable XF86VidMode support [autodetect] @@ -370,7 +369,6 @@ Video output: --enable-x11 enable X11 video output [autodetect] --enable-xshape enable XShape support [autodetect] --disable-xss disable screensaver support via xss [autodetect] - --enable-directfb enable DirectFB video output [autodetect] --disable-corevideo disable CoreVideo video output [autodetect] --disable-cocoa disable Cocoa OpenGL backend [autodetect] @@ -451,7 +449,6 @@ _xss=auto _xv=auto _vdpau=auto _direct3d=auto -_directx=auto _nas=auto _png=auto _mng=auto @@ -507,7 +504,6 @@ _apple_remote=auto _apple_ir=auto _termcap=auto _termios=auto -_directfb=auto #language=en _shm=auto _translation=no @@ -652,8 +648,6 @@ for ac_option do --disable-vdpau) _vdpau=no ;; --enable-direct3d) _direct3d=yes ;; --disable-direct3d) _direct3d=no ;; - --enable-directx) _directx=yes ;; - --disable-directx) _directx=no ;; --enable-png) _png=yes ;; --disable-png) _png=no ;; --enable-mng) _mng=yes ;; @@ -762,8 +756,6 @@ for ac_option do --disable-termcap) _termcap=no ;; --enable-termios) _termios=yes ;; --disable-termios) _termios=no ;; - --enable-directfb) _directfb=yes ;; - --disable-directfb) _directfb=no ;; --enable-shm) _shm=yes ;; --disable-shm) _shm=no ;; --enable-select) _select=yes ;; @@ -1997,33 +1989,6 @@ echores "$_libquvi" ######### -echocheck "DirectFB" -if test "$_directfb" = auto ; then - _directfb=no - cat > $TMPC << EOF -#include <directfb.h> -#include <directfb_version.h> -#if (DIRECTFB_MAJOR_VERSION << 16 | DIRECTFB_MINOR_VERSION << 8 | DIRECTFB_MICRO_VERSION) < (0 << 16 | 9 << 8 | 22) -#error "DirectFB version too old." -#endif -int main(void) { DirectFBInit(0, 0); return 0; } -EOF - for _inc_tmp in "" -I/usr/local/include/directfb -I/usr/include/directfb -I/usr/local/include; do - cc_check $_inc_tmp -ldirectfb && - _directfb=yes && extra_cflags="$extra_cflags $_inc_tmp" && break - done -fi -if test "$_directfb" = yes ; then - def_directfb='#define CONFIG_DIRECTFB 1' - vomodules="directfb $vomodules" - libs_mplayer="$libs_mplayer -ldirectfb" -else - def_directfb='#undef CONFIG_DIRECTFB' - novomodules="directfb $novomodules" -fi -echores "$_directfb" - - if darwin; then echocheck "Cocoa" @@ -2556,29 +2521,6 @@ else fi echores "$_direct3d" -echocheck "Directx" -if test "$_directx" = auto ; then - cat > $TMPC << EOF -#include <windows.h> -#include <ddraw.h> -#include <dsound.h> -int main(void) { return 0; } -EOF - _directx=no - cc_check -lgdi32 && _directx=yes -fi -if test "$_directx" = yes ; then - def_directx='#define CONFIG_DIRECTX 1' - libs_mplayer="$libs_mplayer -lgdi32" - vomodules="directx $vomodules" - aomodules="dsound $aomodules" -else - def_directx='#undef CONFIG_DIRECTX' - novomodules="directx $novomodules" - noaomodules="dsound $noaomodules" -fi -echores "$_directx" - fi #if win32; then @@ -3586,8 +3528,6 @@ COCOA = $_cocoa COREAUDIO = $_coreaudio COREVIDEO = $_corevideo DIRECT3D = $_direct3d -DIRECTFB = $_directfb -DIRECTX = $_directx DVBIN = $_dvbin DVDREAD = $_dvdread DXR3 = $_dxr3 @@ -3872,8 +3812,6 @@ $def_caca $def_corevideo $def_cocoa $def_direct3d -$def_directfb -$def_directx $def_gif $def_gif_4 $def_gif_tvt_hack diff --git a/libvo/fastmemcpy.h b/libvo/fastmemcpy.h index 621ae874dd..5d05d37043 100644 --- a/libvo/fastmemcpy.h +++ b/libvo/fastmemcpy.h @@ -30,8 +30,6 @@ #define memcpy_pic(d, s, b, h, ds, ss) memcpy_pic2(d, s, b, h, ds, ss, 0) #define my_memcpy_pic(d, s, b, h, ds, ss) memcpy_pic2(d, s, b, h, ds, ss, 1) -#define mem2agpcpy_pic memcpy_pic - /** * \param limit2width always skip data between end of line and start of next * instead of copying the full block when strides are the same diff --git a/libvo/video_out.c b/libvo/video_out.c index 9e65be8aab..c685cecddd 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -84,8 +84,6 @@ extern struct vo_driver video_out_image; extern struct vo_driver video_out_caca; extern struct vo_driver video_out_direct3d; extern struct vo_driver video_out_direct3d_shaders; -extern struct vo_driver video_out_directx; -extern struct vo_driver video_out_directfb; extern struct vo_driver video_out_corevideo; const struct vo_driver *video_out_drivers[] = @@ -94,9 +92,6 @@ const struct vo_driver *video_out_drivers[] = &video_out_direct3d_shaders, &video_out_direct3d, #endif -#ifdef CONFIG_DIRECTX - &video_out_directx, -#endif #ifdef CONFIG_GL_COCOA &video_out_gl, #endif @@ -123,10 +118,6 @@ const struct vo_driver *video_out_drivers[] = #endif &video_out_null, // should not be auto-selected -#ifdef CONFIG_DIRECTFB - // vo directfb can call exit() if initialization fails - &video_out_directfb, -#endif &video_out_image, #ifdef CONFIG_X11 #ifdef CONFIG_GL diff --git a/libvo/vo_directfb2.c b/libvo/vo_directfb2.c deleted file mode 100644 index c83bdccbae..0000000000 --- a/libvo/vo_directfb2.c +++ /dev/null @@ -1,1537 +0,0 @@ -/* - * MPlayer video driver for DirectFramebuffer device - * - * copyright (C) 2002 Jiri Svoboda <Jiri.Svoboda@seznam.cz> - * - * based on vo_directfb2.c - * - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include <directfb.h> -#include <directfb_version.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <libavutil/common.h> - -#include "config.h" -#include "video_out.h" -#include "fastmemcpy.h" -#include "sub/sub.h" -#include "mp_msg.h" -#include "aspect.h" -#include "subopt-helper.h" -#include "mp_fifo.h" -#include "input/keycodes.h" -#include "libmpcodecs/mp_image.h" -#include "libmpcodecs/vfcap.h" -#include "osd.h" - -// triple buffering -#define TRIPLE 1 - -/****************************** -* vo_directfb globals * -******************************/ - -#define DFBCHECK(x ...) \ - do { \ - DFBResult err = x; \ - \ - if (err != DFB_OK) \ - { \ - fprintf(stderr, "%s <%d>:\n\t", __FILE__, __LINE__); \ - DirectFBErrorFatal(# x, err); \ - } \ - } while (0) - -/* - * filled by preinit - */ - -// main DirectFB handle -static IDirectFB *dfb = NULL; -// keyboard handle -static IDirectFBInputDevice *keyboard = NULL; -// A buffer for input events. -static IDirectFBEventBuffer *buffer = NULL; - -/* - * filled during config - */ - -// handle of used layer -static IDirectFBDisplayLayer *layer = NULL; -// surface of used layer -static IDirectFBSurface *primary = NULL; -static int primarylocked = 0; -// handle of temporary surface (if used) -static IDirectFBSurface *frame = NULL; -static int framelocked = 0; -// flipping mode flag (layer/surface) -static int flipping = 0; -// scaling flag -static int stretch = 0; -// picture position -static int xoffset = 0, yoffset = 0; -// picture size -static int out_width = 0, out_height = 0; -// frame/primary size -static int width = 0, height = 0; -// frame primary format -DFBSurfacePixelFormat pixel_format; -/* - static void (*draw_alpha_p)(int w, int h, unsigned char *src, - unsigned char *srca, int stride, unsigned char *dst, - int dstride); - */ - -/****************************** -* cmd line parameteres * -******************************/ - -/* command line/config file options */ -static int layer_id = -1; -static int buffer_mode = 1; -static int use_input = 1; -static int field_parity = -1; - -/****************************** -* implementation * -******************************/ - -static void unlock(void) -{ - if (frame && framelocked) - frame->Unlock(frame); - if (primary && primarylocked) - primary->Unlock(primary); -} - -static int get_parity(strarg_t *arg) -{ - if (strargcmp(arg, "top") == 0) - return 0; - if (strargcmp(arg, "bottom") == 0) - return 1; - return -1; -} - -static int check_parity(void *arg) -{ - return get_parity(arg) != -1; -} - -static int get_mode(strarg_t *arg) -{ - if (strargcmp(arg, "single") == 0) - return 1; - if (strargcmp(arg, "double") == 0) - return 2; - if (strargcmp(arg, "triple") == 0) - return 3; - return 0; -} - -static int check_mode(void *arg) -{ - return get_mode(arg) != 0; -} - -static int preinit(struct vo *vo, const char *arg) -{ - DFBResult ret; - strarg_t mode_str = { - 0, NULL - }; - strarg_t par_str = { - 0, NULL - }; - strarg_t dfb_params = { - 0, NULL - }; - const opt_t subopts[] = { - {"input", OPT_ARG_BOOL, &use_input, NULL}, - {"buffermode", OPT_ARG_STR, &mode_str, check_mode}, - {"fieldparity", OPT_ARG_STR, &par_str, check_parity}, - {"layer", OPT_ARG_INT, &layer_id, NULL}, - {"dfbopts", OPT_ARG_STR, &dfb_params, NULL}, - {NULL} - }; - - //mp_msg(MSGT_VO, MSGL_INFO,"DirectFB: Preinit entered\n"); - - if (dfb) - return 0; // we are already initialized! - - // set defaults - buffer_mode = 1 + vo_doublebuffering; // honor -double switch - layer_id = -1; - use_input = 1; - field_parity = -1; - if (subopt_parse(arg, subopts) != 0) { - mp_msg(MSGT_VO, MSGL_ERR, - "\n-vo directfb command line help:\n" - "Example: mplayer -vo directfb:layer=1:buffermode=single\n" - "\nOptions (use 'no' prefix to disable):\n" - " input Use DirectFB for keyboard input\n" - "\nOther options:\n" - " layer=n\n" - " n=0..xx Use layer with id n for output (0=primary)\n" - " buffermode=(single|double|triple)\n" - " single Use single buffering\n" - " double Use double buffering\n" - " triple Use triple buffering\n" - " fieldparity=(top|bottom)\n" - " top Top field first\n" - " bottom Bottom field first\n" - " dfbopts=<str>\n" - " Specify a parameter list for DirectFB\n" - "\n"); - return -1; - } - if (mode_str.len) - buffer_mode = get_mode(&mode_str); - if (par_str.len) - field_parity = get_parity(&par_str); - - - if (dfb_params.len > 0) { - int argc = 2; - char arg0[10] = "mplayer"; - char *arg1 = malloc(dfb_params.len + 7); - char *argv[3]; - char **a; - - a = &argv[0]; - - strcpy(arg1, "--dfb:"); - strncat(arg1, dfb_params.str, dfb_params.len); - - argv[0] = arg0; - argv[1] = arg1; - argv[2] = NULL; - - DFBCHECK(DirectFBInit(&argc, &a)); - - free(arg1); - } else { - - DFBCHECK(DirectFBInit(NULL, NULL)); - } - - if (((directfb_major_version <= 0) && - (directfb_minor_version <= 9) && - (directfb_micro_version < 15))) { - mp_msg(MSGT_VO, MSGL_ERR, "DirectFB: Unsupported DirectFB version\n"); - return 1; - } - - /* - * (set options) - */ - -// uncomment this if you do not wish to create a new VT for DirectFB -// DFBCHECK (DirectFBSetOption ("no-vt-switch","")); - -// uncomment this if you want to allow VT switching -// DFBCHECK (DirectFBSetOption ("vt-switching","")); - -// uncomment this if you want to hide gfx cursor (req dfb >=0.9.9) - DFBCHECK(DirectFBSetOption("no-cursor", "")); - -// bg color fix - DFBCHECK(DirectFBSetOption("bg-color", "00000000")); - - /* - * (Initialize) - */ - - DFBCHECK(DirectFBCreate(&dfb)); - - /* - * (Get keyboard) - */ - - if (use_input) { - ret = dfb->GetInputDevice(dfb, DIDID_KEYBOARD, &keyboard); - if (ret == DFB_OK) - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Keyboard init OK\n"); - else { - keyboard = NULL; - mp_msg(MSGT_VO, MSGL_ERR, "DirectFB: Keyboard init FAILED\n"); - } - } - - - /* - * Create an input buffer for the keyboard. - */ - if (keyboard) - DFBCHECK(keyboard->CreateEventBuffer(keyboard, &buffer)); - - // just to start clean ... - if (buffer) - buffer->Reset(buffer); - - //mp_msg(MSGT_VO, MSGL_INFO,"DirectFB: Preinit OK\n"); - - return 0; - -} - -static DFBSurfacePixelFormat convformat(uint32_t format) -{ -// add more formats !!! - switch (format) { - case IMGFMT_RGB32: return DSPF_RGB32; - break; - case IMGFMT_BGR32: return DSPF_RGB32; - break; - case IMGFMT_RGB24: return DSPF_RGB24; - break; - case IMGFMT_BGR24: return DSPF_RGB24; - break; - case IMGFMT_RGB16: return DSPF_RGB16; - break; - case IMGFMT_BGR16: return DSPF_RGB16; - break; - case IMGFMT_RGB15: return DSPF_ARGB1555; - break; - case IMGFMT_BGR15: return DSPF_ARGB1555; - break; - case IMGFMT_RGB12: return DSPF_ARGB4444; - break; - case IMGFMT_BGR12: return DSPF_ARGB4444; - break; - case IMGFMT_YUY2: return DSPF_YUY2; - break; - case IMGFMT_UYVY: return DSPF_UYVY; - break; - case IMGFMT_YV12: return DSPF_YV12; - break; - case IMGFMT_I420: return DSPF_I420; - break; -// case IMGFMT_IYUV: return DSPF_IYUV; break; - case IMGFMT_RGB8: return DSPF_RGB332; - break; - case IMGFMT_BGR8: return DSPF_RGB332; - break; - - default: return 0; - } - return 0; -} - -typedef struct enum1_s { - uint32_t format; - int scale; - int result; - unsigned int id; - unsigned int width; - unsigned int height; - int setsize; -} enum1_t; - -static DFBEnumerationResult test_format_callback( - unsigned int id, - DFBDisplayLayerDescription - desc, - void *data) -{ - enum1_t *params = (enum1_t *)data; - IDirectFBDisplayLayer *layer; - DFBResult ret; - - if ((layer_id == -1) || (layer_id == id)) { - - ret = dfb->GetDisplayLayer(dfb, id, &layer); - if (ret) { - DirectFBError("dfb->GetDisplayLayer failed", ret); - return DFENUM_OK; - } else { - DFBDisplayLayerConfig dlc; - - if (params->setsize) { - dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; - dlc.width = params->width; - dlc.height = params->height; - layer->SetConfiguration(layer, &dlc); - } - - - dlc.flags = DLCONF_PIXELFORMAT; - dlc.pixelformat = convformat(params->format); - - layer->SetOpacity(layer, 0); - - ret = layer->TestConfiguration(layer, &dlc, NULL); - - layer->Release(layer); - - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Test format - layer %i scale/pos %i\n", id, - (desc.caps & DLCAPS_SCREEN_LOCATION)); - - if (ret == DFB_OK) { -// printf("Test OK\n"); - if (params->result) { - if ((!params->scale) && - (desc.caps & DLCAPS_SCREEN_LOCATION)) { - params->scale = 1; - params->id = id; - mp_msg( - MSGT_VO, MSGL_DBG2, - "DirectFB: Test format - added layer %i scale/pos %i\n", - id, (desc.caps & DLCAPS_SCREEN_LOCATION)); - } - } else { - params->result = 1; - params->id = id; - if (desc.caps & DLCAPS_SCREEN_LOCATION) - params->scale = 1; - mp_msg( - MSGT_VO, MSGL_DBG2, - "DirectFB: Test format - added layer %i scale/pos %i\n", - id, - (desc.caps & DLCAPS_SCREEN_LOCATION)); - }; - } - ; - }; - - } - ; - - return DFENUM_OK; -} - -static int query_format(uint32_t format) -{ - int ret = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD; // osd should be removed the in future -> will be handled outside... - enum1_t params; - - - if (!convformat(format)) - return 0; -// temporarily disable YV12 -// if (format == IMGFMT_YV12) return 0; -// if (format == IMGFMT_I420) return 0; - if (format == IMGFMT_IYUV) - return 0; - - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Format query: %s\n", - vo_format_name(format)); - - params.format = format; - params.scale = 0; - params.result = 0; - params.setsize = 0; - - DFBCHECK(dfb->EnumDisplayLayers(dfb, test_format_callback, ¶ms)); - - if (params.result) { - if (params.scale) - ret |= VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN; - return ret; - } - - return 0; -} - -typedef struct videomode_s { - int width; - int height; - int out_width; - int out_height; - int overx; - int overy; - int bpp; -} videomode_t; - - -static DFBEnumerationResult video_modes_callback(int width, int height, - int bpp, void *data) -{ - videomode_t *params = (videomode_t *)data; - - int overx = 0, overy = 0, closer = 0, over = 0; - int we_are_under = 0; - -//mp_msg(MSGT_VO, MSGL_INFO,"DirectFB: Validator entered %i %i %i\n",width,height,bpp); - - overx = width - params->out_width; - overy = height - params->out_height; - - if (!params->width) { - params->width = width; - params->height = height; - params->overx = overx; - params->overy = overy; - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Mode added %i %i %i\n", width, - height, - bpp); - } - - if ((params->overy < 0) || (params->overx < 0)) - we_are_under = 1; // stored mode is smaller than req mode - if (abs(overx * overy) < abs(params->overx * params->overy)) - closer = 1; // current mode is closer to desired res - if ((overx >= 0) && (overy >= 0)) - over = 1; // current mode is bigger or equaul to desired res - if ((closer && (over || we_are_under)) || (we_are_under && over)) { - params->width = width; - params->height = height; - params->overx = overx; - params->overy = overy; - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Better mode added %i %i %i\n", - width, height, - bpp); - } - ; - - return DFENUM_OK; -} - -#define CONFIG_ERROR -1 - -static int config(struct vo *vo, uint32_t s_width, uint32_t s_height, - uint32_t d_width, uint32_t d_height, uint32_t flags, - uint32_t format) -{ - /* - * (Locals) - */ - -// decode flags - - int fs = flags & VOFLAG_FULLSCREEN; - int vm = flags & VOFLAG_MODESWITCHING; - - DFBSurfaceDescription dsc; - DFBResult ret; - DFBDisplayLayerConfig dlc; - DFBSurfaceCapabilities caps; - - enum1_t params; - - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Config entered [%ix%i]\n", s_width, - s_height); - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: With requested format: %s\n", - vo_format_name( - format)); - -// initial cleanup - if (frame) { - frame->Release(frame); - frame = NULL; - } - - if (primary) { - primary->Release(primary); - primary = NULL; - } - - if (layer) { - layer->Release(layer); - layer = NULL; - } - - -// vm things - - if (vm) { - videomode_t params; - params.out_width = d_width; - params.out_height = d_height; - params.width = 0; - params.height = 0; - switch (format) { - case IMGFMT_RGB32: - case IMGFMT_BGR32: - params.bpp = 32; - break; - case IMGFMT_RGB24: - case IMGFMT_BGR24: - params.bpp = 24; - break; - case IMGFMT_RGB16: - case IMGFMT_BGR16: - case IMGFMT_RGB15: - case IMGFMT_BGR15: - case IMGFMT_RGB12: - case IMGFMT_BGR12: - params.bpp = 16; - break; - default: params.bpp = 0; - - } - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Config - trying to change videomode\n"); - DFBCHECK(dfb->EnumVideoModes(dfb, video_modes_callback, ¶ms)); - ret = dfb->SetVideoMode(dfb, params.width, params.height, params.bpp); - if (ret) { - ret = dfb->SetVideoMode(dfb, params.width, params.height, 24); - if (ret) { - ret = dfb->SetVideoMode(dfb, params.width, params.height, 32); - if (ret) { - ret = dfb->SetVideoMode(dfb, params.width, params.height, - 16); - if (ret) - ret = - dfb->SetVideoMode(dfb, params.width, params.height, - 8); - } - } - } - } // vm end - -// just to be sure clear primary layer - ret = dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &layer); - if (ret == DFB_OK) { - ret = layer->GetSurface(layer, &primary); - if (ret == DFB_OK) { - primary->Clear(primary, 0, 0, 0, 0xff); - ret = primary->Flip(primary, NULL, 0); - if (ret == DFB_OK) - primary->Clear(primary, 0, 0, 0, 0xff); - primary->Release(primary); - } - primary = NULL; - layer->Release(layer); - } - layer = NULL; - -// find best layer - - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Config - looking for suitable layer\n"); - params.format = format; - params.scale = 0; - params.result = 0; - params.width = s_width; - params.height = s_height; - params.setsize = 1; - - DFBCHECK(dfb->EnumDisplayLayers(dfb, test_format_callback, ¶ms)); - - if (!params.result) { - mp_msg(MSGT_VO, MSGL_ERR, - "DirectFB: ConfigError - no suitable layer found\n"); - params.id = DLID_PRIMARY; - } - - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Config - layer %i\n", params.id); - - // setup layer - - DFBCHECK(dfb->GetDisplayLayer(dfb, params.id, &layer)); - - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Config - switching layer to exclusive mode\n"); - ret = layer->SetCooperativeLevel(layer, DLSCL_EXCLUSIVE); - - if (DFB_OK != ret) { - mp_msg( - MSGT_VO, MSGL_WARN, - "DirectFB: Warning - cannot switch layer to exclusive mode. This could cause\nproblems. You may need to select correct pixel format manually!\n"); - DirectFBError("MPlayer - Switch layer to exlusive mode.", ret); - } - ; - if (params.scale) { - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Config - changing layer configuration (size)\n"); - dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; - dlc.width = s_width; - dlc.height = s_height; - - ret = layer->SetConfiguration(layer, &dlc); - - if (ret) { - mp_msg(MSGT_VO, MSGL_ERR, - "DirectFB: ConfigError in layer configuration (size)\n"); - DirectFBError("MPlayer - Layer size change.", ret); - } - ; - } - - // look if we need to change the pixel format of the layer - // and just to be sure also fetch all layer properties - dlc.flags = DLCONF_PIXELFORMAT | DLCONF_WIDTH | DLCONF_HEIGHT | - DLCONF_OPTIONS | DLCONF_BUFFERMODE; - - ret = layer->GetConfiguration(layer, &dlc); - - dlc.flags = DLCONF_PIXELFORMAT | DLCONF_WIDTH | DLCONF_HEIGHT; - - if (ret) - mp_msg(MSGT_VO, MSGL_WARN, - "DirectFB: Warning - could not get layer properties!\n"); - else - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Layer reports format:%x\n", - dlc.pixelformat); - - if ((dlc.pixelformat != convformat(params.format)) || (ret != DFB_OK)) { - - dlc.flags = DLCONF_PIXELFORMAT; - dlc.pixelformat = convformat(params.format); - - mp_msg(MSGT_VO, MSGL_DBG2, "DirectFB: Desired pixelformat: %x\n", - dlc.pixelformat); - - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Config - changing layer configuration (format)\n"); - ret = layer->SetConfiguration(layer, &dlc); - - if (ret) { - unsigned int bpp; - mp_msg( - MSGT_VO, MSGL_ERR, - "DirectFB: ConfigError in layer configuration (format, flags=%x)\n", - dlc.flags); - DirectFBError("MPlayer - layer pixelformat change", ret); - - // ugly fbdev workaround - try to switch pixelformat via videomode change - switch (dlc.pixelformat) { - case DSPF_ARGB: - case DSPF_RGB32: bpp = 32; - break; - case DSPF_RGB24: bpp = 24; - break; - case DSPF_RGB16: bpp = 16; - break; - case DSPF_ARGB1555: bpp = 15; - break; - case DSPF_ARGB4444: bpp = 12; - break; - case DSPF_RGB332: bpp = 8; - break; - } - - switch (dlc.pixelformat) { - case DSPF_ARGB: - case DSPF_RGB32: - case DSPF_RGB24: - case DSPF_RGB16: - case DSPF_ARGB1555: - case DSPF_ARGB4444: - case DSPF_RGB332: - mp_msg( - MSGT_VO, MSGL_V, - "DirectFB: Trying to recover via videomode change (VM).\n"); - // get size - dlc.flags = DLCONF_WIDTH | DLCONF_HEIGHT; - if (DFB_OK == layer->GetConfiguration(layer, &dlc)) { - // try to set videomode - mp_msg(MSGT_VO, MSGL_V, - "DirectFB: Videomode %ix%i BPP %i\n", dlc.width, - dlc.height, - bpp); - ret = dfb->SetVideoMode(dfb, dlc.width, dlc.height, bpp); - if (ret) - DirectFBError("MPlayer - VM - pixelformat change", ret); - - } - ; - - //get current pixel format - dlc.flags = DLCONF_PIXELFORMAT; - ret = layer->GetConfiguration(layer, &dlc); - if (ret) - DirectFBError("MPlayer - VM - Layer->GetConfiguration", ret); - else - mp_msg(MSGT_VO, MSGL_DBG2, - "DirectFB: Layer now has pixelformat [%x]\n", - dlc.pixelformat); - ; - - // check if we were succesful - if ((dlc.pixelformat != convformat(params.format)) || - (ret != DFB_OK)) { - mp_msg(MSGT_VO, MSGL_INFO, "DirectFB: Recovery failed!.\n"); - return CONFIG_ERROR; - } - - break; - - default: return CONFIG_ERROR; - - } - ; - } - ; - } - ; - -// flipping of layer -// try triple, double... buffering - - dlc.flags = DLCONF_BUFFERMODE; -#ifdef TRIPLE - if (buffer_mode > 2) { - dlc.buffermode = DLBM_TRIPLE; - ret = layer->SetConfiguration(layer, &dlc); - } else - ret = !DFB_OK; - - if (ret != DFB_OK) { -#endif - if (buffer_mode |