in main/AppFileSrc.c [149:206]
PVOID sendAudioPackets(PVOID args)
{
STATUS retStatus = STATUS_SUCCESS;
PFileSrcContext pFileSrcContext = (PFileSrcContext) args;
PCodecStreamConf pCodecStreamConf = NULL;
Frame frame;
UINT32 fileIndex = 0, frameSize;
CHAR filePath[MAX_PATH_LEN + 1];
STATUS status;
CHK(pFileSrcContext != NULL, STATUS_MEDIA_NULL_ARG);
pCodecStreamConf = &pFileSrcContext->codecConfiguration.audioStream;
pCodecStreamConf->pFrameBuffer = NULL;
pCodecStreamConf->frameBufferSize = 0;
frame.presentationTs = 0;
while (!ATOMIC_LOAD_BOOL(&pFileSrcContext->shutdownFileSrc)) {
fileIndex = fileIndex % NUMBER_OF_OPUS_FRAME_FILES + 1;
snprintf(filePath, MAX_PATH_LEN, "/sdcard/opusSampleFrames/sample-%03d.opus", fileIndex);
CHK(readFrameFromDisk(NULL, &frameSize, filePath) == STATUS_SUCCESS, STATUS_MEDIA_AUDIO_SINK);
// Re-alloc if needed
if (frameSize > pCodecStreamConf->frameBufferSize) {
CHK((pCodecStreamConf->pFrameBuffer = (UINT8*) MEMREALLOC(pCodecStreamConf->pFrameBuffer, frameSize)) != NULL, STATUS_MEDIA_NOT_ENOUGH_MEMORY);
pCodecStreamConf->frameBufferSize = frameSize;
}
frame.flags = FRAME_FLAG_KEY_FRAME;
frame.frameData = pCodecStreamConf->pFrameBuffer;
frame.size = frameSize;
CHK(readFrameFromDisk(frame.frameData, &frameSize, filePath) == STATUS_SUCCESS, STATUS_MEDIA_AUDIO_SINK);
frame.presentationTs += FILESRC_AUDIO_FRAME_DURATION;
frame.trackId = DEFAULT_AUDIO_TRACK_ID;
frame.duration = 0;
frame.version = FRAME_CURRENT_VERSION;
frame.decodingTs = frame.presentationTs;
if (pFileSrcContext->mediaSinkHook != NULL) {
retStatus = pFileSrcContext->mediaSinkHook(pFileSrcContext->mediaSinkHookUserdata, &frame);
}
THREAD_SLEEP(FILESRC_AUDIO_FRAME_DURATION);
}
CleanUp:
if(pCodecStreamConf != NULL){
SAFE_MEMFREE(pCodecStreamConf->pFrameBuffer);
}
CHK_LOG_ERR(retStatus);
/* free resources */
DLOGD("terminating media source");
if (pFileSrcContext->mediaEosHook != NULL) {
retStatus = pFileSrcContext->mediaEosHook(pFileSrcContext->mediaEosHookUserdata);
}
return (PVOID) (ULONG_PTR) retStatus;
}