summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/mediafoundation/gstmftransform.cpp10
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;
+ }
}
}