Etheora
From XiphWiki
(initial info about etheora.) |
(cleanup) |
||
| (11 intermediate revisions not shown) | |||
| Line 1: | Line 1: | ||
| - | '''Etheora''' is a a simplified API | + | '''Etheora''' is a a simplified API for programming [[Theora]] video encoding/decoding applications with [[Ogg]] containers. It uses and encapsulates libtheora + libogg API and structures, so users need to know very few about video and data containers. |
| + | |||
| + | == Overview - Encoding == | ||
An encoding process is made by these steps: | An encoding process is made by these steps: | ||
| - | |||
| - | |||
| - | |||
| - | /* | + | /* a context declaration. */ |
| - | + | etheora_ctx ec; | |
| - | + | ||
| - | /*encoder | + | /* encoder configuration. */ |
| - | + | etheora_enc_setup(&ec, width, height, ETHEORA_ASPECT_NORMAL, | |
| + | fopen("output-video.ogv"), fopen("debug_info.txt")); | ||
| - | /* | + | /* encoder start. */ |
| - | + | etheora_enc_start(&ec); | |
| - | /* | + | /* drawing next frame, by puting a r,g,b or y,u,v pixel in (i,j) coordinate */ |
| - | + | etheora_enc_rgb_draw(&ec, i, j, r, g, b); | |
| + | /* alternative: etheora_enc_yuv_draw()) */ | ||
| - | /*submiting | + | /* submiting frame to encoding. */ |
| - | + | etheora_enc_nextframe(&ec); | |
| + | /* submiting last frame to encoding by finishing the process. */ | ||
| + | etheora_enc_finish(&ec); | ||
| + | |||
| + | The functions _yuv_ and _rgb_ works transparently with OC_PF_420, OC_PF_422 and OC_PF_PF_444, having the libtheora version used support for them or not. | ||
| + | |||
| + | == Overview - Decoding == | ||
The decoding process is quite similar. | The decoding process is quite similar. | ||
| - | |||
| - | |||
| - | /* | + | /* a context declaration. */ |
| - | + | etheora_ctx ec; | |
| - | /*decoder | + | /* decoder configuration. */ |
| - | + | etheora_dec_setup(&ec, fopen("input-video.ogv"), fopen("debug_info.txt")); | |
| - | /* | + | /* decoder start. */ |
| - | + | etheora_dec_start(&ec); | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | /* | + | /* reading video data. */ |
| - | + | etheora_get_width(&ec); | |
| + | etheora_get_heigth(&ec); | ||
| + | etheora_get_fps_numerator(&ec); | ||
| + | etheora_get_fps_denominator(&ec); | ||
| + | etheora_get_aspect_numerator(&ec); | ||
| + | etheora_get_aspect_denominator(&ec); | ||
| - | /*getting frame | + | /* getting next frame by decoding it. */ |
| - | + | etheora_dec_nextframe(&ec); | |
| - | + | ||
| - | /* | + | /* getting frame data, by reading a r,g,b or y,u,v pixel in (i,j) coordinate*/ |
| - | + | etheora_dec_rgb_read(&ec, i, j, &r, &g, &b) | |
| + | /* alternative: etheora_dec_yuv_read()) */ | ||
| - | the functions _yuv_ and _rgb_ works transparently with OC_PF_420, | + | /* finishing the process. */ |
| - | OC_PF_422 and OC_PF_PF_444, having the libtheora version used support | + | etheora_dec_finish(&ec); |
| - | for them or not. | + | |
| - | + | The functions _yuv_ and _rgb_ works transparently with OC_PF_420, OC_PF_422 and OC_PF_PF_444, having the libtheora version used support for them or not. | |
| + | |||
| + | == Overview - Going Further == | ||
Etheora is documented here: | Etheora is documented here: | ||
| - | http://svn.xiph.org/branches/etheora-0.1/doc/etheora_documentation.pdf | + | http://svn.xiph.org/branches/etheora-0.1.1/doc/etheora_documentation.pdf |
Etheora code is here: | Etheora code is here: | ||
| - | http://svn.xiph.org/branches/etheora-0.1/src/ | + | http://svn.xiph.org/branches/etheora-0.1.1/src/ |
| + | |||
| + | Etheora very simple examples are found here: | ||
| + | http://svn.xiph.org/branches/etheora-0.1.1/examples/ | ||
| + | |||
| + | Etheora still doesn't have audio/speech support. (Although it can get video data from videos with audio). And uses internally the old libtheora API (ie, not the theora-exp). FIXME: The theora-exp API is what's used now on libtheora 1.0. Please use that API instead. | ||
| + | |||
| + | == TODO == | ||
| + | |||
| + | * Vorbis support | ||
| + | * Speex support | ||
| + | * Skeleton support | ||
| - | + | == See also == | |
| - | + | {{Theora}} | |
| - | + | [[Category:Theora]] | |
Latest revision as of 22:02, 6 July 2008
Etheora is a a simplified API for programming Theora video encoding/decoding applications with Ogg containers. It uses and encapsulates libtheora + libogg API and structures, so users need to know very few about video and data containers.
Contents |
Overview - Encoding
An encoding process is made by these steps:
/* a context declaration. */ etheora_ctx ec;
/* encoder configuration. */
etheora_enc_setup(&ec, width, height, ETHEORA_ASPECT_NORMAL,
fopen("output-video.ogv"), fopen("debug_info.txt"));
/* encoder start. */ etheora_enc_start(&ec);
/* drawing next frame, by puting a r,g,b or y,u,v pixel in (i,j) coordinate */ etheora_enc_rgb_draw(&ec, i, j, r, g, b); /* alternative: etheora_enc_yuv_draw()) */
/* submiting frame to encoding. */ etheora_enc_nextframe(&ec);
/* submiting last frame to encoding by finishing the process. */ etheora_enc_finish(&ec);
The functions _yuv_ and _rgb_ works transparently with OC_PF_420, OC_PF_422 and OC_PF_PF_444, having the libtheora version used support for them or not.
Overview - Decoding
The decoding process is quite similar.
/* a context declaration. */ etheora_ctx ec;
/* decoder configuration. */
etheora_dec_setup(&ec, fopen("input-video.ogv"), fopen("debug_info.txt"));
/* decoder start. */ etheora_dec_start(&ec);
/* reading video data. */ etheora_get_width(&ec); etheora_get_heigth(&ec); etheora_get_fps_numerator(&ec); etheora_get_fps_denominator(&ec); etheora_get_aspect_numerator(&ec); etheora_get_aspect_denominator(&ec);
/* getting next frame by decoding it. */ etheora_dec_nextframe(&ec);
/* getting frame data, by reading a r,g,b or y,u,v pixel in (i,j) coordinate*/ etheora_dec_rgb_read(&ec, i, j, &r, &g, &b) /* alternative: etheora_dec_yuv_read()) */
/* finishing the process. */ etheora_dec_finish(&ec);
The functions _yuv_ and _rgb_ works transparently with OC_PF_420, OC_PF_422 and OC_PF_PF_444, having the libtheora version used support for them or not.
Overview - Going Further
Etheora is documented here: http://svn.xiph.org/branches/etheora-0.1.1/doc/etheora_documentation.pdf
Etheora code is here: http://svn.xiph.org/branches/etheora-0.1.1/src/
Etheora very simple examples are found here: http://svn.xiph.org/branches/etheora-0.1.1/examples/
Etheora still doesn't have audio/speech support. (Although it can get video data from videos with audio). And uses internally the old libtheora API (ie, not the theora-exp). FIXME: The theora-exp API is what's used now on libtheora 1.0. Please use that API instead.
TODO
- Vorbis support
- Speex support
- Skeleton support
See also
- Theora Hardware: List of hardware-players supporting Ogg Theora
- TheoraSoftwarePlayers: List of media players that can play Ogg Theora
- TheoraSoftwareEncoders: List of software that can encode to Ogg Theora
- TheoraDecoders: List of decoder implementations
- TheoraEncoders: List of encoder implementations
- List of Theora videos: Get some files to see what the codec's like
- Games that use Theora: List of known games that use Theora
- TheoraTestsuite: Different samples to test player compliance