Hi Andy,
On Tue, Aug 16, 2016 at 3:20 PM, Andy Furniss <adf.li...@gmail.com> wrote: > Christian König wrote: >> >> Am 12.08.2016 um 16:02 schrieb Nayan Deshmukh: >>> >>> Apply the median and matrix filter before the compostioning >>> we apply the deinterlacing first to avoid the extra overhead >>> in processing the past and the future surfaces in deinterlacing. >>> >>> v2: apply the filters on all the surfaces (Christian) >>> v3: use get_sampler_view_planes() instead of >>> get_sampler_view_components() and iterate over >>> VL_MAX_SURFACES (Christian) >>> >>> Signed-off-by: Nayan Deshmukh <nayan26deshm...@gmail.com> >> >> >> Reviewed and pushed, thanks for the help. > > > Sorry I didn't get to test this until now. > > It messes up chroma when sharpen or denoise are used. You are right :( It messes up chroma but only in case of sharpen at least for me. I tried some changes and the chroma effects are fixed if we apply the sharpness filter to only to the first surface instead of all the surfaces of the buffer. Can you verify this? Cheers, Nayan. > >> >> Christian. >> >>> --- >>> src/gallium/state_trackers/vdpau/mixer.c | 28 >>> ++++++++++++++++++---------- >>> 1 file changed, 18 insertions(+), 10 deletions(-) >>> >>> diff --git a/src/gallium/state_trackers/vdpau/mixer.c >>> b/src/gallium/state_trackers/vdpau/mixer.c >>> index cb0ef03..56b667d 100644 >>> --- a/src/gallium/state_trackers/vdpau/mixer.c >>> +++ b/src/gallium/state_trackers/vdpau/mixer.c >>> @@ -240,8 +240,8 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, >>> struct u_rect rect, clip, *prect, dirty_area; >>> unsigned i, layer = 0; >>> struct pipe_video_buffer *video_buffer; >>> - struct pipe_sampler_view *sampler_view; >>> - struct pipe_surface *surface; >>> + struct pipe_sampler_view *sampler_view, **sampler_views; >>> + struct pipe_surface *surface, **surfaces; >>> vlVdpVideoMixer *vmixer; >>> vlVdpSurface *surf; >>> @@ -325,6 +325,22 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, >>> } >>> } >>> + surfaces = video_buffer->get_surfaces(video_buffer); >>> + sampler_views = video_buffer->get_sampler_view_planes(video_buffer); >>> + >>> + for(i = 0; i < VL_MAX_SURFACES; ++i) { >>> + if(sampler_views[i] != NULL && surfaces[i] != NULL) { >>> + if (vmixer->noise_reduction.filter) >>> + vl_median_filter_render(vmixer->noise_reduction.filter, >>> + sampler_views[i], surfaces[i]); >>> + >>> + if (vmixer->sharpness.filter) >>> + vl_matrix_filter_render(vmixer->sharpness.filter, >>> + sampler_views[i], surfaces[i]); >>> + >>> + } >>> + } >>> + >>> prect = RectToPipe(video_source_rect, &rect); >>> if (!prect) { >>> rect.x0 = 0; >>> @@ -394,14 +410,6 @@ VdpStatus vlVdpVideoMixerRender(VdpVideoMixer mixer, >>> else { >>> vl_compositor_render(&vmixer->cstate, compositor, surface, >>> &dirty_area, true); >>> - if (vmixer->noise_reduction.filter) >>> - vl_median_filter_render(vmixer->noise_reduction.filter, >>> - sampler_view, surface); >>> - >>> - if (vmixer->sharpness.filter) >>> - vl_matrix_filter_render(vmixer->sharpness.filter, >>> - sampler_view, surface); >>> - >>> if (vmixer->bicubic.filter) >>> vl_bicubic_filter_render(vmixer->bicubic.filter, >>> sampler_view, dst->surface, >> >> >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev