- if (s->is_horizontal || s->is_vertical) {
- if ((ret = av_image_fill_linesizes(linesize, inlink->format, inlink->w)) < 0) {
- av_frame_free(&out);
- return ret;
- }
-
- height[1] = height[2] = AV_CEIL_RSHIFT(inlink->h, s->desc->log2_chroma_h);
- height[0] = height[3] = inlink->h;
- }
-
- for (p = 0; p < s->nb_planes; p++) {
- if (s->is_vertical) {
- av_image_copy_plane(out->data[p] + offset[p] * out->linesize[p],
- out->linesize[p],
- in[i]->data[p],
- in[i]->linesize[p],
- linesize[p], height[p]);
- offset[p] += height[p];
- } else if (s->is_horizontal) {
- av_image_copy_plane(out->data[p] + offset[p],
- out->linesize[p],
- in[i]->data[p],
- in[i]->linesize[p],
- linesize[p], height[p]);
- offset[p] += linesize[p];
- } else {
- StackItem *item = &s->items[i];
-
- av_image_copy_plane(out->data[p] + out->linesize[p] * item->y[p] + item->x[p],
- out->linesize[p],
- in[i]->data[p],
- in[i]->linesize[p],
- item->linesize[p], item->height[p]);
- }
- }
- }
+ ctx->internal->execute(ctx, process_slice, out, NULL, FFMIN(s->nb_inputs, ff_filter_get_nb_threads(ctx)));