1 /* 2 * This file is part of MPlayer. 3 * 4 * MPlayer is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * MPlayer 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 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License along 15 * with MPlayer; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 */ 18 19 #ifndef MPLAYER_PULLUP_H 20 #define MPLAYER_PULLUP_H 21 22 #define PULLUP_CPU_MMX 1 23 #define PULLUP_CPU_MMX2 2 24 #define PULLUP_CPU_3DNOW 4 25 #define PULLUP_CPU_3DNOWEXT 8 26 #define PULLUP_CPU_SSE 16 27 #define PULLUP_CPU_SSE2 32 28 29 #define PULLUP_FMT_Y 1 30 #define PULLUP_FMT_YUY2 2 31 #define PULLUP_FMT_UYVY 3 32 #define PULLUP_FMT_RGB32 4 33 34 struct pullup_buffer 35 { 36 int lock[2]; 37 unsigned char **planes; 38 }; 39 40 struct pullup_field 41 { 42 int parity; 43 struct pullup_buffer *buffer; 44 unsigned int flags; 45 int breaks; 46 int affinity; 47 int *diffs; 48 int *comb; 49 int *var; 50 struct pullup_field *prev, *next; 51 }; 52 53 struct pullup_frame 54 { 55 int lock; 56 int length; 57 int parity; 58 struct pullup_buffer **ifields, *ofields[2]; 59 struct pullup_buffer *buffer; 60 }; 61 62 struct pullup_context 63 { 64 /* Public interface */ 65 int format; 66 int nplanes; 67 int *bpp, *w, *h, *stride, *background; 68 unsigned int cpu; 69 int junk_left, junk_right, junk_top, junk_bottom; 70 int verbose; 71 int metric_plane; 72 int strict_breaks; 73 int strict_pairs; 74 /* Internal data */ 75 struct pullup_field *first, *last, *head; 76 struct pullup_buffer *buffers; 77 int nbuffers; 78 int (*diff)(unsigned char *, unsigned char *, int); 79 int (*comb)(unsigned char *, unsigned char *, int); 80 int (*var)(unsigned char *, unsigned char *, int); 81 int metric_w, metric_h, metric_len, metric_offset; 82 struct pullup_frame *frame; 83 }; 84 85 86 struct pullup_buffer *pullup_lock_buffer(struct pullup_buffer *b, int parity); 87 void pullup_release_buffer(struct pullup_buffer *b, int parity); 88 struct pullup_buffer *pullup_get_buffer(struct pullup_context *c, int parity); 89 90 void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b, int parity); 91 void pullup_flush_fields(struct pullup_context *c); 92 93 struct pullup_frame *pullup_get_frame(struct pullup_context *c); 94 void pullup_pack_frame(struct pullup_context *c, struct pullup_frame *fr); 95 void pullup_release_frame(struct pullup_frame *fr); 96 97 struct pullup_context *pullup_alloc_context(void); 98 void pullup_preinit_context(struct pullup_context *c); 99 void pullup_init_context(struct pullup_context *c); 100 void pullup_free_context(struct pullup_context *c); 101 102 #endif /* MPLAYER_PULLUP_H */ 103