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 #include "pv_player_datapath.h" 19 20 #include "pvlogger.h" 21 22 #include "pvmi_config_and_capability_utils.h" 23 24 // Temporary until port tag query is ready 25 #define DEFAULT_INPUT_PORTTAG 0 26 #define DEFAULT_OUTPUT_PORTTAG 1 27 #define PORT_CONFIG_INPUT_FORMATS_VALTYPE "x-pvmf/port/formattype;valtype=int32" 28 29 // 30 // PVPlayerDatapath Section 31 // 32 PVPlayerDatapath::PVPlayerDatapath() : 33 OsclTimerObject(OsclActiveObject::EPriorityNominal, "PVPlayerDatapath"), 34 iState(PVPDP_IDLE), 35 iSourceNode(NULL), iSourceSessionId(0), 36 iDecNode(NULL), iDecSessionId(0), 37 iSinkNode(NULL), iSinkSessionId(0), 38 iSourceOutPort(NULL), iDecInPort(NULL), iDecOutPort(NULL), iSinkInPort(NULL), 39 iObserver(NULL), 40 iErrorObserver(NULL), 41 iInfoObserver(NULL), 42 iContext(NULL), 43 iSourceDecFormatType(PVMF_MIME_FORMAT_UNKNOWN), 44 iDecSinkFormatType(PVMF_MIME_FORMAT_UNKNOWN), 45 iSourceSinkFormatType(PVMF_MIME_FORMAT_UNKNOWN), 46 iSourceTrackInfo(NULL), 47 iDatapathConfig(CONFIG_NONE), 48 iErrorCondition(false), 49 iErrorOccurredDuringErrorCondition(false) 50 { 51 AddToScheduler(); 52 53 // Retrieve the logger object 54 iLogger = PVLogger::GetLoggerObject("PVPlayerEngine"); 55 } 56 57 58 PVPlayerDatapath::~PVPlayerDatapath() 59 { 60 if (IsBusy()) 61 { 62 Cancel(); 63 } 64 } 65 66 67 PVMFStatus PVPlayerDatapath::Prepare(OsclAny* aContext) 68 { 69 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Prepare() In")); 70 71 // Check that source and sink nodes are set 72 if (!iSourceNode || !iSinkNode) 73 { 74 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Prepare() Source and/or sink node not set")); 75 return PVMFFailure; 76 } 77 78 // Check that source track info is set 79 if (iSourceTrackInfo == NULL) 80 { 81 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Prepare() Source track info not set")); 82 return PVMFFailure; 83 } 84 85 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Prepare() Track MIME type %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 86 87 // Determine the datapath configuration 88 // from the nodes that have been set 89 if (iDecNode) 90 { 91 iDatapathConfig = CONFIG_DEC; 92 } 93 else 94 { 95 iDatapathConfig = CONFIG_NONE; 96 } 97 98 iContext = aContext; 99 100 // Connect to the nodes and get session IDs 101 PVMFNodeSessionInfo sessioninfo(this, this, NULL, this, NULL); 102 int32 leavecode = 0; 103 104 iSourceNode->ThreadLogon(); 105 sessioninfo.iErrorContext = (OsclAny*)iSourceNode; 106 sessioninfo.iInfoContext = (OsclAny*)iSourceNode; 107 leavecode = 0; 108 OSCL_TRY(leavecode, iSourceSessionId = iSourceNode->Connect(sessioninfo)); 109 OSCL_FIRST_CATCH_ANY(leavecode, 110 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Prepare() Connect on iSourceNode did a leave!")); 111 return PVMFFailure); 112 113 iSinkNode->ThreadLogon(); 114 sessioninfo.iErrorContext = (OsclAny*)iSinkNode; 115 sessioninfo.iInfoContext = (OsclAny*)iSinkNode; 116 leavecode = 0; 117 OSCL_TRY(leavecode, iSinkSessionId = iSinkNode->Connect(sessioninfo)); 118 OSCL_FIRST_CATCH_ANY(leavecode, 119 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Prepare() Connect on iSinkNode did a leave!")); 120 return PVMFFailure); 121 122 if (iDatapathConfig == CONFIG_DEC) 123 { 124 iDecNode->ThreadLogon(); 125 sessioninfo.iErrorContext = (OsclAny*)iDecNode; 126 sessioninfo.iInfoContext = (OsclAny*)iDecNode; 127 leavecode = 0; 128 OSCL_TRY(leavecode, iDecSessionId = iDecNode->Connect(sessioninfo)); 129 OSCL_FIRST_CATCH_ANY(leavecode, 130 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Prepare() Connect on iDecNode did a leave!")); 131 return PVMFFailure); 132 } 133 134 iState = PREPARE_INIT; 135 RunIfNotReady(); 136 137 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Prepare() Out")); 138 return PVMFSuccess; 139 } 140 141 142 PVMFStatus PVPlayerDatapath::Start(OsclAny* aContext) 143 { 144 OSCL_ASSERT(iSourceTrackInfo != NULL); 145 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Start() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 146 147 iContext = aContext; 148 iState = START_START; 149 RunIfNotReady(); 150 151 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Start() Out")); 152 return PVMFSuccess; 153 } 154 155 156 PVMFStatus PVPlayerDatapath::Pause(OsclAny* aContext, bool aSinkPaused) 157 { 158 OSCL_ASSERT(iSourceTrackInfo != NULL); 159 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Pause() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 160 161 iContext = aContext; 162 iSinkPaused = aSinkPaused; 163 if (iSinkPaused) 164 { 165 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Pause() Sink is already paused")); 166 } 167 iState = PAUSE_PAUSE; 168 RunIfNotReady(); 169 170 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Pause() Out")); 171 return PVMFSuccess; 172 } 173 174 175 PVMFStatus PVPlayerDatapath::Stop(OsclAny* aContext, bool aErrorCondition) 176 { 177 OSCL_ASSERT(iSourceTrackInfo != NULL); 178 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Stop() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 179 180 iContext = aContext; 181 iErrorCondition = aErrorCondition; 182 iErrorOccurredDuringErrorCondition = false; 183 iState = STOP_STOP; 184 RunIfNotReady(); 185 186 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Stop() Out")); 187 return PVMFSuccess; 188 } 189 190 191 PVMFStatus PVPlayerDatapath::Teardown(OsclAny* aContext, bool aErrorCondition) 192 { 193 OSCL_ASSERT(iSourceTrackInfo != NULL); 194 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Teardown() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 195 196 // Disconnect the ports 197 if (!iSourceOutPort || !iSinkInPort || 198 !iSourceNode || !iSinkNode) 199 { 200 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Teardown() Source/sink nodes and/or ports are not set!")); 201 return PVMFFailure; 202 } 203 204 iSourceOutPort->Disconnect(); 205 206 if (iDatapathConfig == CONFIG_DEC) 207 { 208 if (!iDecInPort || !iDecOutPort || !iDecNode) 209 { 210 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Teardown() Decoder node and/or ports are not set")); 211 return PVMFFailure; 212 } 213 214 iDecOutPort->Disconnect(); 215 } 216 217 iContext = aContext; 218 iErrorCondition = aErrorCondition; 219 iErrorOccurredDuringErrorCondition = false; 220 iState = TEARDOWN_RELEASEPORT1; 221 RunIfNotReady(); 222 223 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Teardown() Out")); 224 return PVMFSuccess; 225 } 226 227 228 PVMFStatus PVPlayerDatapath::Reset(OsclAny* aContext, bool aErrorCondition) 229 { 230 OSCL_ASSERT(iSourceTrackInfo != NULL); 231 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Reset() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 232 233 iContext = aContext; 234 iErrorCondition = aErrorCondition; 235 iErrorOccurredDuringErrorCondition = false; 236 iState = RESET_RESET; 237 RunIfNotReady(); 238 239 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Reset() Out")); 240 return PVMFSuccess; 241 } 242 243 244 PVMFStatus PVPlayerDatapath::CancelCommand(OsclAny* aContext) 245 { 246 OSCL_ASSERT(iSourceTrackInfo != NULL); 247 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::CancelCommand() In %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 248 249 iContext = aContext; 250 251 // Need to cancel node command 252 iState = PVPDP_CANCEL; 253 RunIfNotReady(); 254 255 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::CancelCommand() Out")); 256 return PVMFSuccess; 257 } 258 259 260 void PVPlayerDatapath::DisconnectNodeSession(void) 261 { 262 int32 leavecode = 0; 263 264 // Emergency case only to disconnect from nodes 265 if (iSourceNode) 266 { 267 leavecode = 0; 268 OSCL_TRY(leavecode, iSourceNode->Disconnect(iSourceSessionId)); 269 OSCL_FIRST_CATCH_ANY(leavecode, 270 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::DisconnectNodeSession() Disconnect on iSourceNode did a leave"))); 271 } 272 273 if (iSinkNode) 274 { 275 leavecode = 0; 276 OSCL_TRY(leavecode, iSinkNode->Disconnect(iSinkSessionId)); 277 OSCL_FIRST_CATCH_ANY(leavecode, 278 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::DisconnectNodeSession() Disconnect on iSinkNode did a leave"))); 279 } 280 281 if (iDatapathConfig == CONFIG_DEC && iDecNode) 282 { 283 leavecode = 0; 284 OSCL_TRY(leavecode, iDecNode->Disconnect(iDecSessionId)); 285 OSCL_FIRST_CATCH_ANY(leavecode, 286 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::DisconnectNodeSession() Disconnect on iDecNode did a leave"))); 287 } 288 } 289 290 291 void PVPlayerDatapath::Run() 292 { 293 int32 leavecode = 0; 294 PVMFCommandId cmdid = 0; 295 296 switch (iState) 297 { 298 case PREPARE_INIT: 299 OSCL_ASSERT(iSourceTrackInfo != NULL); 300 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PREPARE_INIT case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 301 iPendingCmds = 0; 302 if (iDatapathConfig == CONFIG_DEC) 303 { 304 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Init() on dec node")); 305 leavecode = IssueDatapathInit(iDecNode, iDecSessionId, cmdid); 306 307 if (cmdid != -1 && leavecode == 0) 308 { 309 ++iPendingCmds; 310 } 311 else 312 { 313 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Init on iDecNode did a leave or failed")); 314 iState = PVPDP_ERROR; 315 RunIfNotReady(); 316 break; 317 } 318 } 319 320 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Init() on sink node")); 321 leavecode = IssueDatapathInit(iSinkNode, iSinkSessionId, cmdid); 322 323 if (cmdid != -1 && leavecode == 0) 324 { 325 ++iPendingCmds; 326 } 327 else 328 { 329 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Init on iSinkNode did a leave")); 330 iState = PVPDP_ERROR; 331 RunIfNotReady(); 332 break; 333 } 334 break; 335 336 case PREPARE_REQPORT: 337 { 338 OSCL_ASSERT(iSourceTrackInfo != NULL); 339 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PREPARE_REQPORT case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 340 341 iPendingCmds = 0; 342 343 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling RequestPort() on source node")); 344 leavecode = IssueDatapathRequestPort(iSourceNode, iSourceSessionId, iSourceTrackInfo->getPortTag(), 345 &(iSourceTrackInfo->getTrackMimeType()), 346 (OsclAny*)iSourceNode, cmdid); 347 348 if (cmdid != -1 && leavecode == 0) 349 { 350 ++iPendingCmds; 351 } 352 else 353 { 354 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() RequestPort on iSourceNode did a leave or failed")); 355 iState = PVPDP_ERROR; 356 RunIfNotReady(); 357 break; 358 } 359 360 if (iDatapathConfig == CONFIG_DEC) 361 { 362 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling RequestPort() on dec node(input)")); 363 leavecode = IssueDatapathRequestPort(iDecNode, iDecSessionId, DEFAULT_INPUT_PORTTAG, 364 &(iSourceTrackInfo->getTrackMimeType()), 365 (OsclAny*)iSourceTrackInfo, cmdid); 366 367 if (cmdid != -1 && leavecode == 0) 368 { 369 ++iPendingCmds; 370 } 371 else 372 { 373 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() RequestPort on iDecNode did a leave or failed")); 374 iState = PVPDP_ERROR; 375 RunIfNotReady(); 376 break; 377 } 378 379 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling RequestPort() on dec node(output)")); 380 leavecode = IssueDatapathRequestPort(iDecNode, iDecSessionId, DEFAULT_OUTPUT_PORTTAG, 381 &iDecSinkFormatString, (OsclAny*) & iDecSinkFormatString, cmdid); 382 383 384 if (cmdid != -1 && leavecode == 0) 385 { 386 ++iPendingCmds; 387 } 388 else 389 { 390 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() RequestPort on iDecNode did a leave or failed")); 391 iState = PVPDP_ERROR; 392 RunIfNotReady(); 393 break; 394 } 395 396 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling RequestPort() on sink node")); 397 leavecode = IssueDatapathRequestPort(iSinkNode, iSinkSessionId, DEFAULT_INPUT_PORTTAG, 398 &iDecSinkFormatString, (OsclAny*)iSinkNode, cmdid); 399 400 if (cmdid != -1 && leavecode == 0) 401 { 402 ++iPendingCmds; 403 } 404 else 405 { 406 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() RequestPort on iSinkNode did a leave or failed")); 407 iState = PVPDP_ERROR; 408 RunIfNotReady(); 409 break; 410 } 411 } 412 else 413 { 414 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling RequestPort() on sink node")); 415 leavecode = IssueDatapathRequestPort(iSinkNode, iSinkSessionId, DEFAULT_INPUT_PORTTAG, 416 &(iSourceTrackInfo->getTrackMimeType()), 417 (OsclAny*)iSinkNode, cmdid); 418 419 if (cmdid != -1 && leavecode == 0) 420 { 421 ++iPendingCmds; 422 } 423 else 424 { 425 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() RequestPort on iSinkNode did a leave or failed")); 426 iState = PVPDP_ERROR; 427 RunIfNotReady(); 428 break; 429 } 430 } 431 } 432 break; 433 434 case PREPARE_CONNECT: 435 OSCL_ASSERT(iSourceTrackInfo != NULL); 436 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PREPARE_CONNECT case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 437 438 if (iDatapathConfig == CONFIG_DEC) 439 { 440 OsclAny* temp = NULL; 441 iSourceOutPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 442 PvmiCapabilityAndConfig *portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 443 if (portconfigif) 444 { 445 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iSourceDecFormatType); 446 } 447 else 448 { 449 iState = PVPDP_ERROR; 450 RunIfNotReady(); 451 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for source node's outport not available")); 452 break; 453 } 454 455 temp = NULL; 456 iDecInPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 457 portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 458 if (portconfigif) 459 { 460 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iSourceDecFormatType); 461 } 462 else 463 { 464 iState = PVPDP_ERROR; 465 RunIfNotReady(); 466 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for dec node's inport not available")); 467 break; 468 } 469 470 if (iSourceOutPort->Connect(iDecInPort) != PVMFSuccess) 471 { 472 iState = PVPDP_ERROR; 473 RunIfNotReady(); 474 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Connect on source and dec ports failed")); 475 break; 476 } 477 478 temp = NULL; 479 iDecOutPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 480 portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 481 if (portconfigif) 482 { 483 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iDecSinkFormatType); 484 } 485 else 486 { 487 iState = PVPDP_ERROR; 488 RunIfNotReady(); 489 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for dec node's outport not available")); 490 break; 491 } 492 493 temp = NULL; 494 iSinkInPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 495 portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 496 if (portconfigif) 497 { 498 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iDecSinkFormatType); 499 } 500 else 501 { 502 iState = PVPDP_ERROR; 503 RunIfNotReady(); 504 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for sink node's inport not available")); 505 break; 506 } 507 508 if (iDecOutPort->Connect(iSinkInPort) != PVMFSuccess) 509 { 510 iState = PVPDP_ERROR; 511 RunIfNotReady(); 512 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Connect on dec and sink ports failed")); 513 break; 514 } 515 } 516 else 517 { 518 OsclAny* temp; 519 iSourceOutPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 520 PvmiCapabilityAndConfig *portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 521 if (portconfigif) 522 { 523 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iSourceSinkFormatType); 524 } 525 else 526 { 527 iState = PVPDP_ERROR; 528 RunIfNotReady(); 529 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for source node's outport not available")); 530 break; 531 } 532 533 temp = NULL; 534 iSinkInPort->QueryInterface(PVMI_CAPABILITY_AND_CONFIG_PVUUID, temp); 535 portconfigif = OSCL_STATIC_CAST(PvmiCapabilityAndConfig*, temp); 536 if (portconfigif) 537 { 538 pvmiSetPortFormatSync(portconfigif, PORT_CONFIG_INPUT_FORMATS_VALTYPE, iSourceSinkFormatType); 539 } 540 else 541 { 542 iState = PVPDP_ERROR; 543 RunIfNotReady(); 544 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Port config IF for sink node's inport not available")); 545 break; 546 } 547 548 if (iSourceOutPort->Connect(iSinkInPort) != PVMFSuccess) 549 { 550 iState = PVPDP_ERROR; 551 RunIfNotReady(); 552 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Connect on source and sink ports failed")); 553 break; 554 } 555 } 556 557 iState = PREPARE_PREPARE; 558 RunIfNotReady(); 559 break; 560 561 case PREPARE_PREPARE: 562 OSCL_ASSERT(iSourceTrackInfo != NULL); 563 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PREPARE_PREPARE case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 564 565 iPendingCmds = 0; 566 567 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Prepare() on sink node")); 568 leavecode = IssueDatapathPrepare(iSinkNode, iSinkSessionId, cmdid); 569 570 if (cmdid != -1 && leavecode == 0) 571 { 572 ++iPendingCmds; 573 if (iDatapathConfig == CONFIG_DEC) 574 { 575 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Prepare() on dec node")); 576 leavecode = IssueDatapathPrepare(iDecNode, iDecSessionId, cmdid); 577 578 if (cmdid != -1 && leavecode == 0) 579 { 580 ++iPendingCmds; 581 } 582 else 583 { 584 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Prepare on iDecNode did a leave or failed")); 585 iState = PVPDP_ERROR; 586 RunIfNotReady(); 587 break; 588 } 589 } 590 } 591 else 592 { 593 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Prepare on iSinkNode did a leave or failed")); 594 iState = PVPDP_ERROR; 595 RunIfNotReady(); 596 break; 597 } 598 break; 599 600 case PREPARED: 601 break; 602 603 case START_START: 604 OSCL_ASSERT(iSourceTrackInfo != NULL); 605 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing START_START case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 606 607 iPendingCmds = 0; 608 609 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Start() on sink node")); 610 leavecode = IssueDatapathStart(iSinkNode, iSinkSessionId, cmdid); 611 612 if (cmdid != -1 && leavecode == 0) 613 { 614 ++iPendingCmds; 615 } 616 else 617 { 618 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Start on iSinkNode did a leave or failed")); 619 iState = PVPDP_ERROR; 620 RunIfNotReady(); 621 break; 622 } 623 624 if (iDatapathConfig == CONFIG_DEC) 625 { 626 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Start() on dec node")); 627 leavecode = IssueDatapathStart(iDecNode, iDecSessionId, cmdid); 628 629 if (cmdid != -1 && leavecode == 0) 630 { 631 ++iPendingCmds; 632 } 633 else 634 { 635 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Start on iDecNode did a leave or failed")); 636 iState = PVPDP_ERROR; 637 RunIfNotReady(); 638 break; 639 } 640 } 641 break; 642 643 case STARTED: 644 break; 645 646 case PAUSE_PAUSE: 647 OSCL_ASSERT(iSourceTrackInfo != NULL); 648 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PAUSE_PAUSE case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 649 650 iPendingCmds = 0; 651 652 if (iSinkPaused == false) 653 { 654 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Pause() on sink node")); 655 leavecode = IssueDatapathPause(iSinkNode, iSinkSessionId, cmdid); 656 657 if (cmdid != -1 && leavecode == 0) 658 { 659 ++iPendingCmds; 660 } 661 else 662 { 663 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Pause on iSinkNode did a leave or failed")); 664 iState = PVPDP_ERROR; 665 RunIfNotReady(); 666 break; 667 } 668 } 669 else 670 { 671 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Sink already paused so skipping Pause() on sink")); 672 iSinkPaused = false; 673 } 674 675 if (iDatapathConfig == CONFIG_DEC) 676 { 677 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Pause() on dec node")); 678 leavecode = IssueDatapathPause(iDecNode, iDecSessionId, cmdid); 679 680 if (cmdid != -1 && leavecode == 0) 681 { 682 ++iPendingCmds; 683 } 684 else 685 { 686 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Pause on iDecNode did a leave or failed")); 687 iState = PVPDP_ERROR; 688 RunIfNotReady(); 689 break; 690 } 691 } 692 693 if (iPendingCmds == 0) 694 { 695 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() No pending node command in PAUSE_PAUSE so going to PAUSED")); 696 iState = PAUSED; 697 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Pause() command completed successfully")); 698 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 699 } 700 break; 701 702 case PAUSED: 703 break; 704 705 case STOP_STOP: 706 OSCL_ASSERT(iSourceTrackInfo != NULL); 707 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing STOP_STOP case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 708 709 iPendingCmds = 0; 710 711 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Stop() on sink node")); 712 leavecode = IssueDatapathStop(iSinkNode, iSinkSessionId, cmdid); 713 714 if (cmdid != -1 && leavecode == 0) 715 { 716 ++iPendingCmds; 717 } 718 else if (!iErrorCondition) 719 { 720 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Stop on iSinkNode did a leave or failed")); 721 iState = PVPDP_ERROR; 722 RunIfNotReady(); 723 break; 724 } 725 else 726 { 727 iErrorOccurredDuringErrorCondition = true; 728 } 729 730 if (iDatapathConfig == CONFIG_DEC) 731 { 732 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Stop() on dec node")); 733 leavecode = IssueDatapathStop(iDecNode, iDecSessionId, cmdid); 734 735 if (cmdid != -1 && leavecode == 0) 736 { 737 ++iPendingCmds; 738 } 739 else if (!iErrorCondition) 740 { 741 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Stop on iDecNode did a leave or failed")); 742 iState = PVPDP_ERROR; 743 RunIfNotReady(); 744 break; 745 } 746 else 747 { 748 iErrorOccurredDuringErrorCondition = true; 749 } 750 } 751 752 if (iPendingCmds == 0 && iErrorCondition) 753 { 754 iState = PVPDP_CANCELLED; 755 if (iErrorCondition && iErrorOccurredDuringErrorCondition) 756 { 757 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Stop() command completed with errors during error condition")); 758 iErrorCondition = false; 759 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 760 } 761 else 762 { 763 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Stop() command completed successfully")); 764 iErrorCondition = false; 765 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 766 } 767 } 768 break; 769 770 case STOPPED: 771 break; 772 773 // Note: ReleasePort must be done in two stages with dest ports first 774 // so the media data is freed in the dest port before the source port 775 case TEARDOWN_RELEASEPORT1: 776 OSCL_ASSERT(iSourceTrackInfo != NULL); 777 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing TEARDOWN_RELEASEPORT1 case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 778 779 iPendingCmds = 0; 780 781 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling ReleasePort() on sink node")); 782 leavecode = IssueDatapathReleasePort(iSinkNode, iSinkSessionId, iSinkInPort, cmdid); 783 784 if (cmdid != -1 && leavecode == 0) 785 { 786 ++iPendingCmds; 787 } 788 else if (!iErrorCondition) 789 { 790 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() ReleasePort on iSinkNode did a leave or failed")); 791 iState = PVPDP_ERROR; 792 RunIfNotReady(); 793 break; 794 } 795 else 796 { 797 iErrorOccurredDuringErrorCondition = true; 798 } 799 800 if (iDatapathConfig == CONFIG_DEC) 801 { 802 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling ReleasePort() on dec node(input)")); 803 leavecode = IssueDatapathReleasePort(iDecNode, iDecSessionId, iDecInPort, cmdid); 804 805 if (cmdid != -1 && leavecode == 0) 806 { 807 ++iPendingCmds; 808 } 809 else if (!iErrorCondition) 810 { 811 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() ReleasePort on iDecNode did a leave or failed")); 812 iState = PVPDP_ERROR; 813 RunIfNotReady(); 814 break; 815 } 816 else 817 { 818 iErrorOccurredDuringErrorCondition = true; 819 } 820 } 821 822 if (iPendingCmds == 0 && iErrorCondition) 823 { 824 iState = TEARDOWN_RELEASEPORT2; 825 RunIfNotReady(); 826 } 827 break; 828 829 case TEARDOWN_RELEASEPORT2: 830 OSCL_ASSERT(iSourceTrackInfo != NULL); 831 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing TEARDOWN_RELEASEPORT2 case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 832 833 iPendingCmds = 0; 834 835 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling ReleasePort() on source node")); 836 leavecode = IssueDatapathReleasePort(iSourceNode, iSourceSessionId, iSourceOutPort, cmdid); 837 838 if (cmdid != -1 && leavecode == 0) 839 { 840 ++iPendingCmds; 841 } 842 else if (!iErrorCondition) 843 { 844 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() ReleasePort on iSourceNode did a leave or failed")); 845 iState = PVPDP_ERROR; 846 RunIfNotReady(); 847 break; 848 } 849 else 850 { 851 iErrorOccurredDuringErrorCondition = true; 852 } 853 854 if (iDatapathConfig == CONFIG_DEC) 855 { 856 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling ReleasePort() on dec node(output)")); 857 leavecode = IssueDatapathReleasePort(iDecNode, iDecSessionId, iDecOutPort, cmdid); 858 859 if (cmdid != -1 && leavecode == 0) 860 { 861 ++iPendingCmds; 862 } 863 else if (!iErrorCondition) 864 { 865 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() ReleasePort on iDecNode did a leave or failed")); 866 iState = PVPDP_ERROR; 867 RunIfNotReady(); 868 break; 869 } 870 else 871 { 872 iErrorOccurredDuringErrorCondition = true; 873 } 874 } 875 876 if (iPendingCmds == 0 && iErrorCondition) 877 { 878 iState = TEARDOWNED; 879 if (iErrorCondition && iErrorOccurredDuringErrorCondition) 880 { 881 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Teardown() command completed with errors during error condition")); 882 iErrorCondition = false; 883 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 884 } 885 else 886 { 887 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Teardown() command completed successfully")); 888 iErrorCondition = false; 889 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 890 } 891 } 892 break; 893 894 case TEARDOWNED: 895 break; 896 897 case RESET_RESET: 898 OSCL_ASSERT(iSourceTrackInfo != NULL); 899 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing RESET_RESET case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 900 901 iPendingCmds = 0; 902 903 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Reset() on sink node")); 904 leavecode = IssueDatapathReset(iSinkNode, iSinkSessionId, cmdid); 905 906 if (cmdid != -1 && leavecode == 0) 907 { 908 ++iPendingCmds; 909 } 910 else if (!iErrorCondition) 911 { 912 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Reset on iSinkNode did a leave or failed")); 913 iState = PVPDP_ERROR; 914 RunIfNotReady(); 915 break; 916 } 917 else 918 { 919 iErrorOccurredDuringErrorCondition = true; 920 } 921 922 if (iDatapathConfig == CONFIG_DEC) 923 { 924 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Reset() on dec node")); 925 leavecode = IssueDatapathReset(iDecNode, iDecSessionId, cmdid); 926 927 if (cmdid != -1 && leavecode == 0) 928 { 929 ++iPendingCmds; 930 } 931 else if (!iErrorCondition) 932 { 933 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Reset on iDecNode did a leave or failed")); 934 iState = PVPDP_ERROR; 935 RunIfNotReady(); 936 break; 937 } 938 else 939 { 940 iErrorOccurredDuringErrorCondition = true; 941 } 942 } 943 944 if (iPendingCmds == 0 && iErrorCondition) 945 { 946 iState = RESETTED; 947 RunIfNotReady(); 948 } 949 break; 950 951 case RESETTED: 952 { 953 OSCL_ASSERT(iSourceTrackInfo != NULL); 954 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing RESETTED case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 955 956 PVMFStatus retval; 957 958 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling Disconnect() on nodes")); 959 960 retval = iSourceNode->Disconnect(iSourceSessionId); 961 if (retval != PVMFSuccess) 962 { 963 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Disconnect on iSourceNode failed, asserting")); 964 OSCL_ASSERT(false); 965 } 966 967 retval = iSinkNode->Disconnect(iSinkSessionId); 968 if (retval != PVMFSuccess) 969 { 970 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Disconnect on iSinkNode failed, asserting")); 971 OSCL_ASSERT(false); 972 } 973 974 if (iDatapathConfig == CONFIG_DEC) 975 { 976 retval = iDecNode->Disconnect(iDecSessionId); 977 if (retval != PVMFSuccess) 978 { 979 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Disconnect on iDecNode failed, asserting")); 980 OSCL_ASSERT(false); 981 } 982 } 983 984 iState = PVPDP_IDLE; 985 if (iErrorCondition && iErrorOccurredDuringErrorCondition) 986 { 987 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Reset() command completed with errors during error condition")); 988 iErrorCondition = false; 989 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 990 } 991 else 992 { 993 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Reset() command completed successfully")); 994 iErrorCondition = false; 995 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 996 } 997 } 998 break; 999 1000 case PVPDP_CANCEL: 1001 { 1002 OSCL_ASSERT(iSourceTrackInfo != NULL); 1003 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Processing PVPDP_CANCEL case for %s", iSourceTrackInfo->getTrackMimeType().get_cstr())); 1004 1005 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling CancelAllCommands() on sink node")); 1006 leavecode = IssueDatapathCancel(iSinkNode, iSinkSessionId, cmdid); 1007 1008 if (cmdid != -1 && leavecode == 0) 1009 { 1010 ++iPendingCmds; 1011 } 1012 else 1013 { 1014 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() CancelAllCommands on iSinkNode did a leave or failed")); 1015 } 1016 1017 if (iDatapathConfig == CONFIG_DEC) 1018 { 1019 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Calling CancelAllCommands() on dec node")); 1020 leavecode = IssueDatapathCancel(iDecNode, iDecSessionId, cmdid); 1021 1022 if (cmdid != -1 && leavecode == 0) 1023 { 1024 ++iPendingCmds; 1025 } 1026 else 1027 { 1028 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() CancelAllCommands on iDecNode did a leave or failed")); 1029 } 1030 } 1031 1032 if (iPendingCmds == 0) 1033 { 1034 // If all CancelAllCommands() weren't accepted, assume everything is cancelled so report cancel complete 1035 iState = PVPDP_CANCELLED; 1036 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Cancel() command completed successfully")); 1037 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1038 } 1039 } 1040 break; 1041 1042 case PVPDP_CANCELLED: 1043 break; 1044 1045 case PVPDP_ERROR: 1046 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::Run() Report command failed")); 1047 iState = PVPDP_CANCELLED; 1048 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 1049 break; 1050 1051 default: 1052 break; 1053 } 1054 } 1055 1056 1057 void PVPlayerDatapath::NodeCommandCompleted(const PVMFCmdResp& aResponse) 1058 { 1059 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() In")); 1060 1061 switch (iState) 1062 { 1063 case PREPARE_INIT: 1064 --iPendingCmds; 1065 if (aResponse.GetCmdStatus() == PVMFSuccess) 1066 { 1067 if (iPendingCmds == 0) 1068 { 1069 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Init() requests completed successfully")); 1070 iState = PREPARE_REQPORT; 1071 RunIfNotReady(); 1072 } 1073 } 1074 else 1075 { 1076 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in PREPARE_INIT state")); 1077 iState = PVPDP_CANCELLED; 1078 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1079 } 1080 break; 1081 1082 case PREPARE_REQPORT: 1083 --iPendingCmds; 1084 if (aResponse.GetCmdStatus() == PVMFSuccess) 1085 { 1086 if (aResponse.GetContext() == (OsclAny*)iSourceNode) 1087 { 1088 iSourceOutPort = (PVMFPortInterface*)(aResponse.GetEventData()); 1089 } 1090 else if (aResponse.GetContext() == (OsclAny*)iSinkNode) 1091 { 1092 iSinkInPort = (PVMFPortInterface*)(aResponse.GetEventData()); 1093 } 1094 else if (aResponse.GetContext() == (OsclAny*) iSourceTrackInfo) 1095 { 1096 iDecInPort = (PVMFPortInterface*)(aResponse.GetEventData()); 1097 } 1098 else if (aResponse.GetContext() == (OsclAny*) &iDecSinkFormatString) 1099 { 1100 iDecOutPort = (PVMFPortInterface*)(aResponse.GetEventData()); 1101 } 1102 if (iPendingCmds == 0) 1103 { 1104 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node RequestPort() requests completed successfully")); 1105 iState = PREPARE_CONNECT; 1106 RunIfNotReady(); 1107 } 1108 } 1109 else 1110 { 1111 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in PREPARE_REQPORT state")); 1112 iState = PVPDP_CANCELLED; 1113 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1114 } 1115 break; 1116 1117 case PREPARE_PREPARE: 1118 --iPendingCmds; 1119 if (aResponse.GetCmdStatus() == PVMFSuccess) 1120 { 1121 if (iPendingCmds == 0) 1122 { 1123 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Prepare() requests completed successfully")); 1124 iState = PREPARED; 1125 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Prepare() command completed successfully")); 1126 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1127 } 1128 } 1129 else 1130 { 1131 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in PREPARE_PREPARE state")); 1132 iState = PVPDP_CANCELLED; 1133 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1134 } 1135 break; 1136 1137 case START_START: 1138 --iPendingCmds; 1139 if (aResponse.GetCmdStatus() == PVMFSuccess) 1140 { 1141 if (iPendingCmds == 0) 1142 { 1143 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Start() requests completed successfully")); 1144 iState = STARTED; 1145 // Send event immediately- iContext might get changed before its next Run 1146 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Start() command completed successfully")); 1147 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1148 } 1149 } 1150 else 1151 { 1152 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in START_START state")); 1153 iState = PVPDP_CANCELLED; 1154 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1155 } 1156 break; 1157 1158 case PAUSE_PAUSE: 1159 --iPendingCmds; 1160 if (aResponse.GetCmdStatus() == PVMFSuccess) 1161 { 1162 if (iPendingCmds == 0) 1163 { 1164 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Pause() requests completed successfully")); 1165 iState = PAUSED; 1166 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Pause() command completed successfully")); 1167 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1168 } 1169 } 1170 else 1171 { 1172 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in PAUSE_PAUSE state")); 1173 iState = PVPDP_CANCELLED; 1174 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1175 } 1176 break; 1177 1178 case STOP_STOP: 1179 --iPendingCmds; 1180 if (aResponse.GetCmdStatus() == PVMFSuccess || iErrorCondition) 1181 { 1182 if (aResponse.GetCmdStatus() != PVMFSuccess && iErrorCondition) 1183 { 1184 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node reported error in Stop() during error condition")); 1185 iErrorOccurredDuringErrorCondition = true; 1186 } 1187 if (iPendingCmds == 0) 1188 { 1189 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Stop() requests completed")); 1190 iState = PVPDP_IDLE; 1191 if (iErrorCondition && iErrorOccurredDuringErrorCondition) 1192 { 1193 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Stop() command completed with errors during error condition")); 1194 iErrorCondition = false; 1195 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 1196 } 1197 else 1198 { 1199 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Stop() command completed successfully")); 1200 iErrorCondition = false; 1201 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1202 } 1203 } 1204 } 1205 else 1206 { 1207 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in STOP_STOP state")); 1208 iState = PVPDP_CANCELLED; 1209 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1210 } 1211 break; 1212 1213 case RESET_RESET: 1214 --iPendingCmds; 1215 if (aResponse.GetCmdStatus() == PVMFSuccess || iErrorCondition) 1216 { 1217 if (aResponse.GetCmdStatus() != PVMFSuccess && iErrorCondition) 1218 { 1219 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node reported error in Reset() during error condition")); 1220 iErrorOccurredDuringErrorCondition = true; 1221 } 1222 if (iPendingCmds == 0) 1223 { 1224 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node Reset() requests completed")); 1225 iState = RESETTED; 1226 RunIfNotReady(); 1227 } 1228 } 1229 else 1230 { 1231 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in RESET_RESET state")); 1232 iState = PVPDP_CANCELLED; 1233 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1234 } 1235 break; 1236 1237 case TEARDOWN_RELEASEPORT1: 1238 --iPendingCmds; 1239 if (aResponse.GetCmdStatus() == PVMFSuccess || iErrorCondition) 1240 { 1241 if (aResponse.GetCmdStatus() != PVMFSuccess && iErrorCondition) 1242 { 1243 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node reported error in ReleasePort() during error condition(1st set)")); 1244 iErrorOccurredDuringErrorCondition = true; 1245 } 1246 if (iPendingCmds == 0) 1247 { 1248 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node ReleasePort() requests completed(1st set)")); 1249 iState = TEARDOWN_RELEASEPORT2; 1250 RunIfNotReady(); 1251 break; 1252 } 1253 } 1254 else 1255 { 1256 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in TEARDOWN_RELEASEPORT1 state")); 1257 iState = PVPDP_CANCELLED; 1258 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1259 } 1260 break; 1261 1262 case TEARDOWN_RELEASEPORT2: 1263 --iPendingCmds; 1264 if (aResponse.GetCmdStatus() == PVMFSuccess || iErrorCondition) 1265 { 1266 if (aResponse.GetCmdStatus() != PVMFSuccess && iErrorCondition) 1267 { 1268 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node reported error in ReleasePort() during error condition(2nd set)")); 1269 iErrorOccurredDuringErrorCondition = true; 1270 } 1271 if (iPendingCmds == 0) 1272 { 1273 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node ReleasePort() requests completed(2nd set)")); 1274 iState = TEARDOWNED; 1275 if (iErrorCondition && iErrorOccurredDuringErrorCondition) 1276 { 1277 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Teardown() command completed with errors during error condition")); 1278 iErrorCondition = false; 1279 iObserver->HandlePlayerDatapathEvent(0, PVMFFailure, iContext); 1280 } 1281 else 1282 { 1283 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::Run() Report Teardown() command completed successfully")); 1284 iErrorCondition = false; 1285 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1286 } 1287 break; 1288 } 1289 } 1290 else 1291 { 1292 PVLOGGER_LOGMSG(PVLOGMSG_INST_HLDBG, iLogger, PVLOGMSG_ERR, (0, "PVPlayerDatapath::NodeCommandCompleted() Node command failed in TEARDOWN_RELEASEPORT2 state")); 1293 iState = PVPDP_CANCELLED; 1294 iObserver->HandlePlayerDatapathEvent(0, aResponse.GetCmdStatus(), iContext, (PVMFCmdResp*)&aResponse); 1295 } 1296 break; 1297 1298 case PVPDP_CANCEL: 1299 // When cancelling, don't care about the command status 1300 --iPendingCmds; 1301 if (iPendingCmds == 0) 1302 { 1303 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() All node CancelAllCommands() requests completed")); 1304 iState = PVPDP_CANCELLED; 1305 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() Report Cancel() command completed successfully")); 1306 iObserver->HandlePlayerDatapathEvent(0, PVMFSuccess, iContext); 1307 } 1308 break; 1309 1310 case PVPDP_CANCELLED: 1311 case PVPDP_IDLE: 1312 --iPendingCmds; 1313 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() Report %d Pending command in NodeCommandcompleted ", iPendingCmds)); 1314 break; 1315 1316 default: 1317 break; 1318 } 1319 1320 PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVPlayerDatapath::NodeCommandCompleted() Out")); 1321 } 1322 1323 1324 void PVPlayerDatapath::HandleNodeInformationalEvent(const PVMFAsyncEvent& /*aEvent*/) 1325 { 1326 // Ignore node info events since the engine will receive it directly from the nodes 1327 } 1328 1329 1330 void PVPlayerDatapath::HandleNodeErrorEvent(const PVMFAsyncEvent& /*aEvent*/) 1331 { 1332 // Ignore node error events since the engine will receive it directly from the nodes 1333 } 1334 1335 PVMFStatus PVPlayerDatapath::IssueDatapathInit(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1336 { 1337 PVMFStatus leavecode; 1338 OSCL_TRY(leavecode, aCmdId = aNode->Init(aSessionId)); 1339 OSCL_FIRST_CATCH_ANY(leavecode,;); 1340 return leavecode; 1341 } 1342 1343 PVMFStatus PVPlayerDatapath::IssueDatapathRequestPort(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, 1344 int32 aPortTag, PvmfMimeString* aPortConfig, 1345 OsclAny* aContext, PVMFCommandId &aCmdId) 1346 { 1347 PVMFStatus leavecode; 1348 OSCL_TRY(leavecode, aCmdId = aNode->RequestPort(aSessionId, aPortTag, aPortConfig, aContext)); 1349 OSCL_FIRST_CATCH_ANY(leavecode,;); 1350 return leavecode; 1351 } 1352 1353 PVMFStatus PVPlayerDatapath::IssueDatapathPrepare(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1354 { 1355 PVMFStatus leavecode; 1356 OSCL_TRY(leavecode, aCmdId = aNode->Prepare(aSessionId)); 1357 OSCL_FIRST_CATCH_ANY(leavecode,;); 1358 return leavecode; 1359 } 1360 1361 PVMFStatus PVPlayerDatapath::IssueDatapathStart(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1362 { 1363 PVMFStatus leavecode; 1364 OSCL_TRY(leavecode, aCmdId = aNode->Start(aSessionId)); 1365 OSCL_FIRST_CATCH_ANY(leavecode,;); 1366 return leavecode; 1367 } 1368 1369 PVMFStatus PVPlayerDatapath::IssueDatapathPause(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1370 { 1371 PVMFStatus leavecode; 1372 OSCL_TRY(leavecode, aCmdId = aNode->Pause(aSessionId)); 1373 OSCL_FIRST_CATCH_ANY(leavecode,;); 1374 return leavecode; 1375 } 1376 1377 PVMFStatus PVPlayerDatapath::IssueDatapathStop(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1378 { 1379 PVMFStatus leavecode; 1380 OSCL_TRY(leavecode, aCmdId = aNode->Stop(aSessionId)); 1381 OSCL_FIRST_CATCH_ANY(leavecode,;); 1382 return leavecode; 1383 } 1384 1385 PVMFStatus PVPlayerDatapath::IssueDatapathReleasePort(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFPortInterface* aPort, PVMFCommandId &aCmdId) 1386 { 1387 PVMFStatus leavecode; 1388 OSCL_TRY(leavecode, aCmdId = aNode->ReleasePort(aSessionId, *aPort)); 1389 OSCL_FIRST_CATCH_ANY(leavecode,;); 1390 return leavecode; 1391 } 1392 1393 PVMFStatus PVPlayerDatapath::IssueDatapathReset(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1394 { 1395 PVMFStatus leavecode; 1396 OSCL_TRY(leavecode, aCmdId = aNode->Reset(aSessionId)); 1397 OSCL_FIRST_CATCH_ANY(leavecode,;); 1398 return leavecode; 1399 } 1400 1401 PVMFStatus PVPlayerDatapath::IssueDatapathCancel(PVMFNodeInterface* aNode, PVMFSessionId aSessionId, PVMFCommandId &aCmdId) 1402 { 1403 PVMFStatus leavecode; 1404 OSCL_TRY(leavecode, aCmdId = aNode->CancelAllCommands(aSessionId)); 1405 OSCL_FIRST_CATCH_ANY(leavecode,;); 1406 return leavecode; 1407 } 1408 1409 1410