st/vdpau: change the order in which filters are applied(v3)
authorNayan Deshmukh <nayan26deshmukh@gmail.com>
Fri, 12 Aug 2016 14:02:51 +0000 (19:32 +0530)
committerChristian König <christian.koenig@amd.com>
Tue, 16 Aug 2016 08:07:35 +0000 (10:07 +0200)
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@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
src/gallium/state_trackers/vdpau/mixer.c

index cb0ef03..56b667d 100644 (file)
@@ -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,