Nikolay Sivov : evr/mixer: Request more sample on successful ProcessOutput().

Alexandre Julliard julliard at winehq.org
Fri Oct 23 14:27:19 CDT 2020


Module: wine
Branch: master
Commit: b8507acf53eacc716187ee7046ab0dcec288dc2e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b8507acf53eacc716187ee7046ab0dcec288dc2e

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Oct 23 14:33:30 2020 +0300

evr/mixer: Request more sample on successful ProcessOutput().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/evr/mixer.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c
index c0d46ce5331..59d75c0476b 100644
--- a/dlls/evr/mixer.c
+++ b/dlls/evr/mixer.c
@@ -1038,6 +1038,7 @@ static HRESULT WINAPI video_mixer_transform_ProcessMessage(IMFTransform *iface,
                 {
                     IMFSample_Release(mixer->inputs[i].sample);
                     mixer->inputs[i].sample = NULL;
+                    mixer->inputs[i].sample_requested = 0;
                 }
             }
 
@@ -1150,6 +1151,7 @@ static HRESULT WINAPI video_mixer_transform_ProcessOutput(IMFTransform *iface, D
     struct video_mixer *mixer = impl_from_IMFTransform(iface);
     IDirect3DSurface9 *surface;
     IDirect3DDevice9 *device;
+    unsigned int i;
     HRESULT hr;
 
     TRACE("%p, %#x, %u, %p, %p.\n", iface, flags, count, buffers, status);
@@ -1168,8 +1170,26 @@ static HRESULT WINAPI video_mixer_transform_ProcessOutput(IMFTransform *iface, D
     {
         if (mixer->is_streaming)
         {
-            FIXME("Streaming state is not handled.\n");
-            hr = E_NOTIMPL;
+            for (i = 0; i < mixer->input_count; ++i)
+            {
+                if (!mixer->inputs[i].sample)
+                {
+                    hr = MF_E_TRANSFORM_NEED_MORE_INPUT;
+                    break;
+                }
+            }
+
+            /* FIXME: for now discard input */
+
+            if (SUCCEEDED(hr))
+            {
+                for (i = 0; i < mixer->input_count; ++i)
+                {
+                    IMFSample_Release(mixer->inputs[i].sample);
+                    mixer->inputs[i].sample = NULL;
+                    video_mixer_request_sample(mixer, i);
+                }
+            }
         }
         else
         {




More information about the wine-cvs mailing list