mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
vpxdec: Unref frame in all code paths of handle_frame()
https://bugzilla.gnome.org/show_bug.cgi?id=760666
This commit is contained in:
parent
01f995b8dd
commit
7eee775d5f
1 changed files with 8 additions and 4 deletions
|
@ -564,12 +564,10 @@ gst_vpx_dec_open_codec (GstVPXDec * dec, GstVideoCodecFrame * frame)
|
||||||
if (status != VPX_CODEC_OK) {
|
if (status != VPX_CODEC_OK) {
|
||||||
GST_WARNING_OBJECT (dec, "VPX preprocessing error: %s",
|
GST_WARNING_OBJECT (dec, "VPX preprocessing error: %s",
|
||||||
gst_vpx_error_name (status));
|
gst_vpx_error_name (status));
|
||||||
gst_video_decoder_drop_frame (GST_VIDEO_DECODER (dec), frame);
|
|
||||||
return GST_FLOW_CUSTOM_SUCCESS_1;
|
return GST_FLOW_CUSTOM_SUCCESS_1;
|
||||||
}
|
}
|
||||||
if (!stream_info.is_kf) {
|
if (!stream_info.is_kf) {
|
||||||
GST_WARNING_OBJECT (dec, "No keyframe, skipping");
|
GST_WARNING_OBJECT (dec, "No keyframe, skipping");
|
||||||
gst_video_decoder_drop_frame (GST_VIDEO_DECODER (dec), frame);
|
|
||||||
return GST_FLOW_CUSTOM_SUCCESS_1;
|
return GST_FLOW_CUSTOM_SUCCESS_1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -644,10 +642,13 @@ gst_vpx_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
||||||
|
|
||||||
if (!dec->decoder_inited) {
|
if (!dec->decoder_inited) {
|
||||||
ret = vpxclass->open_codec (dec, frame);
|
ret = vpxclass->open_codec (dec, frame);
|
||||||
if (ret == GST_FLOW_CUSTOM_SUCCESS_1)
|
if (ret == GST_FLOW_CUSTOM_SUCCESS_1) {
|
||||||
|
gst_video_decoder_drop_frame (decoder, frame);
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
else if (ret != GST_FLOW_OK)
|
} else if (ret != GST_FLOW_OK) {
|
||||||
|
gst_video_codec_frame_unref (frame);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deadline = gst_video_decoder_get_max_decode_time (decoder, frame);
|
deadline = gst_video_decoder_get_max_decode_time (decoder, frame);
|
||||||
|
@ -661,6 +662,7 @@ gst_vpx_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
||||||
|
|
||||||
if (!gst_buffer_map (frame->input_buffer, &minfo, GST_MAP_READ)) {
|
if (!gst_buffer_map (frame->input_buffer, &minfo, GST_MAP_READ)) {
|
||||||
GST_ERROR_OBJECT (dec, "Failed to map input buffer");
|
GST_ERROR_OBJECT (dec, "Failed to map input buffer");
|
||||||
|
gst_video_codec_frame_unref (frame);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,6 +674,7 @@ gst_vpx_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
||||||
if (status) {
|
if (status) {
|
||||||
GST_VIDEO_DECODER_ERROR (decoder, 1, LIBRARY, ENCODE,
|
GST_VIDEO_DECODER_ERROR (decoder, 1, LIBRARY, ENCODE,
|
||||||
("Failed to decode frame"), ("%s", gst_vpx_error_name (status)), ret);
|
("Failed to decode frame"), ("%s", gst_vpx_error_name (status)), ret);
|
||||||
|
gst_video_codec_frame_unref (frame);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,6 +685,7 @@ gst_vpx_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
|
||||||
GST_ELEMENT_ERROR (decoder, LIBRARY, ENCODE,
|
GST_ELEMENT_ERROR (decoder, LIBRARY, ENCODE,
|
||||||
("Failed to decode frame"), ("Unsupported color format %d",
|
("Failed to decode frame"), ("Unsupported color format %d",
|
||||||
img->fmt));
|
img->fmt));
|
||||||
|
gst_video_codec_frame_unref (frame);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue