mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 07:42:23 +02:00
API: operate on cubic volume scale
Instead converting volume inside GJS, simplify things by making API operate on cubic volume scale.
This commit is contained in:
@@ -36,6 +36,7 @@
|
|||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <gst/video/video.h>
|
#include <gst/video/video.h>
|
||||||
#include <gst/video/colorbalance.h>
|
#include <gst/video/colorbalance.h>
|
||||||
|
#include <gst/audio/streamvolume.h>
|
||||||
#include <gst/tag/tag.h>
|
#include <gst/tag/tag.h>
|
||||||
#include <gst/pbutils/descriptions.h>
|
#include <gst/pbutils/descriptions.h>
|
||||||
|
|
||||||
@@ -331,7 +332,7 @@ gst_clapper_class_init (GstClapperClass * klass)
|
|||||||
|
|
||||||
param_specs[PROP_VOLUME] =
|
param_specs[PROP_VOLUME] =
|
||||||
g_param_spec_double ("volume", "Volume", "Volume",
|
g_param_spec_double ("volume", "Volume", "Volume",
|
||||||
0, 3.375, DEFAULT_VOLUME, G_PARAM_READWRITE |
|
0, 1.5, DEFAULT_VOLUME, G_PARAM_READWRITE |
|
||||||
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
|
||||||
|
|
||||||
param_specs[PROP_MUTE] =
|
param_specs[PROP_MUTE] =
|
||||||
@@ -656,10 +657,22 @@ gst_clapper_set_property (GObject * object, guint prop_id,
|
|||||||
gst_clapper_set_suburi_internal, self, NULL);
|
gst_clapper_set_suburi_internal, self, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROP_VOLUME:
|
case PROP_VOLUME: {
|
||||||
GST_DEBUG_OBJECT (self, "Set volume=%lf", g_value_get_double (value));
|
GValue volume_linear = G_VALUE_INIT;
|
||||||
g_object_set_property (G_OBJECT (self->playbin), "volume", value);
|
gdouble volume = g_value_get_double (value);
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (self, "Set volume=%lf", volume);
|
||||||
|
volume = gst_stream_volume_convert_volume (
|
||||||
|
GST_STREAM_VOLUME_FORMAT_CUBIC, GST_STREAM_VOLUME_FORMAT_LINEAR, volume);
|
||||||
|
GST_DEBUG_OBJECT (self, "Converted linear volume=%lf", volume);
|
||||||
|
|
||||||
|
g_value_init (&volume_linear, G_TYPE_DOUBLE);
|
||||||
|
g_value_set_double (&volume_linear, volume);
|
||||||
|
g_object_set_property (G_OBJECT (self->playbin), "volume", &volume_linear);
|
||||||
|
|
||||||
|
g_value_unset (&volume_linear);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PROP_RATE:
|
case PROP_RATE:
|
||||||
g_mutex_lock (&self->lock);
|
g_mutex_lock (&self->lock);
|
||||||
self->rate = g_value_get_double (value);
|
self->rate = g_value_get_double (value);
|
||||||
@@ -757,11 +770,17 @@ gst_clapper_get_property (GObject * object, guint prop_id,
|
|||||||
g_value_take_object (value, subtitle_info);
|
g_value_take_object (value, subtitle_info);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROP_VOLUME:
|
case PROP_VOLUME: {
|
||||||
|
gdouble volume;
|
||||||
|
|
||||||
g_object_get_property (G_OBJECT (self->playbin), "volume", value);
|
g_object_get_property (G_OBJECT (self->playbin), "volume", value);
|
||||||
GST_TRACE_OBJECT (self, "Returning volume=%lf",
|
volume = g_value_get_double (value);
|
||||||
g_value_get_double (value));
|
volume = gst_stream_volume_convert_volume (
|
||||||
|
GST_STREAM_VOLUME_FORMAT_LINEAR, GST_STREAM_VOLUME_FORMAT_CUBIC, volume);
|
||||||
|
g_value_set_double (value, volume);
|
||||||
|
GST_TRACE_OBJECT (self, "Returning volume=%lf", volume);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PROP_RATE:
|
case PROP_RATE:
|
||||||
g_mutex_lock (&self->lock);
|
g_mutex_lock (&self->lock);
|
||||||
g_value_set_double (value, self->rate);
|
g_value_set_double (value, self->rate);
|
||||||
|
5
src/controls.js
vendored
5
src/controls.js
vendored
@@ -489,7 +489,7 @@ class ClapperControls extends Gtk.Box
|
|||||||
|
|
||||||
const initialVolume = (settings.get_string('volume-initial') === 'custom')
|
const initialVolume = (settings.get_string('volume-initial') === 'custom')
|
||||||
? settings.get_int('volume-value') / 100
|
? settings.get_int('volume-value') / 100
|
||||||
: Misc.getCubicValue(settings.get_double('volume-last'));
|
: settings.get_double('volume-last');
|
||||||
|
|
||||||
this.volumeScale.set_value(initialVolume);
|
this.volumeScale.set_value(initialVolume);
|
||||||
}
|
}
|
||||||
@@ -567,10 +567,9 @@ class ClapperControls extends Gtk.Box
|
|||||||
_onVolumeScaleValueChanged(scale)
|
_onVolumeScaleValueChanged(scale)
|
||||||
{
|
{
|
||||||
const volume = scale.get_value();
|
const volume = scale.get_value();
|
||||||
const linearVolume = Misc.getLinearValue(volume);
|
|
||||||
const { player } = this.get_ancestor(Gtk.Grid);
|
const { player } = this.get_ancestor(Gtk.Grid);
|
||||||
|
|
||||||
player.set_volume(linearVolume);
|
player.set_volume(volume);
|
||||||
|
|
||||||
/* FIXME: All of below should be placed in 'volume-changed'
|
/* FIXME: All of below should be placed in 'volume-changed'
|
||||||
* event once we move to message bus API */
|
* event once we move to message bus API */
|
||||||
|
18
src/misc.js
18
src/misc.js
@@ -95,21 +95,3 @@ function getFormattedTime(time, showHours)
|
|||||||
const parsed = (hours) ? `${hours}:` : '';
|
const parsed = (hours) ? `${hours}:` : '';
|
||||||
return parsed + `${minutes}:${seconds}`;
|
return parsed + `${minutes}:${seconds}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCubicValue(linearVal)
|
|
||||||
{
|
|
||||||
return GstAudio.StreamVolume.convert_volume(
|
|
||||||
GstAudio.StreamVolumeFormat.LINEAR,
|
|
||||||
GstAudio.StreamVolumeFormat.CUBIC,
|
|
||||||
linearVal
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLinearValue(cubicVal)
|
|
||||||
{
|
|
||||||
return GstAudio.StreamVolume.convert_volume(
|
|
||||||
GstAudio.StreamVolumeFormat.CUBIC,
|
|
||||||
GstAudio.StreamVolumeFormat.LINEAR,
|
|
||||||
cubicVal
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
@@ -24,8 +24,6 @@ class ClapperPlayer extends PlayerBase
|
|||||||
|
|
||||||
this.keyPressCount = 0;
|
this.keyPressCount = 0;
|
||||||
|
|
||||||
this._maxVolume = Misc.getLinearValue(Misc.maxVolume);
|
|
||||||
|
|
||||||
const keyController = new Gtk.EventControllerKey();
|
const keyController = new Gtk.EventControllerKey();
|
||||||
keyController.connect('key-pressed', this._onWidgetKeyPressed.bind(this));
|
keyController.connect('key-pressed', this._onWidgetKeyPressed.bind(this));
|
||||||
keyController.connect('key-released', this._onWidgetKeyReleased.bind(this));
|
keyController.connect('key-released', this._onWidgetKeyReleased.bind(this));
|
||||||
@@ -180,17 +178,6 @@ class ClapperPlayer extends PlayerBase
|
|||||||
this.seek_seconds(seconds);
|
this.seek_seconds(seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_volume(volume)
|
|
||||||
{
|
|
||||||
if(volume < 0)
|
|
||||||
volume = 0;
|
|
||||||
else if(volume > this._maxVolume)
|
|
||||||
volume = this._maxVolume;
|
|
||||||
|
|
||||||
super.set_volume(volume);
|
|
||||||
debug(`set player volume: ${volume}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
adjust_position(isIncrease)
|
adjust_position(isIncrease)
|
||||||
{
|
{
|
||||||
this.seek_done = false;
|
this.seek_done = false;
|
||||||
@@ -316,7 +303,9 @@ class ClapperPlayer extends PlayerBase
|
|||||||
}
|
}
|
||||||
settings.set_string('resume-database', JSON.stringify([resumeInfo]));
|
settings.set_string('resume-database', JSON.stringify([resumeInfo]));
|
||||||
}
|
}
|
||||||
settings.set_double('volume-last', this.volume);
|
const volume = this.volume;
|
||||||
|
debug(`saving last volume: ${volume}`);
|
||||||
|
settings.set_double('volume-last', volume);
|
||||||
|
|
||||||
clapperWidget.controls._onCloseRequest();
|
clapperWidget.controls._onCloseRequest();
|
||||||
}
|
}
|
||||||
|
@@ -530,7 +530,7 @@ class ClapperWidget extends Gtk.Grid
|
|||||||
|
|
||||||
_onPlayerVolumeChanged(player)
|
_onPlayerVolumeChanged(player)
|
||||||
{
|
{
|
||||||
const volume = player.get_volume();
|
const volume = player.volume;
|
||||||
|
|
||||||
/* FIXME: This check should not be needed, GstPlayer should not
|
/* FIXME: This check should not be needed, GstPlayer should not
|
||||||
* emit 'volume-changed' with the same values, but it does. */
|
* emit 'volume-changed' with the same values, but it does. */
|
||||||
@@ -540,8 +540,7 @@ class ClapperWidget extends Gtk.Grid
|
|||||||
/* Once above is fixed in GstPlayer, remove this var too */
|
/* Once above is fixed in GstPlayer, remove this var too */
|
||||||
this.controls.currentVolume = volume;
|
this.controls.currentVolume = volume;
|
||||||
|
|
||||||
const cubicVolume = Misc.getCubicValue(volume);
|
this.controls._updateVolumeButtonIcon(volume);
|
||||||
this.controls._updateVolumeButtonIcon(cubicVolume);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onStateNotify(toplevel)
|
_onStateNotify(toplevel)
|
||||||
|
Reference in New Issue
Block a user