rpms/audacious-plugin-fc/F-13 audacious-plugin-fc-0.5.1-pause.patch, NONE, 1.1 audacious-plugin-fc.spec, 1.21, 1.22

Michael Schwendt mschwendt at fedoraproject.org
Fri Jul 23 10:11:05 UTC 2010


Author: mschwendt

Update of /cvs/pkgs/rpms/audacious-plugin-fc/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv23486/F-13

Modified Files:
	audacious-plugin-fc.spec 
Added Files:
	audacious-plugin-fc-0.5.1-pause.patch 
Log Message:
* Fri Jul 23 2010 Michael Schwendt <mschwendt at fedoraproject.org> - 0.5.1-1.pl2
- Fix next/prev track for paused playback.


audacious-plugin-fc-0.5.1-pause.patch:
 main.c |   71 +++++++++++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 52 insertions(+), 19 deletions(-)

--- NEW FILE audacious-plugin-fc-0.5.1-pause.patch ---
diff -Nur audacious-plugin-fc-0.5.1-orig/src/main.c audacious-plugin-fc-0.5.1/src/main.c
--- audacious-plugin-fc-0.5.1-orig/src/main.c	2010-07-10 12:46:00.000000000 +0200
+++ audacious-plugin-fc-0.5.1/src/main.c	2010-07-23 12:03:05.000000000 +0200
@@ -35,6 +35,7 @@
 static GMutex *seek_mutex;
 static GCond *seek_cond;
 static gint jumpToTime = -1;
+static gboolean pause_flag;
 
 void ip_init(void) {
     jumpToTime = -1;
@@ -74,6 +75,7 @@
     gboolean audioDriverOK = FALSE;
     gboolean haveSampleBuf = FALSE;
     struct audioFormat myFormat;
+    gshort paused = 0;
 
     playback->playing = FALSE;
     jumpToTime = -1;
@@ -173,26 +175,16 @@
         aud_tuple_associate_string(t, FIELD_QUALITY, NULL, "sequenced");
         playback->set_tuple( playback, t );
 
+        g_mutex_lock(seek_mutex);
         /* bitrate => 4*1000 will be displayed as "4 CHANNELS" */
         playback->set_params( playback, NULL, 0, 1000*4, myFormat.freq, myFormat.channels );
-        
+        pause_flag = FALSE;
         playback->playing = TRUE;
+        playback->eof = FALSE;
         playback->set_pb_ready(playback);
+        g_mutex_unlock(seek_mutex);
 
         while ( playback->playing ) {
-            fc14dec_buffer_fill(decoder,sampleBuf,sampleBufSize);
-            if ( playback->playing && jumpToTime<0 ) {
-#if __AUDACIOUS_PLUGIN_API__ >= 13
-                playback->output->write_audio(sampleBuf,sampleBufSize);
-#else
-                playback->pass_audio(playback,myFormat.xmmsAFormat,myFormat.channels,sampleBufSize,sampleBuf,NULL);
-#endif
-            }
-            if ( fc14dec_song_end(decoder) && jumpToTime<0 ) {
-                playback->eof = TRUE;
-                playback->playing = FALSE;
-            }
-
             g_mutex_lock(seek_mutex);
             if ( jumpToTime != -1 ) {
                 fc14dec_seek(decoder,jumpToTime);
@@ -200,11 +192,38 @@
                 jumpToTime = -1;
                 g_cond_signal(seek_cond);
             }
+            if (pause_flag != paused) {
+                playback->output->pause(pause_flag);
+                paused = pause_flag;
+                g_cond_signal(seek_cond);
+            }
+            if (paused) {
+                g_cond_wait(seek_cond, seek_mutex);
+                g_mutex_unlock(seek_mutex);
+                continue;
+            }
             g_mutex_unlock(seek_mutex);
+
+            fc14dec_buffer_fill(decoder,sampleBuf,sampleBufSize);
+            if ( playback->playing && jumpToTime<0 ) {
+                playback->pass_audio(playback,myFormat.xmmsAFormat,myFormat.channels,sampleBufSize,sampleBuf,NULL);
+            }
+            if ( fc14dec_song_end(decoder) && jumpToTime<0 ) {
+                playback->eof = TRUE;
+                playback->playing = FALSE;
+            }
         }
-        playback->playing = FALSE;
-        playback->output->close_audio();
     }
+    g_mutex_lock(seek_mutex);
+
+    while (playback->playing && playback->output->buffer_playing())
+        g_usleep(20000);
+
+    playback->playing = FALSE;
+    g_cond_signal(seek_cond);  /* wake up any waiting request */
+    g_mutex_unlock(seek_mutex);
+
+    playback->output->close_audio();
 
  PLAY_FAILURE_2:
     g_free(sampleBuf);
@@ -213,17 +232,31 @@
 }
     
 void ip_stop(InputPlayback *playback) {
+    g_mutex_lock(seek_mutex);
     playback->playing = FALSE;
+    g_cond_signal(seek_cond);
+    g_mutex_unlock(seek_mutex);
+    g_thread_join(playback->thread);
+    playback->thread = NULL;
 }
 
 void ip_pause(InputPlayback *playback, gshort p) {
-    playback->output->pause(p);
+    g_mutex_lock(seek_mutex);
+    if (playback->playing) {
+        pause_flag = p;
+        g_cond_signal(seek_cond);
+        g_cond_wait(seek_cond, seek_mutex);
+    }
+    g_mutex_unlock(seek_mutex);
 }
 
 void ip_mseek(InputPlayback *playback, gulong msec) {
     g_mutex_lock(seek_mutex);
-    jumpToTime = msec;
-    g_cond_wait(seek_cond, seek_mutex);
+    if (playback->playing) {
+        jumpToTime = msec;
+        g_cond_signal(seek_cond);
+        g_cond_wait(seek_cond, seek_mutex);
+    }
     g_mutex_unlock(seek_mutex);
 }
 


Index: audacious-plugin-fc.spec
===================================================================
RCS file: /cvs/pkgs/rpms/audacious-plugin-fc/F-13/audacious-plugin-fc.spec,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -p -r1.21 -r1.22
--- audacious-plugin-fc.spec	11 Jul 2010 09:42:41 -0000	1.21
+++ audacious-plugin-fc.spec	23 Jul 2010 10:11:05 -0000	1.22
@@ -7,10 +7,11 @@
 Summary: Future Composer input plugin for Audacious
 Name: audacious-plugin-fc
 Version: 0.5.1
-Release: 1%{?dist}
+Release: 1%{?dist}.pl2
 URL: http://xmms-fc.sourceforge.net/
 License: GPLv2+
 Source:	http://downloads.sourceforge.net/xmms-fc/audacious-plugin-fc-%{version}.tar.bz2
+Patch0: audacious-plugin-fc-0.5.1-pause.patch
 Group: Applications/Multimedia
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires: audacious-devel >= %{aud_ver}
@@ -28,6 +29,7 @@ music files from AMIGA. Song-length dete
 
 %prep
 %setup -q
+%patch0 -p1 -b .pause
 
 
 %build
@@ -52,6 +54,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Fri Jul 23 2010 Michael Schwendt <mschwendt at fedoraproject.org> - 0.5.1-1.pl2
+- Fix next/prev track for paused playback.
+
 * Sun Jul 11 2010 Michael Schwendt <mschwendt at fedoraproject.org> - 0.5.1-1
 - Update to 0.5.1 (should fix big-endian platforms).
 



More information about the scm-commits mailing list