forked from len0rd/rockbox
Add support for compiling encoders without adjustable CPU frequency and/or IRAM.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11625 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b57f23139b
commit
6ae46065b4
4 changed files with 69 additions and 23 deletions
|
@ -298,7 +298,9 @@ static bool init_encoder(void)
|
||||||
ci->enc_set_parameters == NULL ||
|
ci->enc_set_parameters == NULL ||
|
||||||
ci->enc_get_chunk == NULL ||
|
ci->enc_get_chunk == NULL ||
|
||||||
ci->enc_finish_chunk == NULL ||
|
ci->enc_finish_chunk == NULL ||
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->enc_pcm_buf_near_empty == NULL ||
|
ci->enc_pcm_buf_near_empty == NULL ||
|
||||||
|
#endif
|
||||||
ci->enc_get_pcm_data == NULL )
|
ci->enc_get_pcm_data == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -325,7 +327,9 @@ static bool init_encoder(void)
|
||||||
/* main codec entry point */
|
/* main codec entry point */
|
||||||
enum codec_status codec_main(void)
|
enum codec_status codec_main(void)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
bool cpu_boosted;
|
bool cpu_boosted;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!init_encoder())
|
if (!init_encoder())
|
||||||
{
|
{
|
||||||
|
@ -336,8 +340,10 @@ enum codec_status codec_main(void)
|
||||||
/* main application waits for this flag during encoder loading */
|
/* main application waits for this flag during encoder loading */
|
||||||
ci->enc_codec_loaded = 1;
|
ci->enc_codec_loaded = 1;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* main encoding loop */
|
/* main encoding loop */
|
||||||
while(!ci->stop_codec)
|
while(!ci->stop_codec)
|
||||||
|
@ -351,12 +357,13 @@ enum codec_status codec_main(void)
|
||||||
if (ci->stop_codec)
|
if (ci->stop_codec)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
chunk = ci->enc_get_chunk();
|
chunk = ci->enc_get_chunk();
|
||||||
chunk->enc_size = enc_size;
|
chunk->enc_size = enc_size;
|
||||||
chunk->num_pcm = PCM_SAMP_PER_CHUNK;
|
chunk->num_pcm = PCM_SAMP_PER_CHUNK;
|
||||||
|
@ -368,17 +375,20 @@ enum codec_status codec_main(void)
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
cpu_boosted = false;
|
cpu_boosted = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted) /* set initial boost state */
|
if (cpu_boosted) /* set initial boost state */
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset parameters to initial state */
|
/* reset parameters to initial state */
|
||||||
ci->enc_set_parameters(NULL);
|
ci->enc_set_parameters(NULL);
|
||||||
|
|
|
@ -2265,9 +2265,9 @@ static void encode_frame(char *buffer, struct enc_chunk_hdr *chunk)
|
||||||
|
|
||||||
chunk->enc_size = cfg.byte_per_frame + cfg.mpg.padding;
|
chunk->enc_size = cfg.byte_per_frame + cfg.mpg.padding;
|
||||||
|
|
||||||
/* finish this chunk by adding sideinfo header data */
|
/* finish this chunk by adding sideinfo header data */
|
||||||
CodedData.bitpos = 0;
|
CodedData.bitpos = 0;
|
||||||
encodeSideInfo( cfg.cod_info );
|
encodeSideInfo( cfg.cod_info );
|
||||||
|
|
||||||
#ifdef ROCKBOX_BIG_ENDIAN
|
#ifdef ROCKBOX_BIG_ENDIAN
|
||||||
/* copy chunk to enc_buffer */
|
/* copy chunk to enc_buffer */
|
||||||
|
@ -2419,7 +2419,9 @@ static bool enc_init(void)
|
||||||
ci->enc_set_parameters == NULL ||
|
ci->enc_set_parameters == NULL ||
|
||||||
ci->enc_get_chunk == NULL ||
|
ci->enc_get_chunk == NULL ||
|
||||||
ci->enc_finish_chunk == NULL ||
|
ci->enc_finish_chunk == NULL ||
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->enc_pcm_buf_near_empty == NULL ||
|
ci->enc_pcm_buf_near_empty == NULL ||
|
||||||
|
#endif
|
||||||
ci->enc_get_pcm_data == NULL ||
|
ci->enc_get_pcm_data == NULL ||
|
||||||
ci->enc_unget_pcm_data == NULL )
|
ci->enc_unget_pcm_data == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
@ -2453,7 +2455,9 @@ static bool enc_init(void)
|
||||||
|
|
||||||
enum codec_status codec_main(void)
|
enum codec_status codec_main(void)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
bool cpu_boosted;
|
bool cpu_boosted;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Generic codec initialisation */
|
/* Generic codec initialisation */
|
||||||
if (!enc_init())
|
if (!enc_init())
|
||||||
|
@ -2465,8 +2469,10 @@ enum codec_status codec_main(void)
|
||||||
/* main application waits for this flag during encoder loading */
|
/* main application waits for this flag during encoder loading */
|
||||||
ci->enc_codec_loaded = 1;
|
ci->enc_codec_loaded = 1;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* main encoding loop */
|
/* main encoding loop */
|
||||||
while (!ci->stop_codec)
|
while (!ci->stop_codec)
|
||||||
|
@ -2480,12 +2486,13 @@ enum codec_status codec_main(void)
|
||||||
if (ci->stop_codec)
|
if (ci->stop_codec)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
chunk = ci->enc_get_chunk();
|
chunk = ci->enc_get_chunk();
|
||||||
chunk->enc_data = ENC_CHUNK_SKIP_HDR(chunk->enc_data, chunk);
|
chunk->enc_data = ENC_CHUNK_SKIP_HDR(chunk->enc_data, chunk);
|
||||||
|
|
||||||
|
@ -2502,17 +2509,20 @@ enum codec_status codec_main(void)
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted && ci->enc_pcm_buf_near_empty())
|
if (cpu_boosted && ci->enc_pcm_buf_near_empty())
|
||||||
{
|
{
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
cpu_boosted = false;
|
cpu_boosted = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cpu_boosted) /* set initial boost state */
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
if (cpu_boosted) /* set initial boost state */
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset parameters to initial state */
|
/* reset parameters to initial state */
|
||||||
ci->enc_set_parameters(NULL);
|
ci->enc_set_parameters(NULL);
|
||||||
|
|
|
@ -46,7 +46,7 @@ struct riff_header
|
||||||
uint8_t data_id[4]; /* 24h - "data" */
|
uint8_t data_id[4]; /* 24h - "data" */
|
||||||
uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */
|
uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */
|
||||||
/* unsigned char *data; 2ch - actual sound data */
|
/* unsigned char *data; 2ch - actual sound data */
|
||||||
};
|
} __attribute__((packed));
|
||||||
|
|
||||||
#define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */
|
#define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */
|
||||||
#define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */
|
#define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */
|
||||||
|
@ -287,7 +287,9 @@ static bool init_encoder(void)
|
||||||
ci->enc_set_parameters == NULL ||
|
ci->enc_set_parameters == NULL ||
|
||||||
ci->enc_get_chunk == NULL ||
|
ci->enc_get_chunk == NULL ||
|
||||||
ci->enc_finish_chunk == NULL ||
|
ci->enc_finish_chunk == NULL ||
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->enc_pcm_buf_near_empty == NULL ||
|
ci->enc_pcm_buf_near_empty == NULL ||
|
||||||
|
#endif
|
||||||
ci->enc_get_pcm_data == NULL )
|
ci->enc_get_pcm_data == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -314,7 +316,9 @@ static bool init_encoder(void)
|
||||||
/* main codec entry point */
|
/* main codec entry point */
|
||||||
enum codec_status codec_main(void)
|
enum codec_status codec_main(void)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
bool cpu_boosted;
|
bool cpu_boosted;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!init_encoder())
|
if (!init_encoder())
|
||||||
{
|
{
|
||||||
|
@ -325,8 +329,10 @@ enum codec_status codec_main(void)
|
||||||
/* main application waits for this flag during encoder loading */
|
/* main application waits for this flag during encoder loading */
|
||||||
ci->enc_codec_loaded = 1;
|
ci->enc_codec_loaded = 1;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* main encoding loop */
|
/* main encoding loop */
|
||||||
while(!ci->stop_codec)
|
while(!ci->stop_codec)
|
||||||
|
@ -340,12 +346,13 @@ enum codec_status codec_main(void)
|
||||||
if (ci->stop_codec)
|
if (ci->stop_codec)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
chunk = ci->enc_get_chunk();
|
chunk = ci->enc_get_chunk();
|
||||||
chunk->enc_size = enc_size;
|
chunk->enc_size = enc_size;
|
||||||
chunk->num_pcm = PCM_SAMP_PER_CHUNK;
|
chunk->num_pcm = PCM_SAMP_PER_CHUNK;
|
||||||
|
@ -357,17 +364,20 @@ enum codec_status codec_main(void)
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
cpu_boosted = false;
|
cpu_boosted = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cpu_boosted) /* set initial boost state */
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
|
if (cpu_boosted) /* set initial boost state */
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset parameters to initial state */
|
/* reset parameters to initial state */
|
||||||
ci->enc_set_parameters(NULL);
|
ci->enc_set_parameters(NULL);
|
||||||
|
|
|
@ -29,7 +29,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
uint8_t type; /* Type of metadata */
|
uint8_t type; /* Type of metadata */
|
||||||
uint8_t word_size; /* Size of metadata in words */
|
uint8_t word_size; /* Size of metadata in words */
|
||||||
} WavpackMetadataHeader;
|
} __attribute__((packed)) WavpackMetadataHeader;
|
||||||
|
|
||||||
struct riff_header
|
struct riff_header
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@ struct riff_header
|
||||||
uint8_t data_id[4]; /* 24h - "data" */
|
uint8_t data_id[4]; /* 24h - "data" */
|
||||||
uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */
|
uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */
|
||||||
/* unsigned char *data; 2ch - actual sound data */
|
/* unsigned char *data; 2ch - actual sound data */
|
||||||
};
|
} __attribute__((packed));
|
||||||
|
|
||||||
#define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */
|
#define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */
|
||||||
#define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */
|
#define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */
|
||||||
|
@ -101,13 +101,19 @@ static const struct riff_header riff_header =
|
||||||
static void chunk_to_int32(int32_t *src) ICODE_ATTR;
|
static void chunk_to_int32(int32_t *src) ICODE_ATTR;
|
||||||
static void chunk_to_int32(int32_t *src)
|
static void chunk_to_int32(int32_t *src)
|
||||||
{
|
{
|
||||||
int32_t *dst = (int32_t *)input_buffer + PCM_SAMP_PER_CHUNK;
|
int32_t *src_end, *dst;
|
||||||
int32_t *src_end = dst + PCM_SAMP_PER_CHUNK;
|
#ifdef USE_IRAM
|
||||||
|
|
||||||
/* copy to IRAM before converting data */
|
/* copy to IRAM before converting data */
|
||||||
|
dst = (int32_t *)input_buffer + PCM_SAMP_PER_CHUNK;
|
||||||
|
src_end = dst + PCM_SAMP_PER_CHUNK;
|
||||||
|
|
||||||
memcpy(dst, src, PCM_CHUNK_SIZE);
|
memcpy(dst, src, PCM_CHUNK_SIZE);
|
||||||
|
|
||||||
src = dst;
|
src = dst;
|
||||||
|
#else
|
||||||
|
src_end = src + PCM_SAMP_PER_CHUNK;
|
||||||
|
#endif
|
||||||
|
|
||||||
dst = (int32_t *)input_buffer;
|
dst = (int32_t *)input_buffer;
|
||||||
|
|
||||||
if (config.num_channels == 1)
|
if (config.num_channels == 1)
|
||||||
|
@ -335,7 +341,9 @@ static bool init_encoder(void)
|
||||||
ci->enc_set_parameters == NULL ||
|
ci->enc_set_parameters == NULL ||
|
||||||
ci->enc_get_chunk == NULL ||
|
ci->enc_get_chunk == NULL ||
|
||||||
ci->enc_finish_chunk == NULL ||
|
ci->enc_finish_chunk == NULL ||
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->enc_pcm_buf_near_empty == NULL ||
|
ci->enc_pcm_buf_near_empty == NULL ||
|
||||||
|
#endif
|
||||||
ci->enc_get_pcm_data == NULL ||
|
ci->enc_get_pcm_data == NULL ||
|
||||||
ci->enc_unget_pcm_data == NULL )
|
ci->enc_unget_pcm_data == NULL )
|
||||||
return false;
|
return false;
|
||||||
|
@ -374,7 +382,9 @@ static bool init_encoder(void)
|
||||||
|
|
||||||
enum codec_status codec_main(void)
|
enum codec_status codec_main(void)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
bool cpu_boosted;
|
bool cpu_boosted;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* initialize params and config */
|
/* initialize params and config */
|
||||||
if (!init_encoder())
|
if (!init_encoder())
|
||||||
|
@ -386,8 +396,10 @@ enum codec_status codec_main(void)
|
||||||
/* main application waits for this flag during encoder loading */
|
/* main application waits for this flag during encoder loading */
|
||||||
ci->enc_codec_loaded = 1;
|
ci->enc_codec_loaded = 1;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* main encoding loop */
|
/* main encoding loop */
|
||||||
while(!ci->stop_codec)
|
while(!ci->stop_codec)
|
||||||
|
@ -406,12 +418,13 @@ enum codec_status codec_main(void)
|
||||||
|
|
||||||
abort_chunk = true;
|
abort_chunk = true;
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
if (!cpu_boosted && ci->enc_pcm_buf_near_empty() == 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(true);
|
ci->cpu_boost(true);
|
||||||
cpu_boosted = true;
|
cpu_boosted = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
chunk = ci->enc_get_chunk();
|
chunk = ci->enc_get_chunk();
|
||||||
|
|
||||||
/* reset counts and pointer */
|
/* reset counts and pointer */
|
||||||
|
@ -455,17 +468,20 @@ enum codec_status codec_main(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
if (cpu_boosted && ci->enc_pcm_buf_near_empty() != 0)
|
||||||
{
|
{
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
cpu_boosted = false;
|
cpu_boosted = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
ci->yield();
|
ci->yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
||||||
if (cpu_boosted) /* set initial boost state */
|
if (cpu_boosted) /* set initial boost state */
|
||||||
ci->cpu_boost(false);
|
ci->cpu_boost(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* reset parameters to initial state */
|
/* reset parameters to initial state */
|
||||||
ci->enc_set_parameters(NULL);
|
ci->enc_set_parameters(NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue