133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// Copyright 2014 Google Inc. All Rights Reserved. 233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// 333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// Use of this source code is governed by a BSD-style license 433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// that can be found in the COPYING file in the root of the source 533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// tree. An additional intellectual property rights grant can be found 633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// in the file PATENTS. All contributing project authors may 733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// be found in the AUTHORS file in the root of the source tree. 833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// ----------------------------------------------------------------------------- 933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// 1033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// MIPS version of YUV to RGB upsampling functions. 1133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// 1233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) 1333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// Jovan Zelincevic (jovan.zelincevic@imgtec.com) 1433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 1533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora#include "./dsp.h" 1633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 177c8da7ce66017295a65ec028084b90800be377f8James Zern// Code is disabled for now, in favor of the plain-C version 187c8da7ce66017295a65ec028084b90800be377f8James Zern#if 0 // defined(WEBP_USE_MIPS32) 1933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 2033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora#include "./yuv.h" 2133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 2233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora//------------------------------------------------------------------------------ 2333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora// simple point-sampling 2433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 2533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora#define ROW_FUNC(FUNC_NAME, XSTEP, R, G, B, A) \ 2633f74dabbc7920a65ed435d7417987589febdc16Vikas Arorastatic void FUNC_NAME(const uint8_t* y, \ 2733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora const uint8_t* u, const uint8_t* v, \ 2833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora uint8_t* dst, int len) { \ 2933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora int i, r, g, b; \ 3033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora int temp0, temp1, temp2, temp3, temp4; \ 3133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora for (i = 0; i < (len >> 1); i++) { \ 3233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp1 = kVToR * v[0]; \ 3333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp3 = kVToG * v[0]; \ 3433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp2 = kUToG * u[0]; \ 3533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp4 = kUToB * u[0]; \ 3633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp0 = kYScale * y[0]; \ 3733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp1 += kRCst; \ 3833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp3 -= kGCst; \ 3933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp2 += temp3; \ 4033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp4 += kBCst; \ 4133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora r = VP8Clip8(temp0 + temp1); \ 4233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora g = VP8Clip8(temp0 - temp2); \ 4333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora b = VP8Clip8(temp0 + temp4); \ 4433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp0 = kYScale * y[1]; \ 4533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[R] = r; \ 4633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[G] = g; \ 4733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[B] = b; \ 4833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora if (A) dst[A] = 0xff; \ 4933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora r = VP8Clip8(temp0 + temp1); \ 5033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora g = VP8Clip8(temp0 - temp2); \ 5133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora b = VP8Clip8(temp0 + temp4); \ 5233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[R + XSTEP] = r; \ 5333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[G + XSTEP] = g; \ 5433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[B + XSTEP] = b; \ 5533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora if (A) dst[A + XSTEP] = 0xff; \ 5633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora y += 2; \ 5733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora ++u; \ 5833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora ++v; \ 5933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst += 2 * XSTEP; \ 6033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora } \ 6133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora if (len & 1) { \ 6233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp1 = kVToR * v[0]; \ 6333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp3 = kVToG * v[0]; \ 6433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp2 = kUToG * u[0]; \ 6533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp4 = kUToB * u[0]; \ 6633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp0 = kYScale * y[0]; \ 6733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp1 += kRCst; \ 6833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp3 -= kGCst; \ 6933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp2 += temp3; \ 7033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora temp4 += kBCst; \ 7133f74dabbc7920a65ed435d7417987589febdc16Vikas Arora r = VP8Clip8(temp0 + temp1); \ 7233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora g = VP8Clip8(temp0 - temp2); \ 7333f74dabbc7920a65ed435d7417987589febdc16Vikas Arora b = VP8Clip8(temp0 + temp4); \ 7433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[R] = r; \ 7533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[G] = g; \ 7633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora dst[B] = b; \ 7733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora if (A) dst[A] = 0xff; \ 7833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora } \ 7933f74dabbc7920a65ed435d7417987589febdc16Vikas Arora} 8033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 8133f74dabbc7920a65ed435d7417987589febdc16Vikas AroraROW_FUNC(YuvToRgbRow, 3, 0, 1, 2, 0) 8233f74dabbc7920a65ed435d7417987589febdc16Vikas AroraROW_FUNC(YuvToRgbaRow, 4, 0, 1, 2, 3) 8333f74dabbc7920a65ed435d7417987589febdc16Vikas AroraROW_FUNC(YuvToBgrRow, 3, 2, 1, 0, 0) 8433f74dabbc7920a65ed435d7417987589febdc16Vikas AroraROW_FUNC(YuvToBgraRow, 4, 2, 1, 0, 3) 8533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 8633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora#undef ROW_FUNC 8733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 8833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora//------------------------------------------------------------------------------ 897c8da7ce66017295a65ec028084b90800be377f8James Zern// Entry point 9033f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 9133f74dabbc7920a65ed435d7417987589febdc16Vikas Aroraextern void WebPInitSamplersMIPS32(void); 9233f74dabbc7920a65ed435d7417987589febdc16Vikas Arora 937c8da7ce66017295a65ec028084b90800be377f8James ZernWEBP_TSAN_IGNORE_FUNCTION void WebPInitSamplersMIPS32(void) { 9433f74dabbc7920a65ed435d7417987589febdc16Vikas Arora WebPSamplers[MODE_RGB] = YuvToRgbRow; 9533f74dabbc7920a65ed435d7417987589febdc16Vikas Arora WebPSamplers[MODE_RGBA] = YuvToRgbaRow; 9633f74dabbc7920a65ed435d7417987589febdc16Vikas Arora WebPSamplers[MODE_BGR] = YuvToBgrRow; 9733f74dabbc7920a65ed435d7417987589febdc16Vikas Arora WebPSamplers[MODE_BGRA] = YuvToBgraRow; 9833f74dabbc7920a65ed435d7417987589febdc16Vikas Arora} 997c8da7ce66017295a65ec028084b90800be377f8James Zern 1007c8da7ce66017295a65ec028084b90800be377f8James Zern#else // !WEBP_USE_MIPS32 1017c8da7ce66017295a65ec028084b90800be377f8James Zern 1027c8da7ce66017295a65ec028084b90800be377f8James ZernWEBP_DSP_INIT_STUB(WebPInitSamplersMIPS32) 1037c8da7ce66017295a65ec028084b90800be377f8James Zern 1047c8da7ce66017295a65ec028084b90800be377f8James Zern#endif // WEBP_USE_MIPS32 105