- RectToPipe(video_source_rect, &src_rect), NULL, deinterlace);
- vl_compositor_set_layer_dst_area(&vmixer->cstate, layer++, RectToPipe(destination_video_rect, &dst_rect));
- vl_compositor_set_dst_clip(&vmixer->cstate, RectToPipe(destination_rect, &dst_clip));
+ RectToPipe(video_source_rect, &rect), NULL, deinterlace);
+ vl_compositor_set_layer_dst_area(&vmixer->cstate, layer++, RectToPipe(destination_video_rect, &rect));
+
+ for (i = 0; i < layer_count; ++i) {
+ vlVdpOutputSurface *src = vlGetDataHTAB(layers->source_surface);
+ if (!src)
+ return VDP_STATUS_INVALID_HANDLE;
+
+ assert(layers->struct_version == VDP_LAYER_VERSION);
+
+ vl_compositor_set_rgba_layer(&vmixer->cstate, compositor, layer, src->sampler_view,
+ RectToPipe(layers->source_rect, &rect), NULL, NULL);
+ vl_compositor_set_layer_dst_area(&vmixer->cstate, layer++, RectToPipe(layers->destination_rect, &rect));
+
+ ++layers;
+ }
+
+ vl_compositor_set_dst_clip(&vmixer->cstate, RectToPipe(destination_rect, &clip));