obs-studio/build_dependencies/aja/include/ajalibraries/ajabase/common/buffer.h

139 lines
2.8 KiB
C
Raw Normal View History

2023-03-04 18:33:16 +01:00
/* SPDX-License-Identifier: MIT */
/**
@file buffer.h
@brief Implementation of AJABuffer class.
@copyright (C) 2010-2021 AJA Video Systems, Inc. All rights reserved.
**/
#ifndef AJA_BUFFER_H
#define AJA_BUFFER_H
#include "public.h"
/**
* Class that represents a memory buffer.
*/
class AJA_EXPORT AJABuffer
{
public:
AJABuffer();
virtual ~AJABuffer();
/**
* Attach a preallocated buffer.
*
* @param[in] pBuffer Address of the memory to attach.
* @param[in] size Size of the memory region.
* @return AJA_STATUS_SUCCESS Buffer successfully attached
* AJA_STATUS_FAIL Attach failed
*/
AJAStatus AttachBuffer(uint8_t* pBuffer, size_t size);
/**
* Allocate memory from the system.
*
* @param[in] size Size of the memory buffer.
* @param[in] alignment Memory buffer alignment in bytes.
* @param[in] pName Name of shared memory buffer to attach.
* @return AJA_STATUS_SUCCESS Buffer successfully allocated
* AJA_STATUS_FAIL Allocation failed
*/
AJAStatus AllocateBuffer(size_t size, size_t alignment = 0, char* pName = NULL);
/**
* Free allocated memory back to the system
*
* @return AJA_STATUS_SUCCESS Buffer successfully freed
* AJA_STATUS_FAIL Free failed
*/
AJAStatus FreeBuffer();
/**
* Get the buffer address.
*
* @return Address of the buffer.
*/
uint8_t* GetBuffer();
uint32_t* GetUINT32Buffer();
/**
* Get the buffer size.
*
* @return Size of the buffer.
*/
size_t GetBufferSize();
/**
* Get the buffer alignment.
*
* @return Alignment of the buffer in bytes.
*/
size_t GetBufferAlignment();
/**
* Get the name of the shared buffer.
*
* @return Name of the shared buffer, NULL if not shared.
*/
const char* GetBufferName();
/**
* Set the offset of the data in the buffer.
*
* @param[in] offset Offset of the data.
* @return AJA_STATUS_SUCCESS Data offset set
* AJA_STATUS_RANGE Data offset + data size > buffer size
*/
AJAStatus SetDataOffset(size_t offset);
/**
* Get the offset of the data in the buffer.
*
* @return Offset of the data.
*/
size_t GetDataOffset();
/**
* Set the size of the data region in the buffer
*
* @param[in] size Size of the data.
* @return AJA_STATUS_SUCCESS Size set
* AJA_STATUS_RANGE Data offset + data size > buffer size
*/
AJAStatus SetDataSize(size_t size);
/**
* Get the size of the data region in the buffer.
*
* @return Size of the data.
*/
size_t GetDataSize();
/**
* Get the address of the data region in the buffer.
*
* @return Address of the data.
*/
uint8_t* GetData();
private:
void ComputeAlignment();
uint8_t* mpAllocate;
size_t mAllocateSize;
size_t mAllocateAlignment;
char* mpAllocateName;
uint8_t* mpBuffer;
size_t mBufferSize;
size_t mBufferAlignment;
size_t mDataOffset;
size_t mDataSize;
};
#endif