https://bugs.winehq.org/show_bug.cgi?id=48230
Bug ID: 48230 Summary: TES IV: Oblivion MP3 no longer play since wine-staging 4.17 Product: Wine-staging Version: 4.21 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: belgix_oz@hotmail.com CC: leslie_alistair@hotmail.com, z.figura12@gmail.com Distribution: ---
Some recent changes in QUARTZ.DLL code prevent TES IV: Oblivion to play MP3 files. Other sounds like voices and ambiance sound just play fine with any 4.x version.
The issue is present in wine-staging 4.17, 4.18, 4.19, 4.20 and the latest 4.21.
A workaround to get thing working is to override QUARTZ.DLL and QUARTZ.DLL.SO files in /usr/lib (and optionally /usr/lib64 but Oblivion is a 32-bit game) using files compiled for wine-staging 4.16. Workaround tested on wine-staging 4.21 only.
Using native Windows QUARTZ.DLL (32-bit) doesn't help too. For that case, game stability is good but no MP3 sound played.
https://bugs.winehq.org/show_bug.cgi?id=48230
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |-unknown Product|Wine-staging |Wine Keywords| |regression
--- Comment #1 from Zebediah Figura z.figura12@gmail.com --- Probably not a bug in Staging.
In particular, 4.17 was the first released version to require GStreamer for parsing of AVI, MPEG-I and WAVE files. Do you have the 32-bit GStreamer "good" plugin set installed?
If the bug is present even with the right GStreamer plugins, can you please attach a log with WINEDEBUG=+strmbase,+quartz,+gstreamer,+timestamp?
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #2 from belgix_oz@hotmail.com --- Will try that this weekend. Because gstreamer is presently compiled 64-bit only on my system, I would also have to recompile 5 others gstreamer 32-bit dependencies (libpcre, glib, db, pam & libcap) to test that.
If your solution work, I will also report this issue to Gentoo herd as dependency issue on >=app-emulation/wine-staging-4.17 ebuilds.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #3 from belgix_oz@hotmail.com --- (In reply to belgix_oz from comment #2) It's kind a bit a non sense if gstreamer is know required as WAVE files are properly handled by wine-staging ALSA backend (winealsa.drv) for all versions (including the latest 4.21). I never compiled wine-staging with gstreamer (neither pulseaudio) support.
What is broken since 4.17 is the link between ALSA wine-staging backend and mpg123 which on my system are compiled 32 and 64-bit. That would means (if not fixed) ALSA backend is no longer fully supported by wine.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #4 from Zebediah Figura z.figura12@gmail.com --- (In reply to belgix_oz from comment #3)
It's kind a bit a non sense if gstreamer is know required as WAVE files are properly handled by wine-staging ALSA backend (winealsa.drv) for all versions (including the latest 4.21). I never compiled wine-staging with gstreamer (neither pulseaudio) support.
What is broken since 4.17 is the link between ALSA wine-staging backend and mpg123 which on my system are compiled 32 and 64-bit. That would means (if not fixed) ALSA backend is no longer fully supported by wine.
It's not the ability to decode WAVE files that we depend on (and, in the case of raw integer PCM, no such decoding is taking place), but rather the general file parsing and media streaming framework that GStreamer provides. (Hence also why mpg123 isn't enough by itself). Yes, we used to have a standalone DirectShow WAVE parser filter in tree. It took up over 2,000 lines of code, was very buggy, and was not well-optimized. Making use of GStreamer is the better option for these reasons.
I'm not entirely sure what this comment is about, though, since you initially stated the game needs to play mp3 files, but the same principle applies.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #5 from belgix_oz@hotmail.com --- (In reply to Zebediah Figura from comment #4)
I'm not entirely sure what this comment is about, though, since you initially stated the game needs to play mp3 files, but the same principle applies.
The game plays both; WAVE for voice and ambient sounds, MP3 for music (not essential tough). We came to that because in prior 4.17, wine was able to play WAVE and MP3 (using mpg123) thru an ALSA sink/source. Now ALSA wine backend is only working for WAVE files.
I might be wrong but people using pulseaudio wine backend might have the same issue with MP3 files. Pulseaudio is a just sound server, not something that handle media components like gstreamer.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #6 from belgix_oz@hotmail.com --- Created attachment 65890 --> https://bugs.winehq.org/attachment.cgi?id=65890 WINEDEBUG log : wine 4.21 with quartz.dll 4.16 (MP3 sound OK)
Log file when MPEG-1 sound is OK with wine-staging 4.21. I replaced quartz.dll and quartz.dll.so file from wine-staging 4.16 to get music play. Interesting things occurs around line 453 of oblivion.416.log file ... no error.
61324.759:002e:trace:quartz:GetFilterInfo Moniker = L"MPEG-I Stream Splitter" 61324.759:002e:trace:quartz:DllGetClassObject ({336475d0-942a-11ce-a870-00aa002feab5},{00000001-0000-0000-c000-000000000046},0032EDD8) 61324.759:002e:trace:quartz:DSCF_CreateInstance (04C37E78)->(00000000,{00000000-0000-0000-c000-000000000046},0032EDD4) 61324.759:002e:trace:strmbase:filter_inner_QueryInterface iface 04A0F7F4, iid {00000000-0000-0000-c000-000000000046}, out 0032EDD4.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #7 from belgix_oz@hotmail.com --- Created attachment 65891 --> https://bugs.winehq.org/attachment.cgi?id=65891 WINEDEBUG log : wine 4.21 (no MP3 sound)
Log file with no MPEG-1 sound is on wine-staging 4.21. Quartz.dll spit the dummy around line 457 on oblivion.421.log file
61930.671:002e:trace:quartz:GetFilterInfo Moniker = L"MPEG-I Stream Splitter" 61930.672:0038:trace:quartz:DllGetClassObject ({336475d0-942a-11ce-a870-00aa002feab5},{00000001-0000-0000-c000-000000000046},04D3FD98) 61930.672:0038:err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111 for dll L"C:\windows\system32\quartz.dll" 61930.672:0038:err:ole:create_server class {336475d0-942a-11ce-a870-00aa002feab5} not registered 61930.672:0038:fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported 61930.672:0038:err:ole:CoGetClassObject no class object {336475d0-942a-11ce-a870-00aa002feab5} could be created for context 0x17 61930.672:002e:warn:quartz:FilterGraph2_Render Unable to create filter (80040154), trying next one
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #8 from Zebediah Figura z.figura12@gmail.com --- I don't see any mention of winegstreamer in that log, which means that your Wine was probably built without it. If you don't have a winegstreamer.dll in your C:/windows/syswow64/ directory, that's definitely the case, and that needs to be fixed by your distribution's packagers.
I'm kind of surprised if it's the case, anyway, since GStreamer is and has always been a hard requirement for decoding plenty of other codecs.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #9 from belgix_oz@hotmail.com --- (In reply to Zebediah Figura from comment #8)
I'm kind of surprised if it's the case, anyway, since GStreamer is and has always been a hard requirement for decoding plenty of other codecs.
You can close this ticket if GStreamer is now an hard requirement for wine. Gentoo offers choice of 3 audio backends for wine; ALSA, GStreamer or pulseaudio. My choice of using ALSA is based on fact that wine-staging is 1) the *only* 32-bit app on my linux box and 2) requires for ALSA backend, only 51 packages to recompile 32-bit. Recompiling pulseaudio 32-bit (which should not work too!) would add another 10 packages (but not too bad considering pulseaudio is my audio server). GStreamer, which I have installed 64-bit because "I have to", would require another 20 packages to re-compile 32-bit on top of the 60.
For no benefit at all, I would just keep using wine-staging 4.16 which fully fill my needs for now rather than recompiling 30'ish more 32-bit packages (just to be able to listen MPEG-I files which 4.16 does well).
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #10 from Zebediah Figura z.figura12@gmail.com --- Okay, now I understand part of the confusion. There aren't "3 audio backends" in that specific sense. GStreamer is used as a library to decode compressed audio and video and to handle large parts of the DirectShow streaming API (as well as some parts of mfplat, and in the future probably more). It's not used as an audio backend in itself (e.g. we don't use autoaudiosink). All audio that's decoded by GStreamer ultimately goes through one of Wine's actual audio backends, which are ALSA, PulseAudio, and OSS.
Previously, we implemented decoders for some specific formats in tree. For the reasons given this is no longer the case, and we now handle those via GStreamer. GStreamer is a hard requirement for any application that uses those parts of DirectShow (which is most applications that use DirectShow), which is not quite the same thing as being a hard requirement for Wine (since plenty of applications don't use DirectShow at all).
Similarly, if you don't use 64-bit applications which use DirectShow (and you probably don't), you don't need 64-bit GStreamer. If your distribution's package build scripts state otherwise, that's probably something that should be addressed there. (For example, the Debian packages distributed by WineHQ don't require GStreamer to be installed, though they are built with GStreamer support.)
Yes, I know it's annoying to have to install 32-bit libraries just for Wine. Blame it on the application; we don't really have a choice in the matter. (Besides to emulate a 32-bit system through machine code translation, but that's rather unfeasible.) Yes, I know that from the user's perspective we could simply not use any external libraries, but from a developer's perspective the maintenance cost is a nightmare.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #11 from belgix_oz@hotmail.com --- (In reply to Zebediah Figura from comment #10)
Resolved. Part of confusion on my side seems you still have some legacy code that use libmpg123 (which from my point of view, for MPEG-I, does exactly what you are doing now with gstreamer). From wine-staging 4.21 when running makefile
checking mpg123.h usability... yes checking mpg123.h presence... yes checking for mpg123.h... yes checking for mpg123_feed in -lmpg123... yes checking for -lopenal... libopenal.so.1 checking for -lodbc... not found checking for gcc strength-reduce bug... no
Thanks for you help.
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #12 from Zebediah Figura z.figura12@gmail.com --- There is also code that uses mpg123, yes, though I wouldn't describe it as legacy. It's serving a slightly different purpose (in specific, the ACM and DMO APIs which unlike DirectShow are much simpler and just ask for raw data to be fed in and out; DirectShow by contrast is doing a lot more work setting up a media decoding pipeline which we can largely offload to GStreamer.)
Note also that GStreamer ends up using libmpg123 to decode layer 3 audio anyway (at least with 1.12 and later since mad was removed) unless using libav instead.
https://bugs.winehq.org/show_bug.cgi?id=48230
maniikarabera@protonmail.ch changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |maniikarabera@protonmail.ch
https://bugs.winehq.org/show_bug.cgi?id=48230
joaopa jeremielapuree@yahoo.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jeremielapuree@yahoo.fr
--- Comment #13 from joaopa jeremielapuree@yahoo.fr --- Gstreamer was not installed by reporter.
Can an administrator close this bug as INVALID?
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #14 from belgix_oz@hotmail.com --- (In reply to joaopa from comment #13)
Gstreamer was not installed by reporter.
Can an administrator close this bug as INVALID?
No problem with that. My confusion came from gentoo maintainers which doesn't put gstreamer are hard dependency for wine. Other source of confusion is when gentoo maintainers use gstreamer flag is rather to install gstreamer backend than using it as a multimedia framework.
Regards.
https://bugs.winehq.org/show_bug.cgi?id=48230
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED
--- Comment #15 from Zebediah Figura z.figura12@gmail.com --- Resolving INVALID, though maybe NOTOURBUG is more appropriate...
https://bugs.winehq.org/show_bug.cgi?id=48230
--- Comment #16 from Austin English austinenglish@gmail.com --- Closing.
https://bugs.winehq.org/show_bug.cgi?id=48230
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #17 from Austin English austinenglish@gmail.com --- Closing.