diff --git a/webrtc/api/mediastreaminterface.h b/webrtc/api/mediastreaminterface.h index 2acaa000e4..2d16e5214d 100644 --- a/webrtc/api/mediastreaminterface.h +++ b/webrtc/api/mediastreaminterface.h @@ -23,6 +23,10 @@ #include #include "webrtc/api/video/video_frame.h" +// TODO(nisse): Transition hack, Chrome expects that including this +// file declares I420Buffer. Delete after users of I420Buffer are +// fixed to include the new header. +#include "webrtc/api/video/i420_buffer.h" #include "webrtc/base/refcount.h" #include "webrtc/base/scoped_ref_ptr.h" #include "webrtc/base/optional.h" diff --git a/webrtc/api/video/i420_buffer.cc b/webrtc/api/video/i420_buffer.cc index 32c73eac67..81f5789837 100644 --- a/webrtc/api/video/i420_buffer.cc +++ b/webrtc/api/video/i420_buffer.cc @@ -131,6 +131,17 @@ rtc::scoped_refptr I420Buffer::Rotate( return buffer; } +// static +rtc::scoped_refptr I420Buffer::Rotate( + rtc::scoped_refptr src, + VideoRotation rotation) { + if (rotation == webrtc::kVideoRotation_0) { + return src; + } else { + return Rotate(*src, rotation); + } +} + void I420Buffer::InitializeData() { memset(data_.get(), 0, I420DataSize(height_, stride_y_, stride_u_, stride_v_)); diff --git a/webrtc/api/video/i420_buffer.h b/webrtc/api/video/i420_buffer.h index 507bd0571b..388a3dd769 100644 --- a/webrtc/api/video/i420_buffer.h +++ b/webrtc/api/video/i420_buffer.h @@ -53,6 +53,9 @@ class I420Buffer : public VideoFrameBuffer { // are resolved in a better way. Or in the mean time, use SetBlack. void InitializeData(); + // TODO(nisse): Deprecated, use static method instead. + void SetToBlack() { SetBlack(this); } + int width() const override; int height() const override; const uint8_t* DataY() const override; @@ -85,6 +88,14 @@ class I420Buffer : public VideoFrameBuffer { // Scale all of |src| to the size of |this| buffer, with no cropping. void ScaleFrom(const VideoFrameBuffer& src); + // TODO(nisse): Deprecated, delete once downstream applications are updated. + // Returns a rotated versions of |src|. Native buffers are not + // supported. The reason this function doesn't return an I420Buffer, + // is that it returns |src| unchanged in case |rotation| is zero. + static rtc::scoped_refptr Rotate( + rtc::scoped_refptr src, + VideoRotation rotation); + protected: I420Buffer(int width, int height); I420Buffer(int width, int height, int stride_y, int stride_u, int stride_v); diff --git a/webrtc/api/video/video_frame.h b/webrtc/api/video/video_frame.h index 82c348d07e..8840782cad 100644 --- a/webrtc/api/video/video_frame.h +++ b/webrtc/api/video/video_frame.h @@ -16,6 +16,11 @@ #include "webrtc/api/video/video_rotation.h" #include "webrtc/api/video/video_frame_buffer.h" +// TODO(nisse): Transition hack, some downstream applications expect +// that including this file also defines base/timeutils.h constants. +// Delete after applications are fixed to include the right headers. +#include "webrtc/base/timeutils.h" + namespace webrtc { class VideoFrame { diff --git a/webrtc/api/video_codecs/BUILD.gn b/webrtc/api/video_codecs/BUILD.gn index 5562eec659..befd065f05 100644 --- a/webrtc/api/video_codecs/BUILD.gn +++ b/webrtc/api/video_codecs/BUILD.gn @@ -22,7 +22,6 @@ rtc_source_set("video_codecs_api") { # TODO(ilnik): Add dependency on webrtc/video_frame.h when it will have it's # own build target. - "..:video_frame_api", "../..:webrtc_common", "../../base:rtc_base_approved", ] diff --git a/webrtc/api/video_codecs/video_decoder.h b/webrtc/api/video_codecs/video_decoder.h index 04deaeda33..ba62822dde 100644 --- a/webrtc/api/video_codecs/video_decoder.h +++ b/webrtc/api/video_codecs/video_decoder.h @@ -15,7 +15,6 @@ #include #include -#include "webrtc/api/video/video_frame.h" #include "webrtc/common_types.h" #include "webrtc/typedefs.h" #include "webrtc/video_frame.h" diff --git a/webrtc/api/video_codecs/video_encoder.h b/webrtc/api/video_codecs/video_encoder.h index 5d21ed97b3..969de43209 100644 --- a/webrtc/api/video_codecs/video_encoder.h +++ b/webrtc/api/video_codecs/video_encoder.h @@ -15,7 +15,6 @@ #include #include -#include "webrtc/api/video/video_frame.h" #include "webrtc/base/checks.h" #include "webrtc/common_types.h" #include "webrtc/typedefs.h" diff --git a/webrtc/common_video/corevideo_frame_buffer.cc b/webrtc/common_video/corevideo_frame_buffer.cc index 73160e19f5..6455ed18f0 100644 --- a/webrtc/common_video/corevideo_frame_buffer.cc +++ b/webrtc/common_video/corevideo_frame_buffer.cc @@ -11,7 +11,6 @@ #include "webrtc/common_video/include/corevideo_frame_buffer.h" #include "libyuv/convert.h" -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" diff --git a/webrtc/common_video/i420_video_frame_unittest.cc b/webrtc/common_video/i420_video_frame_unittest.cc index f3ee9314c7..8c97ca7ac4 100644 --- a/webrtc/common_video/i420_video_frame_unittest.cc +++ b/webrtc/common_video/i420_video_frame_unittest.cc @@ -12,7 +12,6 @@ #include #include "webrtc/api/video/video_frame.h" -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/base/bind.h" #include "webrtc/base/timeutils.h" #include "webrtc/test/fake_texture_frame.h" @@ -292,4 +291,20 @@ INSTANTIATE_TEST_CASE_P(Rotate, TestI420BufferRotate, kVideoRotation_180, kVideoRotation_270)); +class TestI420BufferRotateOld + : public ::testing::TestWithParam {}; + +TEST_P(TestI420BufferRotateOld, Rotates) { + rtc::scoped_refptr buffer = CreateGradient(640, 480); + rtc::scoped_refptr rotated_buffer = + I420Buffer::Rotate(buffer, GetParam()); + CheckRotate(640, 480, GetParam(), *rotated_buffer); +} + +INSTANTIATE_TEST_CASE_P(Rotate, TestI420BufferRotateOld, + ::testing::Values(kVideoRotation_0, + kVideoRotation_90, + kVideoRotation_180, + kVideoRotation_270)); + } // namespace webrtc diff --git a/webrtc/common_video/include/video_frame_buffer.h b/webrtc/common_video/include/video_frame_buffer.h index e6c1f147a2..dfdd480b5d 100644 --- a/webrtc/common_video/include/video_frame_buffer.h +++ b/webrtc/common_video/include/video_frame_buffer.h @@ -14,6 +14,9 @@ #include #include "webrtc/api/video/video_frame_buffer.h" +// TODO(nisse): For backwards compatibility, files including this file +// expect it to declare I420Buffer. Delete after callers are updated. +#include "webrtc/api/video/i420_buffer.h" #include "webrtc/base/callback.h" #include "webrtc/base/scoped_ref_ptr.h" diff --git a/webrtc/common_video/rotation.h b/webrtc/common_video/rotation.h new file mode 100644 index 0000000000..f01c812944 --- /dev/null +++ b/webrtc/common_video/rotation.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015 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. + */ + +// TODO(nisse): Delete this file, once downstream code is updated. + +#ifndef WEBRTC_COMMON_VIDEO_ROTATION_H_ +#define WEBRTC_COMMON_VIDEO_ROTATION_H_ + +#include "webrtc/api/video/video_rotation.h" + +#endif // WEBRTC_COMMON_VIDEO_ROTATION_H_ diff --git a/webrtc/media/BUILD.gn b/webrtc/media/BUILD.gn index 4e4d67a937..6f4a7c8d05 100644 --- a/webrtc/media/BUILD.gn +++ b/webrtc/media/BUILD.gn @@ -73,6 +73,7 @@ rtc_static_library("rtc_media_base") { "base/videocapturerfactory.h", "base/videocommon.cc", "base/videocommon.h", + "base/videoframe.h", "base/videosourcebase.cc", "base/videosourcebase.h", ] @@ -154,6 +155,7 @@ rtc_static_library("rtc_media") { "engine/webrtcvideoencoderfactory.h", "engine/webrtcvideoengine2.cc", "engine/webrtcvideoengine2.h", + "engine/webrtcvideoframe.h", "engine/webrtcvoe.h", "engine/webrtcvoiceengine.cc", "engine/webrtcvoiceengine.h", diff --git a/webrtc/media/base/videocapturer.h b/webrtc/media/base/videocapturer.h index 76ab95a2b8..510063bc16 100644 --- a/webrtc/media/base/videocapturer.h +++ b/webrtc/media/base/videocapturer.h @@ -20,6 +20,12 @@ #include #include +// TODO(nisse): Transition hack, some downstream applications expect that +// including this file declares I420Buffer and NativeHandleBuffer. Delete after +// users of these classes are fixed to include the right headers. +#include "webrtc/api/video/i420_buffer.h" +#include "webrtc/common_video/include/video_frame_buffer.h" + #include "webrtc/base/constructormagic.h" #include "webrtc/base/criticalsection.h" #include "webrtc/media/base/videosourceinterface.h" diff --git a/webrtc/media/base/videoframe.h b/webrtc/media/base/videoframe.h new file mode 100644 index 0000000000..8e8a05d7e2 --- /dev/null +++ b/webrtc/media/base/videoframe.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2004 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. + */ + +// TODO(nisse): Deprecated, replace cricket::VideoFrame with +// webrtc::VideoFrame everywhere, then delete this file. See +// https://bugs.chromium.org/p/webrtc/issues/detail?id=5682. + +#ifndef WEBRTC_MEDIA_BASE_VIDEOFRAME_H_ +#define WEBRTC_MEDIA_BASE_VIDEOFRAME_H_ + +// TODO(nisse): Some applications expect that including this file +// implies an include of logging.h. So keep for compatibility, until +// this file can be deleted. +#include "webrtc/base/logging.h" + +#include "webrtc/api/video/video_frame.h" + +// TODO(nisse): Similarly, some applications expect that including this file +// implies a forward declaration of rtc::Thread. +namespace rtc { +class Thread; +} // namespace rtc + +namespace cricket { + +using VideoFrame = webrtc::VideoFrame; + +} // namespace cricket + +#endif // WEBRTC_MEDIA_BASE_VIDEOFRAME_H_ diff --git a/webrtc/media/engine/webrtcvideoframe.h b/webrtc/media/engine/webrtcvideoframe.h new file mode 100644 index 0000000000..d8369053aa --- /dev/null +++ b/webrtc/media/engine/webrtcvideoframe.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2011 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. + */ + +// TODO(nisse): Deprecated, replace cricket::WebRtcVideoFrame with +// webrtc::VideoFrame everywhere, then delete this file. See +// https://bugs.chromium.org/p/webrtc/issues/detail?id=5682. + +#ifndef WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOFRAME_H_ +#define WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOFRAME_H_ + +#include + +#include "webrtc/base/buffer.h" +#include "webrtc/base/refcount.h" +#include "webrtc/base/scoped_ref_ptr.h" +#include "webrtc/common_types.h" +#include "webrtc/common_video/include/video_frame_buffer.h" +#include "webrtc/media/base/videoframe.h" + +namespace cricket { + +using WebRtcVideoFrame = webrtc::VideoFrame; + +} // namespace cricket + +#endif // WEBRTC_MEDIA_ENGINE_WEBRTCVIDEOFRAME_H_ diff --git a/webrtc/modules/video_coding/codecs/test/video_codec_test.cc b/webrtc/modules/video_coding/codecs/test/video_codec_test.cc index d94c215281..d0d86ce4d7 100644 --- a/webrtc/modules/video_coding/codecs/test/video_codec_test.cc +++ b/webrtc/modules/video_coding/codecs/test/video_codec_test.cc @@ -10,7 +10,6 @@ #include "webrtc/modules/video_coding/codecs/test/video_codec_test.h" -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/modules/video_coding/include/video_error_codes.h" #include "webrtc/test/frame_utils.h" #include "webrtc/test/testsupport/fileutils.h" diff --git a/webrtc/modules/video_coding/generic_decoder.cc b/webrtc/modules/video_coding/generic_decoder.cc index 5969f23696..f5d9cfe073 100644 --- a/webrtc/modules/video_coding/generic_decoder.cc +++ b/webrtc/modules/video_coding/generic_decoder.cc @@ -10,7 +10,6 @@ #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" -#include "webrtc/base/timeutils.h" #include "webrtc/base/trace_event.h" #include "webrtc/modules/video_coding/include/video_coding.h" #include "webrtc/modules/video_coding/generic_decoder.h" diff --git a/webrtc/sdk/android/src/jni/native_handle_impl.cc b/webrtc/sdk/android/src/jni/native_handle_impl.cc index 90ade58234..c40cbf5f3d 100644 --- a/webrtc/sdk/android/src/jni/native_handle_impl.cc +++ b/webrtc/sdk/android/src/jni/native_handle_impl.cc @@ -12,13 +12,12 @@ #include -#include "webrtc/api/video/i420_buffer.h" +#include "webrtc/sdk/android/src/jni/jni_helpers.h" #include "webrtc/base/bind.h" #include "webrtc/base/checks.h" #include "webrtc/base/keep_ref_until_done.h" #include "webrtc/base/logging.h" #include "webrtc/base/scoped_ref_ptr.h" -#include "webrtc/sdk/android/src/jni/jni_helpers.h" using webrtc::NativeHandleBuffer; @@ -143,10 +142,6 @@ AndroidTextureBuffer::NativeToI420Buffer() { // // TODO(nisse): Use an I420BufferPool. We then need to extend that // class, and I420Buffer, to support our memory layout. - // TODO(nisse): Depending on - // system_wrappers/include/aligned_malloc.h violate current DEPS - // rules. We get away for now only because it is indirectly included - // by i420_buffer.h std::unique_ptr yuv_data( static_cast(webrtc::AlignedMalloc(size, kBufferAlignment))); // See YuvConverter.java for the required layout. diff --git a/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm b/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm index 47f6aca9b6..526cdbe455 100644 --- a/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm +++ b/webrtc/sdk/objc/Framework/Classes/avfoundationvideocapturer.mm @@ -160,7 +160,7 @@ void AVFoundationVideoCapturer::CaptureSampleBuffer( // Applying rotation is only supported for legacy reasons and performance is // not critical here. if (apply_rotation() && rotation != kVideoRotation_0) { - buffer = I420Buffer::Rotate(*buffer->NativeToI420Buffer(), + buffer = I420Buffer::Rotate(buffer->NativeToI420Buffer(), rotation); if (rotation == kVideoRotation_90 || rotation == kVideoRotation_270) { std::swap(captured_width, captured_height); diff --git a/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.mm b/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.mm index 8394d664fb..942171be29 100644 --- a/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.mm +++ b/webrtc/sdk/objc/Framework/Classes/objcvideotracksource.mm @@ -12,7 +12,6 @@ #import "RTCVideoFrame+Private.h" -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/common_video/include/corevideo_frame_buffer.h" namespace webrtc { @@ -61,7 +60,7 @@ void ObjcVideoTrackSource::OnCapturedFrame(RTCVideoFrame* frame) { // not critical here. webrtc::VideoRotation rotation = static_cast(frame.rotation); if (apply_rotation() && rotation != kVideoRotation_0) { - buffer = I420Buffer::Rotate(*buffer->NativeToI420Buffer(), rotation); + buffer = I420Buffer::Rotate(buffer->NativeToI420Buffer(), rotation); rotation = kVideoRotation_0; } diff --git a/webrtc/test/fake_texture_frame.h b/webrtc/test/fake_texture_frame.h index 4226f26d3f..c857f48343 100644 --- a/webrtc/test/fake_texture_frame.h +++ b/webrtc/test/fake_texture_frame.h @@ -10,7 +10,6 @@ #ifndef WEBRTC_TEST_FAKE_TEXTURE_FRAME_H_ #define WEBRTC_TEST_FAKE_TEXTURE_FRAME_H_ -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/api/video/video_frame.h" #include "webrtc/base/checks.h" #include "webrtc/common_video/include/video_frame_buffer.h" diff --git a/webrtc/test/frame_generator_capturer.cc b/webrtc/test/frame_generator_capturer.cc index 641000dc6e..d16d8c836f 100644 --- a/webrtc/test/frame_generator_capturer.cc +++ b/webrtc/test/frame_generator_capturer.cc @@ -17,7 +17,6 @@ #include "webrtc/base/logging.h" #include "webrtc/base/platform_thread.h" #include "webrtc/base/task_queue.h" -#include "webrtc/base/timeutils.h" #include "webrtc/system_wrappers/include/clock.h" #include "webrtc/system_wrappers/include/sleep.h" #include "webrtc/test/frame_generator.h" diff --git a/webrtc/video/overuse_frame_detector.cc b/webrtc/video/overuse_frame_detector.cc index 9f650579ea..42ee350257 100644 --- a/webrtc/video/overuse_frame_detector.cc +++ b/webrtc/video/overuse_frame_detector.cc @@ -23,7 +23,6 @@ #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" #include "webrtc/base/numerics/exp_filter.h" -#include "webrtc/base/timeutils.h" #include "webrtc/common_video/include/frame_callback.h" #include "webrtc/system_wrappers/include/field_trial.h" diff --git a/webrtc/video/receive_statistics_proxy_unittest.cc b/webrtc/video/receive_statistics_proxy_unittest.cc index fd025f87d6..36f5346900 100644 --- a/webrtc/video/receive_statistics_proxy_unittest.cc +++ b/webrtc/video/receive_statistics_proxy_unittest.cc @@ -12,7 +12,6 @@ #include -#include "webrtc/api/video/i420_buffer.h" #include "webrtc/api/video/video_frame.h" #include "webrtc/api/video/video_rotation.h" #include "webrtc/modules/video_coding/include/video_codec_interface.h" diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc index 23dbffaa42..e24cb41aac 100644 --- a/webrtc/video/video_send_stream_tests.cc +++ b/webrtc/video/video_send_stream_tests.cc @@ -18,7 +18,6 @@ #include "webrtc/base/logging.h" #include "webrtc/base/platform_thread.h" #include "webrtc/base/rate_limiter.h" -#include "webrtc/base/timeutils.h" #include "webrtc/call/call.h" #include "webrtc/common_video/include/frame_callback.h" #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" diff --git a/webrtc/video_frame.h b/webrtc/video_frame.h index 93cc171367..47e58a1b62 100644 --- a/webrtc/video_frame.h +++ b/webrtc/video_frame.h @@ -17,6 +17,8 @@ // this file until we have figured out how to refactor and clean up // related interfaces. +#include "webrtc/api/video/video_frame.h" +#include "webrtc/api/video/i420_buffer.h" #include "webrtc/common_types.h" #include "webrtc/typedefs.h"