From a5556ac10a093a9f82d41dbbb481f630a46192db Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Wed, 16 Dec 2015 15:27:23 -0500 Subject: [PATCH] core/audio: Move audio_eos() out of the AudioDriver This change lets me remove the AudioDriver, too. Signed-off-by: Anna Schumaker --- core/audio.cpp | 70 +++++++++++++++----------------------------- gui/gst.cpp | 5 +--- include/core/audio.h | 34 ++------------------- tests/core/audio.cpp | 17 ++--------- 4 files changed, 29 insertions(+), 97 deletions(-) diff --git a/core/audio.cpp b/core/audio.cpp index 0a7aaff6..c5b1190c 100644 --- a/core/audio.cpp +++ b/core/audio.cpp @@ -16,8 +16,6 @@ static GstElement *audio_player = NULL; static struct audio_ops *audio_ops = NULL; static int audio_pause_count = -1; -static AudioDriver *cur_driver = NULL; - static void __audio_save() { @@ -56,46 +54,17 @@ static bool __audio_load(struct track *track, GstState state) return true; } -static GstState continue_playback() +static struct track *__audio_next(GstState state) { - if (audio_pause_count >= 0) { - audio_pause_after(audio_pause_count - 1); - if (audio_pause_count == -1) - return GST_STATE_PAUSED; - } - return GST_STATE_PLAYING; -} - - - -AudioDriver :: AudioDriver() -{ - cur_driver = this; -} - -AudioDriver :: ~AudioDriver() -{ - cur_driver = NULL; -} - -void AudioDriver :: eos() -{ - struct track *track; - - if (audio_track) { - track_played(audio_track); - queue_updated(collection_get_queue(), audio_track); - } - - track = tempq_next(); + struct track *track = tempq_next(); if (!track) track = queue_next(collection_get_queue()); - if (__audio_load(track, continue_playback())) + if (__audio_load(track, state)) history_add(track); + return track; } - void audio_init(int *argc, char ***argv, struct audio_ops *ops) { unsigned int track; @@ -115,7 +84,7 @@ void audio_init(int *argc, char ***argv, struct audio_ops *ops) void audio_deinit() { gst_element_set_state(audio_player, GST_STATE_NULL); - gst_object_unref(audio_player); + gst_object_unref(GST_ELEMENT(audio_player)); audio_player = NULL; audio_track = NULL; @@ -203,12 +172,7 @@ int64_t audio_duration() struct track *audio_next() { - struct track *track = tempq_next(); - if (!track) - track = queue_next(collection_get_queue()); - if (__audio_load(track, audio_cur_state())) - history_add(audio_track); - return track; + return __audio_next(audio_cur_state()); } struct track *audio_prev() @@ -218,6 +182,23 @@ struct track *audio_prev() return track; } +struct track *audio_eos() +{ + /* Mark current track as played */ + if (audio_track) { + track_played(audio_track); + queue_updated(collection_get_queue(), audio_track); + } + + /* Check pause count and pick the next track */ + if (audio_pause_count >= 0) { + audio_pause_after(audio_pause_count - 1); + if (audio_pause_count == -1) + return __audio_next(GST_STATE_PAUSED); + } + return __audio_next(GST_STATE_PLAYING); +} + void audio_pause_after(int n) { if (n != audio_pause_count) { @@ -226,11 +207,6 @@ void audio_pause_after(int n) } } -AudioDriver *audio :: get_driver() -{ - return cur_driver; -} - GstElement *audio_get_player() { return audio_player; diff --git a/gui/gst.cpp b/gui/gst.cpp index 1f546d03..33e5821d 100644 --- a/gui/gst.cpp +++ b/gui/gst.cpp @@ -80,8 +80,6 @@ static void on_config_pause(int n) } -class GSTDriver : public AudioDriver {} gst_driver; - struct audio_ops audio_ops = { on_load, on_config_pause, @@ -119,8 +117,7 @@ static gboolean on_gst_message(GstBus *bus, GstMessage *message, gpointer data) gst :: play(); break; case GST_MESSAGE_EOS: - gst_driver.eos(); - break; + audio_eos(); default: break; } diff --git a/include/core/audio.h b/include/core/audio.h index 28b9cf29..ce3cfe45 100644 --- a/include/core/audio.h +++ b/include/core/audio.h @@ -21,37 +21,6 @@ struct audio_ops { }; -/** - * The audio driver class gives us an interface for using multiple - * audio frameworks for audio playback. - */ -class AudioDriver { -public: - AudioDriver(); /**< Default AudioDriver constructor. */ - virtual ~AudioDriver(); /**< AudioDriver destructor. */ - - /** - * Called to handle reaching the end-of-stream. - */ - void eos(); -}; - - -/** - * Namespace for higher-level audio controls. - */ -namespace audio -{ - - /** - * Called to access an audio driver. - * - * @return The current driver used by the application. - */ - AudioDriver *get_driver(); -}; - - /* Called to initialize the audio manager. */ void audio_init(int *, char ***, struct audio_ops *); @@ -94,6 +63,9 @@ struct track *audio_next(); /* Called to load the previous track. */ struct track *audio_prev(); +/* Called when playback has reached the end-of-stream position. */ +struct track *audio_eos(); + /* Called to configure automatic pausing. */ void audio_pause_after(int); diff --git a/tests/core/audio.cpp b/tests/core/audio.cpp index 196b2511..2e15b97a 100644 --- a/tests/core/audio.cpp +++ b/tests/core/audio.cpp @@ -11,7 +11,6 @@ extern "C" { #include #include "test.h" -struct track *TRACK_NULL = NULL; static unsigned int load_count = 0; static int pause_count = 0; @@ -26,17 +25,6 @@ static bool test_audio_seek(gint64 pos) return ret; } -class TestDriver : public AudioDriver -{ -public: - bool playing; - std::string cur_file; - - TestDriver() : playing(false) {} - ~TestDriver() {}; - bool is_playing() { return playing; } -} driver; - static void test_audio_load(struct track *track, GstState state) { load_count++; @@ -196,7 +184,6 @@ static void test_prev() void test_autopause() { - TestDriver *driver = (TestDriver *)audio :: get_driver(); struct queue *history_q = history_get_queue(); int i; @@ -214,13 +201,13 @@ void test_autopause() test_equal(pause_count, 5); for (i = 4; i > -1; i--) { - driver->eos(); + audio_eos(); test_loop_equal(pause_count, i, i); test_loop_equal(audio_cur_state(), GST_STATE_PLAYING, i); test_loop_equal(queue_at(history_q, 0), audio_cur_track(), i); } test_loop_passed(); - driver->eos(); + audio_eos(); test_equal(pause_count, -1); test_not_equal(audio_cur_state(), GST_STATE_PLAYING); }