summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--frontend_svr.c12
-rw-r--r--tools/backgroundwriter.c24
-rw-r--r--tools/backgroundwriter.h16
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);
};