[SCM] libgroove/upstream: player: fix timing issue with dummy player
andrewrk-guest at users.alioth.debian.org
andrewrk-guest at users.alioth.debian.org
Wed May 14 02:26:58 UTC 2014
The following commit has been merged in the upstream branch:
commit 7a2fc78d82782d7ab54db2a53a0c34687767cf8d
Author: Andrew Kelley <superjoe30 at gmail.com>
Date: Tue May 13 12:36:24 2014 -0700
player: fix timing issue with dummy player
diff --git a/grooveplayer/player.c b/grooveplayer/player.c
index 85b7e16..d0d4576 100644
--- a/grooveplayer/player.c
+++ b/grooveplayer/player.c
@@ -40,6 +40,7 @@ struct GroovePlayerPrivate {
int abort_request;
double start_nanos;
pthread_cond_t pause_cond;
+ pthread_condattr_t cond_attr;
int pause_cond_inited;
int paused;
};
@@ -141,21 +142,23 @@ static void *dummy_thread(void *arg) {
double dbl_sample_rate = p->audio_buf->format.sample_rate;
double nanos_per_frame = 1000000000.0 / dbl_sample_rate;
int frames_to_kill = nanos_to_kill / nanos_per_frame;
- if (frames_to_kill > p->audio_buf->frame_count) {
+ int new_index = p->audio_buf_index + frames_to_kill;
+ if (new_index > p->audio_buf->frame_count) {
more = 1;
- frames_to_kill = p->audio_buf->frame_count;
+ new_index = p->audio_buf->frame_count;
+ frames_to_kill = new_index - p->audio_buf_index;
}
double nanos_killed = frames_to_kill * nanos_per_frame;
p->start_nanos += nanos_killed;
- p->audio_buf_index += frames_to_kill;
+ p->audio_buf_index = new_index;
p->play_pos += frames_to_kill / dbl_sample_rate;
}
}
// sleep for a little while
struct timespec tms;
- clock_gettime(CLOCK_REALTIME, &tms);
- tms.tv_nsec += 100000000;
+ clock_gettime(CLOCK_MONOTONIC, &tms);
+ tms.tv_nsec += 10000000;
pthread_cond_timedwait(&p->pause_cond, &p->play_head_mutex, &tms);
pthread_mutex_unlock(&p->play_head_mutex);
}
@@ -316,7 +319,9 @@ struct GroovePlayer *groove_player_create(void) {
}
p->play_head_mutex_inited = 1;
- if (pthread_cond_init(&p->pause_cond, NULL) != 0) {
+ pthread_condattr_init(&p->cond_attr);
+ pthread_condattr_setclock(&p->cond_attr, CLOCK_MONOTONIC);
+ if (pthread_cond_init(&p->pause_cond, &p->cond_attr) != 0) {
groove_player_destroy(player);
av_log(NULL, AV_LOG_ERROR, "unable to create mutex condition\n");
return NULL;
--
libgroove packaging
More information about the pkg-multimedia-commits
mailing list