in src/source/app/kvsapp.c [694:765]
static int prvPutMediaSendData(KvsApp_t *pKvs, int *pxSendCnt, bool bForceSend)
{
int res = ERRNO_NONE;
DataFrameHandle xDataFrameHandle = NULL;
DataFrameIn_t *pDataFrameIn = NULL;
uint8_t *pData = NULL;
size_t uDataLen = 0;
uint8_t *pMkvHeader = NULL;
size_t uMkvHeaderLen = 0;
int xSendCnt = 0;
if (pKvs->xStreamHandle != NULL &&
pKvs->isEbmlHeaderUpdated == true &&
Kvs_streamAvailOnTrack(pKvs->xStreamHandle, TRACK_VIDEO) &&
(!bForceSend || !pKvs->isAudioTrackPresent || Kvs_streamAvailOnTrack(pKvs->xStreamHandle, TRACK_AUDIO)))
{
if ((xDataFrameHandle = Kvs_streamPop(pKvs->xStreamHandle)) == NULL)
{
LogError("Failed to get data frame");
res = ERRNO_FAIL;
}
else if (prvCheckOnDataFrameToBeSent(xDataFrameHandle) != ERRNO_NONE)
{
LogInfo("Failed to check OnDataFrameToBeSent");
/* We don't treat this condition as error because it's a validation error. */
}
else if (Kvs_dataFrameGetContent(xDataFrameHandle, &pMkvHeader, &uMkvHeaderLen, &pData, &uDataLen) != 0)
{
LogError("Failed to get data and mkv header to send");
res = ERRNO_FAIL;
}
else if (Kvs_putMediaUpdate(pKvs->xPutMediaHandle, pMkvHeader, uMkvHeaderLen, pData, uDataLen) != 0)
{
LogError("Failed to update");
res = ERRNO_FAIL;
}
else
{
pDataFrameIn = (DataFrameIn_t *)xDataFrameHandle;
pKvs->uEarliestTimestamp = pDataFrameIn->uTimestampMs;
xSendCnt++;
if (pKvs->onMkvSentCallbackInfo.onMkvSentCallback != NULL)
{
/* FIXME: Handle the return value in a proper way. */
pKvs->onMkvSentCallbackInfo.onMkvSentCallback(pMkvHeader, uMkvHeaderLen, pKvs->onMkvSentCallbackInfo.pAppData);
/* FIXME: Handle the return value in a proper way. */
pKvs->onMkvSentCallbackInfo.onMkvSentCallback(pData, uDataLen, pKvs->onMkvSentCallbackInfo.pAppData);
}
}
if (xDataFrameHandle != NULL)
{
pDataFrameIn = (DataFrameIn_t *)xDataFrameHandle;
prvCallOnDataFrameTerminate(pDataFrameIn);
if (pDataFrameIn->pUserData != NULL)
{
kvsFree(pDataFrameIn->pUserData);
}
Kvs_dataFrameTerminate(xDataFrameHandle);
}
}
if (pxSendCnt != NULL)
{
*pxSendCnt = xSendCnt;
}
return res;
}