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