PVOID sendAudioPackets()

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;
}