/*
* 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_PLANE_H
#define COMMON_VIDEO_PLANE_H
#include "webrtc/system_wrappers/interface/aligned_malloc.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
#include "webrtc/typedefs.h"
namespace webrtc {
// Helper class for I420VideoFrame: Store plane data and perform basic plane
// operations.
class Plane {
public:
Plane();
~Plane();
// CreateEmptyPlane - set allocated size, actual plane size and stride:
// If current size is smaller than current size, then a buffer of sufficient
// size will be allocated.
// Return value: 0 on success ,-1 on error.
int CreateEmptyPlane(int allocated_size, int stride, int plane_size);
// Copy the entire plane data.
// Return value: 0 on success ,-1 on error.
int Copy(const Plane& plane);
// Copy buffer: If current size is smaller
// than current size, then a buffer of sufficient size will be allocated.
// Return value: 0 on success ,-1 on error.
int Copy(int size, int stride, const uint8_t* buffer);
// Swap plane data.
void Swap(Plane& plane);
// Get allocated size.
int allocated_size() const {return allocated_size_;}
// Set actual size.
void ResetSize() {plane_size_ = 0;}
// Return true is plane size is zero, false if not.
bool IsZeroSize() const {return plane_size_ == 0;}
// Get stride value.
int stride() const {return stride_;}
// Return data pointer.
const uint8_t* buffer() const {return buffer_.get();}
// Overloading with non-const.
uint8_t* buffer() {return buffer_.get();}
private:
// Resize when needed: If current allocated size is less than new_size, buffer
// will be updated. Old data will be copied to new buffer.
// Return value: 0 on success ,-1 on error.
int MaybeResize(int new_size);
scoped_ptr<uint8_t, AlignedFreeDeleter> buffer_;
int allocated_size_;
int plane_size_;
int stride_;
}; // Plane
} // namespace webrtc
#endif // COMMON_VIDEO_PLANE_H