Etheora: Difference between revisions
(initial info about etheora.) |
m (minor visual changes.) |
||
Line 2: | Line 2: | ||
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_configure(&ec, width, height, ETHEORA_ASPECT_NORMAL, | |||
fopen("output-video.ogg"), 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 last frame to encoding by finishing the process.*/ | /* submiting frame to encoding. */ | ||
etheora_enc_finish(&ec); | etheora_enc_nextframe(&ec); | ||
/* submiting last frame to encoding by finishing the process. */ | |||
etheora_enc_finish(&ec); | |||
The decoding process is quite similar. | The decoding process is quite similar. | ||
/*decoder configuration.*/ | /* a context declaration. */ | ||
etheora_dec_configure(&ec, fopen("input-video.ogg"), fopen("debug_info.txt")); | etheora_ctx *ec; | ||
/* decoder configuration. */ | |||
etheora_dec_configure(&ec, fopen("input-video.ogg"), fopen("debug_info.txt")); | |||
/*decoder start.*/ | /* decoder start. */ | ||
etheora_dec_start(&ec); | etheora_dec_start(&ec); | ||
/*reading video data.*/ | /* reading video data. */ | ||
etheora_get_width(&ec); | etheora_get_width(&ec); | ||
etheora_get_heigth(&ec); | etheora_get_heigth(&ec); | ||
etheora_get_fps_numerator(&ec); | etheora_get_fps_numerator(&ec); | ||
etheora_get_fps_denominator(&ec); | etheora_get_fps_denominator(&ec); | ||
etheora_get_aspect_numerator(&ec); | etheora_get_aspect_numerator(&ec); | ||
etheora_get_aspect_denominator(&ec); | etheora_get_aspect_denominator(&ec); | ||
/*getting next frame by decoding it.*/ | /* getting next frame by decoding it. */ | ||
etheora_dec_nextframe(&ec); | etheora_dec_nextframe(&ec); | ||
/*getting frame data, by reading a r,g,b or y,u,v pixel in (i,j) coordinate*/ | /* 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) | etheora_dec_rgb_read(&ec, i, j, &r, &g, &b) | ||
etheora_dec_yuv_read()) | /* alternative: etheora_dec_yuv_read()) */ | ||
/* finishing the process.*/ | /* finishing the process. */ | ||
etheora_dec_finish(&ec); | etheora_dec_finish(&ec); | ||
the functions _yuv_ and _rgb_ works transparently with OC_PF_420, | 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. | ||
OC_PF_422 and OC_PF_PF_444, having the libtheora version used support | |||
for them or not. | |||
Etheora is documented here: | Etheora is documented here: |
Revision as of 08:54, 20 November 2007
Etheora is a a simplified API to 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.
An encoding process is made by these steps:
/* a context declaration. */ etheora_ctx *ec;
/* encoder configuration. */ etheora_enc_configure(&ec, width, height, ETHEORA_ASPECT_NORMAL, fopen("output-video.ogg"), 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 decoding process is quite similar.
/* a context declaration. */ etheora_ctx *ec;
/* decoder configuration. */ etheora_dec_configure(&ec, fopen("input-video.ogg"), 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.
Etheora is documented here: http://svn.xiph.org/branches/etheora-0.1/doc/etheora_documentation.pdf
Etheora code is here: http://svn.xiph.org/branches/etheora-0.1/src/
Etheora examples are here: http://svn.xiph.org/branches/etheora-0.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).