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