summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2016-04-06 07:57:43 +0200
committerThomas Reufer <thomas@reufer.ch>2016-04-06 07:57:43 +0200
commitcce1619ad5f7ebdc4d07bd3a136bf406ca67022d (patch)
treee148393b514d649280c681366e5ded1d1b93f645
parentb5209b7673f3aac647b51e7712639cfec186c2ad (diff)
downloadvdr-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.c13
-rw-r--r--omxdevice.h4
-rw-r--r--video.c8
-rw-r--r--video.h8
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);
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 <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: