// Copyright (c) 2011 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.

#ifndef COBALT_MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_H_
#define COBALT_MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_H_

#include "media/base/yuv_convert.h"
#include "starboard/types.h"

namespace cobalt {
namespace media {

// These methods are exported for testing purposes only.  Library users should
// only call the methods listed in yuv_convert.h.

MEDIA_EXPORT void ConvertRGB32ToYUV_SSSE3(const uint8_t* rgbframe,
                                          uint8_t* yplane, uint8_t* uplane,
                                          uint8_t* vplane, int width,
                                          int height, int rgbstride,
                                          int ystride, int uvstride);

MEDIA_EXPORT void ConvertRGB24ToYUV_SSSE3(const uint8_t* rgbframe,
                                          uint8_t* yplane, uint8_t* uplane,
                                          uint8_t* vplane, int width,
                                          int height, int rgbstride,
                                          int ystride, int uvstride);

MEDIA_EXPORT void ConvertRGB32ToYUV_SSE2(const uint8_t* rgbframe,
                                         uint8_t* yplane, uint8_t* uplane,
                                         uint8_t* vplane, int width, int height,
                                         int rgbstride, int ystride,
                                         int uvstride);

MEDIA_EXPORT void ConvertRGB32ToYUV_SSE2_Reference(
    const uint8_t* rgbframe, uint8_t* yplane, uint8_t* uplane, uint8_t* vplane,
    int width, int height, int rgbstride, int ystride, int uvstride);

MEDIA_EXPORT void ConvertRGB32ToYUV_C(const uint8_t* rgbframe, uint8_t* yplane,
                                      uint8_t* uplane, uint8_t* vplane,
                                      int width, int height, int rgbstride,
                                      int ystride, int uvstride);

MEDIA_EXPORT void ConvertRGB24ToYUV_C(const uint8_t* rgbframe, uint8_t* yplane,
                                      uint8_t* uplane, uint8_t* vplane,
                                      int width, int height, int rgbstride,
                                      int ystride, int uvstride);

}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_BASE_SIMD_CONVERT_RGB_TO_YUV_H_
