Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: remoting/client/plugin/pepper_video_renderer_2d.h

Issue 1236663002: Allow shaped-desktop hosts to send shape only when it changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Pepper 2D renderer build Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_ 5 #ifndef REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_
6 #define REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_ 6 #define REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_
7 7
8 #include <list> 8 #include <list>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 12 matching lines...) Expand all
23 namespace base { 23 namespace base {
24 class Time; 24 class Time;
25 } // namespace base 25 } // namespace base
26 26
27 namespace webrtc { 27 namespace webrtc {
28 class DesktopFrame; 28 class DesktopFrame;
29 } // namespace webrtc 29 } // namespace webrtc
30 30
31 namespace remoting { 31 namespace remoting {
32 32
33 class FrameConsumerProxy;
34 class SoftwareVideoRenderer; 33 class SoftwareVideoRenderer;
35 34
36 // Video renderer that wraps SoftwareVideoRenderer and displays it using Pepper 35 // Video renderer that wraps SoftwareVideoRenderer and displays it using Pepper
37 // 2D graphics API. 36 // 2D graphics API.
38 class PepperVideoRenderer2D : public PepperVideoRenderer, 37 class PepperVideoRenderer2D : public PepperVideoRenderer,
39 public FrameConsumer, 38 public FrameConsumer,
40 public base::NonThreadSafe { 39 public base::NonThreadSafe {
41 public: 40 public:
42 PepperVideoRenderer2D(); 41 PepperVideoRenderer2D();
43 ~PepperVideoRenderer2D() override; 42 ~PepperVideoRenderer2D() override;
44 43
45 // PepperVideoRenderer interface. 44 // PepperVideoRenderer interface.
46 bool Initialize(pp::Instance* instance, 45 bool Initialize(pp::Instance* instance,
47 const ClientContext& context, 46 const ClientContext& context,
48 EventHandler* event_handler) override; 47 EventHandler* event_handler) override;
49 void OnViewChanged(const pp::View& view) override; 48 void OnViewChanged(const pp::View& view) override;
50 void EnableDebugDirtyRegion(bool enable) override; 49 void EnableDebugDirtyRegion(bool enable) override;
51 50
52 // VideoRenderer interface. 51 // VideoRenderer interface.
53 void OnSessionConfig(const protocol::SessionConfig& config) override; 52 void OnSessionConfig(const protocol::SessionConfig& config) override;
54 ChromotingStats* GetStats() override; 53 ChromotingStats* GetStats() override;
55 protocol::VideoStub* GetVideoStub() override; 54 protocol::VideoStub* GetVideoStub() override;
56 55
57 private: 56 private:
58 // FrameConsumer implementation. 57 // FrameConsumer implementation.
59 void ApplyBuffer(const webrtc::DesktopSize& view_size, 58 void ApplyBuffer(const webrtc::DesktopSize& view_size,
60 const webrtc::DesktopRect& clip_area, 59 const webrtc::DesktopRect& clip_area,
61 webrtc::DesktopFrame* buffer, 60 webrtc::DesktopFrame* buffer,
62 const webrtc::DesktopRegion& region, 61 const webrtc::DesktopRegion& region,
63 const webrtc::DesktopRegion& shape) override; 62 const webrtc::DesktopRegion* shape) override;
64 void ReturnBuffer(webrtc::DesktopFrame* buffer) override; 63 void ReturnBuffer(webrtc::DesktopFrame* buffer) override;
65 void SetSourceSize(const webrtc::DesktopSize& source_size, 64 void SetSourceSize(const webrtc::DesktopSize& source_size,
66 const webrtc::DesktopVector& dpi) override; 65 const webrtc::DesktopVector& dpi) override;
67 PixelFormat GetPixelFormat() override; 66 PixelFormat GetPixelFormat() override;
68 67
69 // Helper to allocate buffers for the decoder. 68 // Helper to allocate buffers for the decoder.
70 void AllocateBuffers(); 69 void AllocateBuffers();
71 70
72 // Frees a frame buffer previously allocated by AllocateBuffer. 71 // Frees a frame buffer previously allocated by AllocateBuffer.
73 void FreeBuffer(webrtc::DesktopFrame* buffer); 72 void FreeBuffer(webrtc::DesktopFrame* buffer);
(...skipping 11 matching lines...) Expand all
85 void OnFlushDone(int result, 84 void OnFlushDone(int result,
86 const base::Time& paint_start, 85 const base::Time& paint_start,
87 webrtc::DesktopFrame* buffer); 86 webrtc::DesktopFrame* buffer);
88 87
89 // Parameters passed to Initialize(). 88 // Parameters passed to Initialize().
90 pp::Instance* instance_; 89 pp::Instance* instance_;
91 EventHandler* event_handler_; 90 EventHandler* event_handler_;
92 91
93 pp::Graphics2D graphics2d_; 92 pp::Graphics2D graphics2d_;
94 93
95 scoped_refptr<FrameConsumerProxy> frame_consumer_proxy_;
96 scoped_ptr<SoftwareVideoRenderer> software_video_renderer_; 94 scoped_ptr<SoftwareVideoRenderer> software_video_renderer_;
97 95
98 // List of allocated image buffers. 96 // List of allocated image buffers.
99 std::list<webrtc::DesktopFrame*> buffers_; 97 std::list<webrtc::DesktopFrame*> buffers_;
100 98
101 // Queued buffer to paint, with clip area and dirty region in device pixels. 99 // Queued buffer to paint, with clip area and dirty region in device pixels.
102 webrtc::DesktopFrame* merge_buffer_; 100 webrtc::DesktopFrame* merge_buffer_;
103 webrtc::DesktopRect merge_clip_area_; 101 webrtc::DesktopRect merge_clip_area_;
104 webrtc::DesktopRegion merge_region_; 102 webrtc::DesktopRegion merge_region_;
105 103
(...skipping 13 matching lines...) Expand all
119 117
120 // Visible area of the view, in output pixels. 118 // Visible area of the view, in output pixels.
121 webrtc::DesktopRect clip_area_; 119 webrtc::DesktopRect clip_area_;
122 120
123 // Size of the most recent source frame in pixels. 121 // Size of the most recent source frame in pixels.
124 webrtc::DesktopSize source_size_; 122 webrtc::DesktopSize source_size_;
125 123
126 // Resolution of the most recent source frame dots-per-inch. 124 // Resolution of the most recent source frame dots-per-inch.
127 webrtc::DesktopVector source_dpi_; 125 webrtc::DesktopVector source_dpi_;
128 126
127 // Shape of the most recent source frame.
128 scoped_ptr<webrtc::DesktopRegion> source_shape_;
129
129 // True if there is already a Flush() pending on the Graphics2D context. 130 // True if there is already a Flush() pending on the Graphics2D context.
130 bool flush_pending_; 131 bool flush_pending_;
131 132
132 // True after the first call to ApplyBuffer(). 133 // True after the first call to ApplyBuffer().
133 bool frame_received_; 134 bool frame_received_;
134 135
135 // True if dirty regions are to be sent to |event_handler_| for debugging. 136 // True if dirty regions are to be sent to |event_handler_| for debugging.
136 bool debug_dirty_region_; 137 bool debug_dirty_region_;
137 138
138 pp::CompletionCallbackFactory<PepperVideoRenderer2D> callback_factory_; 139 pp::CompletionCallbackFactory<PepperVideoRenderer2D> callback_factory_;
139 base::WeakPtrFactory<PepperVideoRenderer2D> weak_factory_; 140 base::WeakPtrFactory<PepperVideoRenderer2D> weak_factory_;
140 141
141 DISALLOW_COPY_AND_ASSIGN(PepperVideoRenderer2D); 142 DISALLOW_COPY_AND_ASSIGN(PepperVideoRenderer2D);
142 }; 143 };
143 144
144 } // namespace remoting 145 } // namespace remoting
145 146
146 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_ 147 #endif // REMOTING_CLIENT_PLUGIN_PEPPER_VIDEO_RENDERER_2D_H_
OLDNEW
« no previous file with comments | « remoting/client/plugin/pepper_video_renderer.h ('k') | remoting/client/plugin/pepper_video_renderer_2d.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698