1
0
mirror of https://github.com/gryf/gryf-overlay.git synced 2026-03-13 14:35:49 +01:00
Files
gryf-overlay/media-sound/moc/files/moc-2.5.0-alpha4_sid_seek.diff
root b257fe1d20 Added new ebuild for Gnome Commander
Added ebuild for moc with patch for sidplay song change
2010-09-28 21:03:15 +02:00

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;