struct picture_sys_t {
LPDIRECTDRAWSURFACE2 surface;
LPDIRECTDRAWSURFACE2 front_surface;
+ picture_t *fallback;
};
/*****************************************************************************
picture_resource_t *rsc = &sys->resource;
rsc->p_sys->front_surface = front_surface;
rsc->p_sys->surface = surface;
+ rsc->p_sys->fallback = NULL;
return VLC_SUCCESS;
}
static int DirectXCreatePictureResourceYuv(vout_display_t *vd,
picture_resource_t *rsc = &sys->resource;
rsc->p_sys->front_surface = surface;
rsc->p_sys->surface = surface;
+ rsc->p_sys->fallback = NULL;
return VLC_SUCCESS;
}
static int DirectXCreatePictureResourceRgb(vout_display_t *vd,
picture_resource_t *rsc = &sys->resource;
rsc->p_sys->front_surface = surface;
rsc->p_sys->surface = surface;
+ rsc->p_sys->fallback = NULL;
return VLC_SUCCESS;
}
vout_display_sys_t *sys = vd->sys;
DirectXDestroySurface(sys->resource.p_sys->front_surface);
+ if (sys->resource.p_sys->fallback)
+ picture_Release(sys->resource.p_sys->fallback);
}
static int DirectXLock(picture_t *picture)
DDSURFACEDESC ddsd;
if (DirectXLockSurface(picture->p_sys->front_surface,
picture->p_sys->surface, &ddsd))
- return VLC_EGENERIC;
+ return CommonUpdatePicture(picture, &picture->p_sys->fallback, NULL, 0);
- CommonUpdatePicture(picture, ddsd.lpSurface, ddsd.lPitch);
+ CommonUpdatePicture(picture, NULL, ddsd.lpSurface, ddsd.lPitch);
return VLC_SUCCESS;
}
static void DirectXUnlock(picture_t *picture)