| Index: media/base/video_frame.h | 
| diff --git a/media/base/video_frame.h b/media/base/video_frame.h | 
| index ab965440f70cb7f46ceb12f3db192c1b9edb0133..1801077c4c120c4117c7d65824a829a1e1aad6fe 100644 | 
| --- a/media/base/video_frame.h | 
| +++ b/media/base/video_frame.h | 
| @@ -5,6 +5,7 @@ | 
| #ifndef MEDIA_BASE_VIDEO_FRAME_H_ | 
| #define MEDIA_BASE_VIDEO_FRAME_H_ | 
|  | 
| +#include "base/callback.h" | 
| #include "media/base/buffers.h" | 
|  | 
| namespace media { | 
| @@ -25,6 +26,7 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| // Surface formats roughly based on FOURCC labels, see: | 
| // http://www.fourcc.org/rgb.php | 
| // http://www.fourcc.org/yuv.php | 
| +  // Keep in sync with WebKit::WebVideoFrame! | 
| enum Format { | 
| INVALID,     // Invalid format value.  Used for error reporting. | 
| RGB555,      // 16bpp RGB packed 5:5:5 | 
| @@ -38,6 +40,7 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| EMPTY,       // An empty frame. | 
| ASCII,       // A frame with ASCII content. For testing only. | 
| I420,        // 12bpp YVU planar 1x1 Y, 2x2 UV samples. | 
| +    NATIVE_TEXTURE,  // Opaque native texture.  Pixel-format agnostic. | 
| }; | 
|  | 
| // Creates a new frame in system memory with given parameters. Buffers for | 
| @@ -49,6 +52,16 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| base::TimeDelta timestamp, | 
| base::TimeDelta duration); | 
|  | 
| +  // Wraps a native texture of the given parameters with a VideoFrame.  When the | 
| +  // frame is destroyed |no_longer_needed.Run()| will be called. | 
| +  static scoped_refptr<VideoFrame> WrapNativeTexture( | 
| +      uint32 texture_id, | 
| +      size_t width, | 
| +      size_t height, | 
| +      base::TimeDelta timestamp, | 
| +      base::TimeDelta duration, | 
| +      const base::Closure& no_longer_needed); | 
| + | 
| // Creates a frame with format equals to VideoFrame::EMPTY, width, height | 
| // timestamp and duration are all 0. | 
| static scoped_refptr<VideoFrame> CreateEmptyFrame(); | 
| @@ -78,14 +91,20 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| // VideoFrame object and must not be freed by the caller. | 
| uint8* data(size_t plane) const; | 
|  | 
| +  // Returns the ID of the native texture wrapped by this frame.  Only valid to | 
| +  // call if this is a NATIVE_TEXTURE frame. | 
| +  uint32 texture_id() const; | 
| + | 
| // StreamSample interface. | 
| virtual bool IsEndOfStream() const OVERRIDE; | 
|  | 
| - protected: | 
| + private: | 
| // Clients must use the static CreateFrame() method to create a new frame. | 
| VideoFrame(Format format, | 
| size_t video_width, | 
| -             size_t video_height); | 
| +             size_t video_height, | 
| +             base::TimeDelta timestamp, | 
| +             base::TimeDelta duration); | 
|  | 
| virtual ~VideoFrame(); | 
|  | 
| @@ -103,8 +122,8 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| size_t width_; | 
| size_t height_; | 
|  | 
| -  // Number of planes, typically 1 for packed RGB formats and 3 for planar | 
| -  // YUV formats. | 
| +  // Number of planes, typically 1 for packed RGB formats, 3 for planar | 
| +  // YUV formats, and 0 for native textures. | 
| size_t planes_; | 
|  | 
| // Array of strides for each plane, typically greater or equal to the width | 
| @@ -115,7 +134,11 @@ class MEDIA_EXPORT VideoFrame : public StreamSample { | 
| // Array of data pointers to each plane. | 
| uint8* data_[kMaxPlanes]; | 
|  | 
| -  DISALLOW_COPY_AND_ASSIGN(VideoFrame); | 
| +  // Native texture ID, if this is a NATIVE_TEXTURE frame. | 
| +  uint32 texture_id_; | 
| +  base::Closure texture_no_longer_needed_; | 
| + | 
| +  DISALLOW_IMPLICIT_CONSTRUCTORS(VideoFrame); | 
| }; | 
|  | 
| }  // namespace media | 
|  |