It's well known that when a video does not play on a Raspberry Pi, it's usually due to a codec issue. But in my case, I was able to play video from the "Movies" menu but not from a "Smart Playlist". The problem was due to the amount of ram assigned to the GPU. It seems that there was no free resource anymore to play video once a "Smart Playlist" opened.
Click to Read More
I have a Raspberry Pi model b with 512 Mb Ram.
- In order to find the reason of the problem, I have activated the logging on XBMC: In Settings -> System -> Debugging, toggle the Enable debug logging setting.
- I have opened a Smart Playlist and started a movie. I only got the sound but no video.
- I have looked into the log file, whose path depend on the distribution:
- OpenELEC: /storage/.xbmc/temp/xbmc.log
- Raspbmc: /home/pi/.xbmc/temp/xbmc.log
- XBian: /home/xbian/.xbmc/temp/xbmc.log
- In that log I found this:
DEBUG: JSONRPC: Calling player.getactiveplayers
ERROR: COMXCoreComponent::DecoderEventHandler OMX.broadcom.video_decode - OMX_ErrorInsufficientResources, insufficient resources
ERROR: OMXPlayerVideo : Error open video output
DEBUG: JSONRPC: Calling application.getproperties
The problem was "Insufficient Resources". Googling on that I found a simple solution: add more ram for the GPU.
- Open a telnet session to the Raspberry Pi and log (user: pi, password raspberry on RaspBMC)
- Edit the config.txt file which is located in /boot.
- Set gpu_mem_512=256 (instead of the current value 128)
- Restart the Rasberry Pi using the command: sudo reboot
If editing the config.txt file using "telnet" is not easy, possibly "ftp" the Raspberry to "get" the file, edit this one on Windows and "put" it back.
Regarding the codec problem that can occur, it's usually for mpeg2 video as one has to purchase the mpeg2 license and configured the raspberry pi. See this blog for details.
About logging: http://wiki.xbmc.org/index.php?title=Log_file/Easy
About Raspberry pi : http://wiki.xbmc.org/?title=Raspberry_Pi/FAQ
More about Ram usage and split between CPU and GPU (from Krzysztof Adamski)
Click to Read More
For older RaspberryPi, with 256 MB of RAM, 4 splits are available:
- 240/16 - The most RAM size ARM can get (240MB) with mimial GPU memory. It's the best for general computing when you don't need 3D graphics or hardware video acceleration. It has enough memory to handle 1920x1200x16bpp framebuffer resolution. While 32bpp is also working, it's not recommended since it leaves very small amount of free memory for GPU.
- 224/32 - This one is deprecated in favor of 240/16 split. It has 3D and hardware video decoding build in but since there is not enough memory to actually use it, there's little point in using it. Unless you have some problems with 240/16 split or want to use 32bpp framebuffer at highest resolution. It is possible it will be deleted in the future.
- 192/64 - You need at least 64MB of GPU split to use hardware video acceleration or 3D graphics. It may not be enough GPU memory for hardware accelerated video playback at highest resolution or if you need a lot of GPU memory for things like textures.
- 128/128 - The most RAM GPU can get. Use it when you need a lot of memory for 3D graphic card and hardware accelerated video playback in high resolution. This split is needed for RaspBMC to work properly or to play fullHD video content with omxplayer without problems.
New versions of RaspberryPi has 512 MB of RAM. You have 4 additional splits designed for this version:
- 496/16 and 448/64 - like
192/64split for 256MB respectively but with 256MB more RAM available for ARM. Since GPU has only 16 MB/64MB or RAM, all the limitations from
- 384/128 - Similar to 128/128 split for 256MB - you should get all the graphic chip features but with reasonable amount of ARM memory. This will probably be the most universal split right now.
- 256/256 - Some bonus graphic card memory if you really need it, like for big textures and similar things. While 256MB of ARM memory is bigger than you could possibly have in older RaspberryPis, I don't think this one will be used on many occasions.