now there's a common baseclass for all remuxers, make use of it

Modified Files:
 Tag: v0_4
	HISTORY remux/ts2pes.c remux/ts2pes.h remux/tsremux.h
	server/livestreamer.c server/livestreamer.h
This commit is contained in:
schmirl
2009-06-30 06:03:15 +00:00
parent 412c6982b6
commit abb8e80033
6 changed files with 39 additions and 113 deletions

View File

@@ -10,7 +10,7 @@
* The cRepacker family's code was originally written by Reinhard Nissl <rnissl@gmx.de>,
* and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de.
*
* $Id: ts2pes.c,v 1.1.2.2 2009/06/29 06:25:28 schmirl Exp $
* $Id: ts2pes.c,v 1.1.2.3 2009/06/30 06:03:16 schmirl Exp $
*/
#include "remux/ts2pes.h"
@@ -1907,7 +1907,7 @@ int cTS2PESRemux::Put(const uchar *Data, int Count)
return used;
}
uchar *cTS2PESRemux::Get(int &Count, uchar *PictureType)
uchar *cTS2PESRemux::Get(int &Count)
{
// Remove any previously skipped data from the result buffer:
@@ -1916,18 +1916,8 @@ uchar *cTS2PESRemux::Get(int &Count, uchar *PictureType)
resultSkipped = 0;
}
#if 0
// Test recording without determining the real frame borders:
if (PictureType)
*PictureType = I_FRAME;
return resultBuffer->Get(Count);
#endif
// Check for frame borders:
if (PictureType)
*PictureType = NO_PICTURE;
Count = 0;
uchar *resultData = NULL;
int resultCount = 0;
@@ -1948,8 +1938,6 @@ uchar *cTS2PESRemux::Get(int &Count, uchar *PictureType)
}
else if (!synced) {
if (pt == I_FRAME) {
if (PictureType)
*PictureType = pt;
resultSkipped = i; // will drop everything before this position
cTSRemux::SetBrokenLink(data + i, l);
synced = true;
@@ -1957,8 +1945,6 @@ uchar *cTS2PESRemux::Get(int &Count, uchar *PictureType)
}
else if (Count)
return resultData;
else if (PictureType)
*PictureType = pt;
}
}
else { //if (AUDIO_STREAM_S <= StreamType && StreamType <= AUDIO_STREAM_E || StreamType == PRIVATE_STREAM1) {
@@ -1967,15 +1953,11 @@ uchar *cTS2PESRemux::Get(int &Count, uchar *PictureType)
return resultData;
if (noVideo) {
if (!synced) {
if (PictureType)
*PictureType = I_FRAME;
resultSkipped = i; // will drop everything before this position
synced = true;
}
else if (Count)
return resultData;
else if (PictureType)
*PictureType = I_FRAME;
}
}
if (synced) {

View File

@@ -4,7 +4,7 @@
* This file is based on a copy of remux.h from Klaus Schmidinger's
* VDR, version 1.6.0.
*
* $Id: ts2pes.h,v 1.2.2.2 2009/06/29 06:25:28 schmirl Exp $
* $Id: ts2pes.h,v 1.2.2.3 2009/06/30 06:03:16 schmirl Exp $
*/
#ifndef VDR_STREAMDEV_TS2PES_H
@@ -38,11 +38,9 @@ public:
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);
uchar *Get(int &Count);
///< 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

View File

@@ -14,6 +14,10 @@ namespace Streamdev {
class cTSRemux {
public:
virtual int Put(const uchar *Data, int Count) = 0;
virtual uchar *Get(int &Count) = 0;
virtual void Del(int Count) = 0;
static void SetBrokenLink(uchar *Data, int Length);
static int GetPid(const uchar *Data);
static int GetPacketLength(const uchar *Data, int Count, int Offset);