tag:blogger.com,1999:blog-54307152619932662562024-02-19T07:16:54.471+01:00Joris Valette | Work with FLOSSA simple blog about my work in FLOSS world. Mainly focused on PiTiVi now.Unknownhttps://draft.blogger.com/profile/00136489776173641506noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-5430715261993266256.post-87928050909866141662013-08-21T19:07:00.000+02:002013-08-21T19:07:34.433+02:00Attending GUADEC 2013Definitely, this Google Summer of Code is an amazing experience. Thanks to GNOME Foundation, I've been able to attend GUADEC for 8 days (which wouldn't have been possible without the sponsorship).<br />
<br />
I met Thibault Saunier, my mentor, Jeff Fortin-Tam and Mathieu Duponchelle who are the core developers of PiTiVi. I also met GStreamer related devs, and I gotta say they are all very friendly people. It's actually possible to compute their level of friendliness by the number of beers we shared.<br />
<br />
More seriously, I really enjoyed the talks where I was present. Especially "Sandboxed applications for GNOME" by Lennart Poettering, and "The future of GNOME 3" by Allan Day. I like to see where GNOME is going, and that these projects are actively carried by brilliant developers/designers.<br />
Jeff also presented the future of Pitivi, in a talk that was... very catchy. If you've missed it, you should watch it right now:<br />
<a href="http://www.superlectures.com/guadec2013/pitivi-and-ges-towards-1-x" target="_blank">PiTiVi and GES, towards 1.x</a><br />
<br />
On August 4th I made a short appearance in the lightning talks. If you want information on how Pitivi is going to handle ramped motion (advanced slow/fast motion), you can watch my talk here :<br />
<a href="http://www.superlectures.com/guadec2013/interns-lightning-talks" target="_blank">Interns lightning talks</a> (starting at slide 39/142).<br />
<br />
All along these 8 days, as Pitivi team we gathered in several places to hack on Pitivi. On the menu: fixing bugs, improving tests, writing new features, and speaking french. Being able to hack with my mentor and the other developers has been greatly helpful, and I hope we will meet again soon.<br />
<br />
All in all, Brno was a beautiful city, with a lot of cheap restaurants (except for sushi). And going to a club with your fellow developers you will meet only a few times a year is definitely an experience!<br />
<br />
<span style="background-color: #f9f9f9; font-family: sans-serif; font-size: 12.727272033691406px; line-height: 19.19034049315148px;">Děkuji</span>!<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2rvrwc1fPm10sbO9Dxi6kjdsruu6ca3kFI1_ppDibyBAvoFKVjiLIDBHzNTj9DSCLWBHLP6sUxrh2R3InhFjOIgmDnGWjqR1132oNtwhI7gIfMsD_QJeoy06Ez32pcqgGVtIbRfD9-8/s1600/sponsored-badge-shadow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT2rvrwc1fPm10sbO9Dxi6kjdsruu6ca3kFI1_ppDibyBAvoFKVjiLIDBHzNTj9DSCLWBHLP6sUxrh2R3InhFjOIgmDnGWjqR1132oNtwhI7gIfMsD_QJeoy06Ez32pcqgGVtIbRfD9-8/s1600/sponsored-badge-shadow.png" /></a></div>
Unknownhttps://draft.blogger.com/profile/00136489776173641506noreply@blogger.com0tag:blogger.com,1999:blog-5430715261993266256.post-76781156540139964682013-07-22T15:54:00.000+02:002013-07-22T15:54:52.932+02:00On how videorate works, and how rate was added to it<div>
Videorate is a GStreamer element on which I have spent some time, so that PiTiVi can later change the speed of a clip, and we'll get e.g. nice slow-mo effects. Its goal is essentially to output a video stream with the desired framerate.</div>
<h4>
The way videorate worked before</h4>
<div>
It worked like this: </div>
<div>
<ol>
<li>Buffers (= <b>frames</b> here) are pushed towards videorate;</li>
<li>Between two successive buffers, videorate chooses which one is the closest in its timestamp to the desired output buffer;</li>
<li>The chosen buffer is outputted, if necessary more than once.</li>
</ol>
<div>
This means some frames may be dropped or duplicated, look at this picture to understand how step 2 works:</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigEMKqYVjdndIkYHRgQlzYP74FxlvB6hn27R5kU7Uf5Ws3mDicHDfkCj5P4S1v3AiV8SbhWViQWuidO_AcG_4Q4DNFl6uZE-UEsFZ3QQ4I8yE-NstYsk0pI7esh1xYHfATHPsSIjsjatU/s1600/norate.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigEMKqYVjdndIkYHRgQlzYP74FxlvB6hn27R5kU7Uf5Ws3mDicHDfkCj5P4S1v3AiV8SbhWViQWuidO_AcG_4Q4DNFl6uZE-UEsFZ3QQ4I8yE-NstYsk0pI7esh1xYHfATHPsSIjsjatU/s1600/norate.jpg" /></a></div>
<br /></div>
Here, buffers b, c and d are duplicated, because framerate is faster. If it were slower there would be dropped buffers.<br />
<h4>
Adding a speed property, called rate</h4>
Now we want our whole clip to be, say, half as fast. We just need to set a new rate property to 0.5, and it will make the duration of the clip last twice as long. When comparing the buffers, we need to consider the rate now:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9g0P-D6zsgAZzHSRBt9VEhXaTrkBlM1qrstPTWa2Z2wDFHzXJxvXTgS62yCtgB1C5mI6kJx0MGZnajNVc4UgPwY0mk26O6ovgyeF2Og4b8Yh8S5BQjqK3egE-rMhDjJ6-5Ty2MWZlTdI/s1600/fixedrate.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9g0P-D6zsgAZzHSRBt9VEhXaTrkBlM1qrstPTWa2Z2wDFHzXJxvXTgS62yCtgB1C5mI6kJx0MGZnajNVc4UgPwY0mk26O6ovgyeF2Og4b8Yh8S5BQjqK3egE-rMhDjJ6-5Ty2MWZlTdI/s1600/fixedrate.jpg" /></a></div>
<br />
<div>
<br /></div>
<h4>
Making it variable</h4>
Cool, we can change the speed! But the rate can only be applied to the whole clip. What if we want to slow down to a certain speed, stay at this speed for a few seconds, and then back to normal? This effect can be used when you want to focus on a fast but important moment (maybe the airtime of a car jumping between two boats, crazy ideas aren't missing). You can also check out this sequence (after the bullet-time: <a href="https://www.youtube.com/watch?feature=player_detailpage&v=LuDN2bCIyus#t=345s" target="_blank">Gymkhana 5</a>). To do that, the rate is regularly changed, and we need to compare the buffers since the last rate change.<br />
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZTq3OoIzfg19Kz8hRY4fZU8kQrIgwvpVdVWYU1cCPeKdBLEpgF05S5biQ684rZQEJDOQrWs7q0Txk7oxWMBtqsmuz4bP60KLgSeG2MYorPvT6Kgwcs-fuEArqC0wmHjk4ljN0oQjRZlg/s1600/variablerate.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZTq3OoIzfg19Kz8hRY4fZU8kQrIgwvpVdVWYU1cCPeKdBLEpgF05S5biQ684rZQEJDOQrWs7q0Txk7oxWMBtqsmuz4bP60KLgSeG2MYorPvT6Kgwcs-fuEArqC0wmHjk4ljN0oQjRZlg/s1600/variablerate.jpg" /></a></div>
<br /></div>
</div>
<div>
<br />
Unfortunately you will have to wait a little more before trying it, a <a href="https://gist.github.com/jojva/6053400" target="_blank">python script</a> is ready but my gst-editing-services and gst-plugins-base edits haven't all been merged.</div>
<div>
<h3>
What's next</h3>
</div>
<div>
With the advice of Thibault Saunier, I'm doing my best to have at least a UI mockup of PiTiVi "motion-ramped" to show at GUADEC. Meanwhile I'll spend this week implementing all this core stuff inside PiTiVi.<br />
Stay tuned! :)</div>
Unknownhttps://draft.blogger.com/profile/00136489776173641506noreply@blogger.com0tag:blogger.com,1999:blog-5430715261993266256.post-38082114057250935532013-07-07T17:05:00.001+02:002013-07-07T17:15:56.825+02:00First entry for PiTiVi's GSoC 2013<h2>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Hello PiTiVi lovers!</span></h2>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Finally I made a blog about my work for PiTiVi this summer, I am really excited about this project.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">My project aims at implementing slow/fast motion in PiTiVi with eventually smooth transition between frames. You probably understand how important this is for a great video editor.</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Which is why I am doing my best to bring:</span><br />
<br />
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">A powerful and stable core implementation in Gstreamer suite, and especially gst-editing-services (GES) and gst-plugins-*, with help from thiblahute;</span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Hopefully, a pretty UI with help from nekohayo (later).</span></li>
</ul>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">What has been done?</span></h3>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">I have been working on videorate, an element from gst-plugins-base that receives a video stream as input, drops and/or duplicates frames, and outputs a stream with a potentially different framerate. To this element I added a new property, 'rate', which can be controlled to change the speed of the input clip.</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">You can try out my version of gst-plugins-base, accessible here: <a href="https://github.com/jojva/gst-plugins-base" target="_blank">https://github.com/jojva/gst-plugins-base</a>, </span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">although I push force on it and it could be quite messy. Hopefully it will be integrated to the main repository soon. Also here's a diff for a quick view : <a href="http://ur1.ca/ek5b2" target="_blank">http://ur1.ca/ek5b2</a></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">What's next?</span></h3>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">In the short term, I need to write tests for videorate and wait for approval so my work is merged with the main repo.</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">After that, I will be working on GES to add by default videorate in high-level containers like ges-uri-source.</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">There will be more soon! :)</span></div>
Unknownhttps://draft.blogger.com/profile/00136489776173641506noreply@blogger.com2