After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 339837 - [audioconvert] support for 64-bit float audio
[audioconvert] support for 64-bit float audio
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal enhancement
: 0.10.12
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2006-04-26 17:13 UTC by Tim-Philipp Müller
Modified: 2007-02-28 12:49 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Tim-Philipp Müller 2006-04-26 17:13:05 UTC
audioconvert currently doesn't handle 64-bit float audio.

For an example, try playing this file in playbin:

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AU/Samples/AFsp/M1F1-float64-AFsp.au
Comment 1 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-02 09:49:16 UTC
2007-02-02  Stefan Kost  <ensonic@users.sf.net>

	* gst/audioconvert/audioconvert.c: (float), (double),
	(audio_convert_get_func_index):
	* gst/audioconvert/gstaudioconvert.c: (set_structure_widths),
	(make_lossless_changes):
	  Support for 64-bit float audio in audioconvert (#339837)

Comment 2 Tim-Philipp Müller 2007-02-02 14:47:17 UTC
While your fix does make the above sample work, 22bit => 64bit float conversion seems to be slightly broken. Try for example:

gst-launch-0.10 filesrc location=M1F1-float64-AFsp.au ! auparse ! audioconvert ! audio/x-raw-float,width=32 ! audioconvert ! audio/x-raw-float,width=64 ! audioconvert ! alsasink

Comment 3 Tim-Philipp Müller 2007-02-21 14:40:52 UTC
Marking as blocker.

This should be either fixed or reverted before the release, given that support for 64-bit floats has been added to elements like volume and level now, and caps will preferably get fixated to 64bit if possible, so something like

   vorbisdec ! audioconvert ! level ! fakesink

would now be broken.
Comment 4 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-21 16:31:46 UTC
I will work on this. One step could be to use double as the intermediate format it both sides are float/double. Can be done in audio_convert_prepare_context().
Comment 5 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-21 16:36:38 UTC
and we need gst_channel_mix_mix() ->  gst_channel_mix_mix_int() plus a new gst_channel_mix_mix_float()
Comment 6 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-22 07:09:10 UTC
There is no need to revert anything, because also prior to the 64bit changes audioconvert would degrade quality when doing channel mixing of float.
Comment 7 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-22 09:06:59 UTC
2007-02-22  Stefan Kost  <ensonic@users.sf.net>

	* gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
	(double_hq), (audio_convert_get_func_index),
	(audio_convert_prepare_context), (audio_convert_convert):
	* gst/audioconvert/audioconvert.h:
	* gst/audioconvert/gstchannelmix.c: (gst_channel_mix_setup_matrix),
	(gst_channel_mix_mix_int), (gst_channel_mix_mix_float):
	* gst/audioconvert/gstchannelmix.h:
	* tests/check/elements/audioconvert.c: (GST_START_TEST):
	  Add float as an intermediate format, as well as float mixing. Enable
	  test that was failing before. Fixes #339837
Comment 8 Tim-Philipp Müller 2007-02-22 13:05:43 UTC
Thanks, this fixes the above for me too.

> There is no need to revert anything, because also prior to the 64bit changes
> audioconvert would degrade quality when doing channel mixing of float.

Just to be sure, I wasn't talking about a 'degrade in quality' but garbled output.
Comment 9 Jan Schmidt 2007-02-27 13:14:59 UTC
Corruption of the audio still exists when converting int to 64-bit float:

gst-launch audiotestsrc ! audioconvert ! audio/x-raw-float,width=64 ! audioconvert ! alsasink

Comment 10 Stefan Sauer (gstreamer, gtkdoc dev) 2007-02-28 12:49:21 UTC
2007-02-28  Stefan Kost  <ensonic@users.sf.net>

	* gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
	(double_hq), (audio_convert_get_func_index), (check_default),
	(audio_convert_prepare_context), (audio_convert_convert):
	  Also make valgrind happy and avoid copying data in some cases.

2007-02-28  Stefan Kost  <ensonic@users.sf.net>

	* gst/audioconvert/audioconvert.c: (float), (double), (float_hq),
	(double_hq), (audio_convert_get_func_index),
	(audio_convert_prepare_context), (audio_convert_convert):
	* gst/audioconvert/gstaudioconvert.c:
	(gst_audio_convert_class_init), (gst_audio_convert_get_unit_size),
	(gst_audio_convert_transform_caps):
	* tests/check/elements/audioconvert.c: (GST_START_TEST),
	(audioconvert_suite):
	  Don't run inplace if that overwrites source data as we go. Add more
	  tests. Fixes #339837 even more.