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