Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37726575
en ru br
Репозитории ALT
S:4.3.1-alt1
5.1: 2.2-alt0.M50P.1
4.1: 1.4.5-alt2
4.0: 1.3.5-alt3
www.altlinux.org/Changes

Другие репозитории
Upstream:1.5.0

Группа :: Звук
Пакет: audacious-plugins

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: audacious-plugins-2.0.1-vorbis-hg-tip.patch
Скачать


diff -urN audacious-plugins-2.0.1/src/vorbis/vorbis.c audacious-plugins-2.0.1~/src/vorbis/vorbis.c
--- audacious-plugins-2.0.1/src/vorbis/vorbis.c	2009-05-13 21:42:00.000000000 -0500
+++ audacious-plugins-2.0.1~/src/vorbis/vorbis.c	2009-06-04 19:29:59.000000000 -0500
@@ -119,7 +119,7 @@
 static OggVorbis_File vf;
 
 static GThread *thread;
-static volatile int seekneeded = -1;
+static volatile int seekneeded;
 static volatile char pause_flag;
 static int samplerate, channels;
 GMutex *vf_mutex;
@@ -291,8 +291,8 @@
      * alert us what section we're currently decoding in case we
      * need to change playback settings at a section boundary
      */
- 
-   
+
+
     g_mutex_lock(vf_mutex);
     if (ov_open_callbacks(datasource, &vf, NULL, 0, aud_vfs_is_streaming(fd->fd) ? vorbis_callbacks_stream : vorbis_callbacks) < 0) {
         vorbis_callbacks.close_func(datasource);
@@ -316,7 +316,7 @@
     title = vorbis_generate_title(&vf, filename);
     vorbis_update_replaygain(&rg_info);
     playback->set_replaygain_info(playback, &rg_info);
-    
+
     vi = ov_info(&vf, -1);
 
     samplerate = vi->rate;
@@ -331,8 +331,6 @@
         goto play_cleanup;
     }
 
-    seekneeded = -1;
-
     /*
      * Note that chaining changes things here; A vorbis file may
      * be a mix of different channels, bitrates and sample rates.
@@ -341,9 +339,9 @@
      */
 
     while (playback->playing) {
-       
+
         if (playback->eof) {
-            g_usleep(20000);
+            g_usleep(1000);
             continue;
         }
 
@@ -352,13 +350,13 @@
         if (pause_flag)
             do_pause (playback);
 
-        
+
         int current_section = last_section;
 
         g_mutex_lock(vf_mutex);
-        
+
         bytes = ov_read_float(&vf, &pcm, PCM_FRAMES, &current_section);
-        
+
         if (bytes > 0)
             bytes = vorbis_interleave_buffer(pcm, bytes, channels, pcmout);
 
@@ -393,7 +391,8 @@
             if (vi->rate != samplerate || vi->channels != channels) {
                 samplerate = vi->rate;
                 channels = vi->channels;
-                while(playback->output->buffer_playing()) g_usleep(50000);
+                while (playback->output->buffer_playing())
+                    g_usleep(1000);
                 playback->output->close_audio();
                 if (!playback->output->
                         open_audio(FMT_FLOAT, vi->rate, vi->channels)) {
@@ -412,14 +411,8 @@
 
         playback->pass_audio(playback, FMT_FLOAT, channels, bytes, pcmout, &playback->playing);
 
-        if (!playback->playing)
-            goto stop_processing;
-
-        if (seekneeded != -1)
-            do_seek(playback);
-
         stop_processing:
-   
+
         if (current_section <= last_section) {
             /*
             * set total play time, bitrate, rate, and channels of
@@ -435,33 +428,19 @@
                 time = ov_time_total(&vf, -1) * 1000;
 
             g_mutex_unlock(vf_mutex);
-        
+
             playback->set_params(playback, title, time, br, samplerate, channels);
 
             timercount = playback->output->output_time();
 
             last_section = current_section;
-         
+
         }
     } /* main loop */
 
-    if (!playback->error) {
-        /*this loop makes it not skip the last ~4 seconds, but the playback 
-         * timer isn't updated in this period, so it still needs a bit of work 
-         *
-         * majeru
-         */
-        if(playback->eof) /* do it only on EOF --asphyx */
-            while(playback->output->buffer_playing()) {
-                AUDDBG("waiting for empty output buffer\n");
-                g_usleep(50000);
-            }
-
-        playback->output->close_audio();
-    }
+  play_cleanup:
+    playback->output->close_audio();
 
-
-    play_cleanup:
     g_free(title);
 
     /*
@@ -481,6 +460,8 @@
     playback->playing = 1;
     playback->eof = 0;
     playback->error = FALSE;
+    seekneeded = -1;
+    pause_flag = 0;
 
     thread = g_thread_self();
     playback->set_pb_ready(playback);
@@ -527,14 +508,14 @@
     rg_gain = vorbis_comment_query(comment, "replaygain_album_gain", 0);
     if (!rg_gain) rg_gain = vorbis_comment_query(comment, "rg_audiophile", 0);    /* Old */
     rg_info->album_gain = rg_gain != NULL ? atof(rg_gain) : 0.0;
-    
+
     rg_gain = vorbis_comment_query(comment, "replaygain_track_gain", 0);
     if (!rg_gain) rg_gain = vorbis_comment_query(comment, "rg_radio", 0);    /* Old */
     rg_info->track_gain = rg_gain != NULL ? atof(rg_gain) : 0.0;
-    
+
     rg_peak = vorbis_comment_query(comment, "replaygain_album_peak", 0);
     rg_info->album_peak = rg_peak != NULL ? atof(rg_peak) : 0.0;
-    
+
     rg_peak = vorbis_comment_query(comment, "replaygain_track_peak", 0);
     if (!rg_peak) rg_peak = vorbis_comment_query(comment, "rg_peak", 0);  /* Old */
     rg_info->track_peak = rg_peak != NULL ? atof(rg_peak) : 0.0;
@@ -608,7 +589,7 @@
     }
     else
         aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, "Ogg Vorbis");
-    
+
     aud_tuple_associate_string(tuple, FIELD_MIMETYPE, NULL, "application/ogg");
 
     return tuple;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin