mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	Modified Files: Tag: v0_4 CONTRIBUTORS HISTORY Makefile README i18n.c server/component.c server/component.h server/connection.c server/connection.h server/livefilter.c server/server.c server/setup.c server/setup.h server/streamer.c server/streamer.h streamdev/streamdevhosts.conf tools/socket.c tools/socket.h Added Files: Tag: v0_4 patches/vdr-cap_net_raw.diff server/componentIGMP.c server/componentIGMP.h server/connectionIGMP.c server/connectionIGMP.h
		
			
				
	
	
		
			39 lines
		
	
	
		
			935 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			935 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  $Id: livefilter.c,v 1.5.2.1 2009/02/13 10:39:42 schmirl Exp $
 | |
|  */
 | |
| 
 | |
| #include "server/livefilter.h"
 | |
| #include "server/streamer.h"
 | |
| #include "common.h"
 | |
| 
 | |
| #ifndef TS_SYNC_BYTE
 | |
| #    define TS_SYNC_BYTE     0x47
 | |
| #endif
 | |
| 
 | |
| cStreamdevLiveFilter::cStreamdevLiveFilter(cStreamdevStreamer *Streamer) {
 | |
| 	m_Streamer = Streamer;
 | |
| }
 | |
| 
 | |
| void cStreamdevLiveFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length) 
 | |
| {
 | |
| 	uchar buffer[TS_SIZE];
 | |
| 	int length = Length;
 | |
| 	int pos = 0;
 | |
| 
 | |
| 	while (length > 0) {
 | |
| 		int chunk = min(length, TS_SIZE - 5);
 | |
| 		buffer[0] = TS_SYNC_BYTE;
 | |
| 		buffer[1] = ((Pid >> 8) & 0x3f) | (pos==0 ? 0x40 : 0); /* bit 6: payload unit start indicator (PUSI) */
 | |
| 		buffer[2] = Pid & 0xff;
 | |
| 		buffer[3] = Tid;
 | |
| 		buffer[4] = (uchar)chunk;
 | |
| 		memcpy(buffer + 5, Data + pos, chunk);
 | |
| 		length -= chunk;
 | |
| 		pos += chunk;
 | |
| 
 | |
| 		int p = m_Streamer->Put(buffer, TS_SIZE);
 | |
| 		if (p != TS_SIZE)
 | |
| 			m_Streamer->ReportOverflow(TS_SIZE - p);
 | |
| 	}
 | |
| }
 |