d3d11: d3d11vp9dec: Fix use_prev_in_find_mv_refs value setting

"last_show_frame" should be updated based on
GstVp9FrameHeader::show_frame, not show_existing_frame

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1021>
This commit is contained in:
Seungha Yang 2021-10-03 01:45:57 +09:00
parent 571aad3980
commit 6a756b9f46

View file

@ -420,13 +420,9 @@ gst_d3d11_vp9_dec_duplicate_picture (GstVp9Decoder * decoder,
GstVideoCodecFrame * frame, GstVp9Picture * picture) GstVideoCodecFrame * frame, GstVp9Picture * picture)
{ {
GstD3D11Vp9Dec *self = GST_D3D11_VP9_DEC (decoder); GstD3D11Vp9Dec *self = GST_D3D11_VP9_DEC (decoder);
GstD3D11Vp9DecInner *inner = self->inner;
GstBuffer *view_buffer; GstBuffer *view_buffer;
GstVp9Picture *new_picture; GstVp9Picture *new_picture;
/* This method is called when show_frame == FALSE */
inner->last_show_frame = FALSE;
view_buffer = (GstBuffer *) gst_vp9_picture_get_user_data (picture); view_buffer = (GstBuffer *) gst_vp9_picture_get_user_data (picture);
if (!view_buffer) { if (!view_buffer) {
@ -578,11 +574,13 @@ gst_d3d11_vp9_dec_copy_loop_filter_params (GstD3D11Vp9Dec * self,
params->mode_ref_delta_enabled = lfp->loop_filter_delta_enabled; params->mode_ref_delta_enabled = lfp->loop_filter_delta_enabled;
params->mode_ref_delta_update = lfp->loop_filter_delta_update; params->mode_ref_delta_update = lfp->loop_filter_delta_update;
params->use_prev_in_find_mv_refs = params->use_prev_in_find_mv_refs =
inner->last_show_frame && inner->last_show_frame && !frame_hdr->error_resilient_mode;
frame_hdr->width == inner->last_frame_width &&
frame_hdr->height == inner->last_frame_height && if (frame_hdr->frame_type != GST_VP9_KEY_FRAME && !frame_hdr->intra_only) {
!frame_hdr->error_resilient_mode && params->use_prev_in_find_mv_refs &=
!(frame_hdr->frame_type == GST_VP9_KEY_FRAME || frame_hdr->intra_only); (frame_hdr->width == inner->last_frame_width &&
frame_hdr->height == inner->last_frame_height);
}
G_STATIC_ASSERT (G_N_ELEMENTS (params->ref_deltas) == G_STATIC_ASSERT (G_N_ELEMENTS (params->ref_deltas) ==
G_N_ELEMENTS (lfp->loop_filter_ref_deltas)); G_N_ELEMENTS (lfp->loop_filter_ref_deltas));
@ -700,7 +698,7 @@ gst_d3d11_vp9_dec_decode_picture (GstVp9Decoder * decoder,
inner->last_frame_width = pic_params->width; inner->last_frame_width = pic_params->width;
inner->last_frame_height = pic_params->height; inner->last_frame_height = pic_params->height;
inner->last_show_frame = TRUE; inner->last_show_frame = pic_params->show_frame;
return GST_FLOW_OK; return GST_FLOW_OK;
} }