From: Rémi Bernon rbernon@codeweavers.com
--- 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);