|
|
Wiki > Main > HowToWriteCodecs (compare)
|
Difference: HowToWriteCodecs (r10 vs. r9)How to write a codec for RockboxCodec structureThe entry point for a codec is in apps/codecs/codec_name.c (e.g. flac.c). This code handles control of the codec using the API as in the example below. Decoding itself is usually handled one level further down (e.g. apps/codecs/libcodec_name/).
#include "codeclib.h"
CODEC_HEADER
/* this is the codec entry point */
enum codec_status codec_main(void)
{
next_track:
if (codec_init()) {
DEBUGF("codec init failed\n");
return CODEC_ERROR;
}
while (!*ci->taginfo_ready && !ci->stop_codec)
ci->sleep(1);
codec_set_replaygain(ci->id3);
/* Init Codec for Track */
/* Make use of 44.1khz */
ci->configure(DSP_SET_FREQUENCY, 44100);
/* Sample depth is 16 bit little endian */
ci->configure(DSP_SET_SAMPLE_DEPTH, 16);
/* Stereo or Mono output ? */
ci->configure(DSP_SET_STEREO_MODE, STEREO_MONO);
/* reset eleapsed */
ci->set_elapsed(0);
/* The main decoder loop */
while (1)
{
ci->yield();
if (ci->stop_codec || ci->new_track)
break;
if (ci->seek_time) {
/* New time is ready in ci->seek_time */
/* absolute position in ms */
/* seek to pos */
/* update elapsed */
ci->set_elapsed(ci->seek_time);
/* seek ready */
ci->seek_complete();
}
/* Generate a buffer full of Audio */
/* Insert a buffer full of samples */
ci->pcmbuf_insert(sample_buffer, NULL, numberOfSamples);
/* update elapsed in ms */
ci->set_elapsed(current_Pos);
if( EndOfFile )
break;
}
if (ci->request_next_track())
goto next_track;
return CODEC_OK;
}
Adding a decoder to RockboxThis is of course subject to change as things move around in the source.
Finally, optimize your codec for your player to maximize battery life: TargetSpecificOptimization r11 - 01 May 2011 - 21:53:18 - MichaelSevakis
Revision r10 - 12 Nov 2010 - 21:12 - MichaelGiacomelliRevision r9 - 22 Nov 2009 - 19:53 - MichaelGiacomelli Copyright © by the contributing authors.
|