/*
 *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef VP10_ENCODER_RESIZE_H_
#define VP10_ENCODER_RESIZE_H_

#include <stdio.h>
#include "vpx/vpx_integer.h"

#ifdef __cplusplus
extern "C" {
#endif

void vp10_resize_plane(const uint8_t *const input,
                      int height,
                      int width,
                      int in_stride,
                      uint8_t *output,
                      int height2,
                      int width2,
                      int out_stride);
void vp10_resize_frame420(const uint8_t *const y,
                         int y_stride,
                         const uint8_t *const u,
                         const uint8_t *const v,
                         int uv_stride,
                         int height,
                         int width,
                         uint8_t *oy,
                         int oy_stride,
                         uint8_t *ou,
                         uint8_t *ov,
                         int ouv_stride,
                         int oheight,
                         int owidth);
void vp10_resize_frame422(const uint8_t *const y,
                         int y_stride,
                         const uint8_t *const u,
                         const uint8_t *const v,
                         int uv_stride,
                         int height,
                         int width,
                         uint8_t *oy,
                         int oy_stride,
                         uint8_t *ou,
                         uint8_t *ov,
                         int ouv_stride,
                         int oheight,
                         int owidth);
void vp10_resize_frame444(const uint8_t *const y,
                         int y_stride,
                         const uint8_t *const u,
                         const uint8_t *const v,
                         int uv_stride,
                         int height,
                         int width,
                         uint8_t *oy,
                         int oy_stride,
                         uint8_t *ou,
                         uint8_t *ov,
                         int ouv_stride,
                         int oheight,
                         int owidth);

#if CONFIG_VP9_HIGHBITDEPTH
void vp10_highbd_resize_plane(const uint8_t *const input,
                             int height,
                             int width,
                             int in_stride,
                             uint8_t *output,
                             int height2,
                             int width2,
                             int out_stride,
                             int bd);
void vp10_highbd_resize_frame420(const uint8_t *const y,
                                int y_stride,
                                const uint8_t *const u,
                                const uint8_t *const v,
                                int uv_stride,
                                int height,
                                int width,
                                uint8_t *oy,
                                int oy_stride,
                                uint8_t *ou,
                                uint8_t *ov,
                                int ouv_stride,
                                int oheight,
                                int owidth,
                                int bd);
void vp10_highbd_resize_frame422(const uint8_t *const y,
                                int y_stride,
                                const uint8_t *const u,
                                const uint8_t *const v,
                                int uv_stride,
                                int height,
                                int width,
                                uint8_t *oy,
                                int oy_stride,
                                uint8_t *ou,
                                uint8_t *ov,
                                int ouv_stride,
                                int oheight,
                                int owidth,
                                int bd);
void vp10_highbd_resize_frame444(const uint8_t *const y,
                                int y_stride,
                                const uint8_t *const u,
                                const uint8_t *const v,
                                int uv_stride,
                                int height,
                                int width,
                                uint8_t *oy,
                                int oy_stride,
                                uint8_t *ou,
                                uint8_t *ov,
                                int ouv_stride,
                                int oheight,
                                int owidth,
                                int bd);
#endif    // CONFIG_VP9_HIGHBITDEPTH

#ifdef __cplusplus
}  // extern "C"
#endif

#endif    // VP10_ENCODER_RESIZE_H_
