1ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org/*
2ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *
4ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  Use of this source code is governed by a BSD-style license
5ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  that can be found in the LICENSE file in the root of the source
6ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  tree. An additional intellectual property rights grant can be found
7ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  in the file PATENTS.  All contributing project authors may
8ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org */
10ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
11ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#ifndef COMMON_VIDEO_INTERFACE_TEXTURE_VIDEO_FRAME_H
12ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#define COMMON_VIDEO_INTERFACE_TEXTURE_VIDEO_FRAME_H
13ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
14ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org// TextureVideoFrame class
15ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org//
16ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org// Storing and handling of video frames backed by textures.
17ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
18ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "webrtc/common_video/interface/i420_video_frame.h"
19ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "webrtc/common_video/interface/native_handle.h"
20ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "webrtc/system_wrappers/interface/scoped_refptr.h"
21ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#include "webrtc/typedefs.h"
22ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
23ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgnamespace webrtc {
24ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
25ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.orgclass TextureVideoFrame : public I420VideoFrame {
26ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org public:
27ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  TextureVideoFrame(NativeHandle* handle,
28ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                    int width,
29ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                    int height,
30ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                    uint32_t timestamp,
31ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                    int64_t render_time_ms);
32ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual ~TextureVideoFrame();
33ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
34ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  // I420VideoFrame implementation
35ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int CreateEmptyFrame(int width,
36ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                               int height,
37ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                               int stride_y,
38ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                               int stride_u,
39ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                               int stride_v) OVERRIDE;
40ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int CreateFrame(int size_y,
41ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          const uint8_t* buffer_y,
42ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int size_u,
43ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          const uint8_t* buffer_u,
44ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int size_v,
45ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          const uint8_t* buffer_v,
46ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int width,
47ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int height,
48ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int stride_y,
49ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int stride_u,
50ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org                          int stride_v) OVERRIDE;
51ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int CopyFrame(const I420VideoFrame& videoFrame) OVERRIDE;
521bdf186e6ae8d2f1a7d055237a75c0d7fd189624wuchengli@chromium.org  virtual I420VideoFrame* CloneFrame() const OVERRIDE;
53ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual void SwapFrame(I420VideoFrame* videoFrame) OVERRIDE;
54ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual uint8_t* buffer(PlaneType type) OVERRIDE;
55ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual const uint8_t* buffer(PlaneType type) const OVERRIDE;
56ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int allocated_size(PlaneType type) const OVERRIDE;
57ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int stride(PlaneType type) const OVERRIDE;
58ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual bool IsZeroSize() const OVERRIDE;
59ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual void ResetSize() OVERRIDE;
60ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual void* native_handle() const OVERRIDE;
61ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
62ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org protected:
63ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  virtual int CheckDimensions(
64ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org      int width, int height, int stride_y, int stride_u, int stride_v) OVERRIDE;
65ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
66ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org private:
67ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  // An opaque handle that stores the underlying video frame.
68ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org  scoped_refptr<NativeHandle> handle_;
69ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org};
70ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
71ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org}  // namespace webrtc
72ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org
73ea7b33ee032bd2d1528384e26ba079dee0d280fbwu@webrtc.org#endif  // COMMON_VIDEO_INTERFACE_TEXTURE_VIDEO_FRAME_H
74