Ziqing Hui : qasf/dmowrapper: Introduce release_output_samples.
Module: wine Branch: master Commit: 50485e0db4d143f05edbef6c473bc44c50e611a9 URL: https://gitlab.winehq.org/wine/wine/-/commit/50485e0db4d143f05edbef6c473bc44... Author: Ziqing Hui <zhui(a)codeweavers.com> Date: Tue Jun 4 11:12:59 2024 +0800 qasf/dmowrapper: Introduce release_output_samples. --- dlls/qasf/dmowrapper.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/dlls/qasf/dmowrapper.c b/dlls/qasf/dmowrapper.c index b98b18a7cac..1d4ad7f75e6 100644 --- a/dlls/qasf/dmowrapper.c +++ b/dlls/qasf/dmowrapper.c @@ -202,6 +202,20 @@ static void dmo_wrapper_sink_disconnect(struct strmbase_sink *iface) IMediaObject_Release(dmo); } +static void release_output_samples(struct dmo_wrapper *filter) +{ + DWORD i; + + for (i = 0; i < filter->source_count; ++i) + { + if (filter->sources[i].buffer.sample) + { + IMediaSample_Release(filter->sources[i].buffer.sample); + filter->sources[i].buffer.sample = NULL; + } + } +} + static HRESULT get_output_samples(struct dmo_wrapper *filter) { HRESULT hr; @@ -215,6 +229,7 @@ static HRESULT get_output_samples(struct dmo_wrapper *filter) &filter->sources[i].buffer.sample, NULL, NULL, 0))) { ERR("Failed to get sample for source %lu, hr %#lx.\n", i, hr); + release_output_samples(filter); return hr; } filter->buffers[i].pBuffer = &filter->sources[i].buffer.IMediaBuffer_iface; @@ -235,7 +250,7 @@ static HRESULT process_output(struct dmo_wrapper *filter, IMediaObject *dmo) HRESULT hr; if (FAILED(hr = get_output_samples(filter))) - goto out; + return hr; do { @@ -275,7 +290,8 @@ static HRESULT process_output(struct dmo_wrapper *filter, IMediaObject *dmo) if (FAILED(hr = IMemInputPin_Receive(filter->sources[i].pin.pMemInputPin, sample))) { WARN("Downstream sink returned %#lx.\n", hr); - goto out; + release_output_samples(filter); + return hr; } IMediaSample_SetActualDataLength(sample, 0); } @@ -283,16 +299,7 @@ static HRESULT process_output(struct dmo_wrapper *filter, IMediaObject *dmo) } } while (more_data); -out: - for (i = 0; i < filter->source_count; ++i) - { - if (filter->sources[i].buffer.sample) - { - IMediaSample_Release(filter->sources[i].buffer.sample); - filter->sources[i].buffer.sample = NULL; - } - } - + release_output_samples(filter); return hr; }
participants (1)
-
Alexandre Julliard