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

Side by Side Diff: media/base/video_frame.cc

Issue 11016006: Support reading pixels from HW-decoded video textures into canvas/webgl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « media/base/video_frame.h ('k') | media/filters/gpu_video_decoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_piece.h" 8 #include "base/string_piece.h"
9 #include "media/base/limits.h" 9 #include "media/base/limits.h"
10 #include "media/base/video_util.h" 10 #include "media/base/video_util.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 natural_size.width() * natural_size.height() <= limits::kMaxCanvas); 54 natural_size.width() * natural_size.height() <= limits::kMaxCanvas);
55 } 55 }
56 56
57 // static 57 // static
58 scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture( 58 scoped_refptr<VideoFrame> VideoFrame::WrapNativeTexture(
59 uint32 texture_id, 59 uint32 texture_id,
60 uint32 texture_target, 60 uint32 texture_target,
61 const gfx::Size& data_size, 61 const gfx::Size& data_size,
62 const gfx::Size& natural_size, 62 const gfx::Size& natural_size,
63 base::TimeDelta timestamp, 63 base::TimeDelta timestamp,
64 const ReadPixelsCB& read_pixels_cb,
64 const base::Closure& no_longer_needed) { 65 const base::Closure& no_longer_needed) {
65 scoped_refptr<VideoFrame> frame( 66 scoped_refptr<VideoFrame> frame(
66 new VideoFrame(NATIVE_TEXTURE, data_size, natural_size, timestamp)); 67 new VideoFrame(NATIVE_TEXTURE, data_size, natural_size, timestamp));
67 frame->texture_id_ = texture_id; 68 frame->texture_id_ = texture_id;
68 frame->texture_target_ = texture_target; 69 frame->texture_target_ = texture_target;
70 frame->read_pixels_cb_ = read_pixels_cb;
69 frame->texture_no_longer_needed_ = no_longer_needed; 71 frame->texture_no_longer_needed_ = no_longer_needed;
70 return frame; 72 return frame;
71 } 73 }
72 74
75 void VideoFrame::ReadPixelsFromNativeTexture(void* pixels) {
76 DCHECK_EQ(format_, NATIVE_TEXTURE);
77 if (!read_pixels_cb_.is_null())
78 read_pixels_cb_.Run(pixels);
79 }
80
73 // static 81 // static
74 scoped_refptr<VideoFrame> VideoFrame::CreateEmptyFrame() { 82 scoped_refptr<VideoFrame> VideoFrame::CreateEmptyFrame() {
75 return new VideoFrame( 83 return new VideoFrame(
76 VideoFrame::EMPTY, gfx::Size(), gfx::Size(), base::TimeDelta()); 84 VideoFrame::EMPTY, gfx::Size(), gfx::Size(), base::TimeDelta());
77 } 85 }
78 86
79 // static 87 // static
80 scoped_refptr<VideoFrame> VideoFrame::CreateBlackFrame( 88 scoped_refptr<VideoFrame> VideoFrame::CreateBlackFrame(
81 const gfx::Size& data_size) { 89 const gfx::Size& data_size) {
82 DCHECK(IsValidConfig(VideoFrame::YV12, data_size, data_size)); 90 DCHECK(IsValidConfig(VideoFrame::YV12, data_size, data_size));
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 break; 304 break;
297 for(int row = 0; row < rows(plane); row++) { 305 for(int row = 0; row < rows(plane); row++) {
298 base::MD5Update(context, base::StringPiece( 306 base::MD5Update(context, base::StringPiece(
299 reinterpret_cast<char*>(data(plane) + stride(plane) * row), 307 reinterpret_cast<char*>(data(plane) + stride(plane) * row),
300 row_bytes(plane))); 308 row_bytes(plane)));
301 } 309 }
302 } 310 }
303 } 311 }
304 312
305 } // namespace media 313 } // namespace media
OLDNEW
« no previous file with comments | « media/base/video_frame.h ('k') | media/filters/gpu_video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698