flac可正常播放,存在内存泄漏问题
This commit is contained in:
parent
6f0b87e6bb
commit
ceb750efe4
@ -6,7 +6,10 @@
|
|||||||
#include "elog.h"
|
#include "elog.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
|
|
||||||
|
#define DR_FLAC_NO_STDIO
|
||||||
|
#define DR_FLAC_NO_OGG
|
||||||
#define DR_FLAC_IMPLEMENTATION
|
#define DR_FLAC_IMPLEMENTATION
|
||||||
|
#define DR_FLAC_BUFFER_SIZE 16384
|
||||||
#include "dr_flac.h"
|
#include "dr_flac.h"
|
||||||
|
|
||||||
const static char *TAG = "audio_flac";
|
const static char *TAG = "audio_flac";
|
||||||
@ -18,7 +21,7 @@ static size_t flac_read(void* pUserData, void* pBufferOut, size_t bytesToRead)
|
|||||||
UINT br;
|
UINT br;
|
||||||
FRESULT f_result = f_read(pUserData, pBufferOut, bytesToRead, &br); //从文件中读取新的内容
|
FRESULT f_result = f_read(pUserData, pBufferOut, bytesToRead, &br); //从文件中读取新的内容
|
||||||
|
|
||||||
elog_verbose(TAG, "flac_read: reading %d bytes, %d bytes read", bytesToRead, br);
|
// elog_verbose(TAG, "flac_read: reading %d bytes, %d bytes read", bytesToRead, br);
|
||||||
|
|
||||||
if (f_result != FR_OK) {
|
if (f_result != FR_OK) {
|
||||||
elog_error(TAG, "file read error");
|
elog_error(TAG, "file read error");
|
||||||
@ -118,23 +121,25 @@ void music_flac_play(const char *file_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 初始化SAI */
|
/* 初始化SAI */
|
||||||
uint32_t frame_pcm_size = pFlac->maxBlockSizeInPCMFrames * pFlac->channels;
|
uint32_t pcm_sample_count = pFlac->maxBlockSizeInPCMFrames * pFlac->channels; //每一个PCM块的采样数量
|
||||||
audio_hal_start(frame_pcm_size, pFlac->bitsPerSample / 8);
|
audio_hal_start(pcm_sample_count, pFlac->bitsPerSample / 8);
|
||||||
|
|
||||||
elog_info(TAG, "start playing");
|
elog_info(TAG, "music_flac_play: maxBlockSizeInPCMFrames=%d, channels=%d, bitsPerSample=%d",
|
||||||
|
pFlac->maxBlockSizeInPCMFrames, pFlac->channels, pFlac->bitsPerSample);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
/* 解码新一帧FLAC数据 */
|
drflac_int16 *sample = malloc(pcm_sample_count * (pFlac->bitsPerSample / 8));
|
||||||
drflac_int16 *sample = malloc(frame_pcm_size * (pFlac->bitsPerSample / 8));
|
|
||||||
if (sample == NULL) {
|
if (sample == NULL) {
|
||||||
elog_error(TAG, "memory allocation failed");
|
elog_error(TAG, "%d bytes memory allocation failed", pcm_sample_count * (pFlac->bitsPerSample / 8));
|
||||||
goto exit;
|
break;
|
||||||
}
|
}
|
||||||
uint32_t frame_count = drflac_read_pcm_frames_s16(pFlac, frame_pcm_size, sample);
|
/* 解码新一帧FLAC数据 */
|
||||||
|
uint32_t frame_count = drflac_read_pcm_frames_s16(pFlac, pFlac->maxBlockSizeInPCMFrames, sample);
|
||||||
|
|
||||||
/* 将解码后的PCM数据写入SAI */
|
/* 将解码后的PCM数据写入SAI */
|
||||||
if (frame_count != 0) {
|
if (frame_count != 0) {
|
||||||
// elog_verbose(TAG, "writing %d bytes of pcm data", frame_count * sizeof(drflac_int16));
|
elog_verbose(TAG, "writing %d bytes of pcm data", frame_count * sizeof(drflac_int16));
|
||||||
audio_hal_write(sample, frame_count * pFlac->channels);
|
audio_hal_write(sample, pcm_sample_count * pFlac->channels);
|
||||||
} else { //文件已经读取完毕
|
} else { //文件已经读取完毕
|
||||||
free(sample);
|
free(sample);
|
||||||
elog_info(TAG, "play done");
|
elog_info(TAG, "play done");
|
||||||
@ -142,13 +147,13 @@ void music_flac_play(const char *file_name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
audio_hal_stop();
|
|
||||||
|
|
||||||
/* 关闭文件 */
|
/* 关闭文件 */
|
||||||
f_close(file);
|
f_close(file);
|
||||||
free(file);
|
free(file);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
audio_hal_stop();
|
||||||
|
|
||||||
if (pFlac) {
|
if (pFlac) {
|
||||||
drflac_close(pFlac);
|
drflac_close(pFlac);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -153,6 +153,7 @@ void task_main_entry(void *param)
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
music_flac_play("四季音色 - 斑光.flac");
|
music_flac_play("四季音色 - 斑光.flac");
|
||||||
|
music_flac_play("唐九夏 - 一克拉月光.flac");
|
||||||
music_mp3_play("夏川椎菜 - No.1.mp3");
|
music_mp3_play("夏川椎菜 - No.1.mp3");
|
||||||
music_mp3_play("HoneyWorks,早見沙織 - 可愛くてごめん.mp3");
|
music_mp3_play("HoneyWorks,早見沙織 - 可愛くてごめん.mp3");
|
||||||
music_mp3_play("堀江由衣 - silky heart.mp3");
|
music_mp3_play("堀江由衣 - silky heart.mp3");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user