53 lines
1.9 KiB
Diff
53 lines
1.9 KiB
Diff
|
From 2731012d832b593c54a50492a27d328f2de9b596 Mon Sep 17 00:00:00 2001
|
||
|
From: Daniel Drake <dsd@laptop.org>
|
||
|
Date: Wed, 29 May 2013 10:33:48 -0600
|
||
|
Subject: [PATCH] gstplaysink: pass translated color balance value to channel
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
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
|
||
|
---
|
||
|
gst/playback/gstplaysink.c | 13 ++++++++++++-
|
||
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||
|
|
||
|
Index: gst-plugins-base-1.0.7/gst/playback/gstplaysink.c
|
||
|
===================================================================
|
||
|
--- gst-plugins-base-1.0.7.orig/gst/playback/gstplaysink.c
|
||
|
+++ gst-plugins-base-1.0.7/gst/playback/gstplaysink.c
|
||
|
@@ -1540,6 +1540,7 @@ update_colorbalance (GstPlaySink * plays
|
||
|
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) {
|
||
|
@@ -1553,8 +1554,18 @@ update_colorbalance (GstPlaySink * plays
|
||
|
|
||
|
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_handlers_unblock_by_func (balance,
|