mirror of
https://github.com/outbackdingo/UltraGrid.git
synced 2026-03-22 09:40:30 +00:00
fixed vc_copylineV210toY216 conversion
This commit is contained in:
@@ -95,7 +95,7 @@ typedef enum {
|
||||
RG48, ///< 16-bit RGB little-endian (RlRhGl...)
|
||||
AV1, ///< AOMedia Video 1
|
||||
I420, ///< planar YCbCr 4:2:0
|
||||
Y216, ///< YCbCr 422 16-bit - Y0 Cb Y1 Cr
|
||||
Y216, ///< YCbCr 422 16-bit little-endian - Y0 Cb Y1 Cr
|
||||
Y416, ///< interleaved little-endian YCbCr 4444 16-bit - UYVA
|
||||
PRORES, ///< abstract Apple ProRes, must not be used in transmit
|
||||
PRORES_4444, ///< Apple ProRes 4444
|
||||
|
||||
@@ -2763,13 +2763,37 @@ static void vc_copylineV210toY216(unsigned char * __restrict dst, const unsigned
|
||||
UNUSED(bshift);
|
||||
assert((uintptr_t) dst % 2 == 0);
|
||||
assert((uintptr_t) src % 4 == 0);
|
||||
OPTIMIZED_FOR (int x = 0; x < dst_len / 6; ++x) {
|
||||
const uint32_t *s = (const void *) (src + x * 4);
|
||||
uint16_t *d = (void *) (dst + x * 6);
|
||||
OPTIMIZED_FOR (int x = 0; x < dst_len / 24; ++x) {
|
||||
const uint32_t *s = (const void *) (src + x * 16);
|
||||
uint16_t *d = (void *) (dst + x * 24);
|
||||
uint32_t tmp = *s++;
|
||||
*d++ = (tmp & 0x3FFU) << 6U;
|
||||
*d++ = ((tmp >> 10U) & 0x3FFU) << 6U;
|
||||
*d++ = ((tmp >> 20U) & 0x3FFU) << 6U;
|
||||
unsigned u = (tmp & 0x3FFU) << 6U;
|
||||
unsigned y0 = ((tmp >> 10U) & 0x3FFU) << 6U;
|
||||
unsigned v = ((tmp >> 20U) & 0x3FFU) << 6U;
|
||||
tmp = *s++;
|
||||
unsigned y1 = (tmp & 0x3FFU) << 6U;
|
||||
*d++ = y0;
|
||||
*d++ = u;
|
||||
*d++ = y1;
|
||||
*d++ = v;
|
||||
u = ((tmp >> 10U) & 0x3FFU) << 6U;
|
||||
y0 = ((tmp >> 20U) & 0x3FFU) << 6U;
|
||||
tmp = *s++;
|
||||
v = (tmp & 0x3FFU) << 6U;
|
||||
y1 = ((tmp >> 10U) & 0x3FFU) << 6U;
|
||||
*d++ = y0;
|
||||
*d++ = u;
|
||||
*d++ = y1;
|
||||
*d++ = v;
|
||||
u = ((tmp >> 20U) & 0x3FFU) << 6U;
|
||||
tmp = *s++;
|
||||
y0 = (tmp & 0x3FFU) << 6U;
|
||||
v = ((tmp >> 10U) & 0x3FFU) << 6U;
|
||||
y1 = ((tmp >> 20U) & 0x3FFU) << 6U;
|
||||
*d++ = y0;
|
||||
*d++ = u;
|
||||
*d++ = y1;
|
||||
*d++ = v;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user