From e1e9ee5506b4d43a1040b20367f1c5f045d600ae Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sat, 5 Nov 2022 00:00:43 +0900 Subject: [PATCH] qsv: Fix encoding error when input memory belongs to other GPU Copy frame if VA display of input buffer is different from that of encoder, like we've been doing on Windows Part-of: --- subprojects/gst-plugins-bad/sys/qsv/gstqsvallocator_va.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/qsv/gstqsvallocator_va.cpp b/subprojects/gst-plugins-bad/sys/qsv/gstqsvallocator_va.cpp index e30e537dd3..31159d43e5 100644 --- a/subprojects/gst-plugins-bad/sys/qsv/gstqsvallocator_va.cpp +++ b/subprojects/gst-plugins-bad/sys/qsv/gstqsvallocator_va.cpp @@ -87,15 +87,17 @@ static GstBuffer * gst_qsv_va_allocator_upload (GstQsvAllocator * allocator, const GstVideoInfo * info, GstBuffer * buffer, GstBufferPool * pool) { + GstQsvVaAllocator *self = GST_QSV_VA_ALLOCATOR (allocator); GstVideoFrame src_frame, dst_frame; VASurfaceID surface; GstBuffer *dst_buf; GstFlowReturn ret; - /* TODO: handle buffer from different VA display */ surface = gst_va_buffer_get_surface (buffer); - if (surface != VA_INVALID_ID) + if (surface != VA_INVALID_ID && gst_va_buffer_peek_display (buffer) == + self->display) { return gst_buffer_ref (buffer); + } ret = gst_buffer_pool_acquire_buffer (pool, &dst_buf, nullptr); if (ret != GST_FLOW_OK) {