mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-15 21:57:10 +02:00
Beta version 4.6.12: Compare speed values safely.
This commit is contained in:
parent
1f2836af59
commit
2c17f41c61
10 changed files with 24 additions and 15 deletions
|
@ -488,7 +488,7 @@ public:
|
|||
: 1.;
|
||||
}
|
||||
void setVideoPlaybackSpeed(float64 speed) {
|
||||
if ((_videoPlaybackSpeed.enabled = (speed != 1.))) {
|
||||
if ((_videoPlaybackSpeed.enabled = !Media::EqualSpeeds(speed, 1.))) {
|
||||
_videoPlaybackSpeed.value = speed;
|
||||
}
|
||||
}
|
||||
|
@ -499,7 +499,7 @@ public:
|
|||
: 1.;
|
||||
}
|
||||
void setVoicePlaybackSpeed(float64 speed) {
|
||||
if ((_voicePlaybackSpeed.enabled = (speed != 1.0))) {
|
||||
if ((_voicePlaybackSpeed.enabled = !Media::EqualSpeeds(speed, 1.0))) {
|
||||
_voicePlaybackSpeed.value = speed;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "media/audio/media_child_ffmpeg_loader.h"
|
||||
#include "media/audio/media_audio_loaders.h"
|
||||
#include "media/audio/media_audio_track.h"
|
||||
#include "media/media_common.h"
|
||||
#include "media/streaming/media_streaming_utility.h"
|
||||
#include "webrtc/webrtc_media_devices.h"
|
||||
#include "data/data_document.h"
|
||||
|
@ -800,7 +801,7 @@ void Mixer::setSpeedFromExternal(const AudioMsgId &audioId, float64 speed) {
|
|||
const auto track = trackForType(audioId.type());
|
||||
if (track->state.id == audioId) {
|
||||
track->nextSpeed = speed;
|
||||
if (track->speed != track->nextSpeed
|
||||
if (!EqualSpeeds(track->speed, track->nextSpeed)
|
||||
&& !IsStoppedOrStopping(track->state.state)) {
|
||||
track->loading = true;
|
||||
track->loaded = false;
|
||||
|
|
|
@ -542,7 +542,7 @@ bool AbstractAudioFFMpegLoader::ensureResampleSpaceAvailable(int samples) {
|
|||
|
||||
bool AbstractAudioFFMpegLoader::changeSpeedFilter(float64 speed) {
|
||||
speed = std::clamp(speed, kSpeedMin, kSpeedMax);
|
||||
if (_filterSpeed == speed) {
|
||||
if (EqualSpeeds(_filterSpeed, speed)) {
|
||||
return false;
|
||||
}
|
||||
avfilter_graph_free(&_filterGraph);
|
||||
|
@ -559,7 +559,7 @@ bool AbstractAudioFFMpegLoader::changeSpeedFilter(float64 speed) {
|
|||
void AbstractAudioFFMpegLoader::createSpeedFilter(float64 speed) {
|
||||
Expects(!_filterGraph);
|
||||
|
||||
if (speed == 1.) {
|
||||
if (EqualSpeeds(speed, 1.)) {
|
||||
return;
|
||||
}
|
||||
const auto abuffer = avfilter_get_by_name("abuffer");
|
||||
|
|
|
@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "media/audio/media_audio.h"
|
||||
#include "media/audio/media_audio_ffmpeg_loader.h"
|
||||
#include "media/audio/media_child_ffmpeg_loader.h"
|
||||
#include "media/media_common.h"
|
||||
|
||||
namespace Media {
|
||||
namespace Player {
|
||||
|
@ -157,7 +158,7 @@ void Loaders::loadData(AudioMsgId audio, crl::time positionMs) {
|
|||
}
|
||||
|
||||
const auto sampleSize = l->sampleSize();
|
||||
const auto speedChanged = (setup.newSpeed != setup.oldSpeed);
|
||||
const auto speedChanged = !EqualSpeeds(setup.newSpeed, setup.oldSpeed);
|
||||
auto updatedWithSpeed = speedChanged
|
||||
? rebufferOnSpeedChange(setup)
|
||||
: std::optional<Mixer::Track::WithSpeed>();
|
||||
|
@ -438,7 +439,7 @@ Loaders::SetupLoaderResult Loaders::setupLoader(
|
|||
track->state.length,
|
||||
track->speed);
|
||||
return { .loader = l, .justStarted = true };
|
||||
} else if (track->nextSpeed != track->speed) {
|
||||
} else if (!EqualSpeeds(track->nextSpeed, track->speed)) {
|
||||
return {
|
||||
.loader = l,
|
||||
.oldSpeed = track->speed,
|
||||
|
|
|
@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#include "base/algorithm.h"
|
||||
|
||||
namespace Media {
|
||||
|
||||
enum class RepeatMode {
|
||||
|
@ -25,4 +27,8 @@ inline constexpr auto kSpeedMin = 0.5;
|
|||
inline constexpr auto kSpeedMax = 2.5;
|
||||
inline constexpr auto kSpedUpDefault = 1.7;
|
||||
|
||||
[[nodiscard]] inline bool EqualSpeeds(float64 a, float64 b) {
|
||||
return int(base::SafeRound(a * 10.)) == int(base::SafeRound(b * 10.));
|
||||
}
|
||||
|
||||
} // namespace Media
|
||||
|
|
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
*/
|
||||
#include "media/player/media_player_button.h"
|
||||
|
||||
#include "media/media_common.h"
|
||||
#include "ui/effects/ripple_animation.h"
|
||||
#include "ui/painter.h"
|
||||
#include "styles/style_media_player.h"
|
||||
|
@ -272,7 +273,7 @@ SpeedButtonLayout::SpeedButtonLayout(
|
|||
|
||||
void SpeedButtonLayout::setSpeed(float64 speed) {
|
||||
speed = base::SafeRound(speed * 10.) / 10.;
|
||||
if (_speed != speed) {
|
||||
if (!EqualSpeeds(_speed, speed)) {
|
||||
_speed = speed;
|
||||
_text = SpeedText(_speed);
|
||||
_textWidth = _metrics.horizontalAdvance(_text);
|
||||
|
@ -304,7 +305,7 @@ SpeedButton::SpeedButton(QWidget *parent, const style::MediaSpeedButton &st)
|
|||
}
|
||||
|
||||
void SpeedButton::setSpeed(float64 speed, anim::type animated) {
|
||||
_isDefault = (speed == 1.);
|
||||
_isDefault = EqualSpeeds(speed, 1.);
|
||||
_layout.setSpeed(speed);
|
||||
update();
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ SpeedSliderItem::SpeedSliderItem(
|
|||
|
||||
_slider->setChangeProgressCallback([=](float64 value) {
|
||||
const auto speed = SliderValueToSpeed(value);
|
||||
if (current() != speed) {
|
||||
if (!EqualSpeeds(current(), speed)) {
|
||||
_last = speed;
|
||||
_changing.fire_copy(speed);
|
||||
_debounceTimer.callOnce(kSpeedDebounceTimeout);
|
||||
|
@ -266,7 +266,7 @@ void FillSpeedMenu(
|
|||
check->setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||
state->realtime.value(
|
||||
) | rpl::start_with_next([=](float64 now) {
|
||||
const auto chosen = (speed == now);
|
||||
const auto chosen = EqualSpeeds(speed, now);
|
||||
const auto overriden = chosen ? iconActive : icon;
|
||||
raw->setIcon(overriden, overriden);
|
||||
raw->action()->setEnabled(!chosen);
|
||||
|
@ -744,7 +744,7 @@ void SpeedController::toggleDefault() {
|
|||
}
|
||||
|
||||
void SpeedController::setSpeed(float64 newSpeed) {
|
||||
if (!(_isDefault = (newSpeed == 1.))) {
|
||||
if (!(_isDefault = EqualSpeeds(newSpeed, 1.))) {
|
||||
_speed = newSpeed;
|
||||
}
|
||||
_speedChanged.fire(speed());
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
[[nodiscard]] bool paused() const;
|
||||
|
||||
[[nodiscard]] float64 speed() const;
|
||||
void setSpeed(float64 speed); // 0.5 <= speed <= 2.
|
||||
void setSpeed(float64 speed);
|
||||
|
||||
[[nodiscard]] bool waitingShown() const;
|
||||
[[nodiscard]] float64 waitingOpacity() const;
|
||||
|
|
|
@ -834,7 +834,7 @@ void Player::setSpeed(float64 speed) {
|
|||
if (!Media::Audio::SupportsSpeedControl()) {
|
||||
speed = 1.;
|
||||
}
|
||||
if (_options.speed != speed) {
|
||||
if (!EqualSpeeds(_options.speed, speed)) {
|
||||
_options.speed = speed;
|
||||
if (active()) {
|
||||
if (_audio) {
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
[[nodiscard]] bool ready() const;
|
||||
|
||||
[[nodiscard]] float64 speed() const;
|
||||
void setSpeed(float64 speed); // 0.5 <= speed <= 2.
|
||||
void setSpeed(float64 speed);
|
||||
void setWaitForMarkAsShown(bool wait);
|
||||
|
||||
[[nodiscard]] bool playing() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue