* vout_directx.c: Windows DirectX video output display method
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: vout_directx.c,v 1.26 2002/03/17 17:00:38 sam Exp $
+ * $Id: vout_directx.c,v 1.30 2002/04/05 01:05:22 gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
p_vout->p_sys->b_event_thread_die = 0;
p_vout->p_sys->b_caps_overlay_clipping = 0;
SetRectEmpty( &p_vout->p_sys->rect_display );
- p_vout->p_sys->b_using_overlay =
- !config_GetIntVariable( "nooverlay" );
+ p_vout->p_sys->b_using_overlay = !config_GetIntVariable( "nooverlay" );
p_vout->p_sys->b_cursor = 1;
p_vout->p_sys->i_lastmoved = mdate();
/* Set main window's size */
- if( p_vout->render.i_height * p_vout->render.i_aspect
- >= p_vout->render.i_width * VOUT_ASPECT_FACTOR )
- {
- p_vout->p_sys->i_window_width = p_vout->render.i_height
- * p_vout->render.i_aspect / VOUT_ASPECT_FACTOR;
- p_vout->p_sys->i_window_height = p_vout->render.i_height;
- }
- else
- {
- p_vout->p_sys->i_window_width = p_vout->render.i_width;
- p_vout->p_sys->i_window_height = p_vout->render.i_width
- * VOUT_ASPECT_FACTOR / p_vout->render.i_aspect;
- }
-
-#if 0
- p_vout->p_sys->i_window_width = config_GetIntVariable( "width" );
- p_vout->p_sys->i_window_height = config_GetIntVariable( "height" );
-#endif
+ p_vout->p_sys->i_window_width = p_vout->i_window_width;
+ p_vout->p_sys->i_window_height = p_vout->i_window_height;
/* Set locks and condition variables */
vlc_mutex_init( &p_vout->p_sys->event_thread_lock );
}
/* We need to wait for the actual creation of the thread and window */
+ vlc_mutex_lock( &p_vout->p_sys->event_thread_lock );
if( p_vout->p_sys->i_event_thread_status == THREAD_CREATE )
{
- vlc_mutex_lock( &p_vout->p_sys->event_thread_lock );
vlc_cond_wait ( &p_vout->p_sys->event_thread_wait,
&p_vout->p_sys->event_thread_lock );
- vlc_mutex_unlock( &p_vout->p_sys->event_thread_lock );
}
+ vlc_mutex_unlock( &p_vout->p_sys->event_thread_lock );
if( p_vout->p_sys->i_event_thread_status != THREAD_READY )
{
intf_ErrMsg( "vout error: DirectXEventThread failed" );
if( p_vout->p_sys->i_event_thread_status == THREAD_READY &&
p_vout->p_sys->hwnd )
{
- PostMessage( p_vout->p_sys->hwnd, WM_CHAR, (WPARAM)'q', 0);
+ PostMessage( p_vout->p_sys->hwnd, WM_CHAR, (WPARAM)'^', 0);
vlc_thread_join( p_vout->p_sys->event_thread_id );
}
else /* using overlay */
{
+#if 0
/* Flip the overlay buffers */
dxresult = IDirectDrawSurface3_Flip( p_pic->p_sys->p_front_surface,
NULL, DDFLIP_WAIT );
if( dxresult != DD_OK )
intf_WarnMsg( 8, "vout: couldn't flip overlay surface" );
+#endif
if( !DirectXGetSurfaceDesc( p_pic ) )
{
ddsd.dwFlags = DDSD_CAPS |
DDSD_HEIGHT |
DDSD_WIDTH |
- DDSD_BACKBUFFERCOUNT |
+ //DDSD_BACKBUFFERCOUNT |
DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY |
- DDSCAPS_COMPLEX |
- DDSCAPS_FLIP |
+ //DDSCAPS_COMPLEX |
+ //DDSCAPS_FLIP |
DDSCAPS_VIDEOMEMORY;
ddsd.dwHeight = p_vout->render.i_height;
ddsd.dwWidth = p_vout->render.i_width;
else p_vout->p_sys->b_using_overlay = 0;
}
- /* As we can't have overlays, will try to create plain RBG surfaces in
+ /* As we can't have overlays, we'll try to create plain RBG surfaces in
* system memory. These surfaces will then be blitted onto the primary
* surface (display) so they can be displayed */
if( !p_vout->p_sys->b_using_overlay )
p_pic->V_PIXELS = p_pic->U_PIXELS
+ p_pic->p[U_PLANE].i_lines * p_pic->p[U_PLANE].i_pitch;
p_pic->p[V_PLANE].i_lines = p_vout->output.i_height / 2;
- p_pic->p[V_PLANE].i_pitch = p_pic->p[U_PLANE].i_pitch;
+ p_pic->p[V_PLANE].i_pitch = p_pic->p[Y_PLANE].i_pitch / 2;
p_pic->p[V_PLANE].i_pixel_bytes = 1;
p_pic->p[V_PLANE].b_margin = 0;
p_pic->p_sys->ddsd.dwSize = sizeof(DDSURFACEDESC);
dxresult = IDirectDrawSurface3_Lock( p_pic->p_sys->p_surface,
NULL, &p_pic->p_sys->ddsd,
- DDLOCK_NOSYSLOCK | DDLOCK_WAIT,
+ DDLOCK_NOSYSLOCK,
NULL );
if ( dxresult == DDERR_SURFACELOST )
{