summaryrefslogtreecommitdiff
path: root/remux/ts2es.c
diff options
context:
space:
mode:
authorschmirl <schmirl>2009-06-29 06:25:27 +0000
committerschmirl <schmirl>2009-06-29 06:25:27 +0000
commit412c6982b6deba6089cc729704bebab784ef3313 (patch)
tree3ee2a9fa64c84d1e2afcf216529883de3da38a7a /remux/ts2es.c
parentcacd4b73d58ca7e3c8993174d37707cd034d94a9 (diff)
downloadvdr-plugin-streamdev-412c6982b6deba6089cc729704bebab784ef3313.tar.gz
vdr-plugin-streamdev-412c6982b6deba6089cc729704bebab784ef3313.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 - use 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: Tag: v0_4 CONTRIBUTORS HISTORY Makefile 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/livestreamer.c server/livestreamer.h server/streamer.c server/streamer.h Added Files: Tag: v0_4 remux/ts2pes.c remux/ts2pes.h
Diffstat (limited to 'remux/ts2es.c')
-rw-r--r--remux/ts2es.c14
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)