mirror of
https://github.com/gryf/gryf-overlay.git
synced 2026-03-13 14:35:49 +01:00
117 lines
3.2 KiB
Diff
117 lines
3.2 KiB
Diff
diff -ur moc-2.5.0-alpha4_orig/decoder_plugins/sidplay2/sidplay2.cc moc-2.5.0-alpha4/decoder_plugins/sidplay2/sidplay2.cc
|
|
--- moc-2.5.0-alpha4_orig/decoder_plugins/sidplay2/sidplay2.cc 2007-06-16 13:22:18.000000000 +0200
|
|
+++ moc-2.5.0-alpha4/decoder_plugins/sidplay2/sidplay2.cc 2010-09-28 19:25:18.000000000 +0200
|
|
@@ -34,6 +34,23 @@
|
|
|
|
static int playSubTunes;
|
|
|
|
+namespace
|
|
+{
|
|
+ int get_current_subtune_begin_time(sidplay2_data *data)
|
|
+ {
|
|
+ if(data->currentSong == data->timeStart)
|
|
+ return 0;
|
|
+
|
|
+ return data->subtune_end_times[data->currentSong-2];
|
|
+ }
|
|
+
|
|
+ int get_current_subtune_length(sidplay2_data *data)
|
|
+ {
|
|
+ return data->subtune_end_times[data->currentSong-1]
|
|
+ - get_current_subtune_begin_time(data);
|
|
+ }
|
|
+}
|
|
+
|
|
static sidplay2_data * make_data()
|
|
{
|
|
pthread_mutex_lock(&player_select_mutex);
|
|
@@ -240,7 +257,7 @@
|
|
|
|
s2d->songs = st->getInfo().songs;
|
|
|
|
- s2d->sublengths = new int [s2d->songs];
|
|
+ s2d->subtune_end_times = new int [s2d->songs];
|
|
|
|
s2d->startSong = st->getInfo().startSong;
|
|
|
|
@@ -276,12 +293,12 @@
|
|
dl = minLength;
|
|
|
|
s2d->length += dl;
|
|
- s2d->sublengths[s-1] = dl;
|
|
+ s2d->subtune_end_times[s-1] = s2d->length;
|
|
}
|
|
else
|
|
{
|
|
s2d->length += defaultLength;
|
|
- s2d->sublengths[s-1] = defaultLength;
|
|
+ s2d->subtune_end_times[s-1] = s2d->length;
|
|
}
|
|
}
|
|
|
|
@@ -324,8 +341,8 @@
|
|
if(data->tune!=NULL)
|
|
delete data->tune;
|
|
|
|
- if(data->sublengths!=NULL)
|
|
- delete data->sublengths;
|
|
+ if(data->subtune_end_times!=NULL)
|
|
+ delete data->subtune_end_times;
|
|
|
|
free(data);
|
|
}
|
|
@@ -435,9 +452,20 @@
|
|
* generic seeking can't be done because the tune has to
|
|
* be played until the position (needs CPU)...
|
|
* */
|
|
-extern "C" int sidplay2_seek (void *void_data ATTR_UNUSED, int sec ATTR_UNUSED)
|
|
+extern "C" int sidplay2_seek (void *void_data, int sec)
|
|
{
|
|
- return -1;
|
|
+ struct sidplay2_data *data = (struct sidplay2_data *)void_data;
|
|
+
|
|
+ if (data->currentSong >= data->timeEnd)
|
|
+ {
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ data->player->stop();
|
|
+ data->currentSong++;
|
|
+ data->tune->selectSong(data->currentSong);
|
|
+ data->player->load(data->tune);
|
|
+ return get_current_subtune_begin_time(data);
|
|
}
|
|
|
|
extern "C" int sidplay2_decode (void *void_data, char *buf, int buf_len,
|
|
@@ -447,7 +475,7 @@
|
|
|
|
int seconds = data->player->time() / data->player->timebase();
|
|
|
|
- int currentLength = data->sublengths[data->currentSong-1];
|
|
+ int currentLength = get_current_subtune_length(data);
|
|
|
|
if(seconds >= currentLength)
|
|
{
|
|
@@ -458,9 +486,6 @@
|
|
data->currentSong++;
|
|
data->tune->selectSong(data->currentSong);
|
|
data->player->load(data->tune);
|
|
-
|
|
- currentLength = data->sublengths[data->currentSong-1];
|
|
- seconds = 0;
|
|
}
|
|
|
|
sound_params->channels = data->channels;
|
|
diff -ur moc-2.5.0-alpha4_orig/decoder_plugins/sidplay2/sidplay2.h moc-2.5.0-alpha4/decoder_plugins/sidplay2/sidplay2.h
|
|
--- moc-2.5.0-alpha4_orig/decoder_plugins/sidplay2/sidplay2.h 2007-04-02 22:00:32.000000000 +0200
|
|
+++ moc-2.5.0-alpha4/decoder_plugins/sidplay2/sidplay2.h 2010-09-28 19:25:18.000000000 +0200
|
|
@@ -67,7 +67,7 @@
|
|
sid2_config_t cfg;
|
|
ReSIDBuilder *builder;
|
|
int length;
|
|
- int *sublengths;
|
|
+ int *subtune_end_times;
|
|
int songs;
|
|
int startSong;
|
|
int currentSong;
|