annotate libmpcodecs/vf_scale.c @ 35418:cedb0ba2b5c6

Move the code to set guiInfo's Track, Chapter and Angle start values. Set them before checking whether there is any media opened, because with no media opened we clear the counters.
author ib
date Thu, 29 Nov 2012 14:11:03 +0000
parents df138f843ebc
children f5f932450bce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 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
545c13161589 swscale filter
arpi
parents:
diff changeset
19 #include <stdio.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
20 #include <stdlib.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
21 #include <string.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
22 #include <inttypes.h>
545c13161589 swscale filter
arpi
parents:
diff changeset
23
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
24 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
25 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 15537
diff changeset
26 #include "cpudetect.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
27
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
28 #include "img_format.h"
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
29 #include "mp_image.h"
30653
3d23e24c5c60 Declare externally used variables from vd.c as extern in vd.h.
diego
parents: 30642
diff changeset
30 #include "vd.h"
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
34
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents: 17932
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
47 struct SwsContext *ctx2; //for interlaced slices only
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
48 unsigned char* palette;
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
0b262e00bc99 Mark m_struct_t defaults as const
reimar
parents: 19870
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
60 };
545c13161589 swscale filter
arpi
parents:
diff changeset
61
545c13161589 swscale filter
arpi
parents:
diff changeset
62 //===========================================================================//
545c13161589 swscale filter
arpi
parents:
diff changeset
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
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
cf2a4f4cac0e Add 444P10 support.
cehoyos
parents: 33415
diff changeset
75 IMGFMT_444P10_LE,
cf2a4f4cac0e Add 444P10 support.
cehoyos
parents: 33415
diff changeset
76 IMGFMT_444P10_BE,
34189
4b5f57ccfff1 Support YUV 4:4:4 9-bit output.
cehoyos
parents: 34157
diff changeset
77 IMGFMT_444P9_LE,
4b5f57ccfff1 Support YUV 4:4:4 9-bit output.
cehoyos
parents: 34157
diff changeset
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
8a96cf601e57 Add support for 422P9.
reimar
parents: 34229
diff changeset
88 IMGFMT_422P9_LE,
8a96cf601e57 Add support for 422P9.
reimar
parents: 34229
diff changeset
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
25acb5f98cb4 Support v408 and AYUV decoding via FFmpeg.
cehoyos
parents: 34436
diff changeset
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
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
109 IMGFMT_NV12,
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
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
c09822f4f611 Support 440P in scale filter.
reimar
parents: 29903
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
115 IMGFMT_BGR32,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
116 IMGFMT_RGB32,
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
117 IMGFMT_BGR24,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
118 IMGFMT_RGB24,
34157
ab178e06077e Support planar GBR24 decoding.
cehoyos
parents: 34028
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
126 IMGFMT_BGR16,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
127 IMGFMT_RGB16,
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
128 IMGFMT_BGR15,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
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
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
137 IMGFMT_BGR8,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
138 IMGFMT_RGB8,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
139 IMGFMT_BGR4,
7403
7d6d73150c6c out formats reordered, quality order
arpi
parents: 7368
diff changeset
140 IMGFMT_RGB4,
9171
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
141 IMGFMT_BG4B,
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
142 IMGFMT_RG4B,
6637
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
143 IMGFMT_BGR1,
f47f12ba3b88 more scaling algos
michael
parents: 6542
diff changeset
144 IMGFMT_RGB1,
6188
39a9515c633a warning fixes, patch by Ulrich Hecht <uli@suse.de>
arpi
parents: 6138
diff changeset
145 0
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
146 };
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
d62192604c6d Factorize "int i".
michael
parents: 26542
diff changeset
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;
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
216 enum PixelFormat dfmt, sfmt;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29064
diff changeset
217
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
221 }
19870
1e5cf11e8b1f Use PIX_FMT_* instead of IMGFMT_* when calling sws_getContext()
lucabe
parents: 19520
diff changeset
222 sfmt = imgfmt2pixfmt(outfmt);
23478
8fae00da2059 RGB8/BGR8 IMGFMTs are paletted in case of swscale input.
reimar
parents: 23373
diff changeset
223 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
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
257 if (vf->priv->w <= -8) {
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
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
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
261 if (vf->priv->h <= -8) {
73ed22ef2035 deobfuscate some very simple code...
ods15
parents: 17012
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
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
71d1a2815e16 some missing formats
alex
parents: 11068
diff changeset
303 case IMGFMT_I420:
71d1a2815e16 some missing formats
alex
parents: 11068
diff changeset
304 case IMGFMT_IYUV:
14715
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
305 case IMGFMT_NV12:
1fab95e4513c Improved NV12/NV21 support.
syrjala
parents: 13925
diff changeset
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
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
316
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
330 if(vf->priv->interlaced){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
336 }
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
341 }
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
342 vf->priv->fmt=best;
6060
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
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
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
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
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
357 case IMGFMT_BGR8: {
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
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
898e5270a46e fixing rgb4 & bgr4 (2 pixels per byte)
michael
parents: 9071
diff changeset
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
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
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
61f39b98ba4d keep aspect ratio - based on Fredrik Kuivinen's idea
arpi
parents: 6003
diff changeset
401 }
5525
arpi
parents: 5523
diff changeset
402 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
403 }
545c13161589 swscale filter
arpi
parents:
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
407 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)) return; // shouldn't happen
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
413 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
419 uint32_t pal2[256];
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
420 if (src[1] && !src[2]){
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
421 int i;
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
422 for(i=0; i<256; i++)
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
423 pal2[i]= bswap_32(((uint32_t*)src[1])[i]);
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
424 src2[1]= pal2;
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
425 }
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
426 #endif
55aeb86425cb swap palette on big endian
michael
parents: 22227
diff changeset
427
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
428 if(interlaced){
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
53e5874c33c3 One more fix for -vf scale with alpha.
reimar
parents: 30116
diff changeset
435 for(i=0; i<MP_MAX_PLANES; i++){
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
436 src2[i] += src_stride[i];
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
437 dst2[i] += dst_stride[i];
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
443 }
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
453 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
454 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
457 mp_image_t *dmpi=mpi->priv;
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
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
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
462 if(!(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK && dmpi)){
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29064
diff changeset
463
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
464 // hope we'll get DR buffer:
5523
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
469 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
470 }
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
471
5527
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
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
89da8ec89558 vf_clone_mpi_attributes()
michael
parents: 9697
diff changeset
475 vf_clone_mpi_attributes(dmpi, mpi);
5527
04c5047ead0c pp passtrough
arpi
parents: 5526
diff changeset
476 }
7783
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
477
29c059774519 exporting palette for 4/8bpp modes
arpi
parents: 7720
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
481 }
545c13161589 swscale filter
arpi
parents:
diff changeset
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
2294cbc41c34 -brightness && -vf scale fix
michael
parents: 10233
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
530 r= sws_setColorspaceDetails(vf->priv->ctx2, inv_table, srcRange, table, dstRange, brightness, contrast, saturation);
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
531 if(r<0) break;
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
542 //===========================================================================//
545c13161589 swscale filter
arpi
parents:
diff changeset
543
9071
25baacd1c650 UYVY input
michael
parents: 7783
diff changeset
544 // 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
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
559 }
8d55957fa018 colorspace conversion support
arpi
parents: 5522
diff changeset
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
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
562 if(vf->priv->ctx) sws_freeContext(vf->priv->ctx);
11700
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
565 free(vf->priv);
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
566 }
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
569 vf->config=config;
9491
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
570 vf->start_slice=start_slice;
21f7d83507ca draw_slice support
arpi
parents: 9476
diff changeset
571 vf->draw_slice=draw_slice;
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
572 vf->put_image=put_image;
5526
30679378f814 free old context, really use query_format
arpi
parents: 5525
diff changeset
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
93a76eee7657 uninit support
alex
parents: 11373
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
577 vf->priv->w,
545c13161589 swscale filter
arpi
parents:
diff changeset
578 vf->priv->h);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29064
diff changeset
579
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
580 return 1;
545c13161589 swscale filter
arpi
parents:
diff changeset
581 }
545c13161589 swscale filter
arpi
parents:
diff changeset
582
9975
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
583 //global sws_flags from the command line
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
584 int sws_flags=2;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
585
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
588
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
589 float sws_lum_gblur= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
590 float sws_chr_gblur= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
591 int sws_chr_vshift= 0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
592 int sws_chr_hshift= 0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
593 float sws_chr_sharpen= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
594 float sws_lum_sharpen= 0.0;
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
595
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
596
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
597 void sws_getFlagsAndFilterFromCmdLine(int *flags, SwsFilter **srcFilterParam, SwsFilter **dstFilterParam)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
601
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
638 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
639
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
640 // will use sws_flags & src_filter (from cmd line)
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
641 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
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;
84a45d5c1102 Remove tabs from two additional files that will be used in
cehoyos
parents: 32537
diff changeset
645 enum PixelFormat 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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
653 }
3914afe5c0a7 removing sws - global verbose var dependancy
michael
parents: 9934
diff changeset
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
656 static const struct size_preset {
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9494
diff changeset
657 char* name;
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
684 static const m_struct_t vf_opts;
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
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
272fc35fd8ee interlaced scaling
michael
parents: 11537
diff changeset
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
46fa785e9026 A value of 2 is valid for noup, too
reimar
parents: 19172
diff changeset
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
0aa7c9d45f92 Mark a bunch of video filter structures as const.
diego
parents: 30653
diff changeset
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
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 24249
diff changeset
717 const vf_info_t vf_info_scale = {
5522
545c13161589 swscale filter
arpi
parents:
diff changeset
718 "software scaling",
545c13161589 swscale filter
arpi
parents:
diff changeset
719 "scale",
545c13161589 swscale filter
arpi
parents:
diff changeset
720 "A'rpi",
545c13161589 swscale filter
arpi
parents:
diff changeset
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
545c13161589 swscale filter
arpi
parents:
diff changeset
724 };
545c13161589 swscale filter
arpi
parents:
diff changeset
725
545c13161589 swscale filter
arpi
parents:
diff changeset
726 //===========================================================================//