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

Side by Side Diff: content/renderer/media/media_stream_video_renderer_sink.h

Issue 2472273002: Move passing of WebRTC rendering frames from main thread to compositor thread (Closed)
Patch Set: perkj@ comments. Created 4 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_ 5 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_ 6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
7 7
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/threading/thread_checker.h"
11 #include "content/common/content_export.h" 11 #include "content/common/content_export.h"
12 #include "content/common/media/video_capture.h" 12 #include "content/common/media/video_capture.h"
13 #include "content/public/renderer/media_stream_video_renderer.h" 13 #include "content/public/renderer/media_stream_video_renderer.h"
14 #include "content/public/renderer/media_stream_video_sink.h" 14 #include "content/public/renderer/media_stream_video_sink.h"
15 #include "media/video/gpu_memory_buffer_video_frame_pool.h"
16 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
17 #include "ui/gfx/geometry/size.h" 16 #include "ui/gfx/geometry/size.h"
18 17
19 namespace base { 18 namespace base {
20 class SingleThreadTaskRunner; 19 class SingleThreadTaskRunner;
21 class TaskRunner; 20 class TaskRunner;
22 } // namespace base 21 } // namespace base
23 22
24 namespace media { 23 namespace media {
24 class GpuMemoryBufferVideoFramePool;
25 class GpuVideoAcceleratorFactories; 25 class GpuVideoAcceleratorFactories;
26 } // namespace media 26 } // namespace media
27 27
28 namespace content { 28 namespace content {
29 29
30 // MediaStreamVideoRendererSink is a MediaStreamVideoRenderer designed for 30 // MediaStreamVideoRendererSink is a MediaStreamVideoRenderer designed for
31 // rendering Video MediaStreamTracks [1], MediaStreamVideoRendererSink 31 // rendering Video MediaStreamTracks [1], MediaStreamVideoRendererSink
32 // implements MediaStreamVideoSink in order to render video frames provided from 32 // implements MediaStreamVideoSink in order to render video frames provided from
33 // a MediaStreamVideoTrack, to which it connects itself when the 33 // a MediaStreamVideoTrack, to which it connects itself when the
34 // MediaStreamVideoRenderer is Start()ed, and disconnects itself when the latter 34 // MediaStreamVideoRenderer is Start()ed, and disconnects itself when the latter
35 // is Stop()ed. 35 // is Stop()ed.
36 // 36 //
37 // [1] http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack 37 // [1] http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
38 // 38 //
39 // TODO(wuchengli): Add unit test. See the link below for reference. 39 // TODO(wuchengli): Add unit test. See the link below for reference.
40 // http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/media/rtc_vi 40 // http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/media/rtc_vi
41 // deo_decoder_unittest.cc?revision=180591&view=markup 41 // deo_decoder_unittest.cc?revision=180591&view=markup
42 class CONTENT_EXPORT MediaStreamVideoRendererSink 42 class CONTENT_EXPORT MediaStreamVideoRendererSink
43 : NON_EXPORTED_BASE(public MediaStreamVideoRenderer), 43 : NON_EXPORTED_BASE(public MediaStreamVideoRenderer),
44 NON_EXPORTED_BASE(public MediaStreamVideoSink) { 44 NON_EXPORTED_BASE(public MediaStreamVideoSink) {
45 public: 45 public:
46 MediaStreamVideoRendererSink( 46 MediaStreamVideoRendererSink(
47 const blink::WebMediaStreamTrack& video_track, 47 const blink::WebMediaStreamTrack& video_track,
48 const base::Closure& error_cb, 48 const base::Closure& error_cb,
49 const MediaStreamVideoRenderer::RepaintCB& repaint_cb, 49 const MediaStreamVideoRenderer::RepaintCB& repaint_cb,
50 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner,
50 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, 51 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
51 const scoped_refptr<base::TaskRunner>& worker_task_runner, 52 const scoped_refptr<base::TaskRunner>& worker_task_runner,
52 media::GpuVideoAcceleratorFactories* gpu_factories); 53 media::GpuVideoAcceleratorFactories* gpu_factories);
53 54
54 // MediaStreamVideoRenderer implementation. Called on the main thread. 55 // MediaStreamVideoRenderer implementation. Called on the main thread.
55 void Start() override; 56 void Start() override;
56 void Stop() override; 57 void Stop() override;
57 void Resume() override; 58 void Resume() override;
58 void Pause() override; 59 void Pause() override;
59 60
60 void SetGpuMemoryBufferVideoForTesting(
61 media::GpuMemoryBufferVideoFramePool* gpu_memory_buffer_pool);
62
63 protected: 61 protected:
64 ~MediaStreamVideoRendererSink() override; 62 ~MediaStreamVideoRendererSink() override;
65 63
66 private: 64 private:
67 friend class MediaStreamVideoRendererSinkTest; 65 friend class MediaStreamVideoRendererSinkTest;
68 enum State { 66 enum State {
69 STARTED, 67 STARTED,
70 PAUSED, 68 PAUSED,
71 STOPPED, 69 STOPPED,
72 }; 70 };
73 71
74 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, 72 // Inner class used for trampolining frames from IO thread to compositor
DaleCurtis 2016/11/15 00:30:16 No reason to define these here, just put them with
emircan 2016/11/15 19:54:02 Done.
75 base::TimeTicks estimated_capture_time); 73 // thread.
76 void FrameReady(const scoped_refptr<media::VideoFrame>& frame); 74 class FrameReceiverOnIO;
75 // Inner class used for transfering frames on compositor thread and running
76 // |repaint_cb_|.
77 class FrameDelivererOnCompositor;
77 78
78 // MediaStreamVideoSink implementation. Called on the main thread. 79 // MediaStreamVideoSink implementation. Called on the main thread.
79 void OnReadyStateChanged( 80 void OnReadyStateChanged(
80 blink::WebMediaStreamSource::ReadyState state) override; 81 blink::WebMediaStreamSource::ReadyState state) override;
81 82
82 void RenderSignalingFrame(); 83 void RenderSignalingFrame();
83 84
85 // Helper methods used for testing
86 State GetStateForTesting();
87 void SetGpuMemoryBufferVideoForTesting(
88 media::GpuMemoryBufferVideoFramePool* gpu_memory_buffer_pool);
89
84 const base::Closure error_cb_; 90 const base::Closure error_cb_;
85 const RepaintCB repaint_cb_; 91 const RepaintCB repaint_cb_;
86
87 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
88 State state_;
89 gfx::Size frame_size_;
90 const blink::WebMediaStreamTrack video_track_; 92 const blink::WebMediaStreamTrack video_track_;
91 93
92 // Pool of GpuMemoryBuffers and resources used to create hardware frames. 94 std::unique_ptr<FrameReceiverOnIO> frame_receiver_;
93 std::unique_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; 95 std::unique_ptr<FrameDelivererOnCompositor> frame_deliverer_;
94 const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
95 96
96 base::WeakPtrFactory<MediaStreamVideoRendererSink> weak_factory_; 97 const scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
98 base::ThreadChecker main_thread_checker_;
97 99
98 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink); 100 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink);
99 }; 101 };
100 102
101 } // namespace content 103 } // namespace content
102 104
103 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_ 105 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698