summaryrefslogtreecommitdiff
path: root/omx.c
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2014-11-23 20:25:41 +0100
committerThomas Reufer <thomas@reufer.ch>2014-11-23 20:25:41 +0100
commit962ff3d2c73114626fa00ac01763b48ce21b4928 (patch)
treeb02fdc58cd406ff98a71efb57585c12f8dc25c29 /omx.c
parentdf5aeaf1c13fd8afa47fd3f023089444820b6d8e (diff)
downloadvdr-plugin-rpihddevice-962ff3d2c73114626fa00ac01763b48ce21b4928.tar.gz
vdr-plugin-rpihddevice-962ff3d2c73114626fa00ac01763b48ce21b4928.tar.bz2
use fast deinterlacer for HD streams
Diffstat (limited to 'omx.c')
-rw-r--r--omx.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/omx.c b/omx.c
index 192ecc8..3c728ce 100644
--- a/omx.c
+++ b/omx.c
@@ -251,20 +251,38 @@ void cOmx::HandlePortSettingsChanged(unsigned int portId)
OMX_INIT_STRUCT(filterparam);
filterparam.nPortIndex = 191;
filterparam.eImageFilter = OMX_ImageFilterNone;
+
+ OMX_PARAM_U32TYPE extraBuffers;
+ OMX_INIT_STRUCT(extraBuffers);
+ extraBuffers.nPortIndex = 130;
+
if (cRpiDisplay::IsProgressive() && m_videoFormat.interlaced)
{
+ bool fastDeinterlace = portdef.format.video.nFrameWidth *
+ portdef.format.video.nFrameHeight > 576 * 720;
+
filterparam.nNumParams = 1;
filterparam.nParams[0] = 3;
- filterparam.eImageFilter = OMX_ImageFilterDeInterlaceAdvanced;
+ filterparam.eImageFilter = fastDeinterlace ?
+ OMX_ImageFilterDeInterlaceFast :
+ OMX_ImageFilterDeInterlaceAdvanced;
+
+ if (fastDeinterlace)
+ extraBuffers.nU32 = -2;
}
if (OMX_SetConfig(ILC_GET_HANDLE(m_comp[eVideoFx]),
OMX_IndexConfigCommonImageFilterParameters, &filterparam) != OMX_ErrorNone)
ELOG("failed to set deinterlacing paramaters!");
+ if (OMX_SetParameter(ILC_GET_HANDLE(m_comp[eVideoFx]),
+ OMX_IndexParamBrcmExtraBuffers, &extraBuffers) != OMX_ErrorNone)
+ ELOG("failed to set video fx extra buffers!");
+
if (ilclient_setup_tunnel(&m_tun[eVideoDecoderToVideoFx], 0, 0) != 0)
ELOG("failed to setup up tunnel from video decoder to fx!");
if (ilclient_change_component_state(m_comp[eVideoFx], OMX_StateExecuting) != 0)
ELOG("failed to enable video fx!");
+
break;
case 11: