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 "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 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 gfx::Vector2d()); | 299 gfx::Vector2d()); |
300 | 300 |
301 RecycleResourceData recycle_data = { | 301 RecycleResourceData recycle_data = { |
302 plane_resources[i].resource_id, | 302 plane_resources[i].resource_id, |
303 plane_resources[i].resource_size, | 303 plane_resources[i].resource_size, |
304 plane_resources[i].resource_format, | 304 plane_resources[i].resource_format, |
305 plane_resources[i].mailbox | 305 plane_resources[i].mailbox |
306 }; | 306 }; |
307 | 307 |
308 external_resources.mailboxes.push_back( | 308 external_resources.mailboxes.push_back( |
309 TextureMailbox(plane_resources[i].mailbox)); | 309 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0)); |
310 external_resources.release_callbacks.push_back( | 310 external_resources.release_callbacks.push_back( |
311 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); | 311 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); |
312 } | 312 } |
313 | 313 |
314 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; | 314 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; |
315 return external_resources; | 315 return external_resources; |
316 } | 316 } |
317 | 317 |
318 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame, | 318 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame, |
319 unsigned sync_point, | 319 uint32 sync_point, |
320 bool lost_resource) { | 320 bool lost_resource) { |
321 frame->texture_mailbox()->Resync(sync_point); | 321 frame->mailbox_holder()->sync_point = sync_point; |
322 } | 322 } |
323 | 323 |
324 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( | 324 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( |
325 const scoped_refptr<media::VideoFrame>& video_frame) { | 325 const scoped_refptr<media::VideoFrame>& video_frame) { |
326 media::VideoFrame::Format frame_format = video_frame->format(); | 326 media::VideoFrame::Format frame_format = video_frame->format(); |
327 | 327 |
328 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); | 328 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); |
329 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) | 329 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) |
330 return VideoFrameExternalResources(); | 330 return VideoFrameExternalResources(); |
331 | 331 |
332 if (!context_provider_) | 332 if (!context_provider_) |
333 return VideoFrameExternalResources(); | 333 return VideoFrameExternalResources(); |
334 | 334 |
| 335 gpu::MailboxHolder* mailbox_holder = video_frame->mailbox_holder(); |
335 VideoFrameExternalResources external_resources; | 336 VideoFrameExternalResources external_resources; |
336 switch (video_frame->texture_target()) { | 337 switch (mailbox_holder->texture_target) { |
337 case GL_TEXTURE_2D: | 338 case GL_TEXTURE_2D: |
338 external_resources.type = VideoFrameExternalResources::RGB_RESOURCE; | 339 external_resources.type = VideoFrameExternalResources::RGB_RESOURCE; |
339 break; | 340 break; |
340 case GL_TEXTURE_EXTERNAL_OES: | 341 case GL_TEXTURE_EXTERNAL_OES: |
341 external_resources.type = | 342 external_resources.type = |
342 VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; | 343 VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE; |
343 break; | 344 break; |
344 case GL_TEXTURE_RECTANGLE_ARB: | 345 case GL_TEXTURE_RECTANGLE_ARB: |
345 external_resources.type = VideoFrameExternalResources::IO_SURFACE; | 346 external_resources.type = VideoFrameExternalResources::IO_SURFACE; |
346 break; | 347 break; |
347 default: | 348 default: |
348 NOTREACHED(); | 349 NOTREACHED(); |
349 return VideoFrameExternalResources(); | 350 return VideoFrameExternalResources(); |
350 } | 351 } |
351 | 352 |
352 media::VideoFrame::MailboxHolder* mailbox_holder = | |
353 video_frame->texture_mailbox(); | |
354 | |
355 external_resources.mailboxes.push_back( | 353 external_resources.mailboxes.push_back( |
356 TextureMailbox(mailbox_holder->mailbox(), | 354 TextureMailbox(mailbox_holder->mailbox, |
357 video_frame->texture_target(), | 355 mailbox_holder->texture_target, |
358 mailbox_holder->sync_point())); | 356 mailbox_holder->sync_point)); |
359 external_resources.release_callbacks.push_back( | 357 external_resources.release_callbacks.push_back( |
360 base::Bind(&ReturnTexture, video_frame)); | 358 base::Bind(&ReturnTexture, video_frame)); |
361 return external_resources; | 359 return external_resources; |
362 } | 360 } |
363 | 361 |
364 // static | 362 // static |
365 void VideoResourceUpdater::RecycleResource( | 363 void VideoResourceUpdater::RecycleResource( |
366 base::WeakPtr<VideoResourceUpdater> updater, | 364 base::WeakPtr<VideoResourceUpdater> updater, |
367 RecycleResourceData data, | 365 RecycleResourceData data, |
368 unsigned sync_point, | 366 uint32 sync_point, |
369 bool lost_resource) { | 367 bool lost_resource) { |
370 if (!updater.get()) { | 368 if (!updater.get()) { |
371 // Resource was already deleted. | 369 // Resource was already deleted. |
372 return; | 370 return; |
373 } | 371 } |
374 | 372 |
375 ContextProvider* context_provider = updater->context_provider_; | 373 ContextProvider* context_provider = updater->context_provider_; |
376 if (context_provider && sync_point) { | 374 if (context_provider && sync_point) { |
377 GLC(context_provider->ContextGL(), | 375 GLC(context_provider->ContextGL(), |
378 context_provider->ContextGL()->WaitSyncPointCHROMIUM(sync_point)); | 376 context_provider->ContextGL()->WaitSyncPointCHROMIUM(sync_point)); |
(...skipping 13 matching lines...) Expand all Loading... |
392 } | 390 } |
393 | 391 |
394 PlaneResource recycled_resource(data.resource_id, | 392 PlaneResource recycled_resource(data.resource_id, |
395 data.resource_size, | 393 data.resource_size, |
396 data.resource_format, | 394 data.resource_format, |
397 data.mailbox); | 395 data.mailbox); |
398 updater->recycled_resources_.push_back(recycled_resource); | 396 updater->recycled_resources_.push_back(recycled_resource); |
399 } | 397 } |
400 | 398 |
401 } // namespace cc | 399 } // namespace cc |
OLD | NEW |