From 73bf6b496a84ba73f342d9468541a13f48930ef9 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 13 Jul 2015 19:27:25 +0100 Subject: [PATCH] [rbp] Enable QPU based deinterlace and remove resolution limit --- xbmc/cores/VideoRenderers/MMALRenderer.cpp | 2 +- xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp | 5 ++--- xbmc/cores/omxplayer/OMXVideo.cpp | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/xbmc/cores/VideoRenderers/MMALRenderer.cpp b/xbmc/cores/VideoRenderers/MMALRenderer.cpp index fb92079d589f5..a4336a1fab82e 100644 --- a/xbmc/cores/VideoRenderers/MMALRenderer.cpp +++ b/xbmc/cores/VideoRenderers/MMALRenderer.cpp @@ -583,7 +583,7 @@ bool CMMALRenderer::Supports(ESCALINGMETHOD method) EINTERLACEMETHOD CMMALRenderer::AutoInterlaceMethod() { - return VS_INTERLACEMETHOD_MMAL_ADVANCED; + return m_sourceWidth * m_sourceHeight <= 576 * 720 ? VS_INTERLACEMETHOD_MMAL_ADVANCED : VS_INTERLACEMETHOD_MMAL_BOB; } void CMMALRenderer::SetVideoRect(const CRect& InSrcRect, const CRect& InDestRect) diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp index 3e97f1d8101a1..48230e3c5f2b3 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp @@ -347,12 +347,11 @@ bool CMMALVideo::CreateDeinterlace(EINTERLACEMETHOD interlace_method) CLog::Log(LOGERROR, "%s::%s Failed to create deinterlace component (status=%x %s)", CLASSNAME, __func__, status, mmal_status_to_string(status)); return false; } - bool advanced_deinterlace = (interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED || interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF) && - m_decoded_width * m_decoded_height <= 576 * 720; + bool advanced_deinterlace = interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED || interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF; bool half_framerate = interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF || interlace_method == VS_INTERLACEMETHOD_MMAL_BOB_HALF; MMAL_PARAMETER_IMAGEFX_PARAMETERS_T imfx_param = {{MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS, sizeof(imfx_param)}, - advanced_deinterlace ? MMAL_PARAM_IMAGEFX_DEINTERLACE_ADV : MMAL_PARAM_IMAGEFX_DEINTERLACE_FAST, 3, {3, 0, half_framerate }}; + advanced_deinterlace ? MMAL_PARAM_IMAGEFX_DEINTERLACE_ADV : MMAL_PARAM_IMAGEFX_DEINTERLACE_FAST, 4, {3, 0, half_framerate, 1 }}; status = mmal_port_parameter_set(m_deint->output[0], &imfx_param.hdr); if (status != MMAL_SUCCESS) diff --git a/xbmc/cores/omxplayer/OMXVideo.cpp b/xbmc/cores/omxplayer/OMXVideo.cpp index 832a9c9e9a959..f4e0863615ed8 100644 --- a/xbmc/cores/omxplayer/OMXVideo.cpp +++ b/xbmc/cores/omxplayer/OMXVideo.cpp @@ -244,8 +244,7 @@ bool COMXVideo::PortSettingsChanged() if(m_deinterlace) { EINTERLACEMETHOD interlace_method = g_renderManager.AutoInterlaceMethod(CMediaSettings::Get().GetCurrentVideoSettings().m_InterlaceMethod); - bool advanced_deinterlace = (interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED || interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF) && - port_image.format.video.nFrameWidth * port_image.format.video.nFrameHeight <= 576 * 720; + bool advanced_deinterlace = interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED || interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF; bool half_framerate = interlace_method == VS_INTERLACEMETHOD_MMAL_ADVANCED_HALF || interlace_method == VS_INTERLACEMETHOD_MMAL_BOB_HALF; if (!advanced_deinterlace) { @@ -266,10 +265,11 @@ bool COMXVideo::PortSettingsChanged() OMX_INIT_STRUCTURE(image_filter); image_filter.nPortIndex = m_omx_image_fx.GetOutputPort(); - image_filter.nNumParams = 3; + image_filter.nNumParams = 4; image_filter.nParams[0] = 3; image_filter.nParams[1] = 0; image_filter.nParams[2] = half_framerate; + image_filter.nParams[3] = 1; // qpu if (!advanced_deinterlace) image_filter.eImageFilter = OMX_ImageFilterDeInterlaceFast; else