annotate libmpcodecs/vf_filmdint.c @ 34021:fbb87f092560

Get rid of usage of deprecated palctrl which no longer works anyway. Set up side data instead. Note that for lavf demuxer we will use the merged side data anyway, this is only for our own, e.g. AVI demuxer. Fixes bug #1976.
author reimar
date Sat, 17 Sep 2011 16:48:40 +0000
parents 7af3e6f901fd
children 064be070d8c8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
1 /*
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
2 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
3 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
5 * it under the terms of the GNU General Public License as published by
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
7 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
8 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
12 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
13 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
14 * You should have received a copy of the GNU General Public License along
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
17 */
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 29263
diff changeset
18
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
19 #include <stdio.h>
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
20 #include <stdlib.h>
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
21 #include <string.h>
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
22 #include <sys/time.h>
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
23
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
24 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
25 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
26 #include "cpudetect.h"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
27
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
28 #include "img_format.h"
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
29 #include "mp_image.h"
30653
3d23e24c5c60 Declare externally used variables from vd.c as extern in vd.h.
diego
parents: 30642
diff changeset
30 #include "vd.h"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
31 #include "vf.h"
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
32 #include "cmmx.h"
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
33
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 13720
diff changeset
34 #include "libvo/fastmemcpy.h"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
35
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
36 #define NUM_STORED 4
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
37
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
38 enum pu_field_type_t {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
39 PU_1ST_OF_3,
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
40 PU_2ND_OF_3,
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
41 PU_3RD_OF_3,
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
42 PU_1ST_OF_2,
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
43 PU_2ND_OF_2,
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
44 PU_INTERLACED
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
45 };
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
46
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
47 struct metrics {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
48 /* This struct maps to a packed word 64-bit MMX register */
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
49 unsigned short int even;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
50 unsigned short int odd;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
51 unsigned short int noise;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
52 unsigned short int temp;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
53 } __attribute__ ((aligned (8)));
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
54
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
55 struct frame_stats {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
56 struct metrics tiny, low, high, bigger, twox, max;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
57 struct { unsigned int even, odd, noise, temp; } sad;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
58 unsigned short interlaced_high;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
59 unsigned short interlaced_low;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
60 unsigned short num_blocks;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
61 };
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
62
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
63 struct vf_priv_s {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
64 unsigned long inframes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
65 unsigned long outframes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
66 enum pu_field_type_t prev_type;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
67 unsigned swapped, chroma_swapped;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
68 unsigned luma_only;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
69 unsigned verbose;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
70 unsigned fast;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
71 unsigned long w, h, cw, ch, stride, chroma_stride, nplanes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
72 unsigned long sad_thres;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
73 unsigned long dint_thres;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
74 unsigned char *memory_allocated;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
75 unsigned char *planes[2*NUM_STORED][4];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
76 unsigned char **old_planes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
77 unsigned long static_idx;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
78 unsigned long temp_idx;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
79 unsigned long crop_x, crop_y, crop_cx, crop_cy;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
80 unsigned long export_count, merge_count;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
81 unsigned long num_breaks;
12255
2eb20525825f dr bugfix by zoli (author of the filter)
rfelker
parents: 11623
diff changeset
82 unsigned long num_copies;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
83 long in_inc, out_dec, iosync;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
84 long num_fields;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
85 long prev_fields;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
86 long notout;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
87 long mmx2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
88 unsigned small_bytes[2];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
89 unsigned mmx_temp[2];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
90 struct frame_stats stats[2];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
91 struct metrics thres;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
92 char chflag;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
93 double diff_time, merge_time, decode_time, vo_time, filter_time;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
94 };
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
95
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
96 #define PPZ { 2000, 2000, 0, 2000 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
97 #define PPR { 2000, 2000, 0, 2000 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
98 static const struct frame_stats ppzs = {PPZ,PPZ,PPZ,PPZ,PPZ,PPZ,PPZ,0,0,9999};
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
99 static const struct frame_stats pprs = {PPR,PPR,PPR,PPR,PPR,PPR,PPR,0,0,9999};
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
100
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
101 #ifndef MIN
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
102 #define MIN(a,b) (((a)<(b))?(a):(b))
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
103 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
104 #ifndef MAX
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
105 #define MAX(a,b) (((a)>(b))?(a):(b))
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
106 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
107
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
108 #define PDIFFUB(X,Y,T) "movq " #X "," #T "\n\t" \
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
109 "psubusb " #Y "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
110 "psubusb " #X "," #Y "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
111 "paddusb " #Y "," #T "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
112
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
113 #define PDIFFUBT(X,Y,T) "movq " #X "," #T "\n\t" \
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
114 "psubusb " #Y "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
115 "psubusb " #X "," #Y "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
116 "paddusb " #T "," #Y "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
117
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
118 #define PSUMBW(X,T,Z) "movq " #X "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
119 "punpcklbw " #Z "," #X "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
120 "punpckhbw " #Z "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
121 "paddw " #T "," #X "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
122 "movq " #X "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
123 "psllq $32, " #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
124 "paddw " #T "," #X "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
125 "movq " #X "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
126 "psllq $16, " #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
127 "paddw " #T "," #X "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
128 "psrlq $48, " #X "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
129
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
130 #define PSADBW(X,Y,T,Z) PDIFFUBT(X,Y,T) PSUMBW(Y,T,Z)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
131
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
132 #define PMAXUB(X,Y) "psubusb " #X "," #Y "\n\tpaddusb " #X "," #Y "\n\t"
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
133 #define PMAXUW(X,Y) "psubusw " #X "," #Y "\n\tpaddusw " #X "," #Y "\n\t"
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
134 #define PMINUBT(X,Y,T) "movq " #Y "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
135 "psubusb " #X "," #T "\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
136 "psubusb " #T "," #Y "\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
137 #define PAVGB(X,Y) "pavgusb " #X "," #Y "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
138
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
139 static inline void
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
140 get_metrics_c(unsigned char *a, unsigned char *b, int as, int bs, int lines,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
141 struct metrics *m)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
142 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
143 a -= as;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
144 b -= bs;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
145 do {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
146 cmmx_t old_po = *(cmmx_t*)(a );
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
147 cmmx_t po = *(cmmx_t*)(b );
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
148 cmmx_t e = *(cmmx_t*)(b + bs);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
149 cmmx_t old_o = *(cmmx_t*)(a + 2*as);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
150 cmmx_t o = *(cmmx_t*)(b + 2*bs);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
151 cmmx_t ne = *(cmmx_t*)(b + 3*bs);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
152 cmmx_t old_no = *(cmmx_t*)(a + 4*as);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
153 cmmx_t no = *(cmmx_t*)(b + 4*bs);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
154
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
155 cmmx_t qup_old_odd = p31avgb(old_o, old_po);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
156 cmmx_t qup_odd = p31avgb( o, po);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
157 cmmx_t qdown_old_odd = p31avgb(old_o, old_no);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
158 cmmx_t qdown_odd = p31avgb( o, no);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
159
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
160 cmmx_t qup_even = p31avgb(ne, e);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
161 cmmx_t qdown_even = p31avgb(e, ne);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
162
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
163 cmmx_t temp_up_diff = pdiffub(qdown_even, qup_old_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
164 cmmx_t noise_up_diff = pdiffub(qdown_even, qup_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
165 cmmx_t temp_down_diff = pdiffub(qup_even, qdown_old_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
166 cmmx_t noise_down_diff = pdiffub(qup_even, qdown_odd);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
167
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
168 cmmx_t odd_diff = pdiffub(o, old_o);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
169 m->odd += psumbw(odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
170 m->even += psadbw(e, *(cmmx_t*)(a+as));
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
171
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
172 temp_up_diff = pminub(temp_up_diff, temp_down_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
173 temp_up_diff = pminub(temp_up_diff, odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
174 m->temp += psumbw(temp_up_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
175 noise_up_diff = pminub(noise_up_diff, odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
176 noise_up_diff = pminub(noise_up_diff, noise_down_diff);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
177
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
178 m->noise += psumbw(noise_up_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
179 a += 2*as;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
180 b += 2*bs;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
181 } while (--lines);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
182 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
183
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
184 static inline void
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
185 get_metrics_fast_c(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
186 int lines, struct metrics *m)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
187 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
188 a -= as;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
189 b -= bs;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
190 do {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
191 cmmx_t old_po = (*(cmmx_t*)(a ) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
192 cmmx_t po = (*(cmmx_t*)(b ) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
193 cmmx_t old_e = (*(cmmx_t*)(a + as) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
194 cmmx_t e = (*(cmmx_t*)(b + bs) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
195 cmmx_t old_o = (*(cmmx_t*)(a + 2*as) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
196 cmmx_t o = (*(cmmx_t*)(b + 2*bs) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
197 cmmx_t ne = (*(cmmx_t*)(b + 3*bs) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
198 cmmx_t old_no = (*(cmmx_t*)(a + 4*as) >> 1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
199 cmmx_t no = (*(cmmx_t*)(b + 4*bs) >> 1) & ~SIGN_BITS;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
200
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
201 cmmx_t qup_old_odd = p31avgb_s(old_o, old_po);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
202 cmmx_t qup_odd = p31avgb_s( o, po);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
203 cmmx_t qdown_old_odd = p31avgb_s(old_o, old_no);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
204 cmmx_t qdown_odd = p31avgb_s( o, no);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
205
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
206 cmmx_t qup_even = p31avgb_s(ne, e);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
207 cmmx_t qdown_even = p31avgb_s(e, ne);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
208
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
209 cmmx_t temp_up_diff = pdiffub_s(qdown_even, qup_old_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
210 cmmx_t noise_up_diff = pdiffub_s(qdown_even, qup_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
211 cmmx_t temp_down_diff = pdiffub_s(qup_even, qdown_old_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
212 cmmx_t noise_down_diff = pdiffub_s(qup_even, qdown_odd);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
213
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
214 cmmx_t odd_diff = pdiffub_s(o, old_o);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
215 m->odd += psumbw_s(odd_diff) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
216 m->even += psadbw_s(e, old_e) << 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
217
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
218 temp_up_diff = pminub_s(temp_up_diff, temp_down_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
219 temp_up_diff = pminub_s(temp_up_diff, odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
220 m->temp += psumbw_s(temp_up_diff) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
221 noise_up_diff = pminub_s(noise_up_diff, odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
222 noise_up_diff = pminub_s(noise_up_diff, noise_down_diff);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
223
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
224 m->noise += psumbw_s(noise_up_diff) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
225 a += 2*as;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
226 b += 2*bs;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
227 } while (--lines);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
228 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
229
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
230 static inline void
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
231 get_metrics_faster_c(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
232 int lines, struct metrics *m)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
233 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
234 a -= as;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
235 b -= bs;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
236 do {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
237 cmmx_t old_po = (*(cmmx_t*)(a )>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
238 cmmx_t po = (*(cmmx_t*)(b )>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
239 cmmx_t old_e = (*(cmmx_t*)(a + as)>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
240 cmmx_t e = (*(cmmx_t*)(b + bs)>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
241 cmmx_t old_o = (*(cmmx_t*)(a + 2*as)>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
242 cmmx_t o = (*(cmmx_t*)(b + 2*bs)>>1) & ~SIGN_BITS;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
243 cmmx_t ne = (*(cmmx_t*)(b + 3*bs)>>1) & ~SIGN_BITS;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
244
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
245 cmmx_t down_even = p31avgb_s(e, ne);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
246 cmmx_t up_odd = p31avgb_s(o, po);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
247 cmmx_t up_old_odd = p31avgb_s(old_o, old_po);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
248
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
249 cmmx_t odd_diff = pdiffub_s(o, old_o);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
250 cmmx_t temp_diff = pdiffub_s(down_even, up_old_odd);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
251 cmmx_t noise_diff = pdiffub_s(down_even, up_odd);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
252
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
253 m->even += psadbw_s(e, old_e) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
254 m->odd += psumbw_s(odd_diff) << 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
255
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
256 temp_diff = pminub_s(temp_diff, odd_diff);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
257 noise_diff = pminub_s(noise_diff, odd_diff);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
258
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
259 m->noise += psumbw_s(noise_diff) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
260 m->temp += psumbw_s(temp_diff) << 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
261 a += 2*as;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
262 b += 2*bs;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
263 } while (--lines);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29040
diff changeset
264
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
265 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
266
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
267 static inline void
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
268 get_block_stats(struct metrics *m, struct vf_priv_s *p, struct frame_stats *s)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
269 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
270 unsigned two_e = m->even + MAX(m->even , p->thres.even );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
271 unsigned two_o = m->odd + MAX(m->odd , p->thres.odd );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
272 unsigned two_n = m->noise + MAX(m->noise, p->thres.noise);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
273 unsigned two_t = m->temp + MAX(m->temp , p->thres.temp );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
274
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
275 unsigned e_big = m->even >= (m->odd + two_o + 1)/2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
276 unsigned o_big = m->odd >= (m->even + two_e + 1)/2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
277 unsigned n_big = m->noise >= (m->temp + two_t + 1)/2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
278 unsigned t_big = m->temp >= (m->noise + two_n + 1)/2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
279
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
280 unsigned e2x = m->even >= two_o;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
281 unsigned o2x = m->odd >= two_e;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
282 unsigned n2x = m->noise >= two_t;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
283 unsigned t2x = m->temp >= two_n;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
284
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
285 unsigned ntiny_e = m->even > p->thres.even ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
286 unsigned ntiny_o = m->odd > p->thres.odd ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
287 unsigned ntiny_n = m->noise > p->thres.noise;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
288 unsigned ntiny_t = m->temp > p->thres.temp ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
289
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
290 unsigned nlow_e = m->even > 2*p->thres.even ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
291 unsigned nlow_o = m->odd > 2*p->thres.odd ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
292 unsigned nlow_n = m->noise > 2*p->thres.noise;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
293 unsigned nlow_t = m->temp > 2*p->thres.temp ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
294
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
295 unsigned high_e = m->even > 4*p->thres.even ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
296 unsigned high_o = m->odd > 4*p->thres.odd ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
297 unsigned high_n = m->noise > 4*p->thres.noise;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
298 unsigned high_t = m->temp > 4*p->thres.temp ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
299
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
300 unsigned low_il = !n_big && !t_big && ntiny_n && ntiny_t;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
301 unsigned high_il = !n_big && !t_big && nlow_n && nlow_t;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
302
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
303 if (low_il | high_il) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
304 s->interlaced_low += low_il;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
305 s->interlaced_high += high_il;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
306 } else {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
307 s->tiny.even += ntiny_e;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
308 s->tiny.odd += ntiny_o;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
309 s->tiny.noise += ntiny_n;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
310 s->tiny.temp += ntiny_t;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
311
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
312 s->low .even += nlow_e ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
313 s->low .odd += nlow_o ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
314 s->low .noise += nlow_n ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
315 s->low .temp += nlow_t ;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
316
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
317 s->high.even += high_e ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
318 s->high.odd += high_o ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
319 s->high.noise += high_n ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
320 s->high.temp += high_t ;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
321
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
322 if (m->even >= p->sad_thres) s->sad.even += m->even ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
323 if (m->odd >= p->sad_thres) s->sad.odd += m->odd ;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
324 if (m->noise >= p->sad_thres) s->sad.noise += m->noise;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
325 if (m->temp >= p->sad_thres) s->sad.temp += m->temp ;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
326 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
327 s->num_blocks++;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
328 s->max.even = MAX(s->max.even , m->even );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
329 s->max.odd = MAX(s->max.odd , m->odd );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
330 s->max.noise = MAX(s->max.noise, m->noise);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
331 s->max.temp = MAX(s->max.temp , m->temp );
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
332
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
333 s->bigger.even += e_big ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
334 s->bigger.odd += o_big ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
335 s->bigger.noise += n_big ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
336 s->bigger.temp += t_big ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
337
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
338 s->twox.even += e2x ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
339 s->twox.odd += o2x ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
340 s->twox.noise += n2x ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
341 s->twox.temp += t2x ;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
342
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
343 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
344
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
345 static inline struct metrics
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
346 block_metrics_c(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
347 int lines, struct vf_priv_s *p, struct frame_stats *s)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
348 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
349 struct metrics tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
350 tm.even = tm.odd = tm.noise = tm.temp = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
351 get_metrics_c(a, b, as, bs, lines, &tm);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
352 if (sizeof(cmmx_t) < 8)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
353 get_metrics_c(a+4, b+4, as, bs, lines, &tm);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
354 get_block_stats(&tm, p, s);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
355 return tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
356 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
357
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
358 static inline struct metrics
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
359 block_metrics_fast_c(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
360 int lines, struct vf_priv_s *p, struct frame_stats *s)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
361 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
362 struct metrics tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
363 tm.even = tm.odd = tm.noise = tm.temp = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
364 get_metrics_fast_c(a, b, as, bs, lines, &tm);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
365 if (sizeof(cmmx_t) < 8)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
366 get_metrics_fast_c(a+4, b+4, as, bs, lines, &tm);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
367 get_block_stats(&tm, p, s);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
368 return tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
369 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
370
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
371 static inline struct metrics
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
372 block_metrics_faster_c(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
373 int lines, struct vf_priv_s *p, struct frame_stats *s)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
374 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
375 struct metrics tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
376 tm.even = tm.odd = tm.noise = tm.temp = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
377 get_metrics_faster_c(a, b, as, bs, lines, &tm);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
378 if (sizeof(cmmx_t) < 8)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
379 get_metrics_faster_c(a+4, b+4, as, bs, lines, &tm);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
380 get_block_stats(&tm, p, s);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
381 return tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
382 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
383
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
384 #define MEQ(X,Y) ((X).even == (Y).even && (X).odd == (Y).odd && (X).temp == (Y).temp && (X).noise == (Y).noise)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
385
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
386 #define BLOCK_METRICS_TEMPLATE() \
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
387 __asm__ volatile("pxor %mm7, %mm7\n\t" /* The result is colleted in mm7 */ \
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
388 "pxor %mm6, %mm6\n\t" /* Temp to stay at 0 */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
389 ); \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
390 a -= as; \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
391 b -= bs; \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
392 do { \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
393 __asm__ volatile( \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
394 "movq (%0,%2), %%mm0\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
395 "movq (%1,%3), %%mm1\n\t" /* mm1 = even */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
396 PSADBW(%%mm1, %%mm0, %%mm4, %%mm6) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
397 "paddusw %%mm0, %%mm7\n\t" /* even diff */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
398 "movq (%0,%2,2), %%mm0\n\t" /* mm0 = old odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
399 "movq (%1,%3,2), %%mm2\n\t" /* mm2 = odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
400 "movq (%0), %%mm3\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
401 "psubusb %4, %%mm3\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
402 PAVGB(%%mm0, %%mm3) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
403 PAVGB(%%mm0, %%mm3) /* mm3 = qup old odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
404 "movq %%mm0, %%mm5\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
405 PSADBW(%%mm2, %%mm0, %%mm4, %%mm6) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
406 "psllq $16, %%mm0\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
407 "paddusw %%mm0, %%mm7\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
408 "movq (%1), %%mm4\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
409 "lea (%0,%2,2), %0\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
410 "lea (%1,%3,2), %1\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
411 "psubusb %4, %%mm4\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
412 PAVGB(%%mm2, %%mm4) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
413 PAVGB(%%mm2, %%mm4) /* mm4 = qup odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
414 PDIFFUBT(%%mm5, %%mm2, %%mm0) /* mm2 =abs(oldodd-odd) */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
415 "movq (%1,%3), %%mm5\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
416 "psubusb %4, %%mm5\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
417 PAVGB(%%mm1, %%mm5) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
418 PAVGB(%%mm5, %%mm1) /* mm1 = qdown even */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
419 PAVGB((%1,%3), %%mm5) /* mm5 = qup next even */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
420 PDIFFUBT(%%mm1, %%mm3, %%mm0) /* mm3 = abs(qupoldo-qde) */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
421 PDIFFUBT(%%mm1, %%mm4, %%mm0) /* mm4 = abs(qupodd-qde) */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
422 PMINUBT(%%mm2, %%mm3, %%mm0) /* limit temp to odd diff */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
423 PMINUBT(%%mm2, %%mm4, %%mm0) /* limit noise to odd diff */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
424 "movq (%1,%3,2), %%mm2\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
425 "psubusb %4, %%mm2\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
426 PAVGB((%1), %%mm2) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
427 PAVGB((%1), %%mm2) /* mm2 = qdown odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
428 "movq (%0,%2,2), %%mm1\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
429 "psubusb %4, %%mm1\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
430 PAVGB((%0), %%mm1) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
431 PAVGB((%0), %%mm1) /* mm1 = qdown old odd */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
432 PDIFFUBT(%%mm5, %%mm2, %%mm0) /* mm2 = abs(qdo-qune) */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
433 PDIFFUBT(%%mm5, %%mm1, %%mm0) /* mm1 = abs(qdoo-qune) */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
434 PMINUBT(%%mm4, %%mm2, %%mm0) /* current */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
435 PMINUBT(%%mm3, %%mm1, %%mm0) /* old */ \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
436 PSUMBW(%%mm2, %%mm0, %%mm6) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
437 PSUMBW(%%mm1, %%mm0, %%mm6) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
438 "psllq $32, %%mm2\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
439 "psllq $48, %%mm1\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
440 "paddusw %%mm2, %%mm7\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
441 "paddusw %%mm1, %%mm7\n\t" \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
442 : "=r" (a), "=r" (b) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
443 : "r"((x86_reg)as), "r"((x86_reg)bs), "m" (ones), "0"(a), "1"(b), "X"(*a), "X"(*b) \
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
444 ); \
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
445 } while (--lines);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
446
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
447 static inline struct metrics
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
448 block_metrics_3dnow(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
449 int lines, struct vf_priv_s *p, struct frame_stats *s)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
450 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
451 struct metrics tm;
28335
31287e75b5d8 HAVE_3DNOW --> HAVE_AMD3DNOW
diego
parents: 28292
diff changeset
452 #if !HAVE_AMD3DNOW
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
453 mp_msg(MSGT_VFILTER, MSGL_FATAL, "block_metrics_3dnow: internal error\n");
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
454 #else
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
455 static const unsigned long long ones = 0x0101010101010101ull;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
456
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
457 BLOCK_METRICS_TEMPLATE();
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
458 __asm__ volatile("movq %%mm7, %0\n\temms" : "=m" (tm));
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
459 get_block_stats(&tm, p, s);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
460 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
461 return tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
462 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
463
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
464 #undef PSUMBW
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
465 #undef PSADBW
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
466 #undef PMAXUB
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
467 #undef PMINUBT
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
468 #undef PAVGB
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
469
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
470 #define PSUMBW(X,T,Z) "psadbw " #Z "," #X "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
471 #define PSADBW(X,Y,T,Z) "psadbw " #X "," #Y "\n\t"
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
472 #define PMAXUB(X,Y) "pmaxub " #X "," #Y "\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
473 #define PMINUBT(X,Y,T) "pminub " #X "," #Y "\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
474 #define PAVGB(X,Y) "pavgb " #X "," #Y "\n\t"
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
475
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
476 static inline struct metrics
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
477 block_metrics_mmx2(unsigned char *a, unsigned char *b, int as, int bs,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
478 int lines, struct vf_priv_s *p, struct frame_stats *s)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
479 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
480 struct metrics tm;
28292
d6001126678f More #ifdef HAVE_MMX etc. missed by earlier search.
reimar
parents: 27754
diff changeset
481 #if !HAVE_MMX
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
482 mp_msg(MSGT_VFILTER, MSGL_FATAL, "block_metrics_mmx2: internal error\n");
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
483 #else
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
484 static const unsigned long long ones = 0x0101010101010101ull;
29040
963f578121c6 Use x86_reg instead of long in several video filters to fix compilation on MinGW64.
reimar
parents: 28335
diff changeset
485 x86_reg interlaced;
963f578121c6 Use x86_reg instead of long in several video filters to fix compilation on MinGW64.
reimar
parents: 28335
diff changeset
486 x86_reg prefetch_line = (((long)a>>3) & 7) + 10;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
487 #ifdef DEBUG
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
488 struct frame_stats ts = *s;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
489 #endif
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
490 __asm__ volatile("prefetcht0 (%0,%2)\n\t"
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
491 "prefetcht0 (%1,%3)\n\t" :
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
492 : "r" (a), "r" (b),
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
493 "r" (prefetch_line * as), "r" (prefetch_line * bs));
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
494
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
495 BLOCK_METRICS_TEMPLATE();
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
496
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
497 s->num_blocks++;
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
498 __asm__ volatile(
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
499 "movq %3, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
500 "movq %%mm7, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
501 "psubusw %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
502 "movq %%mm1, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
503 "paddusw %%mm0, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
504 "paddusw %%mm7, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
505 "pshufw $0xb1, %%mm2, %%mm3\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
506 "pavgw %%mm7, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
507 "pshufw $0xb1, %%mm2, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
508 "psubusw %%mm7, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
509 "pcmpeqw %%mm6, %%mm2\n\t" /* 1 if >= 1.5x */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
510 "psubusw %%mm7, %%mm3\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
511 "pcmpeqw %%mm6, %%mm3\n\t" /* 1 if >= 2x */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
512 "movq %1, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
513 "movq %2, %%mm5\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
514 "psubw %%mm2, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
515 "psubw %%mm3, %%mm5\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
516 "movq %%mm4, %1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
517 "movq %%mm5, %2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
518 "pxor %%mm4, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
519 "pcmpeqw %%mm1, %%mm4\n\t" /* 1 if <= t */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
520 "psubusw %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
521 "pxor %%mm5, %%mm5\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
522 "pcmpeqw %%mm1, %%mm5\n\t" /* 1 if <= 2t */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
523 "psubusw %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
524 "psubusw %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
525 "pcmpeqw %%mm6, %%mm1\n\t" /* 1 if <= 4t */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
526 "pshufw $0xb1, %%mm2, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
527 "por %%mm2, %%mm0\n\t" /* 1 if not close */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
528 "punpckhdq %%mm0, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
529 "movq %%mm4, %%mm2\n\t" /* tttt */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
530 "punpckhdq %%mm5, %%mm2\n\t" /* ttll */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
531 "por %%mm2, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
532 "pcmpeqd %%mm6, %%mm0\n\t" /* close && big */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
533 "psrlq $16, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
534 "psrlw $15, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
535 "movd %%mm0, %0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
536 : "=r" (interlaced), "=m" (s->bigger), "=m" (s->twox)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
537 : "m" (p->thres)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
538 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
539
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
540 if (interlaced) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
541 s->interlaced_high += interlaced >> 16;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
542 s->interlaced_low += interlaced;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
543 } else {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
544 __asm__ volatile(
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
545 "pcmpeqw %%mm0, %%mm0\n\t" /* -1 */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
546 "psubw %%mm0, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
547 "psubw %%mm0, %%mm5\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
548 "psubw %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
549 "paddw %0, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
550 "paddw %1, %%mm5\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
551 "paddw %2, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
552 "movq %%mm4, %0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
553 "movq %%mm5, %1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
554 "movq %%mm1, %2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
555 : "=m" (s->tiny), "=m" (s->low), "=m" (s->high)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
556 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
557
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
558 __asm__ volatile(
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
559 "pshufw $0, %2, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
560 "psubusw %%mm7, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
561 "pcmpeqw %%mm6, %%mm0\n\t" /* 0 if below sad_thres */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
562 "pand %%mm7, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
563 "movq %%mm0, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
564 "punpcklwd %%mm6, %%mm0\n\t" /* sad even, odd */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
565 "punpckhwd %%mm6, %%mm1\n\t" /* sad noise, temp */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
566 "paddd %0, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
567 "paddd %1, %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
568 "movq %%mm0, %0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
569 "movq %%mm1, %1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
570 : "=m" (s->sad.even), "=m" (s->sad.noise)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
571 : "m" (p->sad_thres)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
572 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
573 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
574
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
575 __asm__ volatile(
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
576 "movq %%mm7, (%1)\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
577 PMAXUW((%0), %%mm7)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
578 "movq %%mm7, (%0)\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
579 "emms"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
580 : : "r" (&s->max), "r" (&tm), "X" (s->max)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
581 : "memory"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
582 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
583 #ifdef DEBUG
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
584 if (1) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
585 struct metrics cm;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
586 a -= 7*as;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
587 b -= 7*bs;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
588 cm = block_metrics_c(a, b, as, bs, 4, p, &ts);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
589 if (!MEQ(tm, cm))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
590 mp_msg(MSGT_VFILTER, MSGL_WARN, "Bad metrics\n");
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
591 if (s) {
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
592 # define CHECK(X) if (!MEQ(s->X, ts.X)) \
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
593 mp_msg(MSGT_VFILTER, MSGL_WARN, "Bad " #X "\n");
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
594 CHECK(tiny);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
595 CHECK(low);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
596 CHECK(high);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
597 CHECK(sad);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
598 CHECK(max);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
599 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
600 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
601 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
602 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
603 return tm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
604 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
605
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
606 static inline int
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
607 dint_copy_line_mmx2(unsigned char *dst, unsigned char *a, long bos,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
608 long cos, int ds, int ss, int w, int t)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
609 {
28292
d6001126678f More #ifdef HAVE_MMX etc. missed by earlier search.
reimar
parents: 27754
diff changeset
610 #if !HAVE_MMX
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
611 mp_msg(MSGT_VFILTER, MSGL_FATAL, "dint_copy_line_mmx2: internal error\n");
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
612 return 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
613 #else
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
614 unsigned long len = (w+7) >> 3;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
615 int ret;
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
616 __asm__ volatile (
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
617 "pxor %%mm6, %%mm6 \n\t" /* deinterlaced pixel counter */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
618 "movd %0, %%mm7 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
619 "punpcklbw %%mm7, %%mm7 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
620 "punpcklwd %%mm7, %%mm7 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
621 "punpckldq %%mm7, %%mm7 \n\t" /* mm7 = threshold */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
622 : /* no output */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
623 : "rm" (t)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
624 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
625 do {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
626 __asm__ volatile (
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
627 "movq (%0), %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
628 "movq (%0,%3,2), %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
629 "movq %%mm0, (%2)\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
630 "pmaxub %%mm1, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
631 "pavgb (%0), %%mm1\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
632 "psubusb %%mm1, %%mm0\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
633 "paddusb %%mm7, %%mm0\n\t" /* mm0 = max-avg+thr */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
634 "movq (%0,%1), %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
635 "movq (%0,%5), %%mm3\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
636 "movq %%mm2, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
637 PDIFFUBT(%%mm1, %%mm2, %%mm5)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
638 PDIFFUBT(%%mm1, %%mm3, %%mm5)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
639 "pminub %%mm2, %%mm3\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
640 "pcmpeqb %%mm3, %%mm2\n\t" /* b = min */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
641 "pand %%mm2, %%mm4\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
642 "pandn (%0,%5), %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
643 "por %%mm4, %%mm2\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
644 "pminub %%mm0, %%mm3\n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
645 "pcmpeqb %%mm0, %%mm3\n\t" /* set to 1s if >= threshold */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
646 "psubb %%mm3, %%mm6\n\t" /* count pixels above thr. */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
647 "pand %%mm3, %%mm1 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
648 "pandn %%mm2, %%mm3 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
649 "por %%mm3, %%mm1 \n\t" /* avg if >= threshold */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
650 "movq %%mm1, (%2,%4) \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
651 : /* no output */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
652 : "r" (a), "r" ((x86_reg)bos), "r" ((x86_reg)dst), "r" ((x86_reg)ss), "r" ((x86_reg)ds), "r" ((x86_reg)cos)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
653 );
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
654 a += 8;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
655 dst += 8;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
656 } while (--len);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
657
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 25626
diff changeset
658 __asm__ volatile ("pxor %%mm7, %%mm7 \n\t"
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
659 "psadbw %%mm6, %%mm7 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
660 "movd %%mm7, %0 \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
661 "emms \n\t"
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
662 : "=r" (ret)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
663 );
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
664 return ret;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
665 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
666 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
667
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
668 static inline int
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
669 dint_copy_line(unsigned char *dst, unsigned char *a, long bos,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
670 long cos, int ds, int ss, int w, int t)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
671 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
672 unsigned long len = ((unsigned long)w+sizeof(cmmx_t)-1) / sizeof(cmmx_t);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
673 cmmx_t dint_count = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
674 cmmx_t thr;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
675 t |= t << 8;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
676 thr = t | (t << 16);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
677 if (sizeof(cmmx_t) > 4)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
678 thr |= thr << (sizeof(cmmx_t)*4);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
679 do {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
680 cmmx_t e = *(cmmx_t*)a;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
681 cmmx_t ne = *(cmmx_t*)(a+2*ss);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
682 cmmx_t o = *(cmmx_t*)(a+bos);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
683 cmmx_t oo = *(cmmx_t*)(a+cos);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
684 cmmx_t maxe = pmaxub(e, ne);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
685 cmmx_t avge = pavgb(e, ne);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
686 cmmx_t max_diff = maxe - avge + thr; /* 0<=max-avg<128, thr<128 */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
687 cmmx_t diffo = pdiffub(avge, o);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
688 cmmx_t diffoo = pdiffub(avge, oo);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
689 cmmx_t diffcmp = pcmpgtub(diffo, diffoo);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
690 cmmx_t bo = ((oo ^ o) & diffcmp) ^ o;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
691 cmmx_t diffbo = ((diffoo ^ diffo) & diffcmp) ^ diffo;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
692 cmmx_t above_thr = ~pcmpgtub(max_diff, diffbo);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
693 cmmx_t bo_or_avg = ((avge ^ bo) & above_thr) ^ bo;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
694 dint_count += above_thr & ONE_BYTES;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
695 *(cmmx_t*)(dst) = e;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
696 *(cmmx_t*)(dst+ds) = bo_or_avg;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
697 a += sizeof(cmmx_t);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
698 dst += sizeof(cmmx_t);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
699 } while (--len);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
700 return psumbw(dint_count);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
701 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
702
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
703 static int
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
704 dint_copy_plane(unsigned char *d, unsigned char *a, unsigned char *b,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
705 unsigned char *c, unsigned long w, unsigned long h,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
706 unsigned long ds, unsigned long ss, unsigned long threshold,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
707 long field, long mmx2)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
708 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
709 unsigned long ret = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
710 long bos = b - a;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
711 long cos = c - a;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
712 if (field) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
713 fast_memcpy(d, b, w);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
714 h--;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
715 d += ds;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
716 a += ss;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
717 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
718 bos += ss;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
719 cos += ss;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
720 while (h > 2) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
721 if (threshold >= 128) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
722 fast_memcpy(d, a, w);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
723 fast_memcpy(d+ds, a+bos, w);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
724 } else if (mmx2 == 1) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
725 ret += dint_copy_line_mmx2(d, a, bos, cos, ds, ss, w, threshold);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
726 } else
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
727 ret += dint_copy_line(d, a, bos, cos, ds, ss, w, threshold);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
728 h -= 2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
729 d += 2*ds;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
730 a += 2*ss;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
731 }
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 17906
diff changeset
732 fast_memcpy(d, a, w);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
733 if (h == 2)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
734 fast_memcpy(d+ds, a+bos, w);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
735 return ret;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
736 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
737
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
738 static void
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
739 copy_merge_fields(struct vf_priv_s *p, mp_image_t *dmpi,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
740 unsigned char **old, unsigned char **new, unsigned long show)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
741 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
742 unsigned long threshold = 256;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
743 unsigned long field = p->swapped;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
744 unsigned long dint_pixels = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
745 unsigned char **other = old;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
746 if (show >= 12 || !(show & 3))
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
747 show >>= 2, other = new, new = old;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
748 if (show <= 2) { /* Single field: de-interlace */
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
749 threshold = p->dint_thres;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
750 field ^= show & 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
751 old = new;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
752 } else if (show == 3)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
753 old = new;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
754 else
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
755 field ^= 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
756 dint_pixels +=dint_copy_plane(dmpi->planes[0], old[0], new[0],
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
757 other[0], p->w, p->h, dmpi->stride[0],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
758 p->stride, threshold, field, p->mmx2);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
759 if (dmpi->flags & MP_IMGFLAG_PLANAR) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
760 if (p->luma_only)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
761 old = new, other = new;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
762 else
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
763 threshold = threshold/2 + 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
764 field ^= p->chroma_swapped;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
765 dint_copy_plane(dmpi->planes[1], old[1], new[1],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
766 other[1], p->cw, p->ch, dmpi->stride[1],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
767 p->chroma_stride, threshold, field, p->mmx2);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
768 dint_copy_plane(dmpi->planes[2], old[2], new[2],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
769 other[2], p->cw, p->ch, dmpi->stride[2],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
770 p->chroma_stride, threshold, field, p->mmx2);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
771 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
772 if (dint_pixels > 0 && p->verbose)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
773 mp_msg(MSGT_VFILTER,MSGL_INFO,"Deinterlaced %lu pixels\n",dint_pixels);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
774 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
775
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
776 static void diff_planes(struct vf_priv_s *p, struct frame_stats *s,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
777 unsigned char *of, unsigned char *nf,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
778 int w, int h, int os, int ns, int swapped)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
779 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
780 int i, y;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
781 int align = -(long)nf & 7;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
782 of += align;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
783 nf += align;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
784 w -= align;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
785 if (swapped)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
786 of -= os, nf -= ns;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
787 i = (h*3 >> 7) & ~1;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
788 of += i*os + 8;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
789 nf += i*ns + 8;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
790 h -= i;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
791 w -= 16;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
792
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
793 memset(s, 0, sizeof(*s));
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
794
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
795 for (y = (h-8) >> 3; y; y--) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
796 if (p->mmx2 == 1) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
797 for (i = 0; i < w; i += 8)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
798 block_metrics_mmx2(of+i, nf+i, os, ns, 4, p, s);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
799 } else if (p->mmx2 == 2) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
800 for (i = 0; i < w; i += 8)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
801 block_metrics_3dnow(of+i, nf+i, os, ns, 4, p, s);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
802 } else if (p->fast > 3) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
803 for (i = 0; i < w; i += 8)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
804 block_metrics_faster_c(of+i, nf+i, os, ns, 4, p, s);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
805 } else if (p->fast > 1) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
806 for (i = 0; i < w; i += 8)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
807 block_metrics_fast_c(of+i, nf+i, os, ns, 4, p, s);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
808 } else {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
809 for (i = 0; i < w; i += 8)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
810 block_metrics_c(of+i, nf+i, os, ns, 4, p, s);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
811 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
812 of += 8*os;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
813 nf += 8*ns;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
814 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
815 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
816
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
817 #define METRICS(X) (X).even, (X).odd, (X).noise, (X).temp
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
818
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
819 static void diff_fields(struct vf_priv_s *p, struct frame_stats *s,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
820 unsigned char **old, unsigned char **new)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
821 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
822 diff_planes(p, s, old[0], new[0], p->w, p->h,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
823 p->stride, p->stride, p->swapped);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
824 s->sad.even = (s->sad.even * 16ul) / s->num_blocks;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
825 s->sad.odd = (s->sad.odd * 16ul) / s->num_blocks;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
826 s->sad.noise = (s->sad.noise * 16ul) / s->num_blocks;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
827 s->sad.temp = (s->sad.temp * 16ul) / s->num_blocks;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
828 if (p->verbose)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
829 mp_msg(MSGT_VFILTER, MSGL_INFO, "%lu%c M:%d/%d/%d/%d - %d, "
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
830 "t:%d/%d/%d/%d, l:%d/%d/%d/%d, h:%d/%d/%d/%d, bg:%d/%d/%d/%d, "
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
831 "2x:%d/%d/%d/%d, sad:%d/%d/%d/%d, lil:%d, hil:%d, ios:%.1f\n",
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
832 p->inframes, p->chflag, METRICS(s->max), s->num_blocks,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
833 METRICS(s->tiny), METRICS(s->low), METRICS(s->high),
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
834 METRICS(s->bigger), METRICS(s->twox), METRICS(s->sad),
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
835 s->interlaced_low, s->interlaced_high,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
836 p->iosync / (double) p->in_inc);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
837 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
838
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
839 static const char *parse_args(struct vf_priv_s *p, const char *args)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
840 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
841 args--;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
842 while (args && *++args &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
843 (sscanf(args, "io=%lu:%lu", &p->out_dec, &p->in_inc) == 2 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
844 sscanf(args, "diff_thres=%hu", &p->thres.even ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
845 sscanf(args, "comb_thres=%hu", &p->thres.noise) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
846 sscanf(args, "sad_thres=%lu", &p->sad_thres ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
847 sscanf(args, "dint_thres=%lu", &p->dint_thres ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
848 sscanf(args, "fast=%u", &p->fast ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
849 sscanf(args, "mmx2=%lu", &p->mmx2 ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
850 sscanf(args, "luma_only=%u", &p->luma_only ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
851 sscanf(args, "verbose=%u", &p->verbose ) == 1 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
852 sscanf(args, "crop=%lu:%lu:%lu:%lu", &p->w,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
853 &p->h, &p->crop_x, &p->crop_y) == 4))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
854 args = strchr(args, '/');
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
855 return args;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
856 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
857
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
858 static unsigned long gcd(unsigned long x, unsigned long y)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
859 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
860 unsigned long t;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
861 if (x > y)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
862 t = x, x = y, y = t;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
863
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
864 while (x) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
865 t = y % x;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
866 y = x;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
867 x = t;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
868 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
869 return y;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
870 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
871
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
872 static void init(struct vf_priv_s *p, mp_image_t *mpi)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
873 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
874 unsigned long i;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
875 unsigned long plane_size, chroma_plane_size;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
876 unsigned char *plane;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
877 unsigned long cos, los;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
878 p->crop_cx = p->crop_x >> mpi->chroma_x_shift;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
879 p->crop_cy = p->crop_y >> mpi->chroma_y_shift;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
880 if (mpi->flags & MP_IMGFLAG_ACCEPT_STRIDE) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
881 p->stride = (mpi->w + 15) & ~15;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
882 p->chroma_stride = p->stride >> mpi->chroma_x_shift;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
883 } else {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
884 p->stride = mpi->width;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
885 p->chroma_stride = mpi->chroma_width;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
886 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
887 p->cw = p->w >> mpi->chroma_x_shift;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
888 p->ch = p->h >> mpi->chroma_y_shift;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
889 p->nplanes = 1;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
890 p->static_idx = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
891 p->temp_idx = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
892 p->old_planes = p->planes[0];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
893 plane_size = mpi->h * p->stride;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
894 chroma_plane_size = mpi->flags & MP_IMGFLAG_PLANAR ?
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
895 mpi->chroma_height * p->chroma_stride : 0;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
896 p->memory_allocated =
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
897 malloc(NUM_STORED * (plane_size+2*chroma_plane_size) +
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
898 8*p->chroma_stride + 4096);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
899 /* align to page boundary */
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
900 plane = p->memory_allocated + (-(long)p->memory_allocated & 4095);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
901 memset(plane, 0, NUM_STORED * plane_size);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
902 los = p->crop_x + p->crop_y * p->stride;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
903 cos = p->crop_cx + p->crop_cy * p->chroma_stride;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
904 for (i = 0; i != NUM_STORED; i++, plane += plane_size) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
905 p->planes[i][0] = plane;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
906 p->planes[NUM_STORED + i][0] = plane + los;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
907 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
908 if (mpi->flags & MP_IMGFLAG_PLANAR) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
909 p->nplanes = 3;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
910 memset(plane, 0x80, NUM_STORED * 2 * chroma_plane_size);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
911 for (i = 0; i != NUM_STORED; i++) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
912 p->planes[i][1] = plane;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
913 p->planes[NUM_STORED + i][1] = plane + cos;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
914 plane += chroma_plane_size;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
915 p->planes[i][2] = plane;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
916 p->planes[NUM_STORED + i][2] = plane + cos;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
917 plane += chroma_plane_size;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
918 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
919 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
920 p->out_dec <<= 2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
921 i = gcd(p->in_inc, p->out_dec);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
922 p->in_inc /= i;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
923 p->out_dec /= i;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
924 p->iosync = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
925 p->num_fields = 3;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
926 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
927
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
928 static inline double get_time(void)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
929 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
930 struct timeval tv;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
931 gettimeofday(&tv, 0);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
932 return tv.tv_sec + tv.tv_usec * 1e-6;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
933 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
934
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
935 static void get_image(struct vf_instance *vf, mp_image_t *mpi)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
936 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
937 struct vf_priv_s *p = vf->priv;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
938 static unsigned char **planes, planes_idx;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
939
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
940 if (mpi->type == MP_IMGTYPE_STATIC) return;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
941
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
942 if (!p->planes[0][0]) init(p, mpi);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
943
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
944 if (mpi->type == MP_IMGTYPE_TEMP ||
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
945 (mpi->type == MP_IMGTYPE_IPB && !(mpi->flags & MP_IMGFLAG_READABLE)))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
946 planes_idx = NUM_STORED/2 + (++p->temp_idx % (NUM_STORED/2));
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
947 else
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
948 planes_idx = ++p->static_idx % (NUM_STORED/2);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
949 planes = p->planes[planes_idx];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
950 mpi->priv = p->planes[NUM_STORED + planes_idx];
12255
2eb20525825f dr bugfix by zoli (author of the filter)
rfelker
parents: 11623
diff changeset
951 if (mpi->priv == p->old_planes) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
952 unsigned char **old_planes =
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
953 p->planes[NUM_STORED + 2 + (++p->temp_idx & 1)];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
954 my_memcpy_pic(old_planes[0], p->old_planes[0],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
955 p->w, p->h, p->stride, p->stride);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
956 if (mpi->flags & MP_IMGFLAG_PLANAR) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
957 my_memcpy_pic(old_planes[1], p->old_planes[1],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
958 p->cw, p->ch, p->chroma_stride, p->chroma_stride);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
959 my_memcpy_pic(old_planes[2], p->old_planes[2],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
960 p->cw, p->ch, p->chroma_stride, p->chroma_stride);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
961 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
962 p->old_planes = old_planes;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
963 p->num_copies++;
12255
2eb20525825f dr bugfix by zoli (author of the filter)
rfelker
parents: 11623
diff changeset
964 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
965 mpi->planes[0] = planes[0];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
966 mpi->stride[0] = p->stride;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
967 if (mpi->flags & MP_IMGFLAG_PLANAR) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
968 mpi->planes[1] = planes[1];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
969 mpi->planes[2] = planes[2];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
970 mpi->stride[1] = mpi->stride[2] = p->chroma_stride;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
971 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
972 mpi->width = p->stride;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
973
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
974 mpi->flags |= MP_IMGFLAG_DIRECT;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
975 mpi->flags &= ~MP_IMGFLAG_DRAW_CALLBACK;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
976 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
977
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
978 static inline long
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
979 cmpe(unsigned long x, unsigned long y, unsigned long err, unsigned long e)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
980 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
981 long diff = x-y;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
982 long unit = ((x+y+err) >> e);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
983 long ret = (diff > unit) - (diff < -unit);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
984 unit >>= 1;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
985 return ret + (diff > unit) - (diff < -unit);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
986 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
987
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
988 static unsigned long
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
989 find_breaks(struct vf_priv_s *p, struct frame_stats *s)
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
990 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
991 struct frame_stats *ps = &p->stats[(p->inframes-1) & 1];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
992 long notfilm = 5*p->in_inc - p->out_dec;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
993 unsigned long n = s->num_blocks >> 8;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
994 unsigned long sad_comb_cmp = cmpe(s->sad.temp, s->sad.noise, 512, 1);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
995 unsigned long ret = 8;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
996
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
997 if (cmpe(s->sad.temp, s->sad.even, 512, 1) > 0)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
998 mp_msg(MSGT_VFILTER, MSGL_WARN,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
999 "@@@@@@@@ Bottom-first field??? @@@@@@@@\n");
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1000 if (s->sad.temp > 1000 && s->sad.noise > 1000)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1001 return 3;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1002 if (s->interlaced_high >= 2*n && s->sad.temp > 256 && s->sad.noise > 256)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1003 return 3;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1004 if (s->high.noise > s->num_blocks/4 && s->sad.noise > 10000 &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1005 s->sad.noise > 2*s->sad.even && s->sad.noise > 2*ps->sad.odd) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1006 // Mid-frame scene change
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1007 if (s->tiny.temp + s->interlaced_low < n ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1008 s->low.temp + s->interlaced_high < n/4 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1009 s->high.temp + s->interlaced_high < n/8 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1010 s->sad.temp < 160)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1011 return 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1012 return 3;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1013 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1014 if (s->high.temp > s->num_blocks/4 && s->sad.temp > 10000 &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1015 s->sad.temp > 2*ps->sad.odd && s->sad.temp > 2*ps->sad.even) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1016 // Start frame scene change
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1017 if (s->tiny.noise + s->interlaced_low < n ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1018 s->low.noise + s->interlaced_high < n/4 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1019 s->high.noise + s->interlaced_high < n/8 ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1020 s->sad.noise < 160)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1021 return 2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1022 return 3;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1023 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1024 if (sad_comb_cmp == 2)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1025 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1026 if (sad_comb_cmp == -2)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1027 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1028
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1029 if (s->tiny.odd > 3*MAX(n,s->tiny.even) + s->interlaced_low)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1030 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1031 if (s->tiny.even > 3*MAX(n,s->tiny.odd)+s->interlaced_low &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1032 (!sad_comb_cmp || (s->low.noise <= n/4 && s->low.temp <= n/4)))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1033 return 4;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1034
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1035 if (s->sad.noise < 64 && s->sad.temp < 64 &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1036 s->low.noise <= n/2 && s->high.noise <= n/4 &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1037 s->low.temp <= n/2 && s->high.temp <= n/4)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1038 goto still;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1039
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1040 if (s->tiny.temp > 3*MAX(n,s->tiny.noise) + s->interlaced_low)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1041 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1042 if (s->tiny.noise > 3*MAX(n,s->tiny.temp) + s->interlaced_low)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1043 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1044
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1045 if (s->low.odd > 3*MAX(n/4,s->low.even) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1046 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1047 if (s->low.even > 3*MAX(n/4,s->low.odd)+s->interlaced_high &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1048 s->sad.even > 2*s->sad.odd &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1049 (!sad_comb_cmp || (s->low.noise <= n/4 && s->low.temp <= n/4)))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1050 return 4;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1051
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1052 if (s->low.temp > 3*MAX(n/4,s->low.noise) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1053 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1054 if (s->low.noise > 3*MAX(n/4,s->low.temp) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1055 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1056
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1057 if (sad_comb_cmp == 1 && s->sad.noise < 64)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1058 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1059 if (sad_comb_cmp == -1 && s->sad.temp < 64)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1060 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1061
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1062 if (s->tiny.odd <= n || (s->tiny.noise <= n/2 && s->tiny.temp <= n/2)) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1063 if (s->interlaced_low <= n) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1064 if (p->num_fields == 1)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1065 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1066 if (s->tiny.even <= n || ps->tiny.noise <= n/2)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1067 /* Still frame */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1068 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1069 if (s->bigger.even >= 2*MAX(n,s->bigger.odd) + s->interlaced_low)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1070 return 4;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1071 if (s->low.even >= 2*n + s->interlaced_low)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1072 return 4;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1073 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1074 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1075 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1076 if (s->low.odd <= n/4) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1077 if (s->interlaced_high <= n/4) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1078 if (p->num_fields == 1)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1079 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1080 if (s->low.even <= n/4)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1081 /* Still frame */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1082 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1083 if (s->bigger.even >= 2*MAX(n/4,s->bigger.odd)+s->interlaced_high)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1084 return 4;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1085 if (s->low.even >= n/2 + s->interlaced_high)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1086 return 4;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1087 goto still;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1088 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1089 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1090 if (s->bigger.temp > 2*MAX(n,s->bigger.noise) + s->interlaced_low)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1091 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1092 if (s->bigger.noise > 2*MAX(n,s->bigger.temp) + s->interlaced_low)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1093 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1094 if (s->bigger.temp > 2*MAX(n,s->bigger.noise) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1095 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1096 if (s->bigger.noise > 2*MAX(n,s->bigger.temp) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1097 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1098 if (s->twox.temp > 2*MAX(n,s->twox.noise) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1099 return 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1100 if (s->twox.noise > 2*MAX(n,s->twox.temp) + s->interlaced_high)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1101 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1102 if (s->bigger.even > 2*MAX(n,s->bigger.odd) + s->interlaced_low &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1103 s->bigger.temp < n && s->bigger.noise < n)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1104 return 4;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1105 if (s->interlaced_low > MIN(2*n, s->tiny.odd))
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1106 return 3;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1107 ret = 8 + (1 << (s->sad.temp > s->sad.noise));
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1108 still:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1109 if (p->num_fields == 1 && p->prev_fields == 3 && notfilm >= 0 &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1110 (s->tiny.temp <= s->tiny.noise || s->sad.temp < s->sad.noise+16))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1111 return 1;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1112 if (p->notout < p->num_fields && p->iosync > 2*p->in_inc && notfilm < 0)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1113 notfilm = 0;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1114 if (p->num_fields < 2 ||
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1115 (p->num_fields == 2 && p->prev_fields == 2 && notfilm < 0))
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1116 return ret;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1117 if (!notfilm && (p->prev_fields&~1) == 2) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1118 if (p->prev_fields + p->num_fields == 5) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1119 if (s->tiny.noise <= s->tiny.temp ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1120 s->low.noise == 0 || s->low.noise < s->low.temp ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1121 s->sad.noise < s->sad.temp+16)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1122 return 2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1123 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1124 if (p->prev_fields + p->num_fields == 4) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1125 if (s->tiny.temp <= s->tiny.noise ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1126 s->low.temp == 0 || s->low.temp < s->low.noise ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1127 s->sad.temp < s->sad.noise+16)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1128 return 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1129 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1130 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1131 if (p->num_fields > 2 &&
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1132 ps->sad.noise > s->sad.noise && ps->sad.noise > s->sad.temp)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1133 return 4;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1134 return 2 >> (s->sad.noise > s->sad.temp);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1135 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1136
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1137 #define ITOC(X) (!(X) ? ' ' : (X) + ((X)>9 ? 'a'-10 : '0'))
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1138
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
1139 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1140 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1141 mp_image_t *dmpi;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1142 struct vf_priv_s *p = vf->priv;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1143 unsigned char **planes, **old_planes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1144 struct frame_stats *s = &p->stats[p->inframes & 1];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1145 struct frame_stats *ps = &p->stats[(p->inframes-1) & 1];
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1146 int swapped = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1147 const int flags = mpi->fields;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1148 int breaks, prev;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1149 int show_fields = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1150 int dropped_fields = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1151 double start_time, diff_time;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1152 char prev_chflag = p->chflag;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1153 int keep_rate;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1154
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1155 if (!p->planes[0][0]) init(p, mpi);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1156
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1157 old_planes = p->old_planes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1158
12255
2eb20525825f dr bugfix by zoli (author of the filter)
rfelker
parents: 11623
diff changeset
1159 if ((mpi->flags & MP_IMGFLAG_DIRECT) && mpi->priv) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1160 planes = mpi->priv;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1161 mpi->priv = 0;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1162 } else {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1163 planes = p->planes[2 + (++p->temp_idx & 1)];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1164 my_memcpy_pic(planes[0],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1165 mpi->planes[0] + p->crop_x + p->crop_y * mpi->stride[0],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1166 p->w, p->h, p->stride, mpi->stride[0]);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1167 if (mpi->flags & MP_IMGFLAG_PLANAR) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1168 my_memcpy_pic(planes[1],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1169 mpi->planes[1] + p->crop_cx + p->crop_cy * mpi->stride[1],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1170 p->cw, p->ch, p->chroma_stride, mpi->stride[1]);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1171 my_memcpy_pic(planes[2],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1172 mpi->planes[2] + p->crop_cx + p->crop_cy * mpi->stride[2],
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1173 p->cw, p->ch, p->chroma_stride, mpi->stride[2]);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1174 p->num_copies++;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1175 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1176 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1177
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1178 p->old_planes = planes;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1179 p->chflag = ';';
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1180 if (flags & MP_IMGFIELD_ORDERED) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1181 swapped = !(flags & MP_IMGFIELD_TOP_FIRST);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1182 p->chflag = (flags & MP_IMGFIELD_REPEAT_FIRST ? '|' :
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1183 flags & MP_IMGFIELD_TOP_FIRST ? ':' : '.');
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1184 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1185 p->swapped = swapped;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1186
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1187 start_time = get_time();
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1188 if (p->chflag == '|') {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1189 *s = ppzs;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1190 p->iosync += p->in_inc;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1191 } else if ((p->fast & 1) && prev_chflag == '|')
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1192 *s = pprs;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1193 else
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1194 diff_fields(p, s, old_planes, planes);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1195 diff_time = get_time();
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1196 p->diff_time += diff_time - start_time;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1197 breaks = p->inframes ? find_breaks(p, s) : 2;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1198 p->inframes++;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1199 keep_rate = 4*p->in_inc == p->out_dec;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1200
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1201 switch (breaks) {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1202 case 0:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1203 case 8:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1204 case 9:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1205 case 10:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1206 if (!keep_rate && p->notout < p->num_fields && p->iosync < 2*p->in_inc)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1207 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1208 if (p->notout < p->num_fields)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1209 dropped_fields = -2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1210 case 4:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1211 if (keep_rate || p->iosync >= -2*p->in_inc)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1212 show_fields = (4<<p->num_fields)-1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1213 break;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1214 case 3:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1215 if (keep_rate)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1216 show_fields = 2;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1217 else if (p->iosync > 0) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1218 if (p->notout >= p->num_fields && p->iosync > 2*p->in_inc) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1219 show_fields = 4; /* prev odd only */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1220 if (p->num_fields > 1)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1221 show_fields |= 8; /* + prev even */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1222 } else {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1223 show_fields = 2; /* even only */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1224 if (p->notout >= p->num_fields)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1225 dropped_fields += p->num_fields;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1226 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1227 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1228 break;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1229 case 2:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1230 if (p->iosync <= -3*p->in_inc) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1231 if (p->notout >= p->num_fields)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1232 dropped_fields = p->num_fields;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1233 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1234 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1235 if (p->num_fields == 1) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1236 int prevbreak = ps->sad.noise >= 128;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1237 if (p->iosync < 4*p->in_inc) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1238 show_fields = 3;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1239 dropped_fields = prevbreak;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1240 } else {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1241 show_fields = 4 | (!prevbreak << 3);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1242 if (p->notout < 1 + p->prev_fields)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1243 dropped_fields = -!prevbreak;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1244 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1245 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1246 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1247 default:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1248 if (keep_rate)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1249 show_fields = 3 << (breaks & 1);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1250 else if (p->notout >= p->num_fields &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1251 p->iosync >= (breaks == 1 ? -p->in_inc :
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1252 p->in_inc << (p->num_fields == 1))) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1253 show_fields = (1 << (2 + p->num_fields)) - (1<<breaks);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1254 } else {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1255 if (p->notout >= p->num_fields)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1256 dropped_fields += p->num_fields + 2 - breaks;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1257 if (breaks == 1) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1258 if (p->iosync >= 4*p->in_inc)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1259 show_fields = 6;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1260 } else if (p->iosync > -3*p->in_inc)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1261 show_fields = 3; /* odd+even */
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1262 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1263 break;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1264 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1265
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1266 show_fields &= 15;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1267 prev = p->prev_fields;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1268 if (breaks < 8) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1269 if (p->num_fields == 1)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1270 breaks &= ~4;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1271 if (breaks)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1272 p->num_breaks++;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1273 if (breaks == 3)
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1274 p->prev_fields = p->num_fields = 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1275 else if (breaks) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1276 p->prev_fields = p->num_fields + (breaks==1) - (breaks==4);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1277 p->num_fields = breaks - (breaks == 4) + (p->chflag == '|');
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1278 } else
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1279 p->num_fields += 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1280 } else
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1281 p->num_fields += 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1282
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1283 p->iosync += 4 * p->in_inc;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1284 if (p->chflag == '|')
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1285 p->iosync += p->in_inc;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1286
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1287 if (show_fields) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1288 p->iosync -= p->out_dec;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1289 p->notout = !(show_fields & 1) + !(show_fields & 3);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1290 if (((show_fields & 3) == 3 &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1291 (s->low.noise + s->interlaced_low < (s->num_blocks>>8) ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1292 s->sad.noise < 160)) ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1293 ((show_fields & 12) == 12 &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1294 (ps->low.noise + ps->interlaced_low < (s->num_blocks>>8) ||
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1295 ps->sad.noise < 160))) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1296 p->export_count++;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1297 dmpi = vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_EXPORT,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1298 MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1299 p->w, p->h);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1300 if ((show_fields & 3) != 3) planes = old_planes;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1301 dmpi->planes[0] = planes[0];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1302 dmpi->stride[0] = p->stride;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1303 dmpi->width = mpi->width;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1304 if (mpi->flags & MP_IMGFLAG_PLANAR) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1305 dmpi->planes[1] = planes[1];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1306 dmpi->planes[2] = planes[2];
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1307 dmpi->stride[1] = p->chroma_stride;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1308 dmpi->stride[2] = p->chroma_stride;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1309 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1310 } else {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1311 p->merge_count++;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1312 dmpi = vf_get_image(vf->next, mpi->imgfmt,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1313 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1314 p->w, p->h);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1315 copy_merge_fields(p, dmpi, old_planes, planes, show_fields);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1316 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1317 p->outframes++;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1318 } else
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1319 p->notout += 2;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1320
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1321 if (p->verbose)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1322 mp_msg(MSGT_VFILTER, MSGL_INFO, "%lu %lu: %x %c %c %lu%s%s%c%s\n",
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1323 p->inframes, p->outframes,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1324 breaks, breaks<8 && breaks>0 ? (int) p->prev_fields+'0' : ' ',
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1325 ITOC(show_fields),
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1326 p->num_breaks, 5*p->in_inc == p->out_dec && breaks<8 &&
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1327 breaks>0 && ((prev&~1)!=2 || prev+p->prev_fields!=5) ?
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1328 " ######## bad telecine ########" : "",
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1329 dropped_fields ? " ======== dropped ":"", ITOC(dropped_fields),
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1330 !show_fields || (show_fields & (show_fields-1)) ?
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1331 "" : " @@@@@@@@@@@@@@@@@");
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1332
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1333 p->merge_time += get_time() - diff_time;
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
1334 return show_fields ? vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE) : 0;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1335 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1336
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
1337 static int query_format(struct vf_instance *vf, unsigned int fmt)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1338 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1339 /* FIXME - support more formats */
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1340 switch (fmt) {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1341 case IMGFMT_YV12:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1342 case IMGFMT_IYUV:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1343 case IMGFMT_I420:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1344 case IMGFMT_411P:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1345 case IMGFMT_422P:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1346 case IMGFMT_444P:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1347 return vf_next_query_format(vf, fmt);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1348 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1349 return 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1350 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1351
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
1352 static int config(struct vf_instance *vf,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1353 int width, int height, int d_width, int d_height,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1354 unsigned int flags, unsigned int outfmt)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1355 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1356 unsigned long cxm = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1357 unsigned long cym = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1358 struct vf_priv_s *p = vf->priv;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1359 // rounding:
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1360 if(!IMGFMT_IS_RGB(outfmt) && !IMGFMT_IS_BGR(outfmt)){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1361 switch(outfmt){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1362 case IMGFMT_444P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1363 case IMGFMT_Y800:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1364 case IMGFMT_Y8:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1365 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1366 case IMGFMT_YVU9:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1367 case IMGFMT_IF09:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1368 cym = 3;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1369 case IMGFMT_411P:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1370 cxm = 3;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1371 break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1372 case IMGFMT_YV12:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1373 case IMGFMT_I420:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1374 case IMGFMT_IYUV:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1375 cym = 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1376 default:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1377 cxm = 1;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1378 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1379 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1380 p->chroma_swapped = !!(p->crop_y & (cym+1));
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1381 if (p->w) p->w += p->crop_x & cxm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1382 if (p->h) p->h += p->crop_y & cym;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1383 p->crop_x &= ~cxm;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1384 p->crop_y &= ~cym;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1385 if (!p->w || p->w > width ) p->w = width;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1386 if (!p->h || p->h > height) p->h = height;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1387 if (p->crop_x + p->w > width ) p->crop_x = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1388 if (p->crop_y + p->h > height) p->crop_y = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1389
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1390 if(!opt_screen_size_x && !opt_screen_size_y){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1391 d_width = d_width * p->w/width;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1392 d_height = d_height * p->h/height;
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1393 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1394 return vf_next_config(vf, p->w, p->h, d_width, d_height, flags, outfmt);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1395 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1396
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
1397 static void uninit(struct vf_instance *vf)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1398 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1399 struct vf_priv_s *p = vf->priv;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1400 mp_msg(MSGT_VFILTER, MSGL_INFO, "diff_time: %.3f, merge_time: %.3f, "
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1401 "export: %lu, merge: %lu, copy: %lu\n", p->diff_time, p->merge_time,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1402 p->export_count, p->merge_count, p->num_copies);
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1403 free(p->memory_allocated);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1404 free(p);
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1405 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1406
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
1407 static int vf_open(vf_instance_t *vf, char *args)
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1408 {
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1409 struct vf_priv_s *p;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1410 vf->get_image = get_image;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1411 vf->put_image = put_image;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1412 vf->config = config;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1413 vf->query_format = query_format;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1414 vf->uninit = uninit;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1415 vf->default_reqs = VFCAP_ACCEPT_STRIDE;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1416 vf->priv = p = calloc(1, sizeof(struct vf_priv_s));
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1417 p->out_dec = 5;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1418 p->in_inc = 4;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1419 p->thres.noise = 128;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1420 p->thres.even = 128;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1421 p->sad_thres = 64;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1422 p->dint_thres = 4;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1423 p->luma_only = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1424 p->fast = 3;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1425 p->mmx2 = gCpuCaps.hasMMX2 ? 1 : gCpuCaps.has3DNow ? 2 : 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1426 if (args) {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1427 const char *args_remain = parse_args(p, args);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1428 if (args_remain) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1429 mp_msg(MSGT_VFILTER, MSGL_FATAL,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1430 "filmdint: unknown suboption: %s\n", args_remain);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1431 return 0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1432 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1433 if (p->out_dec < p->in_inc) {
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1434 mp_msg(MSGT_VFILTER, MSGL_FATAL,
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1435 "filmdint: increasing the frame rate is not supported\n");
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1436 return 0;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1437 }
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1438 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1439 if (p->mmx2 > 2)
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 30653
diff changeset
1440 p->mmx2 = 0;
28292
d6001126678f More #ifdef HAVE_MMX etc. missed by earlier search.
reimar
parents: 27754
diff changeset
1441 #if !HAVE_MMX
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1442 p->mmx2 = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1443 #endif
28335
31287e75b5d8 HAVE_3DNOW --> HAVE_AMD3DNOW
diego
parents: 28292
diff changeset
1444 #if !HAVE_AMD3DNOW
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1445 p->mmx2 &= 1;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1446 #endif
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1447 p->thres.odd = p->thres.even;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1448 p->thres.temp = p->thres.noise;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1449 p->diff_time = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1450 p->merge_time = 0;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1451 return 1;
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1452 }
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1453
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 24119
diff changeset
1454 const vf_info_t vf_info_filmdint = {
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1455 "Advanced inverse telecine filer",
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1456 "filmdint",
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1457 "Zoltan Hidvegi",
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1458 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
1459 vf_open,
11600
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1460 NULL
5eb66d37d539 Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
diff changeset
1461 };