[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/akode/lib
From:       Allan Sandfeld Jensen <kde () carewolf ! com>
Date:       2005-07-28 15:53:17
Message-ID: 1122565997.563191.2755.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 439657 by carewolf:

Play the first audio frame again.


 M  +19 -27    player.cpp  


--- trunk/kdesupport/akode/lib/player.cpp #439656:439657
@@ -50,7 +50,6 @@
 {
     private_data() : src(0)
                    , frame_decoder(0)
-                   , buffered_decoder(0)
                    , resampler(0)
                    , converter(0)
                    , volume_filter(0)
@@ -69,7 +68,7 @@
     File *src;
 
     Decoder *frame_decoder;
-    BufferedDecoder *buffered_decoder;
+    BufferedDecoder buffered_decoder;
     Resampler *resampler;
     Converter *converter;
     // Volatile because it can be created and destroyed during playback
@@ -100,10 +99,8 @@
     }
     // Called for detached players
     void cleanup() {
-        buffered_decoder->stop();
-        buffered_decoder->closeDecoder();
-        delete buffered_decoder;
-        buffered_decoder = 0;
+        buffered_decoder.stop();
+        buffered_decoder.closeDecoder();
 
         delete frame_decoder;
         delete src;
@@ -136,13 +133,13 @@
         if (d->pause) sem_wait(&d->pause_sem);
         if (d->halt) break;
 
-        no_error = d->buffered_decoder->readFrame(&frame);
+        no_error = d->buffered_decoder.readFrame(&frame);
 
         if (!no_error) {
-            if (d->buffered_decoder->eof())
+            if (d->buffered_decoder.eof())
                 goto eof;
             else
-            if (d->buffered_decoder->error())
+            if (d->buffered_decoder.error())
                 goto error;
             else
                 AKODE_DEBUG("Blip?");
@@ -179,7 +176,7 @@
 error:
     if (d->detached) d->cleanup();
     else {
-        d->buffered_decoder->stop();
+        d->buffered_decoder.stop();
         if (d->manager)
             d->manager->errorEvent();
     }
@@ -188,7 +185,7 @@
 eof:
     if (d->detached) d->cleanup();
     else {
-        d->buffered_decoder->stop();
+        d->buffered_decoder.stop();
         if (d->manager)
             d->manager->eofEvent();
     }
@@ -373,6 +370,11 @@
         d->converter = 0;
     }
 
+    // connect the streams to play
+    d->buffered_decoder.setBlockingRead(true);
+    d->buffered_decoder.openDecoder(d->frame_decoder);
+    d->buffered_decoder.buffer()->put(&first_frame);
+
     setState(Loaded);
 
     return true;
@@ -412,20 +414,14 @@
 
     d->frame_decoder->seek(0);
 
-    // connect the streams to play
-    d->buffered_decoder = new BufferedDecoder();
-    d->buffered_decoder->setBlockingRead(true);
-    d->buffered_decoder->openDecoder(d->frame_decoder);
+    // Start buffering
+    d->buffered_decoder.start();
 
-    d->buffered_decoder->start();
-
     if (pthread_create(&d->player_thread, 0, run_player, d) == 0) {
         d->running = true;
         setState(Playing);
     } else {
         d->running = false;
-        delete d->buffered_decoder;
-        d->buffered_decoder = 0;
         setState(Loaded);
     }
 }
@@ -466,16 +462,14 @@
 
     assert(state() == Playing);
 
-    d->buffered_decoder->stop();
+    d->buffered_decoder.stop();
 
     if (d->running) {
         pthread_join(d->player_thread, 0);
         d->running = false;
     }
 
-    d->buffered_decoder->closeDecoder();
-    delete d->buffered_decoder;
-    d->buffered_decoder = 0;
+    d->buffered_decoder.closeDecoder();
 
     setState(Loaded);
 }
@@ -494,9 +488,7 @@
         d->running = false;
     }
 
-    d->buffered_decoder->closeDecoder();
-    delete d->buffered_decoder;
-    d->buffered_decoder = 0;
+    d->buffered_decoder.closeDecoder();
 
     setState(Loaded);
 }
@@ -555,7 +547,7 @@
 }
 
 Decoder* Player::decoder() const {
-    return d->buffered_decoder;
+    return &d->buffered_decoder;
 }
 
 Resampler* Player::resampler() const {
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic