summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-06-23 22:38:26 +0200
committerGravatar waker <wakeroid@gmail.com>2011-06-23 22:38:26 +0200
commitecfa3fc90b5ed396e19b0f671bd35c2abb5a1b63 (patch)
tree9193ffd37016dcd88e80ea9236fd9eba3710682c
parentbc4db3ee279c6ddb2d82323200b057a1e6fd3d7e (diff)
parent9245c4001ff209a4eab990ac2f590972656fddf9 (diff)
Merge branch 'master' into devel
-rw-r--r--plugins/alsa/alsa.c5
-rw-r--r--plugins/artwork/artwork.c3
-rw-r--r--plugins/converter/converter.c33
-rw-r--r--streamer.c10
4 files changed, 45 insertions, 6 deletions
diff --git a/plugins/alsa/alsa.c b/plugins/alsa/alsa.c
index 1cc0229a..fd71c89a 100644
--- a/plugins/alsa/alsa.c
+++ b/plugins/alsa/alsa.c
@@ -670,7 +670,10 @@ palsa_thread (void *context) {
frames_to_deliver = snd_pcm_avail_update (audio);
}
UNLOCK;
- usleep ((period_size-frames_to_deliver) * 1000000 / plugin.fmt.samplerate / plugin.fmt.channels);
+ int sleeptime = period_size-frames_to_deliver;
+ if (sleeptime > 0 && plugin.fmt.samplerate > 0 && plugin.fmt.channels > 0) {
+ usleep (sleeptime * 1000000 / plugin.fmt.samplerate / plugin.fmt.channels);
+ }
}
}
diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c
index 1726a98c..e395756d 100644
--- a/plugins/artwork/artwork.c
+++ b/plugins/artwork/artwork.c
@@ -192,8 +192,7 @@ check_dir (const char *dir, mode_t mode)
}
if (slash)
*slash = '/';
- }
- while (slash);
+ } while (slash);
free (tmp);
return 1;
}
diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c
index 04a97777..39604785 100644
--- a/plugins/converter/converter.c
+++ b/plugins/converter/converter.c
@@ -693,6 +693,34 @@ get_output_path (DB_playItem_t *it, const char *outfolder, const char *outfile,
trace ("converter output file is '%s'\n", out);
}
+static int
+check_dir (const char *dir, mode_t mode)
+{
+ char *tmp = strdup (dir);
+ char *slash = tmp;
+ struct stat stat_buf;
+ do
+ {
+ slash = strstr (slash+1, "/");
+ if (slash)
+ *slash = 0;
+ if (-1 == stat (tmp, &stat_buf))
+ {
+ trace ("creating dir %s\n", tmp);
+ if (0 != mkdir (tmp, mode))
+ {
+ trace ("Failed to create %s (%d)\n", tmp, errno);
+ free (tmp);
+ return 0;
+ }
+ }
+ if (slash)
+ *slash = '/';
+ } while (slash);
+ free (tmp);
+ return 1;
+}
+
int
convert (DB_playItem_t *it, const char *outfolder, const char *outfile, int output_bps, int output_is_float, int preserve_folder_structure, const char *root_folder, ddb_encoder_preset_t *encoder_preset, ddb_dsp_preset_t *dsp_preset, int *abort) {
if (deadbeef->pl_get_item_duration (it) <= 0) {
@@ -703,6 +731,11 @@ convert (DB_playItem_t *it, const char *outfolder, const char *outfile, int outp
return -1;
}
+ if (!check_dir (outfolder, 0755)) {
+ fprintf (stderr, "converter: failed to create output folder: %s\n", outfolder);
+ return -1;
+ }
+
int err = -1;
FILE *enc_pipe = NULL;
FILE *temp_file = NULL;
diff --git a/streamer.c b/streamer.c
index 74398e34..8496b092 100644
--- a/streamer.c
+++ b/streamer.c
@@ -386,7 +386,7 @@ streamer_move_to_nextsong (int reason) {
}
if (pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS || pl_order == PLAYBACK_ORDER_SHUFFLE_ALBUMS) { // shuffle
- if (!curr) {
+ if (!curr || pl_order == PLAYBACK_ORDER_SHUFFLE_TRACKS) {
// find minimal notplayed
playItem_t *pmin = NULL; // notplayed minimum
for (playItem_t *i = plt->head[PL_MAIN]; i; i = i->next[PL_MAIN]) {
@@ -405,7 +405,12 @@ streamer_move_to_nextsong (int reason) {
}
}
if (!it) {
+ streamer_buffering = 0;
+ send_trackinfochanged (streaming_track);
+ playItem_t *temp;
+ plt_reshuffle (streamer_playlist, &temp, NULL);
pl_unlock ();
+ streamer_set_nextsong (-2, -2);
return -1;
}
int r = str_get_idx_of (it);
@@ -2016,9 +2021,8 @@ streamer_play_current_track (void) {
return;
}
else {
- // restart currently playing track
output->stop ();
- streamer_set_nextsong (0, 1);
+ streamer_move_to_nextsong (1);
}
if (plt) {
plt_unref (plt);