picture->bitplane = NULL;
}
+ if (picture->proxy) {
+ g_object_unref(picture->proxy);
+ picture->proxy = NULL;
+ }
+
picture->surface_id = VA_INVALID_ID;
picture->surface = NULL;
{
picture->type = GST_VAAPI_PICTURE_TYPE_NONE;
picture->surface = NULL;
+ picture->proxy = NULL;
picture->surface_id = VA_INVALID_ID;
picture->param = NULL;
picture->param_id = VA_INVALID_ID;
g_return_val_if_fail(GST_VAAPI_IS_PICTURE(picture), FALSE);
- proxy = gst_vaapi_surface_proxy_new(GET_CONTEXT(picture), picture->surface);
- if (!proxy)
- return FALSE;
+ proxy = picture->proxy;
+ if (!proxy) {
+ proxy = gst_vaapi_surface_proxy_new(
+ GET_CONTEXT(picture),
+ picture->surface
+ );
+ if (!proxy)
+ return FALSE;
+ picture->proxy = proxy;
+ }
gst_vaapi_surface_proxy_set_timestamp(proxy, picture->pts);
- gst_vaapi_decoder_push_surface_proxy(GET_DECODER(picture), proxy);
+ gst_vaapi_decoder_push_surface_proxy(GET_DECODER(picture), g_object_ref(proxy));
return TRUE;
}