diff options
author | sergeyu <sergeyu@chromium.org> | 2016-01-05 11:12:42 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-05 19:13:28 +0000 |
commit | 480531b40d9a83e25d524c7a78a34bf25c1ad690 (patch) | |
tree | 6a66edf4d297dbeb22caf7874553a274520b1f4e /remoting/client | |
parent | 0d94807df4576e2f9246c9c5ee35f6c3ea94a4a9 (diff) | |
download | chromium_src-480531b40d9a83e25d524c7a78a34bf25c1ad690.zip chromium_src-480531b40d9a83e25d524c7a78a34bf25c1ad690.tar.gz chromium_src-480531b40d9a83e25d524c7a78a34bf25c1ad690.tar.bz2 |
Add GetFrameConsumer() in VideoRenderer.
Also moved FrameConsumer interface to remoting/protocol. This
will allow to implement video rendering in WebrtcConnectionToHost as
WebRTC stack is responsible for video decoding.
BUG=547158
Review URL: https://codereview.chromium.org/1559043004
Cr-Commit-Position: refs/heads/master@{#367600}
Diffstat (limited to 'remoting/client')
-rw-r--r-- | remoting/client/chromoting_client.h | 1 | ||||
-rw-r--r-- | remoting/client/frame_consumer.h | 47 | ||||
-rw-r--r-- | remoting/client/jni/jni_frame_consumer.cc | 2 | ||||
-rw-r--r-- | remoting/client/jni/jni_frame_consumer.h | 4 | ||||
-rw-r--r-- | remoting/client/plugin/pepper_video_renderer_2d.cc | 8 | ||||
-rw-r--r-- | remoting/client/plugin/pepper_video_renderer_2d.h | 7 | ||||
-rw-r--r-- | remoting/client/plugin/pepper_video_renderer_3d.cc | 7 | ||||
-rw-r--r-- | remoting/client/plugin/pepper_video_renderer_3d.h | 1 | ||||
-rw-r--r-- | remoting/client/software_video_renderer.cc | 10 | ||||
-rw-r--r-- | remoting/client/software_video_renderer.h | 7 | ||||
-rw-r--r-- | remoting/client/software_video_renderer_unittest.cc | 4 |
11 files changed, 35 insertions, 63 deletions
diff --git a/remoting/client/chromoting_client.h b/remoting/client/chromoting_client.h index 173e1b0..48cd5f9 100644 --- a/remoting/client/chromoting_client.h +++ b/remoting/client/chromoting_client.h @@ -39,7 +39,6 @@ class AudioPlayer; class ClientContext; class ClientUserInterface; class FrameConsumerProxy; -class FrameProducer; class ChromotingClient : public SignalStrategy::Listener, public protocol::ConnectionToHost::HostEventCallback, diff --git a/remoting/client/frame_consumer.h b/remoting/client/frame_consumer.h deleted file mode 100644 index 792d2f6..0000000 --- a/remoting/client/frame_consumer.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef REMOTING_CLIENT_FRAME_CONSUMER_H_ -#define REMOTING_CLIENT_FRAME_CONSUMER_H_ - -#include "base/macros.h" - -namespace webrtc { -class DesktopFrame; -class DesktopRect; -class DesktopRegion; -class DesktopSize; -class DesktopVector; -} // namespace webrtc - -namespace remoting { - -class FrameConsumer { - public: - // List of supported pixel formats needed by various platforms. - enum PixelFormat { - FORMAT_BGRA, // Used by the Pepper plugin. - FORMAT_RGBA, // Used for Android's Bitmap class. - }; - - virtual scoped_ptr<webrtc::DesktopFrame> AllocateFrame( - const webrtc::DesktopSize& size) = 0; - - virtual void DrawFrame(scoped_ptr<webrtc::DesktopFrame> frame, - const base::Closure& done) = 0; - - // Returns the preferred pixel encoding for the platform. - virtual PixelFormat GetPixelFormat() = 0; - - protected: - FrameConsumer() {} - virtual ~FrameConsumer() {} - - private: - DISALLOW_COPY_AND_ASSIGN(FrameConsumer); -}; - -} // namespace remoting - -#endif // REMOTING_CLIENT_FRAME_CONSUMER_H_ diff --git a/remoting/client/jni/jni_frame_consumer.cc b/remoting/client/jni/jni_frame_consumer.cc index 25923da..066110c 100644 --- a/remoting/client/jni/jni_frame_consumer.cc +++ b/remoting/client/jni/jni_frame_consumer.cc @@ -115,7 +115,7 @@ void JniFrameConsumer::OnFrameRendered(const base::Closure& done) { done.Run(); } -FrameConsumer::PixelFormat JniFrameConsumer::GetPixelFormat() { +protocol::FrameConsumer::PixelFormat JniFrameConsumer::GetPixelFormat() { return FORMAT_RGBA; } diff --git a/remoting/client/jni/jni_frame_consumer.h b/remoting/client/jni/jni_frame_consumer.h index 5c72e9b..e635032 100644 --- a/remoting/client/jni/jni_frame_consumer.h +++ b/remoting/client/jni/jni_frame_consumer.h @@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/memory/weak_ptr.h" -#include "remoting/client/frame_consumer.h" +#include "remoting/protocol/frame_consumer.h" #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" namespace remoting { @@ -19,7 +19,7 @@ namespace remoting { class ChromotingJniRuntime; // FrameConsumer implementation that draws onto a JNI direct byte buffer. -class JniFrameConsumer : public FrameConsumer { +class JniFrameConsumer : public protocol::FrameConsumer { public: // Does not take ownership of |jni_runtime|. explicit JniFrameConsumer(ChromotingJniRuntime* jni_runtime); diff --git a/remoting/client/plugin/pepper_video_renderer_2d.cc b/remoting/client/plugin/pepper_video_renderer_2d.cc index 4e6e4ba..978335b 100644 --- a/remoting/client/plugin/pepper_video_renderer_2d.cc +++ b/remoting/client/plugin/pepper_video_renderer_2d.cc @@ -114,6 +114,12 @@ protocol::VideoStub* PepperVideoRenderer2D::GetVideoStub() { return software_video_renderer_->GetVideoStub(); } +protocol::FrameConsumer* PepperVideoRenderer2D::GetFrameConsumer() { + DCHECK(thread_checker_.CalledOnValidThread()); + + return software_video_renderer_->GetFrameConsumer(); +} + scoped_ptr<webrtc::DesktopFrame> PepperVideoRenderer2D::AllocateFrame( const webrtc::DesktopSize& size) { DCHECK(thread_checker_.CalledOnValidThread()); @@ -187,7 +193,7 @@ void PepperVideoRenderer2D::DrawFrame(scoped_ptr<webrtc::DesktopFrame> frame, Flush(); } -FrameConsumer::PixelFormat PepperVideoRenderer2D::GetPixelFormat() { +protocol::FrameConsumer::PixelFormat PepperVideoRenderer2D::GetPixelFormat() { return FORMAT_BGRA; } diff --git a/remoting/client/plugin/pepper_video_renderer_2d.h b/remoting/client/plugin/pepper_video_renderer_2d.h index 6a17f4d..014ccec 100644 --- a/remoting/client/plugin/pepper_video_renderer_2d.h +++ b/remoting/client/plugin/pepper_video_renderer_2d.h @@ -18,8 +18,8 @@ #include "ppapi/cpp/point.h" #include "ppapi/cpp/view.h" #include "ppapi/utility/completion_callback_factory.h" -#include "remoting/client/frame_consumer.h" #include "remoting/client/plugin/pepper_video_renderer.h" +#include "remoting/protocol/frame_consumer.h" #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" @@ -39,7 +39,7 @@ class SoftwareVideoRenderer; // Video renderer that wraps SoftwareVideoRenderer and displays it using Pepper // 2D graphics API. class PepperVideoRenderer2D : public PepperVideoRenderer, - public FrameConsumer { + public protocol::FrameConsumer { public: PepperVideoRenderer2D(); ~PepperVideoRenderer2D() override; @@ -55,9 +55,10 @@ class PepperVideoRenderer2D : public PepperVideoRenderer, // VideoRenderer interface. void OnSessionConfig(const protocol::SessionConfig& config) override; protocol::VideoStub* GetVideoStub() override; + protocol::FrameConsumer* GetFrameConsumer() override; private: - // FrameConsumer implementation. + // protocol::FrameConsumer implementation. scoped_ptr<webrtc::DesktopFrame> AllocateFrame( const webrtc::DesktopSize& size) override; void DrawFrame(scoped_ptr<webrtc::DesktopFrame> frame, diff --git a/remoting/client/plugin/pepper_video_renderer_3d.cc b/remoting/client/plugin/pepper_video_renderer_3d.cc index 732b77b..4c22b14 100644 --- a/remoting/client/plugin/pepper_video_renderer_3d.cc +++ b/remoting/client/plugin/pepper_video_renderer_3d.cc @@ -178,6 +178,13 @@ protocol::VideoStub* PepperVideoRenderer3D::GetVideoStub() { return this; } +protocol::FrameConsumer* PepperVideoRenderer3D::GetFrameConsumer() { + // GetFrameConsumer() is used only for WebRTC-based connections which are not + // supported by the plugin. + NOTREACHED(); + return nullptr; +} + void PepperVideoRenderer3D::ProcessVideoPacket(scoped_ptr<VideoPacket> packet, const base::Closure& done) { base::ScopedClosureRunner done_runner(done); diff --git a/remoting/client/plugin/pepper_video_renderer_3d.h b/remoting/client/plugin/pepper_video_renderer_3d.h index 414cffa..d7df94f 100644 --- a/remoting/client/plugin/pepper_video_renderer_3d.h +++ b/remoting/client/plugin/pepper_video_renderer_3d.h @@ -45,6 +45,7 @@ class PepperVideoRenderer3D : public PepperVideoRenderer, // VideoRenderer interface. void OnSessionConfig(const protocol::SessionConfig& config) override; protocol::VideoStub* GetVideoStub() override; + protocol::FrameConsumer* GetFrameConsumer() override; // protocol::VideoStub interface. void ProcessVideoPacket(scoped_ptr<VideoPacket> packet, diff --git a/remoting/client/software_video_renderer.cc b/remoting/client/software_video_renderer.cc index 9726cd5..2fa0fb2 100644 --- a/remoting/client/software_video_renderer.cc +++ b/remoting/client/software_video_renderer.cc @@ -14,11 +14,11 @@ #include "base/single_thread_task_runner.h" #include "base/task_runner_util.h" #include "remoting/base/util.h" -#include "remoting/client/frame_consumer.h" #include "remoting/codec/video_decoder.h" #include "remoting/codec/video_decoder_verbatim.h" #include "remoting/codec/video_decoder_vpx.h" #include "remoting/proto/video.pb.h" +#include "remoting/protocol/frame_consumer.h" #include "remoting/protocol/session_config.h" #include "third_party/libyuv/include/libyuv/convert_argb.h" #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" @@ -72,7 +72,7 @@ scoped_ptr<webrtc::DesktopFrame> DoDecodeFrame( SoftwareVideoRenderer::SoftwareVideoRenderer( scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner, - FrameConsumer* consumer, + protocol::FrameConsumer* consumer, protocol::PerformanceTracker* perf_tracker) : decode_task_runner_(decode_task_runner), consumer_(consumer), @@ -100,7 +100,7 @@ void SoftwareVideoRenderer::OnSessionConfig( NOTREACHED() << "Invalid Encoding found: " << codec; } - if (consumer_->GetPixelFormat() == FrameConsumer::FORMAT_RGBA) { + if (consumer_->GetPixelFormat() == protocol::FrameConsumer::FORMAT_RGBA) { decoder_ = make_scoped_ptr(new RgbToBgrVideoDecoderFilter(std::move(decoder_))); } @@ -111,6 +111,10 @@ protocol::VideoStub* SoftwareVideoRenderer::GetVideoStub() { return this; } +protocol::FrameConsumer* SoftwareVideoRenderer::GetFrameConsumer() { + return consumer_; +} + void SoftwareVideoRenderer::ProcessVideoPacket(scoped_ptr<VideoPacket> packet, const base::Closure& done) { DCHECK(thread_checker_.CalledOnValidThread()); diff --git a/remoting/client/software_video_renderer.h b/remoting/client/software_video_renderer.h index b88fb45..5951cf3 100644 --- a/remoting/client/software_video_renderer.h +++ b/remoting/client/software_video_renderer.h @@ -27,10 +27,10 @@ class DesktopFrame; namespace remoting { -class FrameConsumer; class VideoDecoder; namespace protocol { +class FrameConsumer; class PerformanceTracker; } // namespace protocol @@ -45,13 +45,14 @@ class SoftwareVideoRenderer : public protocol::VideoRenderer, // tracking is disabled in that case. SoftwareVideoRenderer( scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner, - FrameConsumer* consumer, + protocol::FrameConsumer* consumer, protocol::PerformanceTracker* perf_tracker); ~SoftwareVideoRenderer() override; // VideoRenderer interface. void OnSessionConfig(const protocol::SessionConfig& config) override; protocol::VideoStub* GetVideoStub() override; + protocol::FrameConsumer* GetFrameConsumer() override; // protocol::VideoStub interface. void ProcessVideoPacket(scoped_ptr<VideoPacket> packet, @@ -64,7 +65,7 @@ class SoftwareVideoRenderer : public protocol::VideoRenderer, void OnFrameRendered(int32_t frame_id, const base::Closure& done); scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner_; - FrameConsumer* consumer_; + protocol::FrameConsumer* consumer_; protocol::PerformanceTracker* perf_tracker_; scoped_ptr<VideoDecoder> decoder_; diff --git a/remoting/client/software_video_renderer_unittest.cc b/remoting/client/software_video_renderer_unittest.cc index d57e7b9..9b658fd 100644 --- a/remoting/client/software_video_renderer_unittest.cc +++ b/remoting/client/software_video_renderer_unittest.cc @@ -14,9 +14,9 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/threading/thread.h" -#include "remoting/client/frame_consumer.h" #include "remoting/codec/video_encoder_verbatim.h" #include "remoting/proto/video.pb.h" +#include "remoting/protocol/frame_consumer.h" #include "remoting/protocol/session_config.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" @@ -30,7 +30,7 @@ namespace { const int kFrameWidth = 200; const int kFrameHeight = 200; -class TestFrameConsumer : public FrameConsumer { +class TestFrameConsumer : public protocol::FrameConsumer { public: TestFrameConsumer() {} ~TestFrameConsumer() override {} |