summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2014-03-27 07:38:00 +0100
committerThomas Reufer <thomas@reufer.ch>2014-03-27 07:38:00 +0100
commit6f80da9fbf4bc0133f05af4e2518179626a110d2 (patch)
treea64dcad0a2f196a846a7b0d5d540f35529b5c33c
parent687c7cc3d216cf85e6bd28e80b17a33bfcae4662 (diff)
downloadvdr-plugin-rpihddevice-6f80da9fbf4bc0133f05af4e2518179626a110d2.tar.gz
vdr-plugin-rpihddevice-6f80da9fbf4bc0133f05af4e2518179626a110d2.tar.bz2
fixed OMX event queue
-rw-r--r--omx.c28
-rw-r--r--omx.h4
2 files changed, 17 insertions, 15 deletions
diff --git a/omx.c b/omx.c
index 4fd95dc..29d708b 100644
--- a/omx.c
+++ b/omx.c
@@ -107,29 +107,31 @@ void cOmx::Action(void)
while (Running())
{
m_eventReady->Wait();
- while (!m_portEvents->empty())
+ while (!m_portEvents.empty())
{
- switch (m_portEvents->front().event)
+ switch (m_portEvents.front()->event)
{
case ePortSettingsChanged:
- HandlePortSettingsChanged(m_portEvents->front().data);
+ HandlePortSettingsChanged(m_portEvents.front()->data);
break;
case eConfigChanged:
- if (m_portEvents->front().data == OMX_IndexConfigBufferStall)
+ if (m_portEvents.front()->data == OMX_IndexConfigBufferStall)
if (IsBufferStall() && !IsClockFreezed() && m_onBufferStall)
m_onBufferStall(m_onBufferStallData);
break;
case eEndOfStream:
- if (m_portEvents->front().data == 90 && m_onEndOfStream)
+ if (m_portEvents.front()->data == 90 && m_onEndOfStream)
m_onEndOfStream(m_onEndOfStreamData);
break;
default:
break;
}
- m_portEvents->pop();
+
+ delete m_portEvents.front();
+ m_portEvents.pop();
}
}
}
@@ -214,24 +216,24 @@ void cOmx::OnBufferEmpty(void *instance, COMPONENT_T *comp)
void cOmx::OnPortSettingsChanged(void *instance, COMPONENT_T *comp, OMX_U32 data)
{
cOmx* omx = static_cast <cOmx*> (instance);
- PortEvent event = {ePortSettingsChanged, data};
- omx->m_portEvents->push(event);
+ PortEvent* event = new PortEvent(ePortSettingsChanged, data);
+ omx->m_portEvents.push(event);
omx->m_eventReady->Signal();
}
void cOmx::OnConfigChanged(void *instance, COMPONENT_T *comp, OMX_U32 data)
{
cOmx* omx = static_cast <cOmx*> (instance);
- PortEvent event = {eConfigChanged, data};
- omx->m_portEvents->push(event);
+ PortEvent* event = new PortEvent(eConfigChanged, data);
+ omx->m_portEvents.push(event);
omx->m_eventReady->Signal();
}
void cOmx::OnEndOfStream(void *instance, COMPONENT_T *comp, OMX_U32 data)
{
cOmx* omx = static_cast <cOmx*> (instance);
- PortEvent event = {eEndOfStream, data};
- omx->m_portEvents->push(event);
+ PortEvent* event = new PortEvent(eEndOfStream, data);
+ omx->m_portEvents.push(event);
omx->m_eventReady->Signal();
}
@@ -254,7 +256,6 @@ cOmx::cOmx() :
m_clockReference(eClockRefNone),
m_clockScale(0),
m_eventReady(new cCondWait()),
- m_portEvents(new std::queue<PortEvent>),
m_onBufferStall(0),
m_onBufferStallData(0)
{
@@ -265,7 +266,6 @@ cOmx::cOmx() :
cOmx::~cOmx()
{
delete m_eventReady;
- delete m_portEvents;
}
int cOmx::Init(void)
diff --git a/omx.h b/omx.h
index 415fcb4..0005e92 100644
--- a/omx.h
+++ b/omx.h
@@ -129,6 +129,8 @@ private:
struct PortEvent
{
+ PortEvent(eOmxEvent _event, int _data)
+ : event(_event), data(_data) { };
eOmxEvent event;
int data;
};
@@ -152,7 +154,7 @@ private:
OMX_S32 m_clockScale;
cCondWait *m_eventReady;
- std::queue<PortEvent> *m_portEvents;
+ std::queue<PortEvent*> m_portEvents;
void (*m_onBufferStall)(void*);
void *m_onBufferStallData;