annotate libmpcodecs/vf_tile.c @ 33307:552f1f7731c8

Set GUI initialization flag earlier. So far, the flag is set after the call of guiInit(), but there are calls to GUI functions (like reading the GUI config) before that. As MPlayer (when exiting) only calls GUI's cleanup function guiDone() if the flag is set, it neglects calling guiDone() on any error between the first GUI function call and execution of guiInit(). Now the flag is set before the first GUI function call. As a result, GUI's own exit function (also used for fatal GUI errors, and thus also for errors occurring before guiInit() properly finishes) doesn't have to handle cleanup any longer. The code can be moved to guiDone().
author ib
date Sat, 07 May 2011 15:30:14 +0000
parents 7af3e6f901fd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
1 /*
28924
d5d66bff938a cosmetics: Remove file names from file header, it only causes trouble.
diego
parents: 26754
diff changeset
2 * filter to tile a serie of image in a single, bigger, image
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
3 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
4 * The parameters are:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
5 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
6 * xtile: number of tile on the x axis (5)
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
7 * ytile: number of tile on the y axis (5)
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
8 * xytile: when write the image, it can be different then xtile * ytile
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
9 * (for example you can write 8 * 7 tile, writing the file every
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
10 * 50 frame, to have one image every 2 seconds @ 25 fps ).
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
11 * start: pixel at the start (x/y), default 2
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
12 * delta: pixel between 2 tile, (x/y), default 4
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
13 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
14 * For example a valid command line is:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
15 * ... -vf tile=10:5:-1:4:8 ...
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
16 * that make images of 10 * 5 tiles, with 4 pixel at the beginning and
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
17 * 8 pixel between tiles.
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
18 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
19 * The default command is:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
20 * ... -vf tile=5:5:25:2:4
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
21 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
22 * If you omit a parameter or put a value less then 0, the default is used.
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
23 * ... -vf tile=10:5::-1:10
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
24 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
25 * You can also stop when you're ok
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
26 * ... -vf tile=10:5
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
27 * (and this is probably the option you will use more often ...)
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
28 *
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
29 * Probably is good to put the scale filter before the tile :-)
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
30 *
30421
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
31 * copyright (c) 2003 Daniele Forghieri ( guru@digitalfantasy.it )
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
32 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
33 * This file is part of MPlayer.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
34 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
35 * 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: 28924
diff changeset
36 * 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: 28924
diff changeset
37 * 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: 28924
diff changeset
38 * (at your option) any later version.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
39 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
40 * 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: 28924
diff changeset
41 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
42 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
43 * GNU General Public License for more details.
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
44 *
bbb6ebec87a0 Add missing license headers to all files in the libmpcodecs directory.
diego
parents: 28924
diff changeset
45 * 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: 28924
diff changeset
46 * 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: 28924
diff changeset
47 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
48 */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
49
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
50 // strtoi memcpy_pic
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
51
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
52 #include <stdio.h>
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
53 #include <stdlib.h>
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
54 #include <string.h>
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
55
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 10751
diff changeset
56 #include "config.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 10751
diff changeset
57 #include "mp_msg.h"
18004
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
58 #include "help_mp.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 10751
diff changeset
59 #include "cpudetect.h"
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
60
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
61 #include "img_format.h"
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
62 #include "mp_image.h"
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
63 #include "vf.h"
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
64
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 10751
diff changeset
65 #include "libvo/fastmemcpy.h"
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
66
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
67 /* private data */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
68 struct vf_priv_s {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
69 /* configuration data */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
70 /* Number on hor/ver tiles */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
71 int xtile;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
72 int ytile;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
73 /* When write the whole frame (default = xtile * ytile) */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
74 int xytile;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
75 /* pixel at start / end (default = 4) */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
76 int start;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
77 /* pixel between image (default = 2) */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
78 int delta;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
79 // /* Background color, in destination format */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
80 // int bkgSet;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
81
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
82 /* Work data */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
83 int frame_cur;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
84 };
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
85
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
86
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
87 static int config(struct vf_instance *vf,
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
88 int width, int height, int d_width, int d_height,
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
89 unsigned int flags, unsigned int outfmt){
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
90
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
91 struct vf_priv_s *priv;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
92 int xw;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
93 int yh;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
94
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
95 /* Calculate new destination size */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
96 priv = vf->priv;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
97 xw = priv->start * 2 +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
98 priv->xtile * width +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
99 (priv->xtile - 1) * priv->delta;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
100 yh = priv->start * 2 +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
101 priv->ytile * height +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
102 (priv->ytile - 1) * priv->delta;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
103
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
104 mp_msg(MSGT_VFILTER,MSGL_V,"vf_tile:config size set to %d * %d\n", xw, yh);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
105
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
106 return vf_next_config(vf, xw, yh, xw, yh, flags, outfmt);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
107 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
108
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
109 /* Filter handler */
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
110 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts)
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
111 {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
112 mp_image_t *dmpi;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
113 struct vf_priv_s *priv;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
114 int t;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
115 int xw;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
116 int yh;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
117 int xi;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
118 int yi;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
119 int by;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
120 int dw;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
121
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
122 /* Calculate new size */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
123 priv = vf->priv;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
124 xw = priv->start * 2 +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
125 priv->xtile * mpi->w +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
126 (priv->xtile - 1) * priv->delta;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
127 yh = priv->start * 2 +
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
128 priv->ytile * mpi->h+
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
129 (priv->ytile - 1) * priv->delta;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
130
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
131 /* Get the big image! */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
132 dmpi=vf_get_image(vf->next, mpi->imgfmt,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
133 MP_IMGTYPE_STATIC, MP_IMGFLAG_ACCEPT_STRIDE,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
134 xw, yh);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
135
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
136 /* bytes x pixel & bytes x line */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
137 if (mpi->flags & MP_IMGFLAG_PLANAR) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
138 by = 1;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
139 dw = mpi->w;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
140 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
141 else {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
142 by = (mpi->bpp + 7) / 8;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
143 dw = mpi->w * by;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
144 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
145 /* Index position */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
146 t = priv->frame_cur % priv->xytile;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
147 // if ((t == 0) && (bkg != 0)) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
148 // /* First frame, delete the background */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
149 //
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
150 // }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
151
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
152 /* Position of image */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
153 xi = priv->start + (mpi->w + priv->delta) * (t % priv->xtile);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
154 yi = priv->start + (mpi->h + priv->delta) * (t / priv->xtile);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
155
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
156 /* Copy first (or only) plane */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
157 memcpy_pic( dmpi->planes[0] + xi * by + yi * dmpi->stride[0],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
158 mpi->planes[0],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
159 dw,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
160 mpi->h,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
161 dmpi->stride[0],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
162 mpi->stride[0]);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
163
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
164 if (mpi->flags & MP_IMGFLAG_PLANAR) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
165 /* Copy the other 2 planes */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
166 memcpy_pic( dmpi->planes[1] + (xi >> mpi->chroma_x_shift) + (yi >> mpi->chroma_y_shift) * dmpi->stride[1],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
167 mpi->planes[1],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
168 mpi->chroma_width,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
169 mpi->chroma_height,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
170 dmpi->stride[1],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
171 mpi->stride[1]);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
172 memcpy_pic( dmpi->planes[2] + (xi >> mpi->chroma_x_shift) + (yi >> mpi->chroma_y_shift) * dmpi->stride[2],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
173 mpi->planes[2],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
174 mpi->chroma_width,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
175 mpi->chroma_height,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
176 dmpi->stride[2],
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
177 mpi->stride[2]);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
178 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
179
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
180 /* Increment current frame */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
181 ++priv->frame_cur;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
182
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
183 if (t == priv->xytile - 1) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
184 /* Display the composition */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
185 dmpi->width = xw;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
186 dmpi->height = yh;
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17012
diff changeset
187 return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE);
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
188 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
189 else {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
190 /* Skip the frame */
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 25221
diff changeset
191 return 0;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
192 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
193 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
194
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
195 static void uninit(struct vf_instance *vf)
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
196 {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
197 /* free local data */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
198 free(vf->priv);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
199 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
200
31082
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30642
diff changeset
201 /* rgb/bgr 12...32 supported & some Yxxx */
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
202 static int query_format(struct vf_instance *vf, unsigned int fmt)
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
203 {
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
204 switch (fmt) {
31082
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30642
diff changeset
205 /* rgb 12...32 bit */
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30642
diff changeset
206 case IMGFMT_RGB12:
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
207 case IMGFMT_RGB15:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
208 case IMGFMT_RGB16:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
209 case IMGFMT_RGB24:
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
210 case IMGFMT_RGB32:
31082
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30642
diff changeset
211 /* bgr 12...32 bit */
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30642
diff changeset
212 case IMGFMT_BGR12:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
213 case IMGFMT_BGR15:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
214 case IMGFMT_BGR16:
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
215 case IMGFMT_BGR24:
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
216 case IMGFMT_BGR32:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
217 /* Various Yxxx Formats */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
218 case IMGFMT_444P:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
219 case IMGFMT_422P:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
220 case IMGFMT_411P:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
221 case IMGFMT_YUY2:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
222 case IMGFMT_YV12:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
223 case IMGFMT_I420:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
224 case IMGFMT_YVU9:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
225 case IMGFMT_IF09:
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
226 case IMGFMT_IYUV:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
227 return vf_next_query_format(vf, fmt);
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
228 }
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 31082
diff changeset
229 return 0;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
230 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
231
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
232 /* Get an integer from the string pointed by s, adjusting s.
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
233 * If the value is less then 0 def_val is used.
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
234 * Return 0 for ok
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
235 *
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
236 * Look below ( in vf_open(...) ) for a use ...
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
237 */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
238 static int parse_int(char **s, int *rt, int def_val)
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
239 {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
240
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
241 int t = 0;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
242
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
243 if (**s) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
244 /* Get value (dec, hex or octal) */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
245 t = strtol( *s, s, 0 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
246
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
247 /* Use default */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
248 if (t < 0) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
249 t = def_val;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
250 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
251
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
252 if (**s == ':') {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
253 /* Point to next character (problably a digit) */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
254 ++(*s);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
255 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
256 else if (**s != '\0') {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
257 /* Error, we got some wrong char */
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 25221
diff changeset
258 return 1;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
259 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
260 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
261 else {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
262 t = def_val;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
263 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
264
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
265 *rt = t;
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 25221
diff changeset
266 return 0;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
267
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
268 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
269
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
270 /* Main entry funct for the filter */
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
271 static int vf_open(vf_instance_t *vf, char *args)
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
272 {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
273 struct vf_priv_s *p;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
274 int er;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
275
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
276 vf->put_image = put_image;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
277 vf->query_format = query_format;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
278 vf->config = config;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
279 vf->uninit = uninit;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
280 vf->default_reqs = VFCAP_ACCEPT_STRIDE;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
281 /* Private data */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
282 vf->priv = p = calloc(1, sizeof(struct vf_priv_s));
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
283 if (p == NULL) {
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 25221
diff changeset
284 return 0;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
285 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
286
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
287 if (args == NULL) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
288 /* Use the default */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
289 args = "";
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
290 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
291 /* Parse all the arguments */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
292 er = parse_int( &args, &p->xtile, 5 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
293 er |= parse_int( &args, &p->ytile, 5 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
294 er |= parse_int( &args, &p->xytile, 0 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
295 er |= parse_int( &args, &p->start, 2 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
296 er |= parse_int( &args, &p->delta, 4 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
297 // er |= parse_int( &args, &p->bkgSet, 0 );
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
298
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
299 if (er) {
18004
bcd805923554 Part2 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu with LOTS of modifications by me
reynaldo
parents: 17969
diff changeset
300 mp_msg(MSGT_VFILTER, MSGL_ERR, MSGTR_MPCODECS_ErrorParsingArgument);
26754
63630c09e237 cosmetics: Remove pointless parentheses from return calls.
diego
parents: 25221
diff changeset
301 return 0;
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
302 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
303 /* Load some default */
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
304 if ((p->xytile <= 0) || (p->xytile > p->xtile * p->ytile)) {
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
305 p->xytile = p->xtile * p->ytile;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
306 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
307
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
308 /* Say what happen: use mp_msg(...)? */
17969
843e0427b5b9 Change 'if(verbose)' to the more appropriate mp_msg_test.
diego
parents: 17906
diff changeset
309 if ( mp_msg_test(MSGT_VFILTER,MSGL_V) ) {
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
310 printf("vf_tile: tiling %d * %d, output every %d frames\n",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
311 p->xtile,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
312 p->ytile,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
313 p->xytile);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
314 printf("vf_tile: start pixel %d, delta pixel %d\n",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
315 p->start,
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
316 p->delta);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
317 // printf("vf_tile: background 0x%x\n",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
318 // p->bkgSet);
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
319 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
320 return 1;
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
321 }
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
322
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 18004
diff changeset
323 const vf_info_t vf_info_tile = {
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
324 "Make a single image tiling x/y images",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
325 "tile",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
326 "Daniele Forghieri",
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
327 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30421
diff changeset
328 vf_open,
10751
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
329 NULL
81d03cb2cd64 2 new filters: tile & framestep
arpi
parents:
diff changeset
330 };