From e32aace4439ef569a98a6a2f379d3d8b680f6050 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 18 Jul 2018 22:07:43 -0700 Subject: [PATCH] Draw a black background behind the rendering --- .../video/ffmpeg-renderers/dxva2.cpp | 19 ++++++++++++++++--- app/streaming/video/ffmpeg-renderers/sdl.cpp | 5 +++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index ebb21c4d..9acd7f72 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -376,6 +376,11 @@ bool DXVA2Renderer::initialize(SDL_Window* window, int videoFormat, int width, i m_Device = SDL_RenderGetD3D9Device(m_SdlRenderer); + // Draw a black frame until the video stream starts rendering + SDL_SetRenderDrawColor(m_SdlRenderer, 0, 0, 0, SDL_ALPHA_OPAQUE); + SDL_RenderClear(m_SdlRenderer); + SDL_RenderPresent(m_SdlRenderer); + RtlZeroMemory(&m_Desc, sizeof(m_Desc)); m_Desc.SampleWidth = m_VideoWidth; m_Desc.SampleHeight = m_VideoHeight; @@ -457,9 +462,6 @@ void DXVA2Renderer::renderFrame(AVFrame* frame) bltParams.TargetFrame = m_FrameIndex++; bltParams.TargetRect = sample.DstRect; - bltParams.BackgroundColor.Y = 0x1000; - bltParams.BackgroundColor.Cb = 0x8000; - bltParams.BackgroundColor.Cr = 0x8000; bltParams.BackgroundColor.Alpha = 0xFFFF; bltParams.DestFormat.SampleFormat = DXVA2_SampleProgressiveFrame; @@ -471,11 +473,22 @@ void DXVA2Renderer::renderFrame(AVFrame* frame) bltParams.Alpha = DXVA2_Fixed32OpaqueAlpha(); + hr = m_Device->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 0, 0, 0), 0.0f, 0); + if (FAILED(hr)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "Clear() failed: %x", + hr); + av_frame_free(&frame); + return; + } + hr = m_Processor->VideoProcessBlt(m_RenderTarget, &bltParams, &sample, 1, nullptr); if (FAILED(hr)) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "VideoProcessBlt() failed: %x", hr); + av_frame_free(&frame); + return; } m_Device->Present(nullptr, nullptr, nullptr, nullptr); diff --git a/app/streaming/video/ffmpeg-renderers/sdl.cpp b/app/streaming/video/ffmpeg-renderers/sdl.cpp index b0258ecb..69ad5e40 100644 --- a/app/streaming/video/ffmpeg-renderers/sdl.cpp +++ b/app/streaming/video/ffmpeg-renderers/sdl.cpp @@ -41,6 +41,11 @@ bool SdlRenderer::initialize(SDL_Window* window, // logical rendering surface size is equal to the stream size SDL_RenderSetLogicalSize(m_Renderer, width, height); + // Draw a black frame until the video stream starts rendering + SDL_SetRenderDrawColor(m_Renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); + SDL_RenderClear(m_Renderer); + SDL_RenderPresent(m_Renderer); + m_Texture = SDL_CreateTexture(m_Renderer, SDL_PIXELFORMAT_YV12, SDL_TEXTUREACCESS_STREAMING,