<div dir="ltr">Thank you, Tim, I'll give it a shot. I plan expanding this to have the loop, but based on input to change dynamically the video and then go back to the loop, so I'm kind of stuck with about-to finish, ain't I? <div>
<br></div><div>I'll have a look at frame stepping examples as you said, but if you have a suggestion on where to start with playbin (or any other solution for looping a single file -> looping another file on a specific input -> back to looping the first file and all this with dynamic playback speed).</div>
<div><br></div><div>Thank you for your time.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 7, 2014 at 7:26 PM, Tim Müller <span dir="ltr"><<a href="mailto:tim@centricular.com" target="_blank">tim@centricular.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Wed, 2014-05-07 at 19:00 +0300, Alexandru Palade wrote:<br>
<br>
Hello Alexandru,<br>
<div><div class="h5"><br>
> I'm trying to make a combination of playbin example[1], and playback<br>
> speed example[2]. I want a video to loop indefinitely (using<br>
> about-to-finish signal), but I would like to be able to control the<br>
> speed as well. Here[3]'s my experiment so far. It works, but I do have<br>
> quite a few problems:<br>
><br>
> 1) when the video is finished and it goes at the beginning, the<br>
> playback speed reverts to the original one. Only after I send a<br>
> send_seek_event by pressing a key it goes back to what is supposed to<br>
> be.<br>
> 2) when the video is finished playing and it needs to start again,<br>
> sometimes, it gets stuck for a few seconds and only then starts<br>
> playing again. Again, calling send_seek_event unfreezes it.<br>
><br>
><br>
> The whole day I tried to:<br>
> a) send_seek_event in 'about-to-finish' callback, it appears to fix<br>
> #2, but not #1<br>
> b) listen on the bus for STREAM_START message and call send_seek_event<br>
> then, doesn't work because it can't query the position in at line 28.<br>
> c) listen on the bus for STATE_CHANGED message and try to call<br>
> send_seek_event on different combinations of old state and new state,<br>
> but I always ended up in crashing the program<br>
> d) listen on the bus of ASYNC_DONE message and combined it with<br>
> STREAM_START, still no luck.<br>
><br>
><br>
> I'm assuming now that somehow the state of the playbin is important<br>
> when to call that send_seek_event so that playbin can restore the<br>
> playback speed, but I'm out of ideas where to try it. I've read on<br>
> playbin's documentation page that it should have no problem in taking<br>
> gst_element_send_event.<br>
<br>
</div></div>For looping the same file there's a better approach than using the<br>
about-to-finish signal:<br>
<br>
 - set playbin to PAUSED state<br>
 - wait for ASYNC_DONE message on bus<br>
 - send a seek for start=0, stop=-1 with flags FLUSH | SEGMENT<br>
 - set playbin to PLAYING state<br>
 - now you will get a SEGMENT_DONE message on<br>
   the bus when the demuxer/parser is finished<br>
   with the file (but there's still data buffered,<br>
   so playback hasn't finished yet)<br>
 - when you get SEGMENT_DONE, do a non-flushing<br>
   SEGMENT seek back to start=0,stop=-1<br>
 - wait for next SEGMENT_DONE message on the bus<br>
 - etc.<br>
<br>
You can determine the rate with the seek event.<br>
<br>
If you need to change the rate dynamically during playback, you might<br>
want to have a look at the 'frame stepping' API and examples, which let<br>
you do that as well.<br>
<div class=""><br>
<br>
> Oh, and I'm in 1.x branch.<br>
<br>
</div>Excellent.<br>
<br>
Cheers<br>
<span class="HOEnZb"><font color="#888888"> -Tim<br>
<br>
--<br>
Tim Müller, Centricular Ltd - <a href="http://www.centricular.com" target="_blank">http://www.centricular.com</a><br>
<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</font></span></blockquote></div><br></div>