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

Unified Diff: media/base/video_frame.cc

Issue 8686010: <video> decode in hardware! (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add missing OVERRIDEs Created 9 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 side-by-side diff with in-line comments
Download patch
Index: media/base/video_frame.cc
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
index a0dc57974643df0fc574c6dbbffebe38b9c2468b..905f9b1fc417c4476fbef8230526e5108fce7e9d 100644
--- a/media/base/video_frame.cc
+++ b/media/base/video_frame.cc
@@ -17,9 +17,8 @@ scoped_refptr<VideoFrame> VideoFrame::CreateFrame(
base::TimeDelta duration) {
DCHECK(width > 0 && height > 0);
DCHECK(width * height < 100000000);
- scoped_refptr<VideoFrame> frame(new VideoFrame(format, width, height));
- frame->SetTimestamp(timestamp);
- frame->SetDuration(duration);
+ scoped_refptr<VideoFrame> frame(new VideoFrame(
+ format, width, height, timestamp, duration));
switch (format) {
case VideoFrame::RGB555:
case VideoFrame::RGB565:
@@ -47,8 +46,25 @@ scoped_refptr<VideoFrame> VideoFrame::CreateFrame(
}
// static
+scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture(
+ uint32 texture_id,
+ size_t width,
+ size_t height,
+ base::TimeDelta timestamp,
+ base::TimeDelta duration,
+ const base::Closure& no_longer_needed) {
+ scoped_refptr<VideoFrame> frame(
+ new VideoFrame(NATIVE_TEXTURE, width, height, timestamp, duration));
+ frame->planes_ = 0;
+ frame->texture_id_ = texture_id;
+ frame->texture_no_longer_needed_ = no_longer_needed;
+ return frame;
+}
+
+// static
scoped_refptr<VideoFrame> VideoFrame::CreateEmptyFrame() {
- return new VideoFrame(VideoFrame::EMPTY, 0, 0);
+ return new VideoFrame(
+ VideoFrame::EMPTY, 0, 0, base::TimeDelta(), base::TimeDelta());
}
// static
@@ -138,16 +154,26 @@ void VideoFrame::AllocateYUV() {
VideoFrame::VideoFrame(VideoFrame::Format format,
size_t width,
- size_t height)
+ size_t height,
+ base::TimeDelta timestamp,
+ base::TimeDelta duration)
: format_(format),
width_(width),
height_(height),
- planes_(0) {
+ planes_(0),
+ texture_id_(0) {
+ SetTimestamp(timestamp);
+ SetDuration(duration);
memset(&strides_, 0, sizeof(strides_));
memset(&data_, 0, sizeof(data_));
}
VideoFrame::~VideoFrame() {
+ if (format_ == NATIVE_TEXTURE && !texture_no_longer_needed_.is_null()) {
+ texture_no_longer_needed_.Run();
+ texture_no_longer_needed_.Reset();
+ }
+
// In multi-plane allocations, only a single block of memory is allocated
// on the heap, and other |data| pointers point inside the same, single block
// so just delete index 0.
@@ -167,6 +193,11 @@ bool VideoFrame::IsValidPlane(size_t plane) const {
case YV16:
return plane == kYPlane || plane == kUPlane || plane == kVPlane;
+ case NATIVE_TEXTURE:
+ // Native textures shouldn't be accessing the plane-related methods of
+ // this class!
+ return false;
scherkus (not reviewing) 2011/12/06 00:27:44 DCHECK?
Ami GONE FROM CHROMIUM 2011/12/07 00:03:04 Done.
+
default:
break;
}
@@ -236,6 +267,12 @@ uint8* VideoFrame::data(size_t plane) const {
return data_[plane];
}
+uint32 VideoFrame::texture_id() const {
+ DCHECK_EQ(format_, NATIVE_TEXTURE);
+ DCHECK_EQ(planes_, 0U);
+ return texture_id_;
+}
+
bool VideoFrame::IsEndOfStream() const {
return format_ == VideoFrame::EMPTY;
}

Powered by Google App Engine
This is Rietveld 408576698