diff options
Diffstat (limited to 'talk/app/webrtc/androidvideocapturer.cc')
-rw-r--r-- | talk/app/webrtc/androidvideocapturer.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/talk/app/webrtc/androidvideocapturer.cc b/talk/app/webrtc/androidvideocapturer.cc index afcfb5bb7c..d8f12174db 100644 --- a/talk/app/webrtc/androidvideocapturer.cc +++ b/talk/app/webrtc/androidvideocapturer.cc @@ -26,6 +26,7 @@ */ #include "talk/app/webrtc/androidvideocapturer.h" +#include "talk/app/webrtc/java/jni/native_handle_impl.h" #include "talk/media/webrtc/webrtcvideoframe.h" #include "webrtc/base/common.h" #include "webrtc/base/json.h" @@ -57,11 +58,13 @@ class AndroidVideoCapturer::FrameFactory : public cricket::VideoFrameFactory { const rtc::scoped_refptr<webrtc::VideoFrameBuffer>& buffer, int rotation, int64_t time_stamp_in_ns) { + RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 || + rotation == 270); buffer_ = buffer; captured_frame_.width = buffer->width(); captured_frame_.height = buffer->height(); captured_frame_.time_stamp = time_stamp_in_ns; - captured_frame_.rotation = rotation; + captured_frame_.rotation = static_cast<webrtc::VideoRotation>(rotation); } void ClearCapturedFrame() { @@ -85,7 +88,7 @@ class AndroidVideoCapturer::FrameFactory : public cricket::VideoFrameFactory { rtc::scoped_ptr<cricket::VideoFrame> frame(new cricket::WebRtcVideoFrame( ShallowCenterCrop(buffer_, dst_width, dst_height), - captured_frame->time_stamp, captured_frame->GetRotation())); + captured_frame->time_stamp, captured_frame->rotation)); // Caller takes ownership. // TODO(magjed): Change CreateAliasedFrame() to return a rtc::scoped_ptr. return apply_rotation_ ? frame->GetCopyWithRotationApplied()->Copy() @@ -99,10 +102,17 @@ class AndroidVideoCapturer::FrameFactory : public cricket::VideoFrameFactory { int output_width, int output_height) const override { if (buffer_->native_handle() != nullptr) { - // TODO(perkj): Implement CreateAliasedFrame properly for textures. - rtc::scoped_ptr<cricket::VideoFrame> frame(new cricket::WebRtcVideoFrame( - buffer_, input_frame->time_stamp, input_frame->GetRotation())); - return frame.release(); + // TODO(perkj) Implement cropping. + RTC_CHECK_EQ(cropped_input_width, buffer_->width()); + RTC_CHECK_EQ(cropped_input_height, buffer_->height()); + rtc::scoped_refptr<webrtc::VideoFrameBuffer> scaled_buffer( + static_cast<webrtc_jni::AndroidTextureBuffer*>(buffer_.get()) + ->ScaleAndRotate(output_width, output_height, + apply_rotation_ ? input_frame->rotation : + webrtc::kVideoRotation_0)); + return new cricket::WebRtcVideoFrame( + scaled_buffer, input_frame->time_stamp, + apply_rotation_ ? webrtc::kVideoRotation_0 : input_frame->rotation); } return VideoFrameFactory::CreateAliasedFrame(input_frame, cropped_input_width, |