// 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 "cobalt/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_
