diff options
Diffstat (limited to 'src/audio/player.c')
-rw-r--r-- | src/audio/player.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/audio/player.c b/src/audio/player.c index e0003168..77c23104 100644 --- a/src/audio/player.c +++ b/src/audio/player.c | |||
@@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |||
29 | #include <the_Foundation/buffer.h> | 29 | #include <the_Foundation/buffer.h> |
30 | #include <the_Foundation/thread.h> | 30 | #include <the_Foundation/thread.h> |
31 | #include <SDL_audio.h> | 31 | #include <SDL_audio.h> |
32 | #include <SDL_timer.h> | ||
32 | 33 | ||
33 | #if defined (LAGRANGE_ENABLE_MPG123) | 34 | #if defined (LAGRANGE_ENABLE_MPG123) |
34 | # include <mpg123.h> | 35 | # include <mpg123.h> |
@@ -443,6 +444,7 @@ struct Impl_Player { | |||
443 | float volume; | 444 | float volume; |
444 | int flags; | 445 | int flags; |
445 | iInputBuf * data; | 446 | iInputBuf * data; |
447 | uint32_t lastInteraction; | ||
446 | iDecoder * decoder; | 448 | iDecoder * decoder; |
447 | }; | 449 | }; |
448 | 450 | ||
@@ -695,12 +697,14 @@ iBool start_Player(iPlayer *d) { | |||
695 | d->decoder = new_Decoder(d->data, &content); | 697 | d->decoder = new_Decoder(d->data, &content); |
696 | d->decoder->gain = d->volume; | 698 | d->decoder->gain = d->volume; |
697 | SDL_PauseAudioDevice(d->device, SDL_FALSE); | 699 | SDL_PauseAudioDevice(d->device, SDL_FALSE); |
700 | setNotIdle_Player(d); | ||
698 | return iTrue; | 701 | return iTrue; |
699 | } | 702 | } |
700 | 703 | ||
701 | void setPaused_Player(iPlayer *d, iBool isPaused) { | 704 | void setPaused_Player(iPlayer *d, iBool isPaused) { |
702 | if (isStarted_Player(d)) { | 705 | if (isStarted_Player(d)) { |
703 | SDL_PauseAudioDevice(d->device, isPaused ? SDL_TRUE : SDL_FALSE); | 706 | SDL_PauseAudioDevice(d->device, isPaused ? SDL_TRUE : SDL_FALSE); |
707 | setNotIdle_Player(d); | ||
704 | } | 708 | } |
705 | } | 709 | } |
706 | 710 | ||
@@ -720,10 +724,16 @@ void setVolume_Player(iPlayer *d, float volume) { | |||
720 | if (d->decoder) { | 724 | if (d->decoder) { |
721 | d->decoder->gain = d->volume; | 725 | d->decoder->gain = d->volume; |
722 | } | 726 | } |
727 | setNotIdle_Player(d); | ||
723 | } | 728 | } |
724 | 729 | ||
725 | void setFlags_Player(iPlayer *d, int flags, iBool set) { | 730 | void setFlags_Player(iPlayer *d, int flags, iBool set) { |
726 | iChangeFlags(d->flags, flags, set); | 731 | iChangeFlags(d->flags, flags, set); |
732 | setNotIdle_Player(d); | ||
733 | } | ||
734 | |||
735 | void setNotIdle_Player(iPlayer *d) { | ||
736 | d->lastInteraction = SDL_GetTicks(); | ||
727 | } | 737 | } |
728 | 738 | ||
729 | int flags_Player(const iPlayer *d) { | 739 | int flags_Player(const iPlayer *d) { |
@@ -760,6 +770,10 @@ float streamProgress_Player(const iPlayer *d) { | |||
760 | return 0; | 770 | return 0; |
761 | } | 771 | } |
762 | 772 | ||
773 | uint32_t idleTimeMs_Player(const iPlayer *d) { | ||
774 | return SDL_GetTicks() - d->lastInteraction; | ||
775 | } | ||
776 | |||
763 | iString *metadataLabel_Player(const iPlayer *d) { | 777 | iString *metadataLabel_Player(const iPlayer *d) { |
764 | iString *meta = new_String(); | 778 | iString *meta = new_String(); |
765 | if (d->decoder) { | 779 | if (d->decoder) { |