1f25563ab87a937dc63f399514fd6c4c0decdea7
[vlc.git] / modules / video_filter / deinterlace / algo_basic.h
1 /*****************************************************************************
2  * algo_basic.h : Basic algorithms for the VLC deinterlacer
3  *****************************************************************************
4  * Copyright (C) 2000-2011 VLC authors and VideoLAN
5  *
6  * Author: Sam Hocevar <sam@zoy.org>
7  *         Damien Lucas <nitrox@videolan.org>  (Bob, Blend)
8  *         Laurent Aimar <fenrir@videolan.org> (Bob, Blend)
9  *
10  * This program is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation; either version 2.1 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24
25 #ifndef VLC_DEINTERLACE_ALGO_BASIC_H
26 #define VLC_DEINTERLACE_ALGO_BASIC_H 1
27
28 /**
29  * \file
30  * Basic deinterlace algorithms: Discard, Bob, Linear, Mean and Blend.
31  */
32
33 /* Forward declarations */
34 struct filter_t;
35 struct picture_t;
36
37 /*****************************************************************************
38  * Functions
39  *****************************************************************************/
40
41 /**
42  * RenderDiscard: only keep top or bottom field, discard the other.
43  *
44  * For a 2x (framerate-doubling) near-equivalent, see RenderBob().
45  *
46  * @param p_outpic Output frame. Must be allocated by caller.
47  * @param p_pic Input frame. Must exist.
48  * @see RenderBob()
49  * @see Deinterlace()
50  */
51 int RenderDiscard( filter_t *, picture_t *p_outpic, picture_t *p_pic );
52
53 /**
54  * RenderBob: basic framerate doubler.
55  *
56  * Creates an illusion of full vertical resolution while running.
57  *
58  * For a 1x (non-doubling) near-equivalent, see RenderDiscard().
59  *
60  * @param p_outpic Output frame. Must be allocated by caller.
61  * @param p_pic Input frame. Must exist.
62  * @param i_field Render which field? 0 = top field, 1 = bottom field.
63  * @see RenderLinear()
64  * @see Deinterlace()
65  */
66 int RenderBob( filter_t *,
67                picture_t *p_outpic, picture_t *p_pic, int order, int i_field );
68
69 /**
70  * RenderLinear: Bob with linear interpolation.
71  *
72  * There is no 1x (non-doubling) equivalent for this filter.
73  *
74  * @param p_filter The filter instance. Must be non-NULL.
75  * @param p_outpic Output frame. Must be allocated by caller.
76  * @param p_pic Input frame. Must exist.
77  * @param i_field Render which field? 0 = top field, 1 = bottom field.
78  * @see RenderBob()
79  * @see Deinterlace()
80  */
81 int RenderLinear( filter_t *p_filter,
82                   picture_t *p_outpic, picture_t *p_pic, int order, int i_field );
83
84 /**
85  * RenderMean: half-resolution blender.
86  *
87  * Renders the mean of the top and bottom fields.
88  *
89  * Obviously, there is no 2x equivalent for this filter.
90  *
91  * @param p_filter The filter instance. Must be non-NULL.
92  * @param p_outpic Output frame. Must be allocated by caller.
93  * @param p_pic Input frame. Must exist.
94  * @see Deinterlace()
95  */
96 int RenderMean( filter_t *p_filter, picture_t *p_outpic, picture_t *p_pic );
97
98 /**
99  * RenderBlend: full-resolution blender.
100  *
101  * The first line is copied; for the rest of the lines, line N
102  * is the mean of lines N and N-1 in the input.
103  *
104  * Obviously, there is no 2x equivalent for this filter.
105  *
106  * @param p_filter The filter instance. Must be non-NULL.
107  * @param p_outpic Output frame. Must be allocated by caller.
108  * @param p_pic Input frame. Must exist.
109  * @see Deinterlace()
110  */
111 int RenderBlend( filter_t *p_filter, picture_t *p_outpic, picture_t *p_pic );
112
113 #endif