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

Side by Side Diff: webrtc/common_video/include/video_frame_buffer.h

Issue 1881933004: Introduce an IsMutable method on VideoFrameBuffer. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase. Created 4 years, 8 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
« no previous file with comments | « webrtc/common_video/i420_buffer_pool_unittest.cc ('k') | webrtc/common_video/video_frame.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 15 matching lines...) Expand all
26 kYPlane = 0, 26 kYPlane = 0,
27 kUPlane = 1, 27 kUPlane = 1,
28 kVPlane = 2, 28 kVPlane = 2,
29 kNumOfPlanes = 3, 29 kNumOfPlanes = 3,
30 }; 30 };
31 31
32 // Interface of a simple frame buffer containing pixel data. This interface does 32 // Interface of a simple frame buffer containing pixel data. This interface does
33 // not contain any frame metadata such as rotation, timestamp, pixel_width, etc. 33 // not contain any frame metadata such as rotation, timestamp, pixel_width, etc.
34 class VideoFrameBuffer : public rtc::RefCountInterface { 34 class VideoFrameBuffer : public rtc::RefCountInterface {
35 public: 35 public:
36 // Returns true if this buffer has a single exclusive owner. 36 // Returns true if the caller is exclusive owner, and allowed to
37 // call MutableData.
38
39 // TODO(nisse): Delete default implementation when subclasses in
40 // Chrome are updated.
41 virtual bool IsMutable() { return false; }
42
43 // Underlying refcount access, used to implement IsMutable.
44 // TODO(nisse): Demote to protected, as soon as Chrome is changed to
45 // use IsMutable.
37 virtual bool HasOneRef() const = 0; 46 virtual bool HasOneRef() const = 0;
38 47
39 // The resolution of the frame in pixels. For formats where some planes are 48 // The resolution of the frame in pixels. For formats where some planes are
40 // subsampled, this is the highest-resolution plane. 49 // subsampled, this is the highest-resolution plane.
41 virtual int width() const = 0; 50 virtual int width() const = 0;
42 virtual int height() const = 0; 51 virtual int height() const = 0;
43 52
44 // Returns pointer to the pixel data for a given plane. The memory is owned by 53 // Returns pointer to the pixel data for a given plane. The memory is owned by
45 // the VideoFrameBuffer object and must not be freed by the caller. 54 // the VideoFrameBuffer object and must not be freed by the caller.
46 virtual const uint8_t* data(PlaneType type) const = 0; 55 virtual const uint8_t* data(PlaneType type) const = 0;
(...skipping 22 matching lines...) Expand all
69 public: 78 public:
70 I420Buffer(int width, int height); 79 I420Buffer(int width, int height);
71 I420Buffer(int width, int height, int stride_y, int stride_u, int stride_v); 80 I420Buffer(int width, int height, int stride_y, int stride_u, int stride_v);
72 void InitializeData(); 81 void InitializeData();
73 82
74 int width() const override; 83 int width() const override;
75 int height() const override; 84 int height() const override;
76 const uint8_t* data(PlaneType type) const override; 85 const uint8_t* data(PlaneType type) const override;
77 // Non-const data access is only allowed if HasOneRef() is true to protect 86 // Non-const data access is only allowed if HasOneRef() is true to protect
78 // against unexpected overwrites. 87 // against unexpected overwrites.
88 bool IsMutable() override;
79 uint8_t* MutableData(PlaneType type) override; 89 uint8_t* MutableData(PlaneType type) override;
80 int stride(PlaneType type) const override; 90 int stride(PlaneType type) const override;
81 void* native_handle() const override; 91 void* native_handle() const override;
82 rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override; 92 rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override;
83 93
84 // Create a new buffer and copy the pixel data. 94 // Create a new buffer and copy the pixel data.
85 static rtc::scoped_refptr<I420Buffer> Copy( 95 static rtc::scoped_refptr<I420Buffer> Copy(
86 const rtc::scoped_refptr<VideoFrameBuffer>& buffer); 96 const rtc::scoped_refptr<VideoFrameBuffer>& buffer);
87 97
88 protected: 98 protected:
(...skipping 14 matching lines...) Expand all
103 // as their own destructors or conversion methods back to software I420). 113 // as their own destructors or conversion methods back to software I420).
104 class NativeHandleBuffer : public VideoFrameBuffer { 114 class NativeHandleBuffer : public VideoFrameBuffer {
105 public: 115 public:
106 NativeHandleBuffer(void* native_handle, int width, int height); 116 NativeHandleBuffer(void* native_handle, int width, int height);
107 117
108 int width() const override; 118 int width() const override;
109 int height() const override; 119 int height() const override;
110 const uint8_t* data(PlaneType type) const override; 120 const uint8_t* data(PlaneType type) const override;
111 int stride(PlaneType type) const override; 121 int stride(PlaneType type) const override;
112 void* native_handle() const override; 122 void* native_handle() const override;
123 bool IsMutable() override;
113 124
114 protected: 125 protected:
115 void* native_handle_; 126 void* native_handle_;
116 const int width_; 127 const int width_;
117 const int height_; 128 const int height_;
118 }; 129 };
119 130
120 class WrappedI420Buffer : public webrtc::VideoFrameBuffer { 131 class WrappedI420Buffer : public webrtc::VideoFrameBuffer {
121 public: 132 public:
122 WrappedI420Buffer(int width, 133 WrappedI420Buffer(int width,
123 int height, 134 int height,
124 const uint8_t* y_plane, 135 const uint8_t* y_plane,
125 int y_stride, 136 int y_stride,
126 const uint8_t* u_plane, 137 const uint8_t* u_plane,
127 int u_stride, 138 int u_stride,
128 const uint8_t* v_plane, 139 const uint8_t* v_plane,
129 int v_stride, 140 int v_stride,
130 const rtc::Callback0<void>& no_longer_used); 141 const rtc::Callback0<void>& no_longer_used);
131 int width() const override; 142 int width() const override;
132 int height() const override; 143 int height() const override;
133 144
145 bool IsMutable() override;
146
134 const uint8_t* data(PlaneType type) const override; 147 const uint8_t* data(PlaneType type) const override;
135 148
136 int stride(PlaneType type) const override; 149 int stride(PlaneType type) const override;
137 void* native_handle() const override; 150 void* native_handle() const override;
138 151
139 rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override; 152 rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override;
140 153
141 private: 154 private:
142 friend class rtc::RefCountedObject<WrappedI420Buffer>; 155 friend class rtc::RefCountedObject<WrappedI420Buffer>;
143 ~WrappedI420Buffer() override; 156 ~WrappedI420Buffer() override;
(...skipping 12 matching lines...) Expand all
156 // Helper function to crop |buffer| without making a deep copy. May only be used 169 // Helper function to crop |buffer| without making a deep copy. May only be used
157 // for non-native frames. 170 // for non-native frames.
158 rtc::scoped_refptr<VideoFrameBuffer> ShallowCenterCrop( 171 rtc::scoped_refptr<VideoFrameBuffer> ShallowCenterCrop(
159 const rtc::scoped_refptr<VideoFrameBuffer>& buffer, 172 const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
160 int cropped_width, 173 int cropped_width,
161 int cropped_height); 174 int cropped_height);
162 175
163 } // namespace webrtc 176 } // namespace webrtc
164 177
165 #endif // WEBRTC_COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_ 178 #endif // WEBRTC_COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_
OLDNEW
« no previous file with comments | « webrtc/common_video/i420_buffer_pool_unittest.cc ('k') | webrtc/common_video/video_frame.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698