annotate libmpcodecs/vd.c @ 36402:2c9356ac0d01

af_volume: optimize for common case where all channels have same volume.
author reimar
date Tue, 29 Oct 2013 19:24:16 +0000
parents 56f576e4a49d
children ee46a4670903
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: 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
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
19 #include <stdio.h>
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
20 #include <stdlib.h>
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
21 #include <string.h>
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
22
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
23 #include "config.h"
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
24 #include "mp_msg.h"
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
25 #include "help_mp.h"
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
26
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
27 #include "codec-cfg.h"
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
28
5607
1972c3475d93 mp_image.h and img_format.h moved to libmpcodecs
arpi
parents: 5565
diff changeset
29 #include "img_format.h"
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
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
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
35
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
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
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
39 extern const vd_functions_t mpcodecs_vd_null;
35155
303bf4bab982 libmpcodecs: Add vd_black
al
parents: 33032
diff changeset
40 extern const vd_functions_t mpcodecs_vd_black;
30519
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
41 extern const vd_functions_t mpcodecs_vd_ffmpeg;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
42 extern const vd_functions_t mpcodecs_vd_theora;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
43 extern const vd_functions_t mpcodecs_vd_dshow;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
44 extern const vd_functions_t mpcodecs_vd_dmo;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
45 extern const vd_functions_t mpcodecs_vd_vfw;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
46 extern const vd_functions_t mpcodecs_vd_vfwex;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
47 extern const vd_functions_t mpcodecs_vd_raw;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
48 extern const vd_functions_t mpcodecs_vd_hmblck;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
49 extern const vd_functions_t mpcodecs_vd_xanim;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
50 extern const vd_functions_t mpcodecs_vd_mpng;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
51 extern const vd_functions_t mpcodecs_vd_ijpg;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
52 extern const vd_functions_t mpcodecs_vd_mtga;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
53 extern const vd_functions_t mpcodecs_vd_sgi;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
54 extern const vd_functions_t mpcodecs_vd_libmpeg2;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
55 extern const vd_functions_t mpcodecs_vd_mpegpes;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
56 extern const vd_functions_t mpcodecs_vd_zrmjpeg;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
57 extern const vd_functions_t mpcodecs_vd_realvid;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
58 extern const vd_functions_t mpcodecs_vd_xvid;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
59 extern const vd_functions_t mpcodecs_vd_libdv;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
60 extern const vd_functions_t mpcodecs_vd_lzo;
e96015d17ffb Make vd_functions_t describing codecs const.
reimar
parents: 30421
diff changeset
61 extern const vd_functions_t mpcodecs_vd_qtvideo;
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
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
a72ddec9b027 Add some "const" to mpcodecs_vd_drivers
reimar
parents: 28603
diff changeset
67 const vd_functions_t * const mpcodecs_vd_drivers[] = {
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
68 &mpcodecs_vd_null,
35155
303bf4bab982 libmpcodecs: Add vd_black
al
parents: 33032
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
71 &mpcodecs_vd_ffmpeg,
4951
e5bd91881646 vd_ffmpeg added, handling of EXPORT imgtype changed
arpi
parents: 4915
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
77 &mpcodecs_vd_dshow,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
78 &mpcodecs_vd_dmo,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
79 &mpcodecs_vd_vfw,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
80 &mpcodecs_vd_vfwex,
4968
236b06410b03 vfw, vfwex, odivx, divx4 added
arpi
parents: 4958
diff changeset
81 #endif
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
82 &mpcodecs_vd_lzo,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
83 &mpcodecs_vd_raw,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
84 &mpcodecs_vd_hmblck,
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26206
diff changeset
85 #ifdef CONFIG_XANIM
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
86 &mpcodecs_vd_xanim,
4969
db86fcf25ede xanim, raw, rle added
arpi
parents: 4968
diff changeset
87 #endif
27385
2113bd9c6bd9 Rename preprocessor directives related to image libraries.
diego
parents: 27370
diff changeset
88 #ifdef CONFIG_PNG
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
89 &mpcodecs_vd_mpng,
4998
c32191b02a66 mpng, libmpeg2 added, none of them finished :(
arpi
parents: 4989
diff changeset
90 #endif
27385
2113bd9c6bd9 Rename preprocessor directives related to image libraries.
diego
parents: 27370
diff changeset
91 #ifdef CONFIG_JPEG
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
92 &mpcodecs_vd_ijpg,
5029
ef8a43b74075 Add IJPG decoder.
pontscho
parents: 5004
diff changeset
93 #endif
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
94 &mpcodecs_vd_mtga,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
95 &mpcodecs_vd_sgi,
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26206
diff changeset
96 #ifdef CONFIG_LIBMPEG2
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
97 &mpcodecs_vd_libmpeg2,
8026
b465ba5897a3 usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents: 7978
diff changeset
98 #endif
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
110 &mpcodecs_vd_libdv,
6927
0145bba6e201 native DV audio/video decoders using libdv
arpi
parents: 6709
diff changeset
111 #endif
27341
e7c989f7a7c9 Start unifying names of internal preprocessor directives.
diego
parents: 26206
diff changeset
112 #ifdef CONFIG_QTX_CODECS
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
113 &mpcodecs_vd_qtvideo,
8160
2be30233c532 qt video dll codecs support
arpi
parents: 8026
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
118 NULL
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
119 };
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
120
4971
fa002f25631e direct rendering support
arpi
parents: 4969
diff changeset
121 #include "libvo/video_out.h"
fa002f25631e direct rendering support
arpi
parents: 4969
diff changeset
122
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
123 // libvo opts:
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
124 int fullscreen = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
125 int vidmode = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
126 int softzoom = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
127 int flip = -1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
128 int opt_screen_size_x = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
129 int opt_screen_size_y = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
130 float screen_size_xy = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
131 float movie_aspect = -1.0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
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
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
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
17bf4f4b0715 Gui --> gui
diego
parents: 22601
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
146 extern const vd_functions_t *mpvdec; // FIXME!
5180
7e77d7344208 supports query_format in codecs
arpi
parents: 5172
diff changeset
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
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
151 int mpcodecs_config_vo(sh_video_t *sh, int w, int h,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
152 unsigned int preferred_outfmt)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
153 {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
154 int i, j;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
155 unsigned int out_fmt = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
156 int screen_size_x = 0; //SCREEN_SIZE_X;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
157 int screen_size_y = 0; //SCREEN_SIZE_Y;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
158 vf_instance_t *vf = sh->vfilter, *sc = NULL;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
159 int palette = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
160 int vocfg_flags = 0;
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
161
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
162 if (w)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
163 sh->disp_w = w;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
164 if (h)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
165 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
166
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
167 if (!sh->disp_w || !sh->disp_h)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
168 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
169
29700
cd5b4ddc9546 Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents: 29263
diff changeset
170 mp_msg(MSGT_DECVIDEO, MSGL_V,
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
171 "VDec: vo config request - %d x %d (preferred colorspace: %s)\n", w,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
172 h, vo_format_name(preferred_outfmt));
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
173
5925
3f17793b2cea setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents: 5903
diff changeset
174 // if(!vf) return 1; // temp hack
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
175
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
176 if (get_video_quality_max(sh) <= 0 && divx_quality) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
177 // user wants postprocess but no pp filter yet:
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
178 sh->vfilter = vf = vf_open_filter(vf, "pp", NULL);
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5549
diff changeset
179 }
5131
cff03e88d331 prefer outfmt with no conversion (see vo's query flags)
arpi
parents: 5077
diff changeset
180 // check if libvo and codec has common outfmt (no conversion):
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
181 csp_again:
9275
d29f03d5763c - append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents: 8579
diff changeset
182
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
183 if (mp_msg_test(MSGT_DECVIDEO, MSGL_V)) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
184 vf_instance_t *f = vf;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
185 mp_msg(MSGT_DECVIDEO, MSGL_V, "Trying filter chain:");
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
186 for (f = vf; f; f = f->next)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
187 mp_msg(MSGT_DECVIDEO, MSGL_V, " %s", f->info->name);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
188 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
189 }
d29f03d5763c - append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents: 8579
diff changeset
190
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
191 j = -1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
192 for (i = 0; i < CODECS_MAX_OUTFMT; i++) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
193 int flags;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
194 out_fmt = sh->codec->outfmt[i];
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
195 if (out_fmt == (unsigned int) 0xFFFFFFFF)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
196 continue;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
197 flags = vf->query_format(vf, out_fmt);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
198 mp_msg(MSGT_CPLAYER, MSGL_DBG2,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
199 "vo_debug: query(%s) returned 0x%X (i=%d) \n",
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
200 vo_format_name(out_fmt), flags, i);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
201 if ((flags & VFCAP_CSP_SUPPORTED_BY_HW)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
202 || (flags & VFCAP_CSP_SUPPORTED && j < 0)) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
203 // check (query) if codec really support this outfmt...
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
204 sh->outfmtidx = j; // pass index to the control() function this way
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
205 if (mpvdec->control(sh, VDCTRL_QUERY_FORMAT, &out_fmt) ==
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
206 CONTROL_FALSE) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
207 mp_msg(MSGT_CPLAYER, MSGL_DBG2,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
208 "vo_debug: codec query_format(%s) returned FALSE\n",
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
209 vo_format_name(out_fmt));
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
210 continue;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
211 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
212 j = i;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
213 vo_flags = flags;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
214 if (flags & VFCAP_CSP_SUPPORTED_BY_HW)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
215 break;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
216 } else if (!palette
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
217 && !(flags &
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
218 (VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_CSP_SUPPORTED))
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
219 && (out_fmt == IMGFMT_RGB8 || out_fmt == IMGFMT_BGR8)) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
220 sh->outfmtidx = j; // pass index to the control() function this way
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
221 if (mpvdec->control(sh, VDCTRL_QUERY_FORMAT, &out_fmt) !=
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
222 CONTROL_FALSE)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
223 palette = 1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
224 }
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
225 }
36074
fbbf13706c50 Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents: 35155
diff changeset
226 if (j < 0 && !IMGFMT_IS_HWACCEL(preferred_outfmt)) {
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
227 // TODO: no match - we should use conversion...
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
228 if (strcmp(vf->info->name, "scale") && palette != -1) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
229 mp_msg(MSGT_DECVIDEO, MSGL_INFO, MSGTR_CouldNotFindColorspace);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
230 sc = vf = vf_open_filter(vf, "scale", NULL);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
231 goto csp_again;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
232 } else if (palette == 1) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
233 mp_msg(MSGT_DECVIDEO, MSGL_V, "vd: Trying -vf palette...\n");
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
234 palette = -1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
235 vf = vf_open_filter(vf, "palette", NULL);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
236 goto csp_again;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
237 } else { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
238 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
239 // Remove the scale filter if we added it ourselves
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
240 if (vf == sc) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
241 ve = vf;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
242 vf = vf->next;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
243 vf_uninit_filter(ve);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
244 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
245 // Find the last filter (vf_vo)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
246 for (vo = vf; vo->next; vo = vo->next) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
247 vpp = vp;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
248 vp = vo;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
249 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
250 if (vo->query_format(vo, IMGFMT_MPEGPES)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
251 && (!vp || (vp && strcmp(vp->info->name, "lavc")))) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
252 ve = vf_open_filter(vo, "lavc", NULL);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
253 if (vp)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
254 vp->next = ve;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
255 else
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
256 vf = ve;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
257 goto csp_again;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
258 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
259 if (vp && !strcmp(vp->info->name, "lavc")) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
260 if (vpp)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
261 vpp->next = vo;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
262 else
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
263 vf = vo;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
264 vf_uninit_filter(vp);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
265 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
266 }
36074
fbbf13706c50 Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents: 35155
diff changeset
267 }
fbbf13706c50 Do not try with scale filter etc. when the format is a HWACCEL format.
reimar
parents: 35155
diff changeset
268 if (j < 0) {
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
269 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_VOincompCodec);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
270 sh->vf_initialized = -1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
271 return 0; // failed
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
272 }
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
273 out_fmt = sh->codec->outfmt[j];
29700
cd5b4ddc9546 Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents: 29263
diff changeset
274 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
275 vo_format_name(out_fmt), j);
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
276 sh->outfmtidx = j;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
277 sh->vfilter = vf;
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
278
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
279 // autodetect flipping
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
280 if (flip == -1) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
281 flip = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
282 if (sh->codec->outflags[j] & CODECS_FLAG_FLIP)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
283 if (!(sh->codec->outflags[j] & CODECS_FLAG_NOFLIP))
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
284 flip = 1;
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
285 }
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
286 if (vo_flags & VFCAP_FLIPPED)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
287 flip ^= 1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
288 if (flip && !(vo_flags & VFCAP_FLIP)) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
289 // we need to flip, but no flipping filter avail.
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
290 vf_add_before_vo(&vf, "flip", NULL);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
291 sh->vfilter = vf;
5565
0b301fec999a capabilities support -> automatic insertion of scale, expand, pp
arpi
parents: 5549
diff changeset
292 }
36316
139f2b064ef9 Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents: 36305
diff changeset
293 // time to do aspect ratio corrections...
36295
0bd0297b073a Handle special argument -1 to switch_ratio as intended.
ib
parents: 36074
diff changeset
294
36316
139f2b064ef9 Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents: 36305
diff changeset
295 if (movie_aspect > -1.0)
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
296 sh->aspect = movie_aspect; // cmdline overrides autodetect
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
297 else if (sh->stream_aspect != 0.0)
36316
139f2b064ef9 Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents: 36305
diff changeset
298 sh->aspect = sh->stream_aspect;
36305
d8a13d907c61 Enable switch_ratio -1 with videos with aspect changes.
ib
parents: 36304
diff changeset
299 else
36316
139f2b064ef9 Don't subsequently calculate original_aspect from last movie_aspect.
ib
parents: 36305
diff changeset
300 sh->aspect = sh->original_aspect;
36305
d8a13d907c61 Enable switch_ratio -1 with videos with aspect changes.
ib
parents: 36304
diff changeset
301
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
302 if (opt_screen_size_x || opt_screen_size_y) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
303 screen_size_x = opt_screen_size_x;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
304 screen_size_y = opt_screen_size_y;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
305 if (!vidmode) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
306 if (!screen_size_x)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
307 screen_size_x = SCREEN_SIZE_X;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
308 if (!screen_size_y)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
309 screen_size_y = SCREEN_SIZE_Y;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
310 if (screen_size_x <= 8)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
311 screen_size_x *= sh->disp_w;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
312 if (screen_size_y <= 8)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
313 screen_size_y *= sh->disp_h;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
314 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
315 } else {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
316 // check source format aspect, calculate prescale ::atmos
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
317 screen_size_x = sh->disp_w;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
318 screen_size_y = sh->disp_h;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
319 if (screen_size_xy >= 0.001) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
320 if (screen_size_xy <= 8) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
321 // -xy means x+y scale
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
322 screen_size_x *= screen_size_xy;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
323 screen_size_y *= screen_size_xy;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
324 } else {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
325 // -xy means forced width while keeping correct aspect
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
326 screen_size_x = screen_size_xy;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
327 screen_size_y = screen_size_xy * sh->disp_h / sh->disp_w;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
328 }
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
329 }
36317
56f576e4a49d Be more consistent with movie aspect setting and check.
ib
parents: 36316
diff changeset
330 if (sh->aspect >= 0.01) {
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
331 int w;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
332 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_MovieAspectIsSet,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
333 sh->aspect);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
334 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n",
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
335 sh->aspect);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
336 w = (int) ((float) screen_size_y * sh->aspect);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
337 w += w % 2; // round
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
338 // we don't like horizontal downscale || user forced width:
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
339 if (w < screen_size_x || screen_size_xy > 8) {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
340 screen_size_y =
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
341 (int) ((float) screen_size_x * (1.0 / sh->aspect));
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
342 screen_size_y += screen_size_y % 2; // round
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
343 } else
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
344 screen_size_x = w; // keep new width
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
345 } else {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
346 mp_msg(MSGT_CPLAYER, MSGL_INFO, MSGTR_MovieAspectUndefined);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
347 }
5903
97abdfbbeff0 apply aspect prescaling to -xy
arpi
parents: 5710
diff changeset
348 }
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
349
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
350 vocfg_flags = (fullscreen ? VOFLAG_FULLSCREEN : 0)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
351 | (vidmode ? VOFLAG_MODESWITCHING : 0)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
352 | (softzoom ? VOFLAG_SWSCALE : 0)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
353 | (flip ? VOFLAG_FLIPPING : 0);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 14878
diff changeset
354
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
355 // Time to config libvo!
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
356 mp_msg(MSGT_CPLAYER, MSGL_V,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
357 "VO Config (%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", sh->disp_w,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
358 sh->disp_h, screen_size_x, screen_size_y, vocfg_flags, "MPlayer",
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
359 out_fmt);
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
360
14073
9e81af56f554 fix image dimensions at filter config time
henry
parents: 13521
diff changeset
361 vf->w = sh->disp_w;
9e81af56f554 fix image dimensions at filter config time
henry
parents: 13521
diff changeset
362 vf->h = sh->disp_h;
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
363 if (vf_config_wrapper
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
364 (vf, sh->disp_w, sh->disp_h, screen_size_x, screen_size_y, vocfg_flags,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
365 out_fmt) == 0) {
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 6993
diff changeset
366 // "MPlayer",out_fmt)){
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
367 mp_msg(MSGT_CPLAYER, MSGL_WARN, MSGTR_CannotInitVO);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
368 sh->vf_initialized = -1;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
369 return 0;
5075
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
370 }
37e15b16e38d libvo init moved to libmpcodecs
arpi
parents: 5029
diff changeset
371
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
372 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
373
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
374 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
375 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
376 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
377 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
378 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
379 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
380 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
381 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
382 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
383 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
384
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
385 return 1;
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
386 }
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
387
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
388 // mp_imgtype: buffering type, see mp_image.h
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
389 // mp_imgflag: buffer requirements (read/write, preserve, stride limits), see mp_image.h
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
390 // returns NULL or allocated mp_image_t*
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
391 // Note: buffer allocation may be moved to mpcodecs_config_vo() later...
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
392 mp_image_t *mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
393 int w, int h)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
394 {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
395 mp_image_t *mpi =
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
396 vf_get_image(sh->vfilter, sh->codec->outfmt[sh->outfmtidx], mp_imgtype,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
397 mp_imgflag, w, h);
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
398 if (mpi)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
399 mpi->x = mpi->y = 0;
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
400 return mpi;
4878
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
401 }
eff8a76e515f libmpcodecs core - initial version
arpi
parents:
diff changeset
402
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
403 void mpcodecs_draw_slice(sh_video_t *sh, unsigned char **src, int *stride,
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
404 int w, int h, int x, int y)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
405 {
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
406 struct vf_instance *vf = sh->vfilter;
6709
3b20f07b2c16 Add draw slice for the codecs
albeu
parents: 6701
diff changeset
407
31170
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
408 if (vf->draw_slice)
c720f2bd4765 cosmetics: K&R coding style
diego
parents: 30692
diff changeset
409 vf->draw_slice(vf, src, stride, w, h, x, y);
6709
3b20f07b2c16 Add draw slice for the codecs
albeu
parents: 6701
diff changeset
410 }