Solved Multi-threaded h264 decoding in Frodo?
#1
Hi. I compiled Frodo RC3 (XBMC 12.0-RC3 Git:20130102-7a6cb7f) with --enable-external-ffmpeg flag but XBMC does not decode h264 video the same way ffplay does. I am particularly interested in getting XBMC to play video using all CPU cores available. On XBMC 11 this used to work fine and I was able to play 1080p x264 files without any "choppyness".

I'm on Arch Linux x86_64. If I play a file with ffplay, it is played using more than one core smoothly. But if I open the same file with XBMC, playback is choppy in CPU intensive parts (frames are dropped): only one core is used (to 100%).

This line of xbmc.log is particularly interesting:
Code:
INFO: ffmpeg[E9FFB700]: [h264] Cannot parallelize deblocking type 1, decoding such frames in sequential order

Hardware: Intel® Atom™ CPU D510 @ 1.66GHz (no external GPU, only the one included on die, which is pretty bad)
Linux 3.6.11
ffmpeg 1.0.1 with pthreads
x264 20121113-1

File codecs:
Stream #0:0(eng), 3, 1/1000: Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1001/48000, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(eng), 8, 1/1000: Audio: ac3, 48000 Hz, 5.1(side), s16, 640 kb/s (default)

Is there any way to modify XBMC's code to allow decoding of h264 video with more than one thread?

Reply
#2
Are you able to play 1080i @ 50 hz with deinterlacing using pure cpu processing?
Reply
#3
If you mean 50fps... I guess I never tried. All the videos I remember watching were at most 30fps. But yeah, I've been able to watch without a hiccup 1080p videos with it.

If you mean something different... I did not understand what.
Reply
#4
oh i my post was nog entirely clear.
i would like to use a cpu (not a gpu) for 1080i (recordings, live tv) decoding.
that's one part

and i wonder if it is possible to deinterlace the 1080i video at 50 fps also by cpu on top of that?
that's the second part.

i can't seem to find examples of people that have done this....
1080p is no very cpu extensive since it does not need to be deinterlaced.
Reply
#5
If you send me a link to a downloadable non-copyrighted file of "1080i video at 50 fps" I can test and tell you.
Reply
#6
@foolosophy - currently we have disabled multi-threaded decoding because it breaks hw decoders. They badly fail when using this.

@basco - yes, you can engage de-interlaceing done by cpu. Don't you find the de-interlacing option when using sw decoder?
Reply
#7
@FernetMenta - OK, can you tell me how to enable it for my own personal build? I don't use HW decoders.

Do you know how is this implemented in the code? If I am using external (multithreadded) ffmpeg, why does XBMC play the file with one single thread anyway?
Reply
#8
see: https://github.com/elupus/xbmc/commit/a0...c28f67263e
Reply
#9
Thank you! I would have never found it. Commenting that line solved it!
Reply
#10
It works even easier - lol:

Check, try to use:

Code:
if (!m_bSoftware)
   m_pCodecContext->thread_type = FF_THREAD_SLICE;

This will restore the normal behaviour, when the software decoder is used - so for all Hi10p files, e.g.
First decide what functions / features you expect from a system. Then decide for the hardware. Don't waste your money on crap.
Reply
#11
I sent a PR: https://github.com/xbmc/xbmc/pull/2064

This makes in deed hi10p 1080 work on my fusion - without any hazzle.
First decide what functions / features you expect from a system. Then decide for the hardware. Don't waste your money on crap.
Reply

Logout Mark Read Team Forum Stats Members Help
Multi-threaded h264 decoding in Frodo?0