TheoraPlay

Started by josebita, January 05, 2012, 11:48:57 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Icculus (autor de la mayoría de ports de juegos a linux) ha liberado algo de código bajo licencia zlib que permite reproducir vídeos en formato ogg/theora de forma muy simple y sin hablarse directamente con libogg, libvorbis y libtheora.

Creo que sería muy interesante tener un módulo oficial basado en el código que, por ser BSD/zlib no tendría problemas de licencia y se podría portar a casi cualquier plataforma.
Aquí hay un reproductor completo basado en SDL en 300 líneas y por lo que leo se puede utilizar dándole la ruta a un fichero o, más interesante, usando funciones propias I/O, de forma que no debería ser demasiado complicado de integrar con la capa de abstracción de ficheros de bennu.

Por lo que veo aún le queda un poco de trabajo para que compile en windows pero dudo que tarde en implementarlo más de un par de días, viendo cómo trabaja ese tío.

Aquí las notas que pone icculus:


Quote* TheoraPlay

[...]

Plus, anyone that's used libvorbisfile knows that dropping Vorbis support into a project is dirt simple, so how hard could Theora be...right?

Turns out there isn't an equivalent to libvorbisfile! You have to get down and dirty all the way to the Ogg bitstream level...packets, pages, and yes, even Vorbis decoding without the elegance of a single ov_read() call.

Since I had to write all that integration code anyhow, I abstracted it into a simple API for other apps to use.

I call it "TheoraPlay" ... http://icculus.org/theoraplay/

The benefits of this library are:
- It's simple to use.
- You don't need to know anything about Ogg Theora to pull video and audio out of an .ogv file.
- It decodes on a background thread, behind the scenes, so you can get a performance boost on multicore CPUs.
- It supports output in various video formats (YV12, IYUV, RGB, RGBA).
- It can decode from a filename, or from an i/o callback you provide.
- It's one .c source file and two .h headers that you drop right into your project (plus libogg, libvorbis, and libtheora).
- It's zlib-licensed, which is even more liberal than the Theora license!

Once all the heavy lifting to write TheoraPlay was done, the actual integration into Shank was quite pleasant. It's a few more steps than libvorbisfile (because streaming video+audio is harder than audio by itself), but it's pretty pleasant to use.

SplinterGU

interesante...

yo sigo buscando una lib de video que funcione en todas las plataformas soportadas oficialmente... sino tendre que hacer una capa intermedia y tirar de librerias segun plataforma... pero el problema ahi es que se vera limitado el API para ajustar a lo comun de todas las librerias...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on January 05, 2012, 01:07:38 PM
interesante...

yo sigo buscando una lib de video que funcione en todas las plataformas soportadas oficialmente... sino tendre que hacer una capa intermedia y tirar de librerias segun plataforma... pero el problema ahi es que se vera limitado el API para ajustar a lo comun de todas las librerias...
Yo diría que ésta debería funcionar. Todas las que no son windows funcionan sobre linux, ¿verdad?. Esta lib sólo añade la dependencia con libtheora, contra las otras dos ya se enlaza ahora.
Si quieres te aviso en cuanto compile para windows :)

SplinterGU

mas me preocupa wiz/caanoo, que no tienen X... no se si esto funcionara sobre framebuffer directo... o si tira de SDL quizas funcione...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Quote from: SplinterGU on January 05, 2012, 01:40:34 PM
mas me preocupa wiz/caanoo, que no tienen X... no se si esto funcionara sobre framebuffer directo... o si tira de SDL quizas funcione...
No usa X, pinta directamente sobre SDL, OpenGL o lo que le des.

SplinterGU

fantastico...

si, luego que escribi pense un poco... y me imagine que puede haber dicho cualquier cosa...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2