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