mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-12 02:15:31 +00:00
volume: Explicitly cast integers to doubles and then back to integers after multiplication
gcc 4.9.1 on ARM seems to have a bug that causes it to cast the float to an integer first, resulting in a 0 scale factor for volume < 1.0. As a side effect this change here will also improve accuracy of the result a bit because we go via doubles instead of floats. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65325 https://bugzilla.gnome.org/show_bug.cgi?id=745667
This commit is contained in:
parent
31a3e6c9f1
commit
40f4daffd1
1 changed files with 8 additions and 4 deletions
|
@ -250,10 +250,14 @@ volume_update_volume (GstVolume * self, const GstAudioInfo * info,
|
|||
self->current_mute = FALSE;
|
||||
self->current_volume = volume;
|
||||
|
||||
self->current_vol_i8 = volume * VOLUME_UNITY_INT8;
|
||||
self->current_vol_i16 = volume * VOLUME_UNITY_INT16;
|
||||
self->current_vol_i24 = volume * VOLUME_UNITY_INT24;
|
||||
self->current_vol_i32 = volume * VOLUME_UNITY_INT32;
|
||||
self->current_vol_i8 =
|
||||
(gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT8);
|
||||
self->current_vol_i16 =
|
||||
(gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT16);
|
||||
self->current_vol_i24 =
|
||||
(gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT24);
|
||||
self->current_vol_i32 =
|
||||
(gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT32);
|
||||
|
||||
passthrough = (self->current_vol_i16 == VOLUME_UNITY_INT16);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue