haiku/headers/os/media/Buffer.h

109 lines
2.5 KiB
C++

/*******************************************************************************
/
/ File: Buffer.h
/
/ Description: A BBuffer is a container of media data in the Media Kit
/
/ Copyright 1997-98, Be Incorporated, All Rights Reserved
/
*******************************************************************************/
#if !defined(_BUFFER_H)
#define _BUFFER_H
#include <MediaDefs.h>
/*** A BBuffer is not the same thing as the area segment that gets cloned ***/
/*** For each buffer that gets created, a BBuffer object is created to represent ***/
/*** it in each participant address space. ***/
struct _shared_buffer_list;
struct buffer_clone_info {
buffer_clone_info();
~buffer_clone_info();
media_buffer_id buffer;
area_id area;
size_t offset;
size_t size;
int32 flags;
private:
uint32 _reserved_[4];
};
class BBuffer
{
public:
void * Data(); /* returns NULL if buffer not correctly initialized */
size_t SizeAvailable(); // total size of buffer (how much data can it hold)
size_t SizeUsed(); // how much was written (how much data does it hold)
void SetSizeUsed(
size_t size_used);
uint32 Flags();
void Recycle();
buffer_clone_info CloneInfo() const;
media_buffer_id ID(); /* 0 if not registered */
media_type Type();
media_header * Header();
media_audio_header * AudioHeader();
media_video_header * VideoHeader();
enum { /* for flags */
B_F1_BUFFER = 0x1,
B_F2_BUFFER = 0x2,
B_SMALL_BUFFER = 0x80000000
};
size_t Size(); // deprecated; use SizeAvailable()
private:
friend struct _buffer_id_cache;
friend struct _shared_buffer_list;
friend class BMediaRoster;
friend class BBufferProducer;
friend class BBufferConsumer; /* for buffer receiving */
friend class BBufferGroup;
friend class BSmallBuffer;
explicit BBuffer(const buffer_clone_info & info);
~BBuffer(); /* BBuffer is NOT a virtual class!!! */
BBuffer(); /* not implemented */
BBuffer(const BBuffer & clone); /* not implemented */
BBuffer & operator=(const BBuffer & clone); /* not implemented */
void SetHeader(const media_header *header);
media_header fMediaHeader;
_shared_buffer_list * fBufferList;
area_id fArea;
void * fData;
size_t fOffset;
size_t fSize;
media_buffer_id fBufferID;
int32 fFlags;
uint32 _reserved_buffer_[11];
};
class BSmallBuffer : public BBuffer
{
public:
BSmallBuffer();
static size_t SmallBufferSizeLimit();
};
#endif /* _BUFFER_H */