Skip to content

Commit

Permalink
[rbp] Enable QPU based deinterlace and remove resolution limit
Browse files Browse the repository at this point in the history
  • Loading branch information
popcornmix committed Jul 14, 2015
1 parent ef2030d commit 73bf6b4
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
2 changes: 1 addition & 1 deletion xbmc/cores/VideoRenderers/MMALRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
5 changes: 2 additions & 3 deletions xbmc/cores/dvdplayer/DVDCodecs/Video/MMALCodec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions xbmc/cores/omxplayer/OMXVideo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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
Expand Down

0 comments on commit 73bf6b4

Please sign in to comment.