| OLD | NEW |
| 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 delegate_(delegate), | 76 delegate_(delegate), |
| 77 buffered_(1u), | 77 buffered_(1u), |
| 78 main_loop_(base::MessageLoopProxy::current()), | 78 main_loop_(base::MessageLoopProxy::current()), |
| 79 ignore_metadata_duration_change_(false), | 79 ignore_metadata_duration_change_(false), |
| 80 pending_seek_(0), | 80 pending_seek_(0), |
| 81 seeking_(false), | 81 seeking_(false), |
| 82 did_loading_progress_(false), | 82 did_loading_progress_(false), |
| 83 manager_(manager), | 83 manager_(manager), |
| 84 network_state_(WebMediaPlayer::NetworkStateEmpty), | 84 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 85 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 85 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 86 texture_id_(0), |
| 87 texture_mailbox_sync_point_(0), |
| 88 stream_id_(0), |
| 86 is_playing_(false), | 89 is_playing_(false), |
| 87 needs_establish_peer_(true), | 90 needs_establish_peer_(true), |
| 88 stream_texture_proxy_initialized_(false), | 91 stream_texture_proxy_initialized_(false), |
| 89 has_size_info_(false), | 92 has_size_info_(false), |
| 90 has_media_metadata_(false), | 93 has_media_metadata_(false), |
| 91 has_media_info_(false), | 94 has_media_info_(false), |
| 92 stream_texture_factory_(factory), | 95 stream_texture_factory_(factory), |
| 93 needs_external_surface_(false), | 96 needs_external_surface_(false), |
| 94 video_frame_provider_client_(NULL), | 97 video_frame_provider_client_(NULL), |
| 95 #if defined(GOOGLE_TV) | 98 #if defined(GOOGLE_TV) |
| (...skipping 25 matching lines...) Expand all Loading... |
| 121 } | 124 } |
| 122 | 125 |
| 123 // Defer stream texture creation until we are sure it's necessary. | 126 // Defer stream texture creation until we are sure it's necessary. |
| 124 stream_id_ = 0; | 127 stream_id_ = 0; |
| 125 needs_establish_peer_ = false; | 128 needs_establish_peer_ = false; |
| 126 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); | 129 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); |
| 127 #endif | 130 #endif |
| 128 if (stream_texture_factory_) { | 131 if (stream_texture_factory_) { |
| 129 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); | 132 stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy()); |
| 130 if (needs_establish_peer_) { | 133 if (needs_establish_peer_) { |
| 131 stream_id_ = stream_texture_factory_->CreateStreamTexture(&texture_id_); | 134 stream_id_ = stream_texture_factory_->CreateStreamTexture( |
| 135 kGLTextureExternalOES, |
| 136 &texture_id_, |
| 137 &texture_mailbox_, |
| 138 &texture_mailbox_sync_point_); |
| 132 ReallocateVideoFrame(); | 139 ReallocateVideoFrame(); |
| 133 } | 140 } |
| 134 } | 141 } |
| 135 | 142 |
| 136 if (WebKit::WebRuntimeFeatures::isLegacyEncryptedMediaEnabled()) { | 143 if (WebKit::WebRuntimeFeatures::isLegacyEncryptedMediaEnabled()) { |
| 137 // |decryptor_| is owned, so Unretained() is safe here. | 144 // |decryptor_| is owned, so Unretained() is safe here. |
| 138 decryptor_.reset(new ProxyDecryptor( | 145 decryptor_.reset(new ProxyDecryptor( |
| 139 #if defined(ENABLE_PEPPER_CDMS) | 146 #if defined(ENABLE_PEPPER_CDMS) |
| 140 client, | 147 client, |
| 141 frame, | 148 frame, |
| (...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 if (!natural_size_.isEmpty()) { | 776 if (!natural_size_.isEmpty()) { |
| 770 current_frame_ = VideoFrame::CreateHoleFrame(natural_size_); | 777 current_frame_ = VideoFrame::CreateHoleFrame(natural_size_); |
| 771 // Force the client to grab the hole frame. | 778 // Force the client to grab the hole frame. |
| 772 client_->repaint(); | 779 client_->repaint(); |
| 773 } | 780 } |
| 774 #else | 781 #else |
| 775 NOTIMPLEMENTED() << "Hole punching not supported outside of Google TV"; | 782 NOTIMPLEMENTED() << "Hole punching not supported outside of Google TV"; |
| 776 #endif | 783 #endif |
| 777 } else if (texture_id_) { | 784 } else if (texture_id_) { |
| 778 current_frame_ = VideoFrame::WrapNativeTexture( | 785 current_frame_ = VideoFrame::WrapNativeTexture( |
| 779 texture_id_, kGLTextureExternalOES, natural_size_, | 786 new VideoFrame::MailboxHolder( |
| 787 texture_mailbox_, |
| 788 texture_mailbox_sync_point_, |
| 789 VideoFrame::MailboxHolder::TextureNoLongerNeededCallback()), |
| 790 kGLTextureExternalOES, natural_size_, |
| 780 gfx::Rect(natural_size_), natural_size_, base::TimeDelta(), | 791 gfx::Rect(natural_size_), natural_size_, base::TimeDelta(), |
| 781 VideoFrame::ReadPixelsCB(), | 792 VideoFrame::ReadPixelsCB(), |
| 782 base::Closure()); | 793 base::Closure()); |
| 783 } | 794 } |
| 784 } | 795 } |
| 785 | 796 |
| 786 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( | 797 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( |
| 787 cc::VideoFrameProvider::Client* client) { | 798 cc::VideoFrameProvider::Client* client) { |
| 788 // This is called from both the main renderer thread and the compositor | 799 // This is called from both the main renderer thread and the compositor |
| 789 // thread (when the main thread is blocked). | 800 // thread (when the main thread is blocked). |
| (...skipping 21 matching lines...) Expand all Loading... |
| 811 const scoped_refptr<media::VideoFrame>& frame) { | 822 const scoped_refptr<media::VideoFrame>& frame) { |
| 812 } | 823 } |
| 813 | 824 |
| 814 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() { | 825 void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() { |
| 815 if (media_source_delegate_ && stream_texture_factory_) { | 826 if (media_source_delegate_ && stream_texture_factory_) { |
| 816 // MediaCodec will release the old surface when it goes away, we need to | 827 // MediaCodec will release the old surface when it goes away, we need to |
| 817 // recreate a new one each time this is called. | 828 // recreate a new one each time this is called. |
| 818 stream_texture_factory_->DestroyStreamTexture(texture_id_); | 829 stream_texture_factory_->DestroyStreamTexture(texture_id_); |
| 819 stream_id_ = 0; | 830 stream_id_ = 0; |
| 820 texture_id_ = 0; | 831 texture_id_ = 0; |
| 821 stream_id_ = stream_texture_factory_->CreateStreamTexture(&texture_id_); | 832 texture_mailbox_ = gpu::Mailbox(); |
| 833 texture_mailbox_sync_point_ = 0; |
| 834 stream_id_ = stream_texture_factory_->CreateStreamTexture( |
| 835 kGLTextureExternalOES, |
| 836 &texture_id_, |
| 837 &texture_mailbox_, |
| 838 &texture_mailbox_sync_point_); |
| 822 ReallocateVideoFrame(); | 839 ReallocateVideoFrame(); |
| 823 stream_texture_proxy_initialized_ = false; | 840 stream_texture_proxy_initialized_ = false; |
| 824 } | 841 } |
| 825 if (stream_texture_factory_.get() && stream_id_) | 842 if (stream_texture_factory_.get() && stream_id_) |
| 826 stream_texture_factory_->EstablishPeer(stream_id_, player_id_); | 843 stream_texture_factory_->EstablishPeer(stream_id_, player_id_); |
| 827 needs_establish_peer_ = false; | 844 needs_establish_peer_ = false; |
| 828 } | 845 } |
| 829 | 846 |
| 830 void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { | 847 void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { |
| 831 needs_establish_peer_ = needs_establish_peer; | 848 needs_establish_peer_ = needs_establish_peer; |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 | 1139 |
| 1123 void WebMediaPlayerAndroid::exitFullscreen() { | 1140 void WebMediaPlayerAndroid::exitFullscreen() { |
| 1124 proxy_->ExitFullscreen(player_id_); | 1141 proxy_->ExitFullscreen(player_id_); |
| 1125 } | 1142 } |
| 1126 | 1143 |
| 1127 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1144 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| 1128 return manager_->CanEnterFullscreen(frame_); | 1145 return manager_->CanEnterFullscreen(frame_); |
| 1129 } | 1146 } |
| 1130 | 1147 |
| 1131 } // namespace content | 1148 } // namespace content |
| OLD | NEW |