static XDAS_Int32 _IMGENC1_control(IMGENC1_Handle handle, IIMGENC1_Cmd id, IMGENC1_DynamicParams *dynParams, IMGENC1_Status *status) { XDAS_Int32 retVal = IMGENC1_EFAIL; assert(handle); if (handle) { IIMGENC1_Fxns *fxns = (IIMGENC1_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); IIMGENC1_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if(fxns == &JPEGENC_TI_IJPEGENC) DBG("Using jpeg codecs"); if ((fxns != NULL) && (alg != NULL) && (fxns->control != NULL)) { VISA_enter((VISA_Handle)handle); retVal = fxns->control(alg, id, dynParams, status); DBG("retVal: %d, err: %d", retVal, status->extendedError); VISA_exit((VISA_Handle)handle); } } return (retVal); }
/* * ======== VIDDEC2BACK_process ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* video decoders (both high and low complexity * decoders are envoked using this method). */ XDAS_Int32 VIDDEC2BACK_process(VIDDEC2BACK_Handle handle, XDM_Context *context, VIDDEC2_OutArgs *outArgs) { XDAS_Int32 retVal = VIDDEC2_EFAIL; /* * Note, we do this because someday we may allow dynamically changing * the global 'VISA_isChecked()' value on the fly. If we allow that, * we need to ensure the value stays consistent in the context of this call. */ Bool checked = VISA_isChecked(); Log_print3(Diags_ENTRY, "[+E] VIDDEC2BACK_process> " "Enter (handle=0x%x, context=0x%x, outArgs=0x%x)", (IArg)handle, (IArg)context, (IArg)outArgs); if (handle) { IVIDDEC2BACK_Fxns *fxns = (IVIDDEC2BACK_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); IVIDDEC2BACK_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if (fxns && (alg != NULL)) { //Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"VIDDEC2BACK:process", // (Arg)handle, (Arg)0); if (checked) { /* * Validate inBufs and outBufs. */ // XdmUtils_validateSparseBufDesc1(inBufs, "inBufs"); // XdmUtils_validateSparseBufDesc(outBufs, "outBufs"); } VISA_enter((VISA_Handle)handle); retVal = fxns->process(alg, context, outArgs); VISA_exit((VISA_Handle)handle); if (checked) { /* TBD */ } } } Log_print2(Diags_EXIT, "[+X] VIDDEC2BACK_process> " "Exit (handle=0x%x, retVal=0x%x)", (IArg)handle, (IArg)retVal); return (retVal); }
/* * ======== SPHENC_control ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* speech encoders (both high and low complexity * encoders are envoked using this method). */ XDAS_Int32 SPHENC_control(SPHENC_Handle handle, ISPHENC_Cmd id, ISPHENC_DynamicParams *dynParams, ISPHENC_Status *status) { XDAS_Int32 retVal = SPHENC_EFAIL; SPHENC_DynamicParams refDynParams; XDAS_Int32 refStatusSize; /* * Note, we assign "VISA_isChecked()" results to a local variable * rather than repeatedly query it throughout this fxn because * someday we may allow dynamically changing the global * 'VISA_isChecked()' value on the fly. If we allow that, we need * to ensure the value stays consistent in the context of this * call. */ Bool checked = VISA_isChecked(); if (checked) { /* Ensure dynParams and status are non-NULL, per the XDM spec */ if ((!(XdmUtils_validateExtendedStruct(dynParams, sizeof(*dynParams), "dynParams"))) || (!(XdmUtils_validateExtendedStruct(status, sizeof(*status), "status")))) { /* for safety, return here before dereferencing and crashing */ return (retVal); } } GT_6trace(CURTRACE, GT_ENTER, "SPHENC_control> " "Enter (handle=0x%x, id=%d, dynParams=0x%x (size=0x%x), " "status=0x%x (size=0x%x)\n", handle, id, dynParams, dynParams->size, status, status->size); if (handle) { ISPHENC_Fxns *fxns = (ISPHENC_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); ISPHENC_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if ((fxns != NULL) && (alg != NULL)) { Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"SPHENC:control", (Arg)handle, (Arg)0); if (checked) { /* * Make a reference copy of dynParams, status->size, and * status->data.bufSize so we can check that the codec * didn't modify these read-only fields during control(). */ refDynParams = *dynParams; refStatusSize = status->size; } VISA_enter((VISA_Handle)handle); retVal = fxns->control(alg, id, dynParams, status); VISA_exit((VISA_Handle)handle); if (checked) { /* ensure the codec didn't modify the read-only dynParams */ if (memcmp(&refDynParams, dynParams, sizeof(*dynParams)) != 0) { GT_1trace(CURTRACE, GT_7CLASS, "ERROR> codec (0x%x) modified read-only dynParams " "struct!\n", handle); } /* ensure the codec didn't change status->size */ if (status->size != refStatusSize) { GT_1trace(CURTRACE, GT_7CLASS, "ERROR> codec (0x%x) modified read-only status->size " "field!\n", handle); } } } } GT_2trace(CURTRACE, GT_ENTER, "SPHENC_control> " "Exit (handle=0x%x, retVal=0x%x)\n", handle, retVal); return (retVal); }
/* * ======== SPHENC_process ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* speech encoders (both high and low complexity * encoders are invoked using this method). */ XDAS_Int32 SPHENC_process(SPHENC_Handle handle, XDM_BufDesc *inBufs, XDM_BufDesc *outBufs, ISPHENC_InArgs *inArgs, ISPHENC_OutArgs *outArgs) { XDAS_Int32 retVal = SPHENC_EFAIL; SPHENC_InArgs refInArgs; /* * Note, we assign "VISA_isChecked()" results to a local variable * rather than repeatedly query it throughout this fxn because * someday we may allow dynamically changing the global * 'VISA_isChecked()' value on the fly. If we allow that, we need * to ensure the value stays consistent in the context of this * call. */ Bool checked = VISA_isChecked(); if (checked) { /* Ensure inArgs and outArgs are non-NULL, per the XDM spec */ if ((!(XdmUtils_validateExtendedStruct(inArgs, sizeof(*inArgs), "inArgs"))) || (!(XdmUtils_validateExtendedStruct(outArgs, sizeof(*outArgs), "outArgs")))) { /* for safety, return here before dereferencing and crashing */ return (retVal); } } GT_5trace(CURTRACE, GT_ENTER, "SPHENC_process> " "Enter (handle=0x%x, inBufs=0x%x, outBufs=0x%x, inArgs=0x%x, " "outArgs=0x%x)\n", handle, inBufs, outBufs, inArgs, outArgs); if (handle) { ISPHENC_Fxns *fxns = (ISPHENC_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); ISPHENC_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if ((fxns != NULL) && (alg != NULL)) { Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"SPHENC:process", (Arg)handle, (Arg)0); if (checked) { /* * Zero out the outArgs struct (except for .size field); * it's write-only to the codec, so the app shouldn't pass * values through it, nor should the codec expect to * receive values through it. */ memset((void *)((XDAS_Int32)(outArgs) + sizeof(outArgs->size)), 0, (sizeof(*outArgs) - sizeof(outArgs->size))); /* * Make a reference copy of inArgs so we can check that * the codec didn't modify them during process(). */ refInArgs = *inArgs; } VISA_enter((VISA_Handle)handle); retVal = fxns->process(alg, inBufs, outBufs, inArgs, outArgs); VISA_exit((VISA_Handle)handle); if (checked) { /* ensure the codec didn't modify the read-only inArgs */ if (memcmp(&refInArgs, inArgs, sizeof(*inArgs)) != 0) { GT_1trace(CURTRACE, GT_7CLASS, "ERROR> codec (0x%x) modified read-only inArgs " "struct!\n", handle); } } } } GT_2trace(CURTRACE, GT_ENTER, "SPHENC_process> " "Exit (handle=0x%x, retVal=0x%x)\n", handle, retVal); return (retVal); }
/* * ======== VIDDEC1_control ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* video decoders (both high and low complexity * decoders are envoked using this method). */ XDAS_Int32 VIDDEC1_control(VIDDEC1_Handle handle, VIDDEC1_Cmd id, VIDDEC1_DynamicParams *dynParams, VIDDEC1_Status *status) { XDAS_Int32 retVal = VIDDEC1_EFAIL; VIDDEC1_DynamicParams refDynParams; XDAS_Int32 refStatusSize; XDAS_Int32 refStatusDataBufSize; /* * Note, we assign "VISA_isChecked()" results to a local variable * rather than repeatedly query it throughout this fxn because * someday we may allow dynamically changing the global * 'VISA_isChecked()' value on the fly. If we allow that, we need * to ensure the value stays consistent in the context of this * call. */ Bool checked = VISA_isChecked(); if (checked) { /* Ensure dynParams and status are non-NULL, per the XDM spec */ if ((!(XdmUtils_validateExtendedStruct(dynParams, sizeof(*dynParams), "dynParams"))) || (!(XdmUtils_validateExtendedStruct(status, sizeof(*status), "status")))) { /* for safety, return here before dereferencing and crashing */ return (retVal); } } Log_print6(Diags_ENTRY, "[+E] VIDDEC1_control> " "Enter (handle=0x%x, id=%d, dynParams=0x%x (size=0x%x), " "status=0x%x (size=0x%x)", (IArg)handle, (IArg)id, (IArg)dynParams, (IArg)(dynParams->size), (IArg)status, (IArg)(status->size)); if (handle) { IVIDDEC1_Fxns *fxns = (IVIDDEC1_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); IVIDDEC1_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if ((fxns != NULL) && (alg != NULL)) { if (checked) { /* * Make a reference copy of dynParams, status->size, and * status->data.bufSize so we can check that the codec * didn't modify these read-only fields during control(). */ refDynParams = *dynParams; refStatusSize = status->size; refStatusDataBufSize = status->data.bufSize; } //Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"VIDDEC1:control", // (Arg)handle, (Arg)0); VISA_enter((VISA_Handle)handle); retVal = fxns->control(alg, id, dynParams, status); VISA_exit((VISA_Handle)handle); if (checked) { /* ensure the codec didn't modify the read-only dynParams */ if (memcmp(&refDynParams, dynParams, sizeof(*dynParams)) != 0) { Log_print1(Diags_USER7, "[+7] ERROR> codec (0x%x) modified read-only dynParams " "struct!", (IArg)handle); } /* ensure the codec didn't change status->size */ if (status->size != refStatusSize) { Log_print1(Diags_USER7, "[+7] ERROR> codec (0x%x) modified read-only status->size " "field!", (IArg)handle); } /* ensure the codec didn't change status->data.bufSize */ if (status->data.bufSize != refStatusDataBufSize) { Log_print1(Diags_USER7, "[+7] ERROR> codec (0x%x) modified read-only " "status->data.bufSize field!", (IArg)handle); } } } } Log_print2(Diags_EXIT, "[+X] VIDDEC1_control> " "Exit (handle=0x%x, retVal=0x%x)", (IArg)handle, (IArg)retVal); return (retVal); }
/* * ======== VIDDEC1_process ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* video decoders (both high and low complexity * decoders are invoked using this method). */ XDAS_Int32 VIDDEC1_process(VIDDEC1_Handle handle, XDM1_BufDesc *inBufs, XDM_BufDesc *outBufs, VIDDEC1_InArgs *inArgs, VIDDEC1_OutArgs *outArgs) { XDAS_Int32 retVal = VIDDEC1_EFAIL; VIDDEC1_InArgs refInArgs; Int32 i; /* * Note, we assign "VISA_isChecked()" results to a local variable * rather than repeatedly query it throughout this fxn because * someday we may allow dynamically changing the global * 'VISA_isChecked()' value on the fly. If we allow that, we need * to ensure the value stays consistent in the context of this * call. */ Bool checked = VISA_isChecked(); if (checked) { /* Ensure inArgs and outArgs are non-NULL, per the XDM spec */ if ((!(XdmUtils_validateExtendedStruct(inArgs, sizeof(*inArgs), "inArgs"))) || (!(XdmUtils_validateExtendedStruct(outArgs, sizeof(*outArgs), "outArgs")))) { /* for safety, return here before dereferencing and crashing */ return (retVal); } } Log_print5(Diags_ENTRY, "[+E] VIDDEC1_process> " "Enter (handle=0x%x, inBufs=0x%x, outBufs=0x%x, inArgs=0x%x, " "outArgs=0x%x)", (IArg)handle, (IArg)inBufs, (IArg)outBufs, (IArg)inArgs, (IArg)outArgs); if (handle) { IVIDDEC1_Fxns *fxns = (IVIDDEC1_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); IVIDDEC1_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if ((fxns != NULL) && (alg != NULL)) { if (checked) { /* validate inArgs with ranges. */ if (inArgs->inputID == 0) { Log_print2(Diags_USER7, "[+7] ERROR> app provided codec (0x%x) with out of range " "inArgs->inputID field (0x%x)", (IArg)alg, (IArg)(inArgs->inputID)); } /* * Validate inBufs and outBufs. */ XdmUtils_validateSparseBufDesc1(inBufs, "inBufs"); XdmUtils_validateSparseBufDesc(outBufs, "outBufs"); /* * Make a reference copy of inArgs so we can check that * the codec didn't modify them during process(). */ refInArgs = *inArgs; } //Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"VIDDEC1:process", // (Arg)handle, (Arg)0); VISA_enter((VISA_Handle)handle); retVal = fxns->process(alg, inBufs, outBufs, inArgs, outArgs); VISA_exit((VISA_Handle)handle); if (checked) { /* ensure the codec didn't modify the read-only inArgs */ if (memcmp(&refInArgs, inArgs, sizeof(*inArgs)) != 0) { Log_print1(Diags_USER7, "[+7] ERROR> codec (0x%x) modified read-only inArgs " "struct!", (IArg)handle); } /* only check these on successful return */ if ((retVal == IVIDDEC1_EOK) || (!(XDM_ISFATALERROR( outArgs->decodedBufs.extendedError)))) { /* Validate outArgs->decodedBufs */ XdmUtils_validateVideo1BufDesc(&(outArgs->decodedBufs), "decodedBufs"); } /* Validate outArgs->displayBufs */ for (i = 0; ((outArgs->outputID[i] != 0) && (i < XDM_MAX_IO_BUFFERS)); i++) { if ((retVal == IVIDDEC1_EOK) || (!(XDM_ISFATALERROR(outArgs-> displayBufs[i].extendedError)))) { XdmUtils_validateVideo1BufDesc(&(outArgs->displayBufs[i]), "displayBufs"); } } } } } Log_print2(Diags_EXIT, "[+X] VIDDEC1_process> " "Exit (handle=0x%x, retVal=0x%x)", (IArg)handle, (IArg)retVal); return (retVal); }
/* * ======== VIDDEC2FRONT_process ======== * This method must be the same for both local and remote invocation; * each call site in the client might be calling different implementations * (one that marshalls & sends and one that simply calls). This API * abstracts *all* video decoders (both high and low complexity * decoders are envoked using this method). */ XDAS_Int32 VIDDEC2FRONT_process(VIDDEC2FRONT_Handle handle, VIDDEC2_InArgs *inArgs, XDM_Context *context, VIDDEC2FRONT_OutArgs *outArgs) { XDAS_Int32 retVal = VIDDEC2_EFAIL; VIDDEC2_InArgs refInArgs; /* * Note, we do this because someday we may allow dynamically changing * the global 'VISA_isChecked()' value on the fly. If we allow that, * we need to ensure the value stays consistent in the context of this call. */ Bool checked = VISA_isChecked(); GT_4trace(CURTRACE, GT_ENTER, "VIDDEC2FRONT_process> " "Enter (handle=0x%x, inArgs=0x%x, context=0x%x, outArgs=0x%x)\n", handle, inArgs, context, outArgs); if (handle) { IVIDDEC2FRONT_Fxns *fxns = (IVIDDEC2FRONT_Fxns *)VISA_getAlgFxns((VISA_Handle)handle); IVIDDEC2FRONT_Handle alg = VISA_getAlgHandle((VISA_Handle)handle); if (fxns && (alg != NULL)) { Log_printf(ti_sdo_ce_dvtLog, "%s", (Arg)"VIDDEC2FRONT:process", (Arg)handle, (Arg)0); if (checked) { /* validate inArgs with ranges. */ if (inArgs->inputID == 0) { GT_2trace(CURTRACE, GT_7CLASS, "ERROR> app provided codec (0x%x) with out of range" " inArgs->inputID field (0x%x)\n", alg, inArgs->inputID); } /* * Validate inBufs and outBufs. */ // XdmUtils_validateSparseBufDesc1(inBufs, "inBufs"); // XdmUtils_validateSparseBufDesc(outBufs, "outBufs"); /* * Make a reference copy of inArgs so we can check that * the codec didn't modify them during process(). */ refInArgs = *inArgs; /* inArgs->inputID == 0 is an application error */ if (inArgs->inputID == 0) { GT_1trace(CURTRACE, GT_7CLASS, "ERROR> codec (0x%x) received invalid " "inArgs->inputID == 0!\n", handle); } } VISA_enter((VISA_Handle)handle); retVal = fxns->process(alg, inArgs, context, outArgs); VISA_exit((VISA_Handle)handle); if (checked) { /* ensure the codec didn't modify the read-only inArgs */ if (memcmp(&refInArgs, inArgs, sizeof(*inArgs)) != 0) { GT_1trace(CURTRACE, GT_7CLASS, "ERROR> codec (0x%x) modified read-only inArgs " "struct!\n", handle); } } } } GT_2trace(CURTRACE, GT_ENTER, "VIDDEC2FRONT_process> " "Exit (handle=0x%x, retVal=0x%x)\n", handle, retVal); return (retVal); }