summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2017-04-21 08:39:28 +0200
committerThomas Reufer <thomas@reufer.ch>2017-04-21 08:39:28 +0200
commit88533d0efc322fe7b67abba72da96ed94f7dcb78 (patch)
treef0280570e88e297f74c6332696aaf2791ea88f59
parentbc9f9791eeb1eb2fed27d837b0787d9f91dc15dc (diff)
downloadvdr-plugin-rpihddevice-88533d0efc322fe7b67abba72da96ed94f7dcb78.tar.gz
vdr-plugin-rpihddevice-88533d0efc322fe7b67abba72da96ed94f7dcb78.tar.bz2
reset video format settings on pixel aspect ratio change
-rw-r--r--HISTORY1
-rw-r--r--omx.c25
-rw-r--r--omx.h1
3 files changed, 26 insertions, 1 deletions
diff --git a/HISTORY b/HISTORY
index 4438b9c..0a7caca 100644
--- a/HISTORY
+++ b/HISTORY
@@ -6,6 +6,7 @@ VDR Plugin 'rpihddevice' Revision History
- make use of advanced deinterlacer configurable
- add debug option to log number of executed OpenVG commands and flushes
- fixed:
+ - reset video format settings on pixel aspect ratio change
- always resample audio with less than 2 and more than 6 channels
- fixed compilation with GCC-6
- implement proper handling of display and pixel aspect ratios
diff --git a/omx.c b/omx.c
index eaba662..79ce125 100644
--- a/omx.c
+++ b/omx.c
@@ -207,9 +207,19 @@ void cOmx::Action(void)
break;
case cOmxEvents::eConfigChanged:
- if (event->data == OMX_IndexConfigBufferStall)
+ switch (event->data)
+ {
+ case OMX_IndexParamBrcmPixelAspectRatio:
+ if (m_handlePortEvents)
+ HandlePortSettingsChanged(131);
+ break;
+ case OMX_IndexConfigBufferStall:
if (IsBufferStall() && !IsClockFreezed() && m_onBufferStall)
m_onBufferStall(m_onBufferStallData);
+ break;
+ default:
+ break;
+ }
break;
case cOmxEvents::eEndOfStream:
@@ -555,6 +565,7 @@ int cOmx::Init(int display, int layer)
SetDisplay(display, layer);
SetClockLatencyTarget();
+ SetPARChangeCallback(true);
SetBufferStallThreshold(20000);
SetClockReference(cOmx::eClockRefVideo);
@@ -825,6 +836,18 @@ void cOmx::SetClockLatencyTarget(void)
ELOG("failed set video render latency target!");
}
+void cOmx::SetPARChangeCallback(bool enable)
+{
+ OMX_CONFIG_REQUESTCALLBACKTYPE reqCallback;
+ OMX_INIT_STRUCT(reqCallback);
+ reqCallback.nPortIndex = 131;
+ reqCallback.bEnable = enable ? OMX_TRUE : OMX_FALSE;
+ reqCallback.nIndex = OMX_IndexParamBrcmPixelAspectRatio;
+ if (OMX_SetConfig(ILC_GET_HANDLE(m_comp[eVideoDecoder]),
+ OMX_IndexConfigRequestCallback, &reqCallback) != OMX_ErrorNone)
+ ELOG("failed to set video aspect ratio change call back!");
+}
+
void cOmx::SetBufferStallThreshold(int delayMs)
{
if (delayMs > 0)
diff --git a/omx.h b/omx.h
index c0daffa..708d487 100644
--- a/omx.h
+++ b/omx.h
@@ -178,6 +178,7 @@ private:
void HandlePortBufferEmptied(eOmxComponent component);
void HandlePortSettingsChanged(unsigned int portId);
+ void SetPARChangeCallback(bool enable);
void SetBufferStallThreshold(int delayMs);
bool IsBufferStall(void);