/*---------------------------------------------------------------------- | NPT_TimeStamp::operator- +---------------------------------------------------------------------*/ NPT_TimeStamp operator-(const NPT_TimeStamp& timestamp, long seconds) { // shortcut if (seconds == 0) return NPT_TimeStamp(timestamp); NPT_TimeStamp result = timestamp; result.m_Seconds -= seconds; return result; }
/*---------------------------------------------------------------------- | PLT_StateVariable::IsReadyToPublish +---------------------------------------------------------------------*/ bool PLT_StateVariable::IsReadyToPublish() { NPT_TimeStamp now; NPT_System::GetCurrentTimeStamp(now); if (m_Rate == NPT_TimeStamp() || m_LastEvent + m_Rate <= now ) { m_LastEvent = now; return true; } return false; }
/*---------------------------------------------------------------------- | PLT_ThreadTask::Start +---------------------------------------------------------------------*/ NPT_Result PLT_ThreadTask::Start(PLT_TaskManager* task_manager,/* = NULL */ NPT_TimeInterval* delay, /* = NULL */ bool auto_destroy /* = true */) { m_Abort.SetValue(0); m_AutoDestroy = auto_destroy; m_Delay = delay?*delay:NPT_TimeStamp(0.); m_TaskManager = task_manager; if (m_TaskManager) { NPT_CHECK_SEVERE(m_TaskManager->AddTask(this)); return NPT_SUCCESS; } else { return StartThread(); } }
/*---------------------------------------------------------------------- | PLT_MediaController::OnGetPositionInfoResponse +---------------------------------------------------------------------*/ NPT_Result PLT_MediaController::OnGetPositionInfoResponse(NPT_Result res, PLT_DeviceDataReference& device, PLT_ActionReference& action, void* userdata) { NPT_String value; PLT_PositionInfo info; if (NPT_FAILED(res) || action->GetErrorCode() != 0) { goto bad_action; } if (NPT_FAILED(action->GetArgumentValue("Track", info.track))) { goto bad_action; } if (NPT_FAILED(action->GetArgumentValue("TrackDuration", value))) { goto bad_action; } if (NPT_FAILED(PLT_Didl::ParseTimeStamp(value, info.track_duration))) { // some renderers return garbage sometimes info.track_duration = NPT_TimeStamp(0.); } if (NPT_FAILED(action->GetArgumentValue("TrackMetaData", info.track_metadata))) { goto bad_action; } if (NPT_FAILED(action->GetArgumentValue("TrackURI", info.track_uri))) { goto bad_action; } if (NPT_FAILED(action->GetArgumentValue("RelTime", value))) { goto bad_action; } // NOT_IMPLEMENTED is a valid value according to spec if (value != "NOT_IMPLEMENTED" && NPT_FAILED(PLT_Didl::ParseTimeStamp(value, info.rel_time))) { // some dogy renderers return garbage sometimes info.rel_time = NPT_TimeStamp(-1.0f); } if (NPT_FAILED(action->GetArgumentValue("AbsTime", value))) { goto bad_action; } // NOT_IMPLEMENTED is a valid value according to spec if (value != "NOT_IMPLEMENTED" && NPT_FAILED(PLT_Didl::ParseTimeStamp(value, info.abs_time))) { // some dogy renderers return garbage sometimes info.abs_time = NPT_TimeStamp(-1.0f); } if (NPT_FAILED(action->GetArgumentValue("RelCount", info.rel_count))) { goto bad_action; } if (NPT_FAILED(action->GetArgumentValue("AbsCount", info.abs_count))) { goto bad_action; } m_Delegate->OnGetPositionInfoResult(NPT_SUCCESS, device, &info, userdata); return NPT_SUCCESS; bad_action: m_Delegate->OnGetPositionInfoResult(NPT_FAILURE, device, NULL, userdata); return NPT_FAILURE; }