Index: remoting/client/jni/jni_video_renderer.h |
diff --git a/remoting/client/jni/jni_video_renderer.h b/remoting/client/jni/jni_video_renderer.h |
index e30d6bb994a65c17e5de476d48832e9249f92324..12f93bc816a7e8bb0d9f39dd844b3786d9be4763 100644 |
--- a/remoting/client/jni/jni_video_renderer.h |
+++ b/remoting/client/jni/jni_video_renderer.h |
@@ -5,30 +5,67 @@ |
#ifndef REMOTING_CLIENT_JNI_JNI_VIDEO_RENDERER_H_ |
#define REMOTING_CLIENT_JNI_JNI_VIDEO_RENDERER_H_ |
-#include "base/memory/ref_counted.h" |
-#include "remoting/protocol/video_renderer.h" |
+#include <list> |
+#include <memory> |
-namespace base { |
-class SingleThreadTaskRunner; |
-} // namespace base |
+#include "base/compiler_specific.h" |
+#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "remoting/client/software_video_renderer.h" |
+#include "remoting/protocol/frame_consumer.h" |
+#include "remoting/protocol/video_renderer.h" |
+#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
namespace remoting { |
-namespace protocol { |
-class PerformanceTracker; |
-} // namespace protocol |
+class ClientContext; |
+class ChromotingJniRuntime; |
+class JniClient; |
+class JniDisplayHandler; |
-// An extension of VideoRenderer that allows renderer to be initialized after |
-// it is constructed. |
-class JniVideoRenderer : public protocol::VideoRenderer { |
+// FrameConsumer and VideoRenderer implementation that draws onto a JNI direct |
+// byte buffer. |
+class JniVideoRenderer : public protocol::FrameConsumer, |
+ public protocol::VideoRenderer { |
public: |
- ~JniVideoRenderer() override {} |
- virtual void Initialize( |
- scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner, |
- protocol::PerformanceTracker* perf_tracker) = 0; |
- protected: |
- JniVideoRenderer() {} |
+ JniVideoRenderer( |
+ ChromotingJniRuntime* jni_runtime, |
+ base::WeakPtr<JniDisplayHandler> display); |
+ |
+ ~JniVideoRenderer() override; |
+ |
+ // FrameConsumer implementation. |
+ std::unique_ptr<webrtc::DesktopFrame> AllocateFrame( |
+ const webrtc::DesktopSize& size) override; |
+ void DrawFrame(std::unique_ptr<webrtc::DesktopFrame> frame, |
+ const base::Closure& done) override; |
+ PixelFormat GetPixelFormat() override; |
+ |
+ // JniVideoRenderer implementation. |
+ void OnSessionConfig(const protocol::SessionConfig& config) override; |
+ protocol::VideoStub* GetVideoStub() override; |
+ protocol::FrameConsumer* GetFrameConsumer() override; |
+ bool Initialize(const ClientContext& client_context, |
+ protocol::PerformanceTracker* perf_tracker) override; |
+ |
+ private: |
+ class Renderer; |
+ |
+ void OnFrameRendered(const base::Closure& done); |
+ |
+ // Used to obtain task runner references and make calls to Java methods. |
+ ChromotingJniRuntime* jni_runtime_; |
+ |
+ SoftwareVideoRenderer video_renderer_; |
+ |
+ // Renderer object used to render the frames on the display thread. |
+ std::unique_ptr<Renderer> renderer_; |
+ |
+ base::WeakPtrFactory<JniVideoRenderer> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(JniVideoRenderer); |
}; |
} // namespace remoting |
+ |
#endif // REMOTING_CLIENT_JNI_JNI_VIDEO_RENDERER_H_ |