[Mesa-dev] [PATCH v3] st/vdpau: change the order in which filters are applied(v3)

Nayan Deshmukh nayan26deshmukh at gmail.com
Tue Aug 16 14:14:12 UTC 2016


Hi Andy,


On Tue, Aug 16, 2016 at 3:20 PM, Andy Furniss <adf.lists at 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 <nayan26deshmukh at 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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list