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

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

Issue 1407703003: Reland: Use GpuMemoryBufferVideoFramePool for WebMediaPlayerMS and MediaStreamVideoRendererSink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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;
19 } 20 class TaskRunner;
21 } // namespace base
22
23 namespace media {
24 class GpuVideoAcceleratorFactories;
25 } // namespace media
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;
58 void SetGpuMemoryBufferVideoForTesting(
59 scoped_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool);
48 60
49 protected: 61 protected:
50 ~MediaStreamVideoRendererSink() override; 62 ~MediaStreamVideoRendererSink() override;
51 63
52 private: 64 private:
53 friend class MediaStreamVideoRendererSinkTest; 65 friend class MediaStreamVideoRendererSinkTest;
54 enum State { 66 enum State {
55 STARTED, 67 STARTED,
56 PAUSED, 68 PAUSED,
57 STOPPED, 69 STOPPED,
58 }; 70 };
59 71
60 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, 72 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
61 base::TimeTicks estimated_capture_time); 73 base::TimeTicks estimated_capture_time);
74 void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
62 75
63 // MediaStreamVideoSink implementation. Called on the main thread. 76 // MediaStreamVideoSink implementation. Called on the main thread.
64 void OnReadyStateChanged( 77 void OnReadyStateChanged(
65 blink::WebMediaStreamSource::ReadyState state) override; 78 blink::WebMediaStreamSource::ReadyState state) override;
66 79
67 void RenderSignalingFrame(); 80 void RenderSignalingFrame();
68 81
69 const base::Closure error_cb_; 82 const base::Closure error_cb_;
70 const RepaintCB repaint_cb_; 83 const RepaintCB repaint_cb_;
84
71 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 85 const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
72 State state_; 86 State state_;
73 gfx::Size frame_size_; 87 gfx::Size frame_size_;
74 const blink::WebMediaStreamTrack video_track_; 88 const blink::WebMediaStreamTrack video_track_;
89
90 // Pool of GpuMemoryBuffers and resources used to create hardware frames.
91 scoped_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_;
92 const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
93
75 base::WeakPtrFactory<MediaStreamVideoRendererSink> weak_factory_; 94 base::WeakPtrFactory<MediaStreamVideoRendererSink> weak_factory_;
76 95
77 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink); 96 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSink);
78 }; 97 };
79 98
80 } // namespace content 99 } // namespace content
81 100
82 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_ 101 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_RENDERER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698