Mercurial > mplayer.hg
annotate libmpcodecs/vf.c @ 36838:7df9dd22f234
Don't set win32 as audio driver if none has been given.
Select from the list of audio drivers instead.
Having win32 as selected item in the combo box although
this isn't used by MPlayer by default is confusing as well.
Besides that, there seem to be issues with this driver
when changing from or to it during playback.
author | ib |
---|---|
date | Tue, 25 Feb 2014 13:16:35 +0000 |
parents | d206960484fe |
children |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
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:
30112
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:
30112
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:
30112
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
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:
30112
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:
30112
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:
30112
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
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:
30112
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:
30112
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:
30112
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30112
diff
changeset
|
18 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
19 #include <stdio.h> |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
20 #include <stdlib.h> |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
21 #include <string.h> |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
22 |
17012 | 23 #include "config.h" |
28594
df67d03dde3b
Convert HAVE_MALLOC_H into a 0/1 definition, fixes the warning:
diego
parents:
28515
diff
changeset
|
24 #if HAVE_MALLOC_H |
6188 | 25 #include <malloc.h> |
26 #endif | |
27 | |
14073 | 28 #ifdef MP_DEBUG |
29 #include <assert.h> | |
30 #endif | |
31 | |
17012 | 32 #include "mp_msg.h" |
33 #include "help_mp.h" | |
34 #include "m_option.h" | |
35 #include "m_struct.h" | |
6994 | 36 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
37 |
5607 | 38 #include "img_format.h" |
39 #include "mp_image.h" | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
40 #include "vf.h" |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
41 |
17012 | 42 #include "libvo/fastmemcpy.h" |
35712
d206960484fe
Add a number of missing libavutil header #includes.
diego
parents:
35380
diff
changeset
|
43 #include "libavutil/common.h" |
31003
00825525514e
Replace memalign(x) (x > 8) by av_malloc() to prevent crashes on systems
zuxy
parents:
30807
diff
changeset
|
44 #include "libavutil/mem.h" |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
45 |
24968 | 46 extern const vf_info_t vf_info_1bpp; |
47 extern const vf_info_t vf_info_2xsai; | |
33967 | 48 extern const vf_info_t vf_info_ass; |
49 extern const vf_info_t vf_info_blackframe; | |
50 extern const vf_info_t vf_info_bmovl; | |
24968 | 51 extern const vf_info_t vf_info_boxblur; |
33967 | 52 extern const vf_info_t vf_info_crop; |
53 extern const vf_info_t vf_info_cropdetect; | |
54 extern const vf_info_t vf_info_decimate; | |
55 extern const vf_info_t vf_info_delogo; | |
56 extern const vf_info_t vf_info_denoise3d; | |
57 extern const vf_info_t vf_info_detc; | |
58 extern const vf_info_t vf_info_dint; | |
59 extern const vf_info_t vf_info_divtc; | |
24968 | 60 extern const vf_info_t vf_info_down3dright; |
33967 | 61 extern const vf_info_t vf_info_dsize; |
62 extern const vf_info_t vf_info_dvbscale; | |
63 extern const vf_info_t vf_info_eq2; | |
64 extern const vf_info_t vf_info_eq; | |
65 extern const vf_info_t vf_info_expand; | |
24968 | 66 extern const vf_info_t vf_info_field; |
33967 | 67 extern const vf_info_t vf_info_fil; |
68 extern const vf_info_t vf_info_filmdint; | |
69 extern const vf_info_t vf_info_fixpts; | |
70 extern const vf_info_t vf_info_flip; | |
71 extern const vf_info_t vf_info_format; | |
72 extern const vf_info_t vf_info_framestep; | |
73 extern const vf_info_t vf_info_fspp; | |
74 extern const vf_info_t vf_info_geq; | |
75 extern const vf_info_t vf_info_gradfun; | |
76 extern const vf_info_t vf_info_halfpack; | |
77 extern const vf_info_t vf_info_harddup; | |
24968 | 78 extern const vf_info_t vf_info_hqdn3d; |
33967 | 79 extern const vf_info_t vf_info_hue; |
80 extern const vf_info_t vf_info_il; | |
24968 | 81 extern const vf_info_t vf_info_ilpack; |
33967 | 82 extern const vf_info_t vf_info_ivtc; |
83 extern const vf_info_t vf_info_kerndeint; | |
84 extern const vf_info_t vf_info_lavc; | |
85 extern const vf_info_t vf_info_lavcdeint; | |
34102 | 86 extern const vf_info_t vf_info_lavfi; |
33967 | 87 extern const vf_info_t vf_info_mcdeint; |
88 extern const vf_info_t vf_info_mirror; | |
89 extern const vf_info_t vf_info_noformat; | |
90 extern const vf_info_t vf_info_noise; | |
91 extern const vf_info_t vf_info_ow; | |
92 extern const vf_info_t vf_info_palette; | |
93 extern const vf_info_t vf_info_perspective; | |
94 extern const vf_info_t vf_info_phase; | |
95 extern const vf_info_t vf_info_pp7; | |
96 extern const vf_info_t vf_info_pp; | |
97 extern const vf_info_t vf_info_pullup; | |
98 extern const vf_info_t vf_info_qp; | |
99 extern const vf_info_t vf_info_rectangle; | |
100 extern const vf_info_t vf_info_remove_logo; | |
101 extern const vf_info_t vf_info_rgbtest; | |
102 extern const vf_info_t vf_info_rotate; | |
103 extern const vf_info_t vf_info_sab; | |
104 extern const vf_info_t vf_info_scale; | |
105 extern const vf_info_t vf_info_screenshot; | |
106 extern const vf_info_t vf_info_smartblur; | |
24968 | 107 extern const vf_info_t vf_info_softpulldown; |
33967 | 108 extern const vf_info_t vf_info_softskip; |
109 extern const vf_info_t vf_info_spp; | |
110 extern const vf_info_t vf_info_stereo3d; | |
111 extern const vf_info_t vf_info_swapuv; | |
112 extern const vf_info_t vf_info_telecine; | |
113 extern const vf_info_t vf_info_test; | |
114 extern const vf_info_t vf_info_tfields; | |
24968 | 115 extern const vf_info_t vf_info_tile; |
33967 | 116 extern const vf_info_t vf_info_tinterlace; |
117 extern const vf_info_t vf_info_unsharp; | |
24968 | 118 extern const vf_info_t vf_info_uspp; |
33967 | 119 extern const vf_info_t vf_info_vo; |
120 extern const vf_info_t vf_info_yadif; | |
24968 | 121 extern const vf_info_t vf_info_yuvcsp; |
33967 | 122 extern const vf_info_t vf_info_yvu9; |
123 extern const vf_info_t vf_info_zrmjpeg; | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
124 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
125 // list of available filters: |
24968 | 126 static const vf_info_t* const filter_list[]={ |
6820
a99c7700e4f1
New plugin to test crop parameters. Arguments are the same as for the
kmkaplan
parents:
6708
diff
changeset
|
127 &vf_info_rectangle, |
22751
3d83d77f5a6b
Invert logic for HAVE_NO_POSIX_SELECT to HAVE_POSIX_SELECT to be in line
diego
parents:
21430
diff
changeset
|
128 #ifdef HAVE_POSIX_SELECT |
7855 | 129 &vf_info_bmovl, |
9832 | 130 #endif |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
131 &vf_info_crop, |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
132 &vf_info_expand, |
5522 | 133 &vf_info_scale, |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
134 // &vf_info_osd, |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
135 &vf_info_vo, |
5539 | 136 &vf_info_format, |
11927 | 137 &vf_info_noformat, |
5557 | 138 &vf_info_flip, |
5696 | 139 &vf_info_rotate, |
5763 | 140 &vf_info_mirror, |
5774 | 141 &vf_info_palette, |
26358 | 142 &vf_info_pp7, |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
31284
diff
changeset
|
143 #ifdef CONFIG_FFMPEG |
5873 | 144 &vf_info_lavc, |
6859 | 145 &vf_info_lavcdeint, |
34102 | 146 #ifdef CONFIG_VF_LAVFI |
147 &vf_info_lavfi, | |
148 #endif | |
26357 | 149 &vf_info_screenshot, |
33173 | 150 &vf_info_geq, |
5874 | 151 #endif |
34671
77e737045fbf
build: Separate libpostproc check from FFmpeg check.
diego
parents:
34665
diff
changeset
|
152 #ifdef CONFIG_POSTPROC |
77e737045fbf
build: Separate libpostproc check from FFmpeg check.
diego
parents:
34665
diff
changeset
|
153 &vf_info_pp, |
77e737045fbf
build: Separate libpostproc check from FFmpeg check.
diego
parents:
34665
diff
changeset
|
154 #endif |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
155 #ifdef CONFIG_ZR |
11662
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
11600
diff
changeset
|
156 &vf_info_zrmjpeg, |
173f22eb0505
vf_zrmjpeg MJPEG encoding filter, works together with vo_zr2. Only YV12
rik
parents:
11600
diff
changeset
|
157 #endif |
6000
34e396477d36
passthru mode for filters which don't alter image just config parameters (query_format/control/config)
arpi
parents:
5874
diff
changeset
|
158 &vf_info_dvbscale, |
6061 | 159 &vf_info_cropdetect, |
6278 | 160 &vf_info_test, |
6424 | 161 &vf_info_noise, |
6486 | 162 &vf_info_yvu9, |
7062
9eae15166ebb
soft video equalizer filter, currently supports brightness and
rfelker
parents:
6997
diff
changeset
|
163 &vf_info_eq, |
7517
9d433771b6d0
-vf eq2, LUT-based brightness/contrast/gamma correction (Y-only)
arpi
parents:
7369
diff
changeset
|
164 &vf_info_eq2, |
29371 | 165 &vf_info_gradfun, |
7155
66019eb62edc
"halfpack" (yuv planar 4:2:0 -> packed 4:2:2, half height) video filter
rfelker
parents:
7127
diff
changeset
|
166 &vf_info_halfpack, |
7369
b34b005ab4f8
drop-deinterlace (dint) filter by Andriy N. Gritsenko <andrej@lucky.net>
arpi
parents:
7368
diff
changeset
|
167 &vf_info_dint, |
7755
7637b72ef1f9
new filter: 1bpp - converts 1bpp image to yuv/rgb 8/16/32 bpp
arpi
parents:
7697
diff
changeset
|
168 &vf_info_1bpp, |
7919 | 169 &vf_info_2xsai, |
7966
a03235a5f395
new video filter: unsharp - does image (l/c/l+c) sharping/bluring
arpi
parents:
7919
diff
changeset
|
170 &vf_info_unsharp, |
8002 | 171 &vf_info_swapuv, |
8004
30789258ca66
(de)interleave filter (can be used to split/merge an interlaced image so other non interlaced filters an be used with idividual fields)
michael
parents:
8002
diff
changeset
|
172 &vf_info_il, |
11242
34770e3d9654
fast deinterleaver (= il filter with stride/width/height tricks)
michael
parents:
11141
diff
changeset
|
173 &vf_info_fil, |
8010 | 174 &vf_info_boxblur, |
8100 | 175 &vf_info_sab, |
8106 | 176 &vf_info_smartblur, |
8112 | 177 &vf_info_perspective, |
9404
7a43a52b9f60
down3dright filter by kabi (converts between 2 common stereoscopic systems)
michael
parents:
9179
diff
changeset
|
178 &vf_info_down3dright, |
9072
d7237ee9db7f
new video filter to extract a single field using stride arithmetic,
rfelker
parents:
8631
diff
changeset
|
179 &vf_info_field, |
9179
e93a0dd3ed56
new video filter: denoise3d - temporal&spatial noise reduction
arpi
parents:
9072
diff
changeset
|
180 &vf_info_denoise3d, |
9441
85fa92f14e99
vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
9404
diff
changeset
|
181 &vf_info_hqdn3d, |
9467
9fae4150ec43
experimental de-telecine filter. not documented or configurable yet,
rfelker
parents:
9441
diff
changeset
|
182 &vf_info_detc, |
9468
356963ad4784
filter for applying 3:2 telecine to 23.976 fps progressive material.
rfelker
parents:
9467
diff
changeset
|
183 &vf_info_telecine, |
10571
07cfe1e1a2c9
'tinterlace' filter (partial inverse of tfields) by Not Zed <notzed@ximian.com> (with minor fixes for current cvs by me)
alex
parents:
10510
diff
changeset
|
184 &vf_info_tinterlace, |
9514 | 185 &vf_info_tfields, |
9933
3548701a13fe
1. new alternate approach to inverse telecine! much better!
rfelker
parents:
9832
diff
changeset
|
186 &vf_info_ivtc, |
3548701a13fe
1. new alternate approach to inverse telecine! much better!
rfelker
parents:
9832
diff
changeset
|
187 &vf_info_ilpack, |
10006 | 188 &vf_info_dsize, |
10150
b34ede44dada
new filter for dropping (near-)duplicate frames. can be used to fix
rfelker
parents:
10140
diff
changeset
|
189 &vf_info_decimate, |
10510
73b3e4336cd4
Add mpeg2_flags to mp_image_t, copy flags in vd_libmpeg2.c,
ranma
parents:
10424
diff
changeset
|
190 &vf_info_softpulldown, |
10664
d47ca466c97b
pullup -- third generation inverse telecine engine. the backend
rfelker
parents:
10663
diff
changeset
|
191 &vf_info_pullup, |
11600
5eb66d37d539
Yet another inverse telecine filter by Zoltan Hidvegi <mplayer@hzoli.2y.net>. Also heavily MMX centric.
alex
parents:
11536
diff
changeset
|
192 &vf_info_filmdint, |
10751 | 193 &vf_info_framestep, |
194 &vf_info_tile, | |
10809 | 195 &vf_info_delogo, |
15697 | 196 &vf_info_remove_logo, |
11249 | 197 &vf_info_hue, |
32142
4614728cab25
build system: Merge all FFmpeg library checks into a single FFmpeg check.
diego
parents:
31284
diff
changeset
|
198 #ifdef CONFIG_FFMPEG_A |
11277 | 199 &vf_info_spp, |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
16446
diff
changeset
|
200 &vf_info_uspp, |
15631
d5a95e6f5f07
faster spp filter by Nikolaj Poroshin <porosh3 at psu ru>
henry
parents:
14930
diff
changeset
|
201 &vf_info_fspp, |
17882
8dd9503e4d19
compile in the filters that depend on libavcodec/dsputil.h only when mplayer is configured to use the imported libavcodec
nicodvb
parents:
17566
diff
changeset
|
202 &vf_info_qp, |
18635
f8cc2c4fe116
vf_mcdeint should be compiled in #ifdef USE_LIBAVCODEC_DSPUTIL, not #ifdef USE_LIBAVCODEC
nicodvb
parents:
18608
diff
changeset
|
203 &vf_info_mcdeint, |
11277 | 204 #endif |
11536 | 205 &vf_info_yuvcsp, |
11869 | 206 &vf_info_kerndeint, |
11894
4c24bad2a86b
rgb test pattern generator, so we could change everything to match alex's definition of rgb/bgr
michael
parents:
11869
diff
changeset
|
207 &vf_info_rgbtest, |
12081
e34700c872ac
vf_phase filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
11998
diff
changeset
|
208 &vf_info_phase, |
12225
eb79a6192b2b
New filter by Ville Saari (114263 at foo dot bar dot org)
rfelker
parents:
12081
diff
changeset
|
209 &vf_info_divtc, |
12334
eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
rfelker
parents:
12225
diff
changeset
|
210 &vf_info_harddup, |
12337
6f1b4c989914
soft skipping for mencoder. rather than skipping decoding/filtering
rfelker
parents:
12334
diff
changeset
|
211 &vf_info_softskip, |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26358
diff
changeset
|
212 #ifdef CONFIG_ASS |
18937
9e95ac641e77
Initial libass release (without mencoder support).
eugeni
parents:
18917
diff
changeset
|
213 &vf_info_ass, |
9e95ac641e77
Initial libass release (without mencoder support).
eugeni
parents:
18917
diff
changeset
|
214 #endif |
18608 | 215 &vf_info_yadif, |
19094 | 216 &vf_info_blackframe, |
24677 | 217 &vf_info_ow, |
30807 | 218 &vf_info_fixpts, |
32441 | 219 &vf_info_stereo3d, |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
220 NULL |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
221 }; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
222 |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
223 // For the vf option |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
224 m_obj_settings_t* vf_settings = NULL; |
24968 | 225 const m_obj_list_t vf_obj_list = { |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
226 (void**)filter_list, |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
227 M_ST_OFF(vf_info_t,name), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
228 M_ST_OFF(vf_info_t,info), |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
229 M_ST_OFF(vf_info_t,opts) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
230 }; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
231 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
232 //============================================================================ |
5661 | 233 // mpi stuff: |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
234 |
5661 | 235 void vf_mpi_clear(mp_image_t* mpi,int x0,int y0,int w,int h){ |
236 int y; | |
237 if(mpi->flags&MP_IMGFLAG_PLANAR){ | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
238 y0&=~1;h+=h&1; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
239 if(x0==0 && w==mpi->width){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
240 // full width clear: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
241 memset(mpi->planes[0]+mpi->stride[0]*y0,0,mpi->stride[0]*h); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
242 memset(mpi->planes[1]+mpi->stride[1]*(y0>>mpi->chroma_y_shift),128,mpi->stride[1]*(h>>mpi->chroma_y_shift)); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
243 memset(mpi->planes[2]+mpi->stride[2]*(y0>>mpi->chroma_y_shift),128,mpi->stride[2]*(h>>mpi->chroma_y_shift)); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
244 } else |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
245 for(y=y0;y<y0+h;y+=2){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
246 memset(mpi->planes[0]+x0+mpi->stride[0]*y,0,w); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
247 memset(mpi->planes[0]+x0+mpi->stride[0]*(y+1),0,w); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
248 memset(mpi->planes[1]+(x0>>mpi->chroma_x_shift)+mpi->stride[1]*(y>>mpi->chroma_y_shift),128,(w>>mpi->chroma_x_shift)); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
249 memset(mpi->planes[2]+(x0>>mpi->chroma_x_shift)+mpi->stride[2]*(y>>mpi->chroma_y_shift),128,(w>>mpi->chroma_x_shift)); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
250 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
251 return; |
5661 | 252 } |
253 // packed: | |
254 for(y=y0;y<y0+h;y++){ | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
255 unsigned char* dst=mpi->planes[0]+mpi->stride[0]*y+(mpi->bpp>>3)*x0; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
256 if(mpi->flags&MP_IMGFLAG_YUV){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
257 unsigned int* p=(unsigned int*) dst; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
258 int size=(mpi->bpp>>3)*w/4; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
259 int i; |
29401
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29371
diff
changeset
|
260 #if HAVE_BIGENDIAN |
12515 | 261 #define CLEAR_PACKEDYUV_PATTERN 0x00800080 |
262 #define CLEAR_PACKEDYUV_PATTERN_SWAPPED 0x80008000 | |
263 #else | |
264 #define CLEAR_PACKEDYUV_PATTERN 0x80008000 | |
265 #define CLEAR_PACKEDYUV_PATTERN_SWAPPED 0x00800080 | |
266 #endif | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
267 if(mpi->flags&MP_IMGFLAG_SWAPPED){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
268 for(i=0;i<size-3;i+=4) p[i]=p[i+1]=p[i+2]=p[i+3]=CLEAR_PACKEDYUV_PATTERN_SWAPPED; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
269 for(;i<size;i++) p[i]=CLEAR_PACKEDYUV_PATTERN_SWAPPED; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
270 } else { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
271 for(i=0;i<size-3;i+=4) p[i]=p[i+1]=p[i+2]=p[i+3]=CLEAR_PACKEDYUV_PATTERN; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
272 for(;i<size;i++) p[i]=CLEAR_PACKEDYUV_PATTERN; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
273 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
274 } else |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
275 memset(dst,0,(mpi->bpp>>3)*w); |
5661 | 276 } |
277 } | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
278 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
279 mp_image_t* vf_get_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype, int mp_imgflag, int w, int h){ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
280 mp_image_t* mpi=NULL; |
14073 | 281 int w2; |
34861 | 282 int number = (mp_imgtype >> 16) - 1; |
35256 | 283 int missing_palette; |
14073 | 284 |
285 #ifdef MP_DEBUG | |
286 assert(w == -1 || w >= vf->w); | |
287 assert(h == -1 || h >= vf->h); | |
288 assert(vf->w > 0); | |
289 assert(vf->h > 0); | |
290 #endif | |
291 | |
292 // fprintf(stderr, "get_image: %d:%d, vf: %d:%d\n", w,h,vf->w,vf->h); | |
293 | |
294 if (w == -1) w = vf->w; | |
295 if (h == -1) h = vf->h; | |
296 | |
34665
ca53dc5326fa
Adjust MPlayer default alignment values to match FFmpeg's.
reimar
parents:
34216
diff
changeset
|
297 w2=(mp_imgflag&MP_IMGFLAG_ACCEPT_ALIGNED_STRIDE)?FFALIGN(w, 32):w; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
298 |
6000
34e396477d36
passthru mode for filters which don't alter image just config parameters (query_format/control/config)
arpi
parents:
5874
diff
changeset
|
299 if(vf->put_image==vf_next_put_image){ |
21426
059b4a6b78cf
Update comment, video output plugins are deprecated.
diego
parents:
20723
diff
changeset
|
300 // passthru mode, if the filter uses the fallback/default put_image() code |
35041 | 301 mpi = vf_get_image(vf->next,outfmt,mp_imgtype,mp_imgflag,w,h); |
302 mpi->usage_count++; | |
303 return mpi; | |
6000
34e396477d36
passthru mode for filters which don't alter image just config parameters (query_format/control/config)
arpi
parents:
5874
diff
changeset
|
304 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
305 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
306 // Note: we should call libvo first to check if it supports direct rendering |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
307 // and if not, then fallback to software buffers: |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
308 switch(mp_imgtype & 0xff){ |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
309 case MP_IMGTYPE_EXPORT: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
310 if(!vf->imgctx.export_images[0]) vf->imgctx.export_images[0]=new_mp_image(w2,h); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
311 mpi=vf->imgctx.export_images[0]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
312 break; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
313 case MP_IMGTYPE_STATIC: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
314 if(!vf->imgctx.static_images[0]) vf->imgctx.static_images[0]=new_mp_image(w2,h); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
315 mpi=vf->imgctx.static_images[0]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
316 break; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
317 case MP_IMGTYPE_TEMP: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
318 if(!vf->imgctx.temp_images[0]) vf->imgctx.temp_images[0]=new_mp_image(w2,h); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
319 mpi=vf->imgctx.temp_images[0]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
320 break; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
321 case MP_IMGTYPE_IPB: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
322 if(!(mp_imgflag&MP_IMGFLAG_READABLE)){ // B frame: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
323 if(!vf->imgctx.temp_images[0]) vf->imgctx.temp_images[0]=new_mp_image(w2,h); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
324 mpi=vf->imgctx.temp_images[0]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
325 break; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
326 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
327 case MP_IMGTYPE_IP: |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
328 if(!vf->imgctx.static_images[vf->imgctx.static_idx]) vf->imgctx.static_images[vf->imgctx.static_idx]=new_mp_image(w2,h); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
329 mpi=vf->imgctx.static_images[vf->imgctx.static_idx]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
330 vf->imgctx.static_idx^=1; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
331 break; |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
332 case MP_IMGTYPE_NUMBERED: |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
333 if (number == -1) { |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
334 int i; |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
335 for (i = 0; i < NUM_NUMBERED_MPI; i++) |
28956
6d0da4fd4544
Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents:
28602
diff
changeset
|
336 if (!vf->imgctx.numbered_images[i] || !vf->imgctx.numbered_images[i]->usage_count) |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
337 break; |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
338 number = i; |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
339 } |
34861 | 340 if (number < 0 || number >= NUM_NUMBERED_MPI) { |
341 mp_msg(MSGT_VFILTER, MSGL_FATAL, "Ran out of numbered images, expect crash. Filter before %s is broken.\n", vf->info->name); | |
342 return NULL; | |
343 } | |
28515
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
344 if (!vf->imgctx.numbered_images[number]) vf->imgctx.numbered_images[number] = new_mp_image(w2,h); |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
345 mpi = vf->imgctx.numbered_images[number]; |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
346 mpi->number = number; |
134689b7b548
Add MP_IMGTYPE_NUMBERED which gives access to the kind of mp_image_t that
reimar
parents:
28299
diff
changeset
|
347 break; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
348 } |
35256 | 349 |
350 if (!mpi) | |
351 return NULL; | |
352 | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
353 mpi->type=mp_imgtype; |
14073 | 354 mpi->w=vf->w; mpi->h=vf->h; |
6875 | 355 // keep buffer allocation status & color flags only: |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
356 // mpi->flags&=~(MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE|MP_IMGFLAG_DIRECT); |
6875 | 357 mpi->flags&=MP_IMGFLAG_ALLOCATED|MP_IMGFLAG_TYPE_DISPLAYED|MP_IMGFLAGMASK_COLORS; |
30074 | 358 // accept restrictions, draw_slice and palette flags only: |
359 mpi->flags|=mp_imgflag&(MP_IMGFLAGMASK_RESTRICTIONS|MP_IMGFLAG_DRAW_CALLBACK|MP_IMGFLAG_RGB_PALETTE); | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
360 if(!vf->draw_slice) mpi->flags&=~MP_IMGFLAG_DRAW_CALLBACK; |
35256 | 361 missing_palette = !(mpi->flags & MP_IMGFLAG_RGB_PALETTE) && (mp_imgflag & MP_IMGFLAG_RGB_PALETTE); |
35380
b18c14526662
Fix incorrect mp_image allocations when the input format changes.
reimar
parents:
35256
diff
changeset
|
362 if(mpi->width!=w2 || mpi->height!=h || mpi->imgfmt != outfmt || missing_palette){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
363 // printf("vf.c: MPI parameters changed! %dx%d -> %dx%d \n", mpi->width,mpi->height,w2,h); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
364 if(mpi->flags&MP_IMGFLAG_ALLOCATED){ |
35380
b18c14526662
Fix incorrect mp_image allocations when the input format changes.
reimar
parents:
35256
diff
changeset
|
365 if(mpi->width<w2 || mpi->height<h || mpi->imgfmt != outfmt || missing_palette){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
366 // need to re-allocate buffer memory: |
34216 | 367 av_freep(&mpi->planes[0]); |
368 if (mpi->flags & MP_IMGFLAG_RGB_PALETTE) | |
369 av_freep(&mpi->planes[1]); | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
370 mpi->flags&=~MP_IMGFLAG_ALLOCATED; |
35380
b18c14526662
Fix incorrect mp_image allocations when the input format changes.
reimar
parents:
35256
diff
changeset
|
371 mpi->bpp = 0; |
34889
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
372 mp_msg(MSGT_VFILTER,MSGL_V,"vf.c: have to REALLOCATE buffer memory in vf_%s :(\n", |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
373 vf->info->name); |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
374 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
375 // } else { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
376 } { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
377 mpi->width=w2; mpi->chroma_width=(w2 + (1<<mpi->chroma_x_shift) - 1)>>mpi->chroma_x_shift; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
378 mpi->height=h; mpi->chroma_height=(h + (1<<mpi->chroma_y_shift) - 1)>>mpi->chroma_y_shift; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
379 } |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
380 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
381 if(!mpi->bpp) mp_image_setfmt(mpi,outfmt); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
382 if(!(mpi->flags&MP_IMGFLAG_ALLOCATED) && mpi->type>MP_IMGTYPE_EXPORT){ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
383 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
384 // check libvo first! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
385 if(vf->get_image) vf->get_image(vf,mpi); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
386 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
387 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
6524 | 388 // non-direct and not yet allocated image. allocate it! |
28602
4cc1fbdaad5f
Print an error and return NULL in vf_get_image if we try to allocate
reimar
parents:
28594
diff
changeset
|
389 if (!mpi->bpp) { // no way we can allocate this |
4cc1fbdaad5f
Print an error and return NULL in vf_get_image if we try to allocate
reimar
parents:
28594
diff
changeset
|
390 mp_msg(MSGT_DECVIDEO, MSGL_FATAL, |
4cc1fbdaad5f
Print an error and return NULL in vf_get_image if we try to allocate
reimar
parents:
28594
diff
changeset
|
391 "vf_get_image: Tried to allocate a format that can not be allocated!\n"); |
4cc1fbdaad5f
Print an error and return NULL in vf_get_image if we try to allocate
reimar
parents:
28594
diff
changeset
|
392 return NULL; |
4cc1fbdaad5f
Print an error and return NULL in vf_get_image if we try to allocate
reimar
parents:
28594
diff
changeset
|
393 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
394 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
395 // check if codec prefer aligned stride: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
396 if(mp_imgflag&MP_IMGFLAG_PREFER_ALIGNED_STRIDE){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
397 int align=(mpi->flags&MP_IMGFLAG_PLANAR && |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
398 mpi->flags&MP_IMGFLAG_YUV) ? |
34665
ca53dc5326fa
Adjust MPlayer default alignment values to match FFmpeg's.
reimar
parents:
34216
diff
changeset
|
399 (16<<mpi->chroma_x_shift) : 32; // -- maybe FIXME |
ca53dc5326fa
Adjust MPlayer default alignment values to match FFmpeg's.
reimar
parents:
34216
diff
changeset
|
400 w2=FFALIGN(w, align); |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
401 if(mpi->width!=w2){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
402 // we have to change width... check if we CAN co it: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
403 int flags=vf->query_format(vf,outfmt); // should not fail |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
404 if(!(flags&3)) mp_msg(MSGT_DECVIDEO,MSGL_WARN,"??? vf_get_image{vf->query_format(outfmt)} failed!\n"); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
405 // printf("query -> 0x%X \n",flags); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
406 if(flags&VFCAP_ACCEPT_STRIDE){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
407 mpi->width=w2; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
408 mpi->chroma_width=(w2 + (1<<mpi->chroma_x_shift) - 1)>>mpi->chroma_x_shift; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
409 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
410 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
411 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
412 |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
413 mp_image_alloc_planes(mpi); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
414 // printf("clearing img!\n"); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
415 vf_mpi_clear(mpi,0,0,mpi->width,mpi->height); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
416 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
417 } |
9490
48ac3ce565ab
start_slice() added - similar to get_image(), but is called when using slices
arpi
parents:
9468
diff
changeset
|
418 if(mpi->flags&MP_IMGFLAG_DRAW_CALLBACK) |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
419 if(vf->start_slice) vf->start_slice(vf,mpi); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
420 if(!(mpi->flags&MP_IMGFLAG_TYPE_DISPLAYED)){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
421 mp_msg(MSGT_DECVIDEO,MSGL_V,"*** [%s] %s%s mp_image_t, %dx%dx%dbpp %s %s, %d bytes\n", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
422 vf->info->name, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
423 (mpi->type==MP_IMGTYPE_EXPORT)?"Exporting": |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
424 ((mpi->flags&MP_IMGFLAG_DIRECT)?"Direct Rendering":"Allocating"), |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
425 (mpi->flags&MP_IMGFLAG_DRAW_CALLBACK)?" (slices)":"", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
426 mpi->width,mpi->height,mpi->bpp, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
427 (mpi->flags&MP_IMGFLAG_YUV)?"YUV":((mpi->flags&MP_IMGFLAG_SWAPPED)?"BGR":"RGB"), |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
428 (mpi->flags&MP_IMGFLAG_PLANAR)?"planar":"packed", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
429 mpi->bpp*mpi->width*mpi->height/8); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
430 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"(imgfmt: %x, planes: %p,%p,%p strides: %d,%d,%d, chroma: %dx%d, shift: h:%d,v:%d)\n", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
431 mpi->imgfmt, mpi->planes[0], mpi->planes[1], mpi->planes[2], |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
432 mpi->stride[0], mpi->stride[1], mpi->stride[2], |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
433 mpi->chroma_width, mpi->chroma_height, mpi->chroma_x_shift, mpi->chroma_y_shift); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
434 mpi->flags|=MP_IMGFLAG_TYPE_DISPLAYED; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
435 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
436 |
18301 | 437 mpi->qscale = NULL; |
28956
6d0da4fd4544
Allow to use vdpau temporal deinterlacers with hardware accelerated decoding.
cehoyos
parents:
28602
diff
changeset
|
438 mpi->usage_count++; |
34889
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
439 // TODO: figure out what is going on with EXPORT types |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
440 if (mpi->usage_count > 1 && mpi->type != MP_IMGTYPE_EXPORT) |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
441 mp_msg(MSGT_VFILTER, MSGL_V, "Suspicious mp_image usage count %i in vf_%s (type %i)\n", |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
442 mpi->usage_count, vf->info->name, mpi->type); |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
443 // printf("\rVF_MPI: %p %p %p %d %d %d \n", |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
444 // mpi->planes[0],mpi->planes[1],mpi->planes[2], |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
445 // mpi->stride[0],mpi->stride[1],mpi->stride[2]); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
446 return mpi; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
447 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
448 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
449 //============================================================================ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
450 |
7979
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
451 // By default vf doesn't accept MPEGPES |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
452 static int vf_default_query_format(struct vf_instance *vf, unsigned int fmt){ |
7979
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
453 if(fmt == IMGFMT_MPEGPES) return 0; |
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
454 return vf_next_query_format(vf,fmt); |
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
455 } |
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
456 |
24968 | 457 vf_instance_t* vf_open_plugin(const vf_info_t* const* filter_list, vf_instance_t* next, const char *name, char **args){ |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
458 vf_instance_t* vf; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
459 int i; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
460 for(i=0;;i++){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
461 if(!filter_list[i]){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
462 mp_msg(MSGT_VFILTER,MSGL_ERR,MSGTR_CouldNotFindVideoFilter,name); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
463 return NULL; // no such filter! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
464 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
465 if(!strcmp(filter_list[i]->name,name)) break; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
466 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
467 vf=malloc(sizeof(vf_instance_t)); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
468 memset(vf,0,sizeof(vf_instance_t)); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
469 vf->info=filter_list[i]; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
470 vf->next=next; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
471 vf->config=vf_next_config; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
472 vf->control=vf_next_control; |
7979
64f468cbedcd
The default query_format shouldn't accept IMGFMT_MPEGPES
albeu
parents:
7966
diff
changeset
|
473 vf->query_format=vf_default_query_format; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
474 vf->put_image=vf_next_put_image; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
475 vf->default_caps=VFCAP_ACCEPT_STRIDE; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
476 vf->default_reqs=0; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
477 if(vf->info->opts) { // vf_vo get some special argument |
24968 | 478 const m_struct_t* st = vf->info->opts; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
479 void* vf_priv = m_struct_alloc(st); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
480 int n; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
481 for(n = 0 ; args && args[2*n] ; n++) |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
482 m_struct_set(st,vf_priv,args[2*n],args[2*n+1]); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
483 vf->priv = vf_priv; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
484 args = NULL; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
485 } else // Otherwise we should have the '_oldargs_' |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
486 if(args && !strcmp(args[0],"_oldargs_")) |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
487 args = (char**)args[1]; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
488 else |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
489 args = NULL; |
30638
a7b908875c14
Rename open() vf initialization function to vf_open().
diego
parents:
30421
diff
changeset
|
490 if(vf->info->vf_open(vf,(char*)args)>0) return vf; // Success! |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
491 free(vf); |
6993 | 492 mp_msg(MSGT_VFILTER,MSGL_ERR,MSGTR_CouldNotOpenVideoFilter,name); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
493 return NULL; |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
494 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
495 |
18980
ed69754aa58d
Marks several string parameters as const when they are not modified in the function, Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents:
18937
diff
changeset
|
496 vf_instance_t* vf_open_filter(vf_instance_t* next, const char *name, char **args){ |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
497 if(args && strcmp(args[0],"_oldargs_")) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
498 int i,l = 0; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
499 for(i = 0 ; args && args[2*i] ; i++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
500 l += 1 + strlen(args[2*i]) + 1 + strlen(args[2*i+1]); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
501 l += strlen(name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
502 { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
503 char str[l+1]; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
504 char* p = str; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
505 p += sprintf(str,"%s",name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
506 for(i = 0 ; args && args[2*i] ; i++) |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
507 p += sprintf(p," %s=%s",args[2*i],args[2*i+1]); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
508 mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter "[%s]\n",str); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
509 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
510 } else if(strcmp(name,"vo")) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
511 if(args && strcmp(args[0],"_oldargs_") == 0) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
512 mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
513 "[%s=%s]\n", name,args[1]); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
514 else |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
515 mp_msg(MSGT_VFILTER,MSGL_INFO,MSGTR_OpeningVideoFilter |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
516 "[%s]\n", name); |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
517 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
518 return vf_open_plugin(filter_list,next,name,args); |
5550 | 519 } |
520 | |
14183
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
521 /** |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
522 * \brief adds a filter before the last one (which should be the vo filter). |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
523 * \param vf start of the filter chain. |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
524 * \param name name of the filter to add. |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
525 * \param args argument list for the filter. |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
526 * \return pointer to the filter instance that was created. |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
527 */ |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
528 vf_instance_t* vf_add_before_vo(vf_instance_t **vf, char *name, char **args) { |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
529 vf_instance_t *vo, *prev = NULL, *new; |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
530 // Find the last filter (should be vf_vo) |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
531 for (vo = *vf; vo->next; vo = vo->next) |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
532 prev = vo; |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
533 new = vf_open_filter(vo, name, args); |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
534 if (prev) |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
535 prev->next = new; |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
536 else |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
537 *vf = new; |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
538 return new; |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
539 } |
c9ff4fe2caaf
add the flip filter at the end of the filter chain.
reimar
parents:
14073
diff
changeset
|
540 |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
541 //============================================================================ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
542 |
24968 | 543 unsigned int vf_match_csp(vf_instance_t** vfp,const unsigned int* list,unsigned int preferred){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
544 vf_instance_t* vf=*vfp; |
24968 | 545 const unsigned int* p; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
546 unsigned int best=0; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
547 int ret; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
548 if((p=list)) while(*p){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
549 ret=vf->query_format(vf,*p); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
550 mp_msg(MSGT_VFILTER,MSGL_V,"[%s] query(%s) -> %d\n",vf->info->name,vo_format_name(*p),ret&3); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
551 if(ret&2){ best=*p; break;} // no conversion -> bingo! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
552 if(ret&1 && !best) best=*p; // best with conversion |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
553 ++p; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
554 } |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
555 if(best) return best; // bingo, they have common csp! |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
556 // ok, then try with scale: |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
557 if(vf->info == &vf_info_scale) return 0; // avoid infinite recursion! |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
558 vf=vf_open_filter(vf,"scale",NULL); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
559 if(!vf) return 0; // failed to init "scale" |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
560 // try the preferred csp first: |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
561 if(preferred && vf->query_format(vf,preferred)) best=preferred; else |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
562 // try the list again, now with "scaler" : |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
563 if((p=list)) while(*p){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
564 ret=vf->query_format(vf,*p); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
565 mp_msg(MSGT_VFILTER,MSGL_V,"[%s] query(%s) -> %d\n",vf->info->name,vo_format_name(*p),ret&3); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
566 if(ret&2){ best=*p; break;} // no conversion -> bingo! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
567 if(ret&1 && !best) best=*p; // best with conversion |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
568 ++p; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
569 } |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
570 if(best) *vfp=vf; // else uninit vf !FIXME! |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
571 return best; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
572 } |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
573 |
9934 | 574 void vf_clone_mpi_attributes(mp_image_t* dst, mp_image_t* src){ |
575 dst->pict_type= src->pict_type; | |
10663 | 576 dst->fields = src->fields; |
9934 | 577 dst->qscale_type= src->qscale_type; |
578 if(dst->width == src->width && dst->height == src->height){ | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
579 dst->qstride= src->qstride; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
580 dst->qscale= src->qscale; |
9934 | 581 } |
582 } | |
18917
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
583 |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
584 void vf_queue_frame(vf_instance_t *vf, int (*func)(vf_instance_t *)) |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
585 { |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
586 vf->continue_buffered_image = func; |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
587 } |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
588 |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
589 // Output the next buffered image (if any) from the filter chain. |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
590 // The queue could be kept as a simple stack/list instead avoiding the |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
591 // looping here, but there's currently no good context variable where |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
592 // that could be stored so this was easier to implement. |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
593 |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
594 int vf_output_queued_frame(vf_instance_t *vf) |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
595 { |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
596 while (1) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
597 int ret; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
598 vf_instance_t *current; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
599 vf_instance_t *last=NULL; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
600 int (*tmp)(vf_instance_t *); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
601 for (current = vf; current; current = current->next) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
602 if (current->continue_buffered_image) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
603 last = current; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
604 if (!last) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
605 return 0; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
606 tmp = last->continue_buffered_image; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
607 last->continue_buffered_image = NULL; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
608 ret = tmp(last); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
609 if (ret > 0) { |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
610 vf->control(vf, VFCTRL_DRAW_OSD, NULL); |
28176
7a87b07db9c6
Fix OSD flickering with filters that add frames (tfields, yadif) and
reimar
parents:
28174
diff
changeset
|
611 #ifdef CONFIG_ASS |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
612 vf->control(vf, VFCTRL_DRAW_EOSD, NULL); |
28176
7a87b07db9c6
Fix OSD flickering with filters that add frames (tfields, yadif) and
reimar
parents:
28174
diff
changeset
|
613 #endif |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
614 } |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
615 if (ret) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
616 return ret; |
18917
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
617 } |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
618 } |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
619 |
d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
uau
parents:
18635
diff
changeset
|
620 |
14878 | 621 /** |
622 * \brief Video config() function wrapper | |
623 * | |
624 * Blocks config() calls with different size or format for filters | |
625 * with VFCAP_CONSTANT | |
626 * | |
627 * First call is redirected to vf->config. | |
628 * | |
629 * In following calls, it verifies that the configuration parameters | |
630 * are unchanged, and returns either success or error. | |
631 * | |
632 */ | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
633 int vf_config_wrapper(struct vf_instance *vf, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
634 int width, int height, int d_width, int d_height, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
635 unsigned int flags, unsigned int outfmt) |
14878 | 636 { |
17198 | 637 int r; |
14878 | 638 if ((vf->default_caps&VFCAP_CONSTANT) && vf->fmt.have_configured) { |
639 if ((vf->fmt.orig_width != width) | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
640 || (vf->fmt.orig_height != height) |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
641 || (vf->fmt.orig_fmt != outfmt)) { |
14930 | 642 mp_msg(MSGT_VFILTER,MSGL_ERR,MSGTR_ResolutionDoesntMatch); |
14878 | 643 return 0; |
644 } | |
645 return 1; | |
646 } | |
647 vf->fmt.have_configured = 1; | |
648 vf->fmt.orig_height = height; | |
649 vf->fmt.orig_width = width; | |
650 vf->fmt.orig_fmt = outfmt; | |
17198 | 651 r = vf->config(vf, width, height, d_width, d_height, flags, outfmt); |
652 if (!r) vf->fmt.have_configured = 0; | |
653 return r; | |
14878 | 654 } |
9934 | 655 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
656 int vf_next_config(struct vf_instance *vf, |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
657 int width, int height, int d_width, int d_height, |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
658 unsigned int voflags, unsigned int outfmt){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
659 int miss; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
660 int flags=vf->next->query_format(vf->next,outfmt); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
661 if(!flags){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
662 // hmm. colorspace mismatch!!! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
663 // let's insert the 'scale' filter, it does the job for us: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
664 vf_instance_t* vf2; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
665 if(vf->next->info==&vf_info_scale) return 0; // scale->scale |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
666 vf2=vf_open_filter(vf->next,"scale",NULL); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
667 if(!vf2) return 0; // shouldn't happen! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
668 vf->next=vf2; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
669 flags=vf->next->query_format(vf->next,outfmt); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
670 if(!flags){ |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
671 mp_msg(MSGT_VFILTER,MSGL_ERR,MSGTR_CannotFindColorspace); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
672 return 0; // FAIL |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
673 } |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
674 } |
6138
523014df7d32
big cosmetics patch, cleanup of messages printed by mplayer and libs.
arpi
parents:
6081
diff
changeset
|
675 mp_msg(MSGT_VFILTER,MSGL_V,"REQ: flags=0x%X req=0x%X \n",flags,vf->default_reqs); |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
676 miss=vf->default_reqs - (flags&vf->default_reqs); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
677 if(miss&VFCAP_ACCEPT_STRIDE){ |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
678 // vf requires stride support but vf->next doesn't support it! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
679 // let's insert the 'expand' filter, it does the job for us: |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
680 vf_instance_t* vf2=vf_open_filter(vf->next,"expand",NULL); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
681 if(!vf2) return 0; // shouldn't happen! |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
682 vf->next=vf2; |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
683 } |
14073 | 684 vf->next->w = width; vf->next->h = height; |
14878 | 685 return vf_config_wrapper(vf->next,width,height,d_width,d_height,voflags,outfmt); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
686 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
687 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
688 int vf_next_control(struct vf_instance *vf, int request, void* data){ |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
689 return vf->next->control(vf->next,request,data); |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
690 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
691 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
692 void vf_extra_flip(struct vf_instance *vf) { |
28174 | 693 vf_next_control(vf, VFCTRL_DRAW_OSD, NULL); |
694 #ifdef CONFIG_ASS | |
695 vf_next_control(vf, VFCTRL_DRAW_EOSD, NULL); | |
696 #endif | |
697 vf_next_control(vf, VFCTRL_FLIP_PAGE, NULL); | |
698 } | |
699 | |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
700 int vf_next_query_format(struct vf_instance *vf, unsigned int fmt){ |
5565
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
701 int flags=vf->next->query_format(vf->next,fmt); |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
702 if(flags) flags|=vf->default_caps; |
0b301fec999a
capabilities support -> automatic insertion of scale, expand, pp
arpi
parents:
5557
diff
changeset
|
703 return flags; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
704 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
705 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
706 int vf_next_put_image(struct vf_instance *vf,mp_image_t *mpi, double pts){ |
34883 | 707 mpi->usage_count--; |
34889
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
708 if (mpi->usage_count < 0) { |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
709 mp_msg(MSGT_VFILTER, MSGL_V, "Bad mp_image usage count %i in vf_%s (type %i)\n", |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
710 mpi->usage_count, vf->info->name, mpi->type); |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
711 mpi->usage_count = 0; |
8e539c651227
Add/improve some code to help debugging DR in filters.
reimar
parents:
34883
diff
changeset
|
712 } |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17882
diff
changeset
|
713 return vf->next->put_image(vf->next,mpi, pts); |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
714 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
715 |
30642
a972c1a4a012
cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents:
30638
diff
changeset
|
716 void vf_next_draw_slice(struct vf_instance *vf,unsigned char** src, int * stride,int w, int h, int x, int y){ |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
717 if (vf->next->draw_slice) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
718 vf->next->draw_slice(vf->next,src,stride,w,h,x,y); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
719 return; |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
720 } |
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
721 if (!vf->dmpi) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
722 mp_msg(MSGT_VFILTER,MSGL_ERR,"draw_slice: dmpi not stored by vf_%s\n", vf->info->name); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
723 return; |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
724 } |
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
725 if (!(vf->dmpi->flags & MP_IMGFLAG_PLANAR)) { |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
726 memcpy_pic(vf->dmpi->planes[0]+y*vf->dmpi->stride[0]+vf->dmpi->bpp/8*x, |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
727 src[0], vf->dmpi->bpp/8*w, h, vf->dmpi->stride[0], stride[0]); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
728 return; |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
729 } |
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
730 memcpy_pic(vf->dmpi->planes[0]+y*vf->dmpi->stride[0]+x, src[0], |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
731 w, h, vf->dmpi->stride[0], stride[0]); |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
732 memcpy_pic(vf->dmpi->planes[1]+(y>>vf->dmpi->chroma_y_shift)*vf->dmpi->stride[1]+(x>>vf->dmpi->chroma_x_shift), |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
733 src[1], w>>vf->dmpi->chroma_x_shift, h>>vf->dmpi->chroma_y_shift, vf->dmpi->stride[1], stride[1]); |
10140
30cad6ad9dbc
fix segfaults with slices. support slice rendering into a filter even
rfelker
parents:
10006
diff
changeset
|
734 memcpy_pic(vf->dmpi->planes[2]+(y>>vf->dmpi->chroma_y_shift)*vf->dmpi->stride[2]+(x>>vf->dmpi->chroma_x_shift), |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
735 src[2], w>>vf->dmpi->chroma_x_shift, h>>vf->dmpi->chroma_y_shift, vf->dmpi->stride[2], stride[2]); |
8367 | 736 } |
737 | |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
738 //============================================================================ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
739 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
740 vf_instance_t* append_filters(vf_instance_t* last){ |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
741 vf_instance_t* vf; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28956
diff
changeset
|
742 int i; |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
743 |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
744 if(vf_settings) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
745 // We want to add them in the 'right order' |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
746 for(i = 0 ; vf_settings[i].name ; i++) |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
747 /* NOP */; |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
748 for(i-- ; i >= 0 ; i--) { |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
749 //printf("Open filter %s\n",vf_settings[i].name); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
750 vf = vf_open_filter(last,vf_settings[i].name,vf_settings[i].attribs); |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
751 if(vf) last=vf; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
752 } |
9593
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
753 } |
e9a2af584986
Add the new -vf option wich is the same as vop in reverse order.
albeu
parents:
9532
diff
changeset
|
754 return last; |
5507
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
755 } |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
756 |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
757 //============================================================================ |
d0d029fda134
video filter layer - written from scratch, but inspired a lot by Fredrik Kuivinen's patch
arpi
parents:
diff
changeset
|
758 |
5737 | 759 void vf_uninit_filter(vf_instance_t* vf){ |
760 if(vf->uninit) vf->uninit(vf); | |
761 free_mp_image(vf->imgctx.static_images[0]); | |
762 free_mp_image(vf->imgctx.static_images[1]); | |
763 free_mp_image(vf->imgctx.temp_images[0]); | |
764 free_mp_image(vf->imgctx.export_images[0]); | |
765 free(vf); | |
766 } | |
767 | |
768 void vf_uninit_filter_chain(vf_instance_t* vf){ | |
769 while(vf){ | |
32703
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
770 vf_instance_t* next=vf->next; |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
771 vf_uninit_filter(vf); |
84a45d5c1102
Remove tabs from two additional files that will be used in
cehoyos
parents:
32441
diff
changeset
|
772 vf=next; |
5737 | 773 } |
774 } |