 Okay, so we start again with our 11 o'clock show. For Martin, we talked to us about coding, coding version 18, features and improvements. Martin. Okay. Welcome, anyone, everyone, for the people that were already here for VLC. We're kind of in the same boat as VLC. We had a lot of code that no one understands. So they were trying to clean up, and we're basically trying to do the same. Same as getting everything working on all platforms with all the new codecs, 3D, HDR stuff, Wayland. So we're kind of in parallel with what VLC is doing, cleaning up our stuff. So since last week, we finally released version 18. It's about, I guess, a year late, so it doesn't really matter that much. We started in November 2016 during the time that 17 was about to come out. We continued working on 17 with bug fixes, but others were already starting to clean up our code, and we finally released on the 29th. So our goals were to improve what we already have. There were not many features we actually wanted to have. And understanding our code, cleaning it up, because it all originated from the original Xbox. We used about 800 private APIs on Windows, still from the old SDK that kept working, and we should have cleaned that up at some point. So the goal was to break the code to C++11. Some parts were already going to 14 already. We removed all the old code, obsolete libraries, because we... What's cracking? Not working well. Okay, let's try. We even kept compiling libraries we didn't even use. So we removed like 10 libraries, like what do we use it for? And actually no one could answer it. So we just removed it, and then everything kept working. I think last week, or some months ago, we even removed another one. So we thought we were done. At least the best part is we don't have to maintain all that stuff anymore. We use ffmpeg for everything, basically. We only are three patches behind on their 4.04 release. So we tried to keep that up to date as possible, because in the past we had like 500 patches on a really old library inside of our code. And we tried to upstream the patches as best as we can. It's not always possible, but we should at least try to do that. This is the biggest part, binary add-ons. For people that already are no-wins Cody, we know all the add-ons and the plugins, like the skins and the audio in the video. But we now also moved basically most of that was in core that we could rip out is now an add-on as well. So we now have some high decoders for pictures. So you basically go to our repo and you install that. So it's not compiled in the core. So our core code is becoming much smaller and we just say plug it in. Another thing for PVR that were kind of add-ons already, but they were always shipped with the core code itself. So now you can just install one front end for whatever backend you have and don't have all the other 20 shipped alongside. Input stream. So the nicest part about this, we can actually play back DRM protected content from within code using whatever platform features it supports. So like on Android, we can do Netflix full 4K. So basically, if you go to somewhere on the web, you can find a Netflix plugin. You install that, you enter your password and username. So it's fully locked down to Netflix itself. But basically you can load your library there, play back any file there and it works. We're still looking into the Atmos part, but four full K works on Android. On other platforms, Windows is not working yet. Linux uses software. So we are kind of limited to 720p. So Android is fully functional for that. Everything DRM protected by Widevine should work. So if someone writes a plugin for that, it works. So what we did is 3,000 pull requests, 10,000 comments with 36 people and about 9,000 changed lines. And user base, we don't really track that. We have some stats from Play Store, we have something from Windows. We can look at the amount of downloads, but that doesn't really matter for us because we just want a nice product. Play Store says 7.8, Windows says a couple of hundred thousand and then the rest is from whatever site. And even like on Android, we're not an Amazon store. So maybe 25 or more. Rough estimate. So we always plan changes, but we never promise to incorporate them. And the reason is, well, people change interests. They get a life, they get married, they get kids, and then they vanish. So they start to work on something and then... So we're never going to say next year we will do whatever feature because we don't know. So we only say when it's done, then when it's actually in the core code. Even then, it might be not enabled by default because we're still not sure if it actually works. The best part is, this is kind of the same talk as last year. What we said we would do is actually also done because we didn't do anything more. And the best part was the Xbox. That caught everyone by surprise. Because you all know we started on the original Xbox, we locked down, then the 360 came along, nothing worked anymore. So we thought Xbox will never happen again. And suddenly the UWP platform came along with like, it's not going to happen again because it's too complicated. And then someone sent an email, I have it running. What? So that was actually in the start of... on Windows itself, so not under the Xbox itself. But the platform should be similar. So we started in June 2016 with the Centennial Bridge. We still use it today because UWP has limitations, no access to local drives and all that. So we push UWP version to Windows Store and then the higher version with the bridge version on top of that because you cannot filter easily. So you have to do some tricks to get the correct version rolling out. In December 2016 the initial work actually started together running. And in 2017 we had the first version actually booting up, which was quite amazing. And then half a year later it was actually kind of done, not fully featured completely, but we actually put it out as a beta. I think we are now at 200,000 installs, so it's not so bad. Some apps actually called us the best... what do you call it, best game of the year for Xbox? Because there was actually nothing else out there. What else did we do? Video player. As said, we started out on the Xbox and it grew and grew and grew. And it wasn't really designed to take on all the other platforms. So we started to improve that code and it was all untangled. It's like quantum entanglement. Pull one side of the code and the other one breaks. So they now actually started ripping that out, cleaning it up, pulling it apart. And now video player is kind of a thing of its own. But still weird stuff happens when you change playlist code and then video player starts breaking. So we still want to improve that. As said, a lot of legacy code. Not as efficient as it should be. Just stacking on code and code and code, not platform agnostic. Linux was hacked into a Windows section and all that. So when you actually... maintaining it was so hard. And the best part of cleaning up your code is it's maintainable. Like JB said, if you don't understand the code, you cannot maintain it anymore. So you need to understand what is actually happening. So by actually cleaning up your code, ripping parts out, you start to understand what is actually happening. And that's I think the best part we learned about that. Just start pulling strings, see what happens. And if you see something happen, actually put it as a comment in the code so other people don't have to look again what's happening. So the DRM part was actually one of the biggest things we wanted to have. So it's using a special API we made, input stream. So we basically made an add-on that uses that API that actually tells the player play this and then the player handles everything else. And on Android we then tell media codec play this content. We don't know what it is. So it's still entirely DRM protected. But play this. We don't want to know what it is. It's also more footer proof now with HDR and whatever 8K, 12K, 20K. And the future is also, we want a headless mode so the player was fully entangled with the rest of the code so you couldn't really play something in the background without the GUI doing weird stuff. I could show screenshots, but there's no point. It's still just a player that plays video. Input handling. And with input handling we actually mean controllers. Not video input, audio input, but actually controller plug-in. We all know the problem is if you have an NES controller or a Sega controller you plug it in you have to configure all the keys again. Not anymore. You just plug it in and it works. There's also a configuration menu so you can actually change the button mapping but plug-in any controller and it will always work. And this was actually part of Retro Player. It's been five years in the making. So one of our developers is actually a mechanical engineer who got bored and actually started coding on Retro Player and it took him four years, several attempts to get it right. And what basically is everyone, I guess, knows Retro Pie and whatever other software there is. But basically this runs in the Kodi GUI. You open any ROM file and it will actually automatically select the ROM, the emulator you want, combining with input handling any controller you want so you can play NES games with a Sega controller. No problem at all. So yeah, his goal was, he loved playing the old games and back then there was not really anything that was user-friendly. You had to do weird stuff to get an emulator running so that was his main goal, getting this done. Also the controller part was a real hassle and some stuff is still future work. But one of the best part was actually to save, pause and rewind and play again, because everyone knows that you die or you jump in a pit and you have to play all over again. You can just rewind what you're left off. So go back a couple of seconds and then start playing again from the moment you want it. So this is a part of how the menu looks. So you can actually just pause the game, maybe you can close it down and it will, I'm not sure if it's actually saved or maybe not. So it's actually saved what you're left off so you can actually resume at any point in time and how the rewind actually works because it's actually a video frame. As he uses it, you can actually just rewind like any video and then start playing, hit play again and then start controlling the game again. He had that working like four years ago and we had like a tiny kid coming in that's all he did, just die and rewind and die and rewind. It's kind of a cheater but why not? We also had some shaders on top of it so you can actually have the emulators looking like an old CRT monitor again for people who actually want that. So it tries to upscale as best as it can and if you want you can make it look like an old CRT monitor again to have that old feeling on your 4K TV. This is the controller configuration. So basically all the controllers are also add-ons so if you say okay I have this controller you can install that add-on, that profile basically and you can then change it to your liking if you want A and B switched. No problem and it will actually save it and plug in any controller. Then the rest of what was done well Android was always a hassle. So we started working on Android and version 2.4 I think, Android 2.4 there was no media codec back then. So back then we wrote our own player. Later came along lip stage fright and then was still a mess. Every manufacturer did their own thing. Playback was a hassle and then we started working with Google actually to help improve media codec like we need this, we need that audio why don't you have desk codec why do you have all these stupid APIs just give it the IEC input we'll handle all the packaging ourselves so we don't have to deal with your timings we can do the timing internally. Windows now has the 64-bit version so that was something like long overdue and the problem with that was so many third-party libraries we had to compile them all as 64-bit not a problem in itself but there was no 64-bit code in those modules so we actually had to rewrite parts of those modules to be compiling the 64-bit as well and we tried to remove modules we actually didn't need anymore by replacing them with something that works so that was basically 64-bit windows it's a bit faster people screamed like it's much faster we want windows 64-bit, it must happen well we actually tested it and it wasn't that much faster it's only faster if you do 4K back then it wasn't really that obvious yet Waylon support was added again five years ago we had a GSOC student who did the Waylon stuff initially I think he lost interest or there wasn't really big enough support around to do Waylon properly so it kind of decayed and we actually ripped it out again and then we had another GSOC student Phillip who redid all that part again then for Linux we also have direct render management that's especially for the low power platforms improves playback a lot and we now use CMake as our build system and that means that it's actually much more easy to maintain because in the past we have like five build systems for five different platforms and now we have one add some lines, add a new file, need to compile done, works took a lot of time, it's still dark magic if you look into it but we have some gurus that actually know what's happening and then the most important part was binary add-on repository for almost all platforms as said we already had binary add-ons to some extent but we had no way of distributing them so we actually had to package them into the install itself because there was no real way to make that easily installable afterwards because you have Windows, you have Linux, OSX, iOS, Android but we wanted to push a new update when we fixed something and it was still not possible because we had to take into account all the platforms, all the variations and it actually took us like two years to figure out how to properly do this like if we compile one, it's all one code if we compile it, it needs to be distributed to like five, six different versions taking account all the 64-bit, 32-bit, ARM and now in 18 we actually finally did that so our installer went from 70, 80 megabytes to 35 just ripping out all that stuff and you install it basically when you want it we have dashboard, PVR improvements music library, is it really improved? Bluer is better and basically in two years the list is so huge it's so much to even talk about and on release day sadly our biggest fear was something will break which we never thought of and that was for UWP, the migration because Windows does different things when you do that we have a roaming profile and the other one is not and that was it and for version 19 we have Python 3 coming and we don't really have anything planned because we are kind of feature complete so we're hoping that our GSOC project will bring up some amazing things one thing that's also coming up is the database layer it's a total mess it's holding us back so much because anything you do always goes through our file handler so anything you do goes through that and so big bottleneck so we hope to rip that out as much as we can and profiles like have a kit profile and a parent profile or different names so those are the biggest features we want to work on but we don't have to promise anything because someone needs to be interested in actually doing that and we hope, always hope that the common public will show interest in picking it up and we will always try to help them because it's really basic as through we had our retro player guy looking at it and he got scared and for the rest we also had to maintain all the rest of our infrastructure which is so much and your own personal life and that is the biggest I think the biggest problem for everyone you want to work on something but you still have a life at work that was it we had a few minutes for questions or amazing ideas for your roadmap we're always looking for GSOC projects so we have a wiki that lists the GSOC project but we can always have some great ideas you said that you ripped out the decoder add-ons and everything will you help the users so that they will autoload or tell them that they're missing an add-on? it automatically does that so you don't have to look through it and figure out that I need this binary add-on so if you install the Netflix add-on it will automatically install the DRM plug-in that automatically pulls down whatever you need so it's actually plug and play so all you need to do is enter your username and then the next one I saw something about NVIDIA cards and the new version and not supported what's that about? I'm not really the technical guy about it was not supposed to be supported with GBM backend or something like that Philip, do you know anything about that? okay so the deal with NVIDIA is that the binary drivers do not support the standard EGL interface that all the MISA and other drivers support they use EGL streams which is a different API and we won't implement that it's just the same with a lot of for example Wayland compositors like you cannot run KDE on NVIDIA binary drivers it's the same reason so our goal basically is to not with the GBM backend with Navo you can run it so our goal is to don't do every edge case with Android we had a lot of problems with video playback and we actually ripped out the biggest manufacturers like AMlogic we basically said if you want us to run on your platform do your job, write a proper driver we then ripped out our AMlogic code and said we support media codec this is the official API if you do not support it tough luck and that actually got the ball rolling that I actually started improving after that we actually got talking with AMlogic to actually improve the Linux kernel so like the project like LibreLac didn't have to do all the hassle with all the variations again so they actually tried to upstream their drivers as much as possible to the Linux kernel so we don't have to go through all the edge cases, loop holes, private APIs that's all it will break at some point and someone needs to maintain it and we basically want to use the API as designed not anything else so we have a lot of users like you mentioned on the slides about the release day that you feared some of the SMBA problems did they materialize? Yes, yes Can you tell a bit more about that? At some point during the release cycle I think Windows disabled SMB1 and for some reason people use Windows 7 as a media server so we did, we have some configuration in the code, I think like LibreLac has it better on some platforms or not and during the last year we had a lot of non-working installs because the SMB problems like, yeah it's suddenly soft working, yeah but you have SMB1 on your server and we only want 2 and 3 but you can override it again and then it's always a hassle with on Android SMB2 doesn't really work because then on the Android platform stuff needs to be done as well and we basically have not enough developers to actually support most of it so we actually now said whatever we've been working on this for 2 years cut the date and release it and we'll see what happens Thank you Matheim remember you can rate the presentation on FOSDEM website, thank you What's the name of the plugin for K-Playback on Android 4 wide by now 1 for Android 4.