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

Side by Side Diff: media/base/video_frame.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: cc2a95fe Android fixes. Created 7 years 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/base/video_frame.h" 5 #include "media/base/video_frame.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 visible_rect.right() <= coded_size.width() && 84 visible_rect.right() <= coded_size.width() &&
85 visible_rect.bottom() <= coded_size.height() && 85 visible_rect.bottom() <= coded_size.height() &&
86 !natural_size.IsEmpty() && 86 !natural_size.IsEmpty() &&
87 natural_size.GetArea() <= limits::kMaxCanvas && 87 natural_size.GetArea() <= limits::kMaxCanvas &&
88 natural_size.width() <= limits::kMaxDimension && 88 natural_size.width() <= limits::kMaxDimension &&
89 natural_size.height() <= limits::kMaxDimension); 89 natural_size.height() <= limits::kMaxDimension);
90 } 90 }
91 91
92 // static 92 // static
93 scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( 93 scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture(
94 scoped_ptr<MailboxHolder> mailbox_holder, 94 scoped_ptr<gpu::MailboxHolder> mailbox_holder,
95 uint32 texture_target, 95 const gpu::MailboxHolder::ReleaseCallback& mailbox_holder_release_cb,
96 const gfx::Size& coded_size, 96 const gfx::Size& coded_size,
97 const gfx::Rect& visible_rect, 97 const gfx::Rect& visible_rect,
98 const gfx::Size& natural_size, 98 const gfx::Size& natural_size,
99 base::TimeDelta timestamp, 99 base::TimeDelta timestamp,
100 const ReadPixelsCB& read_pixels_cb, 100 const ReadPixelsCB& read_pixels_cb) {
101 const base::Closure& no_longer_needed_cb) {
102 scoped_refptr<VideoFrame> frame(new VideoFrame(NATIVE_TEXTURE, 101 scoped_refptr<VideoFrame> frame(new VideoFrame(NATIVE_TEXTURE,
103 coded_size, 102 coded_size,
104 visible_rect, 103 visible_rect,
105 natural_size, 104 natural_size,
106 timestamp, 105 timestamp,
107 false)); 106 false));
108 frame->texture_mailbox_holder_ = mailbox_holder.Pass(); 107 frame->mailbox_holder_ = mailbox_holder.Pass();
109 frame->texture_target_ = texture_target; 108 frame->mailbox_holder_release_cb_ = mailbox_holder_release_cb;
110 frame->read_pixels_cb_ = read_pixels_cb; 109 frame->read_pixels_cb_ = read_pixels_cb;
111 frame->no_longer_needed_cb_ = no_longer_needed_cb;
112 110
113 return frame; 111 return frame;
114 } 112 }
115 113
116 void VideoFrame::ReadPixelsFromNativeTexture(const SkBitmap& pixels) { 114 void VideoFrame::ReadPixelsFromNativeTexture(const SkBitmap& pixels) {
117 DCHECK_EQ(format_, NATIVE_TEXTURE); 115 DCHECK_EQ(format_, NATIVE_TEXTURE);
118 if (!read_pixels_cb_.is_null()) 116 if (!read_pixels_cb_.is_null())
119 read_pixels_cb_.Run(pixels); 117 read_pixels_cb_.Run(pixels);
120 } 118 }
121 119
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 VideoFrame::VideoFrame(VideoFrame::Format format, 382 VideoFrame::VideoFrame(VideoFrame::Format format,
385 const gfx::Size& coded_size, 383 const gfx::Size& coded_size,
386 const gfx::Rect& visible_rect, 384 const gfx::Rect& visible_rect,
387 const gfx::Size& natural_size, 385 const gfx::Size& natural_size,
388 base::TimeDelta timestamp, 386 base::TimeDelta timestamp,
389 bool end_of_stream) 387 bool end_of_stream)
390 : format_(format), 388 : format_(format),
391 coded_size_(coded_size), 389 coded_size_(coded_size),
392 visible_rect_(visible_rect), 390 visible_rect_(visible_rect),
393 natural_size_(natural_size), 391 natural_size_(natural_size),
394 texture_target_(0),
395 shared_memory_handle_(base::SharedMemory::NULLHandle()), 392 shared_memory_handle_(base::SharedMemory::NULLHandle()),
396 timestamp_(timestamp), 393 timestamp_(timestamp),
397 end_of_stream_(end_of_stream) { 394 end_of_stream_(end_of_stream) {
398 memset(&strides_, 0, sizeof(strides_)); 395 memset(&strides_, 0, sizeof(strides_));
399 memset(&data_, 0, sizeof(data_)); 396 memset(&data_, 0, sizeof(data_));
400 } 397 }
401 398
402 VideoFrame::~VideoFrame() { 399 VideoFrame::~VideoFrame() {
400 if (!mailbox_holder_release_cb_.is_null()) {
401 base::ResetAndReturn(&mailbox_holder_release_cb_)
402 .Run(mailbox_holder_.Pass());
403 }
403 if (!no_longer_needed_cb_.is_null()) 404 if (!no_longer_needed_cb_.is_null())
404 base::ResetAndReturn(&no_longer_needed_cb_).Run(); 405 base::ResetAndReturn(&no_longer_needed_cb_).Run();
405 } 406 }
406 407
407 bool VideoFrame::IsValidPlane(size_t plane) const { 408 bool VideoFrame::IsValidPlane(size_t plane) const {
408 return (plane < NumPlanes(format_)); 409 return (plane < NumPlanes(format_));
409 } 410 }
410 411
411 int VideoFrame::stride(size_t plane) const { 412 int VideoFrame::stride(size_t plane) const {
412 DCHECK(IsValidPlane(plane)); 413 DCHECK(IsValidPlane(plane));
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 // Intentionally leave out non-production formats. 464 // Intentionally leave out non-production formats.
464 NOTREACHED() << "Unsupported video frame format: " << format_; 465 NOTREACHED() << "Unsupported video frame format: " << format_;
465 return 0; 466 return 0;
466 } 467 }
467 468
468 uint8* VideoFrame::data(size_t plane) const { 469 uint8* VideoFrame::data(size_t plane) const {
469 DCHECK(IsValidPlane(plane)); 470 DCHECK(IsValidPlane(plane));
470 return data_[plane]; 471 return data_[plane];
471 } 472 }
472 473
473 VideoFrame::MailboxHolder* VideoFrame::texture_mailbox() const { 474 gpu::MailboxHolder* VideoFrame::mailbox_holder() const {
474 DCHECK_EQ(format_, NATIVE_TEXTURE); 475 DCHECK_EQ(format_, NATIVE_TEXTURE);
475 return texture_mailbox_holder_.get(); 476 return mailbox_holder_.get();
476 }
477
478 uint32 VideoFrame::texture_target() const {
479 DCHECK_EQ(format_, NATIVE_TEXTURE);
480 return texture_target_;
481 } 477 }
482 478
483 base::SharedMemoryHandle VideoFrame::shared_memory_handle() const { 479 base::SharedMemoryHandle VideoFrame::shared_memory_handle() const {
484 return shared_memory_handle_; 480 return shared_memory_handle_;
485 } 481 }
486 482
487 void VideoFrame::HashFrameForTesting(base::MD5Context* context) { 483 void VideoFrame::HashFrameForTesting(base::MD5Context* context) {
488 for (int plane = 0; plane < kMaxPlanes; ++plane) { 484 for (int plane = 0; plane < kMaxPlanes; ++plane) {
489 if (!IsValidPlane(plane)) 485 if (!IsValidPlane(plane))
490 break; 486 break;
491 for (int row = 0; row < rows(plane); ++row) { 487 for (int row = 0; row < rows(plane); ++row) {
492 base::MD5Update(context, base::StringPiece( 488 base::MD5Update(context, base::StringPiece(
493 reinterpret_cast<char*>(data(plane) + stride(plane) * row), 489 reinterpret_cast<char*>(data(plane) + stride(plane) * row),
494 row_bytes(plane))); 490 row_bytes(plane)));
495 } 491 }
496 } 492 }
497 } 493 }
498 494
499 VideoFrame::MailboxHolder::MailboxHolder(
500 const gpu::Mailbox& mailbox,
501 unsigned sync_point,
502 const TextureNoLongerNeededCallback& release_callback)
503 : mailbox_(mailbox),
504 sync_point_(sync_point),
505 release_callback_(release_callback) {}
506
507 VideoFrame::MailboxHolder::~MailboxHolder() {
508 if (!release_callback_.is_null())
509 release_callback_.Run(sync_point_);
510 }
511
512 } // namespace media 495 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698