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

Side by Side Diff: media/mojo/services/mojo_renderer_impl.h

Issue 1873513003: Add video-rendering to mojo media pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 8 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 MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 5 #ifndef MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_
6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 6 #define MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "media/base/renderer.h" 11 #include "media/base/renderer.h"
12 #include "media/mojo/interfaces/renderer.mojom.h" 12 #include "media/mojo/interfaces/renderer.mojom.h"
13 #include "mojo/public/cpp/bindings/binding.h" 13 #include "mojo/public/cpp/bindings/binding.h"
14 14
15 namespace base { 15 namespace base {
16 class SingleThreadTaskRunner; 16 class SingleThreadTaskRunner;
17 } 17 }
18 18
19 namespace media { 19 namespace media {
20 20
21 class DemuxerStreamProvider; 21 class DemuxerStreamProvider;
22 class GpuVideoAcceleratorFactories;
23 class VideoOverlayFactory;
24 class VideoRendererSink;
22 25
23 // A media::Renderer that proxies to a interfaces::Renderer. That 26 // A media::Renderer that proxies to a interfaces::Renderer. That
24 // interfaces::Renderer proxies back to the MojoRendererImpl via the 27 // interfaces::Renderer proxies back to the MojoRendererImpl via the
25 // interfaces::RendererClient interface. 28 // interfaces::RendererClient interface.
26 // 29 //
27 // This class can be created on any thread, where the |remote_renderer| is 30 // This class can be created on any thread, where the |remote_renderer| is
28 // connected and passed in the constructor. Then Initialize() will be called on 31 // connected and passed in the constructor. Then Initialize() will be called on
29 // the |task_runner| and starting from that point this class is bound to the 32 // the |task_runner| and starting from that point this class is bound to the
30 // |task_runner|*. That means all Renderer and RendererClient methods will be 33 // |task_runner|*. That means all Renderer and RendererClient methods will be
31 // called/dispached on the |task_runner|. The only exception is GetMediaTime(), 34 // called/dispached on the |task_runner|. The only exception is GetMediaTime(),
32 // which can be called on any thread. 35 // which can be called on any thread.
33 class MojoRendererImpl : public Renderer, public interfaces::RendererClient { 36 class MojoRendererImpl : public Renderer, public interfaces::RendererClient {
34 public: 37 public:
35 MojoRendererImpl( 38 MojoRendererImpl(
36 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 39 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
40 VideoRendererSink* video_renderer_sink,
41 GpuVideoAcceleratorFactories* gpu_factories,
37 interfaces::RendererPtr remote_renderer); 42 interfaces::RendererPtr remote_renderer);
38 ~MojoRendererImpl() override; 43 ~MojoRendererImpl() override;
39 44
40 // Renderer implementation. 45 // Renderer implementation.
41 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, 46 void Initialize(DemuxerStreamProvider* demuxer_stream_provider,
42 const PipelineStatusCB& init_cb, 47 const PipelineStatusCB& init_cb,
43 const StatisticsCB& statistics_cb, 48 const StatisticsCB& statistics_cb,
44 const BufferingStateCB& buffering_state_cb, 49 const BufferingStateCB& buffering_state_cb,
50 const NaturalSizeChangedCB& natural_size_changed_cb,
45 const base::Closure& ended_cb, 51 const base::Closure& ended_cb,
46 const PipelineStatusCB& error_cb, 52 const PipelineStatusCB& error_cb,
47 const base::Closure& waiting_for_decryption_key_cb) override; 53 const base::Closure& waiting_for_decryption_key_cb) override;
48 void SetCdm(CdmContext* cdm_context, 54 void SetCdm(CdmContext* cdm_context,
49 const CdmAttachedCB& cdm_attached_cb) override; 55 const CdmAttachedCB& cdm_attached_cb) override;
50 void Flush(const base::Closure& flush_cb) override; 56 void Flush(const base::Closure& flush_cb) override;
51 void StartPlayingFrom(base::TimeDelta time) override; 57 void StartPlayingFrom(base::TimeDelta time) override;
52 void SetPlaybackRate(double playback_rate) override; 58 void SetPlaybackRate(double playback_rate) override;
53 void SetVolume(float volume) override; 59 void SetVolume(float volume) override;
54 base::TimeDelta GetMediaTime() override; 60 base::TimeDelta GetMediaTime() override;
55 bool HasAudio() override; 61 bool HasAudio() override;
56 bool HasVideo() override; 62 bool HasVideo() override;
57 63
58 private: 64 private:
59 // interfaces::RendererClient implementation, dispatched on the 65 // interfaces::RendererClient implementation, dispatched on the
60 // |task_runner_|. 66 // |task_runner_|.
61 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override; 67 void OnTimeUpdate(int64_t time_usec, int64_t max_time_usec) override;
62 void OnBufferingStateChange(interfaces::BufferingState state) override; 68 void OnBufferingStateChange(interfaces::BufferingState state) override;
69 void OnNaturalSizeChanged(mojo::SizePtr size) override;
63 void OnEnded() override; 70 void OnEnded() override;
64 void OnError() override; 71 void OnError() override;
65 72
66 // Callback for connection error on |remote_renderer_|. 73 // Callback for connection error on |remote_renderer_|.
67 void OnConnectionError(); 74 void OnConnectionError();
68 75
69 // Called when |remote_renderer_| has finished initializing. 76 // Called when |remote_renderer_| has finished initializing.
70 void OnInitialized(bool success); 77 void OnInitialized(bool success);
71 78
72 // |task_runner| on which all methods are invoked, except for GetMediaTime(), 79 // |task_runner| on which all methods are invoked, except for GetMediaTime(),
73 // which can be called on any thread. 80 // which can be called on any thread.
74 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 81 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
82 VideoRendererSink* video_renderer_sink_;
83 GpuVideoAcceleratorFactories* gpu_factories_;
75 84
76 // Provider of audio/video DemuxerStreams. Must be valid throughout the 85 // Provider of audio/video DemuxerStreams. Must be valid throughout the
77 // lifetime of |this|. 86 // lifetime of |this|.
78 DemuxerStreamProvider* demuxer_stream_provider_; 87 DemuxerStreamProvider* demuxer_stream_provider_;
79 88
80 // This class is constructed on one thread and used exclusively on another 89 // This class is constructed on one thread and used exclusively on another
81 // thread. This member is used to safely pass the RendererPtr from one thread 90 // thread. This member is used to safely pass the RendererPtr from one thread
82 // to another. It is set in the constructor and is consumed in Initialize(). 91 // to another. It is set in the constructor and is consumed in Initialize().
83 interfaces::RendererPtrInfo remote_renderer_info_; 92 interfaces::RendererPtrInfo remote_renderer_info_;
84 93
85 // Remote Renderer, bound to |task_runner_| during Initialize(). 94 // Remote Renderer, bound to |task_runner_| during Initialize().
86 interfaces::RendererPtr remote_renderer_; 95 interfaces::RendererPtr remote_renderer_;
87 96
88 // Binding for RendererClient, bound to the |task_runner_|. 97 // Binding for RendererClient, bound to the |task_runner_|.
89 mojo::Binding<RendererClient> binding_; 98 mojo::Binding<RendererClient> binding_;
90 99
91 // Callbacks passed to Initialize() that we forward messages from 100 // Callbacks passed to Initialize() that we forward messages from
92 // |remote_renderer_| through. 101 // |remote_renderer_| through.
93 PipelineStatusCB init_cb_; 102 PipelineStatusCB init_cb_;
94 base::Closure ended_cb_; 103 base::Closure ended_cb_;
95 PipelineStatusCB error_cb_; 104 PipelineStatusCB error_cb_;
96 BufferingStateCB buffering_state_cb_; 105 BufferingStateCB buffering_state_cb_;
106 NaturalSizeChangedCB natural_size_changed_cb_;
97 107
98 // Lock used to serialize access for |time_|. 108 // Lock used to serialize access for |time_|.
99 mutable base::Lock lock_; 109 mutable base::Lock lock_;
100 base::TimeDelta time_; 110 base::TimeDelta time_;
101 111
112 scoped_ptr<VideoOverlayFactory> video_overlay_factory_;
113
102 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl); 114 DISALLOW_COPY_AND_ASSIGN(MojoRendererImpl);
103 }; 115 };
104 116
105 } // namespace media 117 } // namespace media
106 118
107 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_ 119 #endif // MEDIA_MOJO_SERVICES_MOJO_RENDERER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698