diff options
Diffstat (limited to 'lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c')
-rw-r--r-- | lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c | 108 |
1 files changed, 86 insertions, 22 deletions
diff --git a/lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c b/lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c index 806387a..9e03f33 100644 --- a/lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c +++ b/lib/4a-hal-utilities/4a-hal-utilities-hal-streams-handler.c @@ -291,14 +291,66 @@ struct InternalHalMixerData *HalUtlAddStreamDataAndCreateStreamVerb(afb_api_t ap return createdStreamData; } +int HalUtlRemoveStreamDataAndDeleteStreamVerbUsingMixerData(afb_api_t apiHandle, + struct InternalHalMixerData *toRemoveStreamData) +{ + int returnedErr, wrapRet; + + json_object *streamRemovedEventJ; + + CtlConfigT *ctrlConfig; + + struct HalData *currentHalData; + + if(! apiHandle || ! toRemoveStreamData) + return -1; + + ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle); + if(! ctrlConfig) + return -2; + + currentHalData = (struct HalData *) getExternalData(ctrlConfig); + if((! currentHalData) || + (! currentHalData->internalHalData) || + (! currentHalData->internalHalData->streamsData) || + (! currentHalData->internalHalData->streamUpdates)) + return -3; + + if(afb_api_del_verb(apiHandle, toRemoveStreamData->verb, NULL)) { + AFB_API_ERROR(apiHandle,"Error while deleting verb for stream : '%s'", toRemoveStreamData->verb); + return -4; + } + + wrapRet = wrap_json_pack(&streamRemovedEventJ, + "{s:s, s:s, s:s}", + "action", "removed", + "name", toRemoveStreamData->verb, + "cardId", toRemoveStreamData->streamCardId); + if(wrapRet) { + AFB_API_ERROR(apiHandle,"Didn't succeed to allocate removed stream event json object"); + return -5; + } + + returnedErr = HalUtlRemoveSelectedMixerData(¤tHalData->internalHalData->streamsData, toRemoveStreamData); + if(returnedErr) { + AFB_API_ERROR(apiHandle, + "Error %i while removing data for stream", + returnedErr); + json_object_put(streamRemovedEventJ); + return -6; + } + + afb_event_push(currentHalData->internalHalData->streamUpdates, streamRemovedEventJ); + + return 0; +} + int HalUtlRemoveStreamDataAndDeleteStreamVerb(afb_api_t apiHandle, char *verb, char *verbToCall, char *streamCardId) { - int returnedErr = 0, wrapRet; - - json_object *streamRemovedEventJ; + int returnedErr; CtlConfigT *ctrlConfig; @@ -324,30 +376,42 @@ int HalUtlRemoveStreamDataAndDeleteStreamVerb(afb_api_t apiHandle, if(! toRemoveStreamData) return -4; - if(afb_api_del_verb(apiHandle, verb, NULL)) { - AFB_API_ERROR(apiHandle,"Error while deleting verb for stream : '%s'", verb); - json_object_put(streamRemovedEventJ); + returnedErr = HalUtlRemoveStreamDataAndDeleteStreamVerbUsingMixerData(apiHandle, + toRemoveStreamData); + if(returnedErr) { + AFB_API_ERROR(apiHandle, + "Error %i while removing verb and data for stream : '%s'", + returnedErr, + verb); return -5; } - returnedErr = HalUtlRemoveSelectedMixerData(¤tHalData->internalHalData->streamsData, toRemoveStreamData); - if(returnedErr) { - AFB_API_ERROR(apiHandle,"Error %i while removing data for stream : '%s'", returnedErr, verb); - json_object_put(streamRemovedEventJ); - return -6; - } + return 0; +} - wrapRet = wrap_json_pack(&streamRemovedEventJ, - "{s:s, s:s, s:s}", - "action", "removed", - "name", toRemoveStreamData->verb, - "cardId", toRemoveStreamData->streamCardId); - if(wrapRet) { - AFB_API_ERROR(apiHandle,"Didn't succeed to allocate removed stream event json object"); - return -7; - } +int HalUtlRemoveAllStreamsDataAndDeleteAllStreamsVerb(afb_api_t apiHandle) +{ + CtlConfigT *ctrlConfig; - afb_event_push(currentHalData->internalHalData->streamUpdates, streamRemovedEventJ); + struct HalData *currentHalData; + + if(! apiHandle) + return -1; + + ctrlConfig = (CtlConfigT *) afb_api_get_userdata(apiHandle); + if(! ctrlConfig) + return -2; + + currentHalData = (struct HalData *) getExternalData(ctrlConfig); + if((! currentHalData) || + (! currentHalData->internalHalData)) + return -3; + + while(currentHalData->internalHalData->streamsData) { + if(HalUtlRemoveStreamDataAndDeleteStreamVerbUsingMixerData(apiHandle, + currentHalData->internalHalData->streamsData)) + return -4; + } return 0; }
\ No newline at end of file |