diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_av1.c b/gst-libs/gst/vaapi/gstvaapidecoder_av1.c index 5d5610c707..062b310be6 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder_av1.c +++ b/gst-libs/gst/vaapi/gstvaapidecoder_av1.c @@ -945,11 +945,13 @@ static GstVaapiDecoderStatus av1_decode_current_picture (GstVaapiDecoderAV1 * decoder) { GstVaapiDecoderAV1Private *priv = &decoder->priv; - GstVaapiPicture *const picture = (GstVaapiPicture *) priv->current_picture; + GstVaapiPictureAV1 *const picture = + (GstVaapiPictureAV1 *) priv->current_picture; g_assert (picture); - if (!gst_vaapi_picture_decode (picture)) + if (!gst_vaapi_picture_decode_with_surface_id (GST_VAAPI_PICTURE (picture), + GST_VAAPI_SURFACE_PROXY_SURFACE_ID (picture->recon_proxy))) return GST_VAAPI_DECODER_STATUS_ERROR_UNKNOWN; return GST_VAAPI_DECODER_STATUS_SUCCESS; diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_objects.c b/gst-libs/gst/vaapi/gstvaapidecoder_objects.c index 8139e1406b..159625f8c2 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder_objects.c +++ b/gst-libs/gst/vaapi/gstvaapidecoder_objects.c @@ -242,7 +242,8 @@ do_decode (VADisplay dpy, VAContextID ctx, VABufferID * buf_id, void **buf_ptr) } gboolean -gst_vaapi_picture_decode (GstVaapiPicture * picture) +gst_vaapi_picture_decode_with_surface_id (GstVaapiPicture * picture, + VASurfaceID surface_id) { GstVaapiIqMatrix *iq_matrix; GstVaapiBitPlane *bitplane; @@ -254,13 +255,14 @@ gst_vaapi_picture_decode (GstVaapiPicture * picture) guint i; g_return_val_if_fail (GST_VAAPI_IS_PICTURE (picture), FALSE); + g_return_val_if_fail (surface_id != VA_INVALID_SURFACE, FALSE); va_display = GET_VA_DISPLAY (picture); va_context = GET_VA_CONTEXT (picture); - GST_DEBUG ("decode picture 0x%08x", picture->surface_id); + GST_DEBUG ("decode picture 0x%08x", surface_id); - status = vaBeginPicture (va_display, va_context, picture->surface_id); + status = vaBeginPicture (va_display, va_context, surface_id); if (!vaapi_check_status (status, "vaBeginPicture()")) return FALSE; @@ -319,6 +321,15 @@ gst_vaapi_picture_decode (GstVaapiPicture * picture) return TRUE; } +gboolean +gst_vaapi_picture_decode (GstVaapiPicture * picture) +{ + g_return_val_if_fail (GST_VAAPI_IS_PICTURE (picture), FALSE); + + return gst_vaapi_picture_decode_with_surface_id (picture, + picture->surface_id); +} + /* Mark picture as output for internal purposes only. Don't push frame out */ static void do_output_internal (GstVaapiPicture * picture) diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_objects.h b/gst-libs/gst/vaapi/gstvaapidecoder_objects.h index 16ef2550e6..cc301d17e4 100644 --- a/gst-libs/gst/vaapi/gstvaapidecoder_objects.h +++ b/gst-libs/gst/vaapi/gstvaapidecoder_objects.h @@ -196,6 +196,11 @@ G_GNUC_INTERNAL gboolean gst_vaapi_picture_decode (GstVaapiPicture * picture); +G_GNUC_INTERNAL +gboolean +gst_vaapi_picture_decode_with_surface_id (GstVaapiPicture * picture, + VASurfaceID surface_id); + G_GNUC_INTERNAL gboolean gst_vaapi_picture_output (GstVaapiPicture * picture);