From 71da6a7152bcdfcc8151c18b08c18e2978238326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Wed, 14 Sep 2022 22:11:17 +0200 Subject: [PATCH] winegstreamer: Create wg_sample from IMFSample within wg_transform_push_mf. --- dlls/winegstreamer/color_convert.c | 8 +------- dlls/winegstreamer/gst_private.h | 2 +- dlls/winegstreamer/h264_decoder.c | 7 +------ dlls/winegstreamer/resampler.c | 8 +------- dlls/winegstreamer/video_processor.c | 8 +------- dlls/winegstreamer/wg_sample.c | 25 ++++++++++++++----------- dlls/winegstreamer/wma_decoder.c | 6 +----- 7 files changed, 20 insertions(+), 44 deletions(-) diff --git a/dlls/winegstreamer/color_convert.c b/dlls/winegstreamer/color_convert.c index de8eb5bcd9a..e4fb78752b0 100644 --- a/dlls/winegstreamer/color_convert.c +++ b/dlls/winegstreamer/color_convert.c @@ -544,19 +544,13 @@ static HRESULT WINAPI transform_ProcessMessage(IMFTransform *iface, MFT_MESSAGE_ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags) { struct color_convert *impl = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; - HRESULT hr; TRACE("iface %p, id %#lx, sample %p, flags %#lx.\n", iface, id, sample, flags); if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET; - if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) - return hr; - - return wg_transform_push_mf(impl->wg_transform, wg_sample, - impl->wg_sample_queue); + return wg_transform_push_mf(impl->wg_transform, sample, impl->wg_sample_queue); } static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count, diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index a7a1397873d..8e761758da4 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -130,7 +130,7 @@ HRESULT wg_sample_create_mf(IMFSample *sample, struct wg_sample **out); HRESULT wg_sample_create_quartz(IMediaSample *sample, struct wg_sample **out); void wg_sample_release(struct wg_sample *wg_sample); -HRESULT wg_transform_push_mf(struct wg_transform *transform, struct wg_sample *sample, +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); diff --git a/dlls/winegstreamer/h264_decoder.c b/dlls/winegstreamer/h264_decoder.c index 3a7576135da..44c6d992b55 100644 --- a/dlls/winegstreamer/h264_decoder.c +++ b/dlls/winegstreamer/h264_decoder.c @@ -585,18 +585,13 @@ static HRESULT WINAPI transform_ProcessMessage(IMFTransform *iface, MFT_MESSAGE_ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags) { struct h264_decoder *decoder = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; - HRESULT hr; TRACE("iface %p, id %#lx, sample %p, flags %#lx.\n", iface, id, sample, flags); if (!decoder->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET; - if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) - return hr; - - return wg_transform_push_mf(decoder->wg_transform, wg_sample, decoder->wg_sample_queue); + return wg_transform_push_mf(decoder->wg_transform, sample, decoder->wg_sample_queue); } static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count, diff --git a/dlls/winegstreamer/resampler.c b/dlls/winegstreamer/resampler.c index f2c414e5661..a9c9ae32e8a 100644 --- a/dlls/winegstreamer/resampler.c +++ b/dlls/winegstreamer/resampler.c @@ -513,19 +513,13 @@ static HRESULT WINAPI transform_ProcessMessage(IMFTransform *iface, MFT_MESSAGE_ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags) { struct resampler *impl = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; - HRESULT hr; TRACE("iface %p, id %#lx, sample %p, flags %#lx.\n", iface, id, sample, flags); if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET; - if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) - return hr; - - return wg_transform_push_mf(impl->wg_transform, wg_sample, - impl->wg_sample_queue); + return wg_transform_push_mf(impl->wg_transform, sample, impl->wg_sample_queue); } static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count, diff --git a/dlls/winegstreamer/video_processor.c b/dlls/winegstreamer/video_processor.c index de762aa0dbf..fcbccb3c3ef 100644 --- a/dlls/winegstreamer/video_processor.c +++ b/dlls/winegstreamer/video_processor.c @@ -521,19 +521,13 @@ static HRESULT WINAPI video_processor_ProcessMessage(IMFTransform *iface, MFT_ME static HRESULT WINAPI video_processor_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags) { struct video_processor *impl = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; - HRESULT hr; TRACE("iface %p, id %#lx, sample %p, flags %#lx.\n", iface, id, sample, flags); if (!impl->wg_transform) return MF_E_TRANSFORM_TYPE_NOT_SET; - if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) - return hr; - - return wg_transform_push_mf(impl->wg_transform, wg_sample, - impl->wg_sample_queue); + return wg_transform_push_mf(impl->wg_transform, sample, impl->wg_sample_queue); } static HRESULT WINAPI video_processor_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count, diff --git a/dlls/winegstreamer/wg_sample.c b/dlls/winegstreamer/wg_sample.c index 53a543fc625..4dcac74348e 100644 --- a/dlls/winegstreamer/wg_sample.c +++ b/dlls/winegstreamer/wg_sample.c @@ -252,28 +252,31 @@ HRESULT wg_transform_push_data(struct wg_transform *transform, struct wg_sample HRESULT wg_transform_read_data(struct wg_transform *transform, struct wg_sample *sample, struct wg_format *format); -HRESULT wg_transform_push_mf(struct wg_transform *transform, struct wg_sample *wg_sample, +HRESULT wg_transform_push_mf(struct wg_transform *transform, IMFSample *sample, struct wg_sample_queue *queue) { - struct sample *sample = unsafe_mf_from_wg_sample(wg_sample); + struct wg_sample *wg_sample; LONGLONG time, duration; UINT32 value; HRESULT hr; - TRACE_(mfplat)("transform %p, wg_sample %p, queue %p.\n", transform, wg_sample, queue); + TRACE_(mfplat)("transform %p, sample %p, queue %p.\n", transform, sample, queue); - if (SUCCEEDED(IMFSample_GetSampleTime(sample->u.mf.sample, &time))) + if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) + return hr; + + if (SUCCEEDED(IMFSample_GetSampleTime(sample, &time))) { - sample->wg_sample.flags |= WG_SAMPLE_FLAG_HAS_PTS; - sample->wg_sample.pts = time; + wg_sample->flags |= WG_SAMPLE_FLAG_HAS_PTS; + wg_sample->pts = time; } - if (SUCCEEDED(IMFSample_GetSampleDuration(sample->u.mf.sample, &duration))) + if (SUCCEEDED(IMFSample_GetSampleDuration(sample, &duration))) { - sample->wg_sample.flags |= WG_SAMPLE_FLAG_HAS_DURATION; - sample->wg_sample.duration = duration; + wg_sample->flags |= WG_SAMPLE_FLAG_HAS_DURATION; + wg_sample->duration = duration; } - if (SUCCEEDED(IMFSample_GetUINT32(sample->u.mf.sample, &MFSampleExtension_CleanPoint, &value)) && value) - sample->wg_sample.flags |= WG_SAMPLE_FLAG_SYNC_POINT; + if (SUCCEEDED(IMFSample_GetUINT32(sample, &MFSampleExtension_CleanPoint, &value)) && value) + wg_sample->flags |= WG_SAMPLE_FLAG_SYNC_POINT; wg_sample_queue_begin_append(queue, wg_sample); hr = wg_transform_push_data(transform, wg_sample); diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 4374f5bdcdf..6d8917c9c07 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -529,7 +529,6 @@ static HRESULT WINAPI transform_ProcessMessage(IMFTransform *iface, MFT_MESSAGE_ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFSample *sample, DWORD flags) { struct wma_decoder *decoder = impl_from_IMFTransform(iface); - struct wg_sample *wg_sample; MFT_INPUT_STREAM_INFO info; DWORD total_length; HRESULT hr; @@ -547,10 +546,7 @@ static HRESULT WINAPI transform_ProcessInput(IMFTransform *iface, DWORD id, IMFS if (total_length % info.cbSize) return S_OK; - if (FAILED(hr = wg_sample_create_mf(sample, &wg_sample))) - return hr; - - return wg_transform_push_mf(decoder->wg_transform, wg_sample, decoder->wg_sample_queue); + return wg_transform_push_mf(decoder->wg_transform, sample, decoder->wg_sample_queue); } static HRESULT WINAPI transform_ProcessOutput(IMFTransform *iface, DWORD flags, DWORD count,