vdr  2.2.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
cTSBuffer Class Reference

#include <device.h>

Collaboration diagram for cTSBuffer:
[legend]

Public Member Functions

 cTSBuffer (int File, int Size, int CardIndex)
 
virtual ~cTSBuffer ()
 
ucharGet (int *Available=NULL)
 
void Skip (int Count)
 
- Public Member Functions inherited from cThread
 cThread (const char *Description=NULL, bool LowPriority=false)
 
virtual ~cThread ()
 
void SetDescription (const char *Description,...) __attribute__((format(printf
 
void bool Start (void)
 
bool Active (void)
 

Private Member Functions

virtual void Action (void)
 

Private Attributes

int f
 
int cardIndex
 
bool delivered
 
cRingBufferLinearringBuffer
 

Additional Inherited Members

- Static Public Member Functions inherited from cThread
static tThreadId ThreadId (void)
 
static tThreadId IsMainThread (void)
 
static void SetMainThreadId (void)
 
- Protected Member Functions inherited from cThread
void SetPriority (int Priority)
 
void SetIOPriority (int Priority)
 
void Lock (void)
 
void Unlock (void)
 
bool Running (void)
 
void Cancel (int WaitSeconds=0)
 

Detailed Description

Derived cDevice classes that can receive channels will have to provide Transport Stream (TS) packets one at a time.

cTSBuffer implements a simple buffer that allows the device to read a larger amount of data from the driver with each call to Read(), thus avoiding the overhead of getting each TS packet separately from the driver. It also makes sure the returned data points to a TS packet and automatically re-synchronizes after broken packets.

Definition at line 856 of file device.h.

Constructor & Destructor Documentation

cTSBuffer::cTSBuffer ( int  File,
int  Size,
int  CardIndex 
)
cTSBuffer::~cTSBuffer ( )
virtual

Definition at line 1829 of file device.c.

References cThread::Cancel().

Member Function Documentation

void cTSBuffer::Action ( void  )
privatevirtual

A derived cThread class must implement the code it wants to execute as a separate thread in this function.

If this is a loop, it must check Running() repeatedly to see whether it's time to stop.

Implements cThread.

Definition at line 1835 of file device.c.

References cDevice::cardIndex, esyslog, FATALERRNO, LOG_ERROR, cPoller::Poll(), and cThread::Running().

uchar * cTSBuffer::Get ( int *  Available = NULL)

Returns a pointer to the first TS packet in the buffer.

If Available is given, it will return the total number of consecutive bytes pointed to in the buffer. It is guaranteed that the returned pointer points to a TS_SYNC_BYTE and that there are at least TS_SIZE bytes in the buffer. Otherwise NULL will be returned and the value in Available (if given) is undefined. Each call to Get() returns a pointer to the next TS packet in the buffer.

Definition at line 1857 of file device.c.

References cDevice::cardIndex, esyslog, TS_SIZE, and TS_SYNC_BYTE.

Referenced by cDvbDevice::GetTSPacket().

void cTSBuffer::Skip ( int  Count)

If after a call to Get() more or less than TS_SIZE of the available data has been processed, a call to Skip() with the number of processed bytes will disable the automatic incrementing of the data pointer as described in Get() and skip the given number of bytes instead.

Count may be 0 if the caller wants the previous TS packet to be delivered again in the next call to Get().

Definition at line 1885 of file device.c.

Referenced by cDvbDevice::GetTSPacket().

Member Data Documentation

int cTSBuffer::cardIndex
private

Definition at line 859 of file device.h.

bool cTSBuffer::delivered
private

Definition at line 860 of file device.h.

int cTSBuffer::f
private

Definition at line 858 of file device.h.

cRingBufferLinear* cTSBuffer::ringBuffer
private

Definition at line 861 of file device.h.


The documentation for this class was generated from the following files: