17f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca/************************************************************************** 27f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 37f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * Copyright 2010 VMware, Inc. 47f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * All Rights Reserved. 57f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 67f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 77f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * copy of this software and associated documentation files (the 87f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * "Software"), to deal in the Software without restriction, including 97f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * permit persons to whom the Software is furnished to do so, subject to 127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * the following conditions: 137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * USE OR OTHER DEALINGS IN THE SOFTWARE. 217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * The above copyright notice and this permission notice (including the 237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * next paragraph) shall be included in all copies or substantial portions 247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * of the Software. 257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca **************************************************************************/ 277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca/** 307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * @file 317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * YUV and RGB subsampled formats conversion. 327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * 337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca */ 357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#include "util/u_format_yuv.h" 387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 407f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 41d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 0) & 0xff); 617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 8) & 0xff); 627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 16) & 0xff); 637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 24) & 0xff); 647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 0) & 0xff); 867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 8) & 0xff); 877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 16) & 0xff); 887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 24) & 0xff); 897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 1007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1027f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 103d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 1057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 1067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 1077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 1087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 1107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 1117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 1127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 1137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t r, g0, g1, b; 1147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 1167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 1177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 1197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 1207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 1217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 0) & 0xff; 1237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 8) & 0xff; 1247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 16) & 0xff; 1257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 24) & 0xff; 1267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 1297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 1327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 1357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 1387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 1417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 1427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 1447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 1457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 1467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 0) & 0xff; 1487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 8) & 0xff; 1497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 16) & 0xff; 1507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 24) & 0xff; 1517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 1547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 1597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 1607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 1627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1647f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 165d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 1677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 1687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 1697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 1707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 1727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 1737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 1747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 1757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 1767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 1787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = 0.5f*(src[0] + src[4]); 1797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 1807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 1817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = 0.5f*(src[2] + src[6]); 1827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(r); 1847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g0) << 8; 1857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 16; 1867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 24; 1877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 1897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 1907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 1917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 1937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 1957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 1987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 1997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 2007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 2017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 2027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(r); 2047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g0) << 8; 2057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 16; 2067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 24; 2077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 2097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 2107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 2117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 2137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 2167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 2177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 2197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2217f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 222d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 2237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 2247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 2257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 2277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 2297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 2307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 2317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t r, g0, g1, b; 2327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 2337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 2357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (src[0] + src[4] + 1) >> 1; 2367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 2377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 2387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (src[2] + src[6] + 1) >> 1; 2397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = r; 2417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g0 << 8; 2427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 16; 2437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 24; 2447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 2467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 2477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 2487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 2507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 2527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 2557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 2567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 2577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 2587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 2597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = r; 2617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g0 << 8; 2627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 16; 2637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 24; 2647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 2667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 2677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 2687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 2707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 2737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 2747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 2767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2787f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 279d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 2807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 2817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 2837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 2847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = ubyte_to_float(src[0]); /* r */ 2867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = ubyte_to_float(src[1 + 2*i]); /* g */ 2877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = ubyte_to_float(src[2]); /* b */ 2887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 2897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 2907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2927f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 293d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 2947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 2957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 2967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 2987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 3007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 3017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 3027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 3037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 3047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 3067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 3077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 3097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 3107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 3117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 0) & 0xff); 3137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 8) & 0xff); 3147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 16) & 0xff); 3157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 24) & 0xff); 3167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 3217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 3257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 3277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 3317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 3327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 3347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 3357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 3367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 0) & 0xff); 3387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 8) & 0xff); 3397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 16) & 0xff); 3407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 24) & 0xff); 3417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 3467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 3497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 3507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 3527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3547f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 355d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 3567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 3577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 3587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 3597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 3607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 3627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 3637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 3647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 3657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t r, g0, g1, b; 3667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 3687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 3697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 3717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 3727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 3737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 0) & 0xff; 3757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 8) & 0xff; 3767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 16) & 0xff; 3777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 24) & 0xff; 3787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 3837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 3877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 3897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 3937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 3947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 3967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 3977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 3987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 0) & 0xff; 4007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 8) & 0xff; 4017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 16) & 0xff; 4027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 24) & 0xff; 4037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 4057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 4067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 4077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 4087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 4117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 4127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 4147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4167f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 417d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 4187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 4197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 4207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 4217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 4227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 4247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 4257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 4267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 4277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 4287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 4307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = 0.5f*(src[0] + src[4]); 4317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 4337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = 0.5f*(src[2] + src[6]); 4347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(g0); 4367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(r) << 8; 4377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 16; 4387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 24; 4397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 4417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 4427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 4437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 4457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 4477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 4507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 4517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 4537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 4547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(g0); 4567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(r) << 8; 4577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 16; 4587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 24; 4597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 4617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 4627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 4637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 4657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 4687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 4697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 4717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4737f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 474d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 4757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 4767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 4777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 4787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 4797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 4817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 4827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 4837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t r, g0, g1, b; 4847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 4857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 4877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (src[0] + src[4] + 1) >> 1; 4887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 4907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (src[2] + src[6] + 1) >> 1; 4917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = g0; 4937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= r << 8; 4947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 16; 4957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 24; 4967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 4987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 4997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 5007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 5027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 5047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 5077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 5087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 5097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 5107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 5117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = g0; 5137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= r << 8; 5147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 16; 5157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 24; 5167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 5187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 5197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 5207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 5227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 5257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 5267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 5287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5307f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 531d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 5327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 5337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 5347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 5357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 5367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = ubyte_to_float(src[1]); /* r */ 5387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = ubyte_to_float(src[0 + 2*i]); /* g */ 5397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = ubyte_to_float(src[3]); /* b */ 5407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 5427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5447f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 545d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_unpack_rgba_float(float *dst_row, unsigned dst_stride, 5467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 5477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 5487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 5497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 5507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 5527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 5537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 5547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 5557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 5567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 5587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 5597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 5617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 5627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 5637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 5657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 5667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 5707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); 5747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 5797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 5807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 5827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 5837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 5847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 5867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 5877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 5917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 5957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 5967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 5987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6007f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 601d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 6027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 6037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 6047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 6057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 6067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 6087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 6097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 6107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 6117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 6127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 6147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 6157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 6177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 6187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 6197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 6217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 6227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 6237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 6247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 6267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 6277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 6287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); 6307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 6317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 6327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 6357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 6367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 6387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 6397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 6407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 6427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 6437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 6447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 6457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 6477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 6487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 6517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 6527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 6547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6567f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 657d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 6587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 6597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 6607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 6617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 6627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 6647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 6657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 6667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 6677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 6687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 6707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 6717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 6737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 6747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[4], src[5], src[6], 6757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 6767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 6787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 6797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 6817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 6827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 6837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 6847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 6867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 6877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 6887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 6907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 6927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 6957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 6967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 6977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 6987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 7007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 7017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 7027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 7037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 7057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 7067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 7077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 7097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 7127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 7137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7177f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 718d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 7197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 7207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 7217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 7227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 7237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 7257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 7267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 7277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 7287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 7297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 7317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 7327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 7347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 7357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], 7367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 7377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 7397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 7407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 7427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 7437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 7447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 7457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 7477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 7487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 7497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 7517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 7537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 7567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 7577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 7587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 7597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 7617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 7627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 7637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 7647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 7667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 7677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 7687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 7707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 7737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 7747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7787f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 779d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_fetch_rgba_float(float *dst, const uint8_t *src, 7807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 7817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 7827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y, u, v; 7837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 7857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 7867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y = src[1 + i*2]; 7887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = src[0]; 7897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = src[2]; 7907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); 7927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; 7947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7977f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 798d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_unpack_rgba_float(float *dst_row, unsigned dst_stride, 7997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 8007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 8017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 8027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 8037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 8057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 8067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 8077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 8087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 8097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 8117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 8127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 8147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 8157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 8167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 8187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 8197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 8207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 8217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 8237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 8247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 8257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); 8277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 8287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 8297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 8327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 8337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 8357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 8367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 8377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 8397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 8407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 8417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 8427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 8447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 8457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 8487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 8497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 8517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8537f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 854d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 8557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 8567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 8577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 8587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 8597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 8617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 8627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 8637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 8647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 8657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 8677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src++; 8687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 8707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 8717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 8727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 8747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 8757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 8767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 8777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 8797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 8807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 8817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); 8837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 8847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 8857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 8887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = *src; 8897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 8917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 8927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 8937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 8957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 8967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 8977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 8987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 9007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 9017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 9047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 9057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 9077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9097f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 910d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 9117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 9127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 9137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 9147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 9157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 9177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 9187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 9197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 9207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 9217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 9237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 9247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 9267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 9277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[4], src[5], src[6], 9287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 9297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 9317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 9327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 9347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 9357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 9367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 9377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 9397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 9407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 9417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 9437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 9457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 9487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 9497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 9507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 9517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 9537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 9547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 9557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 9567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 9587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 9597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 9607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 9627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 9657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 9667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 9687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9707f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 971d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 9727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 9737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 9747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 9757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 9767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 9787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 9797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 9807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 9817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 9827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 9847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 9857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 9877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 9887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], 9897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 9907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 9927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 9937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 9957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 9967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 9977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 9987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 10007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 10017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 10027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst++ = value; 10047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 10067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 10077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 10097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 10107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 10117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 10127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 10147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 10157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 10167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 10177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#ifdef PIPE_ARCH_BIG_ENDIAN 10197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = util_bswap32(value); 10207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#endif 10217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca *dst = value; 10237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 10247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 10267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 10277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 10287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 10297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10317f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 1032d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_fetch_rgba_float(float *dst, const uint8_t *src, 10337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 10347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 10357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y, u, v; 10367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 10387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 10397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y = src[0 + i*2]; 10417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = src[1]; 10427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = src[3]; 10437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); 10457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 10467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; 10477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 1048a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton 1049a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton/* XXX: Stubbed for now */ 1050a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1051a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1052a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1053a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1054a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1055a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1056a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1057a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1058a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1059a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1060a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1061a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1062a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1063a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1064a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1065a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1066a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1067a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_fetch_rgba_float(float *dst, const uint8_t *src, 1068a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 1069a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1070a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1071a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1072a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1073a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1074a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1075a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1076a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1077a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1078a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1079a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1080a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1081a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1082a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1083a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1084a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1085a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1086a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_fetch_rgba_float(float *dst, const uint8_t *src, 1087a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 1088a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1089a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1090a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1091a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1092a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1093a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1094a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1095a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1096a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1097a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1098a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1099a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1100a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1101a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1102a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1103a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1104a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1105a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_fetch_rgba_float(float *dst, const uint8_t *src, 1106a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 1107a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1108a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1109a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1110a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1111a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1112a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1113a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1114a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1115a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1116a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1117a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1118a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1119a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1120a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1121a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1122a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1123a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1124a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_fetch_rgba_float(float *dst, const uint8_t *src, 1125a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 1126a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1127a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1128a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1129a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1130a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1131a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1132a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1133a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1134a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1135a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1136a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1137a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1138a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1139a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1140a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1141a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1142a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1143a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_fetch_rgba_float(float *dst, const uint8_t *src, 1144a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 11454f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11464f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11474f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 11484f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11494f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11504f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11514f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11524f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 11534f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11544f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11554f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11564f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11574f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 11584f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const float *src_row, unsigned src_stride, 11594f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11604f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11614f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11624f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 11634f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11644f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11654f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11664f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11674f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 11684f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned i, unsigned j) {} 11694f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11704f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11714f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 11724f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11734f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11744f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11754f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11764f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 11774f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11784f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11794f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11804f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11814f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 11824f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const float *src_row, unsigned src_stride, 11834f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11844f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11854f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11864f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 11874f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 11884f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 11894f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 11904f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 11914f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 11924f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned i, unsigned j) {} 1193