diff options
author | Thomas Reufer <thomas@reufer.ch> | 2017-04-21 08:39:28 +0200 |
---|---|---|
committer | Thomas Reufer <thomas@reufer.ch> | 2017-04-21 08:39:28 +0200 |
commit | 88533d0efc322fe7b67abba72da96ed94f7dcb78 (patch) | |
tree | f0280570e88e297f74c6332696aaf2791ea88f59 | |
parent | bc9f9791eeb1eb2fed27d837b0787d9f91dc15dc (diff) | |
download | vdr-plugin-rpihddevice-88533d0efc322fe7b67abba72da96ed94f7dcb78.tar.gz vdr-plugin-rpihddevice-88533d0efc322fe7b67abba72da96ed94f7dcb78.tar.bz2 |
reset video format settings on pixel aspect ratio change
-rw-r--r-- | HISTORY | 1 | ||||
-rw-r--r-- | omx.c | 25 | ||||
-rw-r--r-- | omx.h | 1 |
3 files changed, 26 insertions, 1 deletions
@@ -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 @@ -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) @@ -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); |