/* * Copyright (c) 2012 The WebRTC 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. */ /* * Interface to the LibYuv scaling functionality */ #ifndef WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_ #define WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_ #include "webrtc/common_video/include/i420_buffer_pool.h" #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" #include "webrtc/typedefs.h" #include "webrtc/video_frame.h" namespace webrtc { // Supported scaling types enum ScaleMethod { kScalePoint, // no interpolation kScaleBilinear, kScaleBox }; class Scaler { public: Scaler(); ~Scaler(); // Set interpolation properties: // // Return value: 0 - OK // -1 - parameter error int Set(int src_width, int src_height, int dst_width, int dst_height, VideoType src_video_type, VideoType dst_video_type, ScaleMethod method); // Scale frame // Memory is allocated by this object and recycled using |buffer_pool_|. // Return value: 0 - OK, // -1 - parameter error // -2 - scaler not set int Scale(const VideoFrame& src_frame, VideoFrame* dst_frame); private: // Determine if the VideoTypes are currently supported. bool SupportedVideoType(VideoType src_video_type, VideoType dst_video_type); ScaleMethod method_; int src_width_; int src_height_; int dst_width_; int dst_height_; bool set_; I420BufferPool buffer_pool_; }; } // namespace webrtc #endif // WEBRTC_COMMON_VIDEO_LIBYUV_INCLUDE_SCALER_H_