Exemple #1
0
static int writeData(void *_call)
{
	WriterAVCallData_t *call = (WriterAVCallData_t *) _call;

	int len = 0;

	wma_printf(10, "\n");

	if (call == NULL)
	{
		wma_err("call data is NULL...\n");
		return 0;
	}

	wma_printf(10, "AudioPts %lld\n", call->Pts);

	if ((call->data == NULL) || (call->len <= 0))
	{
		wma_err("parsing NULL Data. ignoring...\n");
		return 0;
	}

	if (call->fd < 0)
	{
		wma_err("file pointer < 0. ignoring ...\n");
		return 0;
	}

	if (initialHeader)
	{

		unsigned char  PesHeader[PES_MAX_HEADER_SIZE];

		if ((call->private_size <= 0) || (call->private_data == NULL))
		{
			wma_err("private NULL.\n");
			return -1;
		}

		struct iovec iov[2];
		iov[0].iov_base = PesHeader;
		iov[0].iov_len = InsertPesHeader(PesHeader, call->private_size, MPEG_AUDIO_PES_START_CODE, 0, 0);
		iov[1].iov_base = call->private_data;
		iov[1].iov_len = call->private_size;

		len = writev(call->fd, iov, 2);

		initialHeader = 0;
	}

	if (len > -1 && call->len > 0 && call->data)
	{
		unsigned char  PesHeader[PES_MAX_HEADER_SIZE];

		struct iovec iov[2];
		iov[0].iov_base = PesHeader;
		iov[0].iov_len = InsertPesHeader(PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, call->Pts, 0);
		iov[1].iov_base = call->data;
		iov[1].iov_len = call->len;

		ssize_t l = writev(call->fd, iov, 2);
		if (l > -1)
			len += l;
		else
			len = l;
	}

	wma_printf(10, "wma < %d\n", len);

	return len;
}
Exemple #2
0
static int writeData(void* _call)
{
	WriterAVCallData_t* call = (WriterAVCallData_t*) _call;

	int len = 0;

	wma_printf(10, "\n");

	if (call == NULL)
	{
		wma_err("call data is NULL...\n");
		return 0;
	}

	wma_printf(10, "AudioPts %lld\n", call->Pts);

	if ((call->data == NULL) || (call->len <= 0))
	{
		wma_err("parsing NULL Data. ignoring...\n");
		return 0;
	}

	if (call->fd < 0)
	{
		wma_err("file pointer < 0. ignoring ...\n");
		return 0;
	}

	if (initialHeader) 
	{

		unsigned char  PesHeader[PES_MAX_HEADER_SIZE];
		int HeaderLength;

		if ((call->private_size <= 0) || (call->private_data == NULL))
		{
			wma_err("private NULL.\n");
			return -1;
		}

		HeaderLength = InsertPesHeader (PesHeader, call->private_size, MPEG_AUDIO_PES_START_CODE, 0, 0);

		unsigned char* PacketStart = malloc(call->private_size + HeaderLength);
		memcpy (PacketStart, PesHeader, HeaderLength);
		memcpy (PacketStart + HeaderLength, call->private_data, call->private_size);

		len = write(call->fd, PacketStart, call->private_size + HeaderLength);

		free(PacketStart);

		initialHeader = 0;
	}

	if (call->len > 0 && call->data)
	{
		unsigned char  PesHeader[PES_MAX_HEADER_SIZE];

		int HeaderLength = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, call->Pts, 0);

		unsigned char* PacketStart = malloc(call->len + HeaderLength);
		memcpy (PacketStart, PesHeader, HeaderLength);
		memcpy (PacketStart + HeaderLength, call->data, call->len);

		len = write(call->fd, PacketStart, call->len + HeaderLength);

		free(PacketStart);
	}

	wma_printf(10, "wma < %d\n", len);

	return len;
}