1a9ffcceee9214342dab2085a35452acaa41003c5Christian König/**************************************************************************
2a9ffcceee9214342dab2085a35452acaa41003c5Christian König *
3a9ffcceee9214342dab2085a35452acaa41003c5Christian König * Copyright 2012 Christian König.
4a9ffcceee9214342dab2085a35452acaa41003c5Christian König * All Rights Reserved.
5a9ffcceee9214342dab2085a35452acaa41003c5Christian König *
6a9ffcceee9214342dab2085a35452acaa41003c5Christian König * Permission is hereby granted, free of charge, to any person obtaining a
7a9ffcceee9214342dab2085a35452acaa41003c5Christian König * copy of this software and associated documentation files (the
8a9ffcceee9214342dab2085a35452acaa41003c5Christian König * "Software"), to deal in the Software without restriction, including
9a9ffcceee9214342dab2085a35452acaa41003c5Christian König * without limitation the rights to use, copy, modify, merge, publish,
10a9ffcceee9214342dab2085a35452acaa41003c5Christian König * distribute, sub license, and/or sell copies of the Software, and to
11a9ffcceee9214342dab2085a35452acaa41003c5Christian König * permit persons to whom the Software is furnished to do so, subject to
12a9ffcceee9214342dab2085a35452acaa41003c5Christian König * the following conditions:
13a9ffcceee9214342dab2085a35452acaa41003c5Christian König *
14a9ffcceee9214342dab2085a35452acaa41003c5Christian König * The above copyright notice and this permission notice (including the
15a9ffcceee9214342dab2085a35452acaa41003c5Christian König * next paragraph) shall be included in all copies or substantial portions
16a9ffcceee9214342dab2085a35452acaa41003c5Christian König * of the Software.
17a9ffcceee9214342dab2085a35452acaa41003c5Christian König *
18a9ffcceee9214342dab2085a35452acaa41003c5Christian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19a9ffcceee9214342dab2085a35452acaa41003c5Christian König * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20a9ffcceee9214342dab2085a35452acaa41003c5Christian König * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21a9ffcceee9214342dab2085a35452acaa41003c5Christian König * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22a9ffcceee9214342dab2085a35452acaa41003c5Christian König * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23a9ffcceee9214342dab2085a35452acaa41003c5Christian König * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24a9ffcceee9214342dab2085a35452acaa41003c5Christian König * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25a9ffcceee9214342dab2085a35452acaa41003c5Christian König *
26a9ffcceee9214342dab2085a35452acaa41003c5Christian König **************************************************************************/
27a9ffcceee9214342dab2085a35452acaa41003c5Christian König
28a9ffcceee9214342dab2085a35452acaa41003c5Christian König/* implementation of a median filter for noise reduction */
29a9ffcceee9214342dab2085a35452acaa41003c5Christian König
30a9ffcceee9214342dab2085a35452acaa41003c5Christian König#ifndef vl_median_filter_h
31a9ffcceee9214342dab2085a35452acaa41003c5Christian König#define vl_median_filter_h
32a9ffcceee9214342dab2085a35452acaa41003c5Christian König
33a9ffcceee9214342dab2085a35452acaa41003c5Christian König#include "pipe/p_state.h"
34a9ffcceee9214342dab2085a35452acaa41003c5Christian König
35a9ffcceee9214342dab2085a35452acaa41003c5Christian Königenum vl_median_filter_shape
36a9ffcceee9214342dab2085a35452acaa41003c5Christian König{
37a9ffcceee9214342dab2085a35452acaa41003c5Christian König   VL_MEDIAN_FILTER_BOX,
38a9ffcceee9214342dab2085a35452acaa41003c5Christian König   VL_MEDIAN_FILTER_CROSS,
39a9ffcceee9214342dab2085a35452acaa41003c5Christian König   VL_MEDIAN_FILTER_X,
40a9ffcceee9214342dab2085a35452acaa41003c5Christian König   VL_MEDIAN_FILTER_HORIZONTAL,
41a9ffcceee9214342dab2085a35452acaa41003c5Christian König   VL_MEDIAN_FILTER_VERTICAL
42a9ffcceee9214342dab2085a35452acaa41003c5Christian König};
43a9ffcceee9214342dab2085a35452acaa41003c5Christian König
44a9ffcceee9214342dab2085a35452acaa41003c5Christian Königstruct vl_median_filter
45a9ffcceee9214342dab2085a35452acaa41003c5Christian König{
46a9ffcceee9214342dab2085a35452acaa41003c5Christian König   struct pipe_context *pipe;
47a9ffcceee9214342dab2085a35452acaa41003c5Christian König   struct pipe_vertex_buffer quad;
48a9ffcceee9214342dab2085a35452acaa41003c5Christian König
49a9ffcceee9214342dab2085a35452acaa41003c5Christian König   void *rs_state;
50a9ffcceee9214342dab2085a35452acaa41003c5Christian König   void *blend;
51a9ffcceee9214342dab2085a35452acaa41003c5Christian König   void *sampler;
52a9ffcceee9214342dab2085a35452acaa41003c5Christian König   void *ves;
53a9ffcceee9214342dab2085a35452acaa41003c5Christian König   void *vs, *fs;
54a9ffcceee9214342dab2085a35452acaa41003c5Christian König};
55a9ffcceee9214342dab2085a35452acaa41003c5Christian König
56a9ffcceee9214342dab2085a35452acaa41003c5Christian Königbool
57a9ffcceee9214342dab2085a35452acaa41003c5Christian Königvl_median_filter_init(struct vl_median_filter *filter, struct pipe_context *pipe,
58a9ffcceee9214342dab2085a35452acaa41003c5Christian König                      unsigned width, unsigned height, unsigned size,
59a9ffcceee9214342dab2085a35452acaa41003c5Christian König                      enum vl_median_filter_shape shape);
60a9ffcceee9214342dab2085a35452acaa41003c5Christian König
61a9ffcceee9214342dab2085a35452acaa41003c5Christian Königvoid
62a9ffcceee9214342dab2085a35452acaa41003c5Christian Königvl_median_filter_cleanup(struct vl_median_filter *filter);
63a9ffcceee9214342dab2085a35452acaa41003c5Christian König
64a9ffcceee9214342dab2085a35452acaa41003c5Christian König
65a9ffcceee9214342dab2085a35452acaa41003c5Christian Königvoid
66a9ffcceee9214342dab2085a35452acaa41003c5Christian Königvl_median_filter_render(struct vl_median_filter *filter,
67a9ffcceee9214342dab2085a35452acaa41003c5Christian König                        struct pipe_sampler_view *src,
68a9ffcceee9214342dab2085a35452acaa41003c5Christian König                        struct pipe_surface *dst);
69a9ffcceee9214342dab2085a35452acaa41003c5Christian König
70a9ffcceee9214342dab2085a35452acaa41003c5Christian König#endif /* vl_median_filter_h */
71