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

Side by Side Diff: content/renderer/media/android/media_player_renderer_client.cc

Issue 2230583002: Add MediaPlayerRenderer/MediaPlayerRendererClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added MEDIA_EXPORT. Created 4 years, 4 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/android/media_player_renderer_client.h"
6
7 #include "base/callback_helpers.h"
8
9 namespace content {
10
11 MediaPlayerRendererClient::MediaPlayerRendererClient(
12 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
13 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner,
14 media::MojoRenderer* mojo_renderer,
15 media::ScopedStreamTextureWrapper stream_texture_wrapper,
16 media::VideoRendererSink* sink)
17 : mojo_renderer_(mojo_renderer),
18 stream_texture_wrapper_(std::move(stream_texture_wrapper)),
19 client_(nullptr),
20 sink_(sink),
21 media_task_runner_(std::move(media_task_runner)),
22 compositor_task_runner_(std::move(compositor_task_runner)),
23 weak_factory_(this) {}
24
25 MediaPlayerRendererClient::~MediaPlayerRendererClient() {}
26
27 void MediaPlayerRendererClient::Initialize(
28 media::DemuxerStreamProvider* demuxer_stream_provider,
29 media::RendererClient* client,
30 const media::PipelineStatusCB& init_cb) {
31 DCHECK(media_task_runner_->BelongsToCurrentThread());
32 DCHECK(!init_cb_);
33
34 client_ = client;
35 init_cb_ = init_cb;
36
37 // Initialize the StreamTexture using a 1x1 texture because we do not have
38 // any size information from the MediaPlayer yet.
39 // The size will be automatically updated in OnVideoNaturalSizeChange() once
40 // we parse the media's metadata.
41 // Unretained is safe here because |stream_texture_wrapper_| resets the
42 // Closure it has before destroying itself on |compositor_task_runner_|,
43 // and |this| is garanteed to live until the Closure has been reset.
44 stream_texture_wrapper_->Initialize(
45 base::Bind(&MediaPlayerRendererClient::OnFrameAvailable,
46 base::Unretained(this)),
47 gfx::Size(1, 1), compositor_task_runner_,
48 base::Bind(&MediaPlayerRendererClient::InitializeRemoteRenderer,
49 weak_factory_.GetWeakPtr(), demuxer_stream_provider));
50 }
51
52 void MediaPlayerRendererClient::InitializeRemoteRenderer(
53 media::DemuxerStreamProvider* demuxer_stream_provider) {
54 DCHECK(media_task_runner_->BelongsToCurrentThread());
55 mojo_renderer_->Initialize(
56 demuxer_stream_provider, this,
57 base::Bind(&MediaPlayerRendererClient::CompleteInitialization,
58 weak_factory_.GetWeakPtr()));
59 }
60
61 void MediaPlayerRendererClient::CompleteInitialization(
62 media::PipelineStatus status) {
63 DCHECK(media_task_runner_->BelongsToCurrentThread());
64 DCHECK(!init_cb_.is_null());
65
66 // TODO(tguilbert): Register |stream_texture_wrapper_|'s surface and send it
67 // to MediaPlayerRenderer via |mojo_renderer_|. See crbug.com/627658.
68
69 base::ResetAndReturn(&init_cb_).Run(status);
70 }
71
72 void MediaPlayerRendererClient::SetCdm(
73 media::CdmContext* cdm_context,
74 const media::CdmAttachedCB& cdm_attached_cb) {
75 NOTREACHED();
76 }
77
78 void MediaPlayerRendererClient::Flush(const base::Closure& flush_cb) {
79 mojo_renderer_->Flush(flush_cb);
80 }
81
82 void MediaPlayerRendererClient::StartPlayingFrom(base::TimeDelta time) {
83 mojo_renderer_->StartPlayingFrom(time);
84 }
85
86 void MediaPlayerRendererClient::SetPlaybackRate(double playback_rate) {
87 mojo_renderer_->SetPlaybackRate(playback_rate);
88 }
89
90 void MediaPlayerRendererClient::SetVolume(float volume) {
91 mojo_renderer_->SetVolume(volume);
92 }
93
94 base::TimeDelta MediaPlayerRendererClient::GetMediaTime() {
95 return mojo_renderer_->GetMediaTime();
96 }
97
98 bool MediaPlayerRendererClient::HasAudio() {
99 // We do not know whether or not the media has Audio before starting playback.
100 // Conservatively assume we do.
101 // TODO(tguilbert): Consider using MIME types to determine presence of audio.
102 // Alternatively, consider piping the HasAudio() from the MediaPlayerRenderer
103 // through the mojo::Renderer interface.
104 return true;
105 }
106
107 bool MediaPlayerRendererClient::HasVideo() {
108 // We do not know whether or not the media has Video before starting playback.
109 // Conservatively assume we do.
110 // TODO(tguilbert): Consider using MIME types to determine presence of video.
111 // Alternatively, consider piping the HasVideo() from the MediaPlayerRenderer
112 // through the mojo::Renderer interface.
113 return true;
114 }
115
116 void MediaPlayerRendererClient::OnFrameAvailable() {
117 DCHECK(compositor_task_runner_->BelongsToCurrentThread());
118 // TODO(tguilbert): Force the repaint of the same frame. See crbug.com/636002.
119 sink_->PaintSingleFrame(stream_texture_wrapper_->GetCurrentFrame());
120 }
121
122 void MediaPlayerRendererClient::OnError(media::PipelineStatus status) {
123 client_->OnError(status);
124 }
125
126 void MediaPlayerRendererClient::OnEnded() {
127 client_->OnEnded();
128 }
129
130 void MediaPlayerRendererClient::OnStatisticsUpdate(
131 const media::PipelineStatistics& stats) {
132 client_->OnStatisticsUpdate(stats);
133 }
134
135 void MediaPlayerRendererClient::OnBufferingStateChange(
136 media::BufferingState state) {
137 client_->OnBufferingStateChange(state);
138 }
139
140 void MediaPlayerRendererClient::OnWaitingForDecryptionKey() {
141 client_->OnWaitingForDecryptionKey();
142 }
143
144 void MediaPlayerRendererClient::OnVideoNaturalSizeChange(
145 const gfx::Size& size) {
146 stream_texture_wrapper_->UpdateTextureSize(size);
147 client_->OnVideoNaturalSizeChange(size);
148 }
149
150 void MediaPlayerRendererClient::OnVideoOpacityChange(bool opaque) {
151 client_->OnVideoOpacityChange(opaque);
152 }
153
154 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698