From 6f80da9fbf4bc0133f05af4e2518179626a110d2 Mon Sep 17 00:00:00 2001 From: Thomas Reufer Date: Thu, 27 Mar 2014 07:38:00 +0100 Subject: fixed OMX event queue --- omx.c | 28 ++++++++++++++-------------- omx.h | 4 +++- 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 (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 (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 (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), 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 *m_portEvents; + std::queue m_portEvents; void (*m_onBufferStall)(void*); void *m_onBufferStallData; -- cgit v1.2.3