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

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

Issue 312803002: Android media: VideoFrame should not store so many sync points. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make VideoFrame keep only one sync point per client Created 6 years, 6 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
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 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0)); 277 TextureMailbox(plane_resources[i].mailbox, GL_TEXTURE_2D, 0));
278 external_resources.release_callbacks.push_back( 278 external_resources.release_callbacks.push_back(
279 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data)); 279 base::Bind(&RecycleResource, AsWeakPtr(), recycle_data));
280 } 280 }
281 281
282 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE; 282 external_resources.type = VideoFrameExternalResources::YUV_RESOURCE;
283 return external_resources; 283 return external_resources;
284 } 284 }
285 285
286 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame, 286 static void ReturnTexture(const scoped_refptr<media::VideoFrame>& frame,
287 ContextProvider* context_provider,
287 uint32 sync_point, 288 uint32 sync_point,
288 bool lost_resource) { 289 bool lost_resource) {
289 frame->AppendReleaseSyncPoint(sync_point); 290 frame->AppendReleaseSyncPoint(reinterpret_cast<uintptr_t>(context_provider),
291 sync_point);
dshwang 2014/06/05 14:38:30 reinterpret_cast is ugly but I could not find bett
dshwang 2014/06/05 14:53:19 That's good question. If one client waits for sync
290 } 292 }
291 293
292 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes( 294 VideoFrameExternalResources VideoResourceUpdater::CreateForHardwarePlanes(
293 const scoped_refptr<media::VideoFrame>& video_frame) { 295 const scoped_refptr<media::VideoFrame>& video_frame) {
294 media::VideoFrame::Format frame_format = video_frame->format(); 296 media::VideoFrame::Format frame_format = video_frame->format();
295 297
296 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE); 298 DCHECK_EQ(frame_format, media::VideoFrame::NATIVE_TEXTURE);
297 if (frame_format != media::VideoFrame::NATIVE_TEXTURE) 299 if (frame_format != media::VideoFrame::NATIVE_TEXTURE)
298 return VideoFrameExternalResources(); 300 return VideoFrameExternalResources();
299 301
(...skipping 15 matching lines...) Expand all
315 break; 317 break;
316 default: 318 default:
317 NOTREACHED(); 319 NOTREACHED();
318 return VideoFrameExternalResources(); 320 return VideoFrameExternalResources();
319 } 321 }
320 322
321 external_resources.mailboxes.push_back( 323 external_resources.mailboxes.push_back(
322 TextureMailbox(mailbox_holder->mailbox, 324 TextureMailbox(mailbox_holder->mailbox,
323 mailbox_holder->texture_target, 325 mailbox_holder->texture_target,
324 mailbox_holder->sync_point)); 326 mailbox_holder->sync_point));
325 external_resources.release_callbacks.push_back( 327 external_resources.release_callbacks.push_back(base::Bind(
326 base::Bind(&ReturnTexture, video_frame)); 328 &ReturnTexture, video_frame, base::Unretained(context_provider_)));
327 return external_resources; 329 return external_resources;
328 } 330 }
329 331
330 // static 332 // static
331 void VideoResourceUpdater::RecycleResource( 333 void VideoResourceUpdater::RecycleResource(
332 base::WeakPtr<VideoResourceUpdater> updater, 334 base::WeakPtr<VideoResourceUpdater> updater,
333 RecycleResourceData data, 335 RecycleResourceData data,
334 uint32 sync_point, 336 uint32 sync_point,
335 bool lost_resource) { 337 bool lost_resource) {
336 if (!updater.get()) { 338 if (!updater.get()) {
(...skipping 21 matching lines...) Expand all
358 } 360 }
359 361
360 PlaneResource recycled_resource(data.resource_id, 362 PlaneResource recycled_resource(data.resource_id,
361 data.resource_size, 363 data.resource_size,
362 data.resource_format, 364 data.resource_format,
363 data.mailbox); 365 data.mailbox);
364 updater->recycled_resources_.push_back(recycled_resource); 366 updater->recycled_resources_.push_back(recycled_resource);
365 } 367 }
366 368
367 } // namespace cc 369 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698