mirror of
https://github.com/mpv-player/mpv
synced 2024-12-17 12:25:03 +00:00
eeec580edc
improvement to results. inter-field comparison is now counterbalanced with intra-field total (vertical) variation. this means that areas of extreme high frequency content, which become aliased within individual fields, will not interfere with field matching. examples: white noise effects, small kanji, very small latin text, ... may still need tweaking. please report regressions. this change will likely be made optional in the future (right now it's enclosed in "if (1)"... git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15722 b3059339-0415-0410-9bf9-f77b7e298cf2
84 lines
2.0 KiB
C
84 lines
2.0 KiB
C
|
|
|
|
#define PULLUP_CPU_MMX 1
|
|
#define PULLUP_CPU_MMX2 2
|
|
#define PULLUP_CPU_3DNOW 4
|
|
#define PULLUP_CPU_3DNOWEXT 8
|
|
#define PULLUP_CPU_SSE 16
|
|
#define PULLUP_CPU_SSE2 32
|
|
|
|
#define PULLUP_FMT_Y 1
|
|
#define PULLUP_FMT_YUY2 2
|
|
#define PULLUP_FMT_UYVY 3
|
|
#define PULLUP_FMT_RGB32 4
|
|
|
|
struct pullup_buffer
|
|
{
|
|
int lock[2];
|
|
unsigned char **planes;
|
|
};
|
|
|
|
struct pullup_field
|
|
{
|
|
int parity;
|
|
struct pullup_buffer *buffer;
|
|
unsigned int flags;
|
|
int breaks;
|
|
int affinity;
|
|
int *diffs;
|
|
int *comb;
|
|
int *var;
|
|
struct pullup_field *prev, *next;
|
|
};
|
|
|
|
struct pullup_frame
|
|
{
|
|
int lock;
|
|
int length;
|
|
int parity;
|
|
struct pullup_buffer **ifields, *ofields[2];
|
|
struct pullup_buffer *buffer;
|
|
};
|
|
|
|
struct pullup_context
|
|
{
|
|
/* Public interface */
|
|
int format;
|
|
int nplanes;
|
|
int *bpp, *w, *h, *stride, *background;
|
|
unsigned int cpu;
|
|
int junk_left, junk_right, junk_top, junk_bottom;
|
|
int verbose;
|
|
int metric_plane;
|
|
int strict_breaks;
|
|
int strict_pairs;
|
|
/* Internal data */
|
|
struct pullup_field *first, *last, *head;
|
|
struct pullup_buffer *buffers;
|
|
int nbuffers;
|
|
int (*diff)(unsigned char *, unsigned char *, int);
|
|
int (*comb)(unsigned char *, unsigned char *, int);
|
|
int (*var)(unsigned char *, unsigned char *, int);
|
|
int metric_w, metric_h, metric_len, metric_offset;
|
|
struct pullup_frame *frame;
|
|
};
|
|
|
|
|
|
struct pullup_buffer *pullup_lock_buffer(struct pullup_buffer *b, int parity);
|
|
void pullup_release_buffer(struct pullup_buffer *b, int parity);
|
|
struct pullup_buffer *pullup_get_buffer(struct pullup_context *c, int parity);
|
|
|
|
void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b, int parity);
|
|
void pullup_flush_fields(struct pullup_context *c);
|
|
|
|
struct pullup_frame *pullup_get_frame(struct pullup_context *c);
|
|
void pullup_pack_frame(struct pullup_context *c, struct pullup_frame *fr);
|
|
void pullup_release_frame(struct pullup_frame *fr);
|
|
|
|
struct pullup_context *pullup_alloc_context();
|
|
void pullup_preinit_context(struct pullup_context *c);
|
|
void pullup_init_context(struct pullup_context *c);
|
|
void pullup_free_context(struct pullup_context *c);
|
|
|
|
|