Mercurial > mplayer.hg
annotate libmpcodecs/vf_scale.c @ 37088:3a9a804e488b
mixer: do not unmute to volume 0, instead unmute to max.
It's not very useful for unmute to still result in volume 0.
Plus it makes it easier to enable sound for devices that were
on mute at startup.
author | reimar |
---|---|
date | Tue, 06 May 2014 19:02:02 +0000 |
parents | 97446d4850cc |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
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:
30367
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:
30367
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:
30367
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
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:
30367
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:
30367
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:
30367
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
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:
30367
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:
30367
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:
30367
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30367
diff
changeset
|
18 |
5522 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 #include <inttypes.h> | |
23 | |
17012 | 24 #include "config.h" |
25 #include "mp_msg.h" | |
26 #include "cpudetect.h" | |
5522 | 27 |
5607 | 28 #include "img_format.h" |
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" |
5522 | 31 #include "vf.h" |
19870
1e5cf11e8b1f
Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents:
19520
diff
changeset
|
32 #include "fmt-conversion.h" |
26542
3a2e8ae7c548
Consistently #include mpbswap.h instead of bswap.h everywhere.
diego
parents:
25221
diff
changeset
|
33 #include "mpbswap.h" |
5522 | 34 |
18861 | 35 #include "libswscale/swscale.h" |
10233
35f52ad860a0
vf_scale.h & related cleanup & some small warning fix by dominik
michael
parents:
10140
diff
changeset
|
36 #include "vf_scale.h" |
5522 | 37 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
38 #include "m_option.h" |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
39 #include "m_struct.h" |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
40 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
41 static struct vf_priv_s { |
5522 | 42 int w,h; |
6542
7af3fcd76d2d
support dropping some chroma src lines for a bit extra speed
michael
parents:
6536
diff
changeset
|
43 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
|
44 double param[2]; |
5523 | 45 unsigned int fmt; |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9491
diff
changeset
|
46 struct SwsContext *ctx; |
11700 | 47 struct SwsContext *ctx2; //for interlaced slices only |
7783 | 48 unsigned char* palette; |
11700 | 49 int interlaced; |
17646
168d8eb397f1
no upscale flag so automatic downscaling is possible in mencoder
michael
parents:
17566
diff
changeset
|
50 int noup; |
19172
bae6c99a99cc
vertical scaler with accurate rounding, some people on doom9 can see +-1 errors
michael
parents:
18861
diff
changeset
|
51 int accurate_rnd; |
22027 | 52 } 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
|
53 -1,-1, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
54 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
|
55 {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
|
56 0, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
57 NULL, |
11700 | 58 NULL, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
59 NULL |
5522 | 60 }; |
61 | |
62 //===========================================================================// | |
63 | |
9985
3d8b145a5470
moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents:
9975
diff
changeset
|
64 void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam); |
3d8b145a5470
moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents:
9975
diff
changeset
|
65 |
30662 | 66 static const unsigned int outfmt_list[]={ |
12260
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
67 // YUV: |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
68 IMGFMT_444P, |
30113
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
69 IMGFMT_444P16_LE, |
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
70 IMGFMT_444P16_BE, |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
71 IMGFMT_444P14_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
72 IMGFMT_444P14_BE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
73 IMGFMT_444P12_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
74 IMGFMT_444P12_BE, |
34028 | 75 IMGFMT_444P10_LE, |
76 IMGFMT_444P10_BE, | |
34189 | 77 IMGFMT_444P9_LE, |
78 IMGFMT_444P9_BE, | |
12260
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
79 IMGFMT_422P, |
30113
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
80 IMGFMT_422P16_LE, |
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
81 IMGFMT_422P16_BE, |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
82 IMGFMT_422P14_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
83 IMGFMT_422P14_BE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
84 IMGFMT_422P12_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
85 IMGFMT_422P12_BE, |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
86 IMGFMT_422P10_LE, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
87 IMGFMT_422P10_BE, |
34436 | 88 IMGFMT_422P9_LE, |
89 IMGFMT_422P9_BE, | |
12260
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
90 IMGFMT_YV12, |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
91 IMGFMT_I420, |
30113
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
92 IMGFMT_420P16_LE, |
bb92638cdb86
Try to put the list of output formats for vf_scale in a more sensible
reimar
parents:
30110
diff
changeset
|
93 IMGFMT_420P16_BE, |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
94 IMGFMT_420P14_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
95 IMGFMT_420P14_BE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
96 IMGFMT_420P12_LE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
97 IMGFMT_420P12_BE, |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
98 IMGFMT_420P10_LE, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
99 IMGFMT_420P10_BE, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
100 IMGFMT_420P9_LE, |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32703
diff
changeset
|
101 IMGFMT_420P9_BE, |
30115
ad61464d02a7
Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents:
30113
diff
changeset
|
102 IMGFMT_420A, |
34805
0eba64545a27
Improve Avid Meridien (AVUI) decoding with FFmpeg.
cehoyos
parents:
34565
diff
changeset
|
103 IMGFMT_422A, |
34565 | 104 IMGFMT_444A, |
12260
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
105 IMGFMT_IYUV, |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
106 IMGFMT_YVU9, |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
107 IMGFMT_IF09, |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
108 IMGFMT_411P, |
14715 | 109 IMGFMT_NV12, |
110 IMGFMT_NV21, | |
12260
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
111 IMGFMT_YUY2, |
9d7e95b0a7e5
prefer yuv formats over rgb in case both are supported by hw
faust3
parents:
12017
diff
changeset
|
112 IMGFMT_UYVY, |
30100 | 113 IMGFMT_440P, |
12475
16e673350486
give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents:
12260
diff
changeset
|
114 // RGB and grayscale (Y8 and Y800): |
5523 | 115 IMGFMT_BGR32, |
7403 | 116 IMGFMT_RGB32, |
5523 | 117 IMGFMT_BGR24, |
7403 | 118 IMGFMT_RGB24, |
34157 | 119 IMGFMT_GBR24P, |
34923
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
120 IMGFMT_GBR12PLE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
121 IMGFMT_GBR12PBE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
122 IMGFMT_GBR14PLE, |
eb76937af57e
Support FFmpeg pix_fmts YUV4xxP12*, YUV4xxP14*, GBR12P* and GBR14P*.
cehoyos
parents:
34805
diff
changeset
|
123 IMGFMT_GBR14PBE, |
29901
801650929968
Allow vf_scale to output to RGB48, though still prefer the 24 and 32 bit formats.
reimar
parents:
29444
diff
changeset
|
124 IMGFMT_RGB48LE, |
801650929968
Allow vf_scale to output to RGB48, though still prefer the 24 and 32 bit formats.
reimar
parents:
29444
diff
changeset
|
125 IMGFMT_RGB48BE, |
5523 | 126 IMGFMT_BGR16, |
7403 | 127 IMGFMT_RGB16, |
5523 | 128 IMGFMT_BGR15, |
7403 | 129 IMGFMT_RGB15, |
31082
92f88bb315c5
Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents:
30959
diff
changeset
|
130 IMGFMT_BGR12, |
92f88bb315c5
Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents:
30959
diff
changeset
|
131 IMGFMT_RGB12, |
12475
16e673350486
give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents:
12260
diff
changeset
|
132 IMGFMT_Y800, |
16e673350486
give Y8 and Y800 lower conversion priority to avoid grayscaled video
reimar
parents:
12260
diff
changeset
|
133 IMGFMT_Y8, |
34932
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
134 IMGFMT_Y8A, |
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
135 IMGFMT_Y16_LE, |
19212dea7a97
Add missing aequivalents for PIX_FMT_GRAY8A and PIX_FMT_GRAY16*.
cehoyos
parents:
34923
diff
changeset
|
136 IMGFMT_Y16_BE, |
6637 | 137 IMGFMT_BGR8, |
7403 | 138 IMGFMT_RGB8, |
6637 | 139 IMGFMT_BGR4, |
7403 | 140 IMGFMT_RGB4, |
9171 | 141 IMGFMT_BG4B, |
142 IMGFMT_RG4B, | |
6637 | 143 IMGFMT_BGR1, |
144 IMGFMT_RGB1, | |
6188 | 145 0 |
5523 | 146 }; |
147 | |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
148 /** |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
149 * A list of preferred conversions, in order of preference. |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
150 * This should be used for conversions that e.g. involve no scaling |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
151 * or to stop vf_scale from choosing a conversion that has no |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
152 * fast assembler implementation. |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
153 */ |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
154 static int preferred_conversions[][2] = { |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
155 {IMGFMT_YUY2, IMGFMT_UYVY}, |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
156 {IMGFMT_YUY2, IMGFMT_422P}, |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
157 {IMGFMT_UYVY, IMGFMT_YUY2}, |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
158 {IMGFMT_UYVY, IMGFMT_422P}, |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
159 {IMGFMT_422P, IMGFMT_YUY2}, |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
160 {IMGFMT_422P, IMGFMT_UYVY}, |
34229
07cba774abf9
Prefer converting GBR24P to other 8 bit per component RGB formats.
reimar
parents:
34189
diff
changeset
|
161 {IMGFMT_GBR24P, IMGFMT_BGR24}, |
07cba774abf9
Prefer converting GBR24P to other 8 bit per component RGB formats.
reimar
parents:
34189
diff
changeset
|
162 {IMGFMT_GBR24P, IMGFMT_RGB24}, |
07cba774abf9
Prefer converting GBR24P to other 8 bit per component RGB formats.
reimar
parents:
34189
diff
changeset
|
163 {IMGFMT_GBR24P, IMGFMT_BGR32}, |
07cba774abf9
Prefer converting GBR24P to other 8 bit per component RGB formats.
reimar
parents:
34189
diff
changeset
|
164 {IMGFMT_GBR24P, IMGFMT_RGB32}, |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
165 {0, 0} |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
166 }; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
167 |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
168 static unsigned int find_best_out(vf_instance_t *vf, int in_format){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
169 unsigned int best=0; |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
170 int i = -1; |
34982
df138f843ebc
Prefer converting 9/10 bit formats to 16 bit, this is a simple left-shift.
reimar
parents:
34932
diff
changeset
|
171 int normalized_format = normalize_yuvp16(in_format); |
df138f843ebc
Prefer converting 9/10 bit formats to 16 bit, this is a simple left-shift.
reimar
parents:
34932
diff
changeset
|
172 int j = normalized_format ? -2 : -1; |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
173 int format = 0; |
11373
3b9f8ee18ff9
another lame workaround for the g1 filter layer ...
michael
parents:
11069
diff
changeset
|
174 |
5523 | 175 // find the best outfmt: |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
176 while (1) { |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
177 int ret; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
178 if (j < 0) { |
34982
df138f843ebc
Prefer converting 9/10 bit formats to 16 bit, this is a simple left-shift.
reimar
parents:
34932
diff
changeset
|
179 format = j == -1 && normalized_format ? normalized_format : in_format; |
df138f843ebc
Prefer converting 9/10 bit formats to 16 bit, this is a simple left-shift.
reimar
parents:
34932
diff
changeset
|
180 j++; |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
181 } else if (i < 0) { |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
182 while (preferred_conversions[j][0] && |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
183 preferred_conversions[j][0] != in_format) |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
184 j++; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
185 format = preferred_conversions[j++][1]; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
186 // switch to standard list |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
187 if (!format) |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
188 i = 0; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
189 } |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
190 if (i >= 0) |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
191 format = outfmt_list[i++]; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
192 if (!format) |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
193 break; |
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
194 ret = vf_next_query_format(vf, format); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
195 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
196 mp_msg(MSGT_VFILTER,MSGL_DBG2,"scale: query(%s) -> %d\n",vo_format_name(format),ret&3); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
197 if(ret&VFCAP_CSP_SUPPORTED_BY_HW){ |
11373
3b9f8ee18ff9
another lame workaround for the g1 filter layer ...
michael
parents:
11069
diff
changeset
|
198 best=format; // no conversion -> bingo! |
3b9f8ee18ff9
another lame workaround for the g1 filter layer ...
michael
parents:
11069
diff
changeset
|
199 break; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
200 } |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
201 if(ret&VFCAP_CSP_SUPPORTED && !best) |
11373
3b9f8ee18ff9
another lame workaround for the g1 filter layer ...
michael
parents:
11069
diff
changeset
|
202 best=format; // best with conversion |
5523 | 203 } |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
204 return best; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
205 } |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
206 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
207 static int config(struct vf_instance *vf, |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
208 int width, int height, int d_width, int d_height, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
209 unsigned int flags, unsigned int outfmt){ |
30367
2db4c1158df9
Make the scale filter prefer yuv conversions that do not need chroma scaling.
reimar
parents:
30366
diff
changeset
|
210 unsigned int best=find_best_out(vf, outfmt); |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
211 int vo_flags; |
6542
7af3fcd76d2d
support dropping some chroma src lines for a bit extra speed
michael
parents:
6536
diff
changeset
|
212 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
|
213 int round_w=0, round_h=0; |
26703 | 214 int i; |
6542
7af3fcd76d2d
support dropping some chroma src lines for a bit extra speed
michael
parents:
6536
diff
changeset
|
215 SwsFilter *srcFilter, *dstFilter; |
35707
4ba6b8d3197e
Replace PixelFormat and PIX_FMT_FOO by their AV_-prefixed counterparts.
diego
parents:
35598
diff
changeset
|
216 enum AVPixelFormat dfmt, sfmt; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
217 |
5523 | 218 if(!best){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
219 mp_msg(MSGT_VFILTER,MSGL_WARN,"SwScale: no supported outfmt found :(\n"); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
220 return 0; |
5523 | 221 } |
19870
1e5cf11e8b1f
Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents:
19520
diff
changeset
|
222 sfmt = imgfmt2pixfmt(outfmt); |
35598 | 223 if (outfmt == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8; |
19870
1e5cf11e8b1f
Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents:
19520
diff
changeset
|
224 dfmt = imgfmt2pixfmt(best); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
225 |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
226 vo_flags=vf->next->query_format(vf->next,best); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
227 |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
228 // scaling to dwidth*d_height, if all these TRUE: |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
229 // - option -zoom |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
230 // - no other sw/hw up/down scaling avail. |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
231 // - we're after postproc |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
232 // - user didn't set w:h |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
233 if(!(vo_flags&VFCAP_POSTPROC) && (flags&4) && |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
234 vf->priv->w<0 && vf->priv->h<0){ // -zoom |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
235 int x=(vo_flags&VFCAP_SWSCALE) ? 0 : 1; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
236 if(d_width<width || d_height<height){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
237 // downscale! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
238 if(vo_flags&VFCAP_HWSCALE_DOWN) x=0; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
239 } else { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
240 // upscale: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
241 if(vo_flags&VFCAP_HWSCALE_UP) x=0; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
242 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
243 if(x){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
244 // user wants sw scaling! (-zoom) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
245 vf->priv->w=d_width; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
246 vf->priv->h=d_height; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
247 } |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5527
diff
changeset
|
248 } |
5523 | 249 |
17646
168d8eb397f1
no upscale flag so automatic downscaling is possible in mencoder
michael
parents:
17566
diff
changeset
|
250 if(vf->priv->noup){ |
17674
0f314c38ce57
10l (dont limit dimension components independantly if noup)
michael
parents:
17646
diff
changeset
|
251 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
|
252 vf->priv->w= width; |
168d8eb397f1
no upscale flag so automatic downscaling is possible in mencoder
michael
parents:
17566
diff
changeset
|
253 vf->priv->h= height; |
17674
0f314c38ce57
10l (dont limit dimension components independantly if noup)
michael
parents:
17646
diff
changeset
|
254 } |
17646
168d8eb397f1
no upscale flag so automatic downscaling is possible in mencoder
michael
parents:
17566
diff
changeset
|
255 } |
168d8eb397f1
no upscale flag so automatic downscaling is possible in mencoder
michael
parents:
17566
diff
changeset
|
256 |
17215 | 257 if (vf->priv->w <= -8) { |
258 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
|
259 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
|
260 } |
17215 | 261 if (vf->priv->h <= -8) { |
262 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
|
263 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
|
264 } |
7f386d84805f
subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents:
14715
diff
changeset
|
265 |
13925
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
266 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
|
267 (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
|
268 // 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
|
269 // 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
|
270 // with this nonsense. |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
271 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
|
272 return 0; |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
273 } |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
274 |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
275 if (vf->priv->w == -1) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
276 vf->priv->w = width; |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
277 if (vf->priv->w == 0) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
278 vf->priv->w = d_width; |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
279 |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
280 if (vf->priv->h == -1) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
281 vf->priv->h = height; |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
282 if (vf->priv->h == 0) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
283 vf->priv->h = d_height; |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
284 |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
285 if (vf->priv->w == -3) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
286 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
|
287 if (vf->priv->w == -2) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
288 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
|
289 |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
290 if (vf->priv->h == -3) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
291 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
|
292 if (vf->priv->h == -2) |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
293 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
|
294 |
14924
7f386d84805f
subtracting 8 from negative w and h rounds the dimension to the closest multiple of 16
nicodvb
parents:
14715
diff
changeset
|
295 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
|
296 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
|
297 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
|
298 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
|
299 |
5522 | 300 // calculate the missing parameters: |
6746
0e2b14e606ac
Round height or width to valid values when doing automatic calculation.
kmkaplan
parents:
6708
diff
changeset
|
301 switch(best) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
302 case IMGFMT_YV12: /* YV12 needs w & h rounded to 2 */ |
11069 | 303 case IMGFMT_I420: |
304 case IMGFMT_IYUV: | |
14715 | 305 case IMGFMT_NV12: |
306 case IMGFMT_NV21: | |
13925
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
307 vf->priv->h = (vf->priv->h + 1) & ~1; |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
308 case IMGFMT_YUY2: /* YUY2 needs w rounded to 2 */ |
13925
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
309 case IMGFMT_UYVY: |
72f8a761e714
fix for negative values for width and height (aspect-preserving scaling).
reimar
parents:
13373
diff
changeset
|
310 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
|
311 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
312 |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6126
diff
changeset
|
313 mp_msg(MSGT_VFILTER,MSGL_DBG2,"SwScale: scaling %dx%d %s to %dx%d %s \n", |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
314 width,height,vo_format_name(outfmt), |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
315 vf->priv->w,vf->priv->h,vo_format_name(best)); |
5526 | 316 |
317 // free old ctx: | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9491
diff
changeset
|
318 if(vf->priv->ctx) sws_freeContext(vf->priv->ctx); |
11700 | 319 if(vf->priv->ctx2)sws_freeContext(vf->priv->ctx2); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
320 |
5522 | 321 // new swscaler: |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9491
diff
changeset
|
322 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
|
323 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
|
324 int_sws_flags|= vf->priv->accurate_rnd * SWS_ACCURATE_RND; |
11700 | 325 vf->priv->ctx=sws_getContext(width, height >> vf->priv->interlaced, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
326 sfmt, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
327 vf->priv->w, vf->priv->h >> vf->priv->interlaced, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
328 dfmt, |
33415
53073a44a899
Fix build after removal of SWS_CPU_CAPS_* from libswscale in FFmpeg.
iive
parents:
33364
diff
changeset
|
329 int_sws_flags, srcFilter, dstFilter, vf->priv->param); |
11700 | 330 if(vf->priv->interlaced){ |
331 vf->priv->ctx2=sws_getContext(width, height >> 1, | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
332 sfmt, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
333 vf->priv->w, vf->priv->h >> 1, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
334 dfmt, |
33415
53073a44a899
Fix build after removal of SWS_CPU_CAPS_* from libswscale in FFmpeg.
iive
parents:
33364
diff
changeset
|
335 int_sws_flags, srcFilter, dstFilter, vf->priv->param); |
11700 | 336 } |
5522 | 337 if(!vf->priv->ctx){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
338 // error... |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
339 mp_msg(MSGT_VFILTER,MSGL_WARN,"Couldn't init SwScaler for this setup\n"); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
340 return 0; |
5522 | 341 } |
5523 | 342 vf->priv->fmt=best; |
6060 | 343 |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32489
diff
changeset
|
344 free(vf->priv->palette); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32489
diff
changeset
|
345 vf->priv->palette=NULL; |
7783 | 346 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
|
347 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
|
348 /* set 332 palette for 8 bpp */ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
349 vf->priv->palette=malloc(4*256); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
350 for(i=0; i<256; i++){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
351 vf->priv->palette[4*i+0]=4*(i>>6)*21; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
352 vf->priv->palette[4*i+1]=4*((i>>3)&7)*9; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
353 vf->priv->palette[4*i+2]=4*((i&7)&7)*9; |
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
|
354 vf->priv->palette[4*i+3]=0; |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
355 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
356 break; } |
7783 | 357 case IMGFMT_BGR8: { |
358 /* set 332 palette for 8 bpp */ | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
359 vf->priv->palette=malloc(4*256); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
360 for(i=0; i<256; i++){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
361 vf->priv->palette[4*i+0]=4*(i&3)*21; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
362 vf->priv->palette[4*i+1]=4*((i>>2)&7)*9; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
363 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
|
364 vf->priv->palette[4*i+3]=0; |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
365 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
366 break; } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
367 case IMGFMT_BGR4: |
9171 | 368 case IMGFMT_BG4B: { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
369 vf->priv->palette=malloc(4*16); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
370 for(i=0; i<16; i++){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
371 vf->priv->palette[4*i+0]=4*(i&1)*63; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
372 vf->priv->palette[4*i+1]=4*((i>>1)&3)*21; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
373 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
|
374 vf->priv->palette[4*i+3]=0; |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
375 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
376 break; } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
377 case IMGFMT_RGB4: |
22227
cec1eb5be9e4
palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents:
22225
diff
changeset
|
378 case IMGFMT_RG4B: { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
379 vf->priv->palette=malloc(4*16); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
380 for(i=0; i<16; i++){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
381 vf->priv->palette[4*i+0]=4*(i>>3)*63; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
382 vf->priv->palette[4*i+1]=4*((i>>1)&3)*21; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
383 vf->priv->palette[4*i+2]=4*((i&1)&1)*63; |
22227
cec1eb5be9e4
palette init code for IMGFMT_RGB4 and IMGFMT_RG4B
michael
parents:
22225
diff
changeset
|
384 vf->priv->palette[4*i+3]=0; |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
385 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
386 break; } |
7783 | 387 } |
388 | |
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
|
389 if(!opt_screen_size_x && !opt_screen_size_y && !(screen_size_xy >= 0.001)){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
390 // Compute new d_width and d_height, preserving aspect |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
391 // while ensuring that both are >= output size in pixels. |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
392 if (vf->priv->h * d_width > vf->priv->w * d_height) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
393 d_width = vf->priv->h * d_width / d_height; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
394 d_height = vf->priv->h; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
395 } else { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
396 d_height = vf->priv->w * d_height / d_width; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
397 d_width = vf->priv->w; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
398 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
399 //d_width=d_width*vf->priv->w/width; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
400 //d_height=d_height*vf->priv->h/height; |
6060 | 401 } |
5525 | 402 return vf_next_config(vf,vf->priv->w,vf->priv->h,d_width,d_height,flags,best); |
5522 | 403 } |
404 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
405 static void start_slice(struct vf_instance *vf, mp_image_t *mpi){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
406 // printf("start_slice called! flag=%d\n",mpi->flags&MP_IMGFLAG_DRAW_CALLBACK); |
9491 | 407 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) return; // shouldn't happen |
408 // they want slices!!! allocate the buffer. | |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10022
diff
changeset
|
409 mpi->priv=vf->dmpi=vf_get_image(vf->next,vf->priv->fmt, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
410 // mpi->type, mpi->flags & (~MP_IMGFLAG_DRAW_CALLBACK), |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
411 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
412 vf->priv->w, vf->priv->h); |
9491 | 413 } |
414 | |
29064
67c256364220
Consistently use MP_MAX_PLANES as size for plane pointer/stride arrays in libmpcodecs.
reimar
parents:
28299
diff
changeset
|
415 static void scale(struct SwsContext *sws1, struct SwsContext *sws2, uint8_t *src[MP_MAX_PLANES], int src_stride[MP_MAX_PLANES], |
67c256364220
Consistently use MP_MAX_PLANES as size for plane pointer/stride arrays in libmpcodecs.
reimar
parents:
28299
diff
changeset
|
416 int y, int h, uint8_t *dst[MP_MAX_PLANES], int dst_stride[MP_MAX_PLANES], int interlaced){ |
30116
f2d9ce0a6b28
Also pass alpha plane to swscale, avoids crashes when converting between
reimar
parents:
30115
diff
changeset
|
417 uint8_t *src2[MP_MAX_PLANES]={src[0], src[1], src[2], src[3]}; |
29401
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29263
diff
changeset
|
418 #if HAVE_BIGENDIAN |
22228 | 419 uint32_t pal2[256]; |
420 if (src[1] && !src[2]){ | |
421 int i; | |
422 for(i=0; i<256; i++) | |
423 pal2[i]= bswap_32(((uint32_t*)src[1])[i]); | |
424 src2[1]= pal2; | |
425 } | |
426 #endif | |
427 | |
11700 | 428 if(interlaced){ |
429 int i; | |
30116
f2d9ce0a6b28
Also pass alpha plane to swscale, avoids crashes when converting between
reimar
parents:
30115
diff
changeset
|
430 uint8_t *dst2[MP_MAX_PLANES]={dst[0], dst[1], dst[2], dst[3]}; |
f2d9ce0a6b28
Also pass alpha plane to swscale, avoids crashes when converting between
reimar
parents:
30115
diff
changeset
|
431 int src_stride2[MP_MAX_PLANES]={2*src_stride[0], 2*src_stride[1], 2*src_stride[2], 2*src_stride[3]}; |
f2d9ce0a6b28
Also pass alpha plane to swscale, avoids crashes when converting between
reimar
parents:
30115
diff
changeset
|
432 int dst_stride2[MP_MAX_PLANES]={2*dst_stride[0], 2*dst_stride[1], 2*dst_stride[2], 2*dst_stride[3]}; |
11700 | 433 |
30150
16c71b965952
Replace deprecated sws_scale_ordered usages by sws_scale (which does the same).
reimar
parents:
30117
diff
changeset
|
434 sws_scale(sws1, src2, src_stride2, y>>1, h>>1, dst2, dst_stride2); |
30117 | 435 for(i=0; i<MP_MAX_PLANES; i++){ |
11700 | 436 src2[i] += src_stride[i]; |
437 dst2[i] += dst_stride[i]; | |
438 } | |
30150
16c71b965952
Replace deprecated sws_scale_ordered usages by sws_scale (which does the same).
reimar
parents:
30117
diff
changeset
|
439 sws_scale(sws2, src2, src_stride2, y>>1, h>>1, dst2, dst_stride2); |
11700 | 440 }else{ |
30150
16c71b965952
Replace deprecated sws_scale_ordered usages by sws_scale (which does the same).
reimar
parents:
30117
diff
changeset
|
441 sws_scale(sws1, src2, src_stride, y, h, dst, dst_stride); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
442 } |
11700 | 443 } |
444 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
445 static void draw_slice(struct vf_instance *vf, |
9491 | 446 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
|
447 mp_image_t *dmpi=vf->dmpi; |
9491 | 448 if(!dmpi){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
449 mp_msg(MSGT_VFILTER,MSGL_FATAL,"vf_scale: draw_slice() called with dmpi=NULL (no get_image?)\n"); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
450 return; |
9491 | 451 } |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
452 // printf("vf_scale::draw_slice() y=%d h=%d\n",y,h); |
11700 | 453 scale(vf->priv->ctx, vf->priv->ctx2, src, stride, y, h, dmpi->planes, dmpi->stride, vf->priv->interlaced); |
9491 | 454 } |
455 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
456 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ |
9491 | 457 mp_image_t *dmpi=mpi->priv; |
5522 | 458 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
459 // printf("vf_scale::put_image(): processing whole frame! dmpi=%p flag=%d\n", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
460 // dmpi, (mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
461 |
9491 | 462 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK && dmpi)){ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
463 |
5522 | 464 // hope we'll get DR buffer: |
5523 | 465 dmpi=vf_get_image(vf->next,vf->priv->fmt, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
466 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
467 vf->priv->w, vf->priv->h); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
468 |
11700 | 469 scale(vf->priv->ctx, vf->priv->ctx, mpi->planes,mpi->stride,0,mpi->h,dmpi->planes,dmpi->stride, vf->priv->interlaced); |
9491 | 470 } |
471 | |
5527 | 472 if(vf->priv->w==mpi->w && vf->priv->h==mpi->h){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
473 // just conversion, no scaling -> keep postprocessing data |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
474 // this way we can apply pp filter to non-yv12 source using scaler |
9934 | 475 vf_clone_mpi_attributes(dmpi, mpi); |
5527 | 476 } |
7783 | 477 |
478 if(vf->priv->palette) dmpi->planes[1]=vf->priv->palette; // export palette! | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
479 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17674
diff
changeset
|
480 return vf_next_put_image(vf,dmpi, pts); |
5522 | 481 } |
482 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
483 static int control(struct vf_instance *vf, int request, void* data){ |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
484 int *table; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
485 int *inv_table; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
486 int r; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
487 int brightness, contrast, saturation, srcRange, dstRange; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
488 vf_equalizer_t *eq; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
489 |
10632 | 490 if(vf->priv->ctx) |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
491 switch(request){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
492 case VFCTRL_GET_EQUALIZER: |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
493 r= sws_getColorspaceDetails(vf->priv->ctx, &inv_table, &srcRange, &table, &dstRange, &brightness, &contrast, &saturation); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
494 if(r<0) break; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
495 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
496 eq = data; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
497 if (!strcmp(eq->item,"brightness")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
498 eq->value = ((brightness*100) + (1<<15))>>16; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
499 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
500 else if (!strcmp(eq->item,"contrast")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
501 eq->value = (((contrast *100) + (1<<15))>>16) - 100; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
502 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
503 else if (!strcmp(eq->item,"saturation")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
504 eq->value = (((saturation*100) + (1<<15))>>16) - 100; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
505 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
506 else |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
507 break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
508 return CONTROL_TRUE; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
509 case VFCTRL_SET_EQUALIZER: |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
510 r= sws_getColorspaceDetails(vf->priv->ctx, &inv_table, &srcRange, &table, &dstRange, &brightness, &contrast, &saturation); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
511 if(r<0) break; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
512 //printf("set %f %f %f\n", brightness/(float)(1<<16), contrast/(float)(1<<16), saturation/(float)(1<<16)); |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
513 eq = data; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
514 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
515 if (!strcmp(eq->item,"brightness")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
516 brightness = (( eq->value <<16) + 50)/100; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
517 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
518 else if (!strcmp(eq->item,"contrast")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
519 contrast = (((eq->value+100)<<16) + 50)/100; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
520 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
521 else if (!strcmp(eq->item,"saturation")) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
522 saturation = (((eq->value+100)<<16) + 50)/100; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
523 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
524 else |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
525 break; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
526 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
527 r= sws_setColorspaceDetails(vf->priv->ctx, inv_table, srcRange, table, dstRange, brightness, contrast, saturation); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
528 if(r<0) break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
529 if(vf->priv->ctx2){ |
11700 | 530 r= sws_setColorspaceDetails(vf->priv->ctx2, inv_table, srcRange, table, dstRange, brightness, contrast, saturation); |
531 if(r<0) break; | |
532 } | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
533 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
534 return CONTROL_TRUE; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
535 default: |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
536 break; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
537 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
538 |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
539 return vf_next_control(vf,request,data); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
540 } |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
541 |
5522 | 542 //===========================================================================// |
543 | |
9071 | 544 // supported Input formats: YV12, I420, IYUV, YUY2, UYVY, BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8, Y800 |
5523 | 545 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
546 static int query_format(struct vf_instance *vf, unsigned int fmt){ |
32489
d5dfda231e76
Make scale filter accept all non-hardware-acceleration input formats we know a
reimar
parents:
31082
diff
changeset
|
547 if (!IMGFMT_IS_HWACCEL(fmt) && imgfmt2pixfmt(fmt) != PIX_FMT_NONE) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
548 unsigned int best=find_best_out(vf, fmt); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
549 int flags; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
550 if(!best) return 0; // no matching out-fmt |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
551 flags=vf_next_query_format(vf,best); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
552 if(!(flags&(VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW))) return 0; // huh? |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
553 if(fmt!=best) flags&=~VFCAP_CSP_SUPPORTED_BY_HW; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
554 // do not allow scaling, if we are before the PP fliter! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
555 if(!(flags&VFCAP_POSTPROC)) flags|=VFCAP_SWSCALE; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
556 return flags; |
5523 | 557 } |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
558 return 0; // nomatching in-fmt |
5523 | 559 } |
560 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
561 static void uninit(struct vf_instance *vf){ |
11537 | 562 if(vf->priv->ctx) sws_freeContext(vf->priv->ctx); |
11700 | 563 if(vf->priv->ctx2) sws_freeContext(vf->priv->ctx2); |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32489
diff
changeset
|
564 free(vf->priv->palette); |
11537 | 565 free(vf->priv); |
566 } | |
567 | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30421
diff
changeset
|
568 static int vf_open(vf_instance_t *vf, char *args){ |
5522 | 569 vf->config=config; |
9491 | 570 vf->start_slice=start_slice; |
571 vf->draw_slice=draw_slice; | |
5522 | 572 vf->put_image=put_image; |
5526 | 573 vf->query_format=query_format; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9276
diff
changeset
|
574 vf->control= control; |
11537 | 575 vf->uninit=uninit; |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6126
diff
changeset
|
576 mp_msg(MSGT_VFILTER,MSGL_V,"SwScale params: %d x %d (-1=no scaling)\n", |
5522 | 577 vf->priv->w, |
578 vf->priv->h); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
579 |
5522 | 580 return 1; |
581 } | |
582 | |
9975 | 583 //global sws_flags from the command line |
584 int sws_flags=2; | |
585 | |
586 //global srcFilter | |
9985
3d8b145a5470
moving getFilter stuff back (vf_scale.c -> swscale.c)
michael
parents:
9975
diff
changeset
|
587 static SwsFilter *src_filter= NULL; |
9975 | 588 |
589 float sws_lum_gblur= 0.0; | |
590 float sws_chr_gblur= 0.0; | |
591 int sws_chr_vshift= 0; | |
592 int sws_chr_hshift= 0; | |
593 float sws_chr_sharpen= 0.0; | |
594 float sws_lum_sharpen= 0.0; | |
595 | |
596 | |
597 void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam) | |
598 { | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
599 static int firstTime=1; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
600 *flags=0; |
9975 | 601 |
28290 | 602 #if ARCH_X86 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
603 if(gCpuCaps.hasMMX) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
604 __asm__ volatile("emms\n\t"::: "memory"); //FIXME this should not be required but it IS (even for non-MMX versions) |
9975 | 605 #endif |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
606 if(firstTime) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
607 { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
608 firstTime=0; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
609 *flags= SWS_PRINT_INFO; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
610 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
611 else if( mp_msg_test(MSGT_VFILTER,MSGL_DBG2) ) *flags= SWS_PRINT_INFO; |
9975 | 612 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
613 if(src_filter) sws_freeFilter(src_filter); |
9975 | 614 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
615 src_filter= sws_getDefaultFilter( |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
616 sws_lum_gblur, sws_chr_gblur, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
617 sws_lum_sharpen, sws_chr_sharpen, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
618 sws_chr_hshift, sws_chr_vshift, verbose>1); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
619 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
620 switch(sws_flags) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
621 { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
622 case 0: *flags|= SWS_FAST_BILINEAR; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
623 case 1: *flags|= SWS_BILINEAR; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
624 case 2: *flags|= SWS_BICUBIC; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
625 case 3: *flags|= SWS_X; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
626 case 4: *flags|= SWS_POINT; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
627 case 5: *flags|= SWS_AREA; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
628 case 6: *flags|= SWS_BICUBLIN; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
629 case 7: *flags|= SWS_GAUSS; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
630 case 8: *flags|= SWS_SINC; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
631 case 9: *flags|= SWS_LANCZOS; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
632 case 10:*flags|= SWS_SPLINE; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
633 default:*flags|= SWS_BILINEAR; break; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
634 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29064
diff
changeset
|
635 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
636 *srcFilterParam= src_filter; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
637 *dstFilterParam= NULL; |
9975 | 638 } |
639 | |
640 // will use sws_flags & src_filter (from cmd line) | |
641 struct SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat) | |
642 { | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
643 int flags; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
644 SwsFilter *dstFilterParam, *srcFilterParam; |
35707
4ba6b8d3197e
Replace PixelFormat and PIX_FMT_FOO by their AV_-prefixed counterparts.
diego
parents:
35598
diff
changeset
|
645 enum AVPixelFormat dfmt, sfmt; |
19870
1e5cf11e8b1f
Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents:
19520
diff
changeset
|
646 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
647 dfmt = imgfmt2pixfmt(dstFormat); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
648 sfmt = imgfmt2pixfmt(srcFormat); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
649 if (srcFormat == IMGFMT_RGB8 || srcFormat == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32537
diff
changeset
|
650 sws_getFlagsAndFilterFromCmdLine(&flags, &srcFilterParam, &dstFilterParam); |
9975 | 651 |
33415
53073a44a899
Fix build after removal of SWS_CPU_CAPS_* from libswscale in FFmpeg.
iive
parents:
33364
diff
changeset
|
652 return sws_getContext(srcW, srcH, sfmt, dstW, dstH, dfmt, flags, srcFilterParam, dstFilterParam, NULL); |
9975 | 653 } |
654 | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
655 /// An example of presets usage |
30662 | 656 static const struct size_preset { |
36765 | 657 const char* name; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
658 int w, h; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
659 } vf_size_presets_defs[] = { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
660 // TODO add more 'standard' resolutions |
10814
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
661 { "qntsc", 352, 240 }, |
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
662 { "qpal", 352, 288 }, |
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
663 { "ntsc", 720, 480 }, |
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
664 { "pal", 720, 576 }, |
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
665 { "sntsc", 640, 480 }, |
7f34ec540e0f
size presets: added the standard resolutions as proposed by Fabrice (ffmpeg)
alex
parents:
10632
diff
changeset
|
666 { "spal", 768, 576 }, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
667 { NULL, 0, 0} |
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 #define ST_OFF(f) M_ST_OFF(struct size_preset,f) |
30959
115ad4cff82f
Mark vf_size_preset_fields m_option_t array as const.
diego
parents:
30662
diff
changeset
|
671 static const m_option_t vf_size_preset_fields[] = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
672 {"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
|
673 {"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
|
674 { 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
|
675 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
676 |
30662 | 677 static const m_struct_t vf_size_preset = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
678 "scale_size_preset", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
679 sizeof(struct size_preset), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
680 NULL, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
681 vf_size_preset_fields |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
682 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
683 |
30662 | 684 static const m_struct_t vf_opts; |
685 static const m_obj_presets_t size_preset = { | |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
686 &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
|
687 &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
|
688 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
|
689 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
|
690 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
691 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
692 /// Now the options |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
693 #undef ST_OFF |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
694 #define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f) |
30662 | 695 static const 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
|
696 {"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
|
697 {"h", ST_OFF(h), CONF_TYPE_INT, M_OPT_MIN,-11,0, NULL}, |
11700 | 698 {"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
|
699 {"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
|
700 {"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
|
701 {"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
|
702 // 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
|
703 // 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
|
704 {"presize", 0, CONF_TYPE_OBJ_PRESETS, 0, 0, 0, &size_preset}, |
19520 | 705 {"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
|
706 {"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
|
707 { 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
|
708 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
709 |
30662 | 710 static const m_struct_t vf_opts = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
711 "scale", |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
712 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
|
713 &vf_priv_dflt, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
714 vf_opts_fields |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
715 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
716 |
25221 | 717 const vf_info_t vf_info_scale = { |
5522 | 718 "software scaling", |
719 "scale", | |
720 "A'rpi", | |
721 "", | |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30421
diff
changeset
|
722 vf_open, |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9494
diff
changeset
|
723 &vf_opts |
5522 | 724 }; |
725 | |
726 //===========================================================================// |