1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci* Copyright 2020 Google Inc.
3cb93a386Sopenharmony_ci*
4cb93a386Sopenharmony_ci* Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci* found in the LICENSE file.
6cb93a386Sopenharmony_ci*/
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "modules/audioplayer/SkAudioPlayer.h"
9cb93a386Sopenharmony_ci#include <algorithm>
10cb93a386Sopenharmony_ci#include <cmath>
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_ciSkAudioPlayer::~SkAudioPlayer() {}
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_cidouble SkAudioPlayer::setTime(double t) {
15cb93a386Sopenharmony_ci    t = std::min(std::max(t, 0.0), this->duration());
16cb93a386Sopenharmony_ci    if (!std::isfinite(t)) {
17cb93a386Sopenharmony_ci        t = this->time();
18cb93a386Sopenharmony_ci    }
19cb93a386Sopenharmony_ci    if (t != this->time()) {
20cb93a386Sopenharmony_ci        t = this->onSetTime(t);
21cb93a386Sopenharmony_ci    }
22cb93a386Sopenharmony_ci    return t;
23cb93a386Sopenharmony_ci}
24cb93a386Sopenharmony_ci
25cb93a386Sopenharmony_cidouble SkAudioPlayer::setNormalizedTime(double t) {
26cb93a386Sopenharmony_ci    this->setTime(t * this->duration());
27cb93a386Sopenharmony_ci    return this->normalizedTime();
28cb93a386Sopenharmony_ci}
29cb93a386Sopenharmony_ci
30cb93a386Sopenharmony_ciSkAudioPlayer::State SkAudioPlayer::setState(State s) {
31cb93a386Sopenharmony_ci    if (s != fState) {
32cb93a386Sopenharmony_ci        fState = this->onSetState(s);
33cb93a386Sopenharmony_ci    }
34cb93a386Sopenharmony_ci    return fState;
35cb93a386Sopenharmony_ci}
36cb93a386Sopenharmony_ci
37cb93a386Sopenharmony_cifloat SkAudioPlayer::setRate(float r) {
38cb93a386Sopenharmony_ci    r = std::min(std::max(r, 0.f), 1.f);
39cb93a386Sopenharmony_ci    if (!std::isfinite(r)) {
40cb93a386Sopenharmony_ci        r = fRate;
41cb93a386Sopenharmony_ci    }
42cb93a386Sopenharmony_ci    if (r != fRate) {
43cb93a386Sopenharmony_ci        fRate = this->onSetRate(r);
44cb93a386Sopenharmony_ci    }
45cb93a386Sopenharmony_ci    return fRate;
46cb93a386Sopenharmony_ci}
47cb93a386Sopenharmony_ci
48cb93a386Sopenharmony_cifloat SkAudioPlayer::setVolume(float v) {
49cb93a386Sopenharmony_ci    v = std::min(std::max(v, 0.f), 1.f);
50cb93a386Sopenharmony_ci    if (!std::isfinite(v)) {
51cb93a386Sopenharmony_ci        v = fVolume;
52cb93a386Sopenharmony_ci    }
53cb93a386Sopenharmony_ci    if (v != fVolume) {
54cb93a386Sopenharmony_ci        fVolume = this->onSetVolume(v);
55cb93a386Sopenharmony_ci    }
56cb93a386Sopenharmony_ci    return fVolume;
57cb93a386Sopenharmony_ci}
58