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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
303 external_resources.mailboxes.push_back( | 303 external_resources.mailboxes.push_back( |
304 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0)); | 304 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0)); |
305 external_resources.release_callbacks.push_back( | 305 external_resources.release_callbacks.push_back( |
306 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); | 306 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); |
307 } | 307 } |
308 | 308 |
309 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; | 309 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; |
310 return external_resources; | 310 return external_resources; |
311 } | 311 } |
312 | 312 |
313 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame, | 313 // static |
314 uint32 sync_point, | 314 void VideoResourceUpdater::ReturnTexture( |
315 bool lost_resource) { | 315 base::WeakPtr<VideoResourceUpdater> updater, |
316 frame->mailbox_holder()->sync_point = sync_point; | 316 const scoped_refptr<media::VideoFrame>& frame, |
317 uint32 sync_point, | |
318 bool lost_resource) { | |
319 uint32 previous_sync_point = frame->SwapReleaseSyncPoint(sync_point); | |
320 // TODO(dshwang): |updater| can be deleted while ResourceProvider keeps | |
321 // this mailbox. If below code causes critical issue, ResourceProvider | |
danakj
2014/02/28 21:47:03
This is kinda ugly.. and since cc is giving the re
dshwang
2014/02/28 21:54:17
Yeah, I agree. your idea is better. I'll change Vi
| |
322 // can provide ContextProvider* like |sync_point|. | |
323 if (updater && previous_sync_point) { | |
324 gpu::gles2::GLES2Interface* gl = updater->context_provider_->ContextGL(); | |
325 GLC(gl, gl->WaitSyncPointCHROMIUM(previous_sync_point)); | |
danakj
2014/02/28 21:47:03
This is inverted, you'd need to wait on the existi
dshwang
2014/02/28 21:54:17
Thank you for explanation. After VideoFrame keep m
| |
326 } | |
317 } | 327 } |
318 | 328 |
319 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( | 329 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( |
320 const scoped_refptr<media::VideoFrame>& video_frame) { | 330 const scoped_refptr<media::VideoFrame>& video_frame) { |
321 media::VideoFrame::Format frame_format = video_frame->format(); | 331 media::VideoFrame::Format frame_format = video_frame->format(); |
322 | 332 |
323 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); | 333 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); |
324 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) | 334 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) |
325 return VideoFrameExternalResources(); | 335 return VideoFrameExternalResources(); |
326 | 336 |
(...skipping 16 matching lines...) Expand all Loading... | |
343 default: | 353 default: |
344 NOTREACHED(); | 354 NOTREACHED(); |
345 return VideoFrameExternalResources(); | 355 return VideoFrameExternalResources(); |
346 } | 356 } |
347 | 357 |
348 external_resources.mailboxes.push_back( | 358 external_resources.mailboxes.push_back( |
349 TextureMailbox(mailbox_holder->mailbox, | 359 TextureMailbox(mailbox_holder->mailbox, |
350 mailbox_holder->texture_target, | 360 mailbox_holder->texture_target, |
351 mailbox_holder->sync_point)); | 361 mailbox_holder->sync_point)); |
352 external_resources.release_callbacks.push_back( | 362 external_resources.release_callbacks.push_back( |
353 base::Bind(&ReturnTexture, video_frame)); | 363 base::Bind(&ReturnTexture, AsWeakPtr(), video_frame)); |
354 return external_resources; | 364 return external_resources; |
355 } | 365 } |
356 | 366 |
357 // static | 367 // static |
358 void VideoResourceUpdater::RecycleResource( | 368 void VideoResourceUpdater::RecycleResource( |
359 base::WeakPtr<VideoResourceUpdater> updater, | 369 base::WeakPtr<VideoResourceUpdater> updater, |
360 RecycleResourceData data, | 370 RecycleResourceData data, |
361 uint32 sync_point, | 371 uint32 sync_point, |
362 bool lost_resource) { | 372 bool lost_resource) { |
363 if (!updater.get()) { | 373 if (!updater.get()) { |
(...skipping 21 matching lines...) Expand all Loading... | |
385 } | 395 } |
386 | 396 |
387 PlaneResource recycled_resource(data.resource_id, | 397 PlaneResource recycled_resource(data.resource_id, |
388 data.resource_size, | 398 data.resource_size, |
389 data.resource_format, | 399 data.resource_format, |
390 data.mailbox); | 400 data.mailbox); |
391 updater->recycled_resources_.push_back(recycled_resource); | 401 updater->recycled_resources_.push_back(recycled_resource); |
392 } | 402 } |
393 | 403 |
394 } // namespace cc | 404 } // namespace cc |
OLD | NEW |