1 /* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 #ifndef AVFILTER_YADIF_H 20 #define AVFILTER_YADIF_H 21 22 #include "libavutil/opt.h" 23 #include "libavutil/pixdesc.h" 24 #include "avfilter.h" 25 26 enum YADIFMode { 27 YADIF_MODE_SEND_FRAME = 0, ///< send 1 frame for each frame 28 YADIF_MODE_SEND_FIELD = 1, ///< send 1 frame for each field 29 YADIF_MODE_SEND_FRAME_NOSPATIAL = 2, ///< send 1 frame for each frame but skips spatial interlacing check 30 YADIF_MODE_SEND_FIELD_NOSPATIAL = 3, ///< send 1 frame for each field but skips spatial interlacing check 31 }; 32 33 enum YADIFParity { 34 YADIF_PARITY_TFF = 0, ///< top field first 35 YADIF_PARITY_BFF = 1, ///< bottom field first 36 YADIF_PARITY_AUTO = -1, ///< auto detection 37 }; 38 39 enum YADIFDeint { 40 YADIF_DEINT_ALL = 0, ///< deinterlace all frames 41 YADIF_DEINT_INTERLACED = 1, ///< only deinterlace frames marked as interlaced 42 }; 43 44 enum YADIFCurrentField { 45 YADIF_FIELD_BACK_END = -1, ///< The last frame in a sequence 46 YADIF_FIELD_END = 0, ///< The first or last field in a sequence 47 YADIF_FIELD_NORMAL = 1, ///< A normal field in the middle of a sequence 48 }; 49 50 typedef struct YADIFContext { 51 const AVClass *class; 52 53 int mode; ///< YADIFMode 54 int parity; ///< YADIFParity 55 int deint; ///< YADIFDeint 56 57 int frame_pending; 58 59 AVFrame *cur; 60 AVFrame *next; 61 AVFrame *prev; 62 AVFrame *out; 63 64 void (*filter)(AVFilterContext *ctx, AVFrame *dstpic, int parity, int tff); 65 66 /** 67 * Required alignment for filter_line 68 */ 69 void (*filter_line)(void *dst, 70 void *prev, void *cur, void *next, 71 int w, int prefs, int mrefs, int parity, int mode); 72 void (*filter_edges)(void *dst, void *prev, void *cur, void *next, 73 int w, int prefs, int mrefs, int parity, int mode); 74 75 const AVPixFmtDescriptor *csp; 76 int eof; 77 uint8_t *temp_line; 78 int temp_line_size; 79 80 /* 81 * An algorithm that treats first and/or last fields in a sequence 82 * differently can use this to detect those cases. It is the algorithm's 83 * responsibility to set the value to YADIF_FIELD_NORMAL after processing 84 * the first field. 85 */ 86 int current_field; ///< YADIFCurrentField 87 } YADIFContext; 88 89 void ff_yadif_init_x86(YADIFContext *yadif); 90 91 int ff_yadif_filter_frame(AVFilterLink *link, AVFrame *frame); 92 93 int ff_yadif_request_frame(AVFilterLink *link); 94 95 extern const AVOption ff_yadif_options[]; 96 97 #endif /* AVFILTER_YADIF_H */ 98