Hap video codec support on Linux or other hardware accelerated codec


#1

I’m looking forward to deploy a video installation with a lot of high resolution video sources blended together.

My dream is to get something like Hap codec working with the native videoplayer class on linux

I use Arch, Openframeworks 0.9.8 and gst-libav-1.10.2-1

Maybe I am a little bit naive, but looking at gstreamer-libav documentation, I taught hap was supported and that would make it enable by default since the videoplayer is gstreamer based.

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-libav-plugins/html/gst-libav-plugins-plugin-libav.html

But when I try to read this file on the linux platform I get

checking pkg-config libraries:   cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl rtaudio gl glu glew gtk+-2.0 libmpg123 
[ error ] ofGstUtils: startPipeline(): unable to pause pipeline after 5s
[ error ] ofGstUtils: gstHandleMessage(): embedded video playback halted for plugin, module uridecodebin0  reported: Your GStreamer installation is missing a plug-in.
ofGstVideoUtils: update(): ofGstVideoUtils not loaded

Using ffmpeg, I am able to convert a video to the hap format in .mov container using ffmpeg on the linux box (compiled ffmpeg-git and added to the pkg --enable-libsnappy)
using this:

ffmpeg  -i /pathToInputFile/movie.mp4 -map 0:0 -an -c:v hap -b:v 9354.24k -maxrate 18708.48k -bufsize 18708.48k -r 30000/1001 -s 1280x720 -aspect 16:9 -pix_fmt rgba -coder ac -trellis 0 -subq 6 -me_range 16 -b_strategy 1 -refs 3 -sc_threshold 40 -keyint_min 30 -g 60 -qmin 3 -qmax 51 -metadata creation_time=now -sn -y /pathToFile/movieInHap.mov

Does anybody have a success story with HAP on Linux or a workaround to get hardware decoded texture from a video file?

Thanks a lot!


#2

are you able to play that hap file using totem or any other gstreamer based player? if it works there it should work with OF too but from what i see, gstreamer contains some encoding/decoding plugins for hap but there’s no muxers yet. also can you post a small hap video to test?


#3

Thanks for the reply,

Here is a short sample in hap compressed with ffmpeg
https://dl.dropboxusercontent.com/u/15569938/quickshare/sampleInHap.mov

Here is the same thing using quicktime on Osx to do the conversion (it is exactly the same thing)
https://dl.dropboxusercontent.com/u/15569938/quickshare/sampleInHapQt.mov

Playing the file with totem return this error

** Message: Missing plugin: gstreamer|1.0|totem|video/x-gst-fourcc-Hap1 decoder|decoder-video/x-gst-fourcc-Hap1 (video/x-gst-fourcc-Hap1 decoder)
** Message: Automatic missing codec installation not supported (helper script missing)

using mPlayer works and successfully decode the codec

Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 57.70.100 (external)
Mismatching header version 57.24.102
Selected video codec: [ffhap] vfm: ffmpeg (FFmpeg Hap)

Seem’s like a issues that is gstreamer and gst-libav related since it can be played with ffmpeg based player but not with gstreamer?


#4

Yes that’s correct. Maybe contact the GStreamer team and see if they have anything to say about it.


#5

Just spotted this topic - ffmpeg’s Hap playback isn’t (currently) hardware accelerated, so you would lose the benefit of Hap even if it worked that way.

I’m in the process of getting ofxHapPlayer going on Linux - it’s a work in progress, but running on Ubuntu. The remaining issues are mostly around audio playback. Check out the libavformat branch, and check the instructions in the README.


#6

thanks for the hint and your awesome work @bangnoise
I’ll get my head in it soon and I’ll try to make it work on archlinux.


#7

cheers @gllmar - would be great to hear if you get it going, and to update the README with any arch-specific steps you have to take.


#8

Hey, any news for the linux implementation? Would be mega great to get this running on linux…


#9

I think that using the ofHapPlayer/libavformat branch on ubuntu works
Take a look

I did not had time yet to make it work on archlinux yet. Soon…!


#10

Yeah, the libavformat branch works on Ubuntu, and I will merge it to master soon(ish). If you’re on a different distribution and need any pointers to get it running, give a shout.


#11

Ubuntu is great. Will give it a try. Thanks!


#12

Sorry it took me ages to test it, I am having some troubles making the libavformat branch works with archlinux.

libdispatch does not install because gnustep-libobjc2-clang-svn chokes because it does not find these package.

error: target not found: gcc-libs-multilib
error: target not found: lib32-clang

also, I had to modify libpthread_workqueue-git to make it work, but still no success.

seem’s a lot easier on ubuntu…!


#13

I used libdispatch for convenience - it’s used to perform multi-threaded decoding when frames are split into chunks. I’m not sure how large the arch linux OpenFrameworks userbase is - if there is demand I could switch to an alternative solution and drop the dependency.