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

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

Issue 23648014: cc: Move TextureMailbox::ReleaseCallback to SingleReleaseCallback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: releasecallback: dchecks Created 7 years, 3 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 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // In software mode, the resource provider won't be lost. Soon this callback 264 // In software mode, the resource provider won't be lost. Soon this callback
265 // will be called directly from the resource provider, same as 3d 265 // will be called directly from the resource provider, same as 3d
266 // compositing mode, so this raw unretained resource_provider will always 266 // compositing mode, so this raw unretained resource_provider will always
267 // be valid when the callback is fired. 267 // be valid when the callback is fired.
268 RecycleResourceData recycle_data = { 268 RecycleResourceData recycle_data = {
269 plane_resources[0].resource_id, 269 plane_resources[0].resource_id,
270 plane_resources[0].resource_size, 270 plane_resources[0].resource_size,
271 plane_resources[0].resource_format, 271 plane_resources[0].resource_format,
272 gpu::Mailbox() 272 gpu::Mailbox()
273 }; 273 };
274 TextureMailbox::ReleaseCallback callback_to_free_resource = 274
275 base::Bind(&RecycleResource,
276 AsWeakPtr(),
277 recycle_data);
278 external_resources.software_resources.push_back( 275 external_resources.software_resources.push_back(
279 plane_resources[0].resource_id); 276 plane_resources[0].resource_id);
280 external_resources.software_release_callback = callback_to_free_resource; 277 external_resources.software_release_callback =
278 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data);
279
281 280
282 external_resources.type = VideoFrameExternalResources::SOFTWARE_RESOURCE; 281 external_resources.type = VideoFrameExternalResources::SOFTWARE_RESOURCE;
283 return external_resources; 282 return external_resources;
284 } 283 }
285 284
286 for (size_t i = 0; i < plane_resources.size(); ++i) { 285 for (size_t i = 0; i < plane_resources.size(); ++i) {
287 // Update each plane's resource id with its content. 286 // Update each plane's resource id with its content.
288 DCHECK_EQ(plane_resources[i].resource_format, 287 DCHECK_EQ(plane_resources[i].resource_format,
289 static_cast<unsigned>(kYUVResourceFormat)); 288 static_cast<unsigned>(kYUVResourceFormat));
290 289
291 const uint8_t* input_plane_pixels = video_frame->data(i); 290 const uint8_t* input_plane_pixels = video_frame->data(i);
292 291
293 gfx::Rect image_rect(0, 292 gfx::Rect image_rect(0,
294 0, 293 0,
295 video_frame->stride(i), 294 video_frame->stride(i),
296 plane_resources[i].resource_size.height()); 295 plane_resources[i].resource_size.height());
297 gfx::Rect source_rect(plane_resources[i].resource_size); 296 gfx::Rect source_rect(plane_resources[i].resource_size);
298 resource_provider_->SetPixels(plane_resources[i].resource_id, 297 resource_provider_->SetPixels(plane_resources[i].resource_id,
299 input_plane_pixels, 298 input_plane_pixels,
300 image_rect, 299 image_rect,
301 source_rect, 300 source_rect,
302 gfx::Vector2d()); 301 gfx::Vector2d());
303 302
304 RecycleResourceData recycle_data = { 303 RecycleResourceData recycle_data = {
305 plane_resources[i].resource_id, 304 plane_resources[i].resource_id,
306 plane_resources[i].resource_size, 305 plane_resources[i].resource_size,
307 plane_resources[i].resource_format, 306 plane_resources[i].resource_format,
308 plane_resources[i].mailbox 307 plane_resources[i].mailbox
309 }; 308 };
310 TextureMailbox::ReleaseCallback callback_to_free_resource = 309
311 base::Bind(&RecycleResource,
312 AsWeakPtr(),
313 recycle_data);
314 external_resources.mailboxes.push_back( 310 external_resources.mailboxes.push_back(
315 TextureMailbox(plane_resources[i].mailbox, 311 TextureMailbox(plane_resources[i].mailbox));
316 callback_to_free_resource)); 312 external_resources.release_callbacks.push_back(
313 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data));
317 } 314 }
318 315
319 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; 316 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE;
320 return external_resources; 317 return external_resources;
321 } 318 }
322 319
323 static void ReturnTexture( 320 static void ReturnTexture(
324 scoped_refptr<media::VideoFrame::MailboxHolder> mailbox_holder, 321 scoped_refptr<media::VideoFrame::MailboxHolder> mailbox_holder,
325 unsigned sync_point, 322 unsigned sync_point,
326 bool lost_resource) { 323 bool lost_resource) {
(...skipping 24 matching lines...) Expand all
351 external_resources.type = VideoFrameExternalResources::IO_SURFACE; 348 external_resources.type = VideoFrameExternalResources::IO_SURFACE;
352 break; 349 break;
353 default: 350 default:
354 NOTREACHED(); 351 NOTREACHED();
355 return VideoFrameExternalResources(); 352 return VideoFrameExternalResources();
356 } 353 }
357 354
358 scoped_refptr<media::VideoFrame::MailboxHolder> mailbox_holder = 355 scoped_refptr<media::VideoFrame::MailboxHolder> mailbox_holder =
359 video_frame->texture_mailbox(); 356 video_frame->texture_mailbox();
360 357
361 TextureMailbox::ReleaseCallback callback_to_return_resource =
362 base::Bind(&ReturnTexture, mailbox_holder);
363
364 external_resources.mailboxes.push_back( 358 external_resources.mailboxes.push_back(
365 TextureMailbox(mailbox_holder->mailbox(), 359 TextureMailbox(mailbox_holder->mailbox(),
366 callback_to_return_resource,
367 video_frame->texture_target(), 360 video_frame->texture_target(),
368 mailbox_holder->sync_point())); 361 mailbox_holder->sync_point()));
362 external_resources.release_callbacks.push_back(
363 base::Bind(&ReturnTexture, mailbox_holder));
369 return external_resources; 364 return external_resources;
370 } 365 }
371 366
372 // static 367 // static
373 void VideoResourceUpdater::RecycleResource( 368 void VideoResourceUpdater::RecycleResource(
374 base::WeakPtr<VideoResourceUpdater> updater, 369 base::WeakPtr<VideoResourceUpdater> updater,
375 RecycleResourceData data, 370 RecycleResourceData data,
376 unsigned sync_point, 371 unsigned sync_point,
377 bool lost_resource) { 372 bool lost_resource) {
378 if (!updater.get()) { 373 if (!updater.get()) {
(...skipping 21 matching lines...) Expand all
400 } 395 }
401 396
402 PlaneResource recycled_resource(data.resource_id, 397 PlaneResource recycled_resource(data.resource_id,
403 data.resource_size, 398 data.resource_size,
404 data.resource_format, 399 data.resource_format,
405 data.mailbox); 400 data.mailbox);
406 updater->recycled_resources_.push_back(recycled_resource); 401 updater->recycled_resources_.push_back(recycled_resource);
407 } 402 }
408 403
409 } // namespace cc 404 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698