PVMFStatus PVMFFileOutputNode::GetConfigParameter(PvmiKvp*& aParameters, int& aNumParamElements, int32 aIndex, PvmiKvpAttr aReqattr) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFFileOutputNode::GetConfigParameter() In")); aNumParamElements = 0; // Allocate memory for the KVP aParameters = (PvmiKvp*)oscl_malloc(sizeof(PvmiKvp)); if (aParameters == NULL) { PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFFileOutputNode::GetConfigParameter() Memory allocation for KVP failed")); return PVMFErrNoMemory; } oscl_memset(aParameters, 0, sizeof(PvmiKvp)); // Allocate memory for the key string in KVP PvmiKeyType memblock = (PvmiKeyType)oscl_malloc(FILEOUTPUTCONFIG_KEYSTRING_SIZE * sizeof(char)); if (NULL == memblock) { oscl_free(aParameters); PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFFileOutputNode::GetConfigParameter() Memory allocation for key string failed")); return PVMFErrNoMemory; } oscl_strset(memblock, 0, FILEOUTPUTCONFIG_KEYSTRING_SIZE * sizeof(char)); // Assign the key string buffer to KVP aParameters[0].key = memblock; // Copy the key string oscl_strncat(aParameters[0].key, _STRLIT_CHAR("x-pvmf/file/output/"), 21); oscl_strncat(aParameters[0].key, FileOutputNodeConfig_BaseKeys[aIndex].iString, oscl_strlen(FileOutputNodeConfig_BaseKeys[aIndex].iString)); oscl_strncat(aParameters[0].key, _STRLIT_CHAR(";type=value;valtype="), 20); switch (FileOutputNodeConfig_BaseKeys[aIndex].iValueType) { case PVMI_KVPVALTYPE_BITARRAY32: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_BITARRAY32_STRING), oscl_strlen(PVMI_KVPVALTYPE_BITARRAY32_STRING)); break; case PVMI_KVPVALTYPE_KSV: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_KSV_STRING), oscl_strlen(PVMI_KVPVALTYPE_KSV_STRING)); break; case PVMI_KVPVALTYPE_BOOL: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_BOOL_STRING), oscl_strlen(PVMI_KVPVALTYPE_BOOL_STRING)); break; case PVMI_KVPVALTYPE_INT32: if (aReqattr == PVMI_KVPATTR_CUR) { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_INT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_RANGE_UINT32_STRING)); } break; case PVMI_KVPVALTYPE_UINT32: default: if (PVMI_KVPATTR_CAP == aReqattr) { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_RANGE_UINT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_RANGE_UINT32_STRING)); } else { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_UINT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_UINT32_STRING)); } break; } aParameters[0].key[FILEOUTPUTCONFIG_KEYSTRING_SIZE-1] = 0; // Copy the requested info switch (aIndex) { case PARAMETER1: // "parameter1" if (PVMI_KVPATTR_CUR == aReqattr) { // Return current value // get the parameter value here } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default } else { // Return capability } break; case PARAMETER2: // "parameter2" if (PVMI_KVPATTR_CUR == aReqattr) { // Return current value // get the parameter value here } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default } else { // Return capability } break; default: // Invalid index oscl_free(aParameters[0].key); oscl_free(aParameters); PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMFFileOutputNode::GetConfigParameter() Invalid index to file output node parameter")); return PVMFErrNotSupported; } aNumParamElements = 1; PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMFFileOutputNode::GetConfigParameter() Out")); return PVMFSuccess; }
PVMFStatus PVMp4FFComposerNode::GetConfigParameter(PvmiKvp*& aParameters, int& aNumParamElements, int32 aIndex, PvmiKvpAttr aReqattr) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMp4FFComposerNode::GetConfigParameter() In")); aNumParamElements = 0; // Allocate memory for the KVP aParameters = (PvmiKvp*)oscl_malloc(sizeof(PvmiKvp)); if (NULL == aParameters) { PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMp4FFComposerNode::GetConfigParameter() Memory allocation for KVP failed")); return PVMFErrNoMemory; } oscl_memset(aParameters, 0, sizeof(PvmiKvp)); // Allocate memory for the key string in KVP PvmiKeyType memblock = (PvmiKeyType)oscl_malloc(MP4CONFIG_KEYSTRING_SIZE * sizeof(char)); if (NULL == memblock) { oscl_free(aParameters); PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMp4FFComposerNode::GetConfigParameter() Memory allocation for key string failed")); return PVMFErrNoMemory; } oscl_strset(memblock, 0, MP4CONFIG_KEYSTRING_SIZE * sizeof(char)); // Assign the key string buffer to KVP aParameters[0].key = memblock; // Copy the key string oscl_strncat(aParameters[0].key, _STRLIT_CHAR("x-pvmf/composer/mp4/"), 7); oscl_strncat(aParameters[0].key, MP4ComposerNodeConfig_BaseKeys[aIndex].iString, oscl_strlen(MP4ComposerNodeConfig_BaseKeys[aIndex].iString)); oscl_strncat(aParameters[0].key, _STRLIT_CHAR(";type=value;valtype="), 20); switch (MP4ComposerNodeConfig_BaseKeys[aIndex].iValueType) { case PVMI_KVPVALTYPE_BITARRAY32: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_BITARRAY32_STRING), oscl_strlen(PVMI_KVPVALTYPE_BITARRAY32_STRING)); break; case PVMI_KVPVALTYPE_KSV: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_KSV_STRING), oscl_strlen(PVMI_KVPVALTYPE_KSV_STRING)); break; case PVMI_KVPVALTYPE_BOOL: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_BOOL_STRING), oscl_strlen(PVMI_KVPVALTYPE_BOOL_STRING)); break; case PVMI_KVPVALTYPE_INT32: if (aReqattr == PVMI_KVPATTR_CUR) { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_INT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_RANGE_UINT32_STRING)); } break; case PVMI_KVPVALTYPE_CHARPTR: oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_CHARPTR_STRING), oscl_strlen(PVMI_KVPVALTYPE_CHARPTR_STRING)); break; case PVMI_KVPVALTYPE_UINT32: default: if (PVMI_KVPATTR_CAP == aReqattr) { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_RANGE_UINT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_RANGE_UINT32_STRING)); } else { oscl_strncat(aParameters[0].key, _STRLIT_CHAR(PVMI_KVPVALTYPE_UINT32_STRING), oscl_strlen(PVMI_KVPVALTYPE_UINT32_STRING)); } break; } aParameters[0].key[MP4CONFIG_KEYSTRING_SIZE-1] = 0; // Copy the requested info switch (aIndex) { case PRESENTATION_TIMESCALE: // "presentation-timescale" if (PVMI_KVPATTR_CUR == aReqattr) { // Return current value aParameters[0].value.uint32_value = iPresentationTimescale; } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default } else { // Return capability } break; case PV_CACHE_SIZE: // "pv-cache-size" if (PVMI_KVPATTR_CUR == aReqattr) { // set any parameter here aParameters[0].value.uint32_value = iCacheSize; } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default aParameters[0].value.uint32_value = DEFAULT_CAHCE_SIZE; } else { // Return capability range_uint32* rui32 = (range_uint32*)oscl_malloc(sizeof(range_uint32)); if (NULL == rui32) { oscl_free(aParameters[0].key); oscl_free(aParameters); PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMp4FFComposerNode::GetConfigParameter() Memory allocation for range uint32 failed")); return PVMFErrNoMemory; } rui32->min = MIN_CACHE_SIZE; rui32->max = MAX_CACHE_SIZE; aParameters[0].value.key_specific_value = (void*)rui32; } break; #ifdef _TEST_AE_ERROR_HANDLING case ERROR_START_ADDMEMFRAG: if (PVMI_KVPATTR_CUR == aReqattr) { // Return current value aParameters[0].value.bool_value = iErrorHandlingAddMemFrag; } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default aParameters[0].value.bool_value = true; } else { // Return capability } break; case ERROR_START_ADDTRACK: if (PVMI_KVPATTR_CUR == aReqattr) { // Return current value aParameters[0].value.bool_value = iErrorHandlingAddTrack; } else if (PVMI_KVPATTR_DEF == aReqattr) { // return default aParameters[0].value.bool_value = true; } else { // Return capability } break; #endif default: // Invalid index oscl_free(aParameters[0].key); oscl_free(aParameters); PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVMp4FFComposerNode::GetConfigParameter() Invalid index to composer node parameter")); return PVMFErrNotSupported; } aNumParamElements = 1; PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVMp4FFComposerNode::GetConfigParameter() Out")); return PVMFSuccess; }