# HG changeset patch # User reimar # Date 1262538051 0 # Node ID 517a800e940ef6420bb75cb922e283e80852e4a9 # Parent b30392ece0e301ddb7823633e31b997bb799234c Modify -vo direct3d so we do not have to link against d3d9.dll, it might not be available on some rare systems. Based on patch used for builds by Gianluigi Tiesi [sherpya netfarm it] diff -r b30392ece0e3 -r 517a800e940e configure --- a/configure Sun Jan 03 16:51:56 2010 +0000 +++ b/configure Sun Jan 03 17:00:51 2010 +0000 @@ -5334,11 +5334,10 @@ int main(void) { return 0; } EOF _direct3d=no - cc_check -ld3d9 && _direct3d=yes + cc_check && _direct3d=yes fi if test "$_direct3d" = yes ; then def_direct3d='#define CONFIG_DIRECT3D 1' - libs_mplayer="$libs_mplayer -ld3d9" _vomodules="direct3d $_vomodules" else def_direct3d='#undef CONFIG_DIRECT3D' diff -r b30392ece0e3 -r 517a800e940e libvo/vo_direct3d.c --- a/libvo/vo_direct3d.c Sun Jan 03 16:51:56 2010 +0000 +++ b/libvo/vo_direct3d.c Sun Jan 03 17:00:51 2010 +0000 @@ -70,6 +70,10 @@ the movie's codec) */ D3DFORMAT desktop_fmt; /**< Desktop (screen) colorspace format. Usually XRGB */ + + HANDLE d3d9_dll; /**< d3d9 Library HANDLE */ + IDirect3D9 * (WINAPI *pDirect3DCreate9)(UINT); /**< pointer to Direct3DCreate9 function */ + LPDIRECT3D9 d3d_handle; /**< Direct3D Handle */ LPDIRECT3DDEVICE9 d3d_device; /**< The Direct3D Adapter */ IDirect3DSurface9 *d3d_surface; /**< Offscreen Direct3D Surface. MPlayer @@ -441,7 +445,7 @@ IDirect3D9_Release(priv->d3d_handle); /* Initialize Direct3D from the beginning */ - priv->d3d_handle = Direct3DCreate9(D3D_SDK_VERSION); + priv->d3d_handle = priv->pDirect3DCreate9(D3D_SDK_VERSION); if (!priv->d3d_handle) { mp_msg(MSGT_VO, MSGL_ERR, "Initializing Direct3D failed.\n"); return 0; @@ -678,7 +682,19 @@ > an example of how to use it. */ - priv->d3d_handle = Direct3DCreate9(D3D_SDK_VERSION); + priv->d3d9_dll = LoadLibraryA("d3d9.dll"); + if (!priv->d3d9_dll) { + mp_msg(MSGT_VO, MSGL_ERR, "Unable to dynamically load d3d9.dll\n"); + return -1; + } + + priv->pDirect3DCreate9 = (void *)GetProcAddress(priv->d3d9_dll, "Direct3DCreate9"); + if (!priv->pDirect3DCreate9) { + mp_msg(MSGT_VO, MSGL_ERR, "Unable to find entry point of Direct3DCreate9\n"); + return -1; + } + + priv->d3d_handle = priv->pDirect3DCreate9(D3D_SDK_VERSION); if (!priv->d3d_handle) { mp_msg(MSGT_VO, MSGL_ERR, "Initializing Direct3D failed.\n"); return -1; @@ -861,6 +877,7 @@ uninit_d3d(); vo_w32_uninit(); /* w32_common framework call */ + FreeLibrary(priv->d3d9_dll); free(priv); priv = NULL; }