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

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

Issue 604743005: VideoCapture: Remove deep frame copy in the border to libJingle (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scherkus@s comments Created 6 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
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 #ifndef MEDIA_BASE_VIDEO_FRAME_H_ 5 #ifndef MEDIA_BASE_VIDEO_FRAME_H_
6 #define MEDIA_BASE_VIDEO_FRAME_H_ 6 #define MEDIA_BASE_VIDEO_FRAME_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 71
72 // Creates a new frame in system memory with given parameters. Buffers for 72 // Creates a new frame in system memory with given parameters. Buffers for
73 // the frame are allocated but not initialized. 73 // the frame are allocated but not initialized.
74 static scoped_refptr<VideoFrame> CreateFrame( 74 static scoped_refptr<VideoFrame> CreateFrame(
75 Format format, 75 Format format,
76 const gfx::Size& coded_size, 76 const gfx::Size& coded_size,
77 const gfx::Rect& visible_rect, 77 const gfx::Rect& visible_rect,
78 const gfx::Size& natural_size, 78 const gfx::Size& natural_size,
79 base::TimeDelta timestamp); 79 base::TimeDelta timestamp);
80 80
81 // Returns true if |plane| is a valid plane number for the given format. This
82 // can be used to DCHECK() plane parameters.
83 static bool IsValidPlane(size_t plane, VideoFrame::Format format);
84
81 // Call prior to CreateFrame to ensure validity of frame configuration. Called 85 // Call prior to CreateFrame to ensure validity of frame configuration. Called
82 // automatically by VideoDecoderConfig::IsValidConfig(). 86 // automatically by VideoDecoderConfig::IsValidConfig().
83 // TODO(scherkus): VideoDecoderConfig shouldn't call this method 87 // TODO(scherkus): VideoDecoderConfig shouldn't call this method
84 static bool IsValidConfig(Format format, const gfx::Size& coded_size, 88 static bool IsValidConfig(Format format, const gfx::Size& coded_size,
85 const gfx::Rect& visible_rect, 89 const gfx::Rect& visible_rect,
86 const gfx::Size& natural_size); 90 const gfx::Size& natural_size);
87 91
88 // CB to write pixels from the texture backing this frame into the 92 // CB to write pixels from the texture backing this frame into the
89 // |const SkBitmap&| parameter. 93 // |const SkBitmap&| parameter.
90 typedef base::Callback<void(const SkBitmap&)> ReadPixelsCB; 94 typedef base::Callback<void(const SkBitmap&)> ReadPixelsCB;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // Allocates a hole frame. 223 // Allocates a hole frame.
220 static scoped_refptr<VideoFrame> CreateHoleFrame(const gfx::Size& size); 224 static scoped_refptr<VideoFrame> CreateHoleFrame(const gfx::Size& size);
221 #endif // defined(VIDEO_HOLE) 225 #endif // defined(VIDEO_HOLE)
222 226
223 static size_t NumPlanes(Format format); 227 static size_t NumPlanes(Format format);
224 228
225 // Returns the required allocation size for a (tightly packed) frame of the 229 // Returns the required allocation size for a (tightly packed) frame of the
226 // given coded size and format. 230 // given coded size and format.
227 static size_t AllocationSize(Format format, const gfx::Size& coded_size); 231 static size_t AllocationSize(Format format, const gfx::Size& coded_size);
228 232
229 // Returns the plane size for a plane of the given coded size and format. 233 // Returns the plane size (in bytes) for a plane of the given coded size and
234 // format.
230 static gfx::Size PlaneSize(Format format, 235 static gfx::Size PlaneSize(Format format,
231 size_t plane, 236 size_t plane,
232 const gfx::Size& coded_size); 237 const gfx::Size& coded_size);
233 238
234 // Returns the required allocation size for a (tightly packed) plane of the 239 // Returns the required allocation size for a (tightly packed) plane of the
235 // given coded size and format. 240 // given coded size and format.
236 static size_t PlaneAllocationSize(Format format, 241 static size_t PlaneAllocationSize(Format format,
237 size_t plane, 242 size_t plane,
238 const gfx::Size& coded_size); 243 const gfx::Size& coded_size);
239 244
240 // Returns horizontal bits per pixel for given |plane| and |format|. 245 // Returns horizontal bits per pixel for given |plane| and |format|.
241 static int PlaneHorizontalBitsPerPixel(Format format, size_t plane); 246 static int PlaneHorizontalBitsPerPixel(Format format, size_t plane);
242 247
243 // Returns the number of bytes per row for the given plane, format, and width. 248 // Returns the number of bytes per row for the given plane, format, and width.
244 // The width may be aligned to format requirements. 249 // The width may be aligned to format requirements.
245 static size_t RowBytes(size_t plane, Format format, int width); 250 static size_t RowBytes(size_t plane, Format format, int width);
246 251
247 // Returns the number of rows for the given plane, format, and height. 252 // Returns the number of rows for the given plane, format, and height.
248 // The height may be aligned to format requirements. 253 // The height may be aligned to format requirements.
249 static size_t Rows(size_t plane, Format format, int height); 254 static size_t Rows(size_t plane, Format format, int height);
250 255
256 // Returns the number of columns for the given plane, format, and width.
257 // The width may be aligned to format requirements.
258 static size_t Columns(size_t plane, Format format, int width);
259
251 Format format() const { return format_; } 260 Format format() const { return format_; }
252 261
253 const gfx::Size& coded_size() const { return coded_size_; } 262 const gfx::Size& coded_size() const { return coded_size_; }
254 const gfx::Rect& visible_rect() const { return visible_rect_; } 263 const gfx::Rect& visible_rect() const { return visible_rect_; }
255 const gfx::Size& natural_size() const { return natural_size_; } 264 const gfx::Size& natural_size() const { return natural_size_; }
256 265
257 int stride(size_t plane) const; 266 int stride(size_t plane) const;
258 267
259 // Returns the number of bytes per row and number of rows for a given plane. 268 // Returns the number of bytes per row and number of rows for a given plane.
260 // 269 //
261 // As opposed to stride(), row_bytes() refers to the bytes representing 270 // As opposed to stride(), row_bytes() refers to the bytes representing
262 // frame data scanlines (coded_size.width() pixels, without stride padding). 271 // frame data scanlines (coded_size.width() pixels, without stride padding).
263 int row_bytes(size_t plane) const; 272 int row_bytes(size_t plane) const;
264 int rows(size_t plane) const; 273 int rows(size_t plane) const;
265 274
266 // Returns pointer to the buffer for a given plane. The memory is owned by 275 // Returns pointer to the buffer for a given plane. The memory is owned by
267 // VideoFrame object and must not be freed by the caller. 276 // VideoFrame object and must not be freed by the caller.
268 uint8* data(size_t plane) const; 277 const uint8* data(size_t plane) const;
278 uint8* data(size_t plane);
279
280 // Returns pointer to the data in the visible region of the frame. I.e. the
281 // returned pointer is offsetted into the plane buffer specified by
282 // visible_rect().origin(). Memory is owned by VideoFrame object and must not
283 // be freed by the caller.
284 const uint8* visible_data(size_t plane) const;
285 uint8* visible_data(size_t plane);
269 286
270 // Returns the mailbox holder of the native texture wrapped by this frame. 287 // Returns the mailbox holder of the native texture wrapped by this frame.
271 // Only valid to call if this is a NATIVE_TEXTURE frame. Before using the 288 // Only valid to call if this is a NATIVE_TEXTURE frame. Before using the
272 // mailbox, the caller must wait for the included sync point. 289 // mailbox, the caller must wait for the included sync point.
273 const gpu::MailboxHolder* mailbox_holder() const; 290 const gpu::MailboxHolder* mailbox_holder() const;
274 291
275 // Returns the shared-memory handle, if present 292 // Returns the shared-memory handle, if present
276 base::SharedMemoryHandle shared_memory_handle() const; 293 base::SharedMemoryHandle shared_memory_handle() const;
277 294
278 #if defined(OS_POSIX) 295 #if defined(OS_POSIX)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 // This method is thread safe. Both blink and compositor threads can call it. 329 // This method is thread safe. Both blink and compositor threads can call it.
313 void UpdateReleaseSyncPoint(SyncPointClient* client); 330 void UpdateReleaseSyncPoint(SyncPointClient* client);
314 331
315 // Used to keep a running hash of seen frames. Expects an initialized MD5 332 // Used to keep a running hash of seen frames. Expects an initialized MD5
316 // context. Calls MD5Update with the context and the contents of the frame. 333 // context. Calls MD5Update with the context and the contents of the frame.
317 void HashFrameForTesting(base::MD5Context* context); 334 void HashFrameForTesting(base::MD5Context* context);
318 335
319 private: 336 private:
320 friend class base::RefCountedThreadSafe<VideoFrame>; 337 friend class base::RefCountedThreadSafe<VideoFrame>;
321 338
322 // Returns true if |plane| is a valid plane number for the given format. This
323 // can be used to DCHECK() plane parameters.
324 static bool IsValidPlane(size_t plane, VideoFrame::Format format);
325
326 // Clients must use the static CreateFrame() method to create a new frame. 339 // Clients must use the static CreateFrame() method to create a new frame.
327 VideoFrame(Format format, 340 VideoFrame(Format format,
328 const gfx::Size& coded_size, 341 const gfx::Size& coded_size,
329 const gfx::Rect& visible_rect, 342 const gfx::Rect& visible_rect,
330 const gfx::Size& natural_size, 343 const gfx::Size& natural_size,
331 scoped_ptr<gpu::MailboxHolder> mailbox_holder, 344 scoped_ptr<gpu::MailboxHolder> mailbox_holder,
332 base::TimeDelta timestamp, 345 base::TimeDelta timestamp,
333 bool end_of_stream); 346 bool end_of_stream);
334 virtual ~VideoFrame(); 347 virtual ~VideoFrame();
335 348
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 uint32 release_sync_point_; 402 uint32 release_sync_point_;
390 403
391 const bool end_of_stream_; 404 const bool end_of_stream_;
392 405
393 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoFrame); 406 DISALLOW_IMPLICIT_CONSTRUCTORS(VideoFrame);
394 }; 407 };
395 408
396 } // namespace media 409 } // namespace media
397 410
398 #endif // MEDIA_BASE_VIDEO_FRAME_H_ 411 #endif // MEDIA_BASE_VIDEO_FRAME_H_
OLDNEW
« no previous file with comments | « content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc ('k') | media/base/video_frame.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698