After looking for gstreamer related source code in Wine I could not find a place that calls winegstreamer to actually do something like video/audio decode/output. I think it should be somewhere amstream/quartz related but I'm not sure.
My question is basically what I need to do (preferably with source example or documentation) to get a mpg movie to play and that ends up using winegstreamer, for example. For example with AVI files I can simply do some avifil32/msvfw32 calls and get the video output to a window.
Thanks in advance, Bruno
On Wed, Aug 03, 2016 at 02:50:07PM -0300, Bruno Jesus wrote:
After looking for gstreamer related source code in Wine I could not find a place that calls winegstreamer to actually do something like video/audio decode/output. I think it should be somewhere amstream/quartz related but I'm not sure.
quartz is crazy complicated. The short version is Wine calls winegstreamer's DllRegisterServer during prefix creation because it's present in <loader/wine.inf.in>. Applications which use directshow (quartz and friends) eventually will load winegstreamer, usually via IGraphBuilder::Connect in quartz.
winegstreamer itself subclasses the implementations in strmbase, which handles a lot of the actual moving of data between filter graph components.
My question is basically what I need to do (preferably with source example or documentation) to get a mpg movie to play and that ends up using winegstreamer, for example. For example with AVI files I can simply do some avifil32/msvfw32 calls and get the video output to a window.
AVI has a decoder built into Wine, as you found. Other formats that don't have a built-in decoder should go through winegstreamer, though the connection will fail if your gstreamer installation can't decode it. Very few distros ship useful 32-bit gstreamer libraries.
You can use a program called Graph Studio[1] to explore dshow graphs. The "File->Render Media File" function is basically a front-end to IGraphBuilder::RenderFile, which should build a complete graph to play back a media file.
[1] http://blog.monogram.sk/janos/tools/monogram-graphstudio/
Hope that helps, Andrew
On Thu, Aug 4, 2016 at 10:19 AM, Andrew Eikum aeikum@codeweavers.com wrote:
On Wed, Aug 03, 2016 at 02:50:07PM -0300, Bruno Jesus wrote:
After looking for gstreamer related source code in Wine I could not find a place that calls winegstreamer to actually do something like video/audio decode/output. I think it should be somewhere amstream/quartz related but I'm not sure.
quartz is crazy complicated. The short version is Wine calls winegstreamer's DllRegisterServer during prefix creation because it's present in <loader/wine.inf.in>. Applications which use directshow (quartz and friends) eventually will load winegstreamer, usually via IGraphBuilder::Connect in quartz.
winegstreamer itself subclasses the implementations in strmbase, which handles a lot of the actual moving of data between filter graph components.
My question is basically what I need to do (preferably with source example or documentation) to get a mpg movie to play and that ends up using winegstreamer, for example. For example with AVI files I can simply do some avifil32/msvfw32 calls and get the video output to a window.
AVI has a decoder built into Wine, as you found. Other formats that don't have a built-in decoder should go through winegstreamer, though the connection will fail if your gstreamer installation can't decode it. Very few distros ship useful 32-bit gstreamer libraries.
You can use a program called Graph Studio[1] to explore dshow graphs. The "File->Render Media File" function is basically a front-end to IGraphBuilder::RenderFile, which should build a complete graph to play back a media file.
[1] http://blog.monogram.sk/janos/tools/monogram-graphstudio/
Hope that helps, Andrew
Hi, thank you very much for your response. I downloaded the app but as expected it looks like I don't have the required codecs for the test videos I got.
#Test 1 fixme:gstreamer:unknown_type Could not find a filter for caps: video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)10000000/333667, width=(int)704, height=(int)396
#Test 2 fixme:gstreamer:unknown_type Could not find a filter for caps: audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2
#Test 3 fixme:gstreamer:unknown_type Could not find a filter for caps: video/mpeg, systemstream=(boolean)true, mpegversion=(int)2
The application crashed in tests 1 and 3, test 2 plays audio only. Not sure if it was supposed to crash or not.
I tried installing some extra i386 packages here in Debian x86_64 but apt-get wants to uninstall basically everything else if I do so I guess I'm stuck for now. Currently I have plugins-base, plugins-good and fluendo-mp3.
Best regards, Bruno
On Thu, Aug 04, 2016 at 05:35:14PM -0300, Bruno Jesus wrote:
I tried installing some extra i386 packages here in Debian x86_64 but apt-get wants to uninstall basically everything else if I do so I guess I'm stuck for now. Currently I have plugins-base, plugins-good and fluendo-mp3.
Yeah. Arch Linux is the only distro I know that ships 32-bit gstreamer libraries, and that only happened recently. If you want them, you could ask your distro's gstreamer maintainers to provide them.
Andrew
On Thu, Aug 4, 2016 at 6:34 PM, Andrew Eikum aeikum@codeweavers.com wrote:
On Thu, Aug 04, 2016 at 05:35:14PM -0300, Bruno Jesus wrote:
I tried installing some extra i386 packages here in Debian x86_64 but apt-get wants to uninstall basically everything else if I do so I guess I'm stuck for now. Currently I have plugins-base, plugins-good and fluendo-mp3.
Yeah. Arch Linux is the only distro I know that ships 32-bit gstreamer libraries, and that only happened recently. If you want them, you could ask your distro's gstreamer maintainers to provide them.
Debian provides the 32 bit libraries but it is not possible to install them side by side with the 64 bit versions, so trying to install them results in removing every 64 bit package that depends on the 64 bit version, in my case around 60 packages including programs I use daily.
One last question regarding winegstreamer, I'm slowly following some tutorials to understand how gstreamer works but in Wine I can't find where the decompressed frame data is, I suppose somewhere there should be a frame that is then displayed in the screen and I believe it will take like 99 quartz calls to make that happen.
Thanks, Bruno
On 08/11/2016 10:38 PM, Bruno Jesus wrote:
On Thu, Aug 4, 2016 at 6:34 PM, Andrew Eikum aeikum@codeweavers.com wrote:
On Thu, Aug 04, 2016 at 05:35:14PM -0300, Bruno Jesus wrote:
I tried installing some extra i386 packages here in Debian x86_64 but apt-get wants to uninstall basically everything else if I do so I guess I'm stuck for now. Currently I have plugins-base, plugins-good and fluendo-mp3.
Yeah. Arch Linux is the only distro I know that ships 32-bit gstreamer libraries, and that only happened recently. If you want them, you could ask your distro's gstreamer maintainers to provide them.
Debian provides the 32 bit libraries but it is not possible to install them side by side with the 64 bit versions, so trying to install them results in removing every 64 bit package that depends on the 64 bit version, in my case around 60 packages including programs I use daily.
One last question regarding winegstreamer, I'm slowly following some tutorials to understand how gstreamer works but in Wine I can't find where the decompressed frame data is, I suppose somewhere there should be a frame that is then displayed in the screen and I believe it will take like 99 quartz calls to make that happen.
Thanks, Bruno
Gentoo has native support for multilib in the eclass for gstreamer plugins, so all of the plugins should support 32bit and 64bit side by side.
Additionally, to debug/test winegstreamer/gstreamer plugin support, you can use a DirectShow filter graph viewing program like GraphStudioNext.