diff options
author | Thomas Reufer <thomas@reufer.ch> | 2014-03-27 07:38:00 +0100 |
---|---|---|
committer | Thomas Reufer <thomas@reufer.ch> | 2014-03-27 07:38:00 +0100 |
commit | 6f80da9fbf4bc0133f05af4e2518179626a110d2 (patch) | |
tree | a64dcad0a2f196a846a7b0d5d540f35529b5c33c | |
parent | 687c7cc3d216cf85e6bd28e80b17a33bfcae4662 (diff) | |
download | vdr-plugin-rpihddevice-6f80da9fbf4bc0133f05af4e2518179626a110d2.tar.gz vdr-plugin-rpihddevice-6f80da9fbf4bc0133f05af4e2518179626a110d2.tar.bz2 |
fixed OMX event queue
-rw-r--r-- | omx.c | 28 | ||||
-rw-r--r-- | omx.h | 4 |
2 files changed, 17 insertions, 15 deletions
@@ -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) @@ -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; |