diff options
-rw-r--r-- | frontend_svr.c | 12 | ||||
-rw-r--r-- | tools/backgroundwriter.c | 24 | ||||
-rw-r--r-- | tools/backgroundwriter.h | 16 |
3 files changed, 25 insertions, 27 deletions
diff --git a/frontend_svr.c b/frontend_svr.c index 0bb840b7..4eeb0ead 100644 --- a/frontend_svr.c +++ b/frontend_svr.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: frontend_svr.c,v 1.89 2010-03-13 12:04:29 phintuka Exp $ + * $Id: frontend_svr.c,v 1.90 2010-03-13 12:20:06 phintuka Exp $ * */ @@ -434,7 +434,7 @@ int cXinelibServer::Play(const uchar *data, int len, eStreamId StreamId) } else if(m_Writer[i]) { - int result = m_Writer[i]->Put(m_StreamPos, data, len); + int result = m_Writer[i]->Put(StreamId, m_StreamPos, data, len); if(!result) { LOGMSG("cXinelibServer::Play Write/Queue error (TCP/PIPE)"); CloseConnection(i); @@ -646,7 +646,7 @@ int cXinelibServer::Xine_Control_Sync(const char *cmd) if(m_bUdp[i]) UdpClients++; else if(m_Writer[i]) - m_Writer[i]->Put((uint64_t)(-1ULL), (const uchar*)buf, len); + m_Writer[i]->Put(sidControl, (-1ULL), (const uchar*)buf, len); } } @@ -991,7 +991,7 @@ void cXinelibServer::Handle_Control_PIPE(int cli, const char *arg) m_Writer[cli] = new cTcpWriter(fd); if (m_Header) - m_Writer[cli]->Put(0, m_Header, m_HeaderLength); + m_Writer[cli]->Put(sidVdr, 0, m_Header, m_HeaderLength); fd_data[cli] = fd; } @@ -1064,7 +1064,7 @@ void cXinelibServer::Handle_Control_DATA(int cli, const char *arg) m_Writer[cli] = new cTcpWriter(fd_data[cli]); if (m_Header) - m_Writer[cli]->Put(0, m_Header, m_HeaderLength); + m_Writer[cli]->Put(sidVdr, 0, m_Header, m_HeaderLength); /* not anymore control connection, so dec primary device reference counter */ cXinelibDevice::Instance().ForcePrimaryDevice(false); @@ -1339,7 +1339,7 @@ void cXinelibServer::Handle_Control_HTTP(int cli, const char *arg) m_Writer[cli] = new cRawWriter(fd_control[cli].handle(), KILOBYTE(1024)); if (m_Header) - m_Writer[cli]->Put(0, m_Header, m_HeaderLength); + m_Writer[cli]->Put(sidVdr, 0, m_Header, m_HeaderLength); DELETENULL(m_State[cli]); return; diff --git a/tools/backgroundwriter.c b/tools/backgroundwriter.c index 8016b3d1..da16c18c 100644 --- a/tools/backgroundwriter.c +++ b/tools/backgroundwriter.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: backgroundwriter.c,v 1.21 2010-03-12 22:43:18 phintuka Exp $ + * $Id: backgroundwriter.c,v 1.22 2010-03-13 12:20:05 phintuka Exp $ * */ @@ -181,13 +181,12 @@ void cTcpWriter::Action(void) if (StartPos > GetPos) { // we're at frame boundary // drop only data packets, not control messages - uint8_t *pkt = TCP_PAYLOAD(Data); - if (DATA_IS_PES(pkt) || DATA_IS_TS(pkt)) { + stream_tcp_header_t *header = (stream_tcp_header_t*)Data; + if (eStreamId(header->stream) == sidVdr) { Count = min(Count, (int)(StartPos - GetPos)); // size of next (complete) packet. // drop only one packet at time. - stream_tcp_header_t *header = (stream_tcp_header_t*)Data; int pkt_len = ntohl(header->len) + sizeof(stream_tcp_header_t); if (Count >= pkt_len) { // drop only complete packets. @@ -220,8 +219,7 @@ void cTcpWriter::Action(void) NextHeaderPos = GetPos + pkt_len; // check for control message - uint8_t *pkt = TCP_PAYLOAD(Data); - if (!DATA_IS_PES(pkt) && !DATA_IS_TS(pkt)) + if (eStreamId(header->stream) == sidControl) CorkReq = true; } else { @@ -253,13 +251,13 @@ void cTcpWriter::Action(void) m_RingBuffer.Clear(); } -int cTcpWriter::Put(uint64_t StreamPos, +int cTcpWriter::Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) { stream_tcp_header_t header; header.pos = htonull(StreamPos); header.len = htonl(DataCount); - header.stream = 0; + header.stream = (uint8_t)StreamId; return Put((uchar*)&header, sizeof(header), Data, DataCount); } @@ -388,10 +386,10 @@ void cRawWriter::Action(void) m_RingBuffer.Clear(); } -int cRawWriter::Put(uint64_t StreamPos, +int cRawWriter::Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) { - if (Running()) { + if (Running() && StreamId == sidVdr) { // Serialize Put access to keep Data and Header together LOCK_THREAD; @@ -438,7 +436,7 @@ void cTsWriter::Action(void) { } -int cTsWriter::Put(uint64_t StreamPos, const uchar *Data, int DataCount) +int cTsWriter::Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) { return 0; } @@ -463,7 +461,7 @@ void cRtspMuxWriter::Action(void) { } -int cRtspMuxWriter::Put(uint64_t StreamPos, const uchar *Data, int DataCount) +int cRtspMuxWriter::Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) { return 0; } @@ -491,7 +489,7 @@ void cRtspRemuxWriter::Action(void) { } -int cRtspRemuxWriter::Put(uint64_t StreamPos, const uchar *Data, int DataCount) +int cRtspRemuxWriter::Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) { return 0; } diff --git a/tools/backgroundwriter.h b/tools/backgroundwriter.h index d0ee5b30..d71e3d56 100644 --- a/tools/backgroundwriter.h +++ b/tools/backgroundwriter.h @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: backgroundwriter.h,v 1.6 2009-07-24 05:24:22 phintuka Exp $ + * $Id: backgroundwriter.h,v 1.7 2010-03-13 12:20:05 phintuka Exp $ * */ @@ -49,8 +49,8 @@ class cBackgroundWriterI : public cThread // Error: 0 (write error ; socket disconnected) // Buffer full: -Count (no bytes will be pushed to queue) // - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount) = 0; - + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount) = 0; + int Free(void); // Return largest possible Put size void Clear(void); // Drop all data (only complete frames) from buffer bool Flush(int TimeoutMs); // Flush buffer (wait for data to be sent) @@ -74,7 +74,7 @@ class cTcpWriter : public cBackgroundWriterI cTcpWriter(int fd, int Size = KILOBYTE(512)); virtual ~cTcpWriter() {}; - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount); + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount); }; @@ -92,7 +92,7 @@ class cRawWriter : public cBackgroundWriterI cRawWriter(int fd, int Size = KILOBYTE(512)); virtual ~cRawWriter() {}; - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount); + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount); }; @@ -109,7 +109,7 @@ class cTsWriter : public cBackgroundWriterI cTsWriter(int fd, int Size = KILOBYTE(512)); virtual ~cTsWriter() {}; - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount); + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount); }; @@ -130,7 +130,7 @@ class cRtspMuxWriter : public cBackgroundWriterI cRtspMuxWriter(int fd, int Size = KILOBYTE(512)); virtual ~cRtspMuxWriter() {}; - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount); + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount); }; @@ -154,7 +154,7 @@ class cRtspRemuxWriter : public cBackgroundWriterI cRtspRemuxWriter(int fd, int Size = KILOBYTE(512)); virtual ~cRtspRemuxWriter() {}; - virtual int Put(uint64_t StreamPos, const uchar *Data, int DataCount); + virtual int Put(eStreamId StreamId, uint64_t StreamPos, const uchar *Data, int DataCount); }; |