17cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde/* 233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp * Copyright 2011 The LibYuv Project Authors. All rights reserved. 37cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * 47cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * Use of this source code is governed by a BSD-style license 57cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * that can be found in the LICENSE file in the root of the source 67cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * tree. An additional intellectual property rights grant can be found 77cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * in the file PATENTS. All contributing project authors may 87cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde * be found in the AUTHORS file in the root of the source tree. 97cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde */ 107cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef INCLUDE_LIBYUV_SCALE_H_ // NOLINT 127cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INCLUDE_LIBYUV_SCALE_H_ 137cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 147cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#include "libyuv/basic_types.h" 157cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus 177cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordenamespace libyuv { 1833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampextern "C" { 1933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif 207cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 217cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// Supported filtering 227cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordeenum FilterMode { 2333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp kFilterNone = 0, // Point sample; Fastest. 247cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde kFilterBilinear = 1, // Faster than box, but lower quality scaling down. 2533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp kFilterBox = 2 // Highest quality. 267cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde}; 277cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 2833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Scale a YUV plane. 2933cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 3033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampvoid ScalePlane(const uint8* src, int src_stride, 3133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int src_width, int src_height, 3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst, int dst_stride, 3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp int dst_width, int dst_height, 3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp FilterMode filtering); 3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 367cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// Scales a YUV 4:2:0 image from the src width and height to the 377cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// dst width and height. 387cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// If filtering is kFilterNone, a simple nearest-neighbor algorithm is 397cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// used. This produces basic (blocky) quality at the fastest speed. 407cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// If filtering is kFilterBilinear, interpolation is used to produce a better 417cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// quality image, at the expense of speed. 427cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// If filtering is kFilterBox, averaging is used to produce ever better 437cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// quality image, at further expense of speed. 447cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// Returns 0 if successful. 457cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 4633cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 477cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordeint I420Scale(const uint8* src_y, int src_stride_y, 487cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde const uint8* src_u, int src_stride_u, 497cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde const uint8* src_v, int src_stride_v, 507cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int src_width, int src_height, 517cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde uint8* dst_y, int dst_stride_y, 527cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde uint8* dst_u, int dst_stride_u, 537cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde uint8* dst_v, int dst_stride_v, 547cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int dst_width, int dst_height, 557cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde FilterMode filtering); 567cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Legacy API. Deprecated. 5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 597cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordeint Scale(const uint8* src_y, const uint8* src_u, const uint8* src_v, 607cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int src_stride_y, int src_stride_u, int src_stride_v, 617cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int src_width, int src_height, 627cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde uint8* dst_y, uint8* dst_u, uint8* dst_v, 637cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int dst_stride_y, int dst_stride_u, int dst_stride_v, 647cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde int dst_width, int dst_height, 657cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde bool interpolate); 667cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 6733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Legacy API. Deprecated. 6833cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 6933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkampint ScaleOffset(const uint8* src, int src_width, int src_height, 7033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp uint8* dst, int dst_width, int dst_height, int dst_yoffset, 7133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp bool interpolate); 7233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp 7333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// For testing, allow disabling of specialized scalers. 7433cfdeb7b267ab635413797fffb046b73272f7ecHendrik DahlkampLIBYUV_API 757cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordevoid SetUseReferenceImpl(bool use); 767cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 7733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __cplusplus 7833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} // extern "C" 7933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp} // namespace libyuv 8033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif 817cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde 8233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif // INCLUDE_LIBYUV_SCALE_H_ NOLINT 83