diff options
-rw-r--r-- | sys/mediafoundation/gstmftransform.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/mediafoundation/gstmftransform.cpp b/sys/mediafoundation/gstmftransform.cpp index 17c38b98e..ee30c2e90 100644 --- a/sys/mediafoundation/gstmftransform.cpp +++ b/sys/mediafoundation/gstmftransform.cpp @@ -539,6 +539,8 @@ gst_mf_transform_process_input (GstMFTransform * object, gst_mf_transform_drain_all_events (object); if (object->hardware) { + process_output: + /* Process pending output first */ while (object->pending_have_output > 0) { GST_TRACE_OBJECT (object, "Pending have output %d", object->pending_have_output); @@ -581,6 +583,14 @@ gst_mf_transform_process_input (GstMFTransform * object, GST_DEBUG_OBJECT (object, "Unhandled event %d", type); break; } + + /* If MFT doesn't want to handle input yet but we have pending output, + * process output again */ + if (object->pending_have_output > 0 && object->pending_need_input == 0) { + GST_TRACE_OBJECT (object, + "Only have pending output, process output again"); + goto process_output; + } } } |