From 9ab5d08c82f4670414c8f3fdf32fbb9654913fad Mon Sep 17 00:00:00 2001 From: huceke Date: Mon, 26 Mar 2012 06:50:21 +0200 Subject: [PATCH] [rbp] fixed broken omx output buffer handling --- xbmc/cores/omxplayer/OMXTexture.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/xbmc/cores/omxplayer/OMXTexture.cpp b/xbmc/cores/omxplayer/OMXTexture.cpp index de765c03d..81540ce4b 100644 --- a/xbmc/cores/omxplayer/OMXTexture.cpp +++ b/xbmc/cores/omxplayer/OMXTexture.cpp @@ -28,6 +28,7 @@ #include "OMXTexture.h" #include "OMXStreamInfo.h" +#include "OMXClock.h" #include "utils/log.h" #include "linux/XMemUtils.h" @@ -117,6 +118,8 @@ int COMXTexture::Decode(COMXImage *omx_image, void *egl_image, void *egl_display unsigned int demuxer_bytes = 0; const uint8_t *demuxer_content = NULL; OMX_ERRORTYPE omx_err = OMX_ErrorNone; + OMX_BUFFERHEADERTYPE* m_output_buffer; + int nTimeOut = 0; if(!m_is_open || !omx_image) return false; @@ -346,9 +349,20 @@ int COMXTexture::Decode(COMXImage *omx_image, void *egl_image, void *egl_display goto do_exit; } - OMX_BUFFERHEADERTYPE* m_output_buffer; // 2000ms - this has to wait for jpeg decode, so could take a while - m_output_buffer=m_omx_egl_render.GetOutputBuffer(2000); + while(nTimeOut < 2000) + { + m_output_buffer=m_omx_egl_render.GetOutputBuffer(2000); + if (!m_output_buffer) { + OMXClock::OMXSleep(50); + nTimeOut += 50; + } + else + { + break; + } + } + if (!m_output_buffer) { CLog::Log(LOGERROR, "%s::%s error m_omx_egl_render.GetOutputBuffer\n", CLASSNAME, __func__); goto do_exit;