# HG changeset patch # User faust3 # Date 1061124921 0 # Node ID 01e0d93182f827ba61c0616687bff2b57d03e2c1 # Parent 10899318ddaf787b328e390a6387454a8fdb4dd6 fix playback of rgb files when overlay is not disabled diff -r 10899318ddaf -r 01e0d93182f8 libvo/vo_directx.c --- a/libvo/vo_directx.c Sun Aug 17 11:07:18 2003 +0000 +++ b/libvo/vo_directx.c Sun Aug 17 12:55:21 2003 +0000 @@ -46,7 +46,8 @@ static uint32_t image_width, image_height; //image width and height static uint32_t d_image_width, d_image_height; //image width and height zoomed static uint8_t *image=NULL; //image data -static uint32_t image_format; //image format +static uint32_t image_format=0; //image format +static uint32_t primary_image_format; static uint32_t vm = 0; //exclusive mode, allows resolution switching (not implemented yet) static uint32_t fs = 0; //display in window or fullscreen static uint32_t dstride; //surface stride @@ -232,8 +233,9 @@ ddrval = g_lpdd->lpVtbl->CreateSurface(g_lpdd,&ddsdOverlay, &g_lpddsOverlay, NULL); if(ddrval != DD_OK) { - mp_msg(MSGT_VO, MSGL_ERR,""); - switch(ddrval) + if(ddrval == DDERR_INVALIDPIXELFORMAT)mp_msg(MSGT_VO,MSGL_V," invalid pixelformat: %s\n",g_ddpf[i].img_format_name); + else mp_msg(MSGT_VO, MSGL_ERR,""); + switch(ddrval) { case DDERR_INCOMPATIBLEPRIMARY: {mp_msg(MSGT_VO, MSGL_ERR,"incompatible primary surface\n");break;} @@ -243,8 +245,6 @@ {mp_msg(MSGT_VO, MSGL_ERR,"invalid object\n");break;} case DDERR_INVALIDPARAMS: {mp_msg(MSGT_VO, MSGL_ERR,"invalid parameters\n");break;} - case DDERR_INVALIDPIXELFORMAT: - {mp_msg(MSGT_VO, MSGL_ERR,"invalid pixelformat: %s\n",g_ddpf[i].img_format_name);break;} case DDERR_NODIRECTDRAWHW: {mp_msg(MSGT_VO, MSGL_ERR,"no directdraw hardware\n");break;} case DDERR_NOEMULATION: @@ -295,7 +295,7 @@ if (g_lpddsBack != NULL) g_lpddsBack->lpVtbl->Release(g_lpddsBack); g_lpddsBack = NULL; mp_msg(MSGT_VO, MSGL_DBG3,"back surface released\n"); - if(vo_doublebuffering) + if(vo_doublebuffering && !nooverlay) { if (g_lpddsOverlay != NULL)g_lpddsOverlay->lpVtbl->Release(g_lpddsOverlay); g_lpddsOverlay = NULL; @@ -687,6 +687,7 @@ mp_msg(MSGT_VO, MSGL_V ,"%i %s supported\n",i,g_ddpf[i].img_format_name); g_ddpf[i].drv_caps = VFCAP_CSP_SUPPORTED |VFCAP_OSD; formatcount++; + primary_image_format=g_ddpf[i].img_format; } } i++; @@ -1048,6 +1049,7 @@ image_height = height; d_image_width = d_width; d_image_height = d_height; + nooverlay = 0; aspect_save_orig(image_width,image_height); aspect_save_prescale(d_image_width,d_image_height); aspect_save_screenres(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)); @@ -1107,9 +1109,11 @@ if(Directx_CreatePrimarySurface())return 1; if (!nooverlay && Directx_CreateOverlay(image_format)) { - nooverlay=1; /*overlay creation failed*/ - mp_msg(MSGT_VO, MSGL_FATAL,"can't use overlay mode: please use -vo directx:noaccel\n"); - return 1; + if(format == primary_image_format)nooverlay=1; /*overlay creation failed*/ + else { + mp_msg(MSGT_VO, MSGL_FATAL,"can't use overlay mode: please use -vo directx:noaccel\n"); + return 1; + } } if(nooverlay) {