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

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

Issue 175223003: HW Video: Make media::VideoFrame handle the sync point of the compositor as well as webgl (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Make GpuVideoAcceleratorFactories::ReadPixels() receive mailbox, instead of texture Created 6 years, 9 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "content/renderer/media/android/webmediaplayer_android.h" 5 #include "content/renderer/media/android/webmediaplayer_android.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 // Prefix for histograms related to Encrypted Media Extensions. 62 // Prefix for histograms related to Encrypted Media Extensions.
63 const char* kMediaEme = "Media.EME."; 63 const char* kMediaEme = "Media.EME.";
64 } // namespace 64 } // namespace
65 65
66 namespace content { 66 namespace content {
67 67
68 // static 68 // static
69 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture( 69 void WebMediaPlayerAndroid::OnReleaseRemotePlaybackTexture(
70 const scoped_refptr<base::MessageLoopProxy>& main_loop, 70 const scoped_refptr<base::MessageLoopProxy>& main_loop,
71 const base::WeakPtr<WebMediaPlayerAndroid>& player, 71 const base::WeakPtr<WebMediaPlayerAndroid>& player,
72 scoped_ptr<gpu::MailboxHolder> mailbox_holder) { 72 scoped_ptr<gpu::MailboxHolder> mailbox_holder,
73 const std::vector<uint32>& release_sync_points) {
73 main_loop->PostTask( 74 main_loop->PostTask(
74 FROM_HERE, 75 FROM_HERE,
75 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture, 76 base::Bind(&WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture,
76 player, 77 player,
77 mailbox_holder->sync_point)); 78 release_sync_points));
78 } 79 }
79 80
80 WebMediaPlayerAndroid::WebMediaPlayerAndroid( 81 WebMediaPlayerAndroid::WebMediaPlayerAndroid(
81 blink::WebFrame* frame, 82 blink::WebFrame* frame,
82 blink::WebMediaPlayerClient* client, 83 blink::WebMediaPlayerClient* client,
83 base::WeakPtr<WebMediaPlayerDelegate> delegate, 84 base::WeakPtr<WebMediaPlayerDelegate> delegate,
84 RendererMediaPlayerManager* manager, 85 RendererMediaPlayerManager* manager,
85 StreamTextureFactory* factory, 86 StreamTextureFactory* factory,
86 const scoped_refptr<base::MessageLoopProxy>& media_loop, 87 const scoped_refptr<base::MessageLoopProxy>& media_loop,
87 media::MediaLog* media_log) 88 media::MediaLog* media_log)
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 decryptor_ready_cb.Run(proxy_decryptor_->GetDecryptor()); 1415 decryptor_ready_cb.Run(proxy_decryptor_->GetDecryptor());
1415 return; 1416 return;
1416 } 1417 }
1417 1418
1418 // TODO(xhwang): Also notify |web_cdm_| when we implement 1419 // TODO(xhwang): Also notify |web_cdm_| when we implement
1419 // setContentDecryptionModule(). See: http://crbug.com/224786 1420 // setContentDecryptionModule(). See: http://crbug.com/224786
1420 1421
1421 decryptor_ready_cb_ = decryptor_ready_cb; 1422 decryptor_ready_cb_ = decryptor_ready_cb;
1422 } 1423 }
1423 1424
1424 void WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture(uint32 sync_point) { 1425 void WebMediaPlayerAndroid::DoReleaseRemotePlaybackTexture(
1426 const std::vector<uint32>& release_sync_points) {
1425 DCHECK(main_thread_checker_.CalledOnValidThread()); 1427 DCHECK(main_thread_checker_.CalledOnValidThread());
1426 DCHECK(remote_playback_texture_id_); 1428 DCHECK(remote_playback_texture_id_);
1427 1429
1428 GLES2Interface* gl = stream_texture_factory_->ContextGL(); 1430 GLES2Interface* gl = stream_texture_factory_->ContextGL();
1429 1431
1430 if (sync_point) 1432 for (size_t i = 0; i < release_sync_points.size(); i++)
1431 gl->WaitSyncPointCHROMIUM(sync_point); 1433 gl->WaitSyncPointCHROMIUM(release_sync_points[i]);
1432 gl->DeleteTextures(1, &remote_playback_texture_id_); 1434 gl->DeleteTextures(1, &remote_playback_texture_id_);
1433 remote_playback_texture_id_ = 0; 1435 remote_playback_texture_id_ = 0;
1434 } 1436 }
1435 1437
1436 void WebMediaPlayerAndroid::enterFullscreen() { 1438 void WebMediaPlayerAndroid::enterFullscreen() {
1437 if (manager_->CanEnterFullscreen(frame_)) { 1439 if (manager_->CanEnterFullscreen(frame_)) {
1438 manager_->EnterFullscreen(player_id_, frame_); 1440 manager_->EnterFullscreen(player_id_, frame_);
1439 SetNeedsEstablishPeer(false); 1441 SetNeedsEstablishPeer(false);
1440 } 1442 }
1441 } 1443 }
1442 1444
1443 void WebMediaPlayerAndroid::exitFullscreen() { 1445 void WebMediaPlayerAndroid::exitFullscreen() {
1444 manager_->ExitFullscreen(player_id_); 1446 manager_->ExitFullscreen(player_id_);
1445 } 1447 }
1446 1448
1447 bool WebMediaPlayerAndroid::canEnterFullscreen() const { 1449 bool WebMediaPlayerAndroid::canEnterFullscreen() const {
1448 return manager_->CanEnterFullscreen(frame_); 1450 return manager_->CanEnterFullscreen(frame_);
1449 } 1451 }
1450 1452
1451 } // namespace content 1453 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698