Exemplo n.º 1
0
bool PacketDataField::setOutputStream(ByteStreamPtr os, word first)
{
    outputstream = ByteStreamPtr(new ByteStream((os->stream + first), size(), os->isBigendian()));
    dataFieldHeader->setOutputStream(os, first);
    word sdfstart = first + dataFieldHeader->size();
    sourceDataField->setOutputStream(os, sdfstart);
    word tailstart = sdfstart;
    if(sourceDataField != 0)
        tailstart += sourceDataField->size();
    if(tail->size() != 0)
        tail->setOutputStream(os, tailstart);
    return true;
}
Exemplo n.º 2
0
bool PartOfPacket::setByteStream(ByteStreamPtr s)
{
    
	decoded = false;
    /// If NULL is passed it exits
    if(s == NULL) return true;

    if(size() > s->size())
        return false;


    if(!s->getMemAllocation())
        stream->setStream(s->stream, s->size(), s->isBigendian());

    /// The stream is assigned
    this->stream = s;
	
	//decode();
	return true;
}
Exemplo n.º 3
0
std::vector<ByteStreamPtr> createZlibBuffer(PacketBufferV* buff)
{
	std::vector<ByteStreamPtr> compbuff;
	for(int i=0; i<buff->size(); i++)
	{
		ByteStreamPtr rawPacket = buff->getNext();
		Packet *p = ps->getPacket(rawPacket);
#ifdef DEBUG
		if(p->getPacketID() == 0) {
			std::cerr << "No packet type recognized" << std::endl;
			continue;
		}
#endif
		ByteStreamPtr data = p->getData();

		z_stream defstream;
		defstream.zalloc = Z_NULL;
		defstream.zfree = Z_NULL;
		defstream.opaque = Z_NULL;
		defstream.avail_in = (uInt)data->size();
		defstream.next_in = (Bytef *)data->getStream();
		const size_t SIZEBUF = 400000;
		defstream.avail_out = (uInt) SIZEBUF;
		byte* outbuff = new byte[SIZEBUF];
		defstream.next_out = (Bytef *)outbuff;

		deflateInit(&defstream, COMPRESSION_LEVEL);
		deflate(&defstream, Z_FINISH);
		deflateEnd(&defstream);

		size_t compSize = ((unsigned char*) defstream.next_out - outbuff);
		ByteStreamPtr out = ByteStreamPtr(new ByteStream(outbuff, compSize, data->isBigendian()));
		compbuff.push_back(out);
	}

	return compbuff;
}
Exemplo n.º 4
0
void* decodePacket(void* buffin)
{
	PacketBufferV* buff = (PacketBufferV*) buffin;
	int npix_idx = 0;
	int nsamp_idx = 0;
	// load packet type (once per thread)
	PacketStream* ps;
	pthread_mutex_lock(&lockp);
	try {
		ps = new PacketStream(configFileName.c_str());
		Packet *p = ps->getPacketType("triggered_telescope1_30GEN");
		npix_idx = p->getPacketSourceDataField()->getFieldIndex("Number of pixels");
		nsamp_idx = p->getPacketSourceDataField()->getFieldIndex("Number of samples");
	} catch (PacketException* e)
	{
		cout << "Error during extractWavePacket: ";
		cout << e->geterror() << endl;
	}
	pthread_mutex_unlock(&lockp);
	
	ByteStreamPtr localBuffer[PACKET_NUM];
	int npix[PACKET_NUM];
	int nsamp[PACKET_NUM];
	for(int n=0; n<NTIMES; n++)
	{
		// copy PACKET_NUM packets data locally
		pthread_mutex_lock(&lockp);
		for(int m=0; m<PACKET_NUM; m++)
		{
			ByteStreamPtr rawPacket = buff->getNext();
			localBuffer[m] = rawPacket;
			
		}
		pthread_mutex_unlock(&lockp);
		
		for(int m=0; m<PACKET_NUM; m++)
		{
			ByteStreamPtr rawPacket = localBuffer[m];
			Packet *p = ps->getPacket(rawPacket);
			// get npixel and nsamples
			
			int npix = p->getPacketSourceDataField()->getFieldValue(npix_idx);
			int nsamp = p->getPacketSourceDataField()->getFieldValue(nsamp_idx);
			ByteStreamPtr data = p->getData();
#ifdef ARCH_BIGENDIAN
			if(!data->isBigendian())
				data->swapWord();
#else
			if(data->isBigendian())
				data->swapWord();
#endif
			sizeMB += (data->size() / 1000000.0);
			byte* rawdata = data->getStream();
			rawdata[0] = rand() % 100 + 50;
#ifdef DEBUG
			std::cout << "npixels " << npix << std::endl;
			std::cout << "nsamples " << nsamp << std::endl;
			std::cout << "data size " << data->size() << std::endl;
			std::cout << "tot size (MB) " << sizeMB << std::endl;
#endif
		}
	}
	delete ps;
	return 0;
}