Mercurial > mplayer.hg
annotate libmpcodecs/vd.c @ 30086:f72ea7a67421
Introduce a sh_common struct that contains the parts in common by the audio, video
and sub "stream headers".
One reason for this is to help avoid/make more obvious things like members with
the same function but different name (extradata vs. codecdata etc.), or members
with the same name but different semantics (pts for audio vs. pts for video).
author | reimar |
---|---|
date | Sun, 27 Dec 2009 14:40:56 +0000 |
parents | cd5b4ddc9546 |
children | 74016937a51e |
rev | line source |
---|---|
4878 | 1 #include <stdio.h> |
2 #include <stdlib.h> | |
3 #include <string.h> | |
4 | |
5 #include "config.h" | |
6 #include "mp_msg.h" | |
5075 | 7 #include "help_mp.h" |
4878 | 8 |
9 #include "codec-cfg.h" | |
10 //#include "mp_image.h" | |
11 | |
5607 | 12 #include "img_format.h" |
4878 | 13 |
22599
4faee1254928
Add explicit location for headers from the stream/ directory.
diego
parents:
21145
diff
changeset
|
14 #include "stream/stream.h" |
22601
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
15 #include "libmpdemux/demuxer.h" |
ed8f90096c65
Add explicit location for headers from the libmpdemux/ directory.
diego
parents:
22599
diff
changeset
|
16 #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
|
17 #include "dec_video.h" |
4878 | 18 |
19 #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
|
20 #include "vf.h" |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
21 |
4878 | 22 //#include "vd_internal.h" |
23 | |
24 extern vd_functions_t mpcodecs_vd_null; | |
4951 | 25 extern vd_functions_t mpcodecs_vd_ffmpeg; |
10095
51da0282b302
Theora demuxer/codec support, patch by David Kuehling <dvdkhlng@gmx.de>
arpi
parents:
9534
diff
changeset
|
26 extern vd_functions_t mpcodecs_vd_theora; |
4958 | 27 extern vd_functions_t mpcodecs_vd_dshow; |
8295 | 28 extern vd_functions_t mpcodecs_vd_dmo; |
4968 | 29 extern vd_functions_t mpcodecs_vd_vfw; |
30 extern vd_functions_t mpcodecs_vd_vfwex; | |
4969 | 31 extern vd_functions_t mpcodecs_vd_raw; |
10305
3e40b8f879c8
HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents:
10095
diff
changeset
|
32 extern vd_functions_t mpcodecs_vd_hmblck; |
4969 | 33 extern vd_functions_t mpcodecs_vd_xanim; |
4998 | 34 extern vd_functions_t mpcodecs_vd_mpng; |
5029 | 35 extern vd_functions_t mpcodecs_vd_ijpg; |
7362 | 36 extern vd_functions_t mpcodecs_vd_mtga; |
9534
87e03d96a4cd
add support for sgi files to mencoder patch by (Todd Kirby <slapcat at pacbell dot net>)
michael
parents:
9502
diff
changeset
|
37 extern vd_functions_t mpcodecs_vd_sgi; |
4998 | 38 extern vd_functions_t mpcodecs_vd_libmpeg2; |
5476 | 39 extern vd_functions_t mpcodecs_vd_mpegpes; |
11386
229079491864
addition of special image formats for Zoran MJPEG, and vd_zrmjpeg.c
rik
parents:
11261
diff
changeset
|
40 extern vd_functions_t mpcodecs_vd_zrmjpeg; |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
7124
diff
changeset
|
41 extern vd_functions_t mpcodecs_vd_realvid; |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
42 extern vd_functions_t mpcodecs_vd_xvid; |
6927 | 43 extern vd_functions_t mpcodecs_vd_libdv; |
7729 | 44 extern vd_functions_t mpcodecs_vd_lzo; |
8160 | 45 extern vd_functions_t mpcodecs_vd_qtvideo; |
4878 | 46 |
25876
edfe8baed49f
copy note on new demuxers and codecs to the top of the array as well to be
ivo
parents:
25872
diff
changeset
|
47 /* 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
|
48 * 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
|
49 * 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
|
50 |
28826 | 51 const vd_functions_t * const mpcodecs_vd_drivers[] = { |
4878 | 52 &mpcodecs_vd_null, |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
53 #ifdef CONFIG_LIBAVCODEC |
4951 | 54 &mpcodecs_vd_ffmpeg, |
55 #endif | |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
56 #ifdef CONFIG_OGGTHEORA |
10095
51da0282b302
Theora demuxer/codec support, patch by David Kuehling <dvdkhlng@gmx.de>
arpi
parents:
9534
diff
changeset
|
57 &mpcodecs_vd_theora, |
51da0282b302
Theora demuxer/codec support, patch by David Kuehling <dvdkhlng@gmx.de>
arpi
parents:
9534
diff
changeset
|
58 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
59 #ifdef CONFIG_WIN32DLL |
4958 | 60 &mpcodecs_vd_dshow, |
8295 | 61 &mpcodecs_vd_dmo, |
4968 | 62 &mpcodecs_vd_vfw, |
63 &mpcodecs_vd_vfwex, | |
64 #endif | |
7729 | 65 &mpcodecs_vd_lzo, |
4969 | 66 &mpcodecs_vd_raw, |
10305
3e40b8f879c8
HM12 & NV12 "decoder" (specially interleaved YUV formats, used by Hauppauge's PVR cards)
arpi
parents:
10095
diff
changeset
|
67 &mpcodecs_vd_hmblck, |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
68 #ifdef CONFIG_XANIM |
4969 | 69 &mpcodecs_vd_xanim, |
70 #endif | |
27385
2113bd9c6bd9
Rename preprocessor directives related to image libraries.
diego
parents:
27370
diff
changeset
|
71 #ifdef CONFIG_PNG |
4998 | 72 &mpcodecs_vd_mpng, |
73 #endif | |
27385
2113bd9c6bd9
Rename preprocessor directives related to image libraries.
diego
parents:
27370
diff
changeset
|
74 #ifdef CONFIG_JPEG |
5029 | 75 &mpcodecs_vd_ijpg, |
76 #endif | |
7362 | 77 &mpcodecs_vd_mtga, |
9534
87e03d96a4cd
add support for sgi files to mencoder patch by (Todd Kirby <slapcat at pacbell dot net>)
michael
parents:
9502
diff
changeset
|
78 &mpcodecs_vd_sgi, |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
79 #ifdef CONFIG_LIBMPEG2 |
4998 | 80 &mpcodecs_vd_libmpeg2, |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
81 #endif |
5476 | 82 &mpcodecs_vd_mpegpes, |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27363
diff
changeset
|
83 #ifdef CONFIG_ZR |
11386
229079491864
addition of special image formats for Zoran MJPEG, and vd_zrmjpeg.c
rik
parents:
11261
diff
changeset
|
84 &mpcodecs_vd_zrmjpeg, |
229079491864
addition of special image formats for Zoran MJPEG, and vd_zrmjpeg.c
rik
parents:
11261
diff
changeset
|
85 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
86 #ifdef CONFIG_REALCODECS |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
7124
diff
changeset
|
87 &mpcodecs_vd_realvid, |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6234
diff
changeset
|
88 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
89 #ifdef CONFIG_XVID4 |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
90 &mpcodecs_vd_xvid, |
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
91 #endif |
27363
40057010b1fa
Change a bunch of codec-specific preprocessor directives from a HAVE_
diego
parents:
27341
diff
changeset
|
92 #ifdef CONFIG_LIBDV095 |
7222
81f720e51821
added LCL decoder by Roberto Togni <r_togni@libero.it>, removed my old vd_zlib
alex
parents:
7220
diff
changeset
|
93 &mpcodecs_vd_libdv, |
6927 | 94 #endif |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26206
diff
changeset
|
95 #ifdef CONFIG_QTX_CODECS |
8160 | 96 &mpcodecs_vd_qtvideo, |
97 #endif | |
25872
3eeaf9d4c65a
note on new demuxers and codecs, add them to lav* instead of libmp*
ivo
parents:
25597
diff
changeset
|
98 /* 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
|
99 * 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
|
100 * libraries and decoders requiring binary support. */ |
4878 | 101 NULL |
102 }; | |
103 | |
4971 | 104 #include "libvo/video_out.h" |
105 | |
5075 | 106 // libvo opts: |
107 int fullscreen=0; | |
108 int vidmode=0; | |
109 int softzoom=0; | |
110 int flip=-1; | |
111 int opt_screen_size_x=0; | |
112 int opt_screen_size_y=0; | |
7452
b062be2c1423
This patch allows you to use fractional values for specifying a zoom.
arpi
parents:
7362
diff
changeset
|
113 float screen_size_xy=0; |
5075 | 114 float movie_aspect=-1.0; |
115 int vo_flags=0; | |
5483 | 116 int vd_use_slices=1; |
5075 | 117 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
118 /** global variables for gamma, brightness, contrast, saturation and hue |
23077 | 119 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
|
120 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
|
121 1000 if the vo default should be used |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
122 */ |
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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 |
5180 | 129 extern vd_functions_t* mpvdec; // FIXME! |
130 | |
27751
d120b2951b37
Move SCREEN_SIZE_X/Y definition to libmpcodecs/vd.c where it is used.
diego
parents:
27385
diff
changeset
|
131 #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
|
132 #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
|
133 |
4878 | 134 int mpcodecs_config_vo(sh_video_t *sh, int w, int h, unsigned int preferred_outfmt){ |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
135 int i,j; |
5075 | 136 unsigned int out_fmt=0; |
137 int screen_size_x=0;//SCREEN_SIZE_X; | |
138 int screen_size_y=0;//SCREEN_SIZE_Y; | |
7978
ab15849ec648
10L ! Don't remove the scale filter if we don't added ourself
albeu
parents:
7971
diff
changeset
|
139 vf_instance_t* vf=sh->vfilter,*sc=NULL; |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
140 int palette=0; |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
141 int vocfg_flags=0; |
5075 | 142 |
20671
66f2db668910
Always respect w and h params to mpcodecs_config_vo over
reimar
parents:
19402
diff
changeset
|
143 if(w) |
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
|
144 sh->disp_w=w; |
20671
66f2db668910
Always respect w and h params to mpcodecs_config_vo over
reimar
parents:
19402
diff
changeset
|
145 if(h) |
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
|
146 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
|
147 |
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
|
148 if(!sh->disp_w || !sh->disp_h) |
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
|
149 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
|
150 |
29700
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
151 mp_msg(MSGT_DECVIDEO, MSGL_V, |
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
152 "VDec: vo config request - %d x %d (preferred colorspace: %s)\n", |
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
153 w, h, vo_format_name(preferred_outfmt)); |
5075 | 154 |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
155 // if(!vf) return 1; // temp hack |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
156 |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
157 if(get_video_quality_max(sh)<=0 && divx_quality){ |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
158 // user wants postprocess but no pp filter yet: |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
159 sh->vfilter=vf=vf_open_filter(vf,"pp",NULL); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
160 } |
5077 | 161 |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
162 // check if libvo and codec has common outfmt (no conversion): |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
163 csp_again: |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
164 |
17932 | 165 if( mp_msg_test(MSGT_DECVIDEO,MSGL_V) ){ |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
166 vf_instance_t* f=vf; |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
167 mp_msg(MSGT_DECVIDEO,MSGL_V,"Trying filter chain:"); |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
168 for(f = vf ; f ; f = f->next) |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
169 mp_msg(MSGT_DECVIDEO,MSGL_V," %s",f->info->name); |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
170 mp_msg(MSGT_DECVIDEO,MSGL_V,"\n"); |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
171 } |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
172 |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
173 j=-1; |
5075 | 174 for(i=0;i<CODECS_MAX_OUTFMT;i++){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
175 int flags; |
5075 | 176 out_fmt=sh->codec->outfmt[i]; |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
177 if(out_fmt==(unsigned int)0xFFFFFFFF) continue; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
178 flags=vf->query_format(vf,out_fmt); |
7211 | 179 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: query(%s) returned 0x%X (i=%d) \n",vo_format_name(out_fmt),flags,i); |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
180 if((flags&VFCAP_CSP_SUPPORTED_BY_HW) || (flags&VFCAP_CSP_SUPPORTED && j<0)){ |
5180 | 181 // check (query) if codec really support this outfmt... |
7261
ec187e86b20b
pass outflags[] index via sh->outfmtidx to the vd->control() func (for VfW)
arpi
parents:
7222
diff
changeset
|
182 sh->outfmtidx=j; // pass index to the control() function this way |
7918 | 183 if(mpvdec->control(sh,VDCTRL_QUERY_FORMAT,&out_fmt)==CONTROL_FALSE){ |
184 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: codec query_format(%s) returned FALSE\n",vo_format_name(out_fmt)); | |
5180 | 185 continue; |
7918 | 186 } |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
187 j=i; vo_flags=flags; if(flags&VFCAP_CSP_SUPPORTED_BY_HW) break; |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
188 } else |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
189 if(!palette && !(flags&(VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_CSP_SUPPORTED)) && (out_fmt==IMGFMT_RGB8||out_fmt==IMGFMT_BGR8)){ |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
190 sh->outfmtidx=j; // pass index to the control() function this way |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
191 if(mpvdec->control(sh,VDCTRL_QUERY_FORMAT,&out_fmt)!=CONTROL_FALSE) |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
192 palette=1; |
5180 | 193 } |
5075 | 194 } |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
195 if(j<0){ |
5075 | 196 // TODO: no match - we should use conversion... |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
197 if(strcmp(vf->info->name,"scale") && palette!=-1){ |
6993 | 198 mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_CouldNotFindColorspace); |
7978
ab15849ec648
10L ! Don't remove the scale filter if we don't added ourself
albeu
parents:
7971
diff
changeset
|
199 sc=vf=vf_open_filter(vf,"scale",NULL); |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
200 goto csp_again; |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
201 } else |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
202 if(palette==1){ |
11261 | 203 mp_msg(MSGT_DECVIDEO,MSGL_V,"vd: Trying -vf palette...\n"); |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
204 palette=-1; |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
205 vf=vf_open_filter(vf,"palette",NULL); |
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
206 goto csp_again; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29087
diff
changeset
|
207 } else |
9275
d29f03d5763c
- append the 'palette' filter if the codec supports RGB8/BGR8 and no csp
arpi
parents:
8579
diff
changeset
|
208 { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc |
7971 | 209 vf_instance_t* vo, *vp = NULL, *ve; |
7978
ab15849ec648
10L ! Don't remove the scale filter if we don't added ourself
albeu
parents:
7971
diff
changeset
|
210 // Remove the scale filter if we added it ourself |
ab15849ec648
10L ! Don't remove the scale filter if we don't added ourself
albeu
parents:
7971
diff
changeset
|
211 if(vf == sc) { |
7971 | 212 ve = vf; |
213 vf = vf->next; | |
214 vf_uninit_filter(ve); | |
215 } | |
216 // Find the last filter (vf_vo) | |
217 for(vo = vf ; vo->next ; vo = vo->next) | |
218 vp = vo; | |
219 if(vo->query_format(vo,IMGFMT_MPEGPES) && (!vp || (vp && strcmp(vp->info->name,"lavc")))) { | |
220 ve = vf_open_filter(vo,"lavc",NULL); | |
221 if(vp) vp->next = ve; | |
222 else vf = ve; | |
223 goto csp_again; | |
224 } | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
225 } |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
226 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_VOincompCodec); |
25962 | 227 sh->vf_initialized=-1; |
5075 | 228 return 0; // failed |
229 } | |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
230 out_fmt=sh->codec->outfmt[j]; |
29700
cd5b4ddc9546
Reduce console output verbosity: Move colorspace information to verbose mode.
diego
parents:
29263
diff
changeset
|
231 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
|
232 vo_format_name(out_fmt), j); |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
233 sh->outfmtidx=j; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
234 sh->vfilter=vf; |
5075 | 235 |
236 // autodetect flipping | |
237 if(flip==-1){ | |
238 flip=0; | |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
239 if(sh->codec->outflags[j]&CODECS_FLAG_FLIP) |
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
240 if(!(sh->codec->outflags[j]&CODECS_FLAG_NOFLIP)) |
5075 | 241 flip=1; |
242 } | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
243 if(vo_flags&VFCAP_FLIPPED) flip^=1; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
244 if(flip && !(vo_flags&VFCAP_FLIP)){ |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
245 // we need to flip, but no flipping filter avail. |
14183
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
246 vf_add_before_vo(&vf, "flip", NULL); |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
247 sh->vfilter = vf; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
248 } |
5075 | 249 |
250 // time to do aspect ratio corrections... | |
251 | |
252 if(movie_aspect>-1.0) sh->aspect = movie_aspect; // cmdline overrides autodetect | |
24299
725638f690bb
added .stream_aspect to st_video_t: if non-zero and if not specified otherwise
nicodvb
parents:
24146
diff
changeset
|
253 else if(sh->stream_aspect!=0.0) sh->aspect = sh->stream_aspect; |
5075 | 254 // if(!sh->aspect) sh->aspect=1.0; |
5903 | 255 |
256 if(opt_screen_size_x||opt_screen_size_y){ | |
257 screen_size_x = opt_screen_size_x; | |
258 screen_size_y = opt_screen_size_y; | |
259 if(!vidmode){ | |
5075 | 260 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X; |
261 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y; | |
262 if(screen_size_x<=8) screen_size_x*=sh->disp_w; | |
263 if(screen_size_y<=8) screen_size_y*=sh->disp_h; | |
5903 | 264 } |
5075 | 265 } else { |
266 // check source format aspect, calculate prescale ::atmos | |
267 screen_size_x=sh->disp_w; | |
268 screen_size_y=sh->disp_h; | |
7661
90118ab3c95c
argh. gcc sux. someone please explain why float x=0; if(x>0) ... is true.
arpi
parents:
7452
diff
changeset
|
269 if(screen_size_xy>=0.001){ |
5903 | 270 if(screen_size_xy<=8){ |
271 // -xy means x+y scale | |
272 screen_size_x*=screen_size_xy; | |
273 screen_size_y*=screen_size_xy; | |
274 } else { | |
275 // -xy means forced width while keeping correct aspect | |
276 screen_size_x=screen_size_xy; | |
277 screen_size_y=screen_size_xy*sh->disp_h/sh->disp_w; | |
278 } | |
279 } | |
5075 | 280 if(sh->aspect>0.01){ |
5903 | 281 int w; |
6993 | 282 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_MovieAspectIsSet,sh->aspect); |
19402 | 283 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ASPECT=%1.4f\n", sh->aspect); |
5903 | 284 w=(int)((float)screen_size_y*sh->aspect); w+=w%2; // round |
285 // we don't like horizontal downscale || user forced width: | |
286 if(w<screen_size_x || screen_size_xy>8){ | |
287 screen_size_y=(int)((float)screen_size_x*(1.0/sh->aspect)); | |
5075 | 288 screen_size_y+=screen_size_y%2; // round |
5903 | 289 } else screen_size_x=w; // keep new width |
5075 | 290 } else { |
6993 | 291 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_MovieAspectUndefined); |
5075 | 292 } |
293 } | |
294 | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
295 vocfg_flags = (fullscreen ? VOFLAG_FULLSCREEN:0) |
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
296 | (vidmode ? VOFLAG_MODESWITCHING:0) |
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
297 | (softzoom ? VOFLAG_SWSCALE:0) |
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
298 | (flip ? VOFLAG_FLIPPING:0); |
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
299 |
5075 | 300 // Time to config libvo! |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6993
diff
changeset
|
301 mp_msg(MSGT_CPLAYER,MSGL_V,"VO Config (%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", |
5075 | 302 sh->disp_w,sh->disp_h, |
303 screen_size_x,screen_size_y, | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
304 vocfg_flags, |
5075 | 305 "MPlayer",out_fmt); |
306 | |
14073 | 307 vf->w = sh->disp_w; |
308 vf->h = sh->disp_h; | |
14878 | 309 if(vf_config_wrapper(vf,sh->disp_w,sh->disp_h, |
310 screen_size_x,screen_size_y, | |
15212
05aa13cdf92f
replace VO and VF numeric flags with #defined identifiers
henry
parents:
14878
diff
changeset
|
311 vocfg_flags, |
14878 | 312 out_fmt)==0){ |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6993
diff
changeset
|
313 // "MPlayer",out_fmt)){ |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
314 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_CannotInitVO); |
25962 | 315 sh->vf_initialized=-1; |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
316 return 0; |
5075 | 317 } |
318 | |
25962 | 319 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
|
320 |
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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 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
|
329 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
|
330 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
|
331 |
4878 | 332 return 1; |
333 } | |
334 | |
335 // mp_imgtype: buffering type, see mp_image.h | |
336 // mp_imgflag: buffer requirements (read/write, preserve, stride limits), see mp_image.h | |
337 // returns NULL or allocated mp_image_t* | |
338 // Note: buffer allocation may be moved to mpcodecs_config_vo() later... | |
339 mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h){ | |
6234
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
340 mp_image_t* mpi=vf_get_image(sh->vfilter,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h); |
28603
679f41ece616
Make it possible for mpcodecs_get_image to return NULL as the
reimar
parents:
28594
diff
changeset
|
341 if (mpi) mpi->x=mpi->y=0; |
6234
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
342 return mpi; |
4878 | 343 } |
344 | |
7220
e3ecccc7e505
warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
7211
diff
changeset
|
345 void mpcodecs_draw_slice(sh_video_t *sh, unsigned char** src, int* stride, int w,int h, int x, int y) { |
6709 | 346 struct vf_instance_s* vf = sh->vfilter; |
347 | |
348 if(vf->draw_slice) | |
349 vf->draw_slice(vf,src,stride,w,h,x,y); | |
350 } |