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
September 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
553 discussions
Start a n
N
ew thread
Alexandre Julliard : packaging: Remove Debian 10.
by Alexandre Julliard
27 Sep '22
27 Sep '22
Module: tools Branch: master Commit: 0712e12f56eb819965ce6720b190c5b2aeec7915 URL:
https://gitlab.winehq.org/winehq/tools/-/commit/0712e12f56eb819965ce6720b19…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Sat Sep 24 10:52:47 2022 +0200 packaging: Remove Debian 10. --- packaging/obs/apt-mirror.cfg | 4 ---- packaging/obs/obs-sync | 3 +-- packaging/obs/rsync-filter | 2 -- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/packaging/obs/apt-mirror.cfg b/packaging/obs/apt-mirror.cfg index a2dd2782..1ea24ded 100644 --- a/packaging/obs/apt-mirror.cfg +++ b/packaging/obs/apt-mirror.cfg @@ -14,10 +14,6 @@ set _tilde 0 # ############# end config ############## -deb-amd64
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_10
./ -deb-i386
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_10
./ -deb-src
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_10
./ - deb-amd64
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_11
./ deb-i386
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_11
./ deb-src
https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/Debian_11
./ diff --git a/packaging/obs/obs-sync b/packaging/obs/obs-sync index 54fff2ae..54b8c8f3 100755 --- a/packaging/obs/obs-sync +++ b/packaging/obs/obs-sync @@ -199,7 +199,7 @@ publish_files () cd $basedir -distros="35 36 buster bullseye bookworm bionic focal jammy" +distros="35 36 bullseye bookworm bionic focal jammy" dry_run= build=1 @@ -253,7 +253,6 @@ do do case $i in 3?) add_rpm $i Fedora_$i ;; - buster) add_deb debian $i Debian_10 oldstable ;; bullseye) add_deb debian $i Debian_11 stable ;; bookworm) add_deb debian $i Debian_Testing_standard testing ;; bionic) add_deb ubuntu $i xUbuntu_18.04 ;; diff --git a/packaging/obs/rsync-filter b/packaging/obs/rsync-filter index 2675716a..cccb35d0 100644 --- a/packaging/obs/rsync-filter +++ b/packaging/obs/rsync-filter @@ -5,10 +5,8 @@ + /debian + /debian/dists -+ /debian/dists/oldstable + /debian/dists/stable + /debian/dists/testing -+ /debian/dists/buster + /debian/dists/bullseye + /debian/dists/bookworm - /debian/dists/*
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetOutputCount in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 2a4ec7dafc7ee38108f6a9f626a7c39e6b6777e0 URL:
https://gitlab.winehq.org/wine/wine/-/commit/2a4ec7dafc7ee38108f6a9f626a7c3…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 13:51:51 2022 +0200 winegstreamer: Use IWMSyncReader2_GetOutputCount in the async reader. --- dlls/winegstreamer/wm_asyncreader.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index f5509cd865d..84742d2f40f 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -496,10 +496,7 @@ static HRESULT WINAPI WMReader_GetOutputCount(IWMReader *iface, DWORD *count) TRACE("reader %p, count %p.\n", reader, count); - EnterCriticalSection(&reader->wm_reader->cs); - *count = reader->wm_reader->stream_count; - LeaveCriticalSection(&reader->wm_reader->cs); - return S_OK; + return IWMSyncReader2_GetOutputCount(reader->reader, count); } static HRESULT WINAPI WMReader_GetOutputProps(IWMReader *iface, DWORD output, IWMOutputMediaProps **props)
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_SetStreamsSelected in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 0f6f105cc0541abdbd6e39fef2749347a52d1b97 URL:
https://gitlab.winehq.org/wine/wine/-/commit/0f6f105cc0541abdbd6e39fef27493…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 13:35:52 2022 +0200 winegstreamer: Use IWMSyncReader2_SetStreamsSelected in the async reader. --- dlls/winegstreamer/gst_private.h | 2 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 83 +++++++++++++++++-------------------- 3 files changed, 39 insertions(+), 48 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 53588d0c8ab..178679c38ee 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -193,7 +193,5 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate); HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_number, BOOL allocate); -HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, - const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections); #endif /* __GST_PRIVATE_INCLUDED__ */ diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index f84f6aba0bf..f5509cd865d 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -701,7 +701,7 @@ static HRESULT WINAPI WMReaderAdvanced_SetStreamsSelected(IWMReaderAdvanced6 *if TRACE("reader %p, count %u, stream_numbers %p, selections %p.\n", reader, count, stream_numbers, selections); - return wm_reader_set_streams_selected(reader->wm_reader, count, stream_numbers, selections); + return IWMSyncReader2_SetStreamsSelected(reader->reader, count, stream_numbers, selections); } static HRESULT WINAPI WMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced6 *iface, diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index e4ee11239f6..95d6d8e0180 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1696,50 +1696,6 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA } } -HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, - const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections) -{ - struct wm_stream *stream; - WORD i; - - if (!count) - return E_INVALIDARG; - - EnterCriticalSection(&reader->cs); - - for (i = 0; i < count; ++i) - { - if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]))) - { - LeaveCriticalSection(&reader->cs); - WARN("Invalid stream number %u; returning NS_E_INVALID_REQUEST.\n", stream_numbers[i]); - return NS_E_INVALID_REQUEST; - } - } - - for (i = 0; i < count; ++i) - { - stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]); - stream->selection = selections[i]; - if (selections[i] == WMT_OFF) - { - TRACE("Disabling stream %u.\n", stream_numbers[i]); - wg_parser_stream_disable(stream->wg_stream); - } - else if (selections[i] == WMT_ON) - { - if (selections[i] != WMT_ON) - FIXME("Ignoring selection %#x for stream %u; treating as enabled.\n", - selections[i], stream_numbers[i]); - TRACE("Enabling stream %u.\n", stream_numbers[i]); - wg_parser_stream_enable(stream->wg_stream, &stream->format); - } - } - - LeaveCriticalSection(&reader->cs); - return S_OK; -} - HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate) { struct wm_stream *stream; @@ -2412,11 +2368,48 @@ static HRESULT WINAPI reader_SetStreamsSelected(IWMSyncReader2 *iface, WORD count, WORD *stream_numbers, WMT_STREAM_SELECTION *selections) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + WORD i; TRACE("reader %p, count %u, stream_numbers %p, selections %p.\n", reader, count, stream_numbers, selections); - return wm_reader_set_streams_selected(reader, count, stream_numbers, selections); + if (!count) + return E_INVALIDARG; + + EnterCriticalSection(&reader->cs); + + for (i = 0; i < count; ++i) + { + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]))) + { + LeaveCriticalSection(&reader->cs); + WARN("Invalid stream number %u; returning NS_E_INVALID_REQUEST.\n", stream_numbers[i]); + return NS_E_INVALID_REQUEST; + } + } + + for (i = 0; i < count; ++i) + { + stream = wm_reader_get_stream_by_stream_number(reader, stream_numbers[i]); + stream->selection = selections[i]; + if (selections[i] == WMT_OFF) + { + TRACE("Disabling stream %u.\n", stream_numbers[i]); + wg_parser_stream_disable(stream->wg_stream); + } + else if (selections[i] == WMT_ON) + { + if (selections[i] != WMT_ON) + FIXME("Ignoring selection %#x for stream %u; treating as enabled.\n", + selections[i], stream_numbers[i]); + TRACE("Enabling stream %u.\n", stream_numbers[i]); + wg_parser_stream_enable(stream->wg_stream, &stream->format); + } + } + + LeaveCriticalSection(&reader->cs); + return S_OK; } static HRESULT WINAPI reader_SetRangeByTimecode(IWMSyncReader2 *iface, WORD stream_num,
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetStreamSelected in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 54843124d91f27a74235bd7c83a34a4b88339fbf URL:
https://gitlab.winehq.org/wine/wine/-/commit/54843124d91f27a74235bd7c83a34a…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 13:35:01 2022 +0200 winegstreamer: Use IWMSyncReader2_GetStreamSelected in the async reader. --- dlls/winegstreamer/gst_private.h | 2 -- dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 33 +++++++++++++-------------------- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 7fb4f12e65a..53588d0c8ab 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -191,8 +191,6 @@ struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner); HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackAdvanced *callback_advanced, WORD stream_number, INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); -HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, - WORD stream_number, WMT_STREAM_SELECTION *selection); HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate); HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_number, BOOL allocate); HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 487bed4564c..f84f6aba0bf 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -711,7 +711,7 @@ static HRESULT WINAPI WMReaderAdvanced_GetStreamSelected(IWMReaderAdvanced6 *ifa TRACE("reader %p, stream_number %u, selection %p.\n", reader, stream_number, selection); - return wm_reader_get_stream_selection(reader->wm_reader, stream_number, selection); + return IWMSyncReader2_GetStreamSelected(reader->reader, stream_number, selection); } static HRESULT WINAPI WMReaderAdvanced_SetReceiveSelectionCallbacks(IWMReaderAdvanced6 *iface, BOOL get_callbacks) diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 06373f8bdaa..e4ee11239f6 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1740,25 +1740,6 @@ HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, return S_OK; } -HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, - WORD stream_number, WMT_STREAM_SELECTION *selection) -{ - struct wm_stream *stream; - - EnterCriticalSection(&reader->cs); - - if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - *selection = stream->selection; - - LeaveCriticalSection(&reader->cs); - return S_OK; -} - HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate) { struct wm_stream *stream; @@ -2164,10 +2145,22 @@ static HRESULT WINAPI reader_GetStreamSelected(IWMSyncReader2 *iface, WORD stream_number, WMT_STREAM_SELECTION *selection) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; TRACE("reader %p, stream_number %u, selection %p.\n", reader, stream_number, selection); - return wm_reader_get_stream_selection(reader, stream_number, selection); + EnterCriticalSection(&reader->cs); + + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + *selection = stream->selection; + + LeaveCriticalSection(&reader->cs); + return S_OK; } static HRESULT WINAPI reader_Open(IWMSyncReader2 *iface, const WCHAR *filename)
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetOutputFormatCount in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 08effb90467f8396c894d8e3880c555a985ad45c URL:
https://gitlab.winehq.org/wine/wine/-/commit/08effb90467f8396c894d8e3880c55…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Sep 5 22:57:31 2022 +0200 winegstreamer: Use IWMSyncReader2_GetOutputFormatCount in the async reader. --- dlls/winegstreamer/gst_private.h | 1 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 66 +++++++++++++++++-------------------- 3 files changed, 31 insertions(+), 38 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 692777e8652..7fb4f12e65a 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -189,7 +189,6 @@ struct wm_reader HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out); struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner); -HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count); HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackAdvanced *callback_advanced, WORD stream_number, INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 5b7539e37da..487bed4564c 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -526,7 +526,7 @@ static HRESULT WINAPI WMReader_GetOutputFormatCount(IWMReader *iface, DWORD outp TRACE("reader %p, output %lu, count %p.\n", reader, output, count); - return wm_reader_get_output_format_count(reader->wm_reader, output, count); + return IWMSyncReader2_GetOutputFormatCount(reader->reader, output, count); } static HRESULT WINAPI WMReader_GetOutputFormat(IWMReader *iface, DWORD output, diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 03685687244..06373f8bdaa 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1503,41 +1503,6 @@ static const enum wg_video_format video_formats[] = WG_VIDEO_FORMAT_RGB15, }; -HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count) -{ - struct wm_stream *stream; - struct wg_format format; - - EnterCriticalSection(&reader->cs); - - if (!(stream = get_stream_by_output_number(reader, output))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - wg_parser_stream_get_preferred_format(stream->wg_stream, &format); - switch (format.major_type) - { - case WG_MAJOR_TYPE_VIDEO: - *count = ARRAY_SIZE(video_formats); - break; - - case WG_MAJOR_TYPE_MPEG1_AUDIO: - case WG_MAJOR_TYPE_WMA: - case WG_MAJOR_TYPE_H264: - FIXME("Format %u not implemented!\n", format.major_type); - /* fallthrough */ - case WG_MAJOR_TYPE_AUDIO: - case WG_MAJOR_TYPE_UNKNOWN: - *count = 1; - break; - } - - LeaveCriticalSection(&reader->cs); - return S_OK; -} - static const char *get_major_type_string(enum wg_major_type type) { switch (type) @@ -2088,10 +2053,39 @@ static HRESULT WINAPI reader_GetOutputFormat(IWMSyncReader2 *iface, static HRESULT WINAPI reader_GetOutputFormatCount(IWMSyncReader2 *iface, DWORD output, DWORD *count) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + struct wg_format format; TRACE("reader %p, output %lu, count %p.\n", reader, output, count); - return wm_reader_get_output_format_count(reader, output, count); + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + wg_parser_stream_get_preferred_format(stream->wg_stream, &format); + switch (format.major_type) + { + case WG_MAJOR_TYPE_VIDEO: + *count = ARRAY_SIZE(video_formats); + break; + + case WG_MAJOR_TYPE_MPEG1_AUDIO: + case WG_MAJOR_TYPE_WMA: + case WG_MAJOR_TYPE_H264: + FIXME("Format %u not implemented!\n", format.major_type); + /* fallthrough */ + case WG_MAJOR_TYPE_AUDIO: + case WG_MAJOR_TYPE_UNKNOWN: + *count = 1; + break; + } + + LeaveCriticalSection(&reader->cs); + return S_OK; } static HRESULT WINAPI reader_GetOutputNumberForStream(IWMSyncReader2 *iface,
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetOutputFormat in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 0dfeadd7669b908e12fe4f7cf9ee4eaa5eff55a4 URL:
https://gitlab.winehq.org/wine/wine/-/commit/0dfeadd7669b908e12fe4f7cf9ee4e…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Sep 5 22:57:08 2022 +0200 winegstreamer: Use IWMSyncReader2_GetOutputFormat in the async reader. --- dlls/winegstreamer/gst_private.h | 2 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 97 +++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index e572ab156eb..692777e8652 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -189,8 +189,6 @@ struct wm_reader HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out); struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner); -HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, - DWORD index, IWMOutputMediaProps **props); HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count); HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackAdvanced *callback_advanced, WORD stream_number, INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 0ae1a8c5401..5b7539e37da 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -536,7 +536,7 @@ static HRESULT WINAPI WMReader_GetOutputFormat(IWMReader *iface, DWORD output, TRACE("reader %p, output %lu, index %lu, props %p.\n", reader, output, index, props); - return wm_reader_get_output_format(reader->wm_reader, output, index, props); + return IWMSyncReader2_GetOutputFormat(reader->reader, output, index, props); } static HRESULT WINAPI WMReader_Start(IWMReader *iface, diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 78e72cfdf82..03685687244 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1538,57 +1538,6 @@ HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output return S_OK; } -HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, - DWORD index, IWMOutputMediaProps **props) -{ - struct wm_stream *stream; - struct wg_format format; - - EnterCriticalSection(&reader->cs); - - if (!(stream = get_stream_by_output_number(reader, output))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - wg_parser_stream_get_preferred_format(stream->wg_stream, &format); - - switch (format.major_type) - { - case WG_MAJOR_TYPE_VIDEO: - if (index >= ARRAY_SIZE(video_formats)) - { - LeaveCriticalSection(&reader->cs); - return NS_E_INVALID_OUTPUT_FORMAT; - } - format.u.video.format = video_formats[index]; - break; - - case WG_MAJOR_TYPE_AUDIO: - if (index) - { - LeaveCriticalSection(&reader->cs); - return NS_E_INVALID_OUTPUT_FORMAT; - } - format.u.audio.format = WG_AUDIO_FORMAT_S16LE; - break; - - case WG_MAJOR_TYPE_MPEG1_AUDIO: - case WG_MAJOR_TYPE_WMA: - case WG_MAJOR_TYPE_H264: - FIXME("Format %u not implemented!\n", format.major_type); - break; - case WG_MAJOR_TYPE_UNKNOWN: - break; - } - - LeaveCriticalSection(&reader->cs); - - *props = output_props_create(&format); - return *props ? S_OK : E_OUTOFMEMORY; -} - static const char *get_major_type_string(enum wg_major_type type) { switch (type) @@ -2086,10 +2035,54 @@ static HRESULT WINAPI reader_GetOutputFormat(IWMSyncReader2 *iface, DWORD output, DWORD index, IWMOutputMediaProps **props) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + struct wg_format format; TRACE("reader %p, output %lu, index %lu, props %p.\n", reader, output, index, props); - return wm_reader_get_output_format(reader, output, index, props); + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + wg_parser_stream_get_preferred_format(stream->wg_stream, &format); + + switch (format.major_type) + { + case WG_MAJOR_TYPE_VIDEO: + if (index >= ARRAY_SIZE(video_formats)) + { + LeaveCriticalSection(&reader->cs); + return NS_E_INVALID_OUTPUT_FORMAT; + } + format.u.video.format = video_formats[index]; + break; + + case WG_MAJOR_TYPE_AUDIO: + if (index) + { + LeaveCriticalSection(&reader->cs); + return NS_E_INVALID_OUTPUT_FORMAT; + } + format.u.audio.format = WG_AUDIO_FORMAT_S16LE; + break; + + case WG_MAJOR_TYPE_MPEG1_AUDIO: + case WG_MAJOR_TYPE_WMA: + case WG_MAJOR_TYPE_H264: + FIXME("Format %u not implemented!\n", format.major_type); + break; + case WG_MAJOR_TYPE_UNKNOWN: + break; + } + + LeaveCriticalSection(&reader->cs); + + *props = output_props_create(&format); + return *props ? S_OK : E_OUTOFMEMORY; } static HRESULT WINAPI reader_GetOutputFormatCount(IWMSyncReader2 *iface, DWORD output, DWORD *count)
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_SetOutputProps in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: efb6aca8509a6be1dbe89b17d678556ed100ff65 URL:
https://gitlab.winehq.org/wine/wine/-/commit/efb6aca8509a6be1dbe89b17d67855…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 14:46:18 2022 +0200 winegstreamer: Use IWMSyncReader2_SetOutputProps in the async reader. --- dlls/winegstreamer/gst_private.h | 2 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 173 +++++++++++++++++------------------- 3 files changed, 84 insertions(+), 93 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index b5c2676a40d..e572ab156eb 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -198,8 +198,6 @@ HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, WORD stream_number, WMT_STREAM_SELECTION *selection); HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate); HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_number, BOOL allocate); -HRESULT wm_reader_set_output_props(struct wm_reader *reader, DWORD output, - IWMOutputMediaProps *props); HRESULT wm_reader_set_streams_selected(struct wm_reader *reader, WORD count, const WORD *stream_numbers, const WMT_STREAM_SELECTION *selections); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index c6ea7146e0a..0ae1a8c5401 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -517,7 +517,7 @@ static HRESULT WINAPI WMReader_SetOutputProps(IWMReader *iface, DWORD output, IW TRACE("reader %p, output %lu, props %p.\n", reader, output, props); - return wm_reader_set_output_props(reader->wm_reader, output, props); + return IWMSyncReader2_SetOutputProps(reader->reader, output, props); } static HRESULT WINAPI WMReader_GetOutputFormatCount(IWMReader *iface, DWORD output, DWORD *count) diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 30e8e009850..78e72cfdf82 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1589,93 +1589,6 @@ HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, return *props ? S_OK : E_OUTOFMEMORY; } -HRESULT wm_reader_set_output_props(struct wm_reader *reader, DWORD output, - IWMOutputMediaProps *props_iface) -{ - struct output_props *props = unsafe_impl_from_IWMOutputMediaProps(props_iface); - struct wg_format format, pref_format; - struct wm_stream *stream; - HRESULT hr = S_OK; - int i; - - strmbase_dump_media_type(&props->mt); - - if (!amt_to_wg_format(&props->mt, &format)) - { - ERR("Failed to convert media type to winegstreamer format.\n"); - return E_FAIL; - } - - EnterCriticalSection(&reader->cs); - - if (!(stream = get_stream_by_output_number(reader, output))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - wg_parser_stream_get_preferred_format(stream->wg_stream, &pref_format); - if (pref_format.major_type != format.major_type) - { - /* R.U.S.E sets the type of the wrong stream, apparently by accident. */ - hr = NS_E_INCOMPATIBLE_FORMAT; - } - else switch (pref_format.major_type) - { - case WG_MAJOR_TYPE_AUDIO: - if (format.u.audio.format == WG_AUDIO_FORMAT_UNKNOWN) - hr = NS_E_AUDIO_CODEC_NOT_INSTALLED; - else if (format.u.audio.channels > pref_format.u.audio.channels) - hr = NS_E_AUDIO_CODEC_NOT_INSTALLED; - break; - - case WG_MAJOR_TYPE_VIDEO: - for (i = 0; i < ARRAY_SIZE(video_formats); ++i) - if (format.u.video.format == video_formats[i]) - break; - if (i == ARRAY_SIZE(video_formats)) - hr = NS_E_INVALID_OUTPUT_FORMAT; - else if (pref_format.u.video.width != format.u.video.width) - hr = NS_E_INVALID_OUTPUT_FORMAT; - else if (pref_format.u.video.height != format.u.video.height) - hr = NS_E_INVALID_OUTPUT_FORMAT; - break; - - default: - hr = NS_E_INCOMPATIBLE_FORMAT; - break; - } - - if (FAILED(hr)) - { - WARN("Unsupported media type, returning %#lx.\n", hr); - LeaveCriticalSection(&reader->cs); - return hr; - } - - stream->format = format; - wg_parser_stream_enable(stream->wg_stream, &format); - - /* Re-decode any buffers that might have been generated with the old format. - * - * FIXME: Seeking in-place will cause some buffers to be dropped. - * Unfortunately, we can't really store the last received PTS and seek there - * either: since seeks are inexact and we aren't guaranteed to receive - * samples in order, some buffers might be duplicated or dropped anyway. - * In order to really seamlessly allow for format changes, we need - * cooperation from each individual GStreamer stream, to be able to tell - * upstream exactly which buffers they need resent... - * - * In all likelihood this function is being called not mid-stream but rather - * while setting the stream up, before consuming any events. Accordingly - * let's just seek back to the beginning. */ - wg_parser_stream_seek(reader->streams[0].wg_stream, 1.0, reader->start_time, 0, - AM_SEEKING_AbsolutePositioning, AM_SEEKING_NoPositioning); - - LeaveCriticalSection(&reader->cs); - return S_OK; -} - static const char *get_major_type_string(enum wg_major_type type) { switch (type) @@ -2346,13 +2259,93 @@ static HRESULT WINAPI reader_OpenStream(IWMSyncReader2 *iface, IStream *stream) return hr; } -static HRESULT WINAPI reader_SetOutputProps(IWMSyncReader2 *iface, DWORD output, IWMOutputMediaProps *props) +static HRESULT WINAPI reader_SetOutputProps(IWMSyncReader2 *iface, DWORD output, IWMOutputMediaProps *props_iface) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct output_props *props = unsafe_impl_from_IWMOutputMediaProps(props_iface); + struct wg_format format, pref_format; + struct wm_stream *stream; + HRESULT hr = S_OK; + int i; - TRACE("reader %p, output %lu, props %p.\n", reader, output, props); + TRACE("reader %p, output %lu, props_iface %p.\n", reader, output, props_iface); + + strmbase_dump_media_type(&props->mt); + + if (!amt_to_wg_format(&props->mt, &format)) + { + ERR("Failed to convert media type to winegstreamer format.\n"); + return E_FAIL; + } + + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } - return wm_reader_set_output_props(reader, output, props); + wg_parser_stream_get_preferred_format(stream->wg_stream, &pref_format); + if (pref_format.major_type != format.major_type) + { + /* R.U.S.E sets the type of the wrong stream, apparently by accident. */ + hr = NS_E_INCOMPATIBLE_FORMAT; + } + else switch (pref_format.major_type) + { + case WG_MAJOR_TYPE_AUDIO: + if (format.u.audio.format == WG_AUDIO_FORMAT_UNKNOWN) + hr = NS_E_AUDIO_CODEC_NOT_INSTALLED; + else if (format.u.audio.channels > pref_format.u.audio.channels) + hr = NS_E_AUDIO_CODEC_NOT_INSTALLED; + break; + + case WG_MAJOR_TYPE_VIDEO: + for (i = 0; i < ARRAY_SIZE(video_formats); ++i) + if (format.u.video.format == video_formats[i]) + break; + if (i == ARRAY_SIZE(video_formats)) + hr = NS_E_INVALID_OUTPUT_FORMAT; + else if (pref_format.u.video.width != format.u.video.width) + hr = NS_E_INVALID_OUTPUT_FORMAT; + else if (pref_format.u.video.height != format.u.video.height) + hr = NS_E_INVALID_OUTPUT_FORMAT; + break; + + default: + hr = NS_E_INCOMPATIBLE_FORMAT; + break; + } + + if (FAILED(hr)) + { + WARN("Unsupported media type, returning %#lx.\n", hr); + LeaveCriticalSection(&reader->cs); + return hr; + } + + stream->format = format; + wg_parser_stream_enable(stream->wg_stream, &format); + + /* Re-decode any buffers that might have been generated with the old format. + * + * FIXME: Seeking in-place will cause some buffers to be dropped. + * Unfortunately, we can't really store the last received PTS and seek there + * either: since seeks are inexact and we aren't guaranteed to receive + * samples in order, some buffers might be duplicated or dropped anyway. + * In order to really seamlessly allow for format changes, we need + * cooperation from each individual GStreamer stream, to be able to tell + * upstream exactly which buffers they need resent... + * + * In all likelihood this function is being called not mid-stream but rather + * while setting the stream up, before consuming any events. Accordingly + * let's just seek back to the beginning. */ + wg_parser_stream_seek(reader->streams[0].wg_stream, 1.0, reader->start_time, 0, + AM_SEEKING_AbsolutePositioning, AM_SEEKING_NoPositioning); + + LeaveCriticalSection(&reader->cs); + return S_OK; } static HRESULT WINAPI reader_SetOutputSetting(IWMSyncReader2 *iface, DWORD output,
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetOutputProps in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 6070192528fe3888a9bab669b95f655049237dd4 URL:
https://gitlab.winehq.org/wine/wine/-/commit/6070192528fe3888a9bab669b95f65…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 13:31:34 2022 +0200 winegstreamer: Use IWMSyncReader2_GetOutputProps in the async reader. --- dlls/winegstreamer/gst_private.h | 2 -- dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 30 ++++++++++++------------------ 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 23e568b232a..b5c2676a40d 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -192,8 +192,6 @@ struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner); HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, DWORD index, IWMOutputMediaProps **props); HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count); -HRESULT wm_reader_get_output_props(struct wm_reader *reader, DWORD output, - IWMOutputMediaProps **props); HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackAdvanced *callback_advanced, WORD stream_number, INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 7d5bf7347cb..c6ea7146e0a 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -508,7 +508,7 @@ static HRESULT WINAPI WMReader_GetOutputProps(IWMReader *iface, DWORD output, IW TRACE("reader %p, output %lu, props %p.\n", reader, output, props); - return wm_reader_get_output_props(reader->wm_reader, output, props); + return IWMSyncReader2_GetOutputProps(reader->reader, output, props); } static HRESULT WINAPI WMReader_SetOutputProps(IWMReader *iface, DWORD output, IWMOutputMediaProps *props) diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index b9834f8dae5..30e8e009850 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1487,23 +1487,6 @@ static struct wm_stream *wm_reader_get_stream_by_stream_number(struct wm_reader return NULL; } -HRESULT wm_reader_get_output_props(struct wm_reader *reader, DWORD output, IWMOutputMediaProps **props) -{ - struct wm_stream *stream; - - EnterCriticalSection(&reader->cs); - - if (!(stream = get_stream_by_output_number(reader, output))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - *props = output_props_create(&stream->format); - LeaveCriticalSection(&reader->cs); - return *props ? S_OK : E_OUTOFMEMORY; -} - static const enum wg_video_format video_formats[] = { /* Try to prefer YUV formats over RGB ones. Most decoders output in the @@ -2220,10 +2203,21 @@ static HRESULT WINAPI reader_GetOutputProps(IWMSyncReader2 *iface, DWORD output, IWMOutputMediaProps **props) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; TRACE("reader %p, output %lu, props %p.\n", reader, output, props); - return wm_reader_get_output_props(reader, output, props); + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + *props = output_props_create(&stream->format); + LeaveCriticalSection(&reader->cs); + return *props ? S_OK : E_OUTOFMEMORY; } static HRESULT WINAPI reader_GetOutputSetting(IWMSyncReader2 *iface, DWORD output_num, const WCHAR *name,
1
0
0
0
Rémi Bernon : winegstreamer: Use IWMSyncReader2_GetMaxStreamSampleSize in the async reader.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 64ee5529e19a62a1811d45fd207170ebec07e8d5 URL:
https://gitlab.winehq.org/wine/wine/-/commit/64ee5529e19a62a1811d45fd207170…
Author: Rémi Bernon <rbernon(a)codeweavers.com> Date: Mon Aug 22 13:25:48 2022 +0200 winegstreamer: Use IWMSyncReader2_GetMaxStreamSampleSize in the async reader. --- dlls/winegstreamer/gst_private.h | 1 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 40 +++++++++++++++++-------------------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 5ed44f0d50b..23e568b232a 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -189,7 +189,6 @@ struct wm_reader HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out); struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner); -HRESULT wm_reader_get_max_stream_size(struct wm_reader *reader, WORD stream_number, DWORD *size); HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, DWORD index, IWMOutputMediaProps **props); HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 60cffba2553..7d5bf7347cb 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -810,7 +810,7 @@ static HRESULT WINAPI WMReaderAdvanced_GetMaxStreamSampleSize(IWMReaderAdvanced6 TRACE("reader %p, stream_number %u, size %p.\n", reader, stream_number, size); - return wm_reader_get_max_stream_size(reader->wm_reader, stream_number, size); + return IWMSyncReader2_GetMaxStreamSampleSize(reader->reader, stream_number, size); } static HRESULT WINAPI WMReaderAdvanced_NotifyLateDelivery(IWMReaderAdvanced6 *iface, QWORD lateness) diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 09af7457b27..b9834f8dae5 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1985,24 +1985,6 @@ HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_ return S_OK; } -HRESULT wm_reader_get_max_stream_size(struct wm_reader *reader, WORD stream_number, DWORD *size) -{ - struct wm_stream *stream; - - EnterCriticalSection(&reader->cs); - - if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - *size = wg_format_get_max_size(&stream->format); - - LeaveCriticalSection(&reader->cs); - return S_OK; -} - static struct wm_reader *impl_from_IUnknown(IUnknown *iface) { return CONTAINING_RECORD(iface, struct wm_reader, IUnknown_inner); @@ -2145,11 +2127,25 @@ static HRESULT WINAPI reader_GetMaxOutputSampleSize(IWMSyncReader2 *iface, DWORD return E_NOTIMPL; } -static HRESULT WINAPI reader_GetMaxStreamSampleSize(IWMSyncReader2 *iface, WORD stream, DWORD *max) +static HRESULT WINAPI reader_GetMaxStreamSampleSize(IWMSyncReader2 *iface, WORD stream_number, DWORD *size) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%d %p): stub!\n", This, stream, max); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, stream_number %u, size %p.\n", reader, stream_number, size); + + EnterCriticalSection(&reader->cs); + + if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + *size = wg_format_get_max_size(&stream->format); + + LeaveCriticalSection(&reader->cs); + return S_OK; } static HRESULT WINAPI reader_GetNextSample(IWMSyncReader2 *iface,
1
0
0
0
Eric Pouech : dbghelp: Fix local scope reset upon module unloading.
by Alexandre Julliard
26 Sep '22
26 Sep '22
Module: wine Branch: master Commit: 25108ba26617ecbe10900d56977f1952f9bd2549 URL:
https://gitlab.winehq.org/wine/wine/-/commit/25108ba26617ecbe10900d56977f19…
Author: Eric Pouech <eric.pouech(a)gmail.com> Date: Mon Sep 26 18:19:38 2022 +0200 dbghelp: Fix local scope reset upon module unloading. Change strategy for resetting local scope when unloading a module. Old strategy was keeping the local scoped symbol alive on some code path when unloading a module. This caused some bad behavior as we kept a pointer to a deleted object. Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com> --- dlls/dbghelp/module.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index cd34b81460f..5a0769f25a4 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -1009,6 +1009,23 @@ BOOL module_remove(struct process* pcs, struct module* module) TRACE("%s (%p)\n", debugstr_w(module->modulename), module); + /* remove local scope if symbol is from this module */ + if (pcs->localscope_symt) + { + struct symt* locsym = pcs->localscope_symt; + if (symt_check_tag(locsym, SymTagInlineSite)) + locsym = &symt_get_function_from_inlined((struct symt_inlinesite*)locsym)->symt; + if (symt_check_tag(locsym, SymTagFunction)) + { + locsym = ((struct symt_function*)locsym)->container; + if (symt_check_tag(locsym, SymTagCompiland) && + module == ((struct symt_compiland*)locsym)->container->module) + { + pcs->localscope_pc = 0; + pcs->localscope_symt = NULL; + } + } + } for (i = 0; i < DFI_LAST; i++) { if ((modfmt = module->format_info[i]) && modfmt->remove) @@ -1058,13 +1075,6 @@ BOOL WINAPI SymUnloadModule64(HANDLE hProcess, DWORD64 BaseOfDll) if (!pcs) return FALSE; module = module_find_by_addr(pcs, BaseOfDll, DMT_UNKNOWN); if (!module) return FALSE; - /* remove local scope if defined inside this module */ - if (pcs->localscope_pc >= module->module.BaseOfImage && - pcs->localscope_pc < module->module.BaseOfImage + module->module.ImageSize) - { - pcs->localscope_pc = 0; - pcs->localscope_symt = NULL; - } module_remove(pcs, module); return TRUE; }
1
0
0
0
← Newer
1
...
8
9
10
11
12
13
14
...
56
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
Results per page:
10
25
50
100
200