| /* |
| * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef COMMON_VIDEO_INTERFACE_I420_VIDEO_FRAME_H |
| #define COMMON_VIDEO_INTERFACE_I420_VIDEO_FRAME_H |
| |
| // I420VideoFrame class |
| // |
| // Storing and handling of YUV (I420) video frames. |
| |
| #include "common_video/plane.h" |
| #include "typedefs.h" //NOLINT |
| |
| namespace webrtc { |
| |
| enum PlaneType { |
| kYPlane = 0, |
| kUPlane = 1, |
| kVPlane = 2, |
| KNumOfPlanes = 3 |
| }; |
| |
| class I420VideoFrame { |
| public: |
| I420VideoFrame(); |
| ~I420VideoFrame(); |
| |
| // CreateEmptyFrame: Sets frame dimensions and allocates buffers based |
| // on set dimensions - height and plane stride. |
| // If required size is bigger than the allocated one, new buffers of adequate |
| // size will be allocated. |
| // Return value: 0 on success ,-1 on error. |
| int CreateEmptyFrame(int width, int height, |
| int stride_y, int stride_u, int stride_v); |
| |
| // CreateFrame: Sets the frame's members and buffers. If required size is |
| // bigger than allocated one, new buffers of adequate size will be allocated. |
| // Return value: 0 on success ,-1 on error. |
| int CreateFrame(int size_y, const uint8_t* buffer_y, |
| int size_u, const uint8_t* buffer_u, |
| int size_v, const uint8_t* buffer_v, |
| int width, int height, |
| int stride_y, int stride_u, int stride_v); |
| |
| // Copy frame: If required size is bigger than allocated one, new buffers of |
| // adequate size will be allocated. |
| // Return value: 0 on success ,-1 on error. |
| int CopyFrame(const I420VideoFrame& videoFrame); |
| |
| // Swap Frame. |
| void SwapFrame(I420VideoFrame* videoFrame); |
| |
| // Get pointer to buffer per plane. |
| uint8_t* buffer(PlaneType type); |
| // Overloading with const. |
| const uint8_t* buffer(PlaneType type) const; |
| |
| // Get allocated size per plane. |
| int allocated_size(PlaneType type) const; |
| |
| // Get allocated stride per plane. |
| int stride(PlaneType type) const; |
| |
| // Set frame width. |
| int set_width(int width); |
| |
| // Set frame height. |
| int set_height(int height); |
| |
| // Get frame width. |
| int width() const {return width_;} |
| |
| // Get frame height. |
| int height() const {return height_;} |
| |
| // Set frame timestamp (90kHz). |
| void set_timestamp(const uint32_t timestamp) {timestamp_ = timestamp;} |
| |
| // Get frame timestamp (90kHz). |
| uint32_t timestamp() const {return timestamp_;} |
| |
| // Set render time in miliseconds. |
| void set_render_time_ms(int64_t render_time_ms) {render_time_ms_ = |
| render_time_ms;} |
| |
| // Get render time in miliseconds. |
| int64_t render_time_ms() const {return render_time_ms_;} |
| |
| // Return true if underlying plane buffers are of zero size, false if not. |
| bool IsZeroSize(); |
| |
| // Reset underlying plane buffers sizes to 0. This function doesn't |
| // clear memory. |
| void ResetSize(); |
| |
| private: |
| // Verifies legality of parameters. |
| // Return value: 0 on success ,-1 on error. |
| int CheckDimensions(int width, int height, |
| int stride_y, int stride_u, int stride_v); |
| // Get the pointer to a specific plane. |
| const Plane* GetPlane(PlaneType type) const; |
| // Overloading with non-const. |
| Plane* GetPlane(PlaneType type); |
| |
| Plane y_plane_; |
| Plane u_plane_; |
| Plane v_plane_; |
| int width_; |
| int height_; |
| uint32_t timestamp_; |
| int64_t render_time_ms_; |
| }; // I420VideoFrame |
| |
| } // namespace webrtc |
| |
| #endif // COMMON_VIDEO_INTERFACE_I420_VIDEO_FRAME_H |
| |