annotate libmpcodecs/vf_scale.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents 9da2161b5554
children 00fff9a3b735
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
1 #include <stdio.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
2 #include <stdlib.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
3 #include <string.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
4 #include <inttypes.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
5
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
6 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
7 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
8 #include "cpudetect.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
9
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
10 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
11 #include "mp_image.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
12 #include "vf.h"
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
13 #include "fmt-conversion.h"
22228
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
14 #include "bswap.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
15
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17932
diff changeset
16 #include "libswscale/swscale.h"
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 10140
diff changeset
17 #include "vf_scale.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
18
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
19 #include "m_option.h"
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
20 #include "m_struct.h"
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
21
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
22 static struct vf_priv_s {
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
23 int w,h;
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
24 int v_chr_drop;
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
25 double param[2];
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
26 unsigned int fmt;
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9491
diff changeset
27 struct SwsContext *ctx;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
28 struct SwsContext *ctx2; //for interlaced slices only
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
29 unsigned char* palette;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
30 int interlaced;
17646
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
31 int noup;
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 18861
diff changeset
32 int accurate_rnd;
11373
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
33 int query_format_cache[64];
22027
0b262e00bc99 Mark m_struct_t defaults as const
reimar
parents: 19870
diff changeset
34 } const vf_priv_dflt = {
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
35 -1,-1,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
36 0,
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
37 {SWS_PARAM_DEFAULT, SWS_PARAM_DEFAULT},
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
38 0,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
39 NULL,
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
40 NULL,
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
41 NULL
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
42 };
545c13161589 swscale filter
arpi
parents:
diff changeset
43
6060
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
44 extern int opt_screen_size_x;
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
45 extern int opt_screen_size_y;
13268
125f1b58a325 do not modify d_width and d_height when -xy option was given, otherwise -xy has no effect with e.g. vo_gl
reimar
parents: 12475
diff changeset
46 extern float screen_size_xy;
6060
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
47
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
48 //===========================================================================//
545c13161589 swscale filter
arpi
parents:
diff changeset
49
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
50 void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam);
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
51
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
52 static unsigned int outfmt_list[]={
12260
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
53 // YUV:
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
54 IMGFMT_444P,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
55 IMGFMT_422P,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
56 IMGFMT_YV12,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
57 IMGFMT_I420,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
58 IMGFMT_IYUV,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
59 IMGFMT_YVU9,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
60 IMGFMT_IF09,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
61 IMGFMT_411P,
14715
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
62 IMGFMT_NV12,
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
63 IMGFMT_NV21,
12260
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
64 IMGFMT_YUY2,
9d7e95b0a7e5 prefer yuv formats over rgb in case both are supported by hw
faust3
parents: 12017
diff changeset
65 IMGFMT_UYVY,
12475
16e673350486 give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents: 12260
diff changeset
66 // RGB and grayscale (Y8 and Y800):
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
67 IMGFMT_BGR32,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
68 IMGFMT_RGB32,
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
69 IMGFMT_BGR24,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
70 IMGFMT_RGB24,
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
71 IMGFMT_BGR16,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
72 IMGFMT_RGB16,
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
73 IMGFMT_BGR15,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
74 IMGFMT_RGB15,
12475
16e673350486 give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents: 12260
diff changeset
75 IMGFMT_Y800,
16e673350486 give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents: 12260
diff changeset
76 IMGFMT_Y8,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
77 IMGFMT_BGR8,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
78 IMGFMT_RGB8,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
79 IMGFMT_BGR4,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
80 IMGFMT_RGB4,
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
81 IMGFMT_BG4B,
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
82 IMGFMT_RG4B,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
83 IMGFMT_BGR1,
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
84 IMGFMT_RGB1,
6188
39a9515c633a warning fixes, patch by Ulrich Hecht <uli@suse.de>
arpi
parents: 6138
diff changeset
85 0
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
86 };
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
87
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
88 static unsigned int find_best_out(vf_instance_t *vf){
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
89 unsigned int best=0;
11373
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
90 int i;
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
91
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
92 // find the best outfmt:
11373
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
93 for(i=0; i<sizeof(outfmt_list)/sizeof(int)-1; i++){
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
94 const int format= outfmt_list[i];
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
95 int ret= vf->priv->query_format_cache[i]-1;
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
96 if(ret == -1){
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
97 ret= vf_next_query_format(vf, outfmt_list[i]);
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
98 vf->priv->query_format_cache[i]= ret+1;
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
99 }
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
100
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
101 mp_msg(MSGT_VFILTER,MSGL_DBG2,"scale: query(%s) -> %d\n",vo_format_name(format),ret&3);
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
102 if(ret&VFCAP_CSP_SUPPORTED_BY_HW){
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
103 best=format; // no conversion -> bingo!
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
104 break;
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
105 }
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
106 if(ret&VFCAP_CSP_SUPPORTED && !best)
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
107 best=format; // best with conversion
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
108 }
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
109 return best;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
110 }
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
111
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
112 static int config(struct vf_instance_s* vf,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
113 int width, int height, int d_width, int d_height,
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
114 unsigned int flags, unsigned int outfmt){
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
115 unsigned int best=find_best_out(vf);
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
116 int vo_flags;
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
117 int int_sws_flags=0;
14924
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
118 int round_w=0, round_h=0;
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
119 SwsFilter *srcFilter, *dstFilter;
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
120 enum PixelFormat dfmt, sfmt;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
121
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
122 if(!best){
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 6126
diff changeset
123 mp_msg(MSGT_VFILTER,MSGL_WARN,"SwScale: no supported outfmt found :(\n");
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
124 return 0;
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
125 }
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
126 sfmt = imgfmt2pixfmt(outfmt);
23478
8fae00da2059 RGB8/BGR8 IMGFMTs are paletted in case of swscale input.
reimar
parents: 23373
diff changeset
127 if (outfmt == IMGFMT_RGB8 || outfmt == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8;
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
128 dfmt = imgfmt2pixfmt(best);
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
129
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
130 vo_flags=vf->next->query_format(vf->next,best);
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
131
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
132 // scaling to dwidth*d_height, if all these TRUE:
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
133 // - option -zoom
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
134 // - no other sw/hw up/down scaling avail.
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
135 // - we're after postproc
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
136 // - user didn't set w:h
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
137 if(!(vo_flags&VFCAP_POSTPROC) && (flags&4) &&
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
138 vf->priv->w<0 && vf->priv->h<0){ // -zoom
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
139 int x=(vo_flags&VFCAP_SWSCALE) ? 0 : 1;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
140 if(d_width<width || d_height<height){
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
141 // downscale!
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
142 if(vo_flags&VFCAP_HWSCALE_DOWN) x=0;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
143 } else {
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
144 // upscale:
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
145 if(vo_flags&VFCAP_HWSCALE_UP) x=0;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
146 }
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
147 if(x){
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
148 // user wants sw scaling! (-zoom)
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
149 vf->priv->w=d_width;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
150 vf->priv->h=d_height;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
151 }
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
152 }
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
153
17646
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
154 if(vf->priv->noup){
17674
0f314c38ce57 10l (dont limit dimension components independantly if noup)
michael
parents: 17646
diff changeset
155 if((vf->priv->w > width) + (vf->priv->h > height) >= vf->priv->noup){
17646
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
156 vf->priv->w= width;
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
157 vf->priv->h= height;
17674
0f314c38ce57 10l (dont limit dimension components independantly if noup)
michael
parents: 17646
diff changeset
158 }
17646
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
159 }
168d8eb397f1 no upscale flag so automatic downscaling is possible in mencoder
michael
parents: 17566
diff changeset
160
17215
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
161 if (vf->priv->w <= -8) {
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
162 vf->priv->w += 8;
14924
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
163 round_w = 1;
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
164 }
17215
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
165 if (vf->priv->h <= -8) {
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
166 vf->priv->h += 8;
14924
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
167 round_h = 1;
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
168 }
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
169
13925
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
170 if (vf->priv->w < -3 || vf->priv->h < -3 ||
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
171 (vf->priv->w < -1 && vf->priv->h < -1)) {
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
172 // TODO: establish a direct connection to the user's brain
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
173 // and find out what the heck he thinks MPlayer should do
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
174 // with this nonsense.
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
175 mp_msg(MSGT_VFILTER, MSGL_ERR, "SwScale: EUSERBROKEN Check your parameters, they make no sense!\n");
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
176 return 0;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
177 }
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
178
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
179 if (vf->priv->w == -1)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
180 vf->priv->w = width;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
181 if (vf->priv->w == 0)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
182 vf->priv->w = d_width;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
183
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
184 if (vf->priv->h == -1)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
185 vf->priv->h = height;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
186 if (vf->priv->h == 0)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
187 vf->priv->h = d_height;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
188
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
189 if (vf->priv->w == -3)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
190 vf->priv->w = vf->priv->h * width / height;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
191 if (vf->priv->w == -2)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
192 vf->priv->w = vf->priv->h * d_width / d_height;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
193
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
194 if (vf->priv->h == -3)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
195 vf->priv->h = vf->priv->w * height / width;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
196 if (vf->priv->h == -2)
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
197 vf->priv->h = vf->priv->w * d_height / d_width;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
198
14924
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
199 if (round_w)
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
200 vf->priv->w = ((vf->priv->w + 8) / 16) * 16;
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
201 if (round_h)
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
202 vf->priv->h = ((vf->priv->h + 8) / 16) * 16;
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
203
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
204 // calculate the missing parameters:
6746
0e2b14e606ac Round height or width to valid values when doing automatic calculation.
kmkaplan
parents: 6708
diff changeset
205 switch(best) {
0e2b14e606ac Round height or width to valid values when doing automatic calculation.
kmkaplan
parents: 6708
diff changeset
206 case IMGFMT_YV12: /* YV12 needs w & h rounded to 2 */
11069
71d1a2815e16 some missing formats
alex
parents: 11068
diff changeset
207 case IMGFMT_I420:
71d1a2815e16 some missing formats
alex
parents: 11068
diff changeset
208 case IMGFMT_IYUV:
14715
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
209 case IMGFMT_NV12:
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
210 case IMGFMT_NV21:
13925
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
211 vf->priv->h = (vf->priv->h + 1) & ~1;
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
212 case IMGFMT_YUY2: /* YUY2 needs w rounded to 2 */
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
213 case IMGFMT_UYVY:
72f8a761e714 fix for negative values for width and height (aspect-preserving scaling).
reimar
parents: 13373
diff changeset
214 vf->priv->w = (vf->priv->w + 1) & ~1;
6746
0e2b14e606ac Round height or width to valid values when doing automatic calculation.
kmkaplan
parents: 6708
diff changeset
215 }
6126
35eb2b9c7d9c new special w/h values: -2 and -3. based on proposal by Bohdan Horst <nexus@hoth.amu.edu.pl>
arpi
parents: 6060
diff changeset
216
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 6126
diff changeset
217 mp_msg(MSGT_VFILTER,MSGL_DBG2,"SwScale: scaling %dx%d %s to %dx%d %s \n",
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
218 width,height,vo_format_name(outfmt),
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
219 vf->priv->w,vf->priv->h,vo_format_name(best));
5526
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
220
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
221 // free old ctx:
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9491
diff changeset
222 if(vf->priv->ctx) sws_freeContext(vf->priv->ctx);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
223 if(vf->priv->ctx2)sws_freeContext(vf->priv->ctx2);
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
224
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
225 // new swscaler:
9494
543ab3909b78 sws_ prefix, more seperation between internal & external swscaler API
michael
parents: 9491
diff changeset
226 sws_getFlagsAndFilterFromCmdLine(&int_sws_flags, &srcFilter, &dstFilter);
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
227 int_sws_flags|= vf->priv->v_chr_drop << SWS_SRC_V_CHR_DROP_SHIFT;
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 18861
diff changeset
228 int_sws_flags|= vf->priv->accurate_rnd * SWS_ACCURATE_RND;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
229 vf->priv->ctx=sws_getContext(width, height >> vf->priv->interlaced,
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
230 sfmt,
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
231 vf->priv->w, vf->priv->h >> vf->priv->interlaced,
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
232 dfmt,
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
233 int_sws_flags | get_sws_cpuflags(), srcFilter, dstFilter, vf->priv->param);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
234 if(vf->priv->interlaced){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
235 vf->priv->ctx2=sws_getContext(width, height >> 1,
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
236 sfmt,
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
237 vf->priv->w, vf->priv->h >> 1,
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
238 dfmt,
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
239 int_sws_flags | get_sws_cpuflags(), srcFilter, dstFilter, vf->priv->param);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
240 }
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
241 if(!vf->priv->ctx){
545c13161589 swscale filter
arpi
parents:
diff changeset
242 // error...
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 6126
diff changeset
243 mp_msg(MSGT_VFILTER,MSGL_WARN,"Couldn't init SwScaler for this setup\n");
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
244 return 0;
545c13161589 swscale filter
arpi
parents:
diff changeset
245 }
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
246 vf->priv->fmt=best;
6060
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
247
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
248 if(vf->priv->palette){
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
249 free(vf->priv->palette);
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
250 vf->priv->palette=NULL;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
251 }
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
252 switch(best){
22225
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
253 case IMGFMT_RGB8: {
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
254 /* set 332 palette for 8 bpp */
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
255 int i;
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
256 vf->priv->palette=malloc(4*256);
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
257 for(i=0; i<256; i++){
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
258 vf->priv->palette[4*i+0]=4*(i>>6)*21;
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
259 vf->priv->palette[4*i+1]=4*((i>>3)&7)*9;
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
260 vf->priv->palette[4*i+2]=4*((i&7)&7)*9;
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
261 vf->priv->palette[4*i+3]=0;
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
262 }
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
263 break; }
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
264 case IMGFMT_BGR8: {
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
265 /* set 332 palette for 8 bpp */
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
266 int i;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
267 vf->priv->palette=malloc(4*256);
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
268 for(i=0; i<256; i++){
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
269 vf->priv->palette[4*i+0]=4*(i&3)*21;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
270 vf->priv->palette[4*i+1]=4*((i>>2)&7)*9;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
271 vf->priv->palette[4*i+2]=4*((i>>5)&7)*9;
22224
79967c519e43 another ridiculous palette bug which has nothing to do with the new palete support in sws
michael
parents: 22219
diff changeset
272 vf->priv->palette[4*i+3]=0;
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
273 }
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
274 break; }
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
275 case IMGFMT_BGR4:
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
276 case IMGFMT_BG4B: {
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
277 int i;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
278 vf->priv->palette=malloc(4*16);
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
279 for(i=0; i<16; i++){
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
280 vf->priv->palette[4*i+0]=4*(i&1)*63;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
281 vf->priv->palette[4*i+1]=4*((i>>1)&3)*21;
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
282 vf->priv->palette[4*i+2]=4*((i>>3)&1)*63;
22224
79967c519e43 another ridiculous palette bug which has nothing to do with the new palete support in sws
michael
parents: 22219
diff changeset
283 vf->priv->palette[4*i+3]=0;
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
284 }
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
285 break; }
22227
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
286 case IMGFMT_RGB4:
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
287 case IMGFMT_RG4B: {
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
288 int i;
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
289 vf->priv->palette=malloc(4*16);
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
290 for(i=0; i<16; i++){
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
291 vf->priv->palette[4*i+0]=4*(i>>3)*63;
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
292 vf->priv->palette[4*i+1]=4*((i>>1)&3)*21;
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
293 vf->priv->palette[4*i+2]=4*((i&1)&1)*63;
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
294 vf->priv->palette[4*i+3]=0;
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
295 }
cec1eb5be9e4 palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents: 22225
diff changeset
296 break; }
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
297 }
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
298
13268
125f1b58a325 do not modify d_width and d_height when -xy option was given, otherwise -xy has no effect with e.g. vo_gl
reimar
parents: 12475
diff changeset
299 if(!opt_screen_size_x && !opt_screen_size_y && !(screen_size_xy >= 0.001)){
10002
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
300 // Compute new d_width and d_height, preserving aspect
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
301 // while ensuring that both are >= output size in pixels.
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
302 if (vf->priv->h * d_width > vf->priv->w * d_height) {
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
303 d_width = vf->priv->h * d_width / d_height;
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
304 d_height = vf->priv->h;
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
305 } else {
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
306 d_height = vf->priv->w * d_height / d_width;
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
307 d_width = vf->priv->w;
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
308 }
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
309 //d_width=d_width*vf->priv->w/width;
b2b070bf934e generate meaningful d_width & d_height when scaling, rather than useless nonsense.
rfelker
parents: 9985
diff changeset
310 //d_height=d_height*vf->priv->h/height;
6060
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
311 }
5525
arpi
parents: 5523
diff changeset
312 return vf_next_config(vf,vf->priv->w,vf->priv->h,d_width,d_height,flags,best);
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
313 }
545c13161589 swscale filter
arpi
parents:
diff changeset
314
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
315 static void start_slice(struct vf_instance_s* vf, mp_image_t *mpi){
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
316 // printf("start_slice called! flag=%d\n",mpi->flags&MP_IMGFLAG_DRAW_CALLBACK);
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
317 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) return; // shouldn't happen
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
318 // they want slices!!! allocate the buffer.
10140
30cad6ad9dbc fix segfaults with slices. support slice rendering into a filter even
rfelker
parents: 10022
diff changeset
319 mpi->priv=vf->dmpi=vf_get_image(vf->next,vf->priv->fmt,
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
320 // mpi->type, mpi->flags & (~MP_IMGFLAG_DRAW_CALLBACK),
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
321 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
322 vf->priv->w, vf->priv->h);
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
323 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
324
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
325 static void scale(struct SwsContext *sws1, struct SwsContext *sws2, uint8_t *src[3], int src_stride[3], int y, int h,
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
326 uint8_t *dst[3], int dst_stride[3], int interlaced){
22228
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
327 uint8_t *src2[3]={src[0], src[1], src[2]};
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
328 #ifdef WORDS_BIGENDIAN
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
329 uint32_t pal2[256];
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
330 if (src[1] && !src[2]){
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
331 int i;
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
332 for(i=0; i<256; i++)
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
333 pal2[i]= bswap_32(((uint32_t*)src[1])[i]);
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
334 src2[1]= pal2;
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
335 }
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
336 #endif
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
337
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
338 if(interlaced){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
339 int i;
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
340 uint8_t *dst2[3]={dst[0], dst[1], dst[2]};
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
341 int src_stride2[3]={2*src_stride[0], 2*src_stride[1], 2*src_stride[2]};
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
342 int dst_stride2[3]={2*dst_stride[0], 2*dst_stride[1], 2*dst_stride[2]};
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
343
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
344 sws_scale_ordered(sws1, src2, src_stride2, y>>1, h>>1, dst2, dst_stride2);
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
345 for(i=0; i<3; i++){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
346 src2[i] += src_stride[i];
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
347 dst2[i] += dst_stride[i];
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
348 }
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
349 sws_scale_ordered(sws2, src2, src_stride2, y>>1, h>>1, dst2, dst_stride2);
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
350 }else{
22228
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
351 sws_scale_ordered(sws1, src2, src_stride, y, h, dst, dst_stride);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
352 }
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
353 }
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
354
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
355 static void draw_slice(struct vf_instance_s* vf,
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
356 unsigned char** src, int* stride, int w,int h, int x, int y){
10140
30cad6ad9dbc fix segfaults with slices. support slice rendering into a filter even
rfelker
parents: 10022
diff changeset
357 mp_image_t *dmpi=vf->dmpi;
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
358 if(!dmpi){
24249
9da2161b5554 warning fix:
diego
parents: 23479
diff changeset
359 mp_msg(MSGT_VFILTER,MSGL_FATAL,"vf_scale: draw_slice() called with dmpi=NULL (no get_image?)\n");
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
360 return;
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
361 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
362 // printf("vf_scale::draw_slice() y=%d h=%d\n",y,h);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
363 scale(vf->priv->ctx, vf->priv->ctx2, src, stride, y, h, dmpi->planes, dmpi->stride, vf->priv->interlaced);
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
364 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
365
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17674
diff changeset
366 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
367 mp_image_t *dmpi=mpi->priv;
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
368
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
369 // printf("vf_scale::put_image(): processing whole frame! dmpi=%p flag=%d\n",
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
370 // dmpi, (mpi->flags&MP_IMGFLAG_DRAW_CALLBACK));
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
371
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
372 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK && dmpi)){
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
373
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
374 // hope we'll get DR buffer:
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
375 dmpi=vf_get_image(vf->next,vf->priv->fmt,
6876
49485d9f0d47 imho swscale also likes aligned stride :)
arpi
parents: 6863
diff changeset
376 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
377 vf->priv->w, vf->priv->h);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
378
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
379 scale(vf->priv->ctx, vf->priv->ctx, mpi->planes,mpi->stride,0,mpi->h,dmpi->planes,dmpi->stride, vf->priv->interlaced);
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
380 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
381
5527
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
382 if(vf->priv->w==mpi->w && vf->priv->h==mpi->h){
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
383 // just conversion, no scaling -> keep postprocessing data
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
384 // this way we can apply pp filter to non-yv12 source using scaler
9934
89da8ec89558 vf_clone_mpi_attributes()
michael
parents: 9697
diff changeset
385 vf_clone_mpi_attributes(dmpi, mpi);
5527
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
386 }
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
387
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
388 if(vf->priv->palette) dmpi->planes[1]=vf->priv->palette; // export palette!
5527
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
389
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17674
diff changeset
390 return vf_next_put_image(vf,dmpi, pts);
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
391 }
545c13161589 swscale filter
arpi
parents:
diff changeset
392
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
393 static int control(struct vf_instance_s* vf, int request, void* data){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
394 int *table;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
395 int *inv_table;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
396 int r;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
397 int brightness, contrast, saturation, srcRange, dstRange;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
398 vf_equalizer_t *eq;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
399
10632
2294cbc41c34 -brightness && -vf scale fix
michael
parents: 10233
diff changeset
400 if(vf->priv->ctx)
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
401 switch(request){
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
402 case VFCTRL_GET_EQUALIZER:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
403 r= sws_getColorspaceDetails(vf->priv->ctx, &inv_table, &srcRange, &table, &dstRange, &brightness, &contrast, &saturation);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
404 if(r<0) break;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
405
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
406 eq = data;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
407 if (!strcmp(eq->item,"brightness")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
408 eq->value = ((brightness*100) + (1<<15))>>16;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
409 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
410 else if (!strcmp(eq->item,"contrast")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
411 eq->value = (((contrast *100) + (1<<15))>>16) - 100;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
412 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
413 else if (!strcmp(eq->item,"saturation")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
414 eq->value = (((saturation*100) + (1<<15))>>16) - 100;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
415 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
416 else
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
417 break;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
418 return CONTROL_TRUE;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
419 case VFCTRL_SET_EQUALIZER:
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
420 r= sws_getColorspaceDetails(vf->priv->ctx, &inv_table, &srcRange, &table, &dstRange, &brightness, &contrast, &saturation);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
421 if(r<0) break;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
422 //printf("set %f %f %f\n", brightness/(float)(1<<16), contrast/(float)(1<<16), saturation/(float)(1<<16));
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
423 eq = data;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
424
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
425 if (!strcmp(eq->item,"brightness")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
426 brightness = (( eq->value <<16) + 50)/100;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
427 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
428 else if (!strcmp(eq->item,"contrast")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
429 contrast = (((eq->value+100)<<16) + 50)/100;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
430 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
431 else if (!strcmp(eq->item,"saturation")) {
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
432 saturation = (((eq->value+100)<<16) + 50)/100;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
433 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
434 else
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
435 break;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
436
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
437 r= sws_setColorspaceDetails(vf->priv->ctx, inv_table, srcRange, table, dstRange, brightness, contrast, saturation);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
438 if(r<0) break;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
439 if(vf->priv->ctx2){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
440 r= sws_setColorspaceDetails(vf->priv->ctx2, inv_table, srcRange, table, dstRange, brightness, contrast, saturation);
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
441 if(r<0) break;
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
442 }
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
443
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
444 return CONTROL_TRUE;
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
445 default:
10233
35f52ad860a0 vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents: 10140
diff changeset
446 break;
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
447 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
448
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
449 return vf_next_control(vf,request,data);
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
450 }
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
451
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
452 //===========================================================================//
545c13161589 swscale filter
arpi
parents:
diff changeset
453
9071
25baacd1c650 UYVY input
michael
parents: 7783
diff changeset
454 // supported Input formats: YV12, I420, IYUV, YUY2, UYVY, BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8, Y800
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
455
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
456 static int query_format(struct vf_instance_s* vf, unsigned int fmt){
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
457 switch(fmt){
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
458 case IMGFMT_YV12:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
459 case IMGFMT_I420:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
460 case IMGFMT_IYUV:
9071
25baacd1c650 UYVY input
michael
parents: 7783
diff changeset
461 case IMGFMT_UYVY:
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
462 case IMGFMT_YUY2:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
463 case IMGFMT_BGR32:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
464 case IMGFMT_BGR24:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
465 case IMGFMT_BGR16:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
466 case IMGFMT_BGR15:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
467 case IMGFMT_RGB32:
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
468 case IMGFMT_RGB24:
6533
52f8bde27fea yvu9 & y8
michael
parents: 6188
diff changeset
469 case IMGFMT_Y800:
52f8bde27fea yvu9 & y8
michael
parents: 6188
diff changeset
470 case IMGFMT_Y8:
52f8bde27fea yvu9 & y8
michael
parents: 6188
diff changeset
471 case IMGFMT_YVU9:
6536
87942adf9c1c IF09 added
arpi
parents: 6533
diff changeset
472 case IMGFMT_IF09:
6863
713182435a76 planar yuv 444 422 411 support
michael
parents: 6750
diff changeset
473 case IMGFMT_444P:
713182435a76 planar yuv 444 422 411 support
michael
parents: 6750
diff changeset
474 case IMGFMT_422P:
713182435a76 planar yuv 444 422 411 support
michael
parents: 6750
diff changeset
475 case IMGFMT_411P:
22219
7f6edf51bc14 PAL8 ...
michael
parents: 22027
diff changeset
476 case IMGFMT_BGR8:
7f6edf51bc14 PAL8 ...
michael
parents: 22027
diff changeset
477 case IMGFMT_RGB8:
22225
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
478 case IMGFMT_BG4B:
345d2866dfcf add IMGFMT_RGB8 palette init code what moron actually added init code just for half of the formats?!
michael
parents: 22224
diff changeset
479 case IMGFMT_RG4B:
6533
52f8bde27fea yvu9 & y8
michael
parents: 6188
diff changeset
480 {
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
481 unsigned int best=find_best_out(vf);
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
482 int flags;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
483 if(!best) return 0; // no matching out-fmt
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
484 flags=vf_next_query_format(vf,best);
15537
alex
parents: 14924
diff changeset
485 if(!(flags&(VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW))) return 0; // huh?
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
486 if(fmt!=best) flags&=~VFCAP_CSP_SUPPORTED_BY_HW;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
487 // do not allow scaling, if we are before the PP fliter!
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
488 if(!(flags&VFCAP_POSTPROC)) flags|=VFCAP_SWSCALE;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
489 return flags;
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
490 }
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
491 }
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5527
diff changeset
492 return 0; // nomatching in-fmt
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
493 }
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
494
11537
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
495 static void uninit(struct vf_instance_s *vf){
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
496 if(vf->priv->ctx) sws_freeContext(vf->priv->ctx);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
497 if(vf->priv->ctx2) sws_freeContext(vf->priv->ctx2);
11537
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
498 if(vf->priv->palette) free(vf->priv->palette);
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
499 free(vf->priv);
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
500 }
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
501
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
502 static int open(vf_instance_t *vf, char* args){
545c13161589 swscale filter
arpi
parents:
diff changeset
503 vf->config=config;
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
504 vf->start_slice=start_slice;
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
505 vf->draw_slice=draw_slice;
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
506 vf->put_image=put_image;
5526
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
507 vf->query_format=query_format;
9476
eff727517e6b yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents: 9276
diff changeset
508 vf->control= control;
11537
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
509 vf->uninit=uninit;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
510 if(!vf->priv) {
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
511 vf->priv=malloc(sizeof(struct vf_priv_s));
545c13161589 swscale filter
arpi
parents:
diff changeset
512 // TODO: parse args ->
545c13161589 swscale filter
arpi
parents:
diff changeset
513 vf->priv->ctx=NULL;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
514 vf->priv->ctx2=NULL;
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
515 vf->priv->w=
545c13161589 swscale filter
arpi
parents:
diff changeset
516 vf->priv->h=-1;
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
517 vf->priv->v_chr_drop=0;
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 18861
diff changeset
518 vf->priv->accurate_rnd=0;
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
519 vf->priv->param[0]=
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
520 vf->priv->param[1]=SWS_PARAM_DEFAULT;
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
521 vf->priv->palette=NULL;
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
522 } // if(!vf->priv)
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
523 if(args) sscanf(args, "%d:%d:%d:%lf:%lf",
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
524 &vf->priv->w,
6542
7af3fcd76d2d support dropping some chroma src lines for a bit extra speed
michael
parents: 6536
diff changeset
525 &vf->priv->h,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
526 &vf->priv->v_chr_drop,
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
527 &vf->priv->param[0],
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
528 &vf->priv->param[1]);
6138
523014df7d32 big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents: 6126
diff changeset
529 mp_msg(MSGT_VFILTER,MSGL_V,"SwScale params: %d x %d (-1=no scaling)\n",
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
530 vf->priv->w,
545c13161589 swscale filter
arpi
parents:
diff changeset
531 vf->priv->h);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
532
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
533 return 1;
545c13161589 swscale filter
arpi
parents:
diff changeset
534 }
545c13161589 swscale filter
arpi
parents:
diff changeset
535
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
536 //global sws_flags from the command line
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
537 int sws_flags=2;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
538
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
539 //global srcFilter
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
540 static SwsFilter *src_filter= NULL;
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
541
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
542 float sws_lum_gblur= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
543 float sws_chr_gblur= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
544 int sws_chr_vshift= 0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
545 int sws_chr_hshift= 0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
546 float sws_chr_sharpen= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
547 float sws_lum_sharpen= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
548
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17215
diff changeset
549 int get_sws_cpuflags(void){
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
550 return
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
551 (gCpuCaps.hasMMX ? SWS_CPU_CAPS_MMX : 0)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
552 | (gCpuCaps.hasMMX2 ? SWS_CPU_CAPS_MMX2 : 0)
12017
21e5cb258a95 AltiVec support in postproc/ + altivec optimizations for yuv2yuvX patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 11700
diff changeset
553 | (gCpuCaps.has3DNow ? SWS_CPU_CAPS_3DNOW : 0)
21e5cb258a95 AltiVec support in postproc/ + altivec optimizations for yuv2yuvX patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
michael
parents: 11700
diff changeset
554 | (gCpuCaps.hasAltiVec ? SWS_CPU_CAPS_ALTIVEC : 0);
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
555 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
556
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
557 void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
558 {
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
559 static int firstTime=1;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
560 *flags=0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
561
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
562 #ifdef ARCH_X86
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
563 if(gCpuCaps.hasMMX)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
564 asm volatile("emms\n\t"::: "memory"); //FIXME this shouldnt be required but it IS (even for non mmx versions)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
565 #endif
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
566 if(firstTime)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
567 {
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
568 firstTime=0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
569 *flags= SWS_PRINT_INFO;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
570 }
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17906
diff changeset
571 else if( mp_msg_test(MSGT_VFILTER,MSGL_DBG2) ) *flags= SWS_PRINT_INFO;
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
572
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
573 if(src_filter) sws_freeFilter(src_filter);
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
574
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
575 src_filter= sws_getDefaultFilter(
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
576 sws_lum_gblur, sws_chr_gblur,
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
577 sws_lum_sharpen, sws_chr_sharpen,
11373
3b9f8ee18ff9 another lame workaround for the g1 filter layer ...
michael
parents: 11069
diff changeset
578 sws_chr_hshift, sws_chr_vshift, verbose>1);
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
579
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
580 switch(sws_flags)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
581 {
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
582 case 0: *flags|= SWS_FAST_BILINEAR; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
583 case 1: *flags|= SWS_BILINEAR; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
584 case 2: *flags|= SWS_BICUBIC; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
585 case 3: *flags|= SWS_X; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
586 case 4: *flags|= SWS_POINT; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
587 case 5: *flags|= SWS_AREA; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
588 case 6: *flags|= SWS_BICUBLIN; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
589 case 7: *flags|= SWS_GAUSS; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
590 case 8: *flags|= SWS_SINC; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
591 case 9: *flags|= SWS_LANCZOS; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
592 case 10:*flags|= SWS_SPLINE; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
593 default:*flags|= SWS_BILINEAR; break;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
594 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
595
9985
3d8b145a5470 moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents: 9975
diff changeset
596 *srcFilterParam= src_filter;
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
597 *dstFilterParam= NULL;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
598 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
599
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
600 // will use sws_flags & src_filter (from cmd line)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
601 struct SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
602 {
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
603 int flags;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
604 SwsFilter *dstFilterParam, *srcFilterParam;
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
605 enum PixelFormat dfmt, sfmt;
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
606
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
607 dfmt = imgfmt2pixfmt(dstFormat);
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
608 sfmt = imgfmt2pixfmt(srcFormat);
23479
db82492b2f30 100l, fix compile error in r23498 due to bad copy in paste
reimar
parents: 23478
diff changeset
609 if (srcFormat == IMGFMT_RGB8 || srcFormat == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8;
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
610 sws_getFlagsAndFilterFromCmdLine(&flags, &srcFilterParam, &dstFilterParam);
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
611
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
612 return sws_getContext(srcW, srcH, sfmt, dstW, dstH, dfmt, flags | get_sws_cpuflags(), srcFilterParam, dstFilterParam, NULL);
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
613 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
614
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
615 /// An example of presets usage
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
616 static struct size_preset {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
617 char* name;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
618 int w, h;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
619 } vf_size_presets_defs[] = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
620 // TODO add more 'standard' resolutions
10814
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
621 { "qntsc", 352, 240 },
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
622 { "qpal", 352, 288 },
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
623 { "ntsc", 720, 480 },
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
624 { "pal", 720, 576 },
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
625 { "sntsc", 640, 480 },
7f34ec540e0f size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents: 10632
diff changeset
626 { "spal", 768, 576 },
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
627 { NULL, 0, 0}
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
628 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
629
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
630 #define ST_OFF(f) M_ST_OFF(struct size_preset,f)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
631 static m_option_t vf_size_preset_fields[] = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
632 {"w", ST_OFF(w), CONF_TYPE_INT, M_OPT_MIN,1 ,0, NULL},
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
633 {"h", ST_OFF(h), CONF_TYPE_INT, M_OPT_MIN,1 ,0, NULL},
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
634 { NULL, NULL, 0, 0, 0, 0, NULL }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
635 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
636
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
637 static m_struct_t vf_size_preset = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
638 "scale_size_preset",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
639 sizeof(struct size_preset),
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
640 NULL,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
641 vf_size_preset_fields
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
642 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
643
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
644 static m_struct_t vf_opts;
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
645 static m_obj_presets_t size_preset = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
646 &vf_size_preset, // Input struct desc
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
647 &vf_opts, // Output struct desc
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
648 vf_size_presets_defs, // The list of presets
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
649 ST_OFF(name) // At wich offset is the name field in the preset struct
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
650 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
651
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
652 /// Now the options
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
653 #undef ST_OFF
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
654 #define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
655 static m_option_t vf_opts_fields[] = {
14924
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
656 {"w", ST_OFF(w), CONF_TYPE_INT, M_OPT_MIN,-11,0, NULL},
7f386d84805f subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents: 14715
diff changeset
657 {"h", ST_OFF(h), CONF_TYPE_INT, M_OPT_MIN,-11,0, NULL},
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
658 {"interlaced", ST_OFF(interlaced), CONF_TYPE_INT, M_OPT_RANGE, 0, 1, NULL},
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
659 {"chr-drop", ST_OFF(v_chr_drop), CONF_TYPE_INT, M_OPT_RANGE, 0, 3, NULL},
13373
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
660 {"param" , ST_OFF(param[0]), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.0, 100.0, NULL},
6bd869a18d2c passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents: 13268
diff changeset
661 {"param2", ST_OFF(param[1]), CONF_TYPE_DOUBLE, M_OPT_RANGE, 0.0, 100.0, NULL},
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
662 // Note that here the 2 field is NULL (ie 0)
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
663 // As we want this option to act on the option struct itself
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
664 {"presize", 0, CONF_TYPE_OBJ_PRESETS, 0, 0, 0, &size_preset},
19520
46fa785e9026 A value of 2 is valid for noup, too
reimar
parents: 19172
diff changeset
665 {"noup", ST_OFF(noup), CONF_TYPE_INT, M_OPT_RANGE, 0, 2, NULL},
19172
bae6c99a99cc vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents: 18861
diff changeset
666 {"arnd", ST_OFF(accurate_rnd), CONF_TYPE_FLAG, 0, 0, 1, NULL},
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
667 { NULL, NULL, 0, 0, 0, 0, NULL }
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
668 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
669
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
670 static m_struct_t vf_opts = {
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
671 "scale",
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
672 sizeof(struct vf_priv_s),
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
673 &vf_priv_dflt,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
674 vf_opts_fields
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
675 };
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
676
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
677 vf_info_t vf_info_scale = {
545c13161589 swscale filter
arpi
parents:
diff changeset
678 "software scaling",
545c13161589 swscale filter
arpi
parents:
diff changeset
679 "scale",
545c13161589 swscale filter
arpi
parents:
diff changeset
680 "A'rpi",
545c13161589 swscale filter
arpi
parents:
diff changeset
681 "",
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
682 open,
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
683 &vf_opts
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
684 };
545c13161589 swscale filter
arpi
parents:
diff changeset
685
545c13161589 swscale filter
arpi
parents:
diff changeset
686 //===========================================================================//