From cce1619ad5f7ebdc4d07bd3a136bf406ca67022d Mon Sep 17 00:00:00 2001 From: Thomas Reufer Date: Wed, 6 Apr 2016 07:57:43 +0200 Subject: move handling of buffer stall event to OMX video decoder --- omxdevice.c | 13 ------------- omxdevice.h | 4 ---- video.c | 8 ++++++++ video.h | 8 ++++++++ 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/omxdevice.c b/omxdevice.c index 6595f68..e0b5c74 100644 --- a/omxdevice.c +++ b/omxdevice.c @@ -98,11 +98,8 @@ int cOmxDevice::Init(void) ELOG("failed to initialize audio!"); return -1; } - m_omx->SetBufferStallCallback(&OnBufferStall, this); m_omx->SetEndOfStreamCallback(&OnEndOfStream, this); - cRpiSetup::SetVideoSetupChangedCallback(&OnVideoSetupChanged, this); - return 0; } @@ -620,16 +617,6 @@ void cOmxDevice::AdjustLiveSpeed(void) } } -void cOmxDevice::HandleBufferStall(void) -{ - ELOG("buffer stall!"); - m_mutex->Lock(); - - Clear(); - - m_mutex->Unlock(); -} - void cOmxDevice::HandleEndOfStream(void) { DBG("HandleEndOfStream()"); diff --git a/omxdevice.h b/omxdevice.h index fd64f24..1a195ff 100644 --- a/omxdevice.h +++ b/omxdevice.h @@ -149,9 +149,6 @@ private: void (*m_onPrimaryDevice)(void); virtual cVideoCodec::eCodec ParseVideoCodec(const uchar *data, int length); - static void OnBufferStall(void *data) - { (static_cast (data))->HandleBufferStall(); } - static void OnEndOfStream(void *data) { (static_cast (data))->HandleEndOfStream(); } @@ -161,7 +158,6 @@ private: static void OnVideoSetupChanged(void *data) { (static_cast (data))->HandleVideoSetupChanged(); } - void HandleBufferStall(void); void HandleEndOfStream(void); void HandleStreamStart(const cVideoFrameFormat *format); void HandleVideoSetupChanged(void); diff --git a/video.c b/video.c index 5f575c5..fcb191a 100644 --- a/video.c +++ b/video.c @@ -62,11 +62,13 @@ cRpiOmxVideoDecoder::cRpiOmxVideoDecoder(cVideoCodec::eCodec codec, cOmx *omx, DLOG("new OMX %s video codec", cVideoCodec::Str(codec)); m_omx->SetVideoCodec(codec); m_omx->SetStreamStartCallback(OnStreamStart, this); + m_omx->SetBufferStallCallback(OnBufferStall, this); } cRpiOmxVideoDecoder::~cRpiOmxVideoDecoder() { Clear(true); + m_omx->SetBufferStallCallback(0, 0); m_omx->SetStreamStartCallback(0, 0); m_omx->StopVideo(); } @@ -151,4 +153,10 @@ void cRpiOmxVideoDecoder::HandleStreamStart(int width, int height, cDeinterlacerMode::eDisabled); } +void cRpiOmxVideoDecoder::HandleBufferStall(void) +{ + ILOG("Buffer stall!"); + Clear(); +} + /* ------------------------------------------------------------------------- */ diff --git a/video.h b/video.h index 155b136..d05ddc6 100644 --- a/video.h +++ b/video.h @@ -86,6 +86,14 @@ protected: { (static_cast (data))->HandleStreamStart( width, height, frameRate, scanMode, pixelWidth, pixelHeight); } + void HandleBufferStall(void); + + static void OnBufferStall(void *data) + { (static_cast (data))->HandleBufferStall(); } + + void (*m_onBufferStall)(void*); + void *m_onBufferStallData; + cOmx *m_omx; private: -- cgit v1.2.3