gst_element_seek fails with alawdec

Jesu Anuroop Suresh jesuas at gmail.com
Thu Sep 22 23:30:05 PDT 2011


Hi 

Below is the pipeline

gst-launch -v filesrc location=give_me_jesus.alaw  !  audio/x-alaw,
rate=44100, channels=2 ! alawdec ! alsasink

It fails for gst_element_seek
Below is the code for the seek 

ff - 1 for forward, 0 for backward
time_seconds = number of seconds to seek

This same code is working with the mp3 pipeline

static void seekMediaTime (int ff, int time_seconds)
{
    gint64 start_pos, stop_pos, rate;
    gint64 start_flag, stop_flag;
    gint64 pos, len, tmp = 0;
    gint64 timeFf = FF_SPEED_BASE;
    GstFormat fmt = GST_FORMAT_TIME;

    if (!gst_element_query_duration (recordEng.recPipeline, &fmt, &len) ||
        !gst_element_query_position (recordEng.recPipeline, &fmt, &pos))
    {
          printf ("%s: %d Query Failed\r\n",__func__,__LINE__);
          return;
    }

    if (ff == 1)
    {
          timeFf = ((gint64)FF_SPEED_BASE * time_seconds);

          if ((len <= (pos + timeFf)) || (len == pos))
                timeFf = 0;
          else
                tmp = pos + timeFf;
          printf ("FORWARDWORD BY:%llu\r\n",timeFf);
    }
    else
    {
          timeFf = ((gint64)FF_SPEED_BASE * time_seconds);

          if ((pos <= timeFf) || (len == pos))
                timeFf = 0;
          else
                tmp = (pos - timeFf);
          printf ("BACKWORD BY:%llu\r\n",timeFf);
    }
    g_print ("Current Pos Time: %llu %llu\r\n",pos,len);
    g_print ("Set Pos Time: %llu\r\n",tmp);
    timeFf = tmp;
    rate = 1.0;
    start_pos = timeFf;
    start_flag = GST_SEEK_TYPE_SET;
    stop_flag = GST_SEEK_TYPE_NONE;
    stop_pos = GST_CLOCK_TIME_NONE;

    if (!gst_element_seek (recordEng.recPipeline, rate,
           GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
           start_flag, start_pos,
           stop_flag, stop_pos))
    {
            g_print ("Seek failed!\r\n");
    }
    else
    {
            g_print ("Time: %" GST_TIME_FORMAT " / %"
               GST_TIME_FORMAT "\r\n",
               GST_TIME_ARGS (pos), GST_TIME_ARGS (len));

            /* We will wait til it is running or failed */
            if (gst_element_get_state (recordEng.recPipeline,
                 NULL, NULL, -1) == GST_STATE_CHANGE_FAILURE)
            {
                  g_print ("Failed to go into PLAYING state\r\n");
            }
    }
}


Regards
Jesu Anuroop Suresh





--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/gst-element-seek-fails-with-alawdec-tp3835910p3835910.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list