1/*
2 *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_MODULES_VIDEO_PROCESSING_MAIN_SOURCE_SPATIAL_RESAMPLER_H
12#define WEBRTC_MODULES_VIDEO_PROCESSING_MAIN_SOURCE_SPATIAL_RESAMPLER_H
13
14#include "webrtc/typedefs.h"
15
16#include "webrtc/modules/interface/module_common_types.h"
17#include "webrtc/modules/video_processing/main/interface/video_processing_defines.h"
18
19#include "webrtc/common_video/libyuv/include/scaler.h"
20#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
21
22namespace webrtc {
23
24class VPMSpatialResampler {
25 public:
26  virtual ~VPMSpatialResampler() {};
27  virtual int32_t SetTargetFrameSize(int32_t width, int32_t height) = 0;
28  virtual void SetInputFrameResampleMode(VideoFrameResampling
29                                         resampling_mode) = 0;
30  virtual void Reset() = 0;
31  virtual int32_t ResampleFrame(const I420VideoFrame& inFrame,
32                                I420VideoFrame* outFrame) = 0;
33  virtual int32_t TargetWidth() = 0;
34  virtual int32_t TargetHeight() = 0;
35  virtual bool ApplyResample(int32_t width, int32_t height) = 0;
36};
37
38class VPMSimpleSpatialResampler : public VPMSpatialResampler {
39 public:
40  VPMSimpleSpatialResampler();
41  ~VPMSimpleSpatialResampler();
42  virtual int32_t SetTargetFrameSize(int32_t width, int32_t height);
43  virtual void SetInputFrameResampleMode(VideoFrameResampling resampling_mode);
44  virtual void Reset();
45  virtual int32_t ResampleFrame(const I420VideoFrame& inFrame,
46                                I420VideoFrame* outFrame);
47  virtual int32_t TargetWidth();
48  virtual int32_t TargetHeight();
49  virtual bool ApplyResample(int32_t width, int32_t height);
50
51 private:
52
53  VideoFrameResampling        resampling_mode_;
54  int32_t                     target_width_;
55  int32_t                     target_height_;
56  Scaler                      scaler_;
57};
58
59}  // namespace webrtc
60
61#endif  // WEBRTC_MODULES_VIDEO_PROCESSING_MAIN_SOURCE_SPATIAL_RESAMPLER_H
62