diff options
| author | Thomas Reufer <thomas@reufer.ch> | 2016-04-06 07:57:43 +0200 |
|---|---|---|
| committer | Thomas Reufer <thomas@reufer.ch> | 2016-04-06 07:57:43 +0200 |
| commit | cce1619ad5f7ebdc4d07bd3a136bf406ca67022d (patch) | |
| tree | e148393b514d649280c681366e5ded1d1b93f645 | |
| parent | b5209b7673f3aac647b51e7712639cfec186c2ad (diff) | |
| download | vdr-plugin-rpihddevice-cce1619ad5f7ebdc4d07bd3a136bf406ca67022d.tar.gz vdr-plugin-rpihddevice-cce1619ad5f7ebdc4d07bd3a136bf406ca67022d.tar.bz2 | |
move handling of buffer stall event to OMX video decoder
| -rw-r--r-- | omxdevice.c | 13 | ||||
| -rw-r--r-- | omxdevice.h | 4 | ||||
| -rw-r--r-- | video.c | 8 | ||||
| -rw-r--r-- | 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 <cOmxDevice*> (data))->HandleBufferStall(); } - static void OnEndOfStream(void *data) { (static_cast <cOmxDevice*> (data))->HandleEndOfStream(); } @@ -161,7 +158,6 @@ private: static void OnVideoSetupChanged(void *data) { (static_cast <cOmxDevice*> (data))->HandleVideoSetupChanged(); } - void HandleBufferStall(void); void HandleEndOfStream(void); void HandleStreamStart(const cVideoFrameFormat *format); void HandleVideoSetupChanged(void); @@ -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(); +} + /* ------------------------------------------------------------------------- */ @@ -86,6 +86,14 @@ protected: { (static_cast <cRpiOmxVideoDecoder*> (data))->HandleStreamStart( width, height, frameRate, scanMode, pixelWidth, pixelHeight); } + void HandleBufferStall(void); + + static void OnBufferStall(void *data) + { (static_cast <cRpiOmxVideoDecoder*> (data))->HandleBufferStall(); } + + void (*m_onBufferStall)(void*); + void *m_onBufferStallData; + cOmx *m_omx; private: |
