mpegaudioparse seek / forwarding stream
Hi I have pipeline in constructor for MP3 playback. The forwarding with query/seek does not work. My pipeline is
pipelinePlay = gst_pipeline_new ("pipeline");
source = gst_element_factory_make ("filesrc", "source");
parse = gst_element_factory_make("mpegaudioparse","parser");
decode = gst_element_factory_make("mpg123audiodec","audiomp3decoder");
convert = gst_element_factory_make("audioconvert","converter");
resample = gst_element_factory_make("audioresample","resampler");
volume = gst_element_factory_make("volume",NULL);
equalizer = gst_element_factory_make("equalizer-3bands", "equalizer");
sink = gst_element_factory_make("alsasink", "sink");
if (!pipelinePlay || !source || !parse || !decode || !volume || !equalizer || !sink)
{
g_printerr ("Failed to create audio send elements");
}
g_object_set(volume,"volume",0.0, NULL); //nastavimo začetno glasnost
gst_bin_add_many(GST_BIN(pipelinePlay),source,parse,decode,volume,equalizer,sink, NULL);
if(!(gst_element_link_many(source,parse,decode,volume,equalizer,sink, NULL)))
{
g_printerr ("Audio send elements could not be linked.\n");
gst_object_unref (pipelinePlay);
}
busPipelinePlay = gst_pipeline_get_bus(GST_PIPELINE(pipelinePlay));
gst_bus_add_signal_watch (busPipelinePlay);
g_signal_connect (busPipelinePlay, "message::eos", G_CALLBACK (&playerForm::message_eos), NULL);
Then I call method:
void playerForm::on_forwardButton_clicked()
{
query=gst_query_new_segment (GST_FORMAT_DEFAULT);
if (gst_element_query (pipelinePlay, query))
{
gst_query_parse_segment(query,¤tRate,NULL,NULL,NULL);
}
GstState cur_state;
gst_element_get_state(sink,&cur_state,NULL,0);
if(cur_state == GST_STATE_PLAYING)
{
if(currentRate==1.0)
{
speed=2.0;
ui->labelPicForSpeed->setStyleSheet("QLabel:enabled {background-image: url(../MP3player/pics/forward2x.png); background-repeat: no-repeat;}");
}
else if (currentRate==2.0)
{
speed=4.0;
ui->labelPicForSpeed->setStyleSheet("QLabel:enabled {background-image: url(../MP3player/pics/forward4x.png); background-repeat: no-repeat;}");
}
else if (currentRate==4.0)
{
speed=8.0;
ui->labelPicForSpeed->setStyleSheet("QLabel:enabled {background-image: url(../MP3player/pics/forward8x.png); background-repeat: no-repeat;}");
}
else if (currentRate==8.0)
{
speed=16.0;
ui->labelPicForSpeed->setStyleSheet("QLabel:enabled {background-image: url(../MP3player/pics/forward16x.png); background-repeat: no-repeat;}");
}
else if(currentRate==16.0)
{
speed=1.0;
ui->labelPicForSpeed->setStyleSheet("QLabel:enabled {background-image: url(../MP3player/pics/play.png); background-repeat: no-repeat;}");
}
}
if(currentRate>0) //če smo v rewind načinu so vrednosti speed vmanjši od 1 (torej vrtimo nazaj) in če kliknemo forward so parametri vrstice seek_event drugačni kot enake vrstice v rewind načinu! Zato najprej preverimo, če res vrtimo res naprej!
{
gst_element_query_position(pipelinePlay, GST_FORMAT_TIME, &position);
seek_event=gst_event_new_seek (speed, GST_FORMAT_TIME, (GstSeekFlags) (GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_ACCURATE), GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_END, 0);
gst_element_send_event (sink, seek_event);
}
}
Now, the same code is working for forwardnig mp4 video stream! What am I missing? kind regards Thomas