From: Steinar H. Gunderson Date: Mon, 6 Apr 2020 17:12:28 +0000 (+0200) Subject: Fix v4l2proxy when stride != width * 2. X-Git-Tag: 0.7.5~3 X-Git-Url: https://git.sesse.net/?p=bmusb;a=commitdiff_plain;h=d2cda981ad9713b6267e6f98078a7e01d397a1b3 Fix v4l2proxy when stride != width * 2. This is only for cleanness, since stride == width * 2 for all 8-bit modes that we know of. Also fixes an overrun for non-SSE2. --- diff --git a/v4l2proxy.cpp b/v4l2proxy.cpp index 3cb3bc0..4e0b36b 100644 --- a/v4l2proxy.cpp +++ b/v4l2proxy.cpp @@ -69,7 +69,7 @@ void frame_callback(uint16_t timecode, uint8_t *origptr = video_frame.data + video_offset + video_format.extra_lines_top * video_format.stride; #if __SSE2__ __m128i *ptr = (__m128i *)origptr; - for (unsigned i = 0; i < video_format.width * video_format.height / 8; ++i) { + for (unsigned i = 0; i < video_format.stride * video_format.height / 16; ++i) { __m128i val = _mm_loadu_si128(ptr); val = _mm_slli_epi16(val, 8) | _mm_srli_epi16(val, 8); _mm_storeu_si128(ptr, val); @@ -77,7 +77,7 @@ void frame_callback(uint16_t timecode, } #else uint8_t *ptr = origptr; - for (unsigned i = 0; i < video_format.width * video_format.height; ++i) { + for (unsigned i = 0; i < video_format.stride * video_format.height / 4; ++i) { swap(ptr[0], ptr[1]); swap(ptr[2], ptr[3]); ptr += 4;