Seek With Alaw pipeline

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

Seek With Alaw pipeline

Jesu Anuroop Suresh
Hi,

Does any one tried the seek on alaw pipeline.

I could able to record and playback the alaw file but seek forward and backward on the

pipeline is failing.

Thanks & Regards
Jesu Anuroop Suresh


Below is the code for seek which works perfectly fine for the mp3 playback 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 media is not playing */
    if (recordEng.recStatus != REC_PAUSE)
          return;

    gst_element_query_duration (recordEng.recPipeline, &fmt, &len);
    gst_element_query_position (recordEng.recPipeline, &fmt, &pos);

    if (ff == 0)
    {
          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 (recordEng.recStatus == REC_PLAYING)
       gst_element_set_state(GST_ELEMENT(recordEng.recPipeline),
                 GST_STATE_PAUSED);

    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");
            }
    }

    if (recordEng.recStatus == REC_PLAYING)
            gst_element_set_state(GST_ELEMENT(recordEng.recPipeline),
            GST_STATE_PLAYING);
}