- offset = interleaved ? dst->linesize[plane] : dst->linesize[plane] * lines;
-
- av_image_copy_plane(dst->data[plane],
- dst->linesize[plane] << interleaved,
- s->input_views[LEFT]->data[plane],
- s->input_views[LEFT]->linesize[plane],
- length, lines);
- av_image_copy_plane(dst->data[plane] + offset,
- dst->linesize[plane] << interleaved,
- s->input_views[RIGHT]->data[plane],
- s->input_views[RIGHT]->linesize[plane],
- length, lines);
+ for (i = 0; i < 2; i++) {
+ const uint8_t *src[4];
+ uint8_t *dst[4];
+ int linesizes[4];
+ int sub_h = s->input_views[i]->height >> s->pix_desc->log2_chroma_h;
+
+ src[0] = s->input_views[i]->data[0];
+ src[1] = s->input_views[i]->data[1];
+ src[2] = s->input_views[i]->data[2];
+
+ dst[0] = out->data[0] + i * out->linesize[0] *
+ (interleaved + s->input_views[i]->height * (1 - interleaved));
+ dst[1] = out->data[1] + i * out->linesize[1] *
+ (interleaved + sub_h * (1 - interleaved));
+ dst[2] = out->data[2] + i * out->linesize[2] *
+ (interleaved + sub_h * (1 - interleaved));
+
+ linesizes[0] = out->linesize[0] +
+ interleaved * out->linesize[0];
+ linesizes[1] = out->linesize[1] +
+ interleaved * out->linesize[1];
+ linesizes[2] = out->linesize[2] +
+ interleaved * out->linesize[2];
+
+ av_image_copy(dst, linesizes, src, s->input_views[i]->linesize,
+ s->input_views[i]->format,
+ s->input_views[i]->width,
+ s->input_views[i]->height);