| /* |
| * 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. |
| */ |
| |
| #include "modules/utility/source/frame_scaler.h" |
| |
| #ifdef WEBRTC_MODULE_UTILITY_VIDEO |
| |
| #include "common_video/libyuv/include/scaler.h" |
| #include "system_wrappers/interface/trace.h" |
| |
| namespace webrtc { |
| |
| FrameScaler::FrameScaler() |
| : scaler_(new Scaler()), |
| scaled_frame_() {} |
| |
| FrameScaler::~FrameScaler() {} |
| |
| int FrameScaler::ResizeFrameIfNeeded(VideoFrame* video_frame, |
| WebRtc_UWord32 out_width, |
| WebRtc_UWord32 out_height) { |
| if (video_frame->Length() == 0) { |
| return -1; |
| } |
| |
| if ((video_frame->Width() != out_width) || |
| (video_frame->Height() != out_height)) { |
| // Set correct scale settings and scale |video_frame| into |scaled_frame_|. |
| scaler_->Set(video_frame->Width(), video_frame->Height(), out_width, |
| out_height, kI420, kI420, kScaleBox); |
| int ret = scaler_->Scale(*video_frame, &scaled_frame_); |
| if (ret < 0) { |
| return ret; |
| } |
| |
| scaled_frame_.SetRenderTime(video_frame->RenderTimeMs()); |
| scaled_frame_.SetTimeStamp(video_frame->TimeStamp()); |
| video_frame->SwapFrame(scaled_frame_); |
| } |
| return 0; |
| } |
| |
| } // namespace webrtc |
| |
| #endif // WEBRTC_MODULE_UTILITY_VIDEO |