68 int max_plane_step[4];
71 char x_expr[256], y_expr[256];
85 sscanf(args,
"%255[^:]:%255[^:]", over->
x_expr, over->
y_expr);
137 var_values[
VAR_PI ] = M_PI;
159 "main w:%d h:%d fmt:%s overlay x:%d y:%d w:%d h:%d fmt:%s\n",
166 if (over->
x < 0 || over->
y < 0 ||
170 "Overlay area (%d,%d)<->(%d,%d) not within the main area (0,0)<->(%d,%d) or zero-sized\n",
174 (
int)var_values[
VAR_MAIN_W], (
int)var_values[VAR_MAIN_H]);
181 "Error when evaluating the expression '%s'\n", expr);
203 int overlay_end_y = y + src->
video->
h;
208 start_y =
FFMAX(y, 0);
209 height = end_y - start_y;
218 for (i = 0; i <
height; i++) {
220 for (j = 0; j <
width; j++) {
221 d[
r] = (d[
r] * (0xff - s[3]) + s[0] * s[3] + 128) >> 8;
222 d[1] = (d[1] * (0xff - s[3]) + s[1] * s[3] + 128) >> 8;
223 d[
b] = (d[
b] * (0xff - s[3]) + s[2] * s[3] + 128) >> 8;
231 for (i = 0; i < 3; i++) {
232 int hsub = i ? over->
hsub : 0;
233 int vsub = i ? over->
vsub : 0;
235 (start_y >> vsub) * dst->
linesize[i];
238 int wp =
FFALIGN(width, 1<<hsub) >> hsub;
239 int hp =
FFALIGN(height, 1<<vsub) >> vsub;
241 sp += ((-y) >> vsub) * src->
linesize[i];
244 for (j = 0; j < hp; j++) {
246 for (k = 0; k < wp; k++) {
248 int alpha_v, alpha_h, alpha;
249 if (hsub && vsub && j+1 < hp && k+1 < wp) {
250 alpha = (a[0] + a[src->
linesize[3]] +
252 }
else if (hsub || vsub) {
253 alpha_h = hsub && k+1 < wp ?
254 (a[0] + a[1]) >> 1 : a[0];
255 alpha_v = vsub && j+1 < hp ?
256 (a[0] + a[src->
linesize[3]]) >> 1 : a[0];
257 alpha = (alpha_v + alpha_h) >> 1;
260 *d = (*d * (0xff - alpha) + *s++ * alpha + 128) >> 8;
266 ap += (1 << vsub) * src->
linesize[3];
404 .
inputs = avfilter_vf_overlay_inputs,
405 .
outputs = avfilter_vf_overlay_outputs,