winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
August 2022
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
1 participants
596 discussions
Start a n
N
ew thread
Rémi Bernon : qasf: Configure WMReader stream format in asf_reader_init_stream.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: f508be5f34f9408e41e919a01c541d297b72673e URL:
https://gitlab.winehq.org/wine/wine/-/commit/f508be5f34f9408e41e919a01c541d…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Wed Aug 10 20:12:21 2022 +0200 qasf: Configure WMReader stream format in asf_reader_init_stream. --- dlls/qasf/asfreader.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index e127c91a92d..2585a4b07d1 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -208,6 +208,7 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) for (i = 0; i < filter->stream_count; ++i) { struct asf_stream *stream = filter->streams + i; + IWMOutputMediaProps *props; if (!stream->source.pin.peer) continue; @@ -218,6 +219,22 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) break; } + if (FAILED(hr = IWMReader_GetOutputFormat(filter->reader, stream->index, 0, &props))) + { + WARN("Failed to get stream %u output format, hr %#lx\n", i, hr); + break; + } + + hr = IWMOutputMediaProps_SetMediaType(props, (WM_MEDIA_TYPE *)&stream->source.pin.mt); + if (SUCCEEDED(hr)) + hr = IWMReader_SetOutputProps(filter->reader, stream->index, props); + IWMOutputMediaProps_Release(props); + if (FAILED(hr)) + { + WARN("Failed to set stream %u output format, hr %#lx\n", i, hr); + break; + } + if (FAILED(hr = IPin_NewSegment(stream->source.pin.peer, 0, 0, 1))) { WARN("Failed to start stream %u new segment, hr %#lx\n", i, hr);
1
0
0
0
Rémi Bernon : qasf: Start/stop the WM reader in asf_reader_init/cleanup_stream.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 8d369f42d7106a8623bbb446c7db9639b7027d23 URL:
https://gitlab.winehq.org/wine/wine/-/commit/8d369f42d7106a8623bbb446c7db96…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri Aug 5 08:55:35 2022 +0200 qasf: Start/stop the WM reader in asf_reader_init/cleanup_stream. --- dlls/qasf/asfreader.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index 935619bea4f..e127c91a92d 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -217,8 +217,30 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) WARN("Failed to commit stream %u allocator, hr %#lx\n", i, hr); break; } + + if (FAILED(hr = IPin_NewSegment(stream->source.pin.peer, 0, 0, 1))) + { + WARN("Failed to start stream %u new segment, hr %#lx\n", i, hr); + break; + } } + if (FAILED(hr)) + return hr; + + EnterCriticalSection(&filter->status_cs); + if (SUCCEEDED(hr = IWMReader_Start(filter->reader, 0, 0, 1, NULL))) + { + filter->status = -1; + while (filter->status != WMT_STARTED) + SleepConditionVariableCS(&filter->status_cv, &filter->status_cs, INFINITE); + hr = filter->result; + } + LeaveCriticalSection(&filter->status_cs); + + if (FAILED(hr)) + WARN("Failed to start WMReader %p, hr %#lx\n", filter->reader, hr); + return hr; } @@ -230,6 +252,19 @@ static HRESULT asf_reader_cleanup_stream(struct strmbase_filter *iface) TRACE("iface %p\n", iface); + EnterCriticalSection(&filter->status_cs); + if (SUCCEEDED(hr = IWMReader_Stop(filter->reader))) + { + filter->status = -1; + while (filter->status != WMT_STOPPED) + SleepConditionVariableCS(&filter->status_cv, &filter->status_cs, INFINITE); + hr = filter->result; + } + LeaveCriticalSection(&filter->status_cs); + + if (FAILED(hr)) + WARN("Failed to stop WMReader %p, hr %#lx\n", filter->reader, hr); + for (i = 0; i < filter->stream_count; ++i) { struct asf_stream *stream = filter->streams + i; @@ -506,6 +541,34 @@ static HRESULT WINAPI reader_callback_OnStatus(IWMReaderCallback *iface, WMT_STA WakeConditionVariable(&filter->status_cv); break; + case WMT_END_OF_STREAMING: + for (i = 0; i < filter->stream_count; ++i) + { + struct asf_stream *stream = filter->streams + i; + + if (!stream->source.pin.peer) + continue; + + IPin_EndOfStream(stream->source.pin.peer); + } + break; + + case WMT_STARTED: + EnterCriticalSection(&filter->status_cs); + filter->result = result; + filter->status = WMT_STARTED; + LeaveCriticalSection(&filter->status_cs); + WakeConditionVariable(&filter->status_cv); + break; + + case WMT_STOPPED: + EnterCriticalSection(&filter->status_cs); + filter->result = result; + filter->status = WMT_STOPPED; + LeaveCriticalSection(&filter->status_cs); + WakeConditionVariable(&filter->status_cv); + break; + default: WARN("Ignoring status %#x.\n", status); break;
1
0
0
0
Rémi Bernon : qasf: Implement ASF Reader filter init_stream and cleanup_stream.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 92e77de4fb0e8fab4d5cb6cb9e752b92273b1456 URL:
https://gitlab.winehq.org/wine/wine/-/commit/92e77de4fb0e8fab4d5cb6cb9e752b…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Thu Aug 4 21:37:24 2022 +0200 qasf: Implement ASF Reader filter init_stream and cleanup_stream. --- dlls/qasf/asfreader.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index d5b6483ada3..935619bea4f 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -197,11 +197,63 @@ static HRESULT asf_reader_query_interface(struct strmbase_filter *iface, REFIID return E_NOINTERFACE; } +static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) +{ + struct asf_reader *filter = impl_from_strmbase_filter(iface); + HRESULT hr = S_OK; + int i; + + TRACE("iface %p\n", iface); + + for (i = 0; i < filter->stream_count; ++i) + { + struct asf_stream *stream = filter->streams + i; + + if (!stream->source.pin.peer) + continue; + + if (FAILED(hr = IMemAllocator_Commit(stream->source.pAllocator))) + { + WARN("Failed to commit stream %u allocator, hr %#lx\n", i, hr); + break; + } + } + + return hr; +} + +static HRESULT asf_reader_cleanup_stream(struct strmbase_filter *iface) +{ + struct asf_reader *filter = impl_from_strmbase_filter(iface); + HRESULT hr = S_OK; + int i; + + TRACE("iface %p\n", iface); + + for (i = 0; i < filter->stream_count; ++i) + { + struct asf_stream *stream = filter->streams + i; + + if (!stream->source.pin.peer) + continue; + + if (FAILED(hr = IMemAllocator_Decommit(stream->source.pAllocator))) + { + WARN("Failed to decommit stream %u allocator, hr %#lx\n", i, hr); + break; + } + } + + return hr; +} + static const struct strmbase_filter_ops filter_ops = { .filter_get_pin = asf_reader_get_pin, .filter_destroy = asf_reader_destroy, .filter_query_interface = asf_reader_query_interface, + .filter_init_stream = asf_reader_init_stream, + .filter_cleanup_stream = asf_reader_cleanup_stream, }; static HRESULT WINAPI asf_reader_DecideBufferSize(struct strmbase_source *iface,
1
0
0
0
Rémi Bernon : qasf: Wait for IWMReader_Open to complete in ASF Reader Load.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 5ae74bc812bd1cd794466fc48419734ccb4e3fea URL:
https://gitlab.winehq.org/wine/wine/-/commit/5ae74bc812bd1cd794466fc4841973…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Fri May 20 22:19:00 2022 +0200 qasf: Wait for IWMReader_Open to complete in ASF Reader Load. --- dlls/qasf/asfreader.c | 66 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index 43a7a3534a8..d5b6483ada3 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -41,6 +41,11 @@ struct asf_reader AM_MEDIA_TYPE media_type; WCHAR *file_name; + HRESULT result; + WMT_STATUS status; + CRITICAL_SECTION status_cs; + CONDITION_VARIABLE status_cv; + IWMReaderCallback *callback; IWMReader *reader; @@ -171,6 +176,10 @@ static void asf_reader_destroy(struct strmbase_filter *iface) IWMReader_Release(filter->reader); strmbase_filter_cleanup(&filter->filter); + + filter->status_cs.DebugInfo->Spare[0] = 0; + DeleteCriticalSection(&filter->status_cs); + free(filter); } @@ -269,18 +278,35 @@ static HRESULT WINAPI file_source_Load(IFileSourceFilter *iface, LPCOLESTR file_ if (!file_name) return E_POINTER; - if (filter->file_name) + EnterCriticalSection(&filter->filter.filter_cs); + + if (filter->file_name || !(filter->file_name = wcsdup(file_name))) + { + LeaveCriticalSection(&filter->filter.filter_cs); return E_FAIL; + } - if (!(filter->file_name = wcsdup(file_name))) - return E_OUTOFMEMORY; + if (media_type && FAILED(hr = CopyMediaType(&filter->media_type, media_type))) + { + LeaveCriticalSection(&filter->filter.filter_cs); + return hr; + } - if (media_type) - CopyMediaType(&filter->media_type, media_type); + EnterCriticalSection(&filter->status_cs); + if (SUCCEEDED(hr = IWMReader_Open(filter->reader, filter->file_name, filter->callback, NULL))) + { + filter->status = -1; + while (filter->status != WMT_OPENED) + SleepConditionVariableCS(&filter->status_cv, &filter->status_cs, INFINITE); + hr = filter->result; + } + LeaveCriticalSection(&filter->status_cs); - if (FAILED(hr = IWMReader_Open(filter->reader, filter->file_name, filter->callback, NULL))) + if (FAILED(hr)) WARN("Failed to open WM reader, hr %#lx.\n", hr); + LeaveCriticalSection(&filter->filter.filter_cs); + return S_OK; } @@ -378,29 +404,25 @@ static ULONG WINAPI reader_callback_Release(IWMReaderCallback *iface) return ref; } -static HRESULT WINAPI reader_callback_OnStatus(IWMReaderCallback *iface, WMT_STATUS status, HRESULT hr, +static HRESULT WINAPI reader_callback_OnStatus(IWMReaderCallback *iface, WMT_STATUS status, HRESULT result, WMT_ATTR_DATATYPE type, BYTE *value, void *context) { struct asf_reader *filter = impl_from_IWMReaderCallback(iface)->filter; - AM_MEDIA_TYPE stream_media_type = {0}; + AM_MEDIA_TYPE stream_media_type = {{0}}; DWORD i, stream_count; WCHAR name[MAX_PATH]; + HRESULT hr; - TRACE("iface %p, status %d, hr %#lx, type %d, value %p, context %p.\n", - iface, status, hr, type, value, context); + TRACE("iface %p, status %d, result %#lx, type %d, value %p, context %p.\n", + iface, status, result, type, value, context); switch (status) { case WMT_OPENED: - if (FAILED(hr)) - { - ERR("Failed to open WMReader, hr %#lx.\n", hr); - break; - } if (FAILED(hr = IWMReader_GetOutputCount(filter->reader, &stream_count))) { ERR("Failed to get WMReader output count, hr %#lx.\n", hr); - break; + stream_count = 0; } if (stream_count > ARRAY_SIZE(filter->streams)) { @@ -408,7 +430,6 @@ static HRESULT WINAPI reader_callback_OnStatus(IWMReaderCallback *iface, WMT_STA stream_count = ARRAY_SIZE(filter->streams); } - EnterCriticalSection(&filter->filter.filter_cs); for (i = 0; i < stream_count; ++i) { struct asf_stream *stream = filter->streams + i; @@ -424,9 +445,13 @@ static HRESULT WINAPI reader_callback_OnStatus(IWMReaderCallback *iface, WMT_STA strmbase_source_init(&stream->source, &filter->filter, name, &source_ops); } filter->stream_count = stream_count; - LeaveCriticalSection(&filter->filter.filter_cs); - BaseFilterImpl_IncrementPinVersion(&filter->filter); + + EnterCriticalSection(&filter->status_cs); + filter->result = result; + filter->status = WMT_OPENED; + LeaveCriticalSection(&filter->status_cs); + WakeConditionVariable(&filter->status_cv); break; default: @@ -494,6 +519,9 @@ HRESULT asf_reader_create(IUnknown *outer, IUnknown **out) strmbase_filter_init(&object->filter, outer, &CLSID_WMAsfReader, &filter_ops); object->IFileSourceFilter_iface.lpVtbl = &file_source_vtbl; + InitializeCriticalSection(&object->status_cs); + object->status_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": status_cs"); + TRACE("Created WM ASF reader %p.\n", object); *out = &object->filter.IUnknown_inner;
1
0
0
0
Rémi Bernon : winegstreamer: Use a wg_video_format switch rather than array indexes.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 7723063e36cad83343d8f3d2d6fdd92a23b2c19d URL:
https://gitlab.winehq.org/wine/wine/-/commit/7723063e36cad83343d8f3d2d6fdd9…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jul 4 15:09:38 2022 +0200 winegstreamer: Use a wg_video_format switch rather than array indexes. --- dlls/winegstreamer/quartz_parser.c | 100 +++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 27 deletions(-) diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index eba18d60799..1ba24580cf6 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -373,32 +373,80 @@ unsigned int wg_format_get_max_size(const struct wg_format *format) return 0; } -static bool amt_from_wg_format_video(AM_MEDIA_TYPE *mt, const struct wg_format *format, bool wm) +static const GUID *wg_video_format_get_mediasubtype(enum wg_video_format format) { - static const struct + switch (format) { - const GUID *subtype; - DWORD compression; - WORD depth; + case WG_VIDEO_FORMAT_UNKNOWN: return &GUID_NULL; + case WG_VIDEO_FORMAT_BGRA: return &MEDIASUBTYPE_ARGB32; + case WG_VIDEO_FORMAT_BGRx: return &MEDIASUBTYPE_RGB32; + case WG_VIDEO_FORMAT_BGR: return &MEDIASUBTYPE_RGB24; + case WG_VIDEO_FORMAT_RGB15: return &MEDIASUBTYPE_RGB555; + case WG_VIDEO_FORMAT_RGB16: return &MEDIASUBTYPE_RGB565; + case WG_VIDEO_FORMAT_AYUV: return &MEDIASUBTYPE_AYUV; + case WG_VIDEO_FORMAT_I420: return &MEDIASUBTYPE_I420; + case WG_VIDEO_FORMAT_NV12: return &MEDIASUBTYPE_NV12; + case WG_VIDEO_FORMAT_UYVY: return &MEDIASUBTYPE_UYVY; + case WG_VIDEO_FORMAT_YUY2: return &MEDIASUBTYPE_YUY2; + case WG_VIDEO_FORMAT_YV12: return &MEDIASUBTYPE_YV12; + case WG_VIDEO_FORMAT_YVYU: return &MEDIASUBTYPE_YVYU; + case WG_VIDEO_FORMAT_CINEPAK: return &MEDIASUBTYPE_CVID; + } + + assert(0); + return NULL; +} + +static DWORD wg_video_format_get_compression(enum wg_video_format format) +{ + switch (format) + { + case WG_VIDEO_FORMAT_UNKNOWN: return 0; + case WG_VIDEO_FORMAT_BGRA: return BI_RGB; + case WG_VIDEO_FORMAT_BGRx: return BI_RGB; + case WG_VIDEO_FORMAT_BGR: return BI_RGB; + case WG_VIDEO_FORMAT_RGB15: return BI_RGB; + case WG_VIDEO_FORMAT_RGB16: return BI_BITFIELDS; + case WG_VIDEO_FORMAT_AYUV: return mmioFOURCC('A','Y','U','V'); + case WG_VIDEO_FORMAT_I420: return mmioFOURCC('I','4','2','0'); + case WG_VIDEO_FORMAT_NV12: return mmioFOURCC('N','V','1','2'); + case WG_VIDEO_FORMAT_UYVY: return mmioFOURCC('U','Y','V','Y'); + case WG_VIDEO_FORMAT_YUY2: return mmioFOURCC('Y','U','Y','2'); + case WG_VIDEO_FORMAT_YV12: return mmioFOURCC('Y','V','1','2'); + case WG_VIDEO_FORMAT_YVYU: return mmioFOURCC('Y','V','Y','U'); + case WG_VIDEO_FORMAT_CINEPAK: return mmioFOURCC('C','V','I','D'); } - format_table[] = - { - {0}, - {&MEDIASUBTYPE_ARGB32, BI_RGB, 32}, - {&MEDIASUBTYPE_RGB32, BI_RGB, 32}, - {&MEDIASUBTYPE_RGB24, BI_RGB, 24}, - {&MEDIASUBTYPE_RGB555, BI_RGB, 16}, - {&MEDIASUBTYPE_RGB565, BI_BITFIELDS, 16}, - {&MEDIASUBTYPE_AYUV, mmioFOURCC('A','Y','U','V'), 32}, - {&MEDIASUBTYPE_I420, mmioFOURCC('I','4','2','0'), 12}, - {&MEDIASUBTYPE_NV12, mmioFOURCC('N','V','1','2'), 12}, - {&MEDIASUBTYPE_UYVY, mmioFOURCC('U','Y','V','Y'), 16}, - {&MEDIASUBTYPE_YUY2, mmioFOURCC('Y','U','Y','2'), 16}, - {&MEDIASUBTYPE_YV12, mmioFOURCC('Y','V','1','2'), 12}, - {&MEDIASUBTYPE_YVYU, mmioFOURCC('Y','V','Y','U'), 16}, - {&MEDIASUBTYPE_CVID, mmioFOURCC('C','V','I','D'), 24}, - }; + assert(0); + return 0; +} + +static WORD wg_video_format_get_depth(enum wg_video_format format) +{ + switch (format) + { + case WG_VIDEO_FORMAT_UNKNOWN: return 0; + case WG_VIDEO_FORMAT_BGRA: return 32; + case WG_VIDEO_FORMAT_BGRx: return 32; + case WG_VIDEO_FORMAT_BGR: return 24; + case WG_VIDEO_FORMAT_RGB15: return 16; + case WG_VIDEO_FORMAT_RGB16: return 16; + case WG_VIDEO_FORMAT_AYUV: return 32; + case WG_VIDEO_FORMAT_I420: return 12; + case WG_VIDEO_FORMAT_NV12: return 12; + case WG_VIDEO_FORMAT_UYVY: return 16; + case WG_VIDEO_FORMAT_YUY2: return 16; + case WG_VIDEO_FORMAT_YV12: return 12; + case WG_VIDEO_FORMAT_YVYU: return 16; + case WG_VIDEO_FORMAT_CINEPAK: return 24; + } + + assert(0); + return 0; +} + +static bool amt_from_wg_format_video(AM_MEDIA_TYPE *mt, const struct wg_format *format, bool wm) +{ VIDEOINFO *video_format; uint32_t frame_time; @@ -408,10 +456,8 @@ static bool amt_from_wg_format_video(AM_MEDIA_TYPE *mt, const struct wg_format * if (!(video_format = CoTaskMemAlloc(sizeof(*video_format)))) return false; - assert(format->u.video.format < ARRAY_SIZE(format_table)); - mt->majortype = MEDIATYPE_Video; - mt->subtype = *format_table[format->u.video.format].subtype; + mt->subtype = *wg_video_format_get_mediasubtype(format->u.video.format); if (wm) mt->bFixedSizeSamples = TRUE; else @@ -434,8 +480,8 @@ static bool amt_from_wg_format_video(AM_MEDIA_TYPE *mt, const struct wg_format * video_format->bmiHeader.biWidth = format->u.video.width; video_format->bmiHeader.biHeight = format->u.video.height; video_format->bmiHeader.biPlanes = 1; - video_format->bmiHeader.biBitCount = format_table[format->u.video.format].depth; - video_format->bmiHeader.biCompression = format_table[format->u.video.format].compression; + video_format->bmiHeader.biBitCount = wg_video_format_get_depth(format->u.video.format); + video_format->bmiHeader.biCompression = wg_video_format_get_compression(format->u.video.format); video_format->bmiHeader.biSizeImage = wg_format_get_max_size(format); if (format->u.video.format == WG_VIDEO_FORMAT_RGB16)
1
0
0
0
Rémi Bernon : winegstreamer: Use a wg_audio_format switch rather than array indexes.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 8c8cf0896bf80ce5a30fff84a944dd29c550aefb URL:
https://gitlab.winehq.org/wine/wine/-/commit/8c8cf0896bf80ce5a30fff84a944dd…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Jul 4 15:09:13 2022 +0200 winegstreamer: Use a wg_audio_format switch rather than array indexes. --- dlls/winegstreamer/quartz_parser.c | 58 +++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 34848c0b503..eba18d60799 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -101,6 +101,40 @@ static HRESULT WINAPI GST_ChangeCurrent(IMediaSeeking *iface); static HRESULT WINAPI GST_ChangeStop(IMediaSeeking *iface); static HRESULT WINAPI GST_ChangeRate(IMediaSeeking *iface); +static bool wg_audio_format_is_float(enum wg_audio_format format) +{ + switch (format) + { + case WG_AUDIO_FORMAT_UNKNOWN: return false; + case WG_AUDIO_FORMAT_U8: return false; + case WG_AUDIO_FORMAT_S16LE: return false; + case WG_AUDIO_FORMAT_S24LE: return false; + case WG_AUDIO_FORMAT_S32LE: return false; + case WG_AUDIO_FORMAT_F32LE: return true; + case WG_AUDIO_FORMAT_F64LE: return true; + } + + assert(0); + return false; +} + +static WORD wg_audio_format_get_depth(enum wg_audio_format format) +{ + switch (format) + { + case WG_AUDIO_FORMAT_UNKNOWN: return 0; + case WG_AUDIO_FORMAT_U8: return 8; + case WG_AUDIO_FORMAT_S16LE: return 16; + case WG_AUDIO_FORMAT_S24LE: return 24; + case WG_AUDIO_FORMAT_S32LE: return 32; + case WG_AUDIO_FORMAT_F32LE: return 32; + case WG_AUDIO_FORMAT_F64LE: return 64; + } + + assert(0); + return 0; +} + static bool amt_from_wg_format_audio(AM_MEDIA_TYPE *mt, const struct wg_format *format) { mt->majortype = MEDIATYPE_Audio; @@ -118,28 +152,8 @@ static bool amt_from_wg_format_audio(AM_MEDIA_TYPE *mt, const struct wg_format * case WG_AUDIO_FORMAT_F32LE: case WG_AUDIO_FORMAT_F64LE: { - static const struct - { - bool is_float; - WORD depth; - } - format_table[] = - { - {0}, - {false, 8}, - {false, 16}, - {false, 24}, - {false, 32}, - {true, 32}, - {true, 64}, - }; - - bool is_float; - WORD depth; - - assert(format->u.audio.format < ARRAY_SIZE(format_table)); - is_float = format_table[format->u.audio.format].is_float; - depth = format_table[format->u.audio.format].depth; + bool is_float = wg_audio_format_is_float(format->u.audio.format); + WORD depth = wg_audio_format_get_depth(format->u.audio.format); if (is_float || format->u.audio.channels > 2) {
1
0
0
0
Paul Gofman : d3d11: Validate layout description in d3d_input_layout_create().
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 2a9af6ae3ba7662a9e711c6cd8569771f376d10a URL:
https://gitlab.winehq.org/wine/wine/-/commit/2a9af6ae3ba7662a9e711c6cd85697…
Author: Paul Gofman <pgofman(a)codeweavers.com> Date: Mon Aug 8 21:04:52 2022 -0500 d3d11: Validate layout description in d3d_input_layout_create(). --- dlls/d3d11/inputlayout.c | 55 ++++++++++---- dlls/d3d11/tests/d3d11.c | 194 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 233 insertions(+), 16 deletions(-)
1
0
0
0
Paul Gofman : ntdll: Remove redundant assignment in fixup_icmp_over_dgram().
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: a91cc08975432279a470d604703ba0b224b6378e URL:
https://gitlab.winehq.org/wine/wine/-/commit/a91cc08975432279a470d604703ba0…
Author: Paul Gofman <pgofman(a)codeweavers.com> Date: Tue Aug 9 15:24:13 2022 -0500 ntdll: Remove redundant assignment in fixup_icmp_over_dgram(). --- dlls/ntdll/unix/socket.c | 1 - 1 file changed, 1 deletion(-) diff --git a/dlls/ntdll/unix/socket.c b/dlls/ntdll/unix/socket.c index bf5907aafc1..f8ed9f6f854 100644 --- a/dlls/ntdll/unix/socket.c +++ b/dlls/ntdll/unix/socket.c @@ -711,7 +711,6 @@ static ssize_t fixup_icmp_over_dgram( struct msghdr *hdr, union unix_sockaddr *u icmp_h->checksum = chksum( (BYTE *)icmp_h, recv_len - sizeof(ip_h) ); } } - ip_h.checksum = 0; ip_h.checksum = chksum( (BYTE *)&ip_h, sizeof(ip_h) ); memcpy( buf, &ip_h, min( sizeof(ip_h), buf_len ));
1
0
0
0
Gabriel Ivăncescu : mshtml: Return DISP_E_MEMBERNOTFOUND when not finding member by DISPID.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: 6b75f930022e49c5baa58642ac88a5ecb0c4dda3 URL:
https://gitlab.winehq.org/wine/wine/-/commit/6b75f930022e49c5baa58642ac88a5…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Fri Aug 12 17:07:30 2022 +0300 mshtml: Return DISP_E_MEMBERNOTFOUND when not finding member by DISPID. DISP_E_UNKNOWNNAME is for when retrieving the DISPID itself. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/mshtml/dispex.c | 14 +++++++------- dlls/mshtml/htmldoc.c | 4 ++-- dlls/mshtml/htmlelem.c | 2 +- dlls/mshtml/htmlelemcol.c | 2 +- dlls/mshtml/tests/events.c | 2 -- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 7ab1df49cc5..3f5d4bbce76 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1009,7 +1009,7 @@ static HRESULT get_builtin_func(dispex_data_t *data, DISPID id, func_info_t **re } WARN("invalid id %lx\n", id); - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; } static HRESULT get_builtin_id(DispatchEx *This, BSTR name, DWORD grfdex, DISPID *ret) @@ -1366,7 +1366,7 @@ static HRESULT invoke_builtin_prop(DispatchEx *This, DISPID id, LCID lcid, WORD HRESULT hres; hres = get_builtin_func(This->info, id, &func); - if(id == DISPID_VALUE && hres == DISP_E_UNKNOWNNAME) + if(id == DISPID_VALUE && hres == DISP_E_MEMBERNOTFOUND) return dispex_value(This, lcid, flags, dp, res, ei, caller); if(FAILED(hres)) return hres; @@ -1686,7 +1686,7 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc switch(get_dispid_type(id)) { case DISPEXPROP_CUSTOM: if(!This->info->desc->vtbl || !This->info->desc->vtbl->invoke) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; return This->info->desc->vtbl->invoke(This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller); case DISPEXPROP_DYNAMIC: { @@ -1694,7 +1694,7 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc dynamic_prop_t *prop; if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; prop = This->dynamic_data->props+idx; @@ -1712,7 +1712,7 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc return invoke_disp_value(This, V_DISPATCH(&prop->var), lcid, wFlags, pdp, pvarRes, pei, pspCaller); case DISPATCH_PROPERTYGET: if(prop->flags & DYNPROP_DELETED) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; V_VT(pvarRes) = VT_EMPTY; return variant_copy(pvarRes, &prop->var); case DISPATCH_PROPERTYPUT: @@ -1826,7 +1826,7 @@ static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BS DWORD idx = id - DISPID_DYNPROP_0; if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; *pbstrName = SysAllocString(This->dynamic_data->props[idx].name); if(!*pbstrName) @@ -1874,7 +1874,7 @@ static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DWORD idx = id - DISPID_DYNPROP_0; if(!get_dynamic_data(This) || This->dynamic_data->prop_cnt <= idx) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; return next_dynamic_id(This, idx+1, pid); } diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 350996f893e..e7074952983 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -5843,7 +5843,7 @@ static HRESULT HTMLDocumentNode_invoke(DispatchEx *dispex, DISPID id, LCID lcid, i = id - MSHTML_DISPID_CUSTOM_MIN; if(!This->nsdoc || i >= This->elem_vars_cnt) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; nsAString_InitDepend(&name_str, This->elem_vars[i]); nsres = nsIDOMHTMLDocument_GetElementsByName(This->nsdoc, &name_str, &node_list); @@ -5854,7 +5854,7 @@ static HRESULT HTMLDocumentNode_invoke(DispatchEx *dispex, DISPID id, LCID lcid, nsres = nsIDOMNodeList_Item(node_list, 0, &nsnode); nsIDOMNodeList_Release(node_list); if(NS_FAILED(nsres) || !nsnode) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; hres = get_node(nsnode, TRUE, &node); if(FAILED(hres)) diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index f8fa285999e..d341623d4d5 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1124,7 +1124,7 @@ static HRESULT HTMLRectCollection_invoke(DispatchEx *dispex, DISPID id, LCID lci nsres = nsIDOMClientRectList_Item(This->rect_list, id - MSHTML_DISPID_CUSTOM_MIN, &rect); if(NS_FAILED(nsres) || !rect) { WARN("Unknown item\n"); - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; } hres = create_html_rect(rect, dispex_compat_mode(&This->dispex), &html_rect); diff --git a/dlls/mshtml/htmlelemcol.c b/dlls/mshtml/htmlelemcol.c index 385bd9038b2..180f75d630b 100644 --- a/dlls/mshtml/htmlelemcol.c +++ b/dlls/mshtml/htmlelemcol.c @@ -591,7 +591,7 @@ static HRESULT HTMLElementCollection_invoke(DispatchEx *dispex, DISPID id, LCID idx = id - DISPID_ELEMCOL_0; if(idx >= This->len) - return DISP_E_UNKNOWNNAME; + return DISP_E_MEMBERNOTFOUND; switch(flags) { case DISPATCH_PROPERTYGET: diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c index c5210e721d2..87151987f16 100644 --- a/dlls/mshtml/tests/events.c +++ b/dlls/mshtml/tests/events.c @@ -2542,12 +2542,10 @@ static void test_timeout(IHTMLDocument2 *doc) V_VT(&var) = VT_EMPTY; hres = IDispatch_Invoke(disp, DISPID_IHTMLWINDOW2_SETINTERVAL, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &var, NULL, &argerr); - todo_wine ok(hres == DISP_E_MEMBERNOTFOUND, "Invoke(DISPID_IHTMLWINDOW2_SETINTERVAL) returned: %08lx\n", hres); hres = IDispatch_Invoke(disp, DISPID_IHTMLWINDOW2_SETTIMEOUT, &IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dp, &var, NULL, &argerr); - todo_wine ok(hres == DISP_E_MEMBERNOTFOUND, "Invoke(DISPID_IHTMLWINDOW2_SETTIMEOUT) returned: %08lx\n", hres); SysFreeString(V_BSTR(&args[1])); IDispatch_Release(disp);
1
0
0
0
Gabriel Ivăncescu : mshtml: Implement document.location with a hook.
by Alexandre Julliard
13 Aug '22
13 Aug '22
Module: wine Branch: master Commit: a4d6dc79b139e0adbbe1753b601af7ce0ec5d05a URL:
https://gitlab.winehq.org/wine/wine/-/commit/a4d6dc79b139e0adbbe1753b601af7…
Author: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Date: Fri Aug 12 17:07:29 2022 +0300 mshtml: Implement document.location with a hook. Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/mshtml/htmldoc.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 3cbd229f19e..350996f893e 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -1064,6 +1064,16 @@ static HRESULT WINAPI HTMLDocument_get_location(IHTMLDocument2 *iface, IHTMLLoca return IHTMLWindow2_get_location(&This->window->base.IHTMLWindow2_iface, p); } +static HRESULT IHTMLDocument2_location_hook(HTMLDocument *doc, WORD flags, DISPPARAMS *dp, VARIANT *res, + EXCEPINFO *ei, IServiceProvider *caller) +{ + if(!(flags & DISPATCH_PROPERTYPUT) || !doc->window) + return S_FALSE; + + return IDispatchEx_InvokeEx(&doc->window->base.IDispatchEx_iface, DISPID_IHTMLWINDOW2_LOCATION, + 0, flags, dp, res, ei, caller); +} + static HRESULT WINAPI HTMLDocument_get_lastModified(IHTMLDocument2 *iface, BSTR *p) { HTMLDocument *This = impl_from_IHTMLDocument2(iface); @@ -4944,11 +4954,6 @@ static HRESULT WINAPI DocDispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID V_VT(pvarRes) = VT_I4; V_I4(pvarRes) = This->window->readystate; return S_OK; - case DISPID_IHTMLDOCUMENT2_LOCATION: - if(!(wFlags & DISPATCH_PROPERTYPUT)) - break; - return IDispatchEx_InvokeEx(&This->window->base.IDispatchEx_iface, DISPID_IHTMLWINDOW2_LOCATION, - lcid, wFlags, pdp, pvarRes, pei, pspCaller); default: break; } @@ -5905,6 +5910,12 @@ static IHTMLEventObj *HTMLDocumentNode_set_current_event(DispatchEx *dispex, IHT return default_set_current_event(This->window, event); } +static HRESULT HTMLDocumentNode_location_hook(DispatchEx *dispex, WORD flags, DISPPARAMS *dp, VARIANT *res, + EXCEPINFO *ei, IServiceProvider *caller) +{ + return IHTMLDocument2_location_hook(&impl_from_DispatchEx(dispex)->basedoc, flags, dp, res, ei, caller); +} + static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = { { NULL, @@ -5932,7 +5943,6 @@ static const NodeImplVtbl HTMLDocumentFragmentImplVtbl = { static const tid_t HTMLDocumentNode_iface_tids[] = { IHTMLDOMNode_tid, IHTMLDOMNode2_tid, - IHTMLDocument2_tid, IHTMLDocument4_tid, IHTMLDocument5_tid, IDocumentSelector_tid, @@ -5941,6 +5951,11 @@ static const tid_t HTMLDocumentNode_iface_tids[] = { static void HTMLDocumentNode_init_dispex_info(dispex_data_t *info, compat_mode_t mode) { + static const dispex_hook_t document2_hooks[] = { + {DISPID_IHTMLDOCUMENT2_LOCATION, HTMLDocumentNode_location_hook}, + {DISPID_UNKNOWN} + }; + HTMLDOMNode_init_dispex_info(info, mode); if(mode >= COMPAT_MODE_IE9) { @@ -5957,6 +5972,7 @@ static void HTMLDocumentNode_init_dispex_info(dispex_data_t *info, compat_mode_t dispex_info_add_interface(info, IHTMLDocument6_tid, NULL); dispex_info_add_interface(info, IHTMLDocument3_tid, NULL); } + dispex_info_add_interface(info, IHTMLDocument2_tid, document2_hooks); } static dispex_static_data_t HTMLDocumentNode_dispex = { @@ -6248,18 +6264,34 @@ static const ICustomDocVtbl CustomDocVtbl = { CustomDoc_SetUIHandler }; +static HRESULT HTMLDocumentObj_location_hook(DispatchEx *dispex, WORD flags, DISPPARAMS *dp, VARIANT *res, + EXCEPINFO *ei, IServiceProvider *caller) +{ + return IHTMLDocument2_location_hook(&CONTAINING_RECORD(dispex, HTMLDocumentObj, dispex)->basedoc, flags, dp, res, ei, caller); +} + static const tid_t HTMLDocumentObj_iface_tids[] = { - IHTMLDocument2_tid, IHTMLDocument3_tid, IHTMLDocument4_tid, IHTMLDocument5_tid, 0 }; + +static void HTMLDocumentObj_init_dispex_info(dispex_data_t *info, compat_mode_t mode) +{ + static const dispex_hook_t document2_hooks[] = { + {DISPID_IHTMLDOCUMENT2_LOCATION, HTMLDocumentObj_location_hook}, + {DISPID_UNKNOWN} + }; + dispex_info_add_interface(info, IHTMLDocument2_tid, document2_hooks); +} + static dispex_static_data_t HTMLDocumentObj_dispex = { L"HTMLDocumentObj", NULL, DispHTMLDocument_tid, - HTMLDocumentObj_iface_tids + HTMLDocumentObj_iface_tids, + HTMLDocumentObj_init_dispex_info }; static HRESULT create_document_object(BOOL is_mhtml, IUnknown *outer, REFIID riid, void **ppv)
1
0
0
0
← Newer
1
...
32
33
34
35
36
37
38
...
60
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Results per page:
10
25
50
100
200