From 18728310c9d0609055580cf70b210dee478f1dbc Mon Sep 17 00:00:00 2001 From: Haihao Xiang Date: Fri, 24 May 2019 16:48:45 +0800 Subject: [PATCH] msdkdec: output the decoded frame immediately if decoded order is required DecodedOrder was deprecated in msdk-2017 version, but some customers still use this for low-latency streaming of non-b-frame encoded streams, which needs to output the frame at once --- sys/msdk/gstmsdkdec.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sys/msdk/gstmsdkdec.c b/sys/msdk/gstmsdkdec.c index f52c15c0c5..12c504b757 100644 --- a/sys/msdk/gstmsdkdec.c +++ b/sys/msdk/gstmsdkdec.c @@ -915,6 +915,15 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) bitstream.Data = map_info.data; bitstream.DataLength = map_info.size; bitstream.MaxLength = map_info.size; + + /* + * MFX_BITSTREAM_COMPLETE_FRAME was removed since commit df59db9, however + * some customers still use DecodedOrder (deprecated in msdk-2017 version) + * for low-latency streaming of non-b-frame encoded streams, which needs to + * output the frame at once, so add it back for this case + */ + if (thiz->param.mfx.DecodedOrder == GST_MSDKDEC_OUTPUT_ORDER_DECODE) + bitstream.DataFlag |= MFX_BITSTREAM_COMPLETE_FRAME; } else { /* Non packetized streams: eg: vc1 advanced profile with per buffer bdu */ gst_adapter_push (thiz->adapter, gst_buffer_ref (input_buffer)); @@ -1104,6 +1113,14 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame) flow = GST_FLOW_OK; } + /* + * DecodedOrder was deprecated in msdk-2017 version, but some + * customers still using this for low-latency streaming of non-b-frame + * encoded streams, which needs to output the frame at once + */ + if (thiz->param.mfx.DecodedOrder == GST_MSDKDEC_OUTPUT_ORDER_DECODE) + gst_msdkdec_finish_task (thiz, task); + done: if (surface) free_surface (thiz, surface);