dd70cbd732df4488ac7fcf4655a6b9b9515af471
[vlc.git] / modules / video_filter / deinterlace / algo_x.h
1 /*****************************************************************************
2  * algo_x.h : "X" algorithm for vlc deinterlacer
3  *****************************************************************************
4  * Copyright (C) 2000-2011 VLC authors and VideoLAN
5  *
6  * Author: Laurent Aimar <fenrir@videolan.org>
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation; either version 2.1 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21  *****************************************************************************/
22
23 #ifndef VLC_DEINTERLACE_ALGO_X_H
24 #define VLC_DEINTERLACE_ALGO_X_H 1
25
26 /* Forward declarations */
27 struct picture_t;
28
29 /*****************************************************************************
30  * Functions
31  *****************************************************************************/
32
33 /**
34  * Interpolating deinterlace filter "X".
35  *
36  * The algorithm works on a 8x8 block basic, it copies the top field
37  * and applies a process to recreate the bottom field.
38  *
39  * If a 8x8 block is classified as :
40  *   - progressive: it applies a small blend (1,6,1)
41  *   - interlaced:
42  *    * in the MMX version: we do a ME between the 2 fields, if there is a
43  *      good match we use MC to recreate the bottom field (with a small
44  *      blend (1,6,1) )
45  *    * otherwise: it recreates the bottom field by an edge oriented
46  *      interpolation.
47  *
48  * @param[in] p_pic Input frame.
49  * @param[out] p_outpic Output frame. Must be allocated by caller.
50  * @see Deinterlace()
51  */
52 int RenderX( filter_t *, picture_t *p_outpic, picture_t *p_pic );
53
54 #endif