KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to write a preview application using the BlackMagic SDK, but am getting choppy playback. I'm using MFC framework, and subclassing CWnd for my video preview window. When each frame of video arrives, I do a color conversion to RGB and then call a function to display the RGB bitmap. void VideoPreview::Display(int width, int height, byte* buffer) { __int64 begin = GetTickCount(); HRESULT hr; CRect rcRect, statusBarRect; GetClientRect (rcRect); BITMAPINFO bmInfo; ZeroMemory(&bmInfo, sizeof(BITMAPINFO)); bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmInfo.bmiHeader.biBitCount = 32; bmInfo.bmiHeader.biPlanes = 1; bmInfo.bmiHeader.biWidth = width; bmInfo.bmiHeader.biHeight = -height; dc->SetStretchBltMode(COLORONCOLOR); int iResult = StretchDIBits(*dc, rcRect.left, rcRect.top, rcRect.right, rcRect.bottom, 0, 0, width, height, buffer, &bmInfo, 0, SRCCOPY); DWORD dwError; if (iResult == 0 || iResult == GDI_ERROR) { dwError = GetLastError(); } else fpsCount++; procTimeCount += GetTickCount() - begin; } What can be done to create smoother video? Update : I ended up going with Direct2D instead of GDI and have gotten much better performance. The below code is what I'm using now for rendering: // initialization HRESULT hr = D2D1CreateFactory( D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory ); // Obtain the size of the drawing area. RECT rc; GetClientRect(&rc); // Create a Direct2D render target hr = pD2DFactory->CreateHwndRenderTarget( D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties( this->GetSafeHwnd(), D2D1::SizeU( 1280, 720 /*rc.right - rc.left, rc.bottom - rc.top*/) ), &pRT); D2D1_BITMAP_
Tags (comma-separated)
Save Edits
Cancel