/** * Blits a scaled picture_t to the render target */ static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; D2D1_RECT_F r_dest = { sys->rect_dest.left, sys->rect_dest.top, sys->rect_dest.right, sys->rect_dest.bottom }; if (sys->d2_render_target && sys->d2_bitmap) { ID2D1HwndRenderTarget_BeginDraw(sys->d2_render_target); ID2D1HwndRenderTarget_DrawBitmap(sys->d2_render_target, sys->d2_bitmap, &r_dest, 1.0f, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, NULL); HRESULT hr = ID2D1HwndRenderTarget_EndDraw(sys->d2_render_target, NULL, NULL); if (hr == D2DERR_RECREATE_TARGET) { D2D_DestroyRenderTarget(vd); D2D_CreateRenderTarget(vd); } } picture_Release(picture); VLC_UNUSED(subpicture); CommonDisplay(vd); }
static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; LPDIRECT3DDEVICE9 d3ddev = sys->d3ddev; // Present the back buffer contents to the display // No stretching should happen here ! const RECT src = sys->rect_dest_clipped; const RECT dst = sys->rect_dest_clipped; HRESULT hr = IDirect3DDevice9_Present(d3ddev, &src, &dst, NULL, NULL); if (FAILED(hr)) { msg_Dbg(vd, "%s:%d (hr=0x%0lX)", __FUNCTION__, __LINE__, hr); } #if 0 VLC_UNUSED(picture); VLC_UNUSED(subpicture); #else /* XXX See Prepare() */ Direct3DLockSurface(picture); picture_Release(picture); VLC_UNUSED(subpicture); #endif CommonDisplay(vd); }
static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; assert(sys->display); /* Our surface can be lost so be sure to check this * and restore it if need be */ if (IDirectDrawSurface2_IsLost(sys->display) == DDERR_SURFACELOST) { if (IDirectDrawSurface2_Restore(sys->display) == DD_OK) { if (sys->use_overlay) DirectXUpdateOverlay(vd, NULL); } } if (sys->restore_overlay) DirectXUpdateOverlay(vd, NULL); /* */ DirectXUnlock(picture); if (sys->use_overlay) { /* Flip the overlay buffers if we are using back buffers */ if (picture->p_sys->surface != picture->p_sys->front_surface) { HRESULT hr = IDirectDrawSurface2_Flip(picture->p_sys->front_surface, NULL, DDFLIP_WAIT); if (hr != DD_OK) msg_Warn(vd, "could not flip overlay (error %li)", hr); } } else { /* Blit video surface to display with the NOTEARING option */ DDBLTFX ddbltfx; ZeroMemory(&ddbltfx, sizeof(ddbltfx)); ddbltfx.dwSize = sizeof(ddbltfx); ddbltfx.dwDDFX = DDBLTFX_NOTEARING; HRESULT hr = IDirectDrawSurface2_Blt(sys->display, &sys->rect_dest_clipped, picture->p_sys->surface, &sys->rect_src_clipped, DDBLT_ASYNC, &ddbltfx); if (hr != DD_OK) msg_Warn(vd, "could not blit surface (error %li)", hr); } DirectXLock(picture); if (sys->is_first_display) { IDirectDraw_WaitForVerticalBlank(sys->ddobject, DDWAITVB_BLOCKBEGIN, NULL); if (sys->use_overlay) { HBRUSH brush = CreateSolidBrush(sys->i_rgb_colorkey); /* set the colorkey as the backgound brush for the video window */ SetClassLongPtr(sys->hvideownd, GCLP_HBRBACKGROUND, (LONG_PTR)brush); } } CommonDisplay(vd); picture_Release(picture); VLC_UNUSED(subpicture); }
static void Display(vout_display_t *vd, picture_t *picture, subpicture_t *subpicture) { vout_display_sys_t *sys = vd->sys; vout_display_opengl_Display(sys->vgl, &vd->source); picture_Release(picture); if (subpicture) subpicture_Delete(subpicture); CommonDisplay(vd); }
static int Control(vout_display_t *vd, int query, va_list args) { switch (query) { case VOUT_DISPLAY_GET_OPENGL: { vlc_gl_t **gl = va_arg(args, vlc_gl_t **); *gl = &vd->sys->gl; CommonDisplay(vd); return VLC_SUCCESS; } default: return CommonControl(vd, query, args); } }
static void Display(vout_display_t *vd, picture_t *picture) { vout_display_sys_t *sys = vd->sys; #ifdef MODULE_NAME_IS_wingapi /* */ #else #define rect_src vd->sys->rect_src #define rect_src_clipped vd->sys->rect_src_clipped #define rect_dest vd->sys->rect_dest #define rect_dest_clipped vd->sys->rect_dest_clipped RECT rect_dst = rect_dest_clipped; HDC hdc = GetDC(sys->hvideownd); OffsetRect(&rect_dst, -rect_dest.left, -rect_dest.top); SelectObject(sys->off_dc, sys->off_bitmap); if (rect_dest_clipped.right - rect_dest_clipped.left != rect_src_clipped.right - rect_src_clipped.left || rect_dest_clipped.bottom - rect_dest_clipped.top != rect_src_clipped.bottom - rect_src_clipped.top) { StretchBlt(hdc, rect_dst.left, rect_dst.top, rect_dst.right, rect_dst.bottom, sys->off_dc, rect_src_clipped.left, rect_src_clipped.top, rect_src_clipped.right, rect_src_clipped.bottom, SRCCOPY); } else { BitBlt(hdc, rect_dst.left, rect_dst.top, rect_dst.right, rect_dst.bottom, sys->off_dc, rect_src_clipped.left, rect_src_clipped.top, SRCCOPY); } ReleaseDC(sys->hvideownd, hdc); #undef rect_src #undef rect_src_clipped #undef rect_dest #undef rect_dest_clipped #endif /* TODO */ picture_Release(picture); CommonDisplay(vd); }
static void Display(vout_display_t *vd, picture_t *picture) { vout_display_sys_t *sys = vd->sys; VLC_UNUSED(picture); #define rect_src vd->sys->rect_src #define rect_src_clipped vd->sys->sys.rect_src_clipped #define rect_dest vd->sys->sys.rect_dest #define rect_dest_clipped vd->sys->sys.rect_dest_clipped RECT rect_dst = rect_dest_clipped; HDC hdc = GetDC(sys->sys.hvideownd); OffsetRect(&rect_dst, -rect_dest.left, -rect_dest.top); SelectObject(sys->off_dc, sys->off_bitmap); if (rect_dest_clipped.right - rect_dest_clipped.left != rect_src_clipped.right - rect_src_clipped.left || rect_dest_clipped.bottom - rect_dest_clipped.top != rect_src_clipped.bottom - rect_src_clipped.top) { StretchBlt(hdc, rect_dst.left, rect_dst.top, rect_dst.right, rect_dst.bottom, sys->off_dc, rect_src_clipped.left, rect_src_clipped.top, rect_src_clipped.right, rect_src_clipped.bottom, SRCCOPY); } else { BitBlt(hdc, rect_dst.left, rect_dst.top, rect_dst.right, rect_dst.bottom, sys->off_dc, rect_src_clipped.left, rect_src_clipped.top, SRCCOPY); } ReleaseDC(sys->sys.hvideownd, hdc); #undef rect_src #undef rect_src_clipped #undef rect_dest #undef rect_dest_clipped CommonDisplay(vd); CommonManage(vd); }