mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
playsink: pass translated color balance value to channel
We found a case where untranslated values were being passed from the proxy to the underlying channel, causing bad color balance values in some setups. Thanks to Sebastian Dröge for clarifying how the code works, and suggesting the fix. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=701202
This commit is contained in:
parent
96aab6d8a5
commit
d32d2f0b14
1 changed files with 12 additions and 1 deletions
|
@ -1543,6 +1543,7 @@ update_colorbalance (GstPlaySink * playsink)
|
|||
GstColorBalanceChannel *proxy = l->data;
|
||||
GstColorBalanceChannel *channel = NULL;
|
||||
const GList *channels, *k;
|
||||
gdouble new_val;
|
||||
|
||||
channels = gst_color_balance_list_channels (balance);
|
||||
for (k = channels; k; k = k->next) {
|
||||
|
@ -1556,8 +1557,18 @@ update_colorbalance (GstPlaySink * playsink)
|
|||
|
||||
g_assert (channel);
|
||||
|
||||
/* Convert to [0, 1] range */
|
||||
new_val =
|
||||
((gdouble) playsink->colorbalance_values[i] -
|
||||
(gdouble) proxy->min_value) / ((gdouble) proxy->max_value -
|
||||
(gdouble) proxy->min_value);
|
||||
/* Convert to channel range */
|
||||
new_val =
|
||||
channel->min_value + new_val * ((gdouble) channel->max_value -
|
||||
(gdouble) channel->min_value);
|
||||
|
||||
gst_color_balance_set_value (balance, channel,
|
||||
playsink->colorbalance_values[i]);
|
||||
(gint) (new_val + 0.5));
|
||||
}
|
||||
|
||||
g_signal_handler_unblock (balance, playsink->colorbalance_value_changed_id);
|
||||
|
|
Loading…
Reference in a new issue