139 lines
2.8 KiB
C
139 lines
2.8 KiB
C
|
/* 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
|
||
|
|