diff options
author | Frank Schmirler <vdr@schmirler.de> | 2010-12-02 09:44:53 +0100 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2010-12-02 09:44:53 +0100 |
commit | 008ea7f151dd84b314062a272ad61448f51df605 (patch) | |
tree | f239ede406d0c0bb1bf5e9d2b08a37027c14e635 /remux/ts2ps.c | |
parent | 7254a6752808830d5fc133e5362da6c47f3f84ff (diff) | |
download | vdr-plugin-streamdev-008ea7f151dd84b314062a272ad61448f51df605.tar.gz vdr-plugin-streamdev-008ea7f151dd84b314062a272ad61448f51df605.tar.bz2 |
Snapshot 2009-07-01
Diffstat (limited to 'remux/ts2ps.c')
-rw-r--r-- | remux/ts2ps.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/remux/ts2ps.c b/remux/ts2ps.c index d0d08cf..2a97dee 100644 --- a/remux/ts2ps.c +++ b/remux/ts2ps.c @@ -3,6 +3,8 @@ #include <vdr/channels.h> #include <vdr/device.h> +namespace Streamdev { + class cTS2PS { friend void PutPES(uint8_t *Buffer, int Size, void *Data); @@ -28,6 +30,9 @@ void PutPES(uint8_t *Buffer, int Size, void *Data) esyslog("ERROR: result buffer overflow, dropped %d out of %d byte", Size - n, Size); } +} // namespace Streamdev +using namespace Streamdev; + cTS2PS::cTS2PS(cRingBufferLinear *ResultBuffer, int Pid, uint8_t AudioCid) { m_ResultBuffer = ResultBuffer; @@ -74,13 +79,13 @@ void cTS2PS::PutTSPacket(const uint8_t *Buffer) cTS2PSRemux::cTS2PSRemux(int VPid, const int *APids, const int *DPids, const int *SPids): m_NumTracks(0), - m_ResultBuffer(new cRingBufferLinear(WRITERBUFSIZE, IPACKS)), + m_ResultBuffer(new cStreamdevBuffer(WRITERBUFSIZE, IPACKS)), m_ResultSkipped(0), m_Skipped(0), m_Synced(false), m_IsRadio(VPid == 0 || VPid == 1 || VPid == 0x1FFF) { - m_ResultBuffer->SetTimeouts(0, 100); + m_ResultBuffer->SetTimeouts(100, 100); if (VPid) m_Remux[m_NumTracks++] = new cTS2PS(m_ResultBuffer, VPid); @@ -124,8 +129,10 @@ int cTS2PSRemux::Put(const uchar *Data, int Count) break; if (Data[i] != TS_SYNC_BYTE) break; - if (m_ResultBuffer->Free() < 2 * IPACKS) + if (m_ResultBuffer->Free() < 2 * IPACKS) { + m_ResultBuffer->WaitForPut(); break; // A cTS2PS might write one full packet and also a small rest + } int pid = GetPid(Data + i + 1); if (Data[i + 3] & 0x10) { // got payload for (int t = 0; t < m_NumTracks; t++) { |