mpg123 decoder: implement seeking

This commit is contained in:
Yuriy Kaminskiy 2011-01-21 16:25:52 +03:00 committed by Max Kellermann
parent 731ea9b489
commit 9ae3acf2e7
2 changed files with 16 additions and 2 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
ver 0.17 (2010/??/??)
* input:
- cdio_paranoia: new input plugin to play audio CDs
* decoder:
- mpg123: implement seeking
* output:
- osx: allow user to specify other audio devices

View File

@ -24,6 +24,7 @@
#include <glib.h>
#include <mpg123.h>
#include <stdio.h>
#undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "mpg123"
@ -125,7 +126,7 @@ mpd_mpg123_file_decode(struct decoder *decoder, const char *path_fs)
/* tell MPD core we're ready */
decoder_initialized(decoder, &audio_format, false,
decoder_initialized(decoder, &audio_format, true,
(float)num_samples /
(float)audio_format.sample_rate);
@ -172,7 +173,18 @@ mpd_mpg123_file_decode(struct decoder *decoder, const char *path_fs)
cmd = decoder_data(decoder, NULL, buffer, nbytes, info.bitrate);
/* seeking not yet implemented */
if (cmd == DECODE_COMMAND_SEEK) {
off_t c = decoder_seek_where(decoder)*audio_format.sample_rate;
c = mpg123_seek(handle, c, SEEK_SET);
if (c < 0)
decoder_seek_error(decoder);
else {
decoder_command_finished(decoder);
decoder_timestamp(decoder, c/(double)audio_format.sample_rate);
}
cmd = DECODE_COMMAND_NONE;
}
} while (cmd == DECODE_COMMAND_NONE);
/* cleanup */