summaryrefslogtreecommitdiffstats
path: root/remoting/client
diff options
context:
space:
mode:
authorsergeyu <sergeyu@chromium.org>2016-01-05 11:12:42 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-05 19:13:28 +0000
commit480531b40d9a83e25d524c7a78a34bf25c1ad690 (patch)
tree6a66edf4d297dbeb22caf7874553a274520b1f4e /remoting/client
parent0d94807df4576e2f9246c9c5ee35f6c3ea94a4a9 (diff)
downloadchromium_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.h1
-rw-r--r--remoting/client/frame_consumer.h47
-rw-r--r--remoting/client/jni/jni_frame_consumer.cc2
-rw-r--r--remoting/client/jni/jni_frame_consumer.h4
-rw-r--r--remoting/client/plugin/pepper_video_renderer_2d.cc8
-rw-r--r--remoting/client/plugin/pepper_video_renderer_2d.h7
-rw-r--r--remoting/client/plugin/pepper_video_renderer_3d.cc7
-rw-r--r--remoting/client/plugin/pepper_video_renderer_3d.h1
-rw-r--r--remoting/client/software_video_renderer.cc10
-rw-r--r--remoting/client/software_video_renderer.h7
-rw-r--r--remoting/client/software_video_renderer_unittest.cc4
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 {}