// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "build/build_config.h"
#include "media/base/simd/convert_yuv_to_rgb.h"
#include "starboard/types.h"

namespace cobalt {
namespace media {

#define packuswb(x) ((x) < 0 ? 0 : ((x) > 255 ? 255 : (x)))
#define paddsw(x, y) \
  (((x) + (y)) < -32768 ? -32768 : (((x) + (y)) > 32767 ? 32767 : ((x) + (y))))

// On Android, pixel layout is RGBA (see skia/include/core/SkColorPriv.h);
// however, other Chrome platforms use BGRA (see skia/config/SkUserConfig.h).
// Ideally, android should not use the functions here due to performance issue
// (http://crbug.com/249980).
#if defined(OS_ANDROID)
#define SK_R32_SHIFT 0
#define SK_G32_SHIFT 8
#define SK_B32_SHIFT 16
#define SK_A32_SHIFT 24
#define R_INDEX 0
#define G_INDEX 1
#define B_INDEX 2
#define A_INDEX 3
#else
#define SK_B32_SHIFT 0
#define SK_G32_SHIFT 8
#define SK_R32_SHIFT 16
#define SK_A32_SHIFT 24
#define B_INDEX 0
#define G_INDEX 1
#define R_INDEX 2
#define A_INDEX 3
#endif

static inline void ConvertYUVToRGB32_C(uint8_t y, uint8_t u, uint8_t v,
                                       uint8_t* rgb_buf,
                                       const int16_t* convert_table) {
  int b = convert_table[4 * (256 + u) + B_INDEX];
  int g = convert_table[4 * (256 + u) + G_INDEX];
  int r = convert_table[4 * (256 + u) + R_INDEX];
  int a = convert_table[4 * (256 + u) + A_INDEX];

  b = paddsw(b, convert_table[4 * (512 + v) + B_INDEX]);
  g = paddsw(g, convert_table[4 * (512 + v) + G_INDEX]);
  r = paddsw(r, convert_table[4 * (512 + v) + R_INDEX]);
  a = paddsw(a, convert_table[4 * (512 + v) + A_INDEX]);

  b = paddsw(b, convert_table[4 * y + B_INDEX]);
  g = paddsw(g, convert_table[4 * y + G_INDEX]);
  r = paddsw(r, convert_table[4 * y + R_INDEX]);
  a = paddsw(a, convert_table[4 * y + A_INDEX]);

  b >>= 6;
  g >>= 6;
  r >>= 6;
  a >>= 6;

  *reinterpret_cast<uint32_t*>(rgb_buf) =
      (packuswb(b) << SK_B32_SHIFT) | (packuswb(g) << SK_G32_SHIFT) |
      (packuswb(r) << SK_R32_SHIFT) | (packuswb(a) << SK_A32_SHIFT);
}

static inline void ConvertYUVAToARGB_C(uint8_t y, uint8_t u, uint8_t v,
                                       uint8_t a, uint8_t* rgb_buf,
                                       const int16_t* convert_table) {
  int b = convert_table[4 * (256 + u) + 0];
  int g = convert_table[4 * (256 + u) + 1];
  int r = convert_table[4 * (256 + u) + 2];

  b = paddsw(b, convert_table[4 * (512 + v) + 0]);
  g = paddsw(g, convert_table[4 * (512 + v) + 1]);
  r = paddsw(r, convert_table[4 * (512 + v) + 2]);

  b = paddsw(b, convert_table[4 * y + 0]);
  g = paddsw(g, convert_table[4 * y + 1]);
  r = paddsw(r, convert_table[4 * y + 2]);

  b >>= 6;
  g >>= 6;
  r >>= 6;

  b = packuswb(b) * a >> 8;
  g = packuswb(g) * a >> 8;
  r = packuswb(r) * a >> 8;

  *reinterpret_cast<uint32_t*>(rgb_buf) =
      (b << SK_B32_SHIFT) | (g << SK_G32_SHIFT) | (r << SK_R32_SHIFT) |
      (a << SK_A32_SHIFT);
}

void ConvertYUVToRGB32Row_C(const uint8_t* y_buf, const uint8_t* u_buf,
                            const uint8_t* v_buf, uint8_t* rgb_buf,
                            ptrdiff_t width, const int16_t* convert_table) {
  for (int x = 0; x < width; x += 2) {
    uint8_t u = u_buf[x >> 1];
    uint8_t v = v_buf[x >> 1];
    uint8_t y0 = y_buf[x];
    ConvertYUVToRGB32_C(y0, u, v, rgb_buf, convert_table);
    if ((x + 1) < width) {
      uint8_t y1 = y_buf[x + 1];
      ConvertYUVToRGB32_C(y1, u, v, rgb_buf + 4, convert_table);
    }
    rgb_buf += 8;  // Advance 2 pixels.
  }
}

void ConvertYUVAToARGBRow_C(const uint8_t* y_buf, const uint8_t* u_buf,
                            const uint8_t* v_buf, const uint8_t* a_buf,
                            uint8_t* rgba_buf, ptrdiff_t width,
                            const int16_t* convert_table) {
  for (int x = 0; x < width; x += 2) {
    uint8_t u = u_buf[x >> 1];
    uint8_t v = v_buf[x >> 1];
    uint8_t y0 = y_buf[x];
    uint8_t a0 = a_buf[x];
    ConvertYUVAToARGB_C(y0, u, v, a0, rgba_buf, convert_table);
    if ((x + 1) < width) {
      uint8_t y1 = y_buf[x + 1];
      uint8_t a1 = a_buf[x + 1];
      ConvertYUVAToARGB_C(y1, u, v, a1, rgba_buf + 4, convert_table);
    }
    rgba_buf += 8;  // Advance 2 pixels.
  }
}

// 16.16 fixed point is used.  A shift by 16 isolates the integer.
// A shift by 17 is used to further subsample the chrominence channels.
// & 0xffff isolates the fixed point fraction.  >> 2 to get the upper 2 bits,
// for 1/65536 pixel accurate interpolation.
void ScaleYUVToRGB32Row_C(const uint8_t* y_buf, const uint8_t* u_buf,
                          const uint8_t* v_buf, uint8_t* rgb_buf,
                          ptrdiff_t width, ptrdiff_t source_dx,
                          const int16_t* convert_table) {
  int x = 0;
  for (int i = 0; i < width; i += 2) {
    int y = y_buf[x >> 16];
    int u = u_buf[(x >> 17)];
    int v = v_buf[(x >> 17)];
    ConvertYUVToRGB32_C(y, u, v, rgb_buf, convert_table);
    x += source_dx;
    if ((i + 1) < width) {
      y = y_buf[x >> 16];
      ConvertYUVToRGB32_C(y, u, v, rgb_buf + 4, convert_table);
      x += source_dx;
    }
    rgb_buf += 8;
  }
}

void LinearScaleYUVToRGB32Row_C(const uint8_t* y_buf, const uint8_t* u_buf,
                                const uint8_t* v_buf, uint8_t* rgb_buf,
                                ptrdiff_t width, ptrdiff_t source_dx,
                                const int16_t* convert_table) {
  // Avoid point-sampling for down-scaling by > 2:1.
  int source_x = 0;
  if (source_dx >= 0x20000) source_x += 0x8000;
  LinearScaleYUVToRGB32RowWithRange_C(y_buf, u_buf, v_buf, rgb_buf, width,
                                      source_x, source_dx, convert_table);
}

void LinearScaleYUVToRGB32RowWithRange_C(const uint8_t* y_buf,
                                         const uint8_t* u_buf,
                                         const uint8_t* v_buf, uint8_t* rgb_buf,
                                         int dest_width, int x, int source_dx,
                                         const int16_t* convert_table) {
  for (int i = 0; i < dest_width; i += 2) {
    int y0 = y_buf[x >> 16];
    int y1 = y_buf[(x >> 16) + 1];
    int u0 = u_buf[(x >> 17)];
    int u1 = u_buf[(x >> 17) + 1];
    int v0 = v_buf[(x >> 17)];
    int v1 = v_buf[(x >> 17) + 1];
    int y_frac = (x & 65535);
    int uv_frac = ((x >> 1) & 65535);
    int y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16;
    int u = (uv_frac * u1 + (uv_frac ^ 65535) * u0) >> 16;
    int v = (uv_frac * v1 + (uv_frac ^ 65535) * v0) >> 16;
    ConvertYUVToRGB32_C(y, u, v, rgb_buf, convert_table);
    x += source_dx;
    if ((i + 1) < dest_width) {
      y0 = y_buf[x >> 16];
      y1 = y_buf[(x >> 16) + 1];
      y_frac = (x & 65535);
      y = (y_frac * y1 + (y_frac ^ 65535) * y0) >> 16;
      ConvertYUVToRGB32_C(y, u, v, rgb_buf + 4, convert_table);
      x += source_dx;
    }
    rgb_buf += 8;
  }
}

void ConvertYUVToRGB32_C(const uint8_t* yplane, const uint8_t* uplane,
                         const uint8_t* vplane, uint8_t* rgbframe, int width,
                         int height, int ystride, int uvstride, int rgbstride,
                         YUVType yuv_type) {
  unsigned int y_shift = GetVerticalShift(yuv_type);
  const int16_t* lookup_table = GetLookupTable(yuv_type);
  for (int y = 0; y < height; ++y) {
    uint8_t* rgb_row = rgbframe + y * rgbstride;
    const uint8_t* y_ptr = yplane + y * ystride;
    const uint8_t* u_ptr = uplane + (y >> y_shift) * uvstride;
    const uint8_t* v_ptr = vplane + (y >> y_shift) * uvstride;

    ConvertYUVToRGB32Row_C(y_ptr, u_ptr, v_ptr, rgb_row, width, lookup_table);
  }
}

void ConvertYUVAToARGB_C(const uint8_t* yplane, const uint8_t* uplane,
                         const uint8_t* vplane, const uint8_t* aplane,
                         uint8_t* rgbaframe, int width, int height, int ystride,
                         int uvstride, int astride, int rgbastride,
                         YUVType yuv_type) {
  unsigned int y_shift = GetVerticalShift(yuv_type);
  const int16_t* lookup_table = GetLookupTable(yuv_type);
  for (int y = 0; y < height; y++) {
    uint8_t* rgba_row = rgbaframe + y * rgbastride;
    const uint8_t* y_ptr = yplane + y * ystride;
    const uint8_t* u_ptr = uplane + (y >> y_shift) * uvstride;
    const uint8_t* v_ptr = vplane + (y >> y_shift) * uvstride;
    const uint8_t* a_ptr = aplane + y * astride;

    ConvertYUVAToARGBRow_C(y_ptr, u_ptr, v_ptr, a_ptr, rgba_row, width,
                           lookup_table);
  }
}

}  // namespace media
}  // namespace cobalt
