STATUS initMediaSource()

in source/src/AppRtspSrc.c [861:901]


STATUS initMediaSource(PMediaContext* ppMediaContext)
{
    STATUS retStatus = STATUS_SUCCESS;
    PRtspSrcContext pRtspSrcContext = NULL;
    PCodecConfiguration pGstConfiguration;
    PCodecStreamConf pVideoStream;
    PCodecStreamConf pAudioStream;

    CHK(ppMediaContext != NULL, STATUS_MEDIA_NULL_ARG);
    *ppMediaContext = NULL;
    CHK(NULL != (pRtspSrcContext = (PRtspSrcContext) MEMCALLOC(1, SIZEOF(RtspSrcContext))), STATUS_MEDIA_NOT_ENOUGH_MEMORY);
    ATOMIC_STORE_BOOL(&pRtspSrcContext->shutdownRtspSrc, FALSE);
    ATOMIC_STORE_BOOL(&pRtspSrcContext->codecConfigLatched, FALSE);

    pGstConfiguration = &pRtspSrcContext->codecConfiguration;
    pGstConfiguration->codecStatus = STATUS_SUCCESS;
    pVideoStream = &pGstConfiguration->videoStream;
    pAudioStream = &pGstConfiguration->audioStream;
    pVideoStream->codec = GST_CODEC_INVALID_VALUE;
    pAudioStream->codec = GST_CODEC_INVALID_VALUE;

    pRtspSrcContext->codecConfLock = MUTEX_CREATE(TRUE);
    CHK(IS_VALID_MUTEX_VALUE(pRtspSrcContext->codecConfLock), STATUS_MEDIA_INVALID_MUTEX);
    // initialize the gstreamer
    app_gst_init(NULL, NULL);
    // latch the configuration of rtsp server.
    CHK_STATUS((latchRtspConfig(&pRtspSrcContext->rtspServerConf)));
    // get the sdp information of rtsp server.
    CHK_STATUS((discoverMediaSource(pRtspSrcContext)));
    *ppMediaContext = pRtspSrcContext;

CleanUp:

    if (STATUS_FAILED(retStatus)) {
        if (pRtspSrcContext != NULL) {
            detroyMediaSource(pRtspSrcContext);
        }
    }

    return retStatus;
}