summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2014-03-23 10:13:39 +0100
committerThomas Reufer <thomas@reufer.ch>2014-03-23 10:13:39 +0100
commit2caf892efd9bdc31bc0a688c6bda3424f4f53233 (patch)
tree7c5c9b8b18aa440cce078f7f39bceaff08aaa6c3
parent0c2e145ce8510204d488567b16e26e3053b0279e (diff)
downloadvdr-plugin-rpihddevice-2caf892efd9bdc31bc0a688c6bda3424f4f53233.tar.gz
vdr-plugin-rpihddevice-2caf892efd9bdc31bc0a688c6bda3424f4f53233.tar.bz2
simplified OMX buffer polling
-rw-r--r--omx.c70
-rw-r--r--omx.h8
2 files changed, 32 insertions, 46 deletions
diff --git a/omx.c b/omx.c
index 4009d94..8a33aeb 100644
--- a/omx.c
+++ b/omx.c
@@ -198,9 +198,9 @@ void cOmx::OnBufferEmpty(void *instance, COMPONENT_T *comp)
{
cOmx* omx = static_cast <cOmx*> (instance);
if (comp == omx->m_comp[eVideoDecoder])
- omx->m_freeVideoBuffers++;
+ omx->m_freeVideoBuffers = true;
else if (comp == omx->m_comp[eAudioRender])
- omx->m_freeAudioBuffers++;
+ omx->m_freeAudioBuffers = true;
}
void cOmx::OnPortSettingsChanged(void *instance, COMPONENT_T *comp, OMX_U32 data)
@@ -239,8 +239,8 @@ cOmx::cOmx() :
m_setAudioStartTime(false),
m_setVideoStartTime(false),
m_setVideoDiscontinuity(false),
- m_freeAudioBuffers(0),
- m_freeVideoBuffers(0),
+ m_freeAudioBuffers(true),
+ m_freeVideoBuffers(true),
m_clockReference(eClockRefNone),
m_clockScale(0),
m_eventReady(new cCondWait()),
@@ -831,7 +831,7 @@ int cOmx::SetVideoCodec(cVideoCodec::eCodec codec, eDataUnitType dataUnit)
ELOG("failed to get video decoder port parameters!");
param.nBufferCountActual = 40;
- m_freeVideoBuffers = param.nBufferCountActual;
+ m_freeVideoBuffers = true;
if (OMX_SetParameter(ILC_GET_HANDLE(m_comp[eVideoDecoder]),
OMX_IndexParamPortDefinition, &param) != OMX_ErrorNone)
@@ -975,7 +975,7 @@ int cOmx::SetupAudioRender(cAudioCodec::eCodec outputFormat, int channels,
param.nBufferSize = KILOBYTE(160);
param.nBufferCountActual = 4;
- m_freeAudioBuffers = param.nBufferCountActual;
+ m_freeAudioBuffers = true;
if (OMX_SetParameter(ILC_GET_HANDLE(m_comp[eAudioRender]),
OMX_IndexParamPortDefinition, &param) != OMX_ErrorNone)
@@ -1038,21 +1038,19 @@ void cOmx::SetDisplayRegion(int x, int y, int width, int height)
OMX_BUFFERHEADERTYPE* cOmx::GetAudioBuffer(uint64_t pts)
{
Lock();
- OMX_BUFFERHEADERTYPE* buf = NULL;
- if (m_freeAudioBuffers > 0)
- {
- buf = ilclient_get_input_buffer(m_comp[eAudioRender], 100, 0);
- if (buf)
- {
- cOmx::PtsToTicks(pts, buf->nTimeStamp);
- buf->nFlags = pts ? 0 : OMX_BUFFERFLAG_TIME_UNKNOWN;
- buf->nFlags |= m_setAudioStartTime ? OMX_BUFFERFLAG_STARTTIME : 0;
+ OMX_BUFFERHEADERTYPE* buf =
+ ilclient_get_input_buffer(m_comp[eAudioRender], 100, 0);
- m_setAudioStartTime = false;
- m_freeAudioBuffers--;
- }
+ if (buf)
+ {
+ cOmx::PtsToTicks(pts, buf->nTimeStamp);
+ buf->nFlags = pts ? 0 : OMX_BUFFERFLAG_TIME_UNKNOWN;
+ buf->nFlags |= m_setAudioStartTime ? OMX_BUFFERFLAG_STARTTIME : 0;
+ m_setAudioStartTime = false;
}
+ else
+ m_freeAudioBuffers = false;
Unlock();
return buf;
@@ -1061,38 +1059,26 @@ OMX_BUFFERHEADERTYPE* cOmx::GetAudioBuffer(uint64_t pts)
OMX_BUFFERHEADERTYPE* cOmx::GetVideoBuffer(uint64_t pts)
{
Lock();
- OMX_BUFFERHEADERTYPE* buf = NULL;
+ OMX_BUFFERHEADERTYPE* buf =
+ ilclient_get_input_buffer(m_comp[eVideoDecoder], 130, 0);
- if (m_freeVideoBuffers > 0)
+ if (buf)
{
- buf = ilclient_get_input_buffer(m_comp[eVideoDecoder], 130, 0);
- if (buf)
- {
- cOmx::PtsToTicks(pts, buf->nTimeStamp);
- buf->nFlags = pts ? 0 : OMX_BUFFERFLAG_TIME_UNKNOWN;
- buf->nFlags |= m_setVideoStartTime ? OMX_BUFFERFLAG_STARTTIME : 0;
- buf->nFlags |= m_setVideoDiscontinuity ? OMX_BUFFERFLAG_DISCONTINUITY : 0;
-
- m_setVideoStartTime = false;
- m_setVideoDiscontinuity = false;
- m_freeVideoBuffers--;
- }
+ cOmx::PtsToTicks(pts, buf->nTimeStamp);
+ buf->nFlags = pts ? 0 : OMX_BUFFERFLAG_TIME_UNKNOWN;
+ buf->nFlags |= m_setVideoStartTime ? OMX_BUFFERFLAG_STARTTIME : 0;
+ buf->nFlags |= m_setVideoDiscontinuity ? OMX_BUFFERFLAG_DISCONTINUITY : 0;
+
+ m_setVideoStartTime = false;
+ m_setVideoDiscontinuity = false;
}
+ else
+ m_freeVideoBuffers = false;
Unlock();
return buf;
}
-bool cOmx::PollVideoBuffers(int minBuffers)
-{
- return (m_freeVideoBuffers > minBuffers);
-}
-
-bool cOmx::PollAudioBuffers(int minBuffers)
-{
- return (m_freeAudioBuffers > minBuffers);
-}
-
bool cOmx::EmptyAudioBuffer(OMX_BUFFERHEADERTYPE *buf)
{
if (!buf)
diff --git a/omx.h b/omx.h
index dfcc7c1..7aeff7d 100644
--- a/omx.h
+++ b/omx.h
@@ -88,8 +88,8 @@ public:
OMX_BUFFERHEADERTYPE* GetAudioBuffer(uint64_t pts = 0);
OMX_BUFFERHEADERTYPE* GetVideoBuffer(uint64_t pts = 0);
- bool PollVideoBuffers(int minBuffers = 0);
- bool PollAudioBuffers(int minBuffers = 0);
+ bool inline PollVideoBuffers() { return m_freeVideoBuffers; }
+ bool inline PollAudioBuffers() { return m_freeAudioBuffers; }
bool EmptyAudioBuffer(OMX_BUFFERHEADERTYPE *buf);
bool EmptyVideoBuffer(OMX_BUFFERHEADERTYPE *buf);
@@ -131,8 +131,8 @@ private:
bool m_setVideoStartTime;
bool m_setVideoDiscontinuity;
- int m_freeAudioBuffers;
- int m_freeVideoBuffers;
+ bool m_freeAudioBuffers;
+ bool m_freeVideoBuffers;
eClockReference m_clockReference;
OMX_S32 m_clockScale;