Ejemplo n.º 1
0
int32_t coolapi_read(int32_t fd, unsigned char * buffer, uint32_t len)
{
	int32_t result;
	uint32_t done = 0, toread;
	unsigned char * buff = &buffer[0];

	dmx_t * dmx = find_demux(fd, 0);
	if(!dmx) {
		cs_debug_mask(D_DVBAPI, "dmx is NULL!");
		return 0;
	}
	cs_debug_mask(D_DVBAPI, "dmx channel %x pid %x len %d",  (int) dmx->channel, dmx->pid, len);

	result = cnxt_cbuf_read_data(dmx->buffer2, buff, 3, &done);
	check_error ("cnxt_cbuf_read_data", result);

	if(done != 3)
		return 0;

	toread = ((buff[1] << 8) | buff[2]) & 0xFFF;
	if((toread+3) > len)
		return 0;
	result = cnxt_cbuf_read_data(dmx->buffer2, buff+3, toread, &done);
	check_error ("cnxt_cbuf_read_data", result);
	if(done != toread)
		return 0;
	done += 3;

	cs_debug_mask(D_DVBAPI, "bytes read %d\n", done);
	return done;
}
Ejemplo n.º 2
0
int32_t coolapi_read(dmx_t *dmx, dmx_callback_data_t *data)
{
	if(!dmx)
	{
		cs_debug_mask(D_DVBAPI, "dmx is NULL!");
		return -1;
	}

	int32_t result;
	uint32_t done = 0, toread, len = data->len;
	uchar *buff = &dmx->buffer[0];
	uint32_t bytes_used = 0;

	//cs_debug_mask(D_DVBAPI, "dmx channel %x pid %x len %d",  (int) dmx->channel, dmx->pid, len);

	result = cnxt_cbuf_get_used(data->buf, &bytes_used);
	coolapi_check_error("cnxt_cbuf_get_used", result);
	if(bytes_used == 0)
		{ return -1; }

	result = cnxt_cbuf_read_data(data->buf, buff, 3, &done);
	coolapi_check_error("cnxt_cbuf_read_data", result);

	if(done != 3)
		{ return -1; }

	toread = ((buff[1] << 8) | buff[2]) & 0xFFF;
	if((toread + 3) > len)
		{ return -1; }
	result = cnxt_cbuf_read_data(data->buf, buff + 3, toread, &done);
	coolapi_check_error("cnxt_cbuf_read_data", result);
	if(done != toread)
		{ return -1; }
	done += 3;

	//cs_debug_mask(D_DVBAPI, "bytes read %d\n", done);

	return 0;
}