From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/color_convert.c | 12 ++++++------ dlls/winegstreamer/h264_decoder.c | 6 +++--- dlls/winegstreamer/resampler.c | 15 +++++++-------- dlls/winegstreamer/video_processor.c | 11 ++++++----- dlls/winegstreamer/wma_decoder.c | 13 ++++++------- 5 files changed, 28 insertions(+), 29 deletions(-)
diff --git a/dlls/winegstreamer/color_convert.c b/dlls/winegstreamer/color_convert.c index 7ffe29de907..4b985338778 100644 --- a/dlls/winegstreamer/color_convert.c +++ b/dlls/winegstreamer/color_convert.c @@ -553,15 +553,15 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, if (count != 1) return E_INVALIDARG;
- if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) - return hr; - if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET;
- *status = 0; - samples[0].dwStatus = 0; - if (!samples[0].pSample) return E_INVALIDARG; + *status = samples->dwStatus = 0; + if (!samples->pSample) + return E_INVALIDARG; + + if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) + return hr;
if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) return hr; diff --git a/dlls/winegstreamer/h264_decoder.c b/dlls/winegstreamer/h264_decoder.c index cf4a79303ab..bddb83e160a 100644 --- a/dlls/winegstreamer/h264_decoder.c +++ b/dlls/winegstreamer/h264_decoder.c @@ -607,9 +607,9 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, if (!decoder->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET;
- *status = 0; - samples[0].dwStatus = 0; - if (!samples[0].pSample) return E_INVALIDARG; + *status = samples->dwStatus = 0; + if (!samples->pSample) + return E_INVALIDARG;
if (FAILED(hr = IMFMediaType_GetGUID(decoder->output_type, &MF_MT_SUBTYPE, &subtype))) return hr; diff --git a/dlls/winegstreamer/resampler.c b/dlls/winegstreamer/resampler.c index 7dd50da1c2d..e2052ff44a5 100644 --- a/dlls/winegstreamer/resampler.c +++ b/dlls/winegstreamer/resampler.c @@ -531,23 +531,22 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags,
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status);
- if (count > 1) + if (count != 1) return E_INVALIDARG;
if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET;
- if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) - return hr; - - *status = 0; - samples[0].dwStatus = 0; - if (!samples[0].pSample) + *status = samples->dwStatus = 0; + if (!samples->pSample) { - samples[0].dwStatus = MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE; + samples->dwStatus = MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE; return MF_E_TRANSFORM_NEED_MORE_INPUT; }
+ if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) + return hr; + if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) return hr;
diff --git a/dlls/winegstreamer/video_processor.c b/dlls/winegstreamer/video_processor.c index a0f1c52f356..3cad80550d1 100644 --- a/dlls/winegstreamer/video_processor.c +++ b/dlls/winegstreamer/video_processor.c @@ -534,14 +534,15 @@ static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD f if (count != 1) return E_INVALIDARG;
- if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) - return hr; - if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET;
- samples[0].dwStatus = 0; - if (!samples[0].pSample) return E_INVALIDARG; + samples->dwStatus = 0; + if (!samples->pSample) + return E_INVALIDARG; + + if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) + return hr;
if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) return hr; diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index a68d5c0f607..80167db40ce 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -553,23 +553,22 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags,
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status);
- if (count > 1) + if (count != 1) return E_INVALIDARG;
if (!decoder->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET;
- if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) - return hr; - - *status = 0; - samples[0].dwStatus = 0; - if (!samples[0].pSample) + *status = samples->dwStatus = 0; + if (!samples->pSample) { samples[0].dwStatus = MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE; return MF_E_TRANSFORM_NEED_MORE_INPUT; }
+ if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) + return hr; + if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) return hr;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winegstreamer/color_convert.c | 16 ++---------- dlls/winegstreamer/gst_private.h | 4 +-- dlls/winegstreamer/h264_decoder.c | 16 ++---------- dlls/winegstreamer/resampler.c | 17 ++----------- dlls/winegstreamer/video_processor.c | 16 ++---------- dlls/winegstreamer/wg_sample.c | 38 ++++++++++++++++++++-------- dlls/winegstreamer/wma_decoder.c | 17 ++----------- 7 files changed, 39 insertions(+), 85 deletions(-)
diff --git a/dlls/winegstreamer/color_convert.c b/dlls/winegstreamer/color_convert.c index 4b985338778..0eaddc687ee 100644 --- a/dlls/winegstreamer/color_convert.c +++ b/dlls/winegstreamer/color_convert.c @@ -545,7 +545,6 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, { struct color_convert *impl = impl_from_IMFTransform(iface); MFT_OUTPUT_STREAM_INFO info; - struct wg_sample *wg_sample; HRESULT hr;
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); @@ -563,21 +562,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) return hr;
- if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) - return hr; - - if (wg_sample->max_size < info.cbSize) - { - wg_sample_release(wg_sample); - return MF_E_BUFFERTOOSMALL; - } - - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, - &samples[0].dwStatus))) + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, samples->pSample, + info.cbSize, NULL, &samples->dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false);
- wg_sample_release(wg_sample); - return hr; }
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index fed5766d3a4..0206e9bc0c0 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -134,8 +134,8 @@ HRESULT wg_transform_push_mf(struct wg_transform *transform, IMFSample *sample, struct wg_sample_queue *queue); 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, DWORD *flags); +HRESULT wg_transform_read_mf(struct wg_transform *transform, IMFSample *sample, + DWORD sample_size, 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 bddb83e160a..ead00e20840 100644 --- a/dlls/winegstreamer/h264_decoder.c +++ b/dlls/winegstreamer/h264_decoder.c @@ -592,7 +592,6 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, MFT_OUTPUT_DATA_BUFFER *samples, DWORD *status) { struct h264_decoder *decoder = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; struct wg_format wg_format; UINT32 sample_size; UINT64 frame_rate; @@ -617,21 +616,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, decoder->wg_format.u.video.height, &sample_size))) return hr;
- if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) - return hr; - - if (wg_sample->max_size < sample_size) - { - wg_sample_release(wg_sample); - return MF_E_BUFFERTOOSMALL; - } - - if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, &wg_format, - &samples[0].dwStatus))) + if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, samples->pSample, + sample_size, &wg_format, &samples->dwStatus))) wg_sample_queue_flush(decoder->wg_sample_queue, false);
- wg_sample_release(wg_sample); - if (hr == MF_E_TRANSFORM_STREAM_CHANGE) { decoder->wg_format = wg_format; diff --git a/dlls/winegstreamer/resampler.c b/dlls/winegstreamer/resampler.c index e2052ff44a5..88e9727ff21 100644 --- a/dlls/winegstreamer/resampler.c +++ b/dlls/winegstreamer/resampler.c @@ -526,7 +526,6 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, { struct resampler *impl = impl_from_IMFTransform(iface); MFT_OUTPUT_STREAM_INFO info; - struct wg_sample *wg_sample; HRESULT hr;
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); @@ -547,22 +546,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) return hr;
- if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) - return hr; - - wg_sample->size = 0; - if (wg_sample->max_size < info.cbSize) - { - wg_sample_release(wg_sample); - return MF_E_BUFFERTOOSMALL; - } - - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, - &samples[0].dwStatus))) + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, samples->pSample, + info.cbSize, NULL, &samples->dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false);
- wg_sample_release(wg_sample); - return hr; }
diff --git a/dlls/winegstreamer/video_processor.c b/dlls/winegstreamer/video_processor.c index 3cad80550d1..21bc46b0bb3 100644 --- a/dlls/winegstreamer/video_processor.c +++ b/dlls/winegstreamer/video_processor.c @@ -526,7 +526,6 @@ static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD f { struct video_processor *impl = impl_from_IMFTransform(iface); MFT_OUTPUT_STREAM_INFO info; - struct wg_sample *wg_sample; HRESULT hr;
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); @@ -544,21 +543,10 @@ static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD f if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) return hr;
- if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) - return hr; - - if (wg_sample->max_size < info.cbSize) - { - wg_sample_release(wg_sample); - return MF_E_BUFFERTOOSMALL; - } - - if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, wg_sample, NULL, - &samples[0].dwStatus))) + if (SUCCEEDED(hr = wg_transform_read_mf(impl->wg_transform, samples->pSample, + info.cbSize, NULL, &samples->dwStatus))) wg_sample_queue_flush(impl->wg_sample_queue, false);
- wg_sample_release(wg_sample); - return hr; }
diff --git a/dlls/winegstreamer/wg_sample.c b/dlls/winegstreamer/wg_sample.c index 4dcac74348e..f48639a6822 100644 --- a/dlls/winegstreamer/wg_sample.c +++ b/dlls/winegstreamer/wg_sample.c @@ -285,34 +285,50 @@ HRESULT wg_transform_push_mf(struct wg_transform *transform, IMFSample *sample, return hr; }
-HRESULT wg_transform_read_mf(struct wg_transform *transform, struct wg_sample *wg_sample, - struct wg_format *format, DWORD *flags) +HRESULT wg_transform_read_mf(struct wg_transform *transform, IMFSample *sample, + DWORD sample_size, struct wg_format *format, DWORD *flags) { - struct sample *sample = unsafe_mf_from_wg_sample(wg_sample); + struct wg_sample *wg_sample; + IMFMediaBuffer *buffer; HRESULT hr;
- TRACE_(mfplat)("transform %p, wg_sample %p, format %p, flags %p.\n", transform, wg_sample, format, flags); + TRACE_(mfplat)("transform %p, sample %p, format %p, flags %p.\n", transform, sample, format, flags); + + if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) + return hr; + + wg_sample->size = 0; + if (wg_sample->max_size < sample_size) + { + wg_sample_release(wg_sample); + return MF_E_BUFFERTOOSMALL; + }
if (FAILED(hr = wg_transform_read_data(transform, wg_sample, format))) { if (hr == MF_E_TRANSFORM_STREAM_CHANGE && !format) FIXME("Unexpected stream format change!\n"); + wg_sample_release(wg_sample); return hr; }
- 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); + IMFSample_SetSampleTime(sample, wg_sample->pts); if (wg_sample->flags & WG_SAMPLE_FLAG_HAS_DURATION) - IMFSample_SetSampleDuration(sample->u.mf.sample, wg_sample->duration); + IMFSample_SetSampleDuration(sample, wg_sample->duration); if (wg_sample->flags & WG_SAMPLE_FLAG_SYNC_POINT) - IMFSample_SetUINT32(sample->u.mf.sample, &MFSampleExtension_CleanPoint, 1); + IMFSample_SetUINT32(sample, &MFSampleExtension_CleanPoint, 1);
- return S_OK; + if (SUCCEEDED(hr = IMFSample_ConvertToContiguousBuffer(sample, &buffer))) + { + hr = IMFMediaBuffer_SetCurrentLength(buffer, wg_sample->size); + IMFMediaBuffer_Release(buffer); + } + + wg_sample_release(wg_sample); + return hr; }
HRESULT wg_transform_push_quartz(struct wg_transform *transform, struct wg_sample *wg_sample, diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 80167db40ce..4a0d5f2592e 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -548,7 +548,6 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, { struct wma_decoder *decoder = impl_from_IMFTransform(iface); MFT_OUTPUT_STREAM_INFO info; - struct wg_sample *wg_sample; HRESULT hr;
TRACE("iface %p, flags %#lx, count %lu, samples %p, status %p.\n", iface, flags, count, samples, status); @@ -569,22 +568,10 @@ static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, if (FAILED(hr = IMFTransform_GetOutputStreamInfo(iface, 0, &info))) return hr;
- if (FAILED(hr = wg_sample_create_mf(samples[0].pSample, &wg_sample))) - return hr; - - wg_sample->size = 0; - if (wg_sample->max_size < info.cbSize) - { - wg_sample_release(wg_sample); - return MF_E_BUFFERTOOSMALL; - } - - if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, wg_sample, NULL, - &samples[0].dwStatus))) + if (SUCCEEDED(hr = wg_transform_read_mf(decoder->wg_transform, samples->pSample, + info.cbSize, NULL, &samples->dwStatus))) wg_sample_queue_flush(decoder->wg_sample_queue, false);
- wg_sample_release(wg_sample); - return hr; }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124943
Your paranoid android.
=== build (build log) ===
error: patch failed: dlls/winegstreamer/color_convert.c:563 error: patch failed: dlls/winegstreamer/resampler.c:547 error: patch failed: dlls/winegstreamer/video_processor.c:544 error: patch failed: dlls/winegstreamer/wma_decoder.c:569 Task: Patch failed to apply
=== debian11 (build log) ===
error: patch failed: dlls/winegstreamer/color_convert.c:563 error: patch failed: dlls/winegstreamer/resampler.c:547 error: patch failed: dlls/winegstreamer/video_processor.c:544 error: patch failed: dlls/winegstreamer/wma_decoder.c:569 Task: Patch failed to apply
=== debian11 (build log) ===
error: patch failed: dlls/winegstreamer/color_convert.c:563 error: patch failed: dlls/winegstreamer/resampler.c:547 error: patch failed: dlls/winegstreamer/video_processor.c:544 error: patch failed: dlls/winegstreamer/wma_decoder.c:569 Task: Patch failed to apply
This merge request was approved by Zebediah Figura.