From 9e2a9e34cc6302936d79cab6d45165193936e8ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Bernon?= Date: Tue, 9 Aug 2022 09:21:44 +0200 Subject: [PATCH] winegstreamer: Set MFT_OUTPUT_DATA_BUFFER_INCOMPLETE in wg_transform_read_mf. --- dlls/winegstreamer/color_convert.c | 4 +++- dlls/winegstreamer/gst_private.h | 2 +- dlls/winegstreamer/h264_decoder.c | 4 +++- dlls/winegstreamer/resampler.c | 7 ++----- dlls/winegstreamer/video_processor.c | 4 +++- dlls/winegstreamer/wg_sample.c | 7 +++++-- dlls/winegstreamer/wma_decoder.c | 7 ++----- 7 files changed, 19 insertions(+), 16 deletions(-) diff --git a/dlls/winegstreamer/color_convert.c b/dlls/winegstreamer/color_convert.c index 81067d052f7..2b8d06b991c 100644 --- a/dlls/winegstreamer/color_convert.c +++ b/dlls/winegstreamer/color_convert.c @@ -595,8 +595,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, return MF_E_BUFFERTOOSMALL; } - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL))) + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, + &samples[0].dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false); + wg_sample_release(wg_sample); if (hr == MF_E_TRANSFORM_STREAM_CHANGE) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 324d677ebe8..a7a1397873d 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -135,7 +135,7 @@ HRESULT wg_transform_push_mf(struct wg_transform *transform, struct wg_sample *s HRESULT wg_transform_push_quartz(struct wg_transform *transform, struct wg_sample *sample, struct wg_sample_queue *queue); HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *sample, - struct wg_format *format); + struct wg_format *format, DWORD *flags); HRESULT wg_transform_read_quartz(struct wg_transform *transform, struct wg_sample *sample); HRESULT winegstreamer_stream_handler_create(REFIID riid, void **obj); diff --git a/dlls/winegstreamer/h264_decoder.c b/dlls/winegstreamer/h264_decoder.c index 3e29a7bafd9..90ae4793392 100644 --- a/dlls/winegstreamer/h264_decoder.c +++ b/dlls/winegstreamer/h264_decoder.c @@ -641,8 +641,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, return MF_E_BUFFERTOOSMALL; } - if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, &wg_format))) + if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, &wg_format, + &samples[0].dwStatus))) wg_sample_queue_flush(decoder->wg_sample_queue, false); + wg_sample_release(wg_sample); if (hr == MF_E_TRANSFORM_STREAM_CHANGE) diff --git a/dlls/winegstreamer/resampler.c b/dlls/winegstreamer/resampler.c index 1d35775af68..122802d5413 100644 --- a/dlls/winegstreamer/resampler.c +++ b/dlls/winegstreamer/resampler.c @@ -565,12 +565,9 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, return MF_E_BUFFERTOOSMALL; } - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL))) - { - if (wg_sample->flags & WG_SAMPLE_FLAG_INCOMPLETE) - samples[0].dwStatus |= MFT_OUTPUT_DATA_BUFFER_INCOMPLETE; + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, + &samples[0].dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false); - } wg_sample_release(wg_sample); diff --git a/dlls/winegstreamer/video_processor.c b/dlls/winegstreamer/video_processor.c index b513b1e52b5..86aa2d269cf 100644 --- a/dlls/winegstreamer/video_processor.c +++ b/dlls/winegstreamer/video_processor.c @@ -571,8 +571,10 @@ static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD f return MF_E_BUFFERTOOSMALL; } - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL))) + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, + &samples[0].dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false); + wg_sample_release(wg_sample); if (hr == MF_E_TRANSFORM_STREAM_CHANGE) diff --git a/dlls/winegstreamer/wg_sample.c b/dlls/winegstreamer/wg_sample.c index ae8a2d4d0c7..d8fe8662f65 100644 --- a/dlls/winegstreamer/wg_sample.c +++ b/dlls/winegstreamer/wg_sample.c @@ -20,6 +20,7 @@ #include "wmcodecdsp.h" #include "mfapi.h" +#include "mferror.h" #include "wine/debug.h" #include "wine/list.h" @@ -282,12 +283,12 @@ HRESULT wg_transform_push_mf(struct wg_transform *transform, struct wg_sample *w } HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *wg_sample, - struct wg_format *format) + struct wg_format *format, DWORD *flags) { struct sample *sample = unsafe_mf_from_wg_sample(wg_sample); HRESULT hr; - TRACE_(mfplat)("transform %p, wg_sample %p, format %p.\n", transform, wg_sample, format); + TRACE_(mfplat)("transform %p, wg_sample %p, format %p, flags %p.\n", transform, wg_sample, format, flags); if (FAILED(hr = wg_transform_read_data(transform, wg_sample, format))) return hr; @@ -295,6 +296,8 @@ HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *w if (FAILED(hr = IMFMediaBuffer_SetCurrentLength(sample->u.mf.buffer, wg_sample->size))) return hr; + if (wg_sample->flags & WG_SAMPLE_FLAG_INCOMPLETE) + *flags |= MFT_OUTPUT_DATA_BUFFER_INCOMPLETE; if (wg_sample->flags & WG_SAMPLE_FLAG_HAS_PTS) IMFSample_SetSampleTime(sample->u.mf.sample, wg_sample->pts); if (wg_sample->flags & WG_SAMPLE_FLAG_HAS_DURATION) diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 31fb49df1f7..ceb5c523506 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -591,12 +591,9 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, return MF_E_BUFFERTOOSMALL; } - if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, NULL))) - { - if (wg_sample->flags & WG_SAMPLE_FLAG_INCOMPLETE) - samples[0].dwStatus |= MFT_OUTPUT_DATA_BUFFER_INCOMPLETE; + if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, NULL, + &samples[0].dwStatus))) wg_sample_queue_flush(decoder->wg_sample_queue, false); - } wg_sample_release(wg_sample); -- 2.11.4.GIT