From ff4158b434cdbe70fa9cfd2620355c09091e557d Mon Sep 17 00:00:00 2001 From: Gildas Bazin Date: Wed, 19 Nov 2003 23:44:35 +0000 Subject: [PATCH] * modules/video_output/directx/*: we now create a video sub-window which is a child of the main window and which always fit exactly the size of the video. As a result the overlay color key is only painted in the video area and the rest of the window is pure black. --- modules/video_output/directx/directx.c | 171 +++++++++++++++++-------- modules/video_output/directx/events.c | 96 +++++--------- modules/video_output/directx/vout.h | 5 +- 3 files changed, 156 insertions(+), 116 deletions(-) diff --git a/modules/video_output/directx/directx.c b/modules/video_output/directx/directx.c index c34186cf62..b0480f9a93 100644 --- a/modules/video_output/directx/directx.c +++ b/modules/video_output/directx/directx.c @@ -2,7 +2,7 @@ * vout.c: Windows DirectX video output display method ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: directx.c,v 1.23 2003/10/17 16:40:09 gbazin Exp $ + * $Id: directx.c,v 1.24 2003/11/19 23:44:35 gbazin Exp $ * * Authors: Gildas Bazin * @@ -84,6 +84,8 @@ static void DirectXGetDDrawCaps ( vout_thread_t *p_vout ); static int DirectXLockSurface ( vout_thread_t *p_vout, picture_t *p_pic ); static int DirectXUnlockSurface ( vout_thread_t *p_vout, picture_t *p_pic ); +static DWORD DirectXFindColorkey( vout_thread_t *p_vout, uint32_t i_color ); + /* Object variables callbacks */ static int OnTopCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); @@ -157,7 +159,6 @@ static int OpenVideo( vlc_object_t *p_this ) p_vout->p_sys->p_display = NULL; p_vout->p_sys->p_current_surface = NULL; p_vout->p_sys->p_clipper = NULL; - p_vout->p_sys->hbrush = NULL; p_vout->p_sys->hwnd = NULL; p_vout->p_sys->hparent = NULL; p_vout->p_sys->i_changes = 0; @@ -345,9 +346,6 @@ static void CloseVideo( vlc_object_t *p_this ) var_Destroy( p_vout, "directx-on-top" ); - DirectXCloseDisplay( p_vout ); - DirectXCloseDDraw( p_vout ); - if( p_vout->p_sys->p_event ) { vlc_object_detach( p_vout->p_sys->p_event ); @@ -366,6 +364,9 @@ static void CloseVideo( vlc_object_t *p_this ) vlc_object_destroy( p_vout->p_sys->p_event ); } + DirectXCloseDisplay( p_vout ); + DirectXCloseDDraw( p_vout ); + if( p_vout->p_sys ) { free( p_vout->p_sys ); @@ -402,9 +403,7 @@ static int Manage( vout_thread_t *p_vout ) || p_vout->p_sys->i_changes & VOUT_SCALE_CHANGE ) { msg_Dbg( p_vout, "scale change" ); - if( !p_vout->p_sys->b_using_overlay ) - InvalidateRect( p_vout->p_sys->hwnd, NULL, TRUE ); - else + if( p_vout->p_sys->b_using_overlay ) DirectXUpdateOverlay( p_vout ); p_vout->i_changes &= ~VOUT_SCALE_CHANGE; p_vout->p_sys->i_changes &= ~VOUT_SCALE_CHANGE; @@ -417,9 +416,7 @@ static int Manage( vout_thread_t *p_vout ) || p_vout->p_sys->i_changes & VOUT_SIZE_CHANGE ) { msg_Dbg( p_vout, "size change" ); - if( !p_vout->p_sys->b_using_overlay ) - InvalidateRect( p_vout->p_sys->hwnd, NULL, TRUE ); - else + if( p_vout->p_sys->b_using_overlay ) DirectXUpdateOverlay( p_vout ); p_vout->i_changes &= ~VOUT_SIZE_CHANGE; p_vout->p_sys->i_changes &= ~VOUT_SIZE_CHANGE; @@ -443,7 +440,7 @@ static int Manage( vout_thread_t *p_vout ) /* Maximized window */ window_placement.showCmd = SW_SHOWMAXIMIZED; /* Change window style, no borders and no title bar */ - SetWindowLong( p_vout->p_sys->hwnd, GWL_STYLE, 0 ); + SetWindowLong( p_vout->p_sys->hwnd, GWL_STYLE, WS_CLIPCHILDREN ); } else @@ -451,7 +448,7 @@ static int Manage( vout_thread_t *p_vout ) /* Normal window */ window_placement.showCmd = SW_SHOWNORMAL; /* Change window style, borders and title bar */ - SetWindowLong( p_vout->p_sys->hwnd, GWL_STYLE, + SetWindowLong( p_vout->p_sys->hwnd, GWL_STYLE, WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW | WS_SIZEBOX | WS_VISIBLE ); } @@ -598,9 +595,24 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic ) } } - /* following functions are local */ +/***************************************************************************** + * DirectXEnumCallback: Device enumeration + ***************************************************************************** + * This callback function is called by DirectDraw once for each + * available DirectDraw device. + *****************************************************************************/ +BOOL WINAPI DirectXEnumCallback( GUID* p_guid, LPTSTR psz_desc, + LPTSTR psz_drivername, VOID* p_context, + HMONITOR hmon ) +{ + vout_thread_t *p_vout = (vout_thread_t *)p_context; + msg_Dbg( p_vout, "DirectXEnumCallback: %s, %s", psz_desc, psz_drivername ); + + return TRUE; /* Keep enumerating */ +} + /***************************************************************************** * DirectXInitDDraw: Takes care of all the DirectDraw initialisations ***************************************************************************** @@ -608,9 +620,11 @@ static void Display( vout_thread_t *p_vout, picture_t *p_pic ) *****************************************************************************/ static int DirectXInitDDraw( vout_thread_t *p_vout ) { - HRESULT dxresult; - HRESULT (WINAPI *OurDirectDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *); - LPDIRECTDRAW p_ddobject; + HRESULT dxresult; + HRESULT (WINAPI *OurDirectDrawCreate)(GUID *,LPDIRECTDRAW *,IUnknown *); + HRESULT (WINAPI *OurDirectDrawEnumerateEx)( LPDDENUMCALLBACKEXA, LPVOID, + DWORD ); + LPDIRECTDRAW p_ddobject; msg_Dbg( p_vout, "DirectXInitDDraw" ); @@ -624,12 +638,23 @@ static int DirectXInitDDraw( vout_thread_t *p_vout ) OurDirectDrawCreate = (void *)GetProcAddress(p_vout->p_sys->hddraw_dll, "DirectDrawCreate"); - if ( OurDirectDrawCreate == NULL ) + if( OurDirectDrawCreate == NULL ) { msg_Err( p_vout, "DirectXInitDDraw failed GetProcAddress" ); goto error; } + OurDirectDrawEnumerateEx = + (void *)GetProcAddress( p_vout->p_sys->hddraw_dll, + "DirectDrawEnumerateExA" ); + + if( OurDirectDrawEnumerateEx ) + { + /* Enumerate displays */ + OurDirectDrawEnumerateEx( DirectXEnumCallback, p_vout, + DDENUM_ATTACHEDSECONDARYDEVICES ); + } + /* Initialize DirectDraw now */ dxresult = OurDirectDrawCreate( NULL, &p_ddobject, NULL ); if( dxresult != DD_OK ) @@ -652,7 +677,7 @@ static int DirectXInitDDraw( vout_thread_t *p_vout ) /* Set DirectDraw Cooperative level, ie what control we want over Windows * display */ dxresult = IDirectDraw2_SetCooperativeLevel( p_vout->p_sys->p_ddobject, - p_vout->p_sys->hwnd, DDSCL_NORMAL ); + NULL, DDSCL_NORMAL ); if( dxresult != DD_OK ) { msg_Err( p_vout, "cannot set direct draw cooperative level" ); @@ -686,7 +711,6 @@ static int DirectXCreateDisplay( vout_thread_t *p_vout ) HRESULT dxresult; DDSURFACEDESC ddsd; LPDIRECTDRAWSURFACE p_display; - DDPIXELFORMAT pixel_format; msg_Dbg( p_vout, "DirectXCreateDisplay" ); @@ -698,8 +722,7 @@ static int DirectXCreateDisplay( vout_thread_t *p_vout ) ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; dxresult = IDirectDraw2_CreateSurface( p_vout->p_sys->p_ddobject, - &ddsd, - &p_display, NULL ); + &ddsd, &p_display, NULL ); if( dxresult != DD_OK ) { msg_Err( p_vout, "cannot get primary surface (error %li)", dxresult ); @@ -721,27 +744,20 @@ static int DirectXCreateDisplay( vout_thread_t *p_vout ) /* The clipper will be used only in non-overlay mode */ DirectXCreateClipper( p_vout ); + /* Make sure the colorkey will be painted */ + p_vout->p_sys->i_colorkey = 1; + p_vout->p_sys->i_rgb_colorkey = + DirectXFindColorkey( p_vout, p_vout->p_sys->i_colorkey ); -#if 1 - /* compute the colorkey pixel value from the RGB value we've got */ - memset( &pixel_format, 0, sizeof( DDPIXELFORMAT )); - pixel_format.dwSize = sizeof( DDPIXELFORMAT ); - dxresult = IDirectDrawSurface2_GetPixelFormat( p_vout->p_sys->p_display, - &pixel_format ); - if( dxresult != DD_OK ) - { - msg_Warn( p_vout, "DirectXUpdateOverlay GetPixelFormat failed " - "(error %li)", dxresult ); - } - p_vout->p_sys->i_colorkey = (DWORD)((( p_vout->p_sys->i_rgb_colorkey - * pixel_format.dwRBitMask) / 255) - & pixel_format.dwRBitMask ); -#endif + /* Create the actual brush */ + SetClassLong( p_vout->p_sys->hvideownd, GCL_HBRBACKGROUND, + (LONG)CreateSolidBrush( p_vout->p_sys->i_rgb_colorkey ) ); + InvalidateRect( p_vout->p_sys->hvideownd, NULL, TRUE ); + DirectXUpdateRects( p_vout, VLC_TRUE ); return VLC_SUCCESS; } - /***************************************************************************** * DirectXCreateClipper: Create a clipper that will be used when blitting the * RGB surface to the main display. @@ -766,8 +782,8 @@ static int DirectXCreateClipper( vout_thread_t *p_vout ) } /* Associate the clipper to the window */ - dxresult = IDirectDrawClipper_SetHWnd(p_vout->p_sys->p_clipper, 0, - p_vout->p_sys->hwnd); + dxresult = IDirectDrawClipper_SetHWnd( p_vout->p_sys->p_clipper, 0, + p_vout->p_sys->hvideownd ); if( dxresult != DD_OK ) { msg_Warn( p_vout, "cannot attach clipper to window (error %li)", @@ -831,13 +847,9 @@ static int DirectXCreateSurface( vout_thread_t *p_vout, ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC; ddsd.ddpfPixelFormat.dwFourCC = i_chroma; - ddsd.dwFlags = DDSD_CAPS | - DDSD_HEIGHT | - DDSD_WIDTH | - DDSD_PIXELFORMAT; + ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; ddsd.dwFlags |= (i_backbuffers ? DDSD_BACKBUFFERCOUNT : 0); - ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | - DDSCAPS_VIDEOMEMORY; + ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY; ddsd.ddsCaps.dwCaps |= (i_backbuffers ? DDSCAPS_COMPLEX | DDSCAPS_FLIP : 0 ); ddsd.dwHeight = p_vout->render.i_height; @@ -845,8 +857,7 @@ static int DirectXCreateSurface( vout_thread_t *p_vout, ddsd.dwBackBufferCount = i_backbuffers; dxresult = IDirectDraw2_CreateSurface( p_vout->p_sys->p_ddobject, - &ddsd, - &p_surface, NULL ); + &ddsd, &p_surface, NULL ); if( dxresult != DD_OK ) { *pp_surface_final = NULL; @@ -866,9 +877,7 @@ static int DirectXCreateSurface( vout_thread_t *p_vout, memset( &ddsd, 0, sizeof( DDSURFACEDESC ) ); ddsd.dwSize = sizeof(DDSURFACEDESC); ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - ddsd.dwFlags = DDSD_HEIGHT | - DDSD_WIDTH | - DDSD_CAPS; + ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwHeight = p_vout->render.i_height; ddsd.dwWidth = p_vout->render.i_width; @@ -886,8 +895,7 @@ static int DirectXCreateSurface( vout_thread_t *p_vout, } dxresult = IDirectDraw2_CreateSurface( p_vout->p_sys->p_ddobject, - &ddsd, - &p_surface, NULL ); + &ddsd, &p_surface, NULL ); if( dxresult != DD_OK ) { *pp_surface_final = NULL; @@ -1552,6 +1560,63 @@ static int DirectXUnlockSurface( vout_thread_t *p_vout, picture_t *p_pic ) return VLC_EGENERIC; } +/***************************************************************************** + * DirectXFindColorkey: Finds out the 32bits RGB pixel value of the colorkey + *****************************************************************************/ +static DWORD DirectXFindColorkey( vout_thread_t *p_vout, uint32_t i_color ) +{ + DDSURFACEDESC ddsd; + HRESULT dxresult; + COLORREF i_rgb = 0; + uint32_t i_pixel_backup; + HDC hdc; + + ddsd.dwSize = sizeof(ddsd); + dxresult = IDirectDrawSurface2_Lock( p_vout->p_sys->p_display, NULL, + &ddsd, DDLOCK_WAIT, NULL ); + if( dxresult != DD_OK ) return 0; + + i_pixel_backup = *(uint32_t *)ddsd.lpSurface; + + switch( ddsd.ddpfPixelFormat.dwRGBBitCount ) + { + case 4: + *(uint8_t *)ddsd.lpSurface = 0x11; + break; + case 8: + *(uint8_t *)ddsd.lpSurface = 0x01; + break; + case 16: + *(uint16_t *)ddsd.lpSurface = 0x01; + break; + case 24: + *(uint32_t *)ddsd.lpSurface = 0x0100; + break; + case 32: + *(uint32_t *)ddsd.lpSurface = 0x01; + break; + } + + IDirectDrawSurface2_Unlock( p_vout->p_sys->p_display, NULL ); + + if( IDirectDrawSurface2_GetDC( p_vout->p_sys->p_display, &hdc ) == DD_OK ) + { + i_rgb = GetPixel( hdc, 0, 0 ); + IDirectDrawSurface2_ReleaseDC( p_vout->p_sys->p_display, hdc ); + } + + ddsd.dwSize = sizeof(ddsd); + dxresult = IDirectDrawSurface2_Lock( p_vout->p_sys->p_display, NULL, + &ddsd, DDLOCK_WAIT, NULL ); + if( dxresult != DD_OK ) return i_rgb; + + *(uint32_t *)ddsd.lpSurface = i_pixel_backup; + + IDirectDrawSurface2_Unlock( p_vout->p_sys->p_display, NULL ); + + return i_rgb; +} + /***************************************************************************** * object variables callbacks: a bunch of object variables are used by the * interfaces to interact with the vout. diff --git a/modules/video_output/directx/events.c b/modules/video_output/directx/events.c index 9bfe6164fc..ebe4535cf9 100644 --- a/modules/video_output/directx/events.c +++ b/modules/video_output/directx/events.c @@ -2,7 +2,7 @@ * events.c: Windows DirectX video output events handler ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: events.c,v 1.28 2003/10/31 18:18:46 gbazin Exp $ + * $Id: events.c,v 1.29 2003/11/19 23:44:35 gbazin Exp $ * * Authors: Gildas Bazin * @@ -263,7 +263,6 @@ void DirectXEventThread( event_thread_t *p_event ) static int DirectXCreateWindow( vout_thread_t *p_vout ) { HINSTANCE hInstance; - COLORREF colorkey; HDC hdc; HMENU hMenu; RECT rect_window; @@ -275,33 +274,8 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) /* Get this module's instance */ hInstance = GetModuleHandle(NULL); - /* Create a BRUSH that will be used by Windows to paint the window - * background. - * This window background is important for us as it will be used by the - * graphics card to display the overlay. - * This is why we carefully choose the color for this background, the goal - * being to choose a color which isn't complete black but nearly. We - * obviously don't want to use black as a colorkey for the overlay because - * black is one of the most used color and thus would give us undesirable - * effects */ - /* the first step is to find the colorkey we want to use. The difficulty - * comes from the potential dithering (depends on the display depth) - * because we need to know the real RGB value of the chosen colorkey */ - hdc = GetDC( NULL ); - for( colorkey = 0x0a; colorkey < 0xff /* all shades of red */; colorkey++ ) - { - if( colorkey == GetNearestColor( hdc, colorkey ) ) - { - break; - } - } - msg_Dbg( p_vout, "background color: %i", colorkey ); - - /* Create the actual brush */ - p_vout->p_sys->hbrush = CreateSolidBrush(colorkey); - p_vout->p_sys->i_rgb_colorkey = (int)colorkey; - /* Get the current size of the display and its colour depth */ + hdc = GetDC( NULL ); p_vout->p_sys->rect_display.right = GetDeviceCaps( hdc, HORZRES ); p_vout->p_sys->rect_display.bottom = GetDeviceCaps( hdc, VERTRES ); p_vout->p_sys->i_display_depth = GetDeviceCaps( hdc, BITSPIXEL ); @@ -309,7 +283,6 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) p_vout->p_sys->rect_display.right, p_vout->p_sys->rect_display.bottom, p_vout->p_sys->i_display_depth ); - ReleaseDC( NULL, hdc ); /* If an external window was specified, we'll draw in it. */ @@ -326,7 +299,7 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) SetClassLong( p_vout->p_sys->hwnd, GCL_STYLE, CS_DBLCLKS ); SetClassLong( p_vout->p_sys->hwnd, - GCL_HBRBACKGROUND, (LONG)p_vout->p_sys->hbrush ); + GCL_HBRBACKGROUND, (LONG)GetStockObject(BLACK_BRUSH) ); SetClassLong( p_vout->p_sys->hwnd, GCL_HCURSOR, (LONG)LoadCursor(NULL, IDC_ARROW) ); /* Store a p_vout pointer into the window local storage (for later @@ -363,7 +336,7 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) wc.hInstance = hInstance; /* instance */ wc.hIcon = vlc_icon; /* load the vlc big icon */ wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* default cursor */ - wc.hbrBackground = p_vout->p_sys->hbrush; /* background color */ + wc.hbrBackground = GetStockObject(BLACK_BRUSH); /* background color */ wc.lpszMenuName = NULL; /* no menu */ wc.lpszClassName = "VLC DirectX"; /* use a special class */ wc.hIconSm = vlc_icon; /* load the vlc small icon */ @@ -373,13 +346,6 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) { WNDCLASS wndclass; - /* Free window background brush */ - if( p_vout->p_sys->hbrush ) - { - DeleteObject( p_vout->p_sys->hbrush ); - p_vout->p_sys->hbrush = NULL; - } - if( vlc_icon ) { DestroyIcon( vlc_icon ); @@ -408,7 +374,8 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) p_vout->p_sys->hwnd = CreateWindow( "VLC DirectX", /* name of window class */ VOUT_TITLE " (DirectX Output)", /* window title bar text */ - WS_OVERLAPPEDWINDOW | WS_SIZEBOX, /* window style */ + WS_OVERLAPPEDWINDOW | WS_SIZEBOX | WS_VISIBLE | + WS_CLIPCHILDREN, /* window style */ CW_USEDEFAULT, /* default X coordinate */ 0, /* default Y coordinate */ rect_window.right - rect_window.left, /* window width */ @@ -425,15 +392,20 @@ static int DirectXCreateWindow( vout_thread_t *p_vout ) } } + /* Now display the window */ + ShowWindow( p_vout->p_sys->hwnd, SW_SHOW ); + + /* Create video sub-window. This sub window will always exactly match + * the size of the video, which allows us to use crazy overlay colorkeys + * without having them shown outside of the video area. */ + SendMessage( p_vout->p_sys->hwnd, WM_VLC_CREATE_VIDEO_WIN, 0, 0 ); + /* Append a "Always On Top" entry in the system menu */ hMenu = GetSystemMenu( p_vout->p_sys->hwnd, FALSE ); AppendMenu( hMenu, MF_SEPARATOR, 0, "" ); AppendMenu( hMenu, MF_STRING | MF_UNCHECKED, IDM_TOGGLE_ON_TOP, "Always on &Top" ); - /* Now display the window */ - ShowWindow( p_vout->p_sys->hwnd, SW_SHOW ); - return VLC_SUCCESS; } @@ -512,6 +484,9 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force ) vout_PlacePicture( p_vout, rect.right, rect.bottom, &i_x, &i_y, &i_width, &i_height ); + SetWindowPos( p_vout->p_sys->hvideownd, HWND_TOP, + i_x, i_y, i_width, i_height, 0 ); + /* Destination image position and dimensions */ rect_dest.left = point.x + i_x; rect_dest.right = rect_dest.left + i_width; @@ -523,8 +498,7 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force ) * display size so we need to do it otherwise it will fail */ /* Clip the destination window */ - IntersectRect( &rect_dest_clipped, - &rect_dest, + IntersectRect( &rect_dest_clipped, &rect_dest, &p_vout->p_sys->rect_display ); #if 0 @@ -667,24 +641,24 @@ static long FAR PASCAL DirectXEventProc( HWND hwnd, UINT message, } break; - case WM_ERASEBKGND: - if( !p_vout->p_sys->b_using_overlay ) + case WM_VLC_CREATE_VIDEO_WIN: + /* Create video sub-window */ + p_vout->p_sys->hvideownd = + CreateWindow( "STATIC", "", /* window class and title bar text */ + WS_CHILD | WS_VISIBLE, /* window style */ + CW_USEDEFAULT, CW_USEDEFAULT, /* default coordinates */ + CW_USEDEFAULT, CW_USEDEFAULT, + hwnd, /* parent window */ + NULL, GetModuleHandle(NULL), NULL ); + + if( !p_vout->p_sys->hvideownd ) { - /* We want to eliminate unnecessary background redraws which create - * an annoying flickering */ - int i_width, i_height, i_x, i_y; - RECT rect_temp; - GetClipBox( (HDC)wParam, &rect_temp ); -#if 0 - msg_Dbg( p_vout, "WinProc WM_ERASEBKGND %i,%i,%i,%i", - rect_temp.left, rect_temp.top, - rect_temp.right, rect_temp.bottom ); -#endif - vout_PlacePicture( p_vout, p_vout->p_sys->i_window_width, - p_vout->p_sys->i_window_height, - &i_x, &i_y, &i_width, &i_height ); - ExcludeClipRect( (HDC)wParam, i_x, i_y, - i_x + i_width, i_y + i_height ); + msg_Warn( p_vout, "Can create video sub-window" ); + } + else + { + SetWindowLong( p_vout->p_sys->hvideownd, + GWL_WNDPROC, (LONG)DefWindowProc ); } break; diff --git a/modules/video_output/directx/vout.h b/modules/video_output/directx/vout.h index 85232425f8..3dfaa13cb0 100644 --- a/modules/video_output/directx/vout.h +++ b/modules/video_output/directx/vout.h @@ -2,7 +2,7 @@ * vout.h: Windows DirectX video output header file ***************************************************************************** * Copyright (C) 1998, 1999, 2000 VideoLAN - * $Id: vout.h,v 1.7 2003/10/25 00:49:14 sam Exp $ + * $Id: vout.h,v 1.8 2003/11/19 23:44:35 gbazin Exp $ * * Authors: Gildas Bazin * @@ -45,9 +45,9 @@ struct vout_sys_t LPDIRECTDRAWSURFACE2 p_current_surface; /* surface currently displayed */ LPDIRECTDRAWCLIPPER p_clipper; /* clipper used for blitting */ HINSTANCE hddraw_dll; /* handle of the opened ddraw dll */ - HBRUSH hbrush; /* window backgound brush (color) */ HWND hwnd; /* Handle of the main window */ + HWND hvideownd; /* Handle of the video sub-window */ HWND hparent; /* Handle of the parent window */ WNDPROC pf_wndproc; /* Window handling callback */ @@ -118,4 +118,5 @@ void DirectXUpdateRects ( vout_thread_t *p_vout, vlc_bool_t b_force ); * Constants *****************************************************************************/ #define WM_VLC_HIDE_MOUSE WM_APP +#define WM_VLC_CREATE_VIDEO_WIN WM_APP + 1 #define IDM_TOGGLE_ON_TOP WM_USER + 1 -- GitLab