gst_msdkdec_finish_task() may release all frames in
GstVideoDecoder object. In this case, allocate_output_buffer()
cannot get the oldest frame to allocate buffer.
So gst_msdkdec_handle_frame() should return GST_FLOW_OK for
letting gst_video_decoder_decode_frame() to send a new frame
for decoding.
Fixes #664.
Fixes #665.
if (GST_PAD_IS_FLUSHING (decoder->srcpad))
return GST_FLOW_FLUSHING;
else
- return GST_FLOW_ERROR;
+ return GST_FLOW_CUSTOM_SUCCESS;
}
if (!frame->output_buffer) {
goto error;
if (!surface) {
flow = allocate_output_buffer (thiz, &buffer);
- if (flow != GST_FLOW_OK)
+ if (flow == GST_FLOW_CUSTOM_SUCCESS) {
+ flow = GST_FLOW_OK;
+ break;
+ } else if (flow != GST_FLOW_OK)
goto error;
surface = get_surface (thiz, buffer);
if (!surface) {