bool OMXClock::OMXWaitStart(double pts, bool lock /* = true */) { if(m_omx_clock.GetComponent() == NULL) return false; if(lock) Lock(); OMX_ERRORTYPE omx_err = OMX_ErrorNone; OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); clock.eState = OMX_TIME_ClockStateWaitingForStartTime; OMXSetClockPorts(&clock); clock.nStartTime = ToOMXTime((uint64_t)pts); //clock.nOffset = ToOMXTime(-1000LL * 200); omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { CLog::Log(LOGERROR, "OMXClock::OMXWaitStart error setting OMX_IndexConfigTimeClockState\n"); if(lock) UnLock(); return false; } if(lock) UnLock(); return true; }
bool OMXClock::OMXReset(bool lock /* = true */) { if(m_omx_clock.GetComponent() == NULL) return false; if(lock) Lock(); m_audio_buffer = false; OMX_ERRORTYPE omx_err = OMX_ErrorNone; if(!OMXSetReferenceClock(false)) { if(lock) UnLock(); return false; } OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); omx_err = m_omx_clock.GetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { CLog::Log(LOGERROR, "OMXClock::OMXReset error getting OMX_IndexConfigTimeClockState\n"); if(lock) UnLock(); return false; } clock.eState = OMX_TIME_ClockStateWaitingForStartTime; clock.nOffset = ToOMXTime(-1000LL * OMX_PRE_ROLL); OMXSetClockPorts(&clock); if(clock.nWaitMask) { omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { CLog::Log(LOGERROR, "OMXClock::OMXReset error setting OMX_IndexConfigTimeClockState\n"); if(lock) UnLock(); return false; } } CLog::Log(LOGDEBUG, "OMXClock::OMXReset audio / video : %d / %d start audio / video : %d / %d wait mask %d\n", m_has_audio, m_has_video, m_audio_start, m_video_start, clock.nWaitMask); if(lock) UnLock(); return true; }
bool OMXClock::OMXReset(bool has_video, bool has_audio, bool lock /* = true */) { if(m_omx_clock.GetComponent() == NULL) return false; if(lock) Lock(); if(!OMXSetReferenceClock(has_audio, false)) { if(lock) UnLock(); return false; } if (m_eState == OMX_TIME_ClockStateStopped) { OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); clock.eState = OMX_TIME_ClockStateWaitingForStartTime; clock.nOffset = ToOMXTime(-1000LL * OMX_PRE_ROLL); OMXSetClockPorts(&clock, has_video, has_audio); if(clock.nWaitMask) { OMX_ERRORTYPE omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { LOG_ERROR << "OMXClock::OMXReset error setting OMX_IndexConfigTimeClockState"; if(lock) UnLock(); return false; } sprintf(g_log_buf, "OMXClock::OMXReset audio / video : %d / %d wait mask %d->%d state : %d->%d\n", has_audio, has_video, m_WaitMask, clock.nWaitMask, m_eState, clock.eState); LOG_TRACE_2 << g_log_buf; if (m_eState != OMX_TIME_ClockStateStopped) m_WaitMask = clock.nWaitMask; m_eState = clock.eState; } } m_last_media_time = 0.0f; if(lock) UnLock(); return true; }
bool OMXClock::OMXReset(bool lock /* = true */) { if(m_omx_clock.GetComponent() == NULL) return false; if(lock) Lock(); CLog::Log(LOGDEBUG, "OMXClock::OMXReset 0x%08x\n", m_omx_clock.GetState()); m_audio_buffer = false; OMX_ERRORTYPE omx_err = OMX_ErrorNone; if(!OMXSetReferenceClock(false)) { UnLock(); return false; } OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); clock.eState = OMX_TIME_ClockStateWaitingForStartTime; //clock.nOffset = ToOMXTime(-1000LL * 200); OMXSetClockPorts(&clock); if(clock.nWaitMask) { omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) { CLog::Log(LOGERROR, "OMXClock::OMXReset error setting OMX_IndexConfigTimeClockState\n"); if(lock) UnLock(); return false; } } if(lock) UnLock(); return true; }