Home | History | Annotate | Download | only in src
      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