Framestepping in Theora videos

Kevin Flückiger renderflash at gmail.com
Thu Aug 11 01:14:48 PDT 2011


Hi folks,

I'm using GStreamer 0.10.32 (OssBuild 0.10.7 Beta 4 for Windows) and I
see some weird behaviour when seeking/framestepping in theora videos.
Firs of all, this is my very simple pipeline: uridecodebin -> appsink
. I tried with a pipeline connected manualy
(filesrc->oggdemux->theoradec->appsink) giving me the same results as
described below.
I tried to implement forward framestepping with the following piece of code:

gst_element_send_event
(_gStreamer->pipeline,gst_event_new_step(GST_FORMAT_BUFFERS, 1, 1.0,
TRUE, FALSE));

In one theora video (Big Buck Bunny) this works just fine. There are
other ones where it sometimes works and a few frames later it just
seeks until EOS which then takes quite some time.
Backwards stepping like this
gst_element_seek(_gStreamer->pipeline,-1.0,GST_FORMAT_TIME,(GstSeekFlags)(GST_SEEK_FLAG_FLUSH|GST_SEEK_FLAG_ACCURATE),
     GST_SEEK_TYPE_SET,_gStreamer->_currentTime,GST_SEEK_TYPE_NONE,GST_CLOCK_TIME_NONE)
gst_element_send_event(_gStreamer->pipeline,gst_event_new_step(GST_FORMAT_BUFFERS,
1, 1.0,TRUE, FALSE));
doesn't work at all.

This is valid for files opened localy. When I open the exact same
files from a video stream (On Demand stream with flumotion 0.8.1 which
uses GStreamer 0.10.32 as well) forward stepping works perfectly
(backwards stepping turns into forward stepping) for all files.

So I tried to do the stepping with gst_element_seek plus timeoffset
for one frame. this works fine forwards and backwards on local files.
On streamed files the forward stepping jumps back to the last keyframe
and stays there even on further calls to step forward. backwards
stepping jumps back keyframe by keyframe which is ok.

Has anyone else seen the behaviour described above or am I doing
something wrong? Is there a solution to do forward and backward
framestepping with gst_event_new_step for local and streamed files?
Help would be much appreciated!

Thank you for your time!


More information about the gstreamer-devel mailing list