diff options
Diffstat (limited to 'tools/backgroundwriter.c')
-rw-r--r-- | tools/backgroundwriter.c | 24 |
1 files changed, 11 insertions, 13 deletions
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; } |