12cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org/*
2c1354bd76826671c3b96933b4b2ef948b76cbdd9andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
32cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *
42cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *  Use of this source code is governed by a BSD-style license
52cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *  that can be found in the LICENSE file in the root of the source
62cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *  tree. An additional intellectual property rights grant can be found
72cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *  in the file PATENTS.  All contributing project authors may
82cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
92cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org */
102cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
112cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org/*
122cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org * Interface to the LibYuv scaling functionality
132cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org */
142cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
152cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org#ifndef WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_
162cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org#define WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_
172cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
186f8ce060a21fcdc1c951fbf06768eb0cc0083b2fkjellander#include "webrtc/common_video/include/i420_buffer_pool.h"
19c69ae69d0b25c03173fdca000c81545987ba78cepbos@webrtc.org#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
20c69ae69d0b25c03173fdca000c81545987ba78cepbos@webrtc.org#include "webrtc/typedefs.h"
219bfe3daf7349b62647997ced9389baa8ab043afeThiago Farina#include "webrtc/video_frame.h"
222cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
232cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.orgnamespace webrtc {
242cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
252cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org// Supported scaling types
262cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.orgenum ScaleMethod {
272cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  kScalePoint,  // no interpolation
282cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  kScaleBilinear,
292cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  kScaleBox
302cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org};
312cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
322cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.orgclass Scaler {
332cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org public:
342cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  Scaler();
352cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  ~Scaler();
362cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
372cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  // Set interpolation properties:
382cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  //
392cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  // Return value: 0 - OK
402cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  //              -1 - parameter error
412cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  int Set(int src_width, int src_height,
422cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org          int dst_width, int dst_height,
432cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org          VideoType src_video_type, VideoType dst_video_type,
442cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org          ScaleMethod method);
452cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
462cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  // Scale frame
47d4e7d49628e39baf30e6aefb4536f1cf042e813bmagjed@webrtc.org  // Memory is allocated by this object and recycled using |buffer_pool_|.
482cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  // Return value: 0 - OK,
492cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  //               -1 - parameter error
502cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  //               -2 - scaler not set
514765070b8d6f024509c717c04d9b708750666927Miguel Casas-Sanchez  int Scale(const VideoFrame& src_frame, VideoFrame* dst_frame);
522cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
532cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org private:
542cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  // Determine if the VideoTypes are currently supported.
552cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  bool SupportedVideoType(VideoType src_video_type,
562cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org                          VideoType dst_video_type);
572cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
582cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  ScaleMethod   method_;
592cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  int           src_width_;
602cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  int           src_height_;
612cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  int           dst_width_;
622cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  int           dst_height_;
632cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org  bool          set_;
64d4e7d49628e39baf30e6aefb4536f1cf042e813bmagjed@webrtc.org  I420BufferPool buffer_pool_;
652cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org};
662cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
672cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org}  // namespace webrtc
682cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org
692cdb2d383303ac2a8704f09ab6673535a7a1e3bdmikhal@webrtc.org#endif  // WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_
70