bool OMXClock::OMXInitialize(bool has_video, bool has_audio) { OMX_ERRORTYPE omx_err = OMX_ErrorNone; std::string componentName = ""; m_has_video = has_video; m_has_audio = has_audio; m_video_start = false; m_audio_start = false; m_pause = false; m_audio_buffer = false; componentName = "OMX.broadcom.clock"; if(!m_omx_clock.Initialize((const std::string)componentName, OMX_IndexParamOtherInit)) return false; if(!OMXSetReferenceClock(false)) return false; OMX_TIME_CONFIG_CLOCKSTATETYPE clock; OMX_INIT_STRUCTURE(clock); clock.eState = OMX_TIME_ClockStateWaitingForStartTime; omx_err = m_omx_clock.SetConfig(OMX_IndexConfigTimeClockState, &clock); if(omx_err != OMX_ErrorNone) CLog::Log(LOGWARNING, "OMXClock::OMXInitialize setting OMX_IndexConfigTimeClockState\n"); 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; }