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

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

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Folded sync_point into sync_tokens Created 5 years, 1 month 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/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 using media::VideoFrame; 80 using media::VideoFrame;
81 81
82 namespace { 82 namespace {
83 // Prefix for histograms related to Encrypted Media Extensions. 83 // Prefix for histograms related to Encrypted Media Extensions.
84 const char* kMediaEme = "Media.EME."; 84 const char* kMediaEme = "Media.EME.";
85 85
86 // File-static function is to allow it to run even after WMPA is deleted. 86 // File-static function is to allow it to run even after WMPA is deleted.
87 void OnReleaseTexture( 87 void OnReleaseTexture(
88 const scoped_refptr<content::StreamTextureFactory>& factories, 88 const scoped_refptr<content::StreamTextureFactory>& factories,
89 uint32 texture_id, 89 uint32 texture_id,
90 uint32 release_sync_point) { 90 const gpu::SyncToken& sync_token) {
91 GLES2Interface* gl = factories->ContextGL(); 91 GLES2Interface* gl = factories->ContextGL();
92 gl->WaitSyncPointCHROMIUM(release_sync_point); 92 gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
93 gl->DeleteTextures(1, &texture_id); 93 gl->DeleteTextures(1, &texture_id);
94 // Flush to ensure that the stream texture gets deleted in a timely fashion. 94 // Flush to ensure that the stream texture gets deleted in a timely fashion.
95 gl->ShallowFlushCHROMIUM(); 95 gl->ShallowFlushCHROMIUM();
96 } 96 }
97 97
98 bool IsSkBitmapProperlySizedTexture(const SkBitmap* bitmap, 98 bool IsSkBitmapProperlySizedTexture(const SkBitmap* bitmap,
99 const gfx::Size& size) { 99 const gfx::Size& size) {
100 return bitmap->getTexture() && bitmap->width() == size.width() && 100 return bitmap->getTexture() && bitmap->width() == size.width() &&
101 bitmap->height() == size.height(); 101 bitmap->height() == size.height();
102 } 102 }
(...skipping 20 matching lines...) Expand all
123 123
124 SkImageInfo info = SkImageInfo::MakeN32Premul(desc.fWidth, desc.fHeight); 124 SkImageInfo info = SkImageInfo::MakeN32Premul(desc.fWidth, desc.fHeight);
125 SkGrPixelRef* pixel_ref = new SkGrPixelRef(info, texture.get()); 125 SkGrPixelRef* pixel_ref = new SkGrPixelRef(info, texture.get());
126 if (!pixel_ref) 126 if (!pixel_ref)
127 return false; 127 return false;
128 bitmap->setInfo(info); 128 bitmap->setInfo(info);
129 bitmap->setPixelRef(pixel_ref)->unref(); 129 bitmap->setPixelRef(pixel_ref)->unref();
130 return true; 130 return true;
131 } 131 }
132 132
133 class SyncPointClientImpl : public media::VideoFrame::SyncPointClient { 133 class SyncTokenClientImpl : public media::VideoFrame::SyncTokenClient {
134 public: 134 public:
135 explicit SyncPointClientImpl( 135 explicit SyncTokenClientImpl(
136 blink::WebGraphicsContext3D* web_graphics_context) 136 blink::WebGraphicsContext3D* web_graphics_context)
137 : web_graphics_context_(web_graphics_context) {} 137 : web_graphics_context_(web_graphics_context) {}
138 ~SyncPointClientImpl() override {} 138 ~SyncTokenClientImpl() override {}
139 uint32 InsertSyncPoint() override { 139 uint32 InsertSyncPoint() override {
140 return web_graphics_context_->insertSyncPoint(); 140 return web_graphics_context_->insertSyncPoint();
141 } 141 }
142 void WaitSyncPoint(uint32 sync_point) override { 142 void WaitSyncToken(const gpu::SyncToken& sync_token) override {
143 web_graphics_context_->waitSyncPoint(sync_point); 143 web_graphics_context_->waitSyncToken(sync_token.GetConstData());
144 } 144 }
145 145
146 private: 146 private:
147 blink::WebGraphicsContext3D* web_graphics_context_; 147 blink::WebGraphicsContext3D* web_graphics_context_;
148 }; 148 };
149 149
150 } // namespace 150 } // namespace
151 151
152 namespace content { 152 namespace content {
153 153
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 } 673 }
674 674
675 if (!video_frame.get() || !video_frame->HasTextures()) 675 if (!video_frame.get() || !video_frame->HasTextures())
676 return false; 676 return false;
677 DCHECK_EQ(1u, media::VideoFrame::NumPlanes(video_frame->format())); 677 DCHECK_EQ(1u, media::VideoFrame::NumPlanes(video_frame->format()));
678 const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0); 678 const gpu::MailboxHolder& mailbox_holder = video_frame->mailbox_holder(0);
679 DCHECK((!is_remote_ && 679 DCHECK((!is_remote_ &&
680 mailbox_holder.texture_target == GL_TEXTURE_EXTERNAL_OES) || 680 mailbox_holder.texture_target == GL_TEXTURE_EXTERNAL_OES) ||
681 (is_remote_ && mailbox_holder.texture_target == GL_TEXTURE_2D)); 681 (is_remote_ && mailbox_holder.texture_target == GL_TEXTURE_2D));
682 682
683 web_graphics_context->waitSyncPoint(mailbox_holder.sync_point); 683 web_graphics_context->waitSyncToken(mailbox_holder.sync_token);
684 684
685 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise 685 // Ensure the target of texture is set before copyTextureCHROMIUM, otherwise
686 // an invalid texture target may be used for copy texture. 686 // an invalid texture target may be used for copy texture.
687 uint32 src_texture = 687 uint32 src_texture =
688 web_graphics_context->createAndConsumeTextureCHROMIUM( 688 web_graphics_context->createAndConsumeTextureCHROMIUM(
689 mailbox_holder.texture_target, mailbox_holder.mailbox.name); 689 mailbox_holder.texture_target, mailbox_holder.mailbox.name);
690 690
691 // Application itself needs to take care of setting the right flip_y 691 // Application itself needs to take care of setting the right flip_y
692 // value down to get the expected result. 692 // value down to get the expected result.
693 // flip_y==true means to reverse the video orientation while 693 // flip_y==true means to reverse the video orientation while
694 // flip_y==false means to keep the intrinsic orientation. 694 // flip_y==false means to keep the intrinsic orientation.
695 web_graphics_context->copyTextureCHROMIUM( 695 web_graphics_context->copyTextureCHROMIUM(
696 GL_TEXTURE_2D, src_texture, texture, internal_format, type, 696 GL_TEXTURE_2D, src_texture, texture, internal_format, type,
697 flip_y, premultiply_alpha, false); 697 flip_y, premultiply_alpha, false);
698 698
699 web_graphics_context->deleteTexture(src_texture); 699 web_graphics_context->deleteTexture(src_texture);
700 web_graphics_context->flush(); 700 web_graphics_context->flush();
701 701
702 SyncPointClientImpl client(web_graphics_context); 702 SyncTokenClientImpl client(web_graphics_context);
703 video_frame->UpdateReleaseSyncPoint(&client); 703 video_frame->UpdateReleaseSyncToken(&client);
704 return true; 704 return true;
705 } 705 }
706 706
707 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { 707 bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const {
708 DCHECK(main_thread_checker_.CalledOnValidThread()); 708 DCHECK(main_thread_checker_.CalledOnValidThread());
709 if (player_type_ != MEDIA_PLAYER_TYPE_URL) 709 if (player_type_ != MEDIA_PLAYER_TYPE_URL)
710 return true; 710 return true;
711 711
712 if (!info_loader_ || !info_loader_->HasSingleOrigin()) 712 if (!info_loader_ || !info_loader_->HasSingleOrigin())
713 return false; 713 return false;
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 0 /* border */, 1217 0 /* border */,
1218 GL_RGBA /* format */, 1218 GL_RGBA /* format */,
1219 GL_UNSIGNED_BYTE /* type */, 1219 GL_UNSIGNED_BYTE /* type */,
1220 bitmap.getPixels()); 1220 bitmap.getPixels());
1221 } 1221 }
1222 1222
1223 gpu::Mailbox texture_mailbox; 1223 gpu::Mailbox texture_mailbox;
1224 gl->GenMailboxCHROMIUM(texture_mailbox.name); 1224 gl->GenMailboxCHROMIUM(texture_mailbox.name);
1225 gl->ProduceTextureCHROMIUM(texture_target, texture_mailbox.name); 1225 gl->ProduceTextureCHROMIUM(texture_target, texture_mailbox.name);
1226 gl->Flush(); 1226 gl->Flush();
1227 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); 1227 gpu::SyncToken texture_mailbox_sync_token(gl->InsertSyncPointCHROMIUM());
1228 1228
1229 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( 1229 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture(
1230 media::PIXEL_FORMAT_ARGB, 1230 media::PIXEL_FORMAT_ARGB,
1231 gpu::MailboxHolder(texture_mailbox, texture_target, 1231 gpu::MailboxHolder(texture_mailbox, texture_mailbox_sync_token,
1232 texture_mailbox_sync_point), 1232 texture_target),
1233 media::BindToCurrentLoop(base::Bind(&OnReleaseTexture, 1233 media::BindToCurrentLoop(base::Bind(&OnReleaseTexture,
1234 stream_texture_factory_, 1234 stream_texture_factory_,
1235 remote_playback_texture_id)), 1235 remote_playback_texture_id)),
1236 canvas_size /* coded_size */, gfx::Rect(canvas_size) /* visible_rect */, 1236 canvas_size /* coded_size */, gfx::Rect(canvas_size) /* visible_rect */,
1237 canvas_size /* natural_size */, base::TimeDelta() /* timestamp */); 1237 canvas_size /* natural_size */, base::TimeDelta() /* timestamp */);
1238 SetCurrentFrameInternal(new_frame); 1238 SetCurrentFrameInternal(new_frame);
1239 } 1239 }
1240 1240
1241 void WebMediaPlayerAndroid::ReallocateVideoFrame() { 1241 void WebMediaPlayerAndroid::ReallocateVideoFrame() {
1242 DCHECK(main_thread_checker_.CalledOnValidThread()); 1242 DCHECK(main_thread_checker_.CalledOnValidThread());
(...skipping 12 matching lines...) Expand all
1255 } 1255 }
1256 #else 1256 #else
1257 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag"; 1257 NOTIMPLEMENTED() << "Hole punching not supported without VIDEO_HOLE flag";
1258 #endif // defined(VIDEO_HOLE) 1258 #endif // defined(VIDEO_HOLE)
1259 } else if (!is_remote_ && texture_id_) { 1259 } else if (!is_remote_ && texture_id_) {
1260 GLES2Interface* gl = stream_texture_factory_->ContextGL(); 1260 GLES2Interface* gl = stream_texture_factory_->ContextGL();
1261 GLuint texture_target = kGLTextureExternalOES; 1261 GLuint texture_target = kGLTextureExternalOES;
1262 GLuint texture_id_ref = gl->CreateAndConsumeTextureCHROMIUM( 1262 GLuint texture_id_ref = gl->CreateAndConsumeTextureCHROMIUM(
1263 texture_target, texture_mailbox_.name); 1263 texture_target, texture_mailbox_.name);
1264 gl->Flush(); 1264 gl->Flush();
1265 GLuint texture_mailbox_sync_point = gl->InsertSyncPointCHROMIUM(); 1265 gpu::SyncToken texture_mailbox_sync_token(gl->InsertSyncPointCHROMIUM());
1266 1266
1267 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture( 1267 scoped_refptr<VideoFrame> new_frame = VideoFrame::WrapNativeTexture(
1268 media::PIXEL_FORMAT_ARGB, 1268 media::PIXEL_FORMAT_ARGB,
1269 gpu::MailboxHolder(texture_mailbox_, texture_target, 1269 gpu::MailboxHolder(texture_mailbox_, texture_mailbox_sync_token,
1270 texture_mailbox_sync_point), 1270 texture_target),
1271 media::BindToCurrentLoop(base::Bind( 1271 media::BindToCurrentLoop(base::Bind(
1272 &OnReleaseTexture, stream_texture_factory_, texture_id_ref)), 1272 &OnReleaseTexture, stream_texture_factory_, texture_id_ref)),
1273 natural_size_, gfx::Rect(natural_size_), natural_size_, 1273 natural_size_, gfx::Rect(natural_size_), natural_size_,
1274 base::TimeDelta()); 1274 base::TimeDelta());
1275 SetCurrentFrameInternal(new_frame); 1275 SetCurrentFrameInternal(new_frame);
1276 } 1276 }
1277 } 1277 }
1278 1278
1279 void WebMediaPlayerAndroid::SetVideoFrameProviderClient( 1279 void WebMediaPlayerAndroid::SetVideoFrameProviderClient(
1280 cc::VideoFrameProvider::Client* client) { 1280 cc::VideoFrameProvider::Client* client) {
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 1915
1916 bool is_hls = IsHLSStream(); 1916 bool is_hls = IsHLSStream();
1917 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls); 1917 UMA_HISTOGRAM_BOOLEAN("Media.Android.IsHttpLiveStreamingMedia", is_hls);
1918 if (is_hls) { 1918 if (is_hls) {
1919 media::RecordOriginOfHLSPlayback( 1919 media::RecordOriginOfHLSPlayback(
1920 GURL(frame_->document().securityOrigin().toString())); 1920 GURL(frame_->document().securityOrigin().toString()));
1921 } 1921 }
1922 } 1922 }
1923 1923
1924 } // namespace content 1924 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698