Theora playback library / News: Recent posts

SVN migrated to google code

Due to prolonged dissatisfaction with Sourceforge, their new SSH authentication and general service unavailability, all of Cateia Games’s open source projects have been migrated to google code SVN hosting. This includes libtheoraplayer. Nothing has changed, development continues on, just on a new location :)... read more

Posted by Krešimir Špes 2014-04-04

libtheoraplayer - unity plugin poll

Unity Plugin

I'm thinking about writing a unity plugin for libtheoraplayer, what do you think about that? Judging by the Unity docs, it shouldn't be too hard. Please reply on the forum topic if you'd find this useful.


Posted by Krešimir Špes 2014-03-06

alpha animations example

Here's an excellent example of how alpha video animations can be used! This is from one of our upcoming adventure games (and that's not even the best example out there, our other games in development have much more impressive alpha video animations!):

Posted by Krešimir Špes 2014-03-06

I've commited a fix that solves an age long problem with near-edge alpha channel values. This was visible in all alpha channel videos which didn't have sharp borders.

alternate text

Posted by Krešimir Špes 2014-01-19

Theora Playback Library 1.1.0

I've just finished searching and destroying one very old and very nasty bug in looped videos!
It only manifested on slower machines where not all end frames would get dropped upon auto restart, causing playback to stop until those frames that should've been discarded were displayed again.

I fixed it, but while doing it found a better way to handle looping videos that guarantees gapless looping. And that is to transfer the video playback time from a circular timeline to a linear timeline. This simplified frame dropping as well :)... read more

Posted by Krešimir Špes 2014-01-01

Happy New Year from the Theora Playback Library team

We wish you a happy new year, may it bring many theora videos to your game :)

I have a ritual where what I do on the last day of the year and the first day of the next one will determine the general tone for the next year. - So naturally, I'm working on libtheoraplayer :)

But now I have to stop coding, social life calls; gotta go to a (non-theora) new year's party.

"See" you all next year!

Posted by Krešimir Špes 2013-12-31

New projects

I've just added some new projects to the showcase page that I've found online, plus some new titles from my Cateia Games studio.

And I just did a "head count" of all these project and it sums up to .... 52....!

WOW! Just WOW! :)
That makes me very very happy :) Keep on using the library guys! I'm very glad it's useful and be sure that it'll be developed and maintained for a looong looooong time!


Posted by Krešimir Špes 2013-12-21

Watch my lecture on Theora Playback Library in Kyiv, Ukraine

Last month I held a lecture on "Advanced Animation and Effects using Video Technology" in Kyiv, Ukraine as a part of the CasualConnect conference. There was quite the crowd there, way more then the average lecture on the conference :)
It was a very cool and fulfilling experience to "preach" Theora Playback Library and the ideas behind it to the masses :)

Check out the video of my lecture there, hope you like it! read more

Posted by Krešimir Špes 2013-11-21

Assembly help needed

I'm taking a long shot here, but I'd like to ask: Does anyone here have any experience with ARM assembly code?

I have arm optimised code in libtheora that works wonderfully on Android, but fails to compile on iOS. The reason is that the arm assembly code in libtheora is available in ARM syntax and GNU syntax, where as apple's LLVM compiler expects a so called "Unified Assembly Syntax". I've been trying to convert the code for quite a while now but simply don't have too much assembly experience. Is any one of this library's users up to the task? You don't have to rewrite the whole logic, simply convert the code into UAL syntax and make it work on iOS. It should be straightforward for someone with such experience.... read more

Posted by Krešimir Špes 2013-10-05

Android ARM NEON

I've switch the Visual Studio Android project files (via vs-android) to compile the library as armv7a code and enabled ARM NEON optimisations in libyuv. Bundled with ARM NEON optimisations in Theora, the performance on android has been noticeably increased! :)

Posted by Krešimir Špes 2013-09-20

power of 2 stride

Is anyone using this feature? It can be passed as initialisation arguments on createVideoClip().

I plan to remove this feature in the future, so if you're using it, have your voice heard! Head over to the forum thread and write why you need it please.


Posted by Krešimir Špes 2013-08-20

more on libyuv

I finished libyuv integration, it's now available in all current project files, enabled by default. no external resources are needed. this will be included in the 1.1 sdk. in the meantime, if you're eager, you can compile the library for yourself by checking out the project's svn repository.

Posted by Krešimir Špes 2013-08-19

libyuv integration

Besides the actual stream decoding, the bigges video decoding bottleneck is converting the decoded stream from YUV colorspace to whatever you require. (RGB usually).

Initially I made a C implementation and optimised it as much as possible. But that's still a C implementation, and it's performance is compiler dependent.

So, to reduce the performance impact of this process, I have now integrated Google's libyuv library which contains assembly optimised code for colorspace conversion.
So far I tested a few cases and could measure up to 5 times better performance on MacOS using SSSE3 compiled libyuv.... read more

Posted by Krešimir Špes 2013-08-18


