diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2023-02-11 18:35:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-11 18:35:16 +0100 |
commit | c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79 (patch) | |
tree | 9cdc8b3a593fa575c98e8f1fcf6096ae018a2167 | |
parent | Merge pull request #9773 from bunnei/fix-process-resource (diff) | |
parent | video_core: Speed up video frame data copy (diff) | |
download | yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.gz yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.bz2 yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.lz yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.xz yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.tar.zst yuzu-c97b5c9ff9e3aec10bf0cab2ff954de3f61cec79.zip |
-rw-r--r-- | src/video_core/host1x/vic.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/video_core/host1x/vic.cpp b/src/video_core/host1x/vic.cpp index 36a04e4e0..10d7ef884 100644 --- a/src/video_core/host1x/vic.cpp +++ b/src/video_core/host1x/vic.cpp @@ -189,9 +189,7 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) { for (std::size_t y = 0; y < frame_height; ++y) { const std::size_t src = y * stride; const std::size_t dst = y * aligned_width; - for (std::size_t x = 0; x < frame_width; ++x) { - luma_buffer[dst + x] = luma_src[src + x]; - } + std::memcpy(luma_buffer.data() + dst, luma_src + src, frame_width); } host1x.MemoryManager().WriteBlock(output_surface_luma_address, luma_buffer.data(), luma_buffer.size()); @@ -205,15 +203,15 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) { // Frame from FFmpeg software // Populate chroma buffer from both channels with interleaving. const std::size_t half_width = frame_width / 2; + u8* chroma_buffer_data = chroma_buffer.data(); const u8* chroma_b_src = frame->data[1]; const u8* chroma_r_src = frame->data[2]; for (std::size_t y = 0; y < half_height; ++y) { const std::size_t src = y * half_stride; const std::size_t dst = y * aligned_width; - for (std::size_t x = 0; x < half_width; ++x) { - chroma_buffer[dst + x * 2] = chroma_b_src[src + x]; - chroma_buffer[dst + x * 2 + 1] = chroma_r_src[src + x]; + chroma_buffer_data[dst + x * 2] = chroma_b_src[src + x]; + chroma_buffer_data[dst + x * 2 + 1] = chroma_r_src[src + x]; } } break; @@ -225,9 +223,7 @@ void Vic::WriteYUVFrame(const AVFrame* frame, const VicConfig& config) { for (std::size_t y = 0; y < half_height; ++y) { const std::size_t src = y * stride; const std::size_t dst = y * aligned_width; - for (std::size_t x = 0; x < frame_width; ++x) { - chroma_buffer[dst + x] = chroma_src[src + x]; - } + std::memcpy(chroma_buffer.data() + dst, chroma_src + src, frame_width); } break; } |