1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /** 19 * @file pvmf_sample_port.cpp 20 * @brief Sample PVMF Port implementation 21 */ 22 23 #ifndef PVMF_FILEINPUT_PORT_H_INCLUDED 24 #include "pvmf_fileinput_port.h" 25 #endif 26 #ifndef OSCL_MEM_BASIC_FUNCTIONS_H 27 #include "oscl_mem_basic_functions.h" 28 #endif 29 #ifndef OSCL_MIME_STRING_UTILS_H 30 #include "pv_mime_string_utils.h" 31 #endif 32 #ifndef PVMF_DUMMY_FILEINPUT_NODE_H_INCLUDED 33 #include "pvmf_dummy_fileinput_node.h" 34 #endif 35 36 #define LOG_STACK_TRACE(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, m); 37 #define LOG_DEBUG(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_DEBUG, m); 38 #define LOG_ERR(m) PVLOGGER_LOGMSG(PVLOGMSG_INST_REL,iLogger,PVLOGMSG_ERR,m); 39 40 41 //////////////////////////////////////////////////////////////////////////// 42 PVMFFileDummyInputPort::PVMFFileDummyInputPort(int32 aTag, PVMFNodeInterface* aNode) 43 : PvmfPortBaseImpl(aTag, aNode) 44 { 45 Construct(); 46 } 47 48 //////////////////////////////////////////////////////////////////////////// 49 PVMFFileDummyInputPort::PVMFFileDummyInputPort(int32 aTag, PVMFNodeInterface* aNode 50 , uint32 aInCapacity 51 , uint32 aInReserve 52 , uint32 aInThreshold 53 , uint32 aOutCapacity 54 , uint32 aOutReserve 55 , uint32 aOutThreshold) 56 : PvmfPortBaseImpl(aTag, aNode, aInCapacity, aInReserve, aInThreshold, aOutCapacity, aOutReserve, aOutThreshold) 57 { 58 Construct(); 59 } 60 61 //////////////////////////////////////////////////////////////////////////// 62 void PVMFFileDummyInputPort::Construct() 63 { 64 iLogger = PVLogger::GetLoggerObject("PVMFFileDummyInputPort"); 65 oscl_memset(&iStats, 0, sizeof(PvmfPortBaseImplStats)); 66 iNumFramesGenerated = 0; 67 iTrackConfigFI = NULL; 68 iTrackConfigSizeFI = 0; 69 } 70 71 //////////////////////////////////////////////////////////////////////////// 72 PVMFFileDummyInputPort::~PVMFFileDummyInputPort() 73 { 74 Disconnect(); 75 ClearMsgQueues(); 76 77 if (iTrackConfigFI) 78 { 79 oscl_free(iTrackConfigFI); 80 iTrackConfigFI = NULL; 81 } 82 } 83 84 //////////////////////////////////////////////////////////////////////////// 85 // PvmiCapabilityAndConfig 86 //////////////////////////////////////////////////////////////////////////// 87 OSCL_EXPORT_REF void PVMFFileDummyInputPort::setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver) 88 { 89 // Not supported 90 OSCL_UNUSED_ARG(aObserver); 91 } 92 93 //////////////////////////////////////////////////////////////////////////// 94 OSCL_EXPORT_REF PVMFStatus PVMFFileDummyInputPort::getParametersSync(PvmiMIOSession session, 95 PvmiKeyType identifier, 96 PvmiKvp*& parameters, 97 int& num_parameter_elements, 98 PvmiCapabilityContext context) 99 { 100 LOG_STACK_TRACE((0, "PVMFFileDummyInputPort::getParametersSync")); 101 OSCL_UNUSED_ARG(session); 102 OSCL_UNUSED_ARG(context); 103 104 105 num_parameter_elements = 0; 106 PVMFStatus status = PVMFFailure; 107 PVMFDummyFileInputNode* node = (PVMFDummyFileInputNode*)iPortActivityHandler; 108 109 110 if (pv_mime_strcmp(identifier, PVMF_FORMAT_SPECIFIC_INFO_KEY) == 0 && (iFormat == PVMF_MIME_WMV || iFormat == PVMF_MIME_WMA)) 111 { 112 if (pvmiGetPortFormatSpecificInfoSync(PVMF_FORMAT_SPECIFIC_INFO_KEY, parameters) == 0) 113 { 114 return PVMFFailure; 115 } 116 else 117 { 118 num_parameter_elements = 1; 119 return PVMFSuccess; 120 } 121 122 } 123 124 parameters = NULL; 125 if (pv_mime_strcmp(identifier, OUTPUT_FORMATS_CAP_QUERY) == 0 || 126 pv_mime_strcmp(identifier, OUTPUT_FORMATS_CUR_QUERY) == 0) 127 { 128 num_parameter_elements = 1; 129 status = AllocateKvp(parameters, OSCL_STATIC_CAST(PvmiKeyType, OUTPUT_FORMATS_VALTYPE), num_parameter_elements); 130 if (status != PVMFSuccess) 131 { 132 LOG_ERR((0, "PVMFFileDummyInputPort::getParametersSync: Error - AllocateKvp failed. status=%d", status)); 133 } 134 else 135 { 136 parameters[0].value.pChar_value = (char*)node->iSettings.iMediaFormat.getMIMEStrPtr(); 137 } 138 } 139 else if (pv_mime_strcmp(identifier, VIDEO_OUTPUT_WIDTH_CUR_QUERY) == 0) 140 { 141 num_parameter_elements = 1; 142 status = AllocateKvp(parameters, OSCL_STATIC_CAST(PvmiKeyType, VIDEO_OUTPUT_WIDTH_CUR_VALUE), num_parameter_elements); 143 if (status != PVMFSuccess) 144 { 145 LOG_ERR((0, "PVMFFileDummyInputPort::getParametersSync: Error - AllocateKvp failed. status=%d", status)); 146 return status; 147 } 148 149 parameters[0].value.uint32_value = node->iSettings.iFrameWidth; 150 } 151 else if (pv_mime_strcmp(identifier, VIDEO_OUTPUT_HEIGHT_CUR_QUERY) == 0) 152 { 153 num_parameter_elements = 1; 154 status = AllocateKvp(parameters, OSCL_STATIC_CAST(PvmiKeyType, VIDEO_OUTPUT_HEIGHT_CUR_VALUE), num_parameter_elements); 155 if (status != PVMFSuccess) 156 { 157 LOG_ERR((0, "PVMFFileDummyInputPort::getParametersSync: Error - AllocateKvp failed. status=%d", status)); 158 return status; 159 } 160 161 parameters[0].value.uint32_value = node->iSettings.iFrameHeight; 162 } 163 else if (pv_mime_strcmp(identifier, VIDEO_OUTPUT_FRAME_RATE_CUR_QUERY) == 0) 164 { 165 num_parameter_elements = 1; 166 status = AllocateKvp(parameters, OSCL_STATIC_CAST(PvmiKeyType, VIDEO_OUTPUT_FRAME_RATE_CUR_VALUE), num_parameter_elements); 167 if (status != PVMFSuccess) 168 { 169 LOG_ERR((0, "PVMFFileDummyInputPort::getParametersSync: Error - AllocateKvp failed. status=%d", status)); 170 return status; 171 } 172 173 parameters[0].value.float_value = node->iSettings.iFrameRate; 174 } 175 else if (pv_mime_strcmp(identifier, OUTPUT_TIMESCALE_CUR_QUERY) == 0) 176 { 177 num_parameter_elements = 1; 178 status = AllocateKvp(parameters, OSCL_STATIC_CAST(PvmiKeyType, OUTPUT_TIMESCALE_CUR_VALUE), num_parameter_elements); 179 if (status != PVMFSuccess) 180 { 181 LOG_ERR((0, "PVMFVideoEncPort::getParametersSync: Error - AllocateKvp failed. status=%d", status)); 182 return status; 183 } 184 else 185 { 186 if ((node->iSettings.iMediaFormat).isAudio()) 187 { 188 parameters[0].value.uint32_value = node->iSettings.iSamplingFrequency; 189 } 190 else 191 { 192 parameters[0].value.uint32_value = node->iSettings.iTimescale; 193 } 194 } 195 } 196 197 return status; 198 } 199 200 //////////////////////////////////////////////////////////////////////////// 201 OSCL_EXPORT_REF PVMFStatus PVMFFileDummyInputPort::releaseParameters(PvmiMIOSession session, 202 PvmiKvp* parameters, 203 int num_elements) 204 { 205 OSCL_UNUSED_ARG(session); 206 OSCL_UNUSED_ARG(num_elements); 207 208 if (parameters) 209 { 210 iAlloc.deallocate((OsclAny*)parameters->key); 211 return PVMFSuccess; 212 } 213 else 214 { 215 return PVMFFailure; 216 } 217 } 218 219 //////////////////////////////////////////////////////////////////////////// 220 OSCL_EXPORT_REF void PVMFFileDummyInputPort::createContext(PvmiMIOSession session, PvmiCapabilityContext& context) 221 { 222 OSCL_UNUSED_ARG(session); 223 OSCL_UNUSED_ARG(context); 224 } 225 226 //////////////////////////////////////////////////////////////////////////// 227 OSCL_EXPORT_REF void PVMFFileDummyInputPort::setContextParameters(PvmiMIOSession session, 228 PvmiCapabilityContext& context, 229 PvmiKvp* parameters, int num_parameter_elements) 230 { 231 OSCL_UNUSED_ARG(session); 232 OSCL_UNUSED_ARG(context); 233 OSCL_UNUSED_ARG(parameters); 234 OSCL_UNUSED_ARG(num_parameter_elements); 235 } 236 237 //////////////////////////////////////////////////////////////////////////// 238 OSCL_EXPORT_REF void PVMFFileDummyInputPort::DeleteContext(PvmiMIOSession session, PvmiCapabilityContext& context) 239 { 240 OSCL_UNUSED_ARG(session); 241 OSCL_UNUSED_ARG(context); 242 } 243 244 //////////////////////////////////////////////////////////////////////////// 245 OSCL_EXPORT_REF void PVMFFileDummyInputPort::setParametersSync(PvmiMIOSession session, PvmiKvp* parameters, 246 int num_elements, PvmiKvp*& ret_kvp) 247 { 248 OSCL_UNUSED_ARG(session); 249 PVMFStatus status = PVMFSuccess; 250 ret_kvp = NULL; 251 252 for (int32 i = 0; i < num_elements; i++) 253 { 254 status = VerifyAndSetParameter(&(parameters[i]), true); 255 if (status != PVMFSuccess) 256 { 257 LOG_ERR((0, "PVMFFileDummyInputPort::setParametersSync: Error - VerifiyAndSetParameter failed on parameter #%d", i)); 258 ret_kvp = &(parameters[i]); 259 OSCL_LEAVE(OsclErrArgument); 260 } 261 } 262 } 263 264 //////////////////////////////////////////////////////////////////////////// 265 OSCL_EXPORT_REF PVMFCommandId PVMFFileDummyInputPort::setParametersAsync(PvmiMIOSession session, 266 PvmiKvp* parameters, 267 int num_elements, 268 PvmiKvp*& ret_kvp, 269 OsclAny* context) 270 { 271 OSCL_UNUSED_ARG(session); 272 OSCL_UNUSED_ARG(parameters); 273 OSCL_UNUSED_ARG(num_elements); 274 OSCL_UNUSED_ARG(ret_kvp); 275 OSCL_UNUSED_ARG(context); 276 return -1; 277 } 278 279 //////////////////////////////////////////////////////////////////////////// 280 OSCL_EXPORT_REF uint32 PVMFFileDummyInputPort::getCapabilityMetric(PvmiMIOSession session) 281 { 282 OSCL_UNUSED_ARG(session); 283 return 0; 284 } 285 286 //////////////////////////////////////////////////////////////////////////// 287 OSCL_EXPORT_REF PVMFStatus PVMFFileDummyInputPort::verifyParametersSync(PvmiMIOSession session, 288 PvmiKvp* parameters, int num_elements) 289 { 290 OSCL_UNUSED_ARG(session); 291 292 PVMFStatus status = PVMFSuccess; 293 for (int32 i = 0; (i < num_elements) && (status == PVMFSuccess); i++) 294 status = VerifyAndSetParameter(&(parameters[i])); 295 296 return status; 297 } 298 299 //////////////////////////////////////////////////////////////////////////////////////////////////////// 300 OSCL_EXPORT_REF PVMFStatus PVMFFileDummyInputPort::Connect(PVMFPortInterface* aPort) 301 { 302 303 304 if (!aPort) 305 { 306 LOG_ERR((0, "PVMFFileDummyInputPort::Connect: Error - Connecting to invalid port")); 307 return PVMFErrArgument; 308 } 309 310 if (iConnectedPort) 311 { 312 LOG_ERR((0, "PVMFFileDummyInputPort::Connect: Error - Already connected")); 313 return PVMFFailure; 314 } 315 316 OsclAny* temp = NULL; 317 aPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 318 PvmiCapabilityAndConfig* config = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 319 320 if (config != NULL) 321 { 322 if (!(pvmiSetPortFormatSpecificInfoSync(config, PVMF_FORMAT_SPECIFIC_INFO_KEY))) 323 { 324 LOG_ERR((0, "PVMFFileDummyInputPort::Connect: Error - Unable To Send Format Specific Info To Peer")); 325 return PVMFFailure; 326 } 327 } 328 329 /* 330 * Automatically connect the peer. 331 */ 332 if (aPort->PeerConnect(this) != PVMFSuccess) 333 { 334 LOG_ERR((0, "PVMFFileDummyInputPort::Connect: Error - Peer Connect failed")); 335 return PVMFFailure; 336 } 337 338 iConnectedPort = aPort; 339 340 PortActivity(PVMF_PORT_ACTIVITY_CONNECT); 341 return PVMFSuccess; 342 } 343 344 //////////////////////////////////////////////////////////////////////////// 345 bool PVMFFileDummyInputPort::IsFormatSupported(PVMFFormatType aFmt) 346 { 347 return ((aFmt == PVMF_MIME_YUV420) || 348 (aFmt == PVMF_MIME_RGB16) || 349 (aFmt == PVMF_MIME_M4V) || 350 (aFmt == PVMF_MIME_WMV) || 351 (aFmt == PVMF_MIME_WMA) || 352 (aFmt == PVMF_MIME_H2632000) || 353 (aFmt == PVMF_MIME_AMR_IF2) || 354 (aFmt == PVMF_MIME_AMR_IETF) || 355 (aFmt == PVMF_MIME_PCM16) || 356 (aFmt == PVMF_MIME_ADTS) || 357 (aFmt == PVMF_MIME_MPEG4_AUDIO) || 358 (aFmt == PVMF_MIME_LATM) || 359 (aFmt == PVMF_MIME_MP3) || 360 (aFmt == PVMF_MIME_ADIF) || 361 (aFmt == PVMF_MIME_AAC_SIZEHDR) || 362 (aFmt == PVMF_MIME_G726) || 363 (aFmt == PVMF_MIME_YUV420) || 364 (aFmt == PVMF_MIME_REAL_AUDIO)); 365 } 366 367 //////////////////////////////////////////////////////////////////////////// 368 void PVMFFileDummyInputPort::FormatUpdated() 369 { 370 PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG, iLogger, PVLOGMSG_INFO 371 , (0, "PVMFFileDummyInputPort::FormatUpdated %s", iFormat.getMIMEStrPtr())); 372 } 373 374 //////////////////////////////////////////////////////////////////////////// 375 PVMFStatus PVMFFileDummyInputPort::AllocateKvp(PvmiKvp*& aKvp, PvmiKeyType aKey, int32 aNumParams) 376 { 377 LOG_STACK_TRACE((0, "PVMFFileDummyInputPort::AllocateKvp")); 378 uint8* buf = NULL; 379 uint32 keyLen = oscl_strlen(aKey) + 1; 380 int32 err = 0; 381 382 OSCL_TRY(err, 383 buf = (uint8*)iAlloc.ALLOCATE(aNumParams * (sizeof(PvmiKvp) + keyLen)); 384 if (!buf) 385 OSCL_LEAVE(OsclErrNoMemory); 386 ); 387 OSCL_FIRST_CATCH_ANY(err, 388 LOG_ERR((0, "PVMFFileDummyInputPort::AllocateKvp: Error - kvp allocation failed")); 389 return PVMFErrNoMemory; 390 ); 391 392 int32 i = 0; 393 PvmiKvp* curKvp = aKvp = OSCL_PLACEMENT_NEW(buf, PvmiKvp); 394 buf += sizeof(PvmiKvp); 395 for (i = 1; i < aNumParams; i++) 396 { 397 curKvp += i; 398 curKvp = OSCL_PLACEMENT_NEW(buf, PvmiKvp); 399 buf += sizeof(PvmiKvp); 400 } 401 402 for (i = 0; i < aNumParams; i++) 403 { 404 aKvp[i].key = (char*)buf; 405 oscl_strncpy(aKvp[i].key, aKey, oscl_strlen(aKvp[i].key)); 406 buf += oscl_strlen(aKvp[i].key); 407 } 408 409 return PVMFSuccess; 410 } 411 412 //////////////////////////////////////////////////////////////////////////// 413 PVMFStatus PVMFFileDummyInputPort::VerifyAndSetParameter(PvmiKvp* aKvp, bool aSetParam) 414 { 415 LOG_STACK_TRACE((0, "PVMFFileDummyInputPort::VerifyAndSetParameter: aKvp=0x%x, aSetParam=%d", aKvp, aSetParam)); 416 417 if (!aKvp) 418 { 419 LOG_ERR((0, "PVMFFileDummyInputPort::VerifyAndSetParameter: Error - Invalid key-value pair")); 420 return PVMFFailure; 421 } 422 423 PVMFDummyFileInputNode* node = (PVMFDummyFileInputNode*)iPortActivityHandler; 424 425 if (pv_mime_strcmp(aKvp->key, OUTPUT_FORMATS_VALTYPE) == 0) 426 { 427 if (aKvp->value.pChar_value == node->iSettings.iMediaFormat.getMIMEStrPtr()) 428 { 429 if (aSetParam) 430 iFormat = aKvp->value.pChar_value; 431 return PVMFSuccess; 432 } 433 else 434 { 435 LOG_ERR((0, "PVMFFileDummyInputPort::VerifyAndSetParameter: Error - Unsupported format %d", 436 aKvp->value.uint32_value)); 437 return PVMFFailure; 438 } 439 } 440 441 LOG_ERR((0, "PVMFFileDummyInputPort::VerifyAndSetParameter: Error - Unsupported parameter")); 442 return PVMFFailure; 443 } 444 445 ////////////////////////////////////////////////////////////////////////////////////// 446 bool PVMFFileDummyInputPort::pvmiGetPortFormatSpecificInfoSync(const char* aFormatValType, 447 PvmiKvp*& aKvp) 448 { 449 PVMFDummyFileInputNode* node = (PVMFDummyFileInputNode*)iPortActivityHandler; 450 451 if ((iFormat == PVMF_MIME_WMV) || (iFormat == PVMF_MIME_WMA)) 452 { 453 if (node->iFs.Connect() != 0) return false; 454 node->iInputFile.Open(node->iSettings.iFileName.get_cstr(), Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, node->iFs); 455 node->iInputFile.Read((OsclAny*) &iTrackConfigSizeFI, sizeof(uint8), 4); 456 457 iTrackConfigFI = (uint8*) iAlloc.allocate(iTrackConfigSizeFI); 458 node->iInputFile.Read((OsclAny*) iTrackConfigFI, sizeof(uint8), iTrackConfigSizeFI); 459 node->iInputFile.Close(); 460 461 if (iTrackConfigSizeFI > 0) 462 { 463 OsclMemAllocator alloc; 464 aKvp->key = NULL; 465 aKvp->length = oscl_strlen(aFormatValType) + 1; // +1 for \0 466 aKvp->key = (PvmiKeyType)alloc.ALLOCATE(aKvp->length); 467 if (aKvp->key == NULL) 468 { 469 return false; 470 } 471 oscl_strncpy(aKvp->key, aFormatValType, aKvp->length); 472 473 aKvp->value.key_specific_value = (OsclAny*)(iTrackConfigFI); 474 aKvp->capacity = iTrackConfigSizeFI; 475 } 476 return true; 477 } 478 479 else 480 return true; 481 482 } 483 484 //////////////////////////////////////////////////////////////////////////////////////////////////// 485 bool PVMFFileDummyInputPort::pvmiSetPortFormatSpecificInfoSync(PvmiCapabilityAndConfig *aPort, 486 const char* aFormatValType) 487 { 488 PVMFDummyFileInputNode* node = OSCL_STATIC_CAST(PVMFDummyFileInputNode*, iPortActivityHandler); 489 PvmiKvp* retKvp = NULL; // for return value 490 int32 err = 0; 491 PvmiKvp* kvpPtr = NULL; 492 if (iFormat == PVMF_MIME_WMV) 493 { 494 if (node->iFs.Connect() != 0) return false; 495 node->iInputFile.Open(node->iSettings.iFileName.get_cstr(), 496 Oscl_File::MODE_READ | Oscl_File::MODE_BINARY, node->iFs); 497 node->iInputFile.Read((OsclAny*) &iTrackConfigSizeFI, sizeof(uint8), 4); 498 499 iTrackConfigFI = (uint8*)oscl_malloc(iTrackConfigSizeFI); 500 node->iInputFile.Read((OsclAny*) iTrackConfigFI, sizeof(uint8), iTrackConfigSizeFI); 501 node->iInputFile.Close(); 502 503 if (iTrackConfigSizeFI > 0) 504 { 505 OsclMemAllocator alloc; 506 PvmiKvp kvp; 507 kvp.key = NULL; 508 kvp.length = oscl_strlen(aFormatValType) + 1; // +1 for \0 509 kvp.key = (PvmiKeyType)alloc.ALLOCATE(kvp.length); 510 if (kvp.key == NULL) 511 { 512 return false; 513 } 514 oscl_strncpy(kvp.key, aFormatValType, kvp.length); 515 516 kvp.value.key_specific_value = (OsclAny*) iTrackConfigFI; 517 kvp.capacity = iTrackConfigSizeFI; 518 OSCL_TRY(err, aPort->setParametersSync(NULL, &kvp, 1, retKvp);); 519 /* ignore the error for now */ 520 alloc.deallocate((OsclAny*)(kvp.key)); 521 } 522 } 523 else if (iFormat == PVMF_MIME_G726) 524 { 525 // Send a fake G726 format specific info containing number of bits per sample in the 526 // 14th byte of the info buffer. 527 if (AllocateKvp(kvpPtr, OSCL_STATIC_CAST(PvmiKeyType, aFormatValType), 1) != PVMFSuccess) 528 { 529 LOG_ERR((0, "PVMFFileDummyInputPort::pvmiSetPortFormatSpecificInfoSync: Error - AllocateKvp failed")); 530 return false; 531 } 532 533 kvpPtr->value.key_specific_value = OSCL_MALLOC(32); 534 if (kvpPtr->value.key_specific_value == NULL) 535 { 536 LOG_ERR((0, "PVMFFileDummyInputPort::pvmiSetPortFormatSpecificInfoSync: Error - OSCL_MALLOC failed")); 537 return false; 538 } 539 oscl_memset(kvpPtr->value.key_specific_value, 0, 32); 540 541 int16* bitsPerSamplePtr; 542 bitsPerSamplePtr = OSCL_STATIC_CAST(int16*, 543 (OSCL_STATIC_CAST(uint8*, kvpPtr->value.key_specific_value) + 14)); 544 *bitsPerSamplePtr = (node->iSettings.iBitrate) / (node->iSettings.iSamplingFrequency); 545 546 OSCL_TRY(err, aPort->setParametersSync(NULL, kvpPtr, 1, retKvp);); 547 OSCL_FIRST_CATCH_ANY(err, 548 LOG_ERR((0, "PVMFFileDummyInputPort::pvmiSetPortFormatSpecificInfoSync: Error - setParametersSync failed. err=%d", err)); 549 return false; 550 ); 551 552 OSCL_FREE(kvpPtr->value.key_specific_value); 553 releaseParameters(NULL, kvpPtr, 1); 554 } 555 556 return true; 557 } 558