I just found out is working on a next-gen video codec Daala!

That's great news because libtheora development seems to have almost stopped which is no suprise because afterall it's an outdated codec. WebM and other free codecs perform better then Theora and it's reasonable to assume it will be used less and less in the future.


Clearly the future of this library is in supporting multiple codecs, but not in a way to make a widespread streaming frontend such as GStreamer. The goal of libtheoraplayer is to be minimalistic, lightweight and fast, developed in the good 'ol Unix spirit: "Do one thing and do it well".... read more

Posted by Krešimir Špes 2013-06-21

Android news

I spent the last few days mostly investigating android options for libtheoraplayer and have narrowed down the choices to these three:

1) libstagefright - this is android's private API for video processing, apparently powerful but very undocumented. I was unable to find a single tutorial online!
I managed to hack some code to compile, link to and run a few commands but nothing past that.... read more

Posted by Krešimir Špes 2013-06-20

Android support

Thanks to my colleague Boris Mikić (borisblizzard), we managed to get libtheoraplayer running on an Android device today!
It runs libtheora only at the moment, but in spite of running a software decoder on an ARM processor, it runs pretty well!

The next step is to try and run a hardware decoded video and grab frames from it. My best guess is using android's libstagefright, hopefully it'll work :)

Posted by Krešimir Špes 2013-04-25

RPG Maker

I found out today that the guys from Enterbrain Inc, owners of RPGMaker game development tools have made a new product: "RPG Maker VX Ace" that uses libtheoraplayer for video playback :)

Glad to see more and more developers using my library!
Also, this move opens the library to a much wider audience ;)


Posted by Krešimir Špes 2013-04-01

demos win32 dependencies

I've included the headers, libs and binaries of the depending libraries needed to compile the demo programs.

It's been a pain having to set up build locations and copy dll's every time, especially for new users, it's one of the most frequent confusions I get when users try to compile the library from source.

So, now all that you need to compile the library and demo programs on Win32, Mac and iOS is contained within the project's svn repository :)

Posted by Krešimir Špes 2013-03-22

Theora Playback Library 1.0.0 Released!

I'm happy to announce that after 2.5 years from the last RC release, I have finally released a stable 1.0.0 release!

Thanks to everyone that contributed with bug report, patches and patience, and especially thanks to all the great companies that used this library and motivated me to continue working on the library :)

This release contains cool new demos, check them out!

I'd like to sign off by saying that you can rest assured that this library will be supported for a long time as I use it in my Company's projects a lot.... read more

Posted by Krešimir Špes 2013-03-03

Almost ready for 1.0.0

Hi Everyone, I'd like to inform you that everything is ready for an official 1.0.0 release!

All that's left now is to

  • finish the sdk creation script
  • prepare the binaries and demo programs
  • update the documentation and upload it on the web

I should be able to find some time to do this soon,
Stay tuned! :)

Posted by Krešimir Špes 2013-02-27

Sourceforge project upgrade

I've upgraded the sourceforge project for libtheoraplayer. The SVN links changed because of it, so keep that in mind if you have the source checkouted.

Let me know if this broke something..

Posted by Krešimir Špes 2013-02-25

1.0.0 on the horizon!

I'm almost ready to "finally" make a 1.0.0 release! No more 1.0RC's!

All 1.0 tasks listed on the roadmap page are done, just a few more sanity checks and some tests to go!

Most recently I finished setting up msvc2010 and msvc2012 project files and I commited my modified distributions of ogg, vorbis, tremor and theora with all the project files set up.

The 1.0.0 binary SDK will include msvc 2008, 2010, 2012 binaries as well as llvm and gcc binaries for the Mac and iOS.... read more

Posted by Krešimir Špes 2013-02-24

Fixes and Improvements

Thanks to help by Vlad from MagicIndie, I've been able to solve 2 major issues that plagued this library:

1) Alpha decoding problem: Sometimes the alpha channel wasn't decoded properly. Completely random! The cause was an uninitialized variable in TheoraVideoClip (facepalm :)

2) Worker thread scheduling: The previous dumb implementation has now been replaced by a smarter implementation that takes into account user priorities, queued playback time and playback state, ensuring more allocated CPU time where it counts.

Posted by Krešimir Špes 2013-02-18

More optimizations

Today I've optimised decoding videos with alpha channels by skipping YUV->RGB conversion for pixels whose alpha value is 0, thus improving pixel conversion speed :)

Also, I've switched the YUV->RGBA conversion in AVFoundation backend to use apple's BGRX decoding and then converting that to RGBA instead of using the project's own YUV conversion functions because apple's implementation works better on iOS.... read more

Posted by Krešimir Špes 2013-02-14

Further down the road-map

Today I've implemented another planned feature for the 1.0.0 release:

Optimizing YUV->RGB conversion by skipping pixels with alpha == 0 value.

You can check the status of the remaining tasks here:

Posted by Krešimir Špes 2013-02-13

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.

No, thanks