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 37a7663729d2f2b328c55028a72e8eb436387aa823Brian Paul#include "util/u_debug.h" 387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca#include "util/u_format_yuv.h" 397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 417f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 42d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 5514ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 0) & 0xff); 587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 8) & 0xff); 597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 16) & 0xff); 607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 24) & 0xff); 617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 7614ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 0) & 0xff); 797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 8) & 0xff); 807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 16) & 0xff); 817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 24) & 0xff); 827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 957f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 96d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 1007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 1017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 1037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 1047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 1057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 1067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t r, g0, g1, b; 1077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 10914ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 1107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 0) & 0xff; 1127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 8) & 0xff; 1137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 16) & 0xff; 1147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 24) & 0xff; 1157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 1187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 1217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 1247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 1277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 13014ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 1317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 0) & 0xff; 1337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 8) & 0xff; 1347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 16) & 0xff; 1357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 24) & 0xff; 1367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 1387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 1397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 1407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 1417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 1447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 1457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 1477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1497f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 150d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 1527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 1537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 1547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 1557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 1577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 1587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 1597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 1607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 1617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 1637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = 0.5f*(src[0] + src[4]); 1647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 1657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 1667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = 0.5f*(src[2] + src[6]); 1677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(r); 1697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g0) << 8; 1707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 16; 1717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 24; 1727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 17314ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 1747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 1767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 1797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 1807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 1817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 1827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 1837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(r); 1857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g0) << 8; 1867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 16; 1877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 24; 1887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 18914ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 1907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 1937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 1947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 1957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 1967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 1987f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 199d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 2007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 2017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 2027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 2047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 2067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 2077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 2087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t r, g0, g1, b; 2097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 2107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 2127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (src[0] + src[4] + 1) >> 1; 2137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 2147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 2157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (src[2] + src[6] + 1) >> 1; 2167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = r; 2187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g0 << 8; 2197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 16; 2207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 24; 2217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 22214ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 2237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 2257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 2287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 2297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 2307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 2317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 2327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = r; 2347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g0 << 8; 2357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 16; 2367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 24; 2377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 23814ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 2397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 2427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 2437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 2457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2477f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 248d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_r8g8_b8g8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 2497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 2507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 2527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 2537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = ubyte_to_float(src[0]); /* r */ 2557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = ubyte_to_float(src[1 + 2*i]); /* g */ 2567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = ubyte_to_float(src[2]); /* b */ 2577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 2587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 2597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2617f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 262d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 2637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 2647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 2657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 2667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 2677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 2697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 2707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 2717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 2727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 2737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 27514ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 2767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 0) & 0xff); 2787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 8) & 0xff); 2797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 16) & 0xff); 2807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 24) & 0xff); 2817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 2837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 2847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 2857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 2867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 2877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 2897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 2907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 2917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 2927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 2937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 2947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 29614ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 2977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 2987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = ubyte_to_float((value >> 0) & 0xff); 2997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = ubyte_to_float((value >> 8) & 0xff); 3007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = ubyte_to_float((value >> 16) & 0xff); 3017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = ubyte_to_float((value >> 24) & 0xff); 3027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 3077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 3107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 3117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 3137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3157f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 316d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 3177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 3187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 3197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 3207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 3217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 3237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 3247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 3257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 3267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t r, g0, g1, b; 3277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 32914ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 3307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 0) & 0xff; 3327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 8) & 0xff; 3337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 16) & 0xff; 3347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 24) & 0xff; 3357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 3407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g1; /* g */ 3447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 3467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 3477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 35014ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 3517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = (value >> 0) & 0xff; 3537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (value >> 8) & 0xff; 3547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = (value >> 16) & 0xff; 3557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (value >> 24) & 0xff; 3567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = r; /* r */ 3587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = g0; /* g */ 3597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = b; /* b */ 3607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 3617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 3647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 3657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 3677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3697f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 370d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 3717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 3727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 3737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 3747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 3757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 3777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 3787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 3797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float r, g0, g1, b; 3807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 3817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 3837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = 0.5f*(src[0] + src[4]); 3847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 3857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 3867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = 0.5f*(src[2] + src[6]); 3877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(g0); 3897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(r) << 8; 3907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 16; 3917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 24; 3927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 39314ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 3947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 3967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 3977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 3987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 3997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 4007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 4027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 4037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = float_to_ubyte(g0); 4057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(r) << 8; 4067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(g1) << 16; 4077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= float_to_ubyte(b) << 24; 4087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 40914ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 4107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 4137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 4147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 4167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4187f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 419d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 4207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 4217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 4227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 4237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 4247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 4267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 4277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 4287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t r, g0, g1, b; 4297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 4307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 4327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = (src[0] + src[4] + 1) >> 1; 4337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = src[5]; 4357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = (src[2] + src[6] + 1) >> 1; 4367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = g0; 4387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= r << 8; 4397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 16; 4407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 24; 4417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 44214ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 4437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 4457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 4487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca r = src[0]; 4497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g0 = src[1]; 4507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca g1 = 0; 4517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca b = src[2]; 4527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = g0; 4547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= r << 8; 4557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= g1 << 16; 4567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= b << 24; 4577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 45814ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 4597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 4627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 4637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 4647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 4657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4677f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 468d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_g8r8_g8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 4697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 4707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 4717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 4727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 4737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[0] = ubyte_to_float(src[1]); /* r */ 4757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[1] = ubyte_to_float(src[0 + 2*i]); /* g */ 4767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[2] = ubyte_to_float(src[3]); /* b */ 4777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 4787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 4797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4817f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 482d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_unpack_rgba_float(float *dst_row, unsigned dst_stride, 4837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 4847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 4857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 4867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 4877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 4897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 4907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 4917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 4927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 4937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 49514ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 4967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 4977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 4987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 4997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 5037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); 5077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 51214ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 5137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 5157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 5167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 5207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 5217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 5247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 5257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 5277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5297f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 530d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 5317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 5327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 5337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 5347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 5357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 5377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 5387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 5397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 5407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 5417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 54314ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 5447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 5467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 5477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 5517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 5527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); 5557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 5567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 5577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 56014ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 5617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 0) & 0xff; 5637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 8) & 0xff; 5647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 16) & 0xff; 5657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 24) & 0xff; 5667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 5687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 5697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 5727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 5737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 5747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 5757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5777f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 578d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 5797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 5807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 5817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 5827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 5837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 5857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 5867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 5877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 5887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 5897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 5917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 5927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 5947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 5957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[4], src[5], src[6], 5967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 5977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 5987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 5997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 6007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 6027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 6037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 6047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 6057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 60614ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 6077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 6097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 6127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 6137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 6147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 6157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 6177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 6187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 6197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 6207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 62114ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 6227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 6257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 6267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 6287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6307f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 631d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 6327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 6337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 6347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 6357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 6367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 6387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 6397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 6407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 6417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 6427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 6447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 6457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 6477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 6487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], 6497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 6507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6517f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 6527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 6537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 6557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 6567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 6577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 6587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 65914ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 6607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 6627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 6657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 6667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 6677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 6687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = u; 6707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y0 << 8; 6717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 16; 6727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 24; 6737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 67414ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 6757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 6787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 6797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 6807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 6817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6837f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 684d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_uyvy_fetch_rgba_float(float *dst, const uint8_t *src, 6857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 6867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 6877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y, u, v; 6887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 6907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 6917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y = src[1 + i*2]; 6937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = src[0]; 6947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = src[2]; 6957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); 6977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 6987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; 6997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7027f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 703d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_unpack_rgba_float(float *dst_row, unsigned dst_stride, 7047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 7057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 7067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 7077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 7087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 7107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca float *dst = dst_row; 7117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 7127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 7137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 7147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 71614ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 7177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 7197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 7207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 7217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 7227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 7247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 7257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 7267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7277f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y1, u, v, &dst[0], &dst[1], &dst[2]); 7287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 7297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 7307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 73314ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 7347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 7367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 7377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 7387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 7397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y0, u, v, &dst[0], &dst[1], &dst[2]); 7417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; /* a */ 7427f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 7457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 7467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7507f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 751d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 7527f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 7537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 7547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 7557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 7567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 7587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t *dst = dst_row; 7597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint32_t *src = (const uint32_t *)src_row; 7607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 7617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 7627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 76414ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src++); 7657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 7677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 7687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 7697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 7707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 7727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 7737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 7747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y1, u, v, &dst[0], &dst[1], &dst[2]); 7767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 7777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst += 4; 7787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7807f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 78114ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner value = util_cpu_to_le32(*src); 7827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y0 = (value >> 0) & 0xff; 7847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (value >> 8) & 0xff; 7857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = (value >> 16) & 0xff; 7867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (value >> 24) & 0xff; 7877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_8unorm(y0, u, v, &dst[0], &dst[1], &dst[2]); 7897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 0xff; /* a */ 7907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 7937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 7947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 7957f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 7967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 7987f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 799d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 8007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src_row, unsigned src_stride, 8017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 8027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 8037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 8047f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8057f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 8067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const float *src = src_row; 8077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 8087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 8097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 8107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 8127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 8137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 8157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 8167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[4], src[5], src[6], 8177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 8187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 8207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 8217f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8227f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 8237f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 8247f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 8257f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 8267f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 82714ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 8287f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8297f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 8307f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8317f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8327f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 8337f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_float_to_yuv(src[0], src[1], src[2], 8347f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 8357f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 8367f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8377f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 8387f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 8397f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 8407f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 8417f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 84214ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 8437f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8447f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8457f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 8467f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 8477f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8487f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 8497f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8507f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8517f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 852d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 8537f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src_row, unsigned src_stride, 8547f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned width, unsigned height) 8557f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 8567f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned x, y; 8577f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8587f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (y = 0; y < height; y += 1) { 8597f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca const uint8_t *src = src_row; 8607f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t *dst = (uint32_t *)dst_row; 8617f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u, v; 8627f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint32_t value; 8637f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8647f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca for (x = 0; x + 1 < width; x += 2) { 8657f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y0, y1, u0, u1, v0, v1, u, v; 8667f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8677f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 8687f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u0, &v0); 8697f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[4], src[5], src[6], 8707f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y1, &u1, &v1); 8717f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8727f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = (u0 + u1 + 1) >> 1; 8737f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = (v0 + v1 + 1) >> 1; 8747f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8757f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 8767f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 8777f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 8787f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 8797f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 88014ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst++ = util_le32_to_cpu(value); 8817f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8827f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src += 8; 8837f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8847f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8857f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca if (x < width) { 8867f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_rgb_8unorm_to_yuv(src[0], src[1], src[2], 8877f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca &y0, &u, &v); 8887f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y1 = 0; 8897f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8907f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value = y0; 8917f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= u << 8; 8927f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= y1 << 16; 8937f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca value |= v << 24; 8947f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 89514ded5ee61b2dfc23878c4a6f38021b15bd0a2fcMatt Turner *dst = util_le32_to_cpu(value); 8967f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 8977f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 8987f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst_row += dst_stride/sizeof(*dst_row); 8997f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca src_row += src_stride/sizeof(*src_row); 9007f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca } 9017f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 9027f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9037f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9047f9444050fbf91a5727617ba39806f28ea0921a2José Fonsecavoid 905d3808b1b1f34dbb826b99102786d94e1baf9d667José Fonsecautil_format_yuyv_fetch_rgba_float(float *dst, const uint8_t *src, 9067f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca unsigned i, unsigned j) 9077f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca{ 9087f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca uint8_t y, u, v; 9097f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9107f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(i < 2); 9117f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca assert(j < 1); 9127f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9137f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca y = src[0 + i*2]; 9147f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca u = src[1]; 9157f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca v = src[3]; 9167f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9177f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca util_format_yuv_to_rgb_float(y, u, v, &dst[0], &dst[1], &dst[2]); 9187f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca 9197f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca dst[3] = 1.0f; 9207f9444050fbf91a5727617ba39806f28ea0921a2José Fonseca} 921a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton 922a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton/* XXX: Stubbed for now */ 923a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 924a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 925a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 926a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 927a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 928a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 929a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 930a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 931a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 932a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_unpack_rgba_float(float *dst_row, unsigned dst_stride, 933a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 934a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 935a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 936a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 937a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 938a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 939a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 940a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv12_fetch_rgba_float(float *dst, const uint8_t *src, 941a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 942a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 943a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 944a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 945a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 946a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 947a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 948a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 949a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 950a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 951a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_unpack_rgba_float(float *dst_row, unsigned dst_stride, 952a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 953a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 954a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 955a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 956a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 957a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 958a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 959a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_yv16_fetch_rgba_float(float *dst, const uint8_t *src, 960a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 961a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 962a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 963a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 964a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 965a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 966a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 967a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 968a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 969a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 970a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_unpack_rgba_float(float *dst_row, unsigned dst_stride, 971a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 972a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 973a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 974a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 975a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 976a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 977a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 978a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_iyuv_fetch_rgba_float(float *dst, const uint8_t *src, 979a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 980a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 981a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 982a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 983a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 984a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 985a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 986a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 987a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 988a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 989a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_unpack_rgba_float(float *dst_row, unsigned dst_stride, 990a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 991a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 992a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 993a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 994a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 995a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 996a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 997a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv12_fetch_rgba_float(float *dst, const uint8_t *src, 998a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 999a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1000a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1001a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1002a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1003a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1004a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 1005a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1006a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1007a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1008a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_unpack_rgba_float(float *dst_row, unsigned dst_stride, 1009a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const uint8_t *src_row, unsigned src_stride, 1010a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1011a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1012a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 1013a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton const float *src_row, unsigned src_stride, 1014a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned width, unsigned height) {} 1015a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonvoid 1016a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Mantonutil_format_nv21_fetch_rgba_float(float *dst, const uint8_t *src, 1017a8ea1dacc63ac567498049e5756c247b9fec6cd9Younes Manton unsigned i, unsigned j) {} 10184f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10194f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10204f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 10214f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10224f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10234f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10244f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10254f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 10264f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10274f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10284f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10294f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10304f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 10314f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const float *src_row, unsigned src_stride, 10324f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10334f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10344f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10354f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 10364f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10374f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10384f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10394f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10404f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_r8g8_r8b8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 10414f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned i, unsigned j) {} 10424f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10434f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10444f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_unpack_rgba_float(float *dst_row, unsigned dst_stride, 10454f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10464f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10474f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10484f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10494f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_unpack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 10504f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10514f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10524f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10534f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10544f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_pack_rgba_float(uint8_t *dst_row, unsigned dst_stride, 10554f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const float *src_row, unsigned src_stride, 10564f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10574f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10584f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10594f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride, 10604f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König const uint8_t *src_row, unsigned src_stride, 10614f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned width, unsigned height) {} 10624f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König 10634f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königvoid 10644f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian Königutil_format_g8r8_b8r8_unorm_fetch_rgba_float(float *dst, const uint8_t *src, 10654f41f8edb3a999a5b752eaa51e7fe6444f14a61dChristian König unsigned i, unsigned j) {} 1066