diff options
author | schmirl <schmirl> | 2009-06-19 06:32:38 +0000 |
---|---|---|
committer | schmirl <schmirl> | 2009-06-19 06:32:38 +0000 |
commit | 008e7c851013722a377aa9ff4485d4af2d991883 (patch) | |
tree | 8178a3251d528849d2ccbb0cef9b1bd712cfd6f9 /remux/ts2es.c | |
parent | 64ff2c08be769cf227ac6cf2e318fcb6b80c9689 (diff) | |
download | vdr-plugin-streamdev-008e7c851013722a377aa9ff4485d4af2d991883.tar.gz vdr-plugin-streamdev-008e7c851013722a377aa9ff4485d4af2d991883.tar.bz2 |
- added namespace to remuxers
- increased WRITERBUFSIZE - buffer was too small for high bandwidth content
- removed cStreamdevStreamer::m_Running
- eliminated potential busy waits in remuxers
- updated cTSRemux static helpers to code of their VDR 1.6.0 counterparts
- re-enabled PES vor VDR 1.7.3+. Streamdev now uses a copy of VDR 1.6.0's
cRemux for TS to PES remuxing.
- make sure that only complete TS packets are written to ringbuffers
- use signaling instead of sleeps when writing to ringbuffers
- optimized cStreamdevPatFilter PAT packet initialization
- fixed cStreamdevPatFilter not processing PATs with length > TS_SIZE - 5
- use a small ringbuffer for cStreamdevPatFilter instead of writing to
cStreamdevStreamers SendBuffer as two threads mustn't write to the same
ringbuffer
Modified Files:
CONTRIBUTORS HISTORY Makefile common.c common.h
streamdev-server.c libdvbmpeg/transform.h remux/extern.c
remux/extern.h remux/ts2es.c remux/ts2es.h remux/ts2ps.c
remux/ts2ps.h remux/tsremux.c remux/tsremux.h
server/connectionHTTP.c server/connectionVTP.c
server/livestreamer.c server/livestreamer.h server/menuHTTP.c
server/streamer.c server/streamer.h
Added Files:
remux/ts2pes.c remux/ts2pes.h
Diffstat (limited to 'remux/ts2es.c')
-rw-r--r-- | remux/ts2es.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/remux/ts2es.c b/remux/ts2es.c index 3476e24..6ff4e87 100644 --- a/remux/ts2es.c +++ b/remux/ts2es.c @@ -1,12 +1,13 @@ #include "remux/ts2es.h" #include "server/streamer.h" -#include "libdvbmpeg/transform.h" #include "common.h" #include <vdr/device.h> // from VDR's remux.c #define MAXNONUSEFULDATA (10*1024*1024) +namespace Streamdev { + class cTS2ES: public ipack { friend void PutES(uint8_t *Buffer, int Size, void *Data); @@ -32,6 +33,9 @@ void PutES(uint8_t *Buffer, int Size, void *Data) This->start = 1; } +} // namespace Streamdev +using namespace Streamdev; + cTS2ES::cTS2ES(cRingBufferLinear *ResultBuffer) { m_ResultBuffer = ResultBuffer; @@ -75,10 +79,10 @@ void cTS2ES::PutTSPacket(const uint8_t *Buffer) { cTS2ESRemux::cTS2ESRemux(int Pid): m_Pid(Pid), - m_ResultBuffer(new cRingBufferLinear(WRITERBUFSIZE, IPACKS)), + m_ResultBuffer(new cStreamdevBuffer(WRITERBUFSIZE, IPACKS)), m_Remux(new cTS2ES(m_ResultBuffer)) { - m_ResultBuffer->SetTimeouts(0, 100); + m_ResultBuffer->SetTimeouts(100, 100); } cTS2ESRemux::~cTS2ESRemux() @@ -111,8 +115,10 @@ int cTS2ESRemux::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 cTS2ES might write one full packet and also a small rest + } int pid = cTSRemux::GetPid(Data + i + 1); if (Data[i + 3] & 0x10) { // got payload if (m_Pid == pid) |