summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2021-04-06 21:57:43 -0700
committerGravatar GitHub2021-04-06 21:57:43 -0700
commit068b2ffbcccfdf1fd77ba37e7bd9164272d1f7d0 (patch)
tree015b0ee7ad746242dae319a2ced93b032a307184
parentMerge pull request #6141 from lat9nq/cfg_gphcs_stack_use (diff)
parentvp9: Avoid memcpy with null pointers (diff)
downloadyuzu-068b2ffbcccfdf1fd77ba37e7bd9164272d1f7d0.tar.gz
yuzu-068b2ffbcccfdf1fd77ba37e7bd9164272d1f7d0.tar.xz
yuzu-068b2ffbcccfdf1fd77ba37e7bd9164272d1f7d0.zip
Merge pull request #6146 from lat9nq/vp9_empty_memcpy
vp9: Avoid memcpy with null pointers
-rw-r--r--src/video_core/command_classes/codecs/vp9.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/video_core/command_classes/codecs/vp9.cpp b/src/video_core/command_classes/codecs/vp9.cpp
index 59e586695..29bb31418 100644
--- a/src/video_core/command_classes/codecs/vp9.cpp
+++ b/src/video_core/command_classes/codecs/vp9.cpp
@@ -2,8 +2,9 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <cstring> // for std::memcpy 5#include <algorithm> // for std::copy
6#include <numeric> 6#include <numeric>
7#include "common/assert.h"
7#include "video_core/command_classes/codecs/vp9.h" 8#include "video_core/command_classes/codecs/vp9.h"
8#include "video_core/gpu.h" 9#include "video_core/gpu.h"
9#include "video_core/memory_manager.h" 10#include "video_core/memory_manager.h"
@@ -362,7 +363,8 @@ Vp9PictureInfo VP9::GetVp9PictureInfo(const NvdecCommon::NvdecRegisters& state)
362 // surface_luma_offset[0:3] contains the address of the reference frame offsets in the following 363 // surface_luma_offset[0:3] contains the address of the reference frame offsets in the following
363 // order: last, golden, altref, current. It may be worthwhile to track the updates done here 364 // order: last, golden, altref, current. It may be worthwhile to track the updates done here
364 // to avoid buffering frame data needed for reference frame updating in the header composition. 365 // to avoid buffering frame data needed for reference frame updating in the header composition.
365 std::memcpy(vp9_info.frame_offsets.data(), state.surface_luma_offset.data(), 4 * sizeof(u64)); 366 std::copy(state.surface_luma_offset.begin(), state.surface_luma_offset.begin() + 4,
367 vp9_info.frame_offsets.begin());
366 368
367 return vp9_info; 369 return vp9_info;
368} 370}
@@ -821,11 +823,11 @@ const std::vector<u8>& VP9::ComposeFrameHeader(const NvdecCommon::NvdecRegisters
821 823
822 // Write headers and frame to buffer 824 // Write headers and frame to buffer
823 frame.resize(uncompressed_header.size() + compressed_header.size() + bitstream.size()); 825 frame.resize(uncompressed_header.size() + compressed_header.size() + bitstream.size());
824 std::memcpy(frame.data(), uncompressed_header.data(), uncompressed_header.size()); 826 std::copy(uncompressed_header.begin(), uncompressed_header.end(), frame.begin());
825 std::memcpy(frame.data() + uncompressed_header.size(), compressed_header.data(), 827 std::copy(compressed_header.begin(), compressed_header.end(),
826 compressed_header.size()); 828 frame.begin() + uncompressed_header.size());
827 std::memcpy(frame.data() + uncompressed_header.size() + compressed_header.size(), 829 std::copy(bitstream.begin(), bitstream.end(),
828 bitstream.data(), bitstream.size()); 830 frame.begin() + uncompressed_header.size() + compressed_header.size());
829 831
830 // keep track of frame number 832 // keep track of frame number
831 current_frame_number++; 833 current_frame_number++;