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