cias_voice_plyer_handle.c 解析
#if VOICE_PLAY_BY_UART
/****************
* 播报器参数初始化
*
* * * **/
void audio_player_param_init()
{
outside_init_stream(&mp3_player, &mp3_player_end, IOT_AUDIO_PLAY_BUF_SIZE);
if (!mp3_player)
mprintf("mp3_player alloc error %x\n", mp3_player);
else
ci_loginfo(LOG_MEDIA, "mp3_player alloc success\n");
set_curr_outside_handle(mp3_player, mp3_player_end);
}
#endif
音频播放器参数的初始化:
主要调用以下函数:包括分配内存,创建二值信号量。
/**
* @brief 初始化创建数据流、结束信号
*
* @param outside_stream 数据流描述符
* @param outside_end_sem 数据流结束信号描述符
* @param full_size 数据缓冲流总大小
*/
void outside_init_stream(audio_play_os_stream_t *outside_stream, audio_play_os_sem_t *outside_end_sem, uint32_t full_size)
{
*outside_stream = audio_play_stream_buffer_create(full_size,4096);
if(NULL == *outside_stream)
{
ci_logerr(LOG_AUDIO_GET_DATA,"audio_play_stream_buffer_create() failed\n");
}
*outside_end_sem = audio_play_semaphore_create_binary();
if(NULL == *outside_end_sem)
{
ci_logerr(LOG_AUDIO_GET_DATA,"outside_end_sem creat fail\r\n");
}
}
/* 上面函数内第一行: audio_play_stream_buffer_create
* @brief 创建数据缓存流
*
* @param xBufferSizeBytes 缓冲区大小
* @param xTriggerLevelBytes 触发深度
* @return audio_play_os_stream_t 缓存流句柄
*/
audio_play_os_stream_t audio_play_stream_buffer_create(size_t xBufferSizeBytes, size_t xTriggerLevelBytes)
{
return xStreamBufferCreate(xBufferSizeBytes, xTriggerLevelBytes);
}
返回最上级:set_curr_outside_handle(mp3_player, mp3_player_end);
/**
* @brief 设置当前使用的数据流、结束信号描述符
*
* @param outside_stream 数据流描述符
* @param outside_end_sem 数据流结束信号描述符
*/
void set_curr_outside_handle(audio_play_os_stream_t outside_stream, audio_play_os_sem_t outside_end_sem)
{
g_outside_stream = outside_stream;
g_outside_end_sem = outside_end_sem;
}
可见是设置了两个全局变量,这两个全局变量应该用的很频繁

浙公网安备 33010602011771号