void CJsonOverUTTPWriter::SendMessage(const CJsonNode& root_node)
{
    _ASSERT(m_OutputStack.empty());

    m_CurrentOutputNode.m_Node = root_node;
    m_CurrentOutputNode.m_ArrayIterator =
        m_CurrentOutputNode.m_Node.GetArray().begin();

    m_SendHashValue = false;

    while (ContinueWithReply())
        SendOutputBuffer();

    SendOutputBuffer();
}
Beispiel #2
0
OMX_ERRORTYPE VideoSource::ProcessDataBuffer()
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;

	LOG_DEBUG("VideoSource port number: %d\n", ports[CAPTURED_FRAME_PORT]->BufferNum());
	if (bSendEOS == OMX_TRUE || ports[CAPTURED_FRAME_PORT]->BufferNum() <= 0)
		return OMX_ErrorNoMore;

    ports[CAPTURED_FRAME_PORT]->GetBuffer(&pOutBufferHdr);
    if(pOutBufferHdr != NULL) {
        ret = SendBufferToDevice();
        if (ret != OMX_ErrorNone)
        {
            LOG_ERROR("Send buffer to device fail.\n");
            return ret;
        }
    }

	ret = GetOneFrameFromDevice();
	if (ret != OMX_ErrorNone)
		return ret;
	ret = ProcessOutputBufferFlag();
	if (ret != OMX_ErrorNone)
		return ret;
	ret = ProcessPreviewPort();
	if (ret != OMX_ErrorNone)
		return ret;
	ret = SendOutputBuffer();
	if (ret != OMX_ErrorNone)
		return ret;

	return OMX_ErrorNone;
}
Beispiel #3
0
int FPD_SendData(void *data, char *channelData, int channelCount)
{
	LogDebug(VB_CHANNELDATA, "FPD_SendData(%p, %p, %d)\n",
		data, channelData, channelCount);

	FPDPrivData *privData = (FPDPrivData *)data;

	if (channelCount > PIXELNET_DMX_DATA_SIZE)
	{
		LogErr(VB_CHANNELOUT,
			"FPD_SendData() tried to send %d bytes when max is %d\n",
			channelCount, PIXELNET_DMX_DATA_SIZE);
		return 0;
	}

	// Copy latest data to our input buffer for processing
	pthread_mutex_lock(&privData->bufLock);
	memcpy(privData->inBuf, channelData, channelCount);
	privData->dataWaiting = 1;
	pthread_mutex_unlock(&privData->bufLock);

	if (privData->threadIsRunning)
		pthread_cond_signal(&privData->sendCond);
	else
		SendOutputBuffer(privData);

	return 1;
}
Beispiel #4
0
void *RunFPDOutputThread(void *data)
{
	LogDebug(VB_CHANNELOUT, "RunFPDOutputThread()\n");

	long long wakeTime = GetTime();
	struct timeval  tv;
	struct timespec ts;

	FPDPrivData *privData = (FPDPrivData *)data;

	privData->threadIsRunning = 1;
	LogDebug(VB_CHANNELOUT, "FPD output thread started\n");

	while (privData->runThread)
	{
		// Wait for more data
		pthread_mutex_lock(&privData->sendLock);
		LogExcess(VB_CHANNELOUT, "FPD output thread: sent: %lld, elapsed: %lld\n",
			GetTime(), GetTime() - wakeTime);

		pthread_mutex_lock(&privData->bufLock);
		if (privData->dataWaiting)
		{
			pthread_mutex_unlock(&privData->bufLock);

			gettimeofday(&tv, NULL);
			ts.tv_sec = tv.tv_sec;
			ts.tv_nsec = (tv.tv_usec + 200000) * 1000;

			if (ts.tv_nsec >= 1000000000)
			{
				ts.tv_sec  += 1;
				ts.tv_nsec -= 1000000000;
			}

			pthread_cond_timedwait(&privData->sendCond, &privData->sendLock, &ts);
		}
		else
		{
			pthread_mutex_unlock(&privData->bufLock);
			pthread_cond_wait(&privData->sendCond, &privData->sendLock);
		}

		wakeTime = GetTime();
		LogExcess(VB_CHANNELOUT, "FPD output thread: woke: %lld\n", GetTime());
		pthread_mutex_unlock(&privData->sendLock);

		if (!privData->runThread)
			continue;

		// See if there is any data waiting to process or if we timed out
		pthread_mutex_lock(&privData->bufLock);
		if (privData->dataWaiting)
		{
			pthread_mutex_unlock(&privData->bufLock);

			SendOutputBuffer(privData);
		}
		else
		{
			pthread_mutex_unlock(&privData->bufLock);
		}
	}

	LogDebug(VB_CHANNELOUT, "FPD output thread complete\n");
	privData->threadIsRunning = 0;
}
OMX_ERRORTYPE AudioSource::ProcessDataBuffer()
{
    OMX_ERRORTYPE ret = OMX_ErrorNone;
	OMX_U32 nActuralLen;
	
	if (bSendEOS == OMX_TRUE)
		return OMX_ErrorNoMore;

	if (AudioRenderRingBuffer.AudioDataLen() <= nFadeInFadeOutProcessLen) {
		if (nDeviceReadLen == 0) {
			LOG_DEBUG("Ringbuffer data len: %d\n", AudioRenderRingBuffer.AudioDataLen());
			ret = GetOneFrameFromDevice();
			if (ret == OMX_ErrorUndefined) {
				OMX_U8 *pBuffer;

				AudioRenderRingBuffer.BufferGet(&pBuffer, nFadeInFadeOutProcessLen, &nActuralLen);
				AudioRenderFadeInFadeOut.SetMode(FADEOUT);
				AudioRenderFadeInFadeOut.Process(pBuffer, nActuralLen);
				AudioRenderRingBuffer.BufferConsumered(nActuralLen);
				AudioRenderRingBuffer.BufferAdd(pBuffer, nFadeInFadeOutProcessLen, &nActuralLen);

				nDeviceReadOffset = 0;
				AudioRenderRingBuffer.BufferAddZeros(nDeviceReadLen, &nActuralLen);
				LOG_LOG("Ringbuffer add len: %d\n", nActuralLen);
				nDeviceReadLen -= nActuralLen;
				nDeviceReadOffset += nActuralLen;
				bAddZeros = OMX_TRUE;
				if (nDeviceReadLen == 0)
					AudioRenderFadeInFadeOut.SetMode(FADEIN);

			} else {
				if (ret != OMX_ErrorNone)
					return ret;

				bAddZeros = OMX_FALSE;
				nDeviceReadOffset = 0;
				AudioRenderFadeInFadeOut.Process(pDeviceReadBuffer, nDeviceReadLen);
				AudioRenderRingBuffer.BufferAdd(pDeviceReadBuffer, nDeviceReadLen, &nActuralLen);
				LOG_LOG("Ringbuffer add len: %d\n", nActuralLen);
				nDeviceReadLen -= nActuralLen;
				nDeviceReadOffset += nActuralLen;
			}
		} else {
			if (bAddZeros == OMX_TRUE) {
				AudioRenderRingBuffer.BufferAddZeros(nDeviceReadLen, &nActuralLen);
				nDeviceReadLen -= nActuralLen;
				nDeviceReadOffset += nActuralLen;
				if (nDeviceReadLen == 0)
					AudioRenderFadeInFadeOut.SetMode(FADEIN);
			} else {
				AudioRenderFadeInFadeOut.Process(pDeviceReadBuffer + nDeviceReadOffset, nDeviceReadLen);
				AudioRenderRingBuffer.BufferAdd(pDeviceReadBuffer + nDeviceReadOffset, nDeviceReadLen, &nActuralLen);
				nDeviceReadLen -= nActuralLen;
				nDeviceReadOffset += nActuralLen;
			}
		}
	}

	LOG_LOG("Ringbuffer data len: %d\n", AudioRenderRingBuffer.AudioDataLen());
	while(AudioRenderRingBuffer.AudioDataLen() > nFadeInFadeOutProcessLen) {
		if (ports[OUTPUT_PORT]->BufferNum() == 0 && pOutBufferHdr == NULL ) {
			fsl_osal_sleep(5000);
			continue;
		}

		if (ports[OUTPUT_PORT]->BufferNum() > 0 && pOutBufferHdr == NULL) {
			ports[OUTPUT_PORT]->GetBuffer(&pOutBufferHdr);
		}

		ret = ProcessOutputBufferData();
		if (ret != OMX_ErrorNone)
			return ret;
		ret = ProcessOutputBufferFlag();
		if (ret != OMX_ErrorNone)
			return ret;
		ret = SendOutputBuffer();
		if (ret != OMX_ErrorNone)
			return ret;
	}

	return OMX_ErrorNone;
}