170404fa9781f13a8ca07d621f74f3810daab9704Jason Sams/* 270404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * Copyright (C) 2014 The Android Open Source Project 370404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * 470404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 570404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * you may not use this file except in compliance with the License. 670404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * You may obtain a copy of the License at 770404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * 870404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 970404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * 1070404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * Unless required by applicable law or agreed to in writing, software 1170404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1270404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1370404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * See the License for the specific language governing permissions and 1470404fa9781f13a8ca07d621f74f3810daab9704Jason Sams * limitations under the License. 1570404fa9781f13a8ca07d621f74f3810daab9704Jason Sams */ 1670404fa9781f13a8ca07d621f74f3810daab9704Jason Sams 1770404fa9781f13a8ca07d621f74f3810daab9704Jason Sams#include "rs_core.rsh" 1870404fa9781f13a8ca07d621f74f3810daab9704Jason Sams 1970404fa9781f13a8ca07d621f74f3810daab9704Jason Sams 2070404fa9781f13a8ca07d621f74f3810daab9704Jason Sams#define CVT_FUNC_2(typeout, typein) \ 2170404fa9781f13a8ca07d621f74f3810daab9704Jason Samsextern typeout##2 __attribute__((const, overloadable)) \ 2270404fa9781f13a8ca07d621f74f3810daab9704Jason Sams convert_##typeout##2(typein##2 i) { \ 2370404fa9781f13a8ca07d621f74f3810daab9704Jason Sams return __builtin_convertvector(i, typeout##2); \ 2470404fa9781f13a8ca07d621f74f3810daab9704Jason Sams } \ 2570404fa9781f13a8ca07d621f74f3810daab9704Jason Samsextern typeout##3 __attribute__((const, overloadable)) \ 2670404fa9781f13a8ca07d621f74f3810daab9704Jason Sams convert_##typeout##3(typein##3 i) { \ 2770404fa9781f13a8ca07d621f74f3810daab9704Jason Sams return __builtin_convertvector(i, typeout##3); \ 2870404fa9781f13a8ca07d621f74f3810daab9704Jason Sams } \ 2970404fa9781f13a8ca07d621f74f3810daab9704Jason Samsextern typeout##4 __attribute__((const, overloadable)) \ 3070404fa9781f13a8ca07d621f74f3810daab9704Jason Sams convert_##typeout##4(typein##4 i) { \ 3170404fa9781f13a8ca07d621f74f3810daab9704Jason Sams return __builtin_convertvector(i, typeout##4); \ 3270404fa9781f13a8ca07d621f74f3810daab9704Jason Sams } 3370404fa9781f13a8ca07d621f74f3810daab9704Jason Sams#define CVT_FUNC(type) CVT_FUNC_2(type, uchar) \ 3470404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, char) \ 3570404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, ushort) \ 3670404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, short) \ 3770404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, uint) \ 3870404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, int) \ 3970404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, ulong) \ 4070404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, long) \ 4154cd5d1771ea5c95e181befc66ef8e2a2c1b78cdPirama Arumuga Nainar CVT_FUNC_2(type, half) \ 4270404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, float) \ 4370404fa9781f13a8ca07d621f74f3810daab9704Jason Sams CVT_FUNC_2(type, double) 4470404fa9781f13a8ca07d621f74f3810daab9704Jason Sams 4570404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(char) 4670404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(uchar) 4770404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(short) 4870404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(ushort) 4970404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(int) 5070404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(uint) 5170404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(long) 5270404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(ulong) 5354cd5d1771ea5c95e181befc66ef8e2a2c1b78cdPirama Arumuga NainarCVT_FUNC(half) 5470404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(float) 5570404fa9781f13a8ca07d621f74f3810daab9704Jason SamsCVT_FUNC(double) 5670404fa9781f13a8ca07d621f74f3810daab9704Jason Sams 57c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang 58c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang/* 59c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang * YUV float4 version 60c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang */ 61c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang 62c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wangstatic float4 yuv_U_values = {0.f, -0.392f * 0.003921569f, +2.02 * 0.003921569f, 0.f}; 63c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wangstatic float4 yuv_V_values = {1.603f * 0.003921569f, -0.815f * 0.003921569f, 0.f, 0.f}; 64c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang 65c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wangextern float4 __attribute__((overloadable)) rsYuvToRGBA_float4(uchar y, uchar u, uchar v) { 66c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang float4 color = (float)y * 0.003921569f; 67c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang float4 fU = ((float)u) - 128.f; 68c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang float4 fV = ((float)v) - 128.f; 69c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang 70c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang color += fU * yuv_U_values; 71c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang color += fV * yuv_V_values; 72c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang color = clamp(color, 0.f, 1.f); 73c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang return color; 74c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang} 75c5ce430172dd0a1d3d78c79c95bbdf3f1b8c0c3eMiao Wang 76