if ((priv->prev_picture && priv->next_picture) ||
(priv->closed_gop && priv->next_picture))
status = render_picture(decoder, picture);
- gst_vaapi_picture_unref(picture);
}
- priv->current_picture = NULL;
+ gst_vaapi_picture_replace(&priv->current_picture, NULL);
}
return status;
}
/* Update reference pictures */
if (pic_hdr->pic_type != GST_MPEG_VIDEO_PICTURE_TYPE_B) {
GST_VAAPI_PICTURE_FLAG_SET(picture, GST_VAAPI_PICTURE_FLAG_REFERENCE);
- if (priv->prev_picture) {
- gst_vaapi_picture_unref(priv->prev_picture);
- priv->prev_picture = NULL;
- }
- if (priv->next_picture) {
- priv->prev_picture = priv->next_picture;
- priv->next_picture = NULL;
- status = render_picture(decoder, priv->prev_picture);
- }
- priv->next_picture = picture;
+ if (priv->next_picture)
+ status = render_picture(decoder, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->prev_picture, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->next_picture, picture);
}
return status;
}
if ((priv->prev_picture && priv->next_picture) ||
(priv->closed_gop && priv->next_picture))
status = render_picture(decoder, picture);
- gst_vaapi_picture_unref(picture);
}
- priv->curr_picture = NULL;
+ gst_vaapi_picture_replace(&priv->curr_picture, NULL);
}
return status;
}
/* Update reference pictures */
/* XXX: consider priv->vol_hdr.low_delay, consider packed video frames for DivX/XviD */
if (GST_VAAPI_PICTURE_IS_REFERENCE(picture)) {
- if (priv->prev_picture) {
- gst_vaapi_picture_unref(priv->prev_picture);
- priv->prev_picture = NULL;
- }
- if (priv->next_picture) {
- priv->prev_picture = priv->next_picture;
- priv->next_picture = NULL;
- status = render_picture(decoder, priv->prev_picture);
- }
- priv->next_picture = picture;
+ if (priv->next_picture)
+ status = render_picture(decoder, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->prev_picture, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->next_picture, picture);
}
return status;
}
if (!GST_VAAPI_PICTURE_IS_REFERENCE(picture)) {
if (priv->prev_picture && priv->next_picture)
status = render_picture(decoder, picture);
- gst_vaapi_picture_unref(picture);
}
- priv->current_picture = NULL;
+ gst_vaapi_picture_replace(&priv->current_picture, NULL);
}
return status;
}
/* Update reference pictures */
if (GST_VAAPI_PICTURE_IS_REFERENCE(picture)) {
- if (priv->prev_picture) {
- gst_vaapi_picture_unref(priv->prev_picture);
- priv->prev_picture = NULL;
- }
- if (priv->next_picture) {
- priv->prev_picture = priv->next_picture;
- priv->next_picture = NULL;
- status = render_picture(decoder, priv->prev_picture);
- }
- priv->next_picture = picture;
+ if (priv->next_picture)
+ status = render_picture(decoder, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->prev_picture, priv->next_picture);
+ gst_vaapi_picture_replace(&priv->next_picture, picture);
}
if (!fill_picture(decoder, picture))