bool IW::CRender::RenderToSurface(IW::Image &imageDest) const { CRect rcClip = _pSurface->GetClipRect(); int nHeight = rcClip.bottom - rcClip.top; int nWidth = rcClip.right - rcClip.left; return RenderToSurface(imageDest.CreatePage(nWidth, nHeight, IW::PixelFormat::PF24), 0, 0); }
int dxmedia_play_video(const char* filename, bool pUseSound, int canskip, int stretch) { HRESULT hr; useSound = pUseSound; ghWnd = win_get_window(); CoInitialize(NULL); if (!useSound) update_polled_stuff(); hr = RenderFileToMMStream(filename); if (FAILED(hr)) { ExitCode(); CoUninitialize(); return -1; } if (!useSound) update_polled_stuff(); hr = InitRenderToSurface(); if (FAILED(hr)) { ExitCode(); CoUninitialize(); return -1; } newWidth = vscreen->w; newHeight = vscreen->h; if ((stretch == 1) || (vscreen->w > screen->w) || (vscreen->h > screen->h)) { // If they want to stretch, or if it's bigger than the screen, then stretch float widthRatio = (float)vscreen->w / (float)screen->w; float heightRatio = (float)vscreen->h / (float)screen->h; if (widthRatio > heightRatio) { newWidth = vscreen->w / widthRatio; newHeight = vscreen->h / widthRatio; } else { newWidth = vscreen->w / heightRatio; newHeight = vscreen->h / heightRatio; } } //Now set the multimedia stream to RUN hr = g_pMMStream->SetState(STREAMSTATE_RUN); g_bAppactive = TRUE; if (FAILED(hr)) { sprintf(lastError, "Unable to play stream: 0x%08X", hr); ExitCode(); CoUninitialize(); destroy_bitmap (vscreen); return -1; } // in case we're not full screen, clear the background clear(screen); currentlyPlaying = true; gfxDriver->ClearDrawList(); BITMAP *savedBackBuffer = gfxDriver->GetMemoryBackBuffer(); gfxDriver->SetMemoryBackBuffer(screen); while ((g_bAppactive) && (!want_exit)) { while (currentlyPaused) ; next_iteration(); RenderToSurface(vscreen); //Sleep(0); if (rec_kbhit()) { int key = rec_getch(); if ((canskip == 1) && (key == 27)) break; if (canskip >= 2) break; } if ((rec_mgetbutton() >= 0) && (canskip == 3)) break; } dxmedia_abort_video(); gfxDriver->SetMemoryBackBuffer(savedBackBuffer); return 0; }