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//////////////////////////////////////////////////////////////////////////// 42PVMFFileDummyInputPort::PVMFFileDummyInputPort(int32 aTag, PVMFNodeInterface* aNode) 43 : PvmfPortBaseImpl(aTag, aNode) 44{ 45 Construct(); 46} 47 48//////////////////////////////////////////////////////////////////////////// 49PVMFFileDummyInputPort::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//////////////////////////////////////////////////////////////////////////// 62void 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//////////////////////////////////////////////////////////////////////////// 72PVMFFileDummyInputPort::~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//////////////////////////////////////////////////////////////////////////// 87OSCL_EXPORT_REF void PVMFFileDummyInputPort::setObserver(PvmiConfigAndCapabilityCmdObserver* aObserver) 88{ 89 // Not supported 90 OSCL_UNUSED_ARG(aObserver); 91} 92 93//////////////////////////////////////////////////////////////////////////// 94OSCL_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//////////////////////////////////////////////////////////////////////////// 201OSCL_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//////////////////////////////////////////////////////////////////////////// 220OSCL_EXPORT_REF void PVMFFileDummyInputPort::createContext(PvmiMIOSession session, PvmiCapabilityContext& context) 221{ 222 OSCL_UNUSED_ARG(session); 223 OSCL_UNUSED_ARG(context); 224} 225 226//////////////////////////////////////////////////////////////////////////// 227OSCL_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//////////////////////////////////////////////////////////////////////////// 238OSCL_EXPORT_REF void PVMFFileDummyInputPort::DeleteContext(PvmiMIOSession session, PvmiCapabilityContext& context) 239{ 240 OSCL_UNUSED_ARG(session); 241 OSCL_UNUSED_ARG(context); 242} 243 244//////////////////////////////////////////////////////////////////////////// 245OSCL_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//////////////////////////////////////////////////////////////////////////// 265OSCL_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//////////////////////////////////////////////////////////////////////////// 280OSCL_EXPORT_REF uint32 PVMFFileDummyInputPort::getCapabilityMetric(PvmiMIOSession session) 281{ 282 OSCL_UNUSED_ARG(session); 283 return 0; 284} 285 286//////////////////////////////////////////////////////////////////////////// 287OSCL_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//////////////////////////////////////////////////////////////////////////////////////////////////////// 300OSCL_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//////////////////////////////////////////////////////////////////////////// 345bool 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//////////////////////////////////////////////////////////////////////////// 368void PVMFFileDummyInputPort::FormatUpdated() 369{ 370 PVLOGGER_LOGMSG(PVLOGMSG_INST_MLDBG, iLogger, PVLOGMSG_INFO 371 , (0, "PVMFFileDummyInputPort::FormatUpdated %s", iFormat.getMIMEStrPtr())); 372} 373 374//////////////////////////////////////////////////////////////////////////// 375PVMFStatus 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//////////////////////////////////////////////////////////////////////////// 413PVMFStatus 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////////////////////////////////////////////////////////////////////////////////////// 446bool 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//////////////////////////////////////////////////////////////////////////////////////////////////// 485bool 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