Audio playback resumes in the wrong place after pause

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Audio playback resumes in the wrong place after pause

Thomas Okken
I'm having a problem with audio playback using GStreamer: I can create
and run the pipeline, and the audio plays just fine, but when I pause
and then unpause the pipeline, playback does not resume where it was
interrupted, but somewhere (much) farther along.
This program demonstrates the problem:

#include <stdio.h>
#include <unistd.h>

#include <gst/gst.h>

int main(int argc, char *argv[]) {
     int t1 = 0, t2 = 0;
     GError *error = NULL;
     GstElement *pipeline;

     if (argc >= 2)
         sscanf(argv[1], "%d", &t1);
     if (argc >= 3)
         sscanf(argv[2], "%d", &t2);

     gst_init(NULL, NULL);
     pipeline = gst_parse_launch("filesrc location=zero_to_twenty.au !
auparse ! autoaudiosink", &error);
     if (pipeline == NULL) {
         g_printerr("Build pipeline error: %s\n", error->message);
         return 1;
     }
     gst_element_set_state(pipeline, GST_STATE_PLAYING);
     if (t1 > 0) {
         sleep(t1);
         gst_element_set_state(pipeline, GST_STATE_PAUSED);
         if (t2 > 0) {
             sleep(t2);
             gst_element_set_state(pipeline, GST_STATE_PLAYING);
         }
     }
     sleep(22 - t1 - t2);
     return 0;
}

The audio file I use for testing is
http://service.research.att.com/tokken/zero_to_twenty.au
I run the program like

./pausetest 4 2

which will start playback, wait 4 seconds, pause, wait 2 second,
unpause, then let playback run to the end.
When I do this on my PC, playback resumes a little over four seconds
after the place where it was paused; it should resume just before the
fourth beep, but instead it resumes just after the eighth. Different
timings for the pause/unpause calls cause somewhat different results;
even the starting point is somewhat erratic.

Is there a way to pause and resume a pipeline without losing data like
this? It seems strange that I can't control playback with any accuracy.
Am I doing something wrong or is my platform buggy?
I'm doing this on a Dell Optiplex 960 running a fully updated Ubuntu
10.04.1 LTS; the gstreamer packages on my system are

gstreamer0.10-alsa 0.10.28-1
gstreamer0.10-gnonlin 0.10.15-1
gstreamer0.10-nice 0.0.10-2build1
gstreamer0.10-plugins-base 0.10.28-1
gstreamer0.10-plugins-base-apps 0.10.28-1
gstreamer0.10-plugins-good 0.10.21-1ubuntu3
gstreamer0.10-pulseaudio 0.10.21-1ubuntu3
gstreamer0.10-tools 0.10.28-1
gstreamer0.10-x 0.10.28-1

  - Thomas

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel