Friday, April 15, 2016

Audio Volume improvements in Plasma 5.7

Plasma 5.4 introduced plasma-pa (new audio volume applet and KCM) to replace KMix, however it was missing few important features in the initial release. Unfortunately, there was no progress after that.
I myself have been using KMix instead, because changing application volumes from applet is a must have for me. But KMix system tray popup doesn't really integrate nicely into Plasma, so I finally decided to switch to plasma-pa and implement those missing features.

My goal is to achieve feature parity with KMix, so that I and all Plasma users can switch to plasma-pa without missing anything.

What's new?
First and most important thing for me is the ability to change application volumes from applet. That's actually the main thing I expect to be able to do from the applet as I manage volume of my sound card with global shortcuts.
There are now two tabs in applet, one for managing volume of devices and one for applications. Application streams will also display icons for easier navigation.


Another useful feature if you have multiple sound cards is to move streams to different devices. In the first draft it was possible to do so in both applet and KCM, but it was then decided to have this functionality only in KCM to keep the applet simple.
You can now also choose your default device which will be used for applet icon and global shortcuts.


Some laptops have microphone mute button, it will now be possible to assign this button to mute microphone global shortcut. Ideally it should work without any settings (if the button sends XF86AudioMicMute key event) and is the case on my laptop. Global shortcuts for changing microphone volume will also be available.

Microphone volume OSD (icon is not final)

And finally, you will also be able to change volume of notification sounds from KCM. There is a lot of changes that will make the audio management in Plasma better.

What's next?
One thing that users are requesting is volume overdrive - ability to increase volume over 100%. That's something I'd like to eventually have, but I'm not sure if it makes it into the new release.

That's it, I hope you'll like all the new features (and also fixes) that are coming with Plasma 5.7!

Sunday, October 18, 2015

My contribution to Plasma 5.5

In this post, I'd like to quickly present everything I've been working on for the upcoming Plasma 5.5.

Quicklaunch applet is back
One applet I missed the most from KDE4 Plasma times was Quicklaunch applet. I use vertical panel and adding multiple launchers to vertical panel is not really convenient because they are placed bellow each other, and in result occupy a lot of vertical space. That's why I was using Quicklaunch that let's you have (in my case) 4 applets that occupy the same space as one big launcher.

For Plasma 5.5, I have reimplemented the old Quicklaunch in QML. It offers all features that the old applet had, except auto-columns/rows functionality, so you now need to manually specify the number you prefer to have. I had some issues implementing it, so I just decided to remove this functionality. I hope it won't be missed :)

If you can't wait and want to try it right now, you can build it yourself from scratch/drosca/quicklaunch-qml.git. It works with Plasma 5.4 and probably also with older versions.

Quicklaunch in vertical panel and on desktop

New Bluetooth Devices KCM
In Bluedevil, apart from some fixes, I've been working on new Bluetooth Devices KCM. It now shows devices from all Bluetooth adapters, looks better and also is able to setup DUN/PAN network for devices that supports it.

Bluetooth Devices KCM

There are bug reports about Bluedevil not being usable in Plasma 5, not starting automatically etc. on Kubuntu. This is because Kubuntu is still using old BlueZ 4 with very old KDE4 Bluedevil. Fortunately, this will all be fixed in Kubuntu 15.10 that finally switched to BlueZ 5 and is going to be released soon.
This is also a remainder not to report bugs for these old Bluedevil versions. They are no longer maintained, so your bug reports will simply be closed.

Keyboard layouts
I've been also trying to fix some keyboard layouts bugs, including sometimes forgetting the layouts setup in settings. From my investigation, it seems that the main issue is that the code that listens for device hotplug events only works on systems with xcb-xinput (not available in Debian and other distros), so my idea is to use udev when xcb-xinput is not available. It is still in review, but it should be ready in time for Plasma 5.5.

Thursday, March 19, 2015

Bluedevil 2.1.1 released

I am happy to announce a new Bluedevil release.

This is mainly a bugfix release with two minor new features. The first one is a new page in a pairing wizard. Instead of closing the wizard when it finishes, a success page is now shown to the user to indicate device setup was completed.
The other addition is a new warning message in KCM. Instead of "No Bluetooth adapters have been found." you will now see "Your Bluetooth adapter is powered off." when you actually have a Bluetooth adapter, but it is powered off.

This is also a last release of kdelibs4 Bluedevil.

What's next?
Bluedevil is now released as part of Plasma 5.
If everything goes by the plan, there will be bigger changes for Plasma 5.3 release. Bluedevil will use a new BluezQt library instead of libbluedevil. As BluezQt offers a QML API, I have also been working on a new Bluetooth plasmoid. The plasmoid's code is based on a network management plasmoid. It will probably need some new icons, but otherwise I think it looks quite good.

Here are some screenshots:

Expanded device details with action buttons
Connected devices are displayed in own section

Bugs fixed in 2.1.1:
  • don't try to infinitely kill monolithic when it fails #343682
  • fix directly opening files from obexftp (eg. images in gwenview)
  • fix one crash in kded module #342581
  • fix obexftp browse files on old S60 devices #342259

Download:
bluedevil: bluedevil-2.1.1.tar.xz

Tuesday, December 23, 2014

Bluedevil 2.1 released

I am happy to announce that new version of Bluedevil is out!

On 3rd December, I have released Bluedevil 2.0. It was a first stable release that supported Bluez 5 and it contained mainly crash fixes over 2.0-rc1. Unfortunately, there was also a big regression.
Libbluedevil was automatically enabling (power on) all adapters that have been found. However, this behavior was causing issues that even if the user disabled Bluetooth, it was enabled again after reboot. So the libbluedevil was adjusted not to automatically change powered state of any adapters. The problem is that Bluez is not enabling adapters at startup, so as a result, Bluetooth was now always disabled on startup.

In the new 2.1 release, powered state of all adapters is saved and restored in Bluedevil daemon. Another change is that the alias of adapter will be used in every place where name of adapter is displayed. It was always possible to change alias of adapter in KCM, but it wasn't actually used anywhere.

There is also one small improvement in kio_obexftp. It will show icons of storage types in root folder of obexftp filesystem. It should work correctly with Nokia (S40, Symbian) and Android (KitKat, Lollipop) devices. If you find any issue with the icons, please let me know.

Storage icons on Android phone

Bugs fixed in 2.1:
  • remember powered state of all adapters #337193
  • monolithic (Bluetooth icon) will now be correctly hidden in system tray when all adapters are powered off #341768
  • monolithic will now be removed from system tray when there are no adapters
  • action to send files over Bluetooth will now be shown only for file that can actually be sent (only local files)
  • PIN in pairing wizard will now be accepted only after clicking "Matches" button
  • kio_obexftp should now better handle errors and correctly reconnect after losing connection #321560
  • kio_bluetooth will not crash when trying to access invalid device

Download:
bluedevil: bluedevil-2.1.tar.xz
libbluedevil: libbluedevil-2.1.tar.xz

Thursday, May 23, 2013

VA API backend for VDPAU

Video acceleration on Linux

There are multiple hardware video acceleration API's available in Linux world. VDPAU by NVIDIA is the most popular (at least by the number of projects using it). VDPAU is available on all modern NVIDIA graphics with proprietary blob driver. Intel has developed its own VA API. Currently, VDPAU is available on NVIDIA and some AMD graphics, while VA API on Intel.

The great thing about those two is that they are not hardware bound and can support multiple drivers. For a long time, there have been a VDPAU backend for VA API. But only recently, the same have been implemented in opposite direction.

VA API in applications

VA API is available in number of video applications (VLC, XBMC, MythTV, GStreamer-vaapi, mplayer-vaapi, ...), but its concrete usage in some of them is far from ideal.
Enabling hw acceleration in VLC leads to even more CPU usage than with mplayer with software video decoding.
mplayer-vaapi is not officially part of mplayer and also have its pitfalls. It cannot scale ssa/ass subtitles with video, subtitles are "embedded" in video, leaving them in the same resolution as video (this means ugly subtitles for SD videos). It isn't also available for mplayer2, which contains some improvements over mplayer.

Video acceleration in Flash

Situation in Adobe's Flash is very simple. Only VDPAU is, and ever be supported. There is only one solution, actually use VDPAU even on Intel cards.

libvdpau-va-gl

This quite new project finally provides VA API backend for VDPAU. I have discovered it only recently, but so far everything works just fine.
You may find it in your distribution's repository (eg. Arch users). If you don't, follow this simple howto.

Building from source

The code is available on github (i-rinat/libvdpau-va-gl), so let's clone the repo first:
git clone git://github.com/i-rinat/libvdpau-va-gl.git
Now install build dependencies (command is for Debian based distributions):
sudo apt-get install libvdpau-dev libva-dev libglib2.0-dev libswscale-dev libgl1-mesa-dev libglu1-mesa-dev
And start compiling:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/  ..
make
sudo make install
You can of course skip make install and create a package instead.

Post-build configuration

You now have the library installed, let's use it! You need to specify which VDPAU backend should be used, it is done with VDPAU_DRIVER variable.
Put this into your .profile (or .zprofile if you are using zsh :)
export VDPAU_DRIVER=va_gl
There are also some tweaks for this backend, but you can find it in the README file at git (and they are not needed for Intel cards).

Configure applications

I myself am using mplayer as my preferred media player.
mplayer -vo vdpau -vc ffh264vdpau,ffmpeg12vdpau,ffvc1vdpau, ...
# That comma at the end of -vc list is important. It tells mplayer to fallback 
# to other video codecs if those cannot play the video

# Those are all codecs that VA API supports, however your card may 
# not support them all. Tune the list according to output of `vainfo`
And also a little tweak to force Flash to accelerate video decoding:
echo "echo EnableLinuxHWVideoDecode=1 > /etc/adobe/mms.cfg" | sudo sh
# Little trick to run the whole command as root ;)
You should now see "accelerated video rendering, accelerated video decoding" after right click -> show video info on a video at YouTube.

Accelerated YouTube Flash video on Sandy Bridge HD 3000

Saturday, February 16, 2013

Useful Git commands

In this post, I want to show some very useful Git commands for everyday use.

Show diff of single commit

git diff ^<commit>

git diff ^HEAD # Show diff of last commit

Generate git patch from single commit

git format-patch -1 <commit>

git format-patch -1 HEAD # Generate patch from last commit

Show history of a file

git log -p -- path/to/file

Commit as a different author

git commit --author <e-mail>

Edit last commit (not yet pushed)

git commit --amend

Remove last commit (not yet pushed)

Very useful for cases when someone pushed and you commited and didn't pull.
git reset --soft HEAD~1 # HEAD~2 for 2 commits, etc

Stash only some files

To stash files not staged for commit, as seen in picture:
git stash --keep-index

Delete untracked files

git clean -f

Monday, September 3, 2012

Qt: How to install Oxygen theme without KDE

In this quick post I'll show you an easy way how to install Oxygen them without need to install a lot of unnecessary KDE libraries.

If you are using GTK-based desktop environment (eg. XFCE, Gnome, Unity, ...) and are using some Qt applications, you may want to see how this Qt application looks in "native" widget style. Or you are just developing Qt applications and need to test its appereance in KDE's default style = Oxygen.

I am using Debian, so this how to will be focused on it, but you may use it with little changes for other distrubition too.

Download kde-style-oxygen package

First, you need to just download package with oxygen style. For Debian, please use this link.

Check its dependencies

If you try to install this package, apt-get will ask you to install a lot of KDE packages that you don't actually need. So instead of installing it, just unpack it.
Now you can check which libraries are missing on your system, just run ldd on every library from the package.

Install dependencies

For me, it was libkdecore5, libkdeui5 and libkio5. I just installed the first two with apt-get without any big issues, however, the libkio5 tried to install a lot of packages.

So I just repeated the same steps as for oxygen package: downloaded it from debian.packages.org and checked the dependencies.
It turned out that I need to install libnepomuk4, libstreamanalyzer0 and libsolid4. And that was it, I had now all I need to run oxygen theme.

Create new package

I created new package that contains oxygen and libkio and also creates symlink in /usr/lib/qt4/ so you can use oxygen in all Qt apps.

If you are interested, you can download it here (amd64).