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

Side by Side Diff: cc/resources/video_resource_updater.cc

Issue 105743004: Add gpu::MailboxHolder to hold state for a gpu::Mailbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: c301e01d Rebase. Created 6 years, 11 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 | Annotate | Revision Log
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 "cc/resources/video_resource_updater.h" 5 #include "cc/resources/video_resource_updater.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "cc/output/gl_renderer.h" 8 #include "cc/output/gl_renderer.h"
9 #include "cc/resources/resource_provider.h" 9 #include "cc/resources/resource_provider.h"
10 #include "gpu/GLES2/gl2extchromium.h" 10 #include "gpu/GLES2/gl2extchromium.h"
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 gfx::Vector2d()); 306 gfx::Vector2d());
307 307
308 RecycleResourceData recycle_data = { 308 RecycleResourceData recycle_data = {
309 plane_resources[i].resource_id, 309 plane_resources[i].resource_id,
310 plane_resources[i].resource_size, 310 plane_resources[i].resource_size,
311 plane_resources[i].resource_format, 311 plane_resources[i].resource_format,
312 plane_resources[i].mailbox 312 plane_resources[i].mailbox
313 }; 313 };
314 314
315 external_resources.mailboxes.push_back( 315 external_resources.mailboxes.push_back(
316 TextureMailbox(plane_resources[i].mailbox)); 316 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0));
317 external_resources.release_callbacks.push_back( 317 external_resources.release_callbacks.push_back(
318 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); 318 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data));
319 } 319 }
320 320
321 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; 321 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE;
322 return external_resources; 322 return external_resources;
323 } 323 }
324 324
325 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame, 325 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame,
326 unsigned sync_point, 326 uint32 sync_point,
327 bool lost_resource) { 327 bool lost_resource) {
328 frame->texture_mailbox()->Resync(sync_point); 328 frame->mailbox_holder()->sync_point = sync_point;
329 } 329 }
330 330
331 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( 331 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
332 const scoped_refptr<media::VideoFrame>& video_frame) { 332 const scoped_refptr<media::VideoFrame>& video_frame) {
333 media::VideoFrame::Format frame_format = video_frame->format(); 333 media::VideoFrame::Format frame_format = video_frame->format();
334 334
335 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); 335 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE);
336 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) 336 if (frame_format != media::VideoFrame::NATIVE_TEXTURE)
337 return VideoFrameExternalResources(); 337 return VideoFrameExternalResources();
338 338
339 if (!context_provider_) 339 if (!context_provider_)
340 return VideoFrameExternalResources(); 340 return VideoFrameExternalResources();
341 341
342 gpu::MailboxHolder* mailbox_holder = video_frame->mailbox_holder();
342 VideoFrameExternalResources external_resources; 343 VideoFrameExternalResources external_resources;
343 switch (video_frame->texture_target()) { 344 switch (mailbox_holder->texture_target) {
344 case GL_TEXTURE_2D: 345 case GL_TEXTURE_2D:
345 external_resources.type = VideoFrameExternalResources::RGB_RESOURCE; 346 external_resources.type = VideoFrameExternalResources::RGB_RESOURCE;
346 break; 347 break;
347 case GL_TEXTURE_EXTERNAL_OES: 348 case GL_TEXTURE_EXTERNAL_OES:
348 external_resources.type = 349 external_resources.type =
349 VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; 350 VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE;
350 break; 351 break;
351 case GL_TEXTURE_RECTANGLE_ARB: 352 case GL_TEXTURE_RECTANGLE_ARB:
352 external_resources.type = VideoFrameExternalResources::IO_SURFACE; 353 external_resources.type = VideoFrameExternalResources::IO_SURFACE;
353 break; 354 break;
354 default: 355 default:
355 NOTREACHED(); 356 NOTREACHED();
356 return VideoFrameExternalResources(); 357 return VideoFrameExternalResources();
357 } 358 }
358 359
359 media::VideoFrame::MailboxHolder* mailbox_holder =
360 video_frame->texture_mailbox();
361
362 external_resources.mailboxes.push_back( 360 external_resources.mailboxes.push_back(
363 TextureMailbox(mailbox_holder->mailbox(), 361 TextureMailbox(mailbox_holder->mailbox,
364 video_frame->texture_target(), 362 mailbox_holder->texture_target,
365 mailbox_holder->sync_point())); 363 mailbox_holder->sync_point));
366 external_resources.release_callbacks.push_back( 364 external_resources.release_callbacks.push_back(
367 base::Bind(&ReturnTexture, video_frame)); 365 base::Bind(&ReturnTexture, video_frame));
368 return external_resources; 366 return external_resources;
369 } 367 }
370 368
371 // static 369 // static
372 void VideoResourceUpdater::RecycleResource( 370 void VideoResourceUpdater::RecycleResource(
373 base::WeakPtr<VideoResourceUpdater> updater, 371 base::WeakPtr<VideoResourceUpdater> updater,
374 RecycleResourceData data, 372 RecycleResourceData data,
375 unsigned sync_point, 373 uint32 sync_point,
376 bool lost_resource) { 374 bool lost_resource) {
377 if (!updater.get()) { 375 if (!updater.get()) {
378 // Resource was already deleted. 376 // Resource was already deleted.
379 return; 377 return;
380 } 378 }
381 379
382 ContextProvider* context_provider = updater->context_provider_; 380 ContextProvider* context_provider = updater->context_provider_;
383 if (context_provider && sync_point) { 381 if (context_provider && sync_point) {
384 GLC(context_provider->ContextGL(), 382 GLC(context_provider->ContextGL(),
385 context_provider->ContextGL()->WaitSyncPointCHROMIUM(sync_point)); 383 context_provider->ContextGL()->WaitSyncPointCHROMIUM(sync_point));
(...skipping 13 matching lines...) Expand all
399 } 397 }
400 398
401 PlaneResource recycled_resource(data.resource_id, 399 PlaneResource recycled_resource(data.resource_id,
402 data.resource_size, 400 data.resource_size,
403 data.resource_format, 401 data.resource_format,
404 data.mailbox); 402 data.mailbox);
405 updater->recycled_resources_.push_back(recycled_resource); 403 updater->recycled_resources_.push_back(recycled_resource);
406 } 404 }
407 405
408 } // namespace cc 406 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698