Mercurial > mplayer.hg
annotate libmpcodecs/vd.c @ 36892:f50427ad9ff6
Internally map item 'potmeter' onto 'hpotmeter'.
Former version of the GUI treated a potmeter very similar to a hpotmeter
(the Win32 GUI still does so) and lots of skins are solely using
potmeters instead of hpotmeters, although this doesn't make sense at
all.
The current version of the GUI is treating a potmeter differently, but
in order to not break old skins, restore the old behaviour.
For the X11/GTK GUI, a potmeter is now simply a hpotmeter with
button=NULL and (button)width=(button)height=0. For the Win32 GUI
(where skins unfortunately are handled a bit differently and things
are more complicated) a potmeter is now a hpotmeter without button
but (button)width=(widget)width and (button)height=(widget)height.
Additionally, print a legacy information, because the item 'potmeter' is
obsolete now and oughtn't be used any longer.
author | ib |
---|---|
date | Mon, 10 Mar 2014 17:32:29 +0000 |
parents | 7d4fa6681d2b |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
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:
30349
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:
30349
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:
30349
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
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:
30349
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:
30349
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:
30349
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
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:
30349
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:
30349
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:
30349
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30349
diff
changeset
|
18 |
4878 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21 #include <string.h> | |
22 | |
23 #include "config.h" | |
24 #include "mp_msg.h" | |
5075 | 25 #include "help_mp.h" |
4878 | 26 |
27 #include "codec-cfg.h" | |
28 | |
5607 | 29 #include "img_format.h" |
4878 | 30 |
22599
4faee1254928
Add explicit location for headers from the stream/ directory.
diego
parents:
21145
diff
changeset
|
31 #include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
32 #include "libmpdemux/demuxer.h" |
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
33 #include "libmpdemux/stheader.h" |
6057
31e465fda59c
various openbsd and general warning fixes - patch by Bj«Órn Sandell <biorn@dce.chalmers.se>
arpi
parents:
5925
diff
changeset
|
34 #include "dec_video.h" |
4878 | 35 |
36 #include "vd.h" | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
37 #include "vf.h" |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
38 |
30519 | 39 extern const vd_functions_t mpcodecs_vd_null; |
35155 | 40 extern const vd_functions_t mpcodecs_vd_black; |
30519 | 41 extern const vd_functions_t mpcodecs_vd_ffmpeg; |
42 extern const vd_functions_t mpcodecs_vd_theora; | |
43 extern const vd_functions_t mpcodecs_vd_dshow; | |
44 extern const vd_functions_t mpcodecs_vd_dmo; | |
45 extern const vd_functions_t mpcodecs_vd_vfw; | |
46 extern const vd_functions_t mpcodecs_vd_vfwex; | |
47 extern const vd_functions_t mpcodecs_vd_raw; | |
48 extern const vd_functions_t mpcodecs_vd_hmblck; | |
49 extern const vd_functions_t mpcodecs_vd_xanim; | |
50 extern const vd_functions_t mpcodecs_vd_mpng; | |
51 extern const vd_functions_t mpcodecs_vd_ijpg; | |
52 extern const vd_functions_t mpcodecs_vd_mtga; | |
53 extern const vd_functions_t mpcodecs_vd_sgi; | |
54 extern const vd_functions_t mpcodecs_vd_libmpeg2; | |
55 extern const vd_functions_t mpcodecs_vd_mpegpes; | |
56 extern const vd_functions_t mpcodecs_vd_zrmjpeg; | |
57 extern const vd_functions_t mpcodecs_vd_realvid; | |
58 extern const vd_functions_t mpcodecs_vd_xvid; | |
59 extern const vd_functions_t mpcodecs_vd_libdv; | |
60 extern const vd_functions_t mpcodecs_vd_lzo; | |
61 extern const vd_functions_t mpcodecs_vd_qtvideo; | |
4878 | 62 |
25876
edfe8baed49f
copy note on new demuxers and codecs to the top of the array as well to be
ivo
parents:
25872
diff
changeset
|
63 /* Please do not add any new decoders here. If you want to implement a new |
25880
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
64 * decoder, add it to libavcodec, except for wrappers around external |
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
65 * libraries and decoders requiring binary support. */ |
25876
edfe8baed49f
copy note on new demuxers and codecs to the top of the array as well to be
ivo
parents:
25872
diff
changeset
|
66 |
28826 | 67 const vd_functions_t * const mpcodecs_vd_drivers[] = { |
31170 | 68 &mpcodecs_vd_null, |
35155 | 69 &mpcodecs_vd_black, |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
31198
diff
changeset
|
70 #ifdef CONFIG_FFMPEG |
31170 | 71 &mpcodecs_vd_ffmpeg, |
4951 | 72 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
73 #ifdef CONFIG_OGGTHEORA |
31170 | 74 &mpcodecs_vd_theora, |
10095
51da0282b302
Theora demuxer/codec support, patch by David Kuehling <dvdkhlng@gmx.de>
arpi
parents:
9534
diff
changeset
|
75 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
76 #ifdef CONFIG_WIN32DLL |
31170 | 77 &mpcodecs_vd_dshow, |
78 &mpcodecs_vd_dmo, | |
79 &mpcodecs_vd_vfw, | |
80 &mpcodecs_vd_vfwex, | |
4968 | 81 #endif |
31170 | 82 &mpcodecs_vd_lzo, |
83 &mpcodecs_vd_raw, | |
84 &mpcodecs_vd_hmblck, | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
85 #ifdef CONFIG_XANIM |
31170 | 86 &mpcodecs_vd_xanim, |
4969 | 87 #endif |
27385
2113bd9c6bd9
Rename preprocessor directives related to image libraries.
diego
parents:
27370
diff
changeset
|
88 #ifdef CONFIG_PNG |
31170 | 89 &mpcodecs_vd_mpng, |
4998 | 90 #endif |
27385
2113bd9c6bd9
Rename preprocessor directives related to image libraries.
diego
parents:
27370
diff
changeset
|
91 #ifdef CONFIG_JPEG |
31170 | 92 &mpcodecs_vd_ijpg, |
5029 | 93 #endif |
31170 | 94 &mpcodecs_vd_mtga, |
95 &mpcodecs_vd_sgi, | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
96 #ifdef CONFIG_LIBMPEG2 |
31170 | 97 &mpcodecs_vd_libmpeg2, |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
98 #endif |
31170 | 99 &mpcodecs_vd_mpegpes, |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27363
diff
changeset
|
100 #ifdef CONFIG_ZR |
31170 | 101 &mpcodecs_vd_zrmjpeg, |
11386
229079491864
addition of special image formats for Zoran MJPEG, and vd_zrmjpeg.c
rik
parents:
11261
diff
changeset
|
102 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
103 #ifdef CONFIG_REALCODECS |
31170 | 104 &mpcodecs_vd_realvid, |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6234
diff
changeset
|
105 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
106 #ifdef CONFIG_XVID4 |
31170 | 107 &mpcodecs_vd_xvid, |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
108 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
109 #ifdef CONFIG_LIBDV095 |
31170 | 110 &mpcodecs_vd_libdv, |
6927 | 111 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
112 #ifdef CONFIG_QTX_CODECS |
31170 | 113 &mpcodecs_vd_qtvideo, |
8160 | 114 #endif |
25872
3eeaf9d4c65a
note on new demuxers and codecs, add them to lav* instead of libmp*
ivo
parents:
25597
diff
changeset
|
115 /* Please do not add any new decoders here. If you want to implement a new |
25880
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
116 * decoder, add it to libavcodec, except for wrappers around external |
4df11ac927fc
clarify comments/docs about lav* being the preferred place to implement new
ivo
parents:
25876
diff
changeset
|
117 * libraries and decoders requiring binary support. */ |
31170 | 118 NULL |
4878 | 119 }; |
120 | |
4971 | 121 #include "libvo/video_out.h" |
122 | |
5075 | 123 // libvo opts: |
31170 | 124 int fullscreen = 0; |
125 int vidmode = 0; | |
126 int softzoom = 0; | |
127 int flip = -1; | |
128 int opt_screen_size_x = 0; | |
129 int opt_screen_size_y = 0; | |
130 float screen_size_xy = 0; | |
131 float movie_aspect = -1.0; | |
132 int vo_flags = 0; | |
33032
dba2e7218893
Disable the combination of slices and multithreaded decode by default, it
reimar
parents:
32142
diff
changeset
|
133 int vd_use_slices = -1; |
5075 | 134 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
135 /** global variables for gamma, brightness, contrast, saturation and hue |
23077 | 136 modified by mplayer.c and gui/mplayer/gtk/eq.c: |
13341
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
137 ranges -100 - 100 |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
138 1000 if the vo default should be used |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
139 */ |
13341
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
140 int vo_gamma_gamma = 1000; |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
141 int vo_gamma_brightness = 1000; |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
142 int vo_gamma_contrast = 1000; |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
143 int vo_gamma_saturation = 1000; |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
144 int vo_gamma_hue = 1000; |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
145 |
31170 | 146 extern const vd_functions_t *mpvdec; // FIXME! |
5180 | 147 |
27751
d120b2951b37
Move SCREEN_SIZE_X/Y definition to libmpcodecs/vd.c where it is used.
diego
parents:
27385
diff
changeset
|
148 #define SCREEN_SIZE_X 1 |
d120b2951b37
Move SCREEN_SIZE_X/Y definition to libmpcodecs/vd.c where it is used.
diego
parents:
27385
diff
changeset
|
149 #define SCREEN_SIZE_Y 1 |
d120b2951b37
Move SCREEN_SIZE_X/Y definition to libmpcodecs/vd.c where it is used.
diego
parents:
27385
diff
changeset
|
150 |
31170 | 151 int mpcodecs_config_vo(sh_video_t *sh, int w, int h, |
152 unsigned int preferred_outfmt) | |
153 { | |
154 int i, j; | |
36617 | 155 int only_preferred = 1; |
31170 | 156 unsigned int out_fmt = 0; |
157 int screen_size_x = 0; //SCREEN_SIZE_X; | |
158 int screen_size_y = 0; //SCREEN_SIZE_Y; | |
159 vf_instance_t *vf = sh->vfilter, *sc = NULL; | |
160 int palette = 0; | |
161 int vocfg_flags = 0; | |
5075 | 162 |
31170 | 163 if (w) |
164 sh->disp_w = w; | |
165 if (h) | |
166 sh->disp_h = h; | |
8579
8f6e84a2a431
do not config video out system if input dimensions are invalid (triggered a segfault in vop_expand due to missing dimension checks, which bug was reported by gabucino)
alex
parents:
8295
diff
changeset
|
167 |
31170 | 168 if (!sh->disp_w || !sh->disp_h) |
169 return 0; | |
5365
b87743434e1f
Issue a warning in VDec if disp_w and disp_h weren't set by codec and try workaround.
atmos4
parents:
5315
diff
changeset
|
170 |
29700
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
171 mp_msg(MSGT_DECVIDEO, MSGL_V, |
31170 | 172 "VDec: vo config request - %d x %d (preferred colorspace: %s)\n", w, |
173 h, vo_format_name(preferred_outfmt)); | |
5075 | 174 |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
175 // if(!vf) return 1; // temp hack |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
176 |
31170 | 177 if (get_video_quality_max(sh) <= 0 && divx_quality) { |
178 // user wants postprocess but no pp filter yet: | |
179 sh->vfilter = vf = vf_open_filter(vf, "pp", NULL); | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
180 } |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
181 // check if libvo and codec has common outfmt (no conversion): |
31170 | 182 csp_again: |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
183 |
31170 | 184 if (mp_msg_test(MSGT_DECVIDEO, MSGL_V)) { |
185 vf_instance_t *f = vf; | |
186 mp_msg(MSGT_DECVIDEO, MSGL_V, "Trying filter chain:"); | |
187 for (f = vf; f; f = f->next) | |
188 mp_msg(MSGT_DECVIDEO, MSGL_V, " %s", f->info->name); | |
189 mp_msg(MSGT_DECVIDEO, MSGL_V, "\n"); | |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
190 } |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
191 |
31170 | 192 j = -1; |
36617 | 193 for (i = 0; only_preferred || i < CODECS_MAX_OUTFMT; i++) { |
31170 | 194 int flags; |
36617 | 195 if (i == CODECS_MAX_OUTFMT) { |
196 i = 0; | |
197 only_preferred = 0; | |
198 } | |
31170 | 199 out_fmt = sh->codec->outfmt[i]; |
36617 | 200 if (only_preferred && out_fmt != preferred_outfmt) |
201 continue; | |
31170 | 202 if (out_fmt == (unsigned int) 0xFFFFFFFF) |
203 continue; | |
36442 | 204 // check (query) if codec really support this outfmt... |
36616
b98f5481ed41
vd: Fix setting of outfmtidx during VDCTRL_QUERY_FORMAT
reimar
parents:
36442
diff
changeset
|
205 sh->outfmtidx = i; // pass index to the control() function this way |
36442 | 206 if (mpvdec->control(sh, VDCTRL_QUERY_FORMAT, &out_fmt) == |
207 CONTROL_FALSE) { | |
208 mp_msg(MSGT_CPLAYER, MSGL_DBG2, | |
209 "vo_debug: codec query_format(%s) returned FALSE\n", | |
210 vo_format_name(out_fmt)); | |
211 continue; | |
212 } | |
31170 | 213 flags = vf->query_format(vf, out_fmt); |
214 mp_msg(MSGT_CPLAYER, MSGL_DBG2, | |
215 "vo_debug: query(%s) returned 0x%X (i=%d) \n", | |
216 vo_format_name(out_fmt), flags, i); | |
217 if ((flags & VFCAP_CSP_SUPPORTED_BY_HW) | |
218 || (flags & VFCAP_CSP_SUPPORTED && j < 0)) { | |
219 j = i; | |
220 vo_flags = flags; | |
221 if (flags & VFCAP_CSP_SUPPORTED_BY_HW) | |
222 break; | |
223 } else if (!palette | |
224 && !(flags & | |
225 (VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_CSP_SUPPORTED)) | |
226 && (out_fmt == IMGFMT_RGB8 || out_fmt == IMGFMT_BGR8)) { | |
36442 | 227 palette = 1; |
31170 | 228 } |
5075 | 229 } |
36074
fbbf13706c50
Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents:
35155
diff
changeset
|
230 if (j < 0 && !IMGFMT_IS_HWACCEL(preferred_outfmt)) { |
31170 | 231 // TODO: no match - we should use conversion... |
232 if (strcmp(vf->info->name, "scale") && palette != -1) { | |
233 mp_msg(MSGT_DECVIDEO, MSGL_INFO, MSGTR_CouldNotFindColorspace); | |
234 sc = vf = vf_open_filter(vf, "scale", NULL); | |
235 goto csp_again; | |
236 } else if (palette == 1) { | |
237 mp_msg(MSGT_DECVIDEO, MSGL_V, "vd: Trying -vf palette...\n"); | |
238 palette = -1; | |
239 vf = vf_open_filter(vf, "palette", NULL); | |
240 goto csp_again; | |
241 } else { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc | |
242 vf_instance_t *vo, *vp = NULL, *ve, *vpp = NULL; | |
31198
f9719a497f8e
cosmetics: Remove some commented-out #includes, fix a comment grammar error.
diego
parents:
31170
diff
changeset
|
243 // Remove the scale filter if we added it ourselves |
31170 | 244 if (vf == sc) { |
245 ve = vf; | |
246 vf = vf->next; | |
247 vf_uninit_filter(ve); | |
248 } | |
249 // Find the last filter (vf_vo) | |
250 for (vo = vf; vo->next; vo = vo->next) { | |
251 vpp = vp; | |
252 vp = vo; | |
253 } | |
254 if (vo->query_format(vo, IMGFMT_MPEGPES) | |
255 && (!vp || (vp && strcmp(vp->info->name, "lavc")))) { | |
256 ve = vf_open_filter(vo, "lavc", NULL); | |
257 if (vp) | |
258 vp->next = ve; | |
259 else | |
260 vf = ve; | |
261 goto csp_again; | |
262 } | |
263 if (vp && !strcmp(vp->info->name, "lavc")) { | |
264 if (vpp) | |
265 vpp->next = vo; | |
266 else | |
267 vf = vo; | |
268 vf_uninit_filter(vp); | |
269 } | |
270 } | |
36074
fbbf13706c50
Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents:
35155
diff
changeset
|
271 } |
fbbf13706c50
Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents:
35155
diff
changeset
|
272 if (j < 0) { |
31170 | 273 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_VOincompCodec); |
274 sh->vf_initialized = -1; | |
275 return 0; // failed | |
5075 | 276 } |
31170 | 277 out_fmt = sh->codec->outfmt[j]; |
29700
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
278 mp_msg(MSGT_CPLAYER, MSGL_V, "VDec: using %s as output csp (no %d)\n", |
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
279 vo_format_name(out_fmt), j); |
31170 | 280 sh->outfmtidx = j; |
281 sh->vfilter = vf; | |
5075 | 282 |
283 // autodetect flipping | |
31170 | 284 if (flip == -1) { |
285 flip = 0; | |
286 if (sh->codec->outflags[j] & CODECS_FLAG_FLIP) | |
287 if (!(sh->codec->outflags[j] & CODECS_FLAG_NOFLIP)) | |
288 flip = 1; | |
5075 | 289 } |
31170 | 290 if (vo_flags & VFCAP_FLIPPED) |
291 flip ^= 1; | |
292 if (flip && !(vo_flags & VFCAP_FLIP)) { | |
293 // we need to flip, but no flipping filter avail. | |
294 vf_add_before_vo(&vf, "flip", NULL); | |
295 sh->vfilter = vf; | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
296 } |
36316
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36305
diff
changeset
|
297 // time to do aspect ratio corrections... |
36295
0bd0297b073a
Handle special argument -1 to switch_ratio as intended.
ib
parents:
36074
diff
changeset
|
298 |
36316
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36305
diff
changeset
|
299 if (movie_aspect > -1.0) |
31170 | 300 sh->aspect = movie_aspect; // cmdline overrides autodetect |
301 else if (sh->stream_aspect != 0.0) | |
36316
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36305
diff
changeset
|
302 sh->aspect = sh->stream_aspect; |
36305
d8a13d907c61
Enable switch_ratio -1 with videos with aspect changes.
ib
parents:
36304
diff
changeset
|
303 else |
36316
139f2b064ef9
Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents:
36305
diff
changeset
|
304 sh->aspect = sh->original_aspect; |
36305
d8a13d907c61
Enable switch_ratio -1 with videos with aspect changes.
ib
parents:
36304
diff
changeset
|
305 |
31170 | 306 if (opt_screen_size_x || opt_screen_size_y) { |
307 screen_size_x = opt_screen_size_x; | |
308 screen_size_y = opt_screen_size_y; | |
309 if (!vidmode) { | |
310 if (!screen_size_x) | |
311 screen_size_x = SCREEN_SIZE_X; | |
312 if (!screen_size_y) | |
313 screen_size_y = SCREEN_SIZE_Y; | |
314 if (screen_size_x <= 8) | |
315 screen_size_x *= sh->disp_w; | |
316 if (screen_size_y <= 8) | |
317 screen_size_y *= sh->disp_h; | |
318 } | |
319 } else { | |
320 // check source format aspect, calculate prescale ::atmos | |
321 screen_size_x = sh->disp_w; | |
322 screen_size_y = sh->disp_h; | |
323 if (screen_size_xy >= 0.001) { | |
324 if (screen_size_xy <= 8) { | |
325 // -xy means x+y scale | |
326 screen_size_x *= screen_size_xy; | |
327 screen_size_y *= screen_size_xy; | |
328 } else { | |
329 // -xy means forced width while keeping correct aspect | |
330 screen_size_x = screen_size_xy; | |
331 screen_size_y = screen_size_xy * sh->disp_h / sh->disp_w; | |
332 } | |
333 } | |
36317
56f576e4a49d
Be more consistent with movie aspect setting and check.
ib
parents:
36316
diff
changeset
|
334 if (sh->aspect >= 0.01) { |
31170 | 335 int w; |
336 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_MovieAspectIsSet, | |
337 sh->aspect); | |
338 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", | |
339 sh->aspect); | |
340 w = (int) ((float) screen_size_y * sh->aspect); | |
341 w += w % 2; // round | |
342 // we don't like horizontal downscale || user forced width: | |
343 if (w < screen_size_x || screen_size_xy > 8) { | |
344 screen_size_y = | |
345 (int) ((float) screen_size_x * (1.0 / sh->aspect)); | |
346 screen_size_y += screen_size_y % 2; // round | |
347 } else | |
348 screen_size_x = w; // keep new width | |
349 } else { | |
350 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_MovieAspectUndefined); | |
351 } | |
5903 | 352 } |
5075 | 353 |
31170 | 354 vocfg_flags = (fullscreen ? VOFLAG_FULLSCREEN : 0) |
355 | (vidmode ? VOFLAG_MODESWITCHING : 0) | |
356 | (softzoom ? VOFLAG_SWSCALE : 0) | |
357 | (flip ? VOFLAG_FLIPPING : 0); | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
358 |
5075 | 359 // Time to config libvo! |
31170 | 360 mp_msg(MSGT_CPLAYER, MSGL_V, |
361 "VO Config (%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", sh->disp_w, | |
362 sh->disp_h, screen_size_x, screen_size_y, vocfg_flags, "MPlayer", | |
363 out_fmt); | |
5075 | 364 |
14073 | 365 vf->w = sh->disp_w; |
366 vf->h = sh->disp_h; | |
31170 | 367 if (vf_config_wrapper |
368 (vf, sh->disp_w, sh->disp_h, screen_size_x, screen_size_y, vocfg_flags, | |
369 out_fmt) == 0) { | |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6993
diff
changeset
|
370 // "MPlayer",out_fmt)){ |
31170 | 371 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_CannotInitVO); |
372 sh->vf_initialized = -1; | |
373 return 0; | |
5075 | 374 } |
375 | |
31170 | 376 sh->vf_initialized = 1; |
13341
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
377 |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
378 if (vo_gamma_gamma != 1000) |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
379 set_video_colors(sh, "gamma", vo_gamma_gamma); |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
380 if (vo_gamma_brightness != 1000) |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
381 set_video_colors(sh, "brightness", vo_gamma_brightness); |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
382 if (vo_gamma_contrast != 1000) |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
383 set_video_colors(sh, "contrast", vo_gamma_contrast); |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
384 if (vo_gamma_saturation != 1000) |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
385 set_video_colors(sh, "saturation", vo_gamma_saturation); |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
386 if (vo_gamma_hue != 1000) |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
387 set_video_colors(sh, "hue", vo_gamma_hue); |
0c41c3728568
fix ineffectual video equalizer command line options, patch by kiriuja <mplayer-bugs at en-directo.net>, closes #37, some more variable docu by me
faust3
parents:
12827
diff
changeset
|
388 |
4878 | 389 return 1; |
390 } | |
391 | |
392 // mp_imgtype: buffering type, see mp_image.h | |
393 // mp_imgflag: buffer requirements (read/write, preserve, stride limits), see mp_image.h | |
394 // returns NULL or allocated mp_image_t* | |
395 // Note: buffer allocation may be moved to mpcodecs_config_vo() later... | |
31170 | 396 mp_image_t *mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, |
397 int w, int h) | |
398 { | |
399 mp_image_t *mpi = | |
400 vf_get_image(sh->vfilter, sh->codec->outfmt[sh->outfmtidx], mp_imgtype, | |
401 mp_imgflag, w, h); | |
402 if (mpi) | |
403 mpi->x = mpi->y = 0; | |
404 return mpi; | |
4878 | 405 } |
406 | |
31170 | 407 void mpcodecs_draw_slice(sh_video_t *sh, unsigned char **src, int *stride, |
408 int w, int h, int x, int y) | |
409 { | |
410 struct vf_instance *vf = sh->vfilter; | |
6709 | 411 |
31170 | 412 if (vf->draw_slice) |
413 vf->draw_slice(vf, src, stride, w, h, x, y); | |
6709 | 414 } |