annotate libmpcodecs/vf_delogo.c @ 32617:1baaacf00bbb

Improve speex codec pts handling, make audio timestamps work reasonably even with the native demuxer as long as seeking is not done.
author reimar
date Sun, 12 Dec 2010 12:36:56 +0000
parents 8a96d56b01f0
children 7af3e6f901fd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
2 * Copyright (C) 2002 Jindrich Makovicka <makovick@gmail.com>
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
19 */
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
20
304c94c89359 simple logo remover
henry
parents:
diff changeset
21 /* A very simple tv station logo remover */
304c94c89359 simple logo remover
henry
parents:
diff changeset
22
304c94c89359 simple logo remover
henry
parents:
diff changeset
23 #include <stdio.h>
304c94c89359 simple logo remover
henry
parents:
diff changeset
24 #include <stdlib.h>
304c94c89359 simple logo remover
henry
parents:
diff changeset
25 #include <string.h>
304c94c89359 simple logo remover
henry
parents:
diff changeset
26 #include <inttypes.h>
304c94c89359 simple logo remover
henry
parents:
diff changeset
27 #include <math.h>
304c94c89359 simple logo remover
henry
parents:
diff changeset
28
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11029
diff changeset
29 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11029
diff changeset
30 #include "cpudetect.h"
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
31 #include "img_format.h"
304c94c89359 simple logo remover
henry
parents:
diff changeset
32 #include "mp_image.h"
304c94c89359 simple logo remover
henry
parents:
diff changeset
33 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 11029
diff changeset
34 #include "libvo/fastmemcpy.h"
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
35
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
36 #include "m_option.h"
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
37 #include "m_struct.h"
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
38
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
39 //===========================================================================//
304c94c89359 simple logo remover
henry
parents:
diff changeset
40
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
41 static struct vf_priv_s {
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
42 unsigned int outfmt;
304c94c89359 simple logo remover
henry
parents:
diff changeset
43 int xoff, yoff, lw, lh, band, show;
22027
0b262e00bc99 Mark m_struct_t defaults as const
reimar
parents: 20646
diff changeset
44 } const vf_priv_dflt = {
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
45 0,
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
46 0, 0, 0, 0, 0, 0
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
47 };
304c94c89359 simple logo remover
henry
parents:
diff changeset
48
304c94c89359 simple logo remover
henry
parents:
diff changeset
49 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
304c94c89359 simple logo remover
henry
parents:
diff changeset
50 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
304c94c89359 simple logo remover
henry
parents:
diff changeset
51
304c94c89359 simple logo remover
henry
parents:
diff changeset
52 static void delogo(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int width, int height,
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
53 int logo_x, int logo_y, int logo_w, int logo_h, int band, int show, int direct) {
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
54 int y, x;
304c94c89359 simple logo remover
henry
parents:
diff changeset
55 int interp, dist;
304c94c89359 simple logo remover
henry
parents:
diff changeset
56 uint8_t *xdst, *xsrc;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
57
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
58 uint8_t *topleft, *botleft, *topright;
304c94c89359 simple logo remover
henry
parents:
diff changeset
59 int xclipl, xclipr, yclipt, yclipb;
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
60 int logo_x1, logo_x2, logo_y1, logo_y2;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
61
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
62 xclipl = MAX(-logo_x, 0);
304c94c89359 simple logo remover
henry
parents:
diff changeset
63 xclipr = MAX(logo_x+logo_w-width, 0);
304c94c89359 simple logo remover
henry
parents:
diff changeset
64 yclipt = MAX(-logo_y, 0);
304c94c89359 simple logo remover
henry
parents:
diff changeset
65 yclipb = MAX(logo_y+logo_h-height, 0);
304c94c89359 simple logo remover
henry
parents:
diff changeset
66
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
67 logo_x1 = logo_x + xclipl;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
68 logo_x2 = logo_x + logo_w - xclipr;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
69 logo_y1 = logo_y + yclipt;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
70 logo_y2 = logo_y + logo_h - yclipb;
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
71
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
72 topleft = src+logo_y1*srcStride+logo_x1;
11029
bdf37ec99325 bug found by Alexander Stege
nexus
parents: 10816
diff changeset
73 topright = src+logo_y1*srcStride+logo_x2-1;
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
74 botleft = src+(logo_y2-1)*srcStride+logo_x1;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
75
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
76 if (!direct) memcpy_pic(dst, src, width, height, dstStride, srcStride);
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
77
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
78 dst += (logo_y1+1)*dstStride;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
79 src += (logo_y1+1)*srcStride;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
80
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
81 for(y = logo_y1+1; y < logo_y2-1; y++)
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
82 {
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
83 for (x = logo_x1+1, xdst = dst+logo_x1+1, xsrc = src+logo_x1+1; x < logo_x2-1; x++, xdst++, xsrc++) {
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
84 interp = ((topleft[srcStride*(y-logo_y-yclipt)]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
85 + topleft[srcStride*(y-logo_y-1-yclipt)]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
86 + topleft[srcStride*(y-logo_y+1-yclipt)])*(logo_w-(x-logo_x))/logo_w
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
87 + (topright[srcStride*(y-logo_y-yclipt)]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
88 + topright[srcStride*(y-logo_y-1-yclipt)]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
89 + topright[srcStride*(y-logo_y+1-yclipt)])*(x-logo_x)/logo_w
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
90 + (topleft[x-logo_x-xclipl]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
91 + topleft[x-logo_x-1-xclipl]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
92 + topleft[x-logo_x+1-xclipl])*(logo_h-(y-logo_y))/logo_h
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
93 + (botleft[x-logo_x-xclipl]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
94 + botleft[x-logo_x-1-xclipl]
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
95 + botleft[x-logo_x+1-xclipl])*(y-logo_y)/logo_h
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
96 )/6;
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
97 /* interp = (topleft[srcStride*(y-logo_y)]*(logo_w-(x-logo_x))/logo_w
304c94c89359 simple logo remover
henry
parents:
diff changeset
98 + topright[srcStride*(y-logo_y)]*(x-logo_x)/logo_w
304c94c89359 simple logo remover
henry
parents:
diff changeset
99 + topleft[x-logo_x]*(logo_h-(y-logo_y))/logo_h
304c94c89359 simple logo remover
henry
parents:
diff changeset
100 + botleft[x-logo_x]*(y-logo_y)/logo_h
304c94c89359 simple logo remover
henry
parents:
diff changeset
101 )/2;*/
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
102 if (y >= logo_y+band && y < logo_y+logo_h-band && x >= logo_x+band && x < logo_x+logo_w-band) {
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
103 *xdst = interp;
304c94c89359 simple logo remover
henry
parents:
diff changeset
104 } else {
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
105 dist = 0;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
106 if (x < logo_x+band) dist = MAX(dist, logo_x-x+band);
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
107 else if (x >= logo_x+logo_w-band) dist = MAX(dist, x-(logo_x+logo_w-1-band));
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
108 if (y < logo_y+band) dist = MAX(dist, logo_y-y+band);
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
109 else if (y >= logo_y+logo_h-band) dist = MAX(dist, y-(logo_y+logo_h-1-band));
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
110 *xdst = (*xsrc*dist + interp*(band-dist))/band;
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
111 if (show && (dist == band-1)) *xdst = 0;
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
112 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
113 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
114
304c94c89359 simple logo remover
henry
parents:
diff changeset
115 dst+= dstStride;
304c94c89359 simple logo remover
henry
parents:
diff changeset
116 src+= srcStride;
304c94c89359 simple logo remover
henry
parents:
diff changeset
117 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
118 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
119
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
120 static int config(struct vf_instance *vf,
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
121 int width, int height, int d_width, int d_height,
304c94c89359 simple logo remover
henry
parents:
diff changeset
122 unsigned int flags, unsigned int outfmt){
304c94c89359 simple logo remover
henry
parents:
diff changeset
123
304c94c89359 simple logo remover
henry
parents:
diff changeset
124 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
304c94c89359 simple logo remover
henry
parents:
diff changeset
125 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
126
304c94c89359 simple logo remover
henry
parents:
diff changeset
127
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
128 static void get_image(struct vf_instance *vf, mp_image_t *mpi){
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
129 if(mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change
304c94c89359 simple logo remover
henry
parents:
diff changeset
130 if(mpi->imgfmt!=vf->priv->outfmt) return; // colorspace differ
304c94c89359 simple logo remover
henry
parents:
diff changeset
131 // ok, we can do pp in-place (or pp disabled):
304c94c89359 simple logo remover
henry
parents:
diff changeset
132 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
304c94c89359 simple logo remover
henry
parents:
diff changeset
133 mpi->type, mpi->flags, mpi->w, mpi->h);
304c94c89359 simple logo remover
henry
parents:
diff changeset
134 mpi->planes[0]=vf->dmpi->planes[0];
304c94c89359 simple logo remover
henry
parents:
diff changeset
135 mpi->stride[0]=vf->dmpi->stride[0];
304c94c89359 simple logo remover
henry
parents:
diff changeset
136 mpi->width=vf->dmpi->width;
304c94c89359 simple logo remover
henry
parents:
diff changeset
137 if(mpi->flags&MP_IMGFLAG_PLANAR){
304c94c89359 simple logo remover
henry
parents:
diff changeset
138 mpi->planes[1]=vf->dmpi->planes[1];
304c94c89359 simple logo remover
henry
parents:
diff changeset
139 mpi->planes[2]=vf->dmpi->planes[2];
304c94c89359 simple logo remover
henry
parents:
diff changeset
140 mpi->stride[1]=vf->dmpi->stride[1];
304c94c89359 simple logo remover
henry
parents:
diff changeset
141 mpi->stride[2]=vf->dmpi->stride[2];
304c94c89359 simple logo remover
henry
parents:
diff changeset
142 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
143 mpi->flags|=MP_IMGFLAG_DIRECT;
304c94c89359 simple logo remover
henry
parents:
diff changeset
144 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
145
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
146 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
147 mp_image_t *dmpi;
304c94c89359 simple logo remover
henry
parents:
diff changeset
148
304c94c89359 simple logo remover
henry
parents:
diff changeset
149 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
304c94c89359 simple logo remover
henry
parents:
diff changeset
150 // no DR, so get a new image! hope we'll get DR buffer:
304c94c89359 simple logo remover
henry
parents:
diff changeset
151 vf->dmpi=vf_get_image(vf->next,vf->priv->outfmt,
304c94c89359 simple logo remover
henry
parents:
diff changeset
152 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
304c94c89359 simple logo remover
henry
parents:
diff changeset
153 mpi->w,mpi->h);
304c94c89359 simple logo remover
henry
parents:
diff changeset
154 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
155 dmpi= vf->dmpi;
304c94c89359 simple logo remover
henry
parents:
diff changeset
156
304c94c89359 simple logo remover
henry
parents:
diff changeset
157 delogo(dmpi->planes[0], mpi->planes[0], dmpi->stride[0], mpi->stride[0], mpi->w, mpi->h,
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
158 vf->priv->xoff, vf->priv->yoff, vf->priv->lw, vf->priv->lh, vf->priv->band, vf->priv->show,
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
159 mpi->flags&MP_IMGFLAG_DIRECT);
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
160 delogo(dmpi->planes[1], mpi->planes[1], dmpi->stride[1], mpi->stride[1], mpi->w/2, mpi->h/2,
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
161 vf->priv->xoff/2, vf->priv->yoff/2, vf->priv->lw/2, vf->priv->lh/2, vf->priv->band/2, vf->priv->show,
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
162 mpi->flags&MP_IMGFLAG_DIRECT);
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
163 delogo(dmpi->planes[2], mpi->planes[2], dmpi->stride[2], mpi->stride[2], mpi->w/2, mpi->h/2,
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
164 vf->priv->xoff/2, vf->priv->yoff/2, vf->priv->lw/2, vf->priv->lh/2, vf->priv->band/2, vf->priv->show,
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
165 mpi->flags&MP_IMGFLAG_DIRECT);
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
166
304c94c89359 simple logo remover
henry
parents:
diff changeset
167 vf_clone_mpi_attributes(dmpi, mpi);
304c94c89359 simple logo remover
henry
parents:
diff changeset
168
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
169 return vf_next_put_image(vf,dmpi, pts);
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
170 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
171
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
172 static void uninit(struct vf_instance *vf){
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
173 if(!vf->priv) return;
304c94c89359 simple logo remover
henry
parents:
diff changeset
174
304c94c89359 simple logo remover
henry
parents:
diff changeset
175 free(vf->priv);
304c94c89359 simple logo remover
henry
parents:
diff changeset
176 vf->priv=NULL;
304c94c89359 simple logo remover
henry
parents:
diff changeset
177 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
178
304c94c89359 simple logo remover
henry
parents:
diff changeset
179 //===========================================================================//
304c94c89359 simple logo remover
henry
parents:
diff changeset
180
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
181 static int query_format(struct vf_instance *vf, unsigned int fmt){
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
182 switch(fmt)
304c94c89359 simple logo remover
henry
parents:
diff changeset
183 {
304c94c89359 simple logo remover
henry
parents:
diff changeset
184 case IMGFMT_YV12:
304c94c89359 simple logo remover
henry
parents:
diff changeset
185 case IMGFMT_I420:
304c94c89359 simple logo remover
henry
parents:
diff changeset
186 case IMGFMT_IYUV:
304c94c89359 simple logo remover
henry
parents:
diff changeset
187 return vf_next_query_format(vf,vf->priv->outfmt);
304c94c89359 simple logo remover
henry
parents:
diff changeset
188 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
189 return 0;
304c94c89359 simple logo remover
henry
parents:
diff changeset
190 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
191
30708
8a96d56b01f0 Mark all fmt_list arrays as const.
diego
parents: 30707
diff changeset
192 static const unsigned int fmt_list[]={
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
193 IMGFMT_YV12,
304c94c89359 simple logo remover
henry
parents:
diff changeset
194 IMGFMT_I420,
304c94c89359 simple logo remover
henry
parents:
diff changeset
195 IMGFMT_IYUV,
304c94c89359 simple logo remover
henry
parents:
diff changeset
196 0
304c94c89359 simple logo remover
henry
parents:
diff changeset
197 };
304c94c89359 simple logo remover
henry
parents:
diff changeset
198
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29915
diff changeset
199 static int vf_open(vf_instance_t *vf, char *args){
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
200 vf->config=config;
304c94c89359 simple logo remover
henry
parents:
diff changeset
201 vf->put_image=put_image;
304c94c89359 simple logo remover
henry
parents:
diff changeset
202 vf->get_image=get_image;
304c94c89359 simple logo remover
henry
parents:
diff changeset
203 vf->query_format=query_format;
304c94c89359 simple logo remover
henry
parents:
diff changeset
204 vf->uninit=uninit;
304c94c89359 simple logo remover
henry
parents:
diff changeset
205
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
206 mp_msg(MSGT_VFILTER, MSGL_V, "delogo: %d x %d, %d x %d, band = %d\n",
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
207 vf->priv->xoff, vf->priv->yoff,
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
208 vf->priv->lw, vf->priv->lh,
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
209 vf->priv->band);
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
210
304c94c89359 simple logo remover
henry
parents:
diff changeset
211 vf->priv->show = 0;
304c94c89359 simple logo remover
henry
parents:
diff changeset
212
304c94c89359 simple logo remover
henry
parents:
diff changeset
213 if (vf->priv->band < 0) {
10811
a69221e84948 DR, 10l fixes
henry
parents: 10809
diff changeset
214 vf->priv->band = 4;
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
215 vf->priv->show = 1;
304c94c89359 simple logo remover
henry
parents:
diff changeset
216 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
217
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
218
304c94c89359 simple logo remover
henry
parents:
diff changeset
219 vf->priv->lw += vf->priv->band*2;
304c94c89359 simple logo remover
henry
parents:
diff changeset
220 vf->priv->lh += vf->priv->band*2;
304c94c89359 simple logo remover
henry
parents:
diff changeset
221 vf->priv->xoff -= vf->priv->band;
304c94c89359 simple logo remover
henry
parents:
diff changeset
222 vf->priv->yoff -= vf->priv->band;
304c94c89359 simple logo remover
henry
parents:
diff changeset
223
304c94c89359 simple logo remover
henry
parents:
diff changeset
224 // check csp:
304c94c89359 simple logo remover
henry
parents:
diff changeset
225 vf->priv->outfmt=vf_match_csp(&vf->next,fmt_list,IMGFMT_YV12);
304c94c89359 simple logo remover
henry
parents:
diff changeset
226 if(!vf->priv->outfmt)
304c94c89359 simple logo remover
henry
parents:
diff changeset
227 {
304c94c89359 simple logo remover
henry
parents:
diff changeset
228 uninit(vf);
304c94c89359 simple logo remover
henry
parents:
diff changeset
229 return 0; // no csp match :(
304c94c89359 simple logo remover
henry
parents:
diff changeset
230 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
231
304c94c89359 simple logo remover
henry
parents:
diff changeset
232 return 1;
304c94c89359 simple logo remover
henry
parents:
diff changeset
233 }
304c94c89359 simple logo remover
henry
parents:
diff changeset
234
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
235 #define ST_OFF(f) M_ST_OFF(struct vf_priv_s,f)
30707
4d15378da04a Mark vf_opts/vf_opts_fields structures as const.
diego
parents: 30642
diff changeset
236 static const m_option_t vf_opts_fields[] = {
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
237 { "x", ST_OFF(xoff), CONF_TYPE_INT, 0, 0, 0, NULL },
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
238 { "y", ST_OFF(yoff), CONF_TYPE_INT, 0, 0, 0, NULL },
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
239 { "w", ST_OFF(lw), CONF_TYPE_INT, 0, 0, 0, NULL },
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
240 { "h", ST_OFF(lh), CONF_TYPE_INT, 0, 0, 0, NULL },
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
241 { "t", ST_OFF(band), CONF_TYPE_INT, 0, 0, 0, NULL },
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
242 { "band", ST_OFF(band), CONF_TYPE_INT, 0, 0, 0, NULL }, // alias
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
243 { NULL, NULL, 0, 0, 0, 0, NULL }
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
244 };
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
245
30707
4d15378da04a Mark vf_opts/vf_opts_fields structures as const.
diego
parents: 30642
diff changeset
246 static const m_struct_t vf_opts = {
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
247 "delogo",
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
248 sizeof(struct vf_priv_s),
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
249 &vf_priv_dflt,
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
250 vf_opts_fields
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
251 };
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
252
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 22027
diff changeset
253 const vf_info_t vf_info_delogo = {
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
254 "simple logo remover",
304c94c89359 simple logo remover
henry
parents:
diff changeset
255 "delogo",
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
256 "Jindrich Makovicka, Alex Beregszaszi",
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
257 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29915
diff changeset
258 vf_open,
10816
e9dc9b0b16fa added new config system support and fixed some bugs (altought sanity checks are needed in delogo as it segfaults easily with w/h out of range)
alex
parents: 10811
diff changeset
259 &vf_opts
10809
304c94c89359 simple logo remover
henry
parents:
diff changeset
260 };
304c94c89359 simple logo remover
henry
parents:
diff changeset
261
304c94c89359 simple logo remover
henry
parents:
diff changeset
262 //===========================================================================//