in gst/gst-kvs-plugin/src/GstPlugin.c [1218:1300]
GstStateChangeReturn gst_kvs_plugin_change_state(GstElement* element, GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
PGstKvsPlugin pGstKvsPlugin = GST_KVS_PLUGIN(element);
STATUS status = STATUS_SUCCESS;
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
if (STATUS_FAILED(status = initKinesisVideoStructs(pGstKvsPlugin))) {
DLOGE("Failed to initialize KVS structures with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
if (STATUS_FAILED(status = initKinesisVideoProducer(pGstKvsPlugin))) {
DLOGE("Failed to initialize KVS producer with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
if (STATUS_FAILED(status = initTrackData(pGstKvsPlugin))) {
DLOGE("Failed to initialize track with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
pGstKvsPlugin->firstPts = GST_CLOCK_TIME_NONE;
pGstKvsPlugin->producerStartTime = GST_CLOCK_TIME_NONE;
if (STATUS_FAILED(status = initKinesisVideoStream(pGstKvsPlugin))) {
DLOGE("Failed to initialize KVS stream with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
ATOMIC_STORE_BOOL(&pGstKvsPlugin->streamStopped, FALSE);
pGstKvsPlugin->streamStatus = STATUS_SUCCESS;
pGstKvsPlugin->lastDts = 0;
pGstKvsPlugin->basePts = 0;
pGstKvsPlugin->frameCount = 0;
pGstKvsPlugin->detectedCpdFormat = ELEMENTARY_STREAM_NAL_FORMAT_UNKNOWN;
// This needs to happen after we've read in ALL of the properties
if (!pGstKvsPlugin->gstParams.disableBufferClipping) {
gst_collect_pads_set_clip_function(pGstKvsPlugin->collect, GST_DEBUG_FUNCPTR(gst_collect_pads_clip_running_time), pGstKvsPlugin);
}
if (STATUS_FAILED(status = initKinesisVideoWebRtc(pGstKvsPlugin))) {
DLOGE("Failed to initialize KVS signaling client with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
// Schedule the WebRTC master session servicing periodic routine
if (STATUS_FAILED(status = timerQueueAddTimer(pGstKvsPlugin->kvsContext.timerQueueHandle, GST_PLUGIN_SERVICE_ROUTINE_START,
GST_PLUGIN_SERVICE_ROUTINE_PERIOD, sessionServiceHandler, (UINT64) pGstKvsPlugin,
&pGstKvsPlugin->serviceRoutineTimerId))) {
DLOGE("Failed to schedule WebRTC service routine with 0x%08x", status);
ret = GST_STATE_CHANGE_FAILURE;
goto CleanUp;
}
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
gst_collect_pads_start(pGstKvsPlugin->collect);
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_collect_pads_stop(pGstKvsPlugin->collect);
break;
default:
break;
}
ret = GST_ELEMENT_CLASS(parent_class)->change_state(element, transition);
CleanUp:
if (ret != GST_STATE_CHANGE_SUCCESS) {
GST_ELEMENT_ERROR(pGstKvsPlugin, LIBRARY, INIT, (NULL), ("Failed to initialize with 0x%08x", status));
}
return ret;
}