diff --git a/apps/RenderCadenceCompositor/frames/InputFrameMailbox.cpp b/apps/RenderCadenceCompositor/frames/InputFrameMailbox.cpp index 52baa15..b8b9f75 100644 --- a/apps/RenderCadenceCompositor/frames/InputFrameMailbox.cpp +++ b/apps/RenderCadenceCompositor/frames/InputFrameMailbox.cpp @@ -90,11 +90,22 @@ bool InputFrameMailbox::SubmitFrame(const void* bytes, unsigned rowBytes, uint64 Slot& slot = mSlots[slotIndex]; const std::size_t destinationRowBytes = mConfig.rowBytes; - const std::size_t copyRowBytes = (std::min)(static_cast(rowBytes), destinationRowBytes); + const std::size_t sourceRowBytes = static_cast(rowBytes); const unsigned char* source = static_cast(bytes); - for (unsigned y = 0; y < mConfig.height; ++y) + if (sourceRowBytes == destinationRowBytes) { - std::memcpy(slot.bytes.data() + static_cast(y) * destinationRowBytes, source + static_cast(y) * rowBytes, copyRowBytes); + std::memcpy(slot.bytes.data(), source, destinationRowBytes * static_cast(mConfig.height)); + } + else + { + const std::size_t copyRowBytes = (std::min)(sourceRowBytes, destinationRowBytes); + for (unsigned y = 0; y < mConfig.height; ++y) + { + std::memcpy( + slot.bytes.data() + static_cast(y) * destinationRowBytes, + source + static_cast(y) * sourceRowBytes, + copyRowBytes); + } } slot.state = InputFrameSlotState::Ready;