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

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

Issue 1358883003: Use GpuMemoryBufferVideoFramePool for WebMediaPlayerMS and MediaStreamVideoRendererSink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@send-gmbs
Patch Set: Created 5 years, 2 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 (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/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "content/common/content_export.h" 10 #include "content/common/content_export.h"
11 #include "content/common/media/video_capture.h" 11 #include "content/common/media/video_capture.h"
12 #include "content/public/renderer/media_stream_video_sink.h" 12 #include "content/public/renderer/media_stream_video_sink.h"
13 #include "content/public/renderer/video_frame_provider.h" 13 #include "content/public/renderer/video_frame_provider.h"
14 #include "media/video/gpu_memory_buffer_video_frame_pool.h"
14 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
15 #include "ui/gfx/geometry/size.h" 16 #include "ui/gfx/geometry/size.h"
16 17
17 namespace base { 18 namespace base {
18 class SingleThreadTaskRunner; 19 class SingleThreadTaskRunner;
Daniele Castagna 2015/10/07 19:57:11 nit: no spaces.
emircan 2015/10/08 01:44:24 Done.
20 class TaskRunner;
21 }
22
23 namespace media {
24 class GpuVideoAcceleratorFactories;
19 } 25 }
20 26
21 namespace content { 27 namespace content {
22 28
23 // MediaStreamVideoRendererSink is a VideoFrameProvider designed for rendering 29 // MediaStreamVideoRendererSink is a VideoFrameProvider designed for rendering
24 // Video MediaStreamTracks [1], MediaStreamVideoRendererSink implements 30 // Video MediaStreamTracks [1], MediaStreamVideoRendererSink implements
25 // MediaStreamVideoSink in order to render video frames provided from a 31 // MediaStreamVideoSink in order to render video frames provided from a
26 // MediaStreamVideoTrack, to which it AddToVideoTrack()s itself when the 32 // MediaStreamVideoTrack, to which it AddToVideoTrack()s itself when the
27 // VideoFrameProvider is Start()ed and RemoveFromVideoTrack()s itself when the 33 // VideoFrameProvider is Start()ed and RemoveFromVideoTrack()s itself when the
28 // latter is Stop()ed. 34 // latter is Stop()ed.
29 // 35 //
30 // [1] http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack 36 // [1] http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
31 // 37 //
32 // TODO(wuchengli): Add unit test. See the link below for reference. 38 // TODO(wuchengli): Add unit test. See the link below for reference.
33 // http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/media/rtc_vi 39 // http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/media/rtc_vi
34 // deo_decoder_unittest.cc?revision=180591&view=markup 40 // deo_decoder_unittest.cc?revision=180591&view=markup
35 class CONTENT_EXPORT MediaStreamVideoRendererSink 41 class CONTENT_EXPORT MediaStreamVideoRendererSink
36 : NON_EXPORTED_BASE(public VideoFrameProvider), 42 : NON_EXPORTED_BASE(public VideoFrameProvider),
37 NON_EXPORTED_BASE(public MediaStreamVideoSink) { 43 NON_EXPORTED_BASE(public MediaStreamVideoSink) {
38 public: 44 public:
39 MediaStreamVideoRendererSink(const blink::WebMediaStreamTrack& video_track, 45 MediaStreamVideoRendererSink(
40 const base::Closure& error_cb, 46 const blink::WebMediaStreamTrack& video_track,
41 const RepaintCB& repaint_cb); 47 const base::Closure& error_cb,
48 const RepaintCB& repaint_cb,
49 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
50 const scoped_refptr<base::TaskRunner>& worker_task_runner,
51 const scoped_refptr<media::GpuVideoAcceleratorFactories>& gpu_factories);
42 52
43 // VideoFrameProvider implementation. Called on the main thread. 53 // VideoFrameProvider implementation. Called on the main thread.
44 void Start() override; 54 void Start() override;
45 void Stop() override; 55 void Stop() override;
46 void Play() override; 56 void Play() override;
47 void Pause() override; 57 void Pause() override;
48 58
49 protected: 59 protected:
50 ~MediaStreamVideoRendererSink() override; 60 ~MediaStreamVideoRendererSink() override;
51 61
52 private: 62 private:
53 friend class MediaStreamVideoRendererSinkTest; 63 friend class MediaStreamVideoRendererSinkTest;
54 enum State { 64 enum State {
55 STARTED, 65 STARTED,
56 PAUSED, 66 PAUSED,
57 STOPPED, 67 STOPPED,
58 }; 68 };
59 69
60 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, 70 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
61 base::TimeTicks estimated_capture_time); 71 base::TimeTicks estimated_capture_time);
72 void MaybeCreateHardwareFrameOnMediaThread(
Daniele Castagna 2015/10/07 19:57:11 Are these two method decls still needed?
emircan 2015/10/08 01:44:24 My bad. Removing them.
73 const scoped_refptr<media::VideoFrame>& frame);
74 void MaybeCreateHardwareFrameCompletedOnMediaThread(
75 const scoped_refptr<media::VideoFrame>& frame);
76 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
62 77
63 // MediaStreamVideoSink implementation. Called on the main thread. 78 // MediaStreamVideoSink implementation. Called on the main thread.
64 void OnReadyStateChanged( 79 void OnReadyStateChanged(
65 blink::WebMediaStreamSource::ReadyState state) override; 80 blink::WebMediaStreamSource::ReadyState state) override;
66 81
67 void RenderSignalingFrame(); 82 void RenderSignalingFrame();
68 83
69 const base::Closure error_cb_; 84 const base::Closure error_cb_;
70 const RepaintCB repaint_cb_; 85 const RepaintCB repaint_cb_;
86
71 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 87 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
72 State state_; 88 State state_;
73 gfx::Size frame_size_; 89 gfx::Size frame_size_;
74 const blink::WebMediaStreamTrack video_track_; 90 const blink::WebMediaStreamTrack video_track_;
91
92 // Pool of GpuMemoryBuffers and resources used to create hardware frames.
93 scoped_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_;
94 const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
95
75 base::WeakPtrFactory<MediaStreamVideoRendererSink> weak_factory_; 96 base::WeakPtrFactory<MediaStreamVideoRendererSink> weak_factory_;
76 97
77 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink); 98 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink);
78 }; 99 };
79 100
80 } // namespace content 101 } // namespace content
81 102
82 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_ 103 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698