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