bool OMXClock::OMXReset(bool lock /* = true */) { if(lock) Lock(); m_iCurrentPts = DVD_NOPTS_VALUE; m_video_clock = DVD_NOPTS_VALUE; m_audio_clock = DVD_NOPTS_VALUE; if(m_omx_clock.GetComponent() != NULL) { OMX_ERRORTYPE omx_err = OMX_ErrorNone; OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); OMXStop(false); clock.eState = OMX_TIME_ClockStateWaitingForStartTime; clock.nOffset = ToOMXTime(-1000LL * OMX_PRE_ROLL); if(m_has_audio) { clock.nWaitMask |= OMX_CLOCKPORT0; } if(m_has_video) { clock.nWaitMask |= OMX_CLOCKPORT1; clock.nWaitMask |= OMX_CLOCKPORT2; } omx_err = OMX_SetConfig(m_omx_clock.GetComponent(), OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { CLog::Log(LOGERROR, "OMXClock::Reset error setting OMX_IndexConfigTimeClockState\n"); if(lock) UnLock(); return false; } OMXStart(0.0, false); } if(lock) UnLock(); return true; }
bool OMXClock::OMXReset(bool lock /* = true */) { if(m_omx_clock.GetComponent() == NULL) { return false; } if(lock) { Lock(); } OMXStop(false); OMXStart(0.0, false); if(lock) { UnLock(); } return true; }