From be214a26f84fbf49e03eccb659dd639805f23ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20H=C3=B6glund?= Date: Thu, 4 Jan 2018 12:14:35 +0100 Subject: [PATCH] Move videosinkinterface.h to common_video to solve a circular dep. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I updated some dependency enforcement rules to allow examples and pc to depend on common_video. I reckoned depending on common_video is not controversial when they already dependend on media/base, which is a lower-level abstraction. Bug: webrtc:6828 Change-Id: I77dbeb10187b4e70dda1d873a29994fa76070758 Reviewed-on: https://webrtc-review.googlesource.com/34187 Reviewed-by: Stefan Holmer Commit-Queue: Patrik Höglund Cr-Commit-Position: refs/heads/master@{#21495} --- api/BUILD.gn | 1 + api/mediastreaminterface.h | 2 +- api/videosinkinterface.h | 32 ++++++++++++++++++++ call/video_receive_stream.h | 2 +- call/video_send_stream.h | 2 +- common_video/BUILD.gn | 11 +++---- common_video/include/incoming_video_stream.h | 2 +- examples/BUILD.gn | 1 + examples/DEPS | 1 + examples/unityplugin/video_observer.h | 2 +- media/BUILD.gn | 4 ++- media/base/fakevideorenderer.h | 2 +- media/base/mediachannel.h | 2 +- media/base/videobroadcaster.h | 2 +- media/base/videosinkinterface.h | 21 ++----------- media/base/videosourceinterface.h | 2 +- media/engine/webrtcvideoengine.h | 2 +- modules/video_capture/BUILD.gn | 1 + modules/video_capture/video_capture.h | 2 +- pc/BUILD.gn | 2 ++ pc/DEPS | 2 +- pc/channel.h | 2 +- pc/videotracksource.h | 2 +- sdk/android/src/jni/video_renderer.cc | 2 +- test/BUILD.gn | 2 ++ test/fake_videorenderer.h | 2 +- test/video_renderer.h | 2 +- video/BUILD.gn | 1 + video/video_receive_stream.cc | 1 + video/video_receive_stream.h | 1 - video/video_stream_decoder.h | 2 +- video/video_stream_encoder.h | 2 +- 32 files changed, 70 insertions(+), 47 deletions(-) create mode 100644 api/videosinkinterface.h diff --git a/api/BUILD.gn b/api/BUILD.gn index fa93e14808..05c0aee45a 100644 --- a/api/BUILD.gn +++ b/api/BUILD.gn @@ -72,6 +72,7 @@ rtc_static_library("libjingle_peerconnection_api") { "turncustomizer.h", "umametrics.cc", "umametrics.h", + "videosinkinterface.h", "videosourceproxy.h", ] diff --git a/api/mediastreaminterface.h b/api/mediastreaminterface.h index 1699e4cccb..1350b292c8 100644 --- a/api/mediastreaminterface.h +++ b/api/mediastreaminterface.h @@ -27,7 +27,7 @@ // TODO(zhihuang): Remove unrelated headers once downstream applications stop // relying on them; they were previously transitively included by // mediachannel.h, which is no longer a dependency of this file. -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "media/base/videosourceinterface.h" #include "modules/audio_processing/include/audio_processing_statistics.h" #include "rtc_base/ratetracker.h" diff --git a/api/videosinkinterface.h b/api/videosinkinterface.h new file mode 100644 index 0000000000..2399320541 --- /dev/null +++ b/api/videosinkinterface.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016 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. + */ + +#ifndef API_VIDEOSINKINTERFACE_H_ +#define API_VIDEOSINKINTERFACE_H_ + +#include + +namespace rtc { + +template +class VideoSinkInterface { + public: + virtual ~VideoSinkInterface() {} + + virtual void OnFrame(const VideoFrameT& frame) = 0; + + // Should be called by the source when it discards the frame due to rate + // limiting. + virtual void OnDiscardedFrame() {} +}; + +} // namespace rtc + +#endif // API_VIDEOSINKINTERFACE_H_ diff --git a/call/video_receive_stream.h b/call/video_receive_stream.h index 924d69a529..1adc696461 100644 --- a/call/video_receive_stream.h +++ b/call/video_receive_stream.h @@ -21,10 +21,10 @@ #include "api/rtpparameters.h" #include "api/video/video_content_type.h" #include "api/video/video_timing.h" +#include "api/videosinkinterface.h" #include "call/rtp_config.h" #include "common_types.h" // NOLINT(build/include) #include "common_video/include/frame_callback.h" -#include "media/base/videosinkinterface.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "rtc_base/platform_file.h" diff --git a/call/video_send_stream.h b/call/video_send_stream.h index 890a767dfe..797f315519 100644 --- a/call/video_send_stream.h +++ b/call/video_send_stream.h @@ -19,11 +19,11 @@ #include "api/call/transport.h" #include "api/rtpparameters.h" #include "api/rtp_headers.h" +#include "api/videosinkinterface.h" #include "call/rtp_config.h" #include "call/video_config.h" #include "common_types.h" // NOLINT(build/include) #include "common_video/include/frame_callback.h" -#include "media/base/videosinkinterface.h" #include "media/base/videosourceinterface.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "rtc_base/platform_file.h" diff --git a/common_video/BUILD.gn b/common_video/BUILD.gn index 264aed41eb..68b102b061 100644 --- a/common_video/BUILD.gn +++ b/common_video/BUILD.gn @@ -13,13 +13,6 @@ config("common_video_config") { } rtc_static_library("common_video") { - # TODO(bugs.webrtc.org/6828): Remove dependency cycle: - # //common_video:common_video -> - # //media:rtc_media_base -> - # //call:call_interfaces -> - # //call:video_stream_api -> - # //common_video:common_video - check_includes = false sources = [ "bitrate_adjuster.cc", "h264/h264_bitstream_parser.cc", @@ -61,14 +54,18 @@ rtc_static_library("common_video") { deps = [ "..:webrtc_common", + "../:typedefs", + "../api:libjingle_peerconnection_api", "../api:optional", "../api:video_frame_api", "../api:video_frame_api_i420", "../media:rtc_h264_profile_id", "../modules:module_api", + "../rtc_base:checks", "../rtc_base:rtc_base", "../rtc_base:rtc_task_queue", "../system_wrappers", + "//third_party/libyuv", ] } diff --git a/common_video/include/incoming_video_stream.h b/common_video/include/incoming_video_stream.h index 7ae27a96a8..405416c2d8 100644 --- a/common_video/include/incoming_video_stream.h +++ b/common_video/include/incoming_video_stream.h @@ -11,8 +11,8 @@ #ifndef COMMON_VIDEO_INCLUDE_INCOMING_VIDEO_STREAM_H_ #define COMMON_VIDEO_INCLUDE_INCOMING_VIDEO_STREAM_H_ +#include "api/videosinkinterface.h" #include "common_video/video_render_frames.h" -#include "media/base/videosinkinterface.h" #include "rtc_base/race_checker.h" #include "rtc_base/task_queue.h" diff --git a/examples/BUILD.gn b/examples/BUILD.gn index 6c87b139bd..5c4dbc77fb 100644 --- a/examples/BUILD.gn +++ b/examples/BUILD.gn @@ -673,6 +673,7 @@ if (is_win || is_android) { "../api:video_frame_api", "../api/audio_codecs:builtin_audio_decoder_factory", "../api/audio_codecs:builtin_audio_encoder_factory", + "../common_video", "../media:rtc_media", "../media:rtc_media_base", "../modules/audio_device:audio_device", diff --git a/examples/DEPS b/examples/DEPS index 96066528da..acd6d82957 100644 --- a/examples/DEPS +++ b/examples/DEPS @@ -1,6 +1,7 @@ include_rules = [ "+WebRTC", "+api", + "+common_video", "+media", "+modules/audio_device", "+modules/video_capture", diff --git a/examples/unityplugin/video_observer.h b/examples/unityplugin/video_observer.h index f2b06b3d49..ec98c86aa9 100644 --- a/examples/unityplugin/video_observer.h +++ b/examples/unityplugin/video_observer.h @@ -14,8 +14,8 @@ #include #include "api/mediastreaminterface.h" +#include "api/videosinkinterface.h" #include "examples/unityplugin/unity_plugin_apis.h" -#include "media/base/videosinkinterface.h" class VideoObserver : public rtc::VideoSinkInterface { public: diff --git a/media/BUILD.gn b/media/BUILD.gn index a2a7bb2841..27c5714215 100644 --- a/media/BUILD.gn +++ b/media/BUILD.gn @@ -90,7 +90,6 @@ rtc_static_library("rtc_media_base") { "base/videocapturerfactory.h", "base/videocommon.cc", "base/videocommon.h", - "base/videosinkinterface.h", "base/videosourcebase.cc", "base/videosourcebase.h", "base/videosourceinterface.cc", @@ -112,6 +111,7 @@ rtc_static_library("rtc_media_base") { "../api/video_codecs:video_codecs_api", "../call:call_interfaces", "../call:video_stream_api", + "../common_video", "../modules/audio_processing:audio_processing_statistics", "../p2p", "../rtc_base:rtc_base", @@ -341,8 +341,10 @@ if (rtc_include_tests) { include_dirs = [] public_deps = [] deps = [ + "../api:libjingle_peerconnection_api", "../api:video_frame_api_i420", "../call:video_stream_api", + "../common_video:common_video", "../modules/audio_coding:rent_a_codec", "../modules/audio_processing:audio_processing", "../modules/rtp_rtcp:rtp_rtcp_format", diff --git a/media/base/fakevideorenderer.h b/media/base/fakevideorenderer.h index 630063057b..fa9aff70f5 100644 --- a/media/base/fakevideorenderer.h +++ b/media/base/fakevideorenderer.h @@ -12,7 +12,7 @@ #define MEDIA_BASE_FAKEVIDEORENDERER_H_ #include "api/video/video_frame.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "rtc_base/criticalsection.h" #include "rtc_base/logging.h" diff --git a/media/base/mediachannel.h b/media/base/mediachannel.h index d1a127980a..6cee218400 100644 --- a/media/base/mediachannel.h +++ b/media/base/mediachannel.h @@ -23,11 +23,11 @@ #include "api/rtpreceiverinterface.h" #include "api/video/video_content_type.h" #include "api/video/video_timing.h" +#include "api/videosinkinterface.h" #include "call/video_config.h" #include "media/base/codec.h" #include "media/base/mediaconstants.h" #include "media/base/streamparams.h" -#include "media/base/videosinkinterface.h" #include "media/base/videosourceinterface.h" #include "modules/audio_processing/include/audio_processing_statistics.h" #include "rtc_base/asyncpacketsocket.h" diff --git a/media/base/videobroadcaster.h b/media/base/videobroadcaster.h index a8e21fa5b8..c19f3f7519 100644 --- a/media/base/videobroadcaster.h +++ b/media/base/videobroadcaster.h @@ -16,7 +16,7 @@ #include #include "api/video/video_frame.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "media/base/videosourcebase.h" #include "rtc_base/criticalsection.h" #include "rtc_base/thread_checker.h" diff --git a/media/base/videosinkinterface.h b/media/base/videosinkinterface.h index 900e786f24..ed656ad541 100644 --- a/media/base/videosinkinterface.h +++ b/media/base/videosinkinterface.h @@ -11,24 +11,7 @@ #ifndef MEDIA_BASE_VIDEOSINKINTERFACE_H_ #define MEDIA_BASE_VIDEOSINKINTERFACE_H_ -#include -// TODO(nisse): Consider moving this interface (and possibly -// VideoSourceInterface too) from media/base to common_video, to -// reduce dependency cycles. -namespace rtc { - -template -class VideoSinkInterface { - public: - virtual ~VideoSinkInterface() {} - - virtual void OnFrame(const VideoFrameT& frame) = 0; - - // Should be called by the source when it discards the frame due to rate - // limiting. - virtual void OnDiscardedFrame() {} -}; - -} // namespace rtc +// TODO(bugs.webrtc.org/6828): Remove this once downstream is updated. +#include "api/videosinkinterface.h" #endif // MEDIA_BASE_VIDEOSINKINTERFACE_H_ diff --git a/media/base/videosourceinterface.h b/media/base/videosourceinterface.h index 701ddec492..73f5fee1dd 100644 --- a/media/base/videosourceinterface.h +++ b/media/base/videosourceinterface.h @@ -14,7 +14,7 @@ #include #include "api/optional.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" namespace rtc { diff --git a/media/engine/webrtcvideoengine.h b/media/engine/webrtcvideoengine.h index 132b5fd193..e096547158 100644 --- a/media/engine/webrtcvideoengine.h +++ b/media/engine/webrtcvideoengine.h @@ -21,12 +21,12 @@ #include "api/optional.h" #include "api/video/video_frame.h" #include "api/video_codecs/sdp_video_format.h" +#include "api/videosinkinterface.h" #include "call/call.h" #include "call/flexfec_receive_stream.h" #include "call/video_receive_stream.h" #include "call/video_send_stream.h" #include "media/base/mediaengine.h" -#include "media/base/videosinkinterface.h" #include "media/base/videosourceinterface.h" #include "media/engine/webrtcvideodecoderfactory.h" #include "media/engine/webrtcvideoencoderfactory.h" diff --git a/modules/video_capture/BUILD.gn b/modules/video_capture/BUILD.gn index b71beac528..8df5205f12 100644 --- a/modules/video_capture/BUILD.gn +++ b/modules/video_capture/BUILD.gn @@ -29,6 +29,7 @@ rtc_static_library("video_capture_module") { "..:module_api", "../..:webrtc_common", "../../:typedefs", + "../../api:libjingle_peerconnection_api", "../../api:video_frame_api", "../../api:video_frame_api_i420", "../../common_video", diff --git a/modules/video_capture/video_capture.h b/modules/video_capture/video_capture.h index 8fb782230e..28340a5c13 100644 --- a/modules/video_capture/video_capture.h +++ b/modules/video_capture/video_capture.h @@ -12,7 +12,7 @@ #define MODULES_VIDEO_CAPTURE_VIDEO_CAPTURE_H_ #include "api/video/video_rotation.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "modules/include/module.h" #include "modules/video_capture/video_capture_defines.h" diff --git a/pc/BUILD.gn b/pc/BUILD.gn index a0f94af104..cd1a489d78 100644 --- a/pc/BUILD.gn +++ b/pc/BUILD.gn @@ -75,6 +75,7 @@ rtc_static_library("rtc_pc_base") { "../api:libjingle_peerconnection_api", "../api:optional", "../api:ortc_api", + "../common_video:common_video", "../media:rtc_data", "../media:rtc_h264_profile_id", "../media:rtc_media_base", @@ -184,6 +185,7 @@ rtc_static_library("peerconnection") { "../api:rtc_stats_api", "../api/video_codecs:video_codecs_api", "../call:call_interfaces", + "../common_video:common_video", "../logging:rtc_event_log_api", "../media:rtc_data", "../media:rtc_media_base", diff --git a/pc/DEPS b/pc/DEPS index dfadc23778..1992af013e 100644 --- a/pc/DEPS +++ b/pc/DEPS @@ -2,7 +2,7 @@ include_rules = [ "+third_party/libsrtp", "+api", "+call", - "+common_video/h264", + "+common_video", "+logging/rtc_event_log", "+logging/rtc_event_log", "+media", diff --git a/pc/channel.h b/pc/channel.h index 9e4281167d..561279ff99 100644 --- a/pc/channel.h +++ b/pc/channel.h @@ -21,10 +21,10 @@ #include "api/call/audio_sink.h" #include "api/jsep.h" #include "api/rtpreceiverinterface.h" +#include "api/videosinkinterface.h" #include "media/base/mediachannel.h" #include "media/base/mediaengine.h" #include "media/base/streamparams.h" -#include "media/base/videosinkinterface.h" #include "media/base/videosourceinterface.h" #include "p2p/base/dtlstransportinternal.h" #include "p2p/base/packettransportinternal.h" diff --git a/pc/videotracksource.h b/pc/videotracksource.h index 6dacf37e4d..d4731d029e 100644 --- a/pc/videotracksource.h +++ b/pc/videotracksource.h @@ -13,8 +13,8 @@ #include "api/mediastreaminterface.h" #include "api/notifier.h" +#include "api/videosinkinterface.h" #include "media/base/mediachannel.h" -#include "media/base/videosinkinterface.h" #include "rtc_base/thread_checker.h" // VideoTrackSource implements VideoTrackSourceInterface. diff --git a/sdk/android/src/jni/video_renderer.cc b/sdk/android/src/jni/video_renderer.cc index 674a8ddfab..6f7650a481 100644 --- a/sdk/android/src/jni/video_renderer.cc +++ b/sdk/android/src/jni/video_renderer.cc @@ -11,7 +11,7 @@ #include #include "api/video/video_frame.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "sdk/android/generated_video_jni/jni/VideoRenderer_jni.h" #include "sdk/android/src/jni/jni_helpers.h" #include "sdk/android/src/jni/videoframe.h" diff --git a/test/BUILD.gn b/test/BUILD.gn index 7e929e8993..61978959e8 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -574,6 +574,7 @@ rtc_source_set("test_common") { ":video_test_common", "..:webrtc_common", "../:typedefs", + "../api:libjingle_peerconnection_api", "../api:transport_api", "../api:video_frame_api", "../api:video_frame_api_i420", @@ -678,6 +679,7 @@ rtc_source_set("test_renderer_generic") { ":test_support", "..:webrtc_common", "../:typedefs", + "../api:libjingle_peerconnection_api", "../common_video", "../media:rtc_media_base", "../modules/media_file", diff --git a/test/fake_videorenderer.h b/test/fake_videorenderer.h index bc9c1db710..89a5ceb598 100644 --- a/test/fake_videorenderer.h +++ b/test/fake_videorenderer.h @@ -12,7 +12,7 @@ #define TEST_FAKE_VIDEORENDERER_H_ #include "api/video/video_frame.h" -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" namespace webrtc { namespace test { diff --git a/test/video_renderer.h b/test/video_renderer.h index 6a00e8803b..ffdb907cd4 100644 --- a/test/video_renderer.h +++ b/test/video_renderer.h @@ -12,7 +12,7 @@ #include -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" namespace webrtc { class VideoFrame; diff --git a/video/BUILD.gn b/video/BUILD.gn index 5a19a468ac..391859187e 100644 --- a/video/BUILD.gn +++ b/video/BUILD.gn @@ -56,6 +56,7 @@ rtc_static_library("video") { deps = [ "..:webrtc_common", "../:typedefs", + "../api:libjingle_peerconnection_api", "../api:optional", "../api:transport_api", "../api:video_frame_api", diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index 42e532a697..9325054605 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -22,6 +22,7 @@ #include "common_types.h" // NOLINT(build/include) #include "common_video/h264/profile_level_id.h" #include "common_video/libyuv/include/webrtc_libyuv.h" +#include "common_video/include/incoming_video_stream.h" #include "modules/rtp_rtcp/include/rtp_receiver.h" #include "modules/rtp_rtcp/include/rtp_rtcp.h" #include "modules/utility/include/process_thread.h" diff --git a/video/video_receive_stream.h b/video/video_receive_stream.h index a5f9108b4a..60afd8d532 100644 --- a/video/video_receive_stream.h +++ b/video/video_receive_stream.h @@ -17,7 +17,6 @@ #include "call/rtp_packet_sink_interface.h" #include "call/syncable.h" #include "call/video_receive_stream.h" -#include "common_video/include/incoming_video_stream.h" #include "common_video/libyuv/include/webrtc_libyuv.h" #include "modules/rtp_rtcp/include/flexfec_receiver.h" #include "modules/video_coding/frame_buffer2.h" diff --git a/video/video_stream_decoder.h b/video/video_stream_decoder.h index 4f996bdeba..812f47b6a3 100644 --- a/video/video_stream_decoder.h +++ b/video/video_stream_decoder.h @@ -16,7 +16,7 @@ #include #include -#include "media/base/videosinkinterface.h" +#include "api/videosinkinterface.h" #include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" #include "modules/video_coding/include/video_coding_defines.h" #include "rtc_base/criticalsection.h" diff --git a/video/video_stream_encoder.h b/video/video_stream_encoder.h index b3c446b039..cbf4787ab5 100644 --- a/video/video_stream_encoder.h +++ b/video/video_stream_encoder.h @@ -19,10 +19,10 @@ #include "api/video/video_rotation.h" #include "api/video_codecs/video_encoder.h" +#include "api/videosinkinterface.h" #include "call/call.h" #include "common_types.h" // NOLINT(build/include) #include "common_video/include/video_bitrate_allocator.h" -#include "media/base/videosinkinterface.h" #include "modules/video_coding/include/video_coding_defines.h" #include "modules/video_coding/utility/quality_scaler.h" #include "modules/video_coding/video_coding_impl.h"