Merge pull request #1903 from RisingFog/libav

Use ffmpeg for Windows Video Dumping instead of VFW
This commit is contained in:
skidau
2015-01-26 12:03:44 +11:00
178 changed files with 36645 additions and 379 deletions

View File

@ -802,7 +802,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
{
s_recordWidth = GetTargetRectangle().GetWidth();
s_recordHeight = GetTargetRectangle().GetHeight();
bAVIDumping = AVIDump::Start(D3D::hWnd, s_recordWidth, s_recordHeight);
bAVIDumping = AVIDump::Start(s_recordWidth, s_recordHeight);
if (!bAVIDumping)
{
PanicAlert("Error dumping frames to AVI.");
@ -827,6 +827,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbStride, u32 fbHeight, co
h = s_recordHeight;
}
formatBufferDump((u8*)map.pData, &frame_data[0], s_recordWidth, s_recordHeight, map.RowPitch);
FlipImageData(&frame_data[0], w, h);
AVIDump::AddFrame(&frame_data[0], GetTargetRectangle().GetWidth(), GetTargetRectangle().GetHeight());
D3D::context->Unmap(s_screenshot_texture, 0);
}
@ -1279,4 +1280,16 @@ void Renderer::BlitScreen(TargetRectangle src, TargetRectangle dst, D3DTexture2D
}
}
void Renderer::FlipImageData(u8 *data, int w, int h, int pixel_width)
{
for (int y = 0; y < h / 2; ++y)
{
for (int x = 0; x < w; ++x)
{
for (int delta = 0; delta < pixel_width; ++delta)
std::swap(data[(y * w + x) * pixel_width + delta], data[((h - 1 - y) * w + x) * pixel_width + delta]);
}
}
}
} // namespace DX11