Mercurial > mplayer.hg
annotate libmpcodecs/vd.c @ 8203:3af4919d9c5f
When you called mplayer with the absolute path to the video and the VOBSUB
subtitle is in a rar archive, mplayer tried to find the files in the archive
with the absolute path. The patch fixes the problem by getting rid of the
full path just trying the filename.
patch by Uwe.Reder@3SOFT.de
author | arpi |
---|---|
date | Sat, 16 Nov 2002 03:04:33 +0000 |
parents | 2be30233c532 |
children | cd02bf201f38 |
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 #ifdef HAVE_MALLOC_H | |
10 #include <malloc.h> | |
11 #endif | |
12 | |
13 #include "codec-cfg.h" | |
14 //#include "mp_image.h" | |
15 | |
5607 | 16 #include "img_format.h" |
4878 | 17 |
18 #include "stream.h" | |
19 #include "demuxer.h" | |
20 #include "stheader.h" | |
6057
31e465fda59c
various openbsd and general warning fixes - patch by Bj«Órn Sandell <biorn@dce.chalmers.se>
arpi
parents:
5925
diff
changeset
|
21 #include "dec_video.h" |
4878 | 22 |
23 #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
|
24 #include "vf.h" |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
25 |
4878 | 26 //#include "vd_internal.h" |
27 | |
28 extern vd_functions_t mpcodecs_vd_null; | |
4885 | 29 extern vd_functions_t mpcodecs_vd_cinepak; |
4915
f6990fad0ab3
Qt RPZA decoder interface by Roberto Togni <rtogni@bresciaonline.it>
arpi
parents:
4899
diff
changeset
|
30 extern vd_functions_t mpcodecs_vd_qtrpza; |
4951 | 31 extern vd_functions_t mpcodecs_vd_ffmpeg; |
4958 | 32 extern vd_functions_t mpcodecs_vd_dshow; |
4968 | 33 extern vd_functions_t mpcodecs_vd_vfw; |
34 extern vd_functions_t mpcodecs_vd_vfwex; | |
35 extern vd_functions_t mpcodecs_vd_odivx; | |
36 extern vd_functions_t mpcodecs_vd_divx4; | |
4969 | 37 extern vd_functions_t mpcodecs_vd_raw; |
38 extern vd_functions_t mpcodecs_vd_xanim; | |
5193
abea2deab4d6
MPlayer now has a Microsoft RLE decoder to call its own...only supports
melanson
parents:
5180
diff
changeset
|
39 extern vd_functions_t mpcodecs_vd_msrle; |
4987 | 40 extern vd_functions_t mpcodecs_vd_msvidc; |
41 extern vd_functions_t mpcodecs_vd_fli; | |
4989 | 42 extern vd_functions_t mpcodecs_vd_qtrle; |
43 extern vd_functions_t mpcodecs_vd_qtsmc; | |
44 extern vd_functions_t mpcodecs_vd_roqvideo; | |
45 extern vd_functions_t mpcodecs_vd_cyuv; | |
46 extern vd_functions_t mpcodecs_vd_nuv; | |
4998 | 47 extern vd_functions_t mpcodecs_vd_mpng; |
5029 | 48 extern vd_functions_t mpcodecs_vd_ijpg; |
7362 | 49 extern vd_functions_t mpcodecs_vd_mtga; |
4998 | 50 extern vd_functions_t mpcodecs_vd_libmpeg2; |
5235
3e04fd1074d3
added HuffYUV support, courtesy of Roberto Togni <rtogni@bresciaonline.it>
melanson
parents:
5224
diff
changeset
|
51 extern vd_functions_t mpcodecs_vd_huffyuv; |
5476 | 52 extern vd_functions_t mpcodecs_vd_mpegpes; |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
7124
diff
changeset
|
53 extern vd_functions_t mpcodecs_vd_realvid; |
6506 | 54 extern vd_functions_t mpcodecs_vd_svq1; |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
55 extern vd_functions_t mpcodecs_vd_xvid; |
6927 | 56 extern vd_functions_t mpcodecs_vd_libdv; |
7222
81f720e51821
added LCL decoder by Roberto Togni <r_togni@libero.it>, removed my old vd_zlib
alex
parents:
7220
diff
changeset
|
57 extern vd_functions_t mpcodecs_vd_lcl; |
7729 | 58 extern vd_functions_t mpcodecs_vd_lzo; |
8160 | 59 extern vd_functions_t mpcodecs_vd_qtvideo; |
4878 | 60 |
61 vd_functions_t* mpcodecs_vd_drivers[] = { | |
62 &mpcodecs_vd_null, | |
4884 | 63 &mpcodecs_vd_cinepak, |
4915
f6990fad0ab3
Qt RPZA decoder interface by Roberto Togni <rtogni@bresciaonline.it>
arpi
parents:
4899
diff
changeset
|
64 &mpcodecs_vd_qtrpza, |
4951 | 65 #ifdef USE_LIBAVCODEC |
66 &mpcodecs_vd_ffmpeg, | |
67 #endif | |
4968 | 68 #ifdef USE_WIN32DLL |
4958 | 69 #ifdef USE_DIRECTSHOW |
70 &mpcodecs_vd_dshow, | |
71 #endif | |
4968 | 72 &mpcodecs_vd_vfw, |
73 &mpcodecs_vd_vfwex, | |
74 #endif | |
75 #ifdef USE_DIVX | |
76 &mpcodecs_vd_odivx, | |
77 #ifdef NEW_DECORE | |
78 &mpcodecs_vd_divx4, | |
79 #endif | |
80 #endif | |
7729 | 81 &mpcodecs_vd_lzo, |
4969 | 82 &mpcodecs_vd_raw, |
5193
abea2deab4d6
MPlayer now has a Microsoft RLE decoder to call its own...only supports
melanson
parents:
5180
diff
changeset
|
83 &mpcodecs_vd_msrle, |
4987 | 84 &mpcodecs_vd_msvidc, |
85 &mpcodecs_vd_fli, | |
4989 | 86 &mpcodecs_vd_qtrle, |
87 &mpcodecs_vd_qtsmc, | |
88 &mpcodecs_vd_roqvideo, | |
89 &mpcodecs_vd_cyuv, | |
90 &mpcodecs_vd_nuv, | |
4969 | 91 #ifdef USE_XANIM |
92 &mpcodecs_vd_xanim, | |
93 #endif | |
4998 | 94 #ifdef HAVE_PNG |
95 &mpcodecs_vd_mpng, | |
96 #endif | |
5029 | 97 #ifdef HAVE_JPEG |
98 &mpcodecs_vd_ijpg, | |
99 #endif | |
7362 | 100 &mpcodecs_vd_mtga, |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
101 #ifdef USE_LIBMPEG2 |
4998 | 102 &mpcodecs_vd_libmpeg2, |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
103 #endif |
5235
3e04fd1074d3
added HuffYUV support, courtesy of Roberto Togni <rtogni@bresciaonline.it>
melanson
parents:
5224
diff
changeset
|
104 &mpcodecs_vd_huffyuv, |
5476 | 105 &mpcodecs_vd_mpegpes, |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6234
diff
changeset
|
106 #ifdef USE_REALCODECS |
7180
28677d779205
-afm/-vfm migration from ID (int) to NAME (string) - simplifies code and makes dlopen()'ing possible
arpi
parents:
7124
diff
changeset
|
107 &mpcodecs_vd_realvid, |
6343
d253cf4f43a9
realvideo support by Florian Schneider <flo-mplayer-dev@gmx.net>
arpi
parents:
6234
diff
changeset
|
108 #endif |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
109 #ifdef USE_SVQ1 |
6506 | 110 &mpcodecs_vd_svq1, |
8026
b465ba5897a3
usage of libmpeg2, liba52, mp3lib & svq1 can be disabled
arpi
parents:
7978
diff
changeset
|
111 #endif |
6701
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
112 #ifdef HAVE_XVID |
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
113 &mpcodecs_vd_xvid, |
522713337297
Support for Xvid using their new api. If divx4 compatiblity is disabeled
albeu
parents:
6506
diff
changeset
|
114 #endif |
6927 | 115 #ifdef HAVE_LIBDV095 |
7222
81f720e51821
added LCL decoder by Roberto Togni <r_togni@libero.it>, removed my old vd_zlib
alex
parents:
7220
diff
changeset
|
116 &mpcodecs_vd_libdv, |
6927 | 117 #endif |
7222
81f720e51821
added LCL decoder by Roberto Togni <r_togni@libero.it>, removed my old vd_zlib
alex
parents:
7220
diff
changeset
|
118 &mpcodecs_vd_lcl, |
8160 | 119 #ifdef USE_QTX_CODECS |
120 &mpcodecs_vd_qtvideo, | |
121 #endif | |
4878 | 122 NULL |
123 }; | |
124 | |
4971 | 125 #include "libvo/video_out.h" |
126 | |
5075 | 127 // libvo opts: |
128 int fullscreen=0; | |
129 int vidmode=0; | |
130 int softzoom=0; | |
131 int flip=-1; | |
132 int opt_screen_size_x=0; | |
133 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
|
134 float screen_size_xy=0; |
5075 | 135 float movie_aspect=-1.0; |
136 int vo_flags=0; | |
5483 | 137 int vd_use_slices=1; |
5075 | 138 |
5180 | 139 extern vd_functions_t* mpvdec; // FIXME! |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
140 extern int divx_quality; |
5180 | 141 |
4878 | 142 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
|
143 int i,j; |
5075 | 144 unsigned int out_fmt=0; |
145 int screen_size_x=0;//SCREEN_SIZE_X; | |
146 int screen_size_y=0;//SCREEN_SIZE_Y; | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
147 // vo_functions_t* video_out=sh->video_out; |
7978
ab15849ec648
10L ! Don't remove the scale filter if we don't added ourself
albeu
parents:
7971
diff
changeset
|
148 vf_instance_t* vf=sh->vfilter,*sc=NULL; |
5075 | 149 |
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 #if 1 |
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
|
151 if(!(sh->disp_w && sh->disp_h)) |
6993 | 152 mp_msg(MSGT_DECVIDEO,MSGL_WARN, MSGTR_CodecDidNotSet); |
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
|
153 /* XXX: HACK, if sh->disp_* aren't set, |
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
|
154 * but we have w and h, set them :: atmos */ |
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
|
155 if(!sh->disp_w && w) |
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
|
156 sh->disp_w=w; |
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
|
157 if(!sh->disp_h && h) |
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
|
158 sh->disp_h=h; |
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
|
159 #endif |
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
|
160 |
6993 | 161 mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_VoConfigRequest,w,h,vo_format_name(preferred_outfmt)); |
5075 | 162 |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
163 // if(!vf) return 1; // temp hack |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
164 |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
165 if(get_video_quality_max(sh)<=0 && divx_quality){ |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
166 // user wants postprocess but no pp filter yet: |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
167 sh->vfilter=vf=vf_open_filter(vf,"pp",NULL); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
168 } |
5077 | 169 |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
170 // 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
|
171 csp_again: |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
172 j=-1; |
5075 | 173 for(i=0;i<CODECS_MAX_OUTFMT;i++){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
174 int flags; |
5075 | 175 out_fmt=sh->codec->outfmt[i]; |
176 if(out_fmt==(signed int)0xFFFFFFFF) continue; | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
177 flags=vf->query_format(vf,out_fmt); |
7211 | 178 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: query(%s) returned 0x%X (i=%d) \n",vo_format_name(out_fmt),flags,i); |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
179 if((flags&2) || (flags && j<0)){ |
5180 | 180 // 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
|
181 sh->outfmtidx=j; // pass index to the control() function this way |
7918 | 182 if(mpvdec->control(sh,VDCTRL_QUERY_FORMAT,&out_fmt)==CONTROL_FALSE){ |
183 mp_msg(MSGT_CPLAYER,MSGL_DBG2,"vo_debug: codec query_format(%s) returned FALSE\n",vo_format_name(out_fmt)); | |
5180 | 184 continue; |
7918 | 185 } |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
186 j=i; vo_flags=flags; if(flags&2) break; |
5180 | 187 } |
5075 | 188 } |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
189 if(j<0){ |
5075 | 190 // TODO: no match - we should use conversion... |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
191 if(strcmp(vf->info->name,"scale")){ |
6993 | 192 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
|
193 sc=vf=vf_open_filter(vf,"scale",NULL); |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
194 goto csp_again; |
7971 | 195 } else { // sws failed, if the last filter (vf_vo) support MPEGPES try to append vf_lavc |
196 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
|
197 // 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
|
198 if(vf == sc) { |
7971 | 199 ve = vf; |
200 vf = vf->next; | |
201 vf_uninit_filter(ve); | |
202 } | |
203 // Find the last filter (vf_vo) | |
204 for(vo = vf ; vo->next ; vo = vo->next) | |
205 vp = vo; | |
206 if(vo->query_format(vo,IMGFMT_MPEGPES) && (!vp || (vp && strcmp(vp->info->name,"lavc")))) { | |
207 ve = vf_open_filter(vo,"lavc",NULL); | |
208 if(vp) vp->next = ve; | |
209 else vf = ve; | |
210 goto csp_again; | |
211 } | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
212 } |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
213 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_VOincompCodec); |
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
214 sh->vf_inited=-1; |
5075 | 215 return 0; // failed |
216 } | |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
217 out_fmt=sh->codec->outfmt[j]; |
7211 | 218 mp_msg(MSGT_CPLAYER,MSGL_INFO,"VDec: using %s as output csp (no %d)\n",vo_format_name(out_fmt),j); |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
219 sh->outfmtidx=j; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
220 sh->vfilter=vf; |
5075 | 221 |
222 // autodetect flipping | |
223 if(flip==-1){ | |
224 flip=0; | |
5131
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
225 if(sh->codec->outflags[j]&CODECS_FLAG_FLIP) |
cff03e88d331
prefer outfmt with no conversion (see vo's query flags)
arpi
parents:
5077
diff
changeset
|
226 if(!(sh->codec->outflags[j]&CODECS_FLAG_NOFLIP)) |
5075 | 227 flip=1; |
228 } | |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
229 if(vo_flags&VFCAP_FLIPPED) flip^=1; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
230 if(flip && !(vo_flags&VFCAP_FLIP)){ |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
231 // we need to flip, but no flipping filter avail. |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
232 sh->vfilter=vf=vf_open_filter(vf,"flip",NULL); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5549
diff
changeset
|
233 } |
5075 | 234 |
235 // time to do aspect ratio corrections... | |
236 | |
237 if(movie_aspect>-1.0) sh->aspect = movie_aspect; // cmdline overrides autodetect | |
238 // if(!sh->aspect) sh->aspect=1.0; | |
5903 | 239 |
240 if(opt_screen_size_x||opt_screen_size_y){ | |
241 screen_size_x = opt_screen_size_x; | |
242 screen_size_y = opt_screen_size_y; | |
243 if(!vidmode){ | |
5075 | 244 if(!screen_size_x) screen_size_x=SCREEN_SIZE_X; |
245 if(!screen_size_y) screen_size_y=SCREEN_SIZE_Y; | |
246 if(screen_size_x<=8) screen_size_x*=sh->disp_w; | |
247 if(screen_size_y<=8) screen_size_y*=sh->disp_h; | |
5903 | 248 } |
5075 | 249 } else { |
250 // check source format aspect, calculate prescale ::atmos | |
251 screen_size_x=sh->disp_w; | |
252 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
|
253 if(screen_size_xy>=0.001){ |
5903 | 254 if(screen_size_xy<=8){ |
255 // -xy means x+y scale | |
256 screen_size_x*=screen_size_xy; | |
257 screen_size_y*=screen_size_xy; | |
258 } else { | |
259 // -xy means forced width while keeping correct aspect | |
260 screen_size_x=screen_size_xy; | |
261 screen_size_y=screen_size_xy*sh->disp_h/sh->disp_w; | |
262 } | |
263 } | |
5075 | 264 if(sh->aspect>0.01){ |
5903 | 265 int w; |
6993 | 266 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_MovieAspectIsSet,sh->aspect); |
5903 | 267 w=(int)((float)screen_size_y*sh->aspect); w+=w%2; // round |
268 // we don't like horizontal downscale || user forced width: | |
269 if(w<screen_size_x || screen_size_xy>8){ | |
270 screen_size_y=(int)((float)screen_size_x*(1.0/sh->aspect)); | |
5075 | 271 screen_size_y+=screen_size_y%2; // round |
5903 | 272 } else screen_size_x=w; // keep new width |
5075 | 273 } else { |
6993 | 274 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_MovieAspectUndefined); |
5075 | 275 } |
276 } | |
277 | |
278 // 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
|
279 mp_msg(MSGT_CPLAYER,MSGL_V,"VO Config (%dx%d->%dx%d,flags=%d,'%s',0x%X)\n", |
5075 | 280 sh->disp_w,sh->disp_h, |
281 screen_size_x,screen_size_y, | |
282 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), | |
283 "MPlayer",out_fmt); | |
284 | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
285 if(vf->config(vf,sh->disp_w,sh->disp_h, |
5075 | 286 screen_size_x,screen_size_y, |
287 fullscreen|(vidmode<<1)|(softzoom<<2)|(flip<<3), | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
5483
diff
changeset
|
288 out_fmt)==0){ |
7124
eca7dbad0166
finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents:
6993
diff
changeset
|
289 // "MPlayer",out_fmt)){ |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
290 mp_msg(MSGT_CPLAYER,MSGL_WARN,MSGTR_CannotInitVO); |
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
291 sh->vf_inited=-1; |
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
292 return 0; |
5075 | 293 } |
294 | |
5925
3f17793b2cea
setting vf_inited flag, some printf->mp_msg, some MSGL_FATAL->MSGL_WARN
arpi
parents:
5903
diff
changeset
|
295 sh->vf_inited=1; |
4878 | 296 return 1; |
297 } | |
298 | |
299 // mp_imgtype: buffering type, see mp_image.h | |
300 // mp_imgflag: buffer requirements (read/write, preserve, stride limits), see mp_image.h | |
301 // returns NULL or allocated mp_image_t* | |
302 // Note: buffer allocation may be moved to mpcodecs_config_vo() later... | |
303 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
|
304 mp_image_t* mpi=vf_get_image(sh->vfilter,sh->codec->outfmt[sh->outfmtidx],mp_imgtype,mp_imgflag,w,h); |
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
305 mpi->x=mpi->y=0; |
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
306 mpi->w=sh->disp_w; |
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
307 mpi->h=sh->disp_h; |
af0b011c9440
setting mpi's w/h to disp_w/h. it fixes mpeg1 crash when height%16!=0
arpi
parents:
6138
diff
changeset
|
308 return mpi; |
4878 | 309 } |
310 | |
7220
e3ecccc7e505
warning fixes by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
7211
diff
changeset
|
311 void mpcodecs_draw_slice(sh_video_t *sh, unsigned char** src, int* stride, int w,int h, int x, int y) { |
6709 | 312 struct vf_instance_s* vf = sh->vfilter; |
313 | |
314 if(vf->draw_slice) | |
315 vf->draw_slice(vf,src,stride,w,h,x,y); | |
316 } |