diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2004-10-16 09:36:28 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2004-10-16 09:36:28 +0200 |
commit | 6415cc900de3361925d22f879077be687fce3858 (patch) | |
tree | 98ab10cda016e125e33966e371ccfe01e5fd9bd1 /remux.h | |
parent | 15030f6acece1060f9736f875fe3abbcf9392263 (diff) | |
download | vdr-6415cc900de3361925d22f879077be687fce3858.tar.gz vdr-6415cc900de3361925d22f879077be687fce3858.tar.bz2 |
Improved buffer handling
Diffstat (limited to 'remux.h')
-rw-r--r-- | remux.h | 30 |
1 files changed, 20 insertions, 10 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.h 1.11 2004/02/14 10:40:41 kls Exp $ + * $Id: remux.h 1.12 2004/10/15 12:31:16 kls Exp $ */ #ifndef __REMUX_H @@ -12,6 +12,7 @@ #include <time.h> //XXX FIXME: DVB/linux/dvb/dmx.h should include <time.h> itself!!! #include <linux/dvb/dmx.h> +#include "ringbuffer.h" #include "tools.h" // Picture types: @@ -20,11 +21,6 @@ #define P_FRAME 2 #define B_FRAME 3 -// The minimum amount of video data necessary to identify frames: -#define MINVIDEODATA (16*1024) // just a safe guess (max. size of any frame block, plus some safety) - -#define RESULTBUFFERSIZE (MINVIDEODATA * 4) - class cTS2PES; class cRemux { @@ -35,16 +31,30 @@ private: int skipped; int vPid, aPid1, aPid2, dPid1, dPid2; cTS2PES *vTS2PES, *aTS2PES1, *aTS2PES2, *dTS2PES1, *dTS2PES2; - uchar resultBuffer[RESULTBUFFERSIZE]; - int resultCount; - int resultDelivered; + cRingBufferLinear *resultBuffer; + int resultSkipped; int GetPid(const uchar *Data); int GetPacketLength(const uchar *Data, int Count, int Offset); int ScanVideoPacket(const uchar *Data, int Count, int Offset, uchar &PictureType); public: cRemux(int VPid, int APid1, int APid2, int DPid1, int DPid2, bool ExitOnFailure = false); ~cRemux(); - uchar *Process(const uchar *Data, int &Count, int &Result, uchar *PictureType = NULL); + int Put(const uchar *Data, int Count); + ///< Puts at most Count bytes of Data into the remuxer. + ///< \return Returns the number of bytes actually consumed from Data. + uchar *Get(int &Count, uchar *PictureType = NULL); + ///< Gets all currently available data from the remuxer. + ///< \return Count contains the number of bytes the result points to, and + ///< PictureType (if not NULL) will contain one of NO_PICTURE, I_FRAME, P_FRAME + ///< or B_FRAME. + void Del(int Count); + ///< Deletes Count bytes from the remuxer. Count must be the number returned + ///< from a previous call to Get(). Several calls to Del() with fractions of + ///< a previously returned Count may be made, but the total sum of all Count + ///< values must be exactly what the previous Get() has returned. + void Clear(void); + ///< Clears the remuxer of all data it might still contain, keeping the PID + ///< settings as they are. static void SetBrokenLink(uchar *Data, int Length); }; |