This commit is contained in:
刘可亮
2024-01-27 08:47:24 +08:00
parent d3bd993b5f
commit 9f7ba67007
2345 changed files with 74421 additions and 76616 deletions

View File

@@ -56,24 +56,24 @@ struct audio_frame_manager *audio_fm_create(struct audio_frame_manager_cfg *cfg)
//size_t size;
int i;
logi("create frame manager");
if (!init_cfg || init_cfg->samples_per_frame <= 0){
if (!init_cfg || init_cfg->samples_per_frame <= 0) {
loge("para error!!!\n");
return NULL;
}
fm = (struct audio_frame_manager *)mpp_alloc(sizeof(struct audio_frame_manager));
if (!fm){
if (!fm) {
loge("mpp_alloc audio_frame_manager error!!!\n");
return NULL;
}
memset(fm,0x00,sizeof(struct audio_frame_manager));
if(init_cfg->frame_count <= 0){
if (init_cfg->frame_count <= 0) {
init_cfg->frame_count = 16;
}else if(init_cfg->frame_count < MAX_FRAME_COUNT){
} else if (init_cfg->frame_count < MAX_FRAME_COUNT) {
}else{
} else {
init_cfg->frame_count = MAX_FRAME_COUNT;
}
fm->empty_num = init_cfg->frame_count;
@@ -100,7 +100,7 @@ struct audio_frame_manager *audio_fm_create(struct audio_frame_manager_cfg *cfg)
frame_impl->samples_per_frame = init_cfg->samples_per_frame;
frame_impl->frame.size = frame_impl->bits_per_sample * init_cfg->samples_per_frame/8;
frame_impl->frame.data = mpp_alloc(frame_impl->frame.size);
if(frame_impl->frame.data == NULL){
if (frame_impl->frame.data == NULL) {
loge("mpp_alloc frame_impl error,%d!!\n",i);
}
frame_impl++;
@@ -164,9 +164,9 @@ int audio_fm_destroy(struct audio_frame_manager *fm)
pthread_mutex_destroy(&fm->lock);
frame = fm->frame_node;
if(frame != NULL){
if (frame != NULL) {
for (i = 0; i < fm->frame_count; i++) {
if(frame->frame.data != NULL){
if (frame->frame.data != NULL) {
mpp_free(frame->frame.data);
frame->frame.data = NULL;
}
@@ -210,26 +210,26 @@ int audio_fm_decoder_put_frame(struct audio_frame_manager *fm, struct aic_audio_
struct audio_frame_impl *frm_impl = (struct audio_frame_impl *)frame;
int match = 0;
if (!fm || !frm_impl){
if (!fm || !frm_impl) {
loge("para error:fm or frame!\n");
return -1;
}
pthread_mutex_lock(&fm->lock);
if(!mpp_list_empty(&fm->using_list)){
if (!mpp_list_empty(&fm->using_list)) {
struct audio_frame_impl *frm=NULL,*frm1=NULL;
mpp_list_for_each_entry_safe(frm, frm1, &fm->using_list, list){
if(frm_impl == frm){
mpp_list_for_each_entry_safe(frm, frm1, &fm->using_list, list) {
if (frm_impl == frm) {
match = 1;
break;
}
}
}else{
} else {
pthread_mutex_unlock(&fm->lock);
loge("frame addr not match!\n");
return -1;
}
if(!match){
if (!match) {
pthread_mutex_unlock(&fm->lock);
loge("frame addr not match!\n");
return -1;
@@ -279,25 +279,25 @@ int audio_fm_render_put_frame(struct audio_frame_manager *fm, struct aic_audio_f
struct audio_frame_impl *frm=NULL,*frm1=NULL;
int match = 0;
if (!fm || !frame){
if (!fm || !frame) {
loge("para error:fm or frame!\n");
return -1;
}
pthread_mutex_lock(&fm->lock);
if(!mpp_list_empty(&fm->used_list)){
mpp_list_for_each_entry_safe(frm, frm1, &fm->used_list, list){
if(frame->data == frm->frame.data){
if (!mpp_list_empty(&fm->used_list)) {
mpp_list_for_each_entry_safe(frm, frm1, &fm->used_list, list) {
if (frame->data == frm->frame.data) {
match = 1;
break;
}
}
}else{
} else {
pthread_mutex_unlock(&fm->lock);
loge("frame addr not match!\n");
return -1;
}
if(!match){
if (!match) {
pthread_mutex_unlock(&fm->lock);
loge("frame addr not match!\n");
return -1;
@@ -326,43 +326,49 @@ int audio_fm_get_render_frame_num(struct audio_frame_manager *fm)
}
int audio_fm_reset(struct audio_frame_manager *fm)
{
struct audio_frame_impl *frame = NULL,*frame1 = NULL;
struct audio_frame_impl *frame = NULL,*frame1 = NULL;
int i = 0;
if (!fm){
loge("audio_fm_reset fail:fm=NULL\n");
return -1;
}
if (!fm) {
loge("audio_fm_reset fail:fm=NULL\n");
return -1;
}
pthread_mutex_lock(&fm->lock);
pthread_mutex_lock(&fm->lock);
if (!mpp_list_empty(&fm->used_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->used_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
if (!mpp_list_empty(&fm->used_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->used_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
if (!mpp_list_empty(&fm->using_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->using_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
if (!mpp_list_empty(&fm->using_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->using_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
if (!mpp_list_empty(&fm->ready_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->ready_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
if (!mpp_list_empty(&fm->ready_list)) {
mpp_list_for_each_entry_safe(frame, frame1, &fm->ready_list, list) {
mpp_list_del_init(&frame->list);
mpp_list_add_tail(&frame->list, &fm->empty_list);
}
}
//clear flags
frame = fm->frame_node;
for (i = 0; i < fm->frame_count; i++) {
frame->frame.flag = 0;
frame++;
}
logd("empty_num:%d,ready_num:%d,using_num:%d,used_num:%d\n",fm->empty_num,fm->ready_num,fm->using_num,fm->used_num);
fm->empty_num = fm->frame_count;
fm->ready_num = 0;
fm->using_num = 0;
fm->used_num = 0;
logd("empty_num:%d,ready_num:%d,using_num:%d,used_num:%d\n",fm->empty_num,fm->ready_num,fm->using_num,fm->used_num);
fm->empty_num = fm->frame_count;
fm->ready_num = 0;
fm->using_num = 0;
fm->used_num = 0;
pthread_mutex_unlock(&fm->lock);
pthread_mutex_unlock(&fm->lock);
return 0;
return 0;
}

View File

@@ -10,6 +10,7 @@
#include <string.h>
#include <pthread.h>
#include <inttypes.h>
#include "aic_audio_decoder.h"
#include "audio_packet_manager.h"
@@ -54,7 +55,7 @@ struct audio_packet_manager *audio_pm_create(struct aic_audio_decode_config *cfg
logi("create packet manager");
if(init_cfg == NULL){
if (init_cfg == NULL) {
init_cfg = &default_cfg;
init_cfg->packet_buffer_size = 16*1024;
init_cfg->packet_count = 8;
@@ -80,7 +81,7 @@ struct audio_packet_manager *audio_pm_create(struct aic_audio_decode_config *cfg
pm->buffer_start =mpp_alloc(pm->buffer_size);
pm->buffer_end = pm->buffer_start + pm->buffer_size - 1;
logi("packet manager create %d count packet, buffer size %ld", pm->packet_count, pm->buffer_size);
logi("packet manager create %d count packet, buffer size %zu", pm->packet_count, pm->buffer_size);
pm->read_offset = 0;
pm->write_offset = 0;
@@ -104,7 +105,7 @@ struct audio_packet_manager *audio_pm_create(struct aic_audio_decode_config *cfg
int audio_pm_destroy(struct audio_packet_manager *pm)
{
if (!pm){
if (!pm) {
loge("param error!!!\n");
return -1;
}
@@ -127,7 +128,7 @@ int audio_pm_dequeue_empty_packet(struct audio_packet_manager *pm, struct mpp_pa
//size_t write_offset = 0;
//size_t pos_offset;
if (!pm || !packet || size <= 0){
if (!pm || !packet || size <= 0) {
loge("param error!!!\n");
return -1;
}
@@ -138,14 +139,14 @@ int audio_pm_dequeue_empty_packet(struct audio_packet_manager *pm, struct mpp_pa
left_size = pm->buffer_size - pm->write_offset;
if (pm->available_size < size) {
logd("packet manager dequeue mpp packet size %ld > available size %ld", size, pm->available_size);
logd("packet manager dequeue mpp packet size %zu > available size %zu", size, pm->available_size);
pthread_mutex_unlock(&pm->lock);
return -1;
}
if (pm->write_offset >= pm->read_offset) {
if (left_size < size && pm->read_offset < size) {
logd("packet manager dequeue mpp packet size failed,size:%lu, read offset %lu write offset %lu",size,
logd("packet manager dequeue mpp packet size failed,size:%zu, read offset %zu write offset %zu",size,
pm->read_offset, pm->write_offset);
pthread_mutex_unlock(&pm->lock);
return -1;
@@ -166,16 +167,16 @@ int audio_pm_dequeue_empty_packet(struct audio_packet_manager *pm, struct mpp_pa
if (pm->write_offset >= pm->read_offset) {
if (left_size >= size) {
//* if left_size is enough to store this packet
// if left_size is enough to store this packet
pm->write_offset += size;
pm->available_size -= size;
if (pm->write_offset == pm->buffer_size)
pm->write_offset = 0;
} else if (pm->read_offset >= size) {
logd("left_size: %lu, size: %lu", left_size, size);
//* if left_size is not enough to store this packet,
//* we store this packet from the start of stream buffer
logd("left_size: %zu, size: %zu", left_size, size);
// if left_size is not enough to store this packet,
// we store this packet from the start of stream buffer
pm->write_offset = size;
pm->available_size -= (size + left_size);
pkt_impl->pos_offset = left_size;
@@ -209,7 +210,7 @@ int audio_pm_enqueue_ready_packet(struct audio_packet_manager *pm, struct mpp_pa
size_t left_offset;
if (!pm || !packet){
if (!pm || !packet) {
loge("param error!!!\n");
return -1;
}
@@ -280,7 +281,7 @@ struct mpp_packet *audio_pm_dequeue_ready_packet(struct audio_packet_manager *pm
//logd("packet manager dequeue ready packet");
if (!pm){
if (!pm) {
loge("param error!!!\n");
return NULL;
}
@@ -306,7 +307,7 @@ int audio_pm_enqueue_empty_packet(struct audio_packet_manager *pm, struct mpp_pa
//logd("packet manager enqueue empty packet");
if (!pm || !pkt_impl){
if (!pm || !pkt_impl) {
loge("param error!!!\n");
return -1;
}
@@ -341,19 +342,19 @@ int audio_pm_get_ready_packet_num(struct audio_packet_manager *pm)
int audio_pm_reset(struct audio_packet_manager *pm)
{
if (!pm){
if (!pm) {
loge("audio_pm_reset fail:fm=NULL\n");
return -1;
}
pthread_mutex_lock(&pm->lock);
if(!mpp_list_empty(&pm->ready_list)){
if (!mpp_list_empty(&pm->ready_list)) {
struct audio_packet_impl *pkt1=NULL,*pkt2=NULL;
mpp_list_for_each_entry_safe(pkt1,pkt2,&pm->ready_list,list){
mpp_list_for_each_entry_safe(pkt1,pkt2,&pm->ready_list,list) {
mpp_list_del_init(&pkt1->list);
mpp_list_add_tail(&pkt1->list, &pm->empty_list);
}
}
logd("read_offset:%ld,write_offset:%ld,empty_num:%d,ready_num:%d,available_size:%ld\n"
logd("read_offset:%zu,write_offset:%zu,empty_num:%d,ready_num:%d,available_size:%zu\n"
,pm->read_offset
,pm->write_offset
,pm->empty_num

View File

@@ -49,18 +49,18 @@ static enum mad_flow input(void *priv, struct mad_stream *stream)
struct mp3_audio_decoder *mp3_dcecoder = (struct mp3_audio_decoder *)priv;
int unproc_data_len = 0;
int need_proc_data_len = 0;
if(mp3_dcecoder->stop_flag == 1 || mp3_dcecoder->stream_end == 1){
if (mp3_dcecoder->stop_flag == 1 || mp3_dcecoder->stream_end == 1) {
logd("MAD_FLOW_STOP!!!!\n");
return MAD_FLOW_STOP;
}
unproc_data_len = stream->bufend - stream->next_frame;
// 1 get unprocess data and data len,move unporocess data to buffer start.
if(unproc_data_len > 0){
if (unproc_data_len > 0) {
memcpy(mp3_dcecoder->mad_buffer,stream->next_frame,unproc_data_len);
}
// 2
if(mp3_dcecoder->curr_packet_unused_len > 0){
if(mp3_dcecoder->curr_packet_unused_len + unproc_data_len <= MAD_BUFFER_LEEN){
if (mp3_dcecoder->curr_packet_unused_len > 0) {
if (mp3_dcecoder->curr_packet_unused_len + unproc_data_len <= MAD_BUFFER_LEEN) {
memcpy(mp3_dcecoder->mad_buffer+unproc_data_len
,mp3_dcecoder->curr_packet->data+mp3_dcecoder->curr_packet->size - mp3_dcecoder->curr_packet_unused_len
,mp3_dcecoder->curr_packet_unused_len);
@@ -68,7 +68,7 @@ static enum mad_flow input(void *priv, struct mad_stream *stream)
mp3_dcecoder->curr_packet_unused_len = 0;
audio_pm_enqueue_empty_packet(mp3_dcecoder->decoder.pm, mp3_dcecoder->curr_packet);
logd("need_proc_data_len:%d,unproc_data_len:%d,curr_packet_unused_len:%d\n",need_proc_data_len,unproc_data_len,mp3_dcecoder->curr_packet_unused_len);
}else{
} else {
memcpy(mp3_dcecoder->mad_buffer+unproc_data_len
,mp3_dcecoder->curr_packet->data+mp3_dcecoder->curr_packet->size - mp3_dcecoder->curr_packet_unused_len
,MAD_BUFFER_LEEN -unproc_data_len);
@@ -78,15 +78,15 @@ static enum mad_flow input(void *priv, struct mad_stream *stream)
logd("need_proc_data_len:%d,unproc_data_len:%d,curr_packet_unused_len:%d\n",need_proc_data_len,unproc_data_len,mp3_dcecoder->curr_packet_unused_len);
}
mad_stream_buffer(stream, mp3_dcecoder->mad_buffer,need_proc_data_len);
if((mp3_dcecoder->curr_packet->flag & PACKET_FLAG_EOS) && (mp3_dcecoder->curr_packet_unused_len == 0)) {
if ((mp3_dcecoder->curr_packet->flag & PACKET_FLAG_EOS) && (mp3_dcecoder->curr_packet_unused_len == 0)) {
//logd("PACKET_FLAG_EOS--->MAD_FLOW_STOP!!!!\n");
mp3_dcecoder->stream_end = 1;
}
return MAD_FLOW_CONTINUE;
}
// get ready packet
while((mp3_dcecoder->curr_packet = audio_pm_dequeue_ready_packet(mp3_dcecoder->decoder.pm)) == NULL){
if(mp3_dcecoder->stop_flag == 1){// force to stop
while ((mp3_dcecoder->curr_packet = audio_pm_dequeue_ready_packet(mp3_dcecoder->decoder.pm)) == NULL) {
if (mp3_dcecoder->stop_flag == 1) {// force to stop
logd("force to stop!!!\n");
return MAD_FLOW_STOP;
}
@@ -95,11 +95,11 @@ static enum mad_flow input(void *priv, struct mad_stream *stream)
mp3_dcecoder->curr_packet_info.flag = mp3_dcecoder->curr_packet->flag;
mp3_dcecoder->curr_packet_info.pts = mp3_dcecoder->curr_packet->pts;
if(mp3_dcecoder->first_packet){
if (mp3_dcecoder->first_packet) {
mp3_dcecoder->first_pts = mp3_dcecoder->curr_packet->pts;
mp3_dcecoder->first_packet = 0;
}
if(unproc_data_len + mp3_dcecoder->curr_packet->size <= MAD_BUFFER_LEEN){
if (unproc_data_len + mp3_dcecoder->curr_packet->size <= MAD_BUFFER_LEEN) {
memcpy(mp3_dcecoder->mad_buffer+unproc_data_len
,mp3_dcecoder->curr_packet->data
,mp3_dcecoder->curr_packet->size);
@@ -108,7 +108,7 @@ static enum mad_flow input(void *priv, struct mad_stream *stream)
audio_pm_enqueue_empty_packet(mp3_dcecoder->decoder.pm, mp3_dcecoder->curr_packet);
logd("need_proc_data_len:%d,unproc_data_len:%d,curr_packet_unused_len:%d\n",need_proc_data_len,unproc_data_len,mp3_dcecoder->curr_packet_unused_len);
}else{
} else {
memcpy(mp3_dcecoder->mad_buffer+unproc_data_len
,mp3_dcecoder->curr_packet->data
,MAD_BUFFER_LEEN -unproc_data_len);
@@ -172,27 +172,27 @@ static enum mad_flow output(void *priv, struct mad_header const *header, struct
right_ch = pcm->samples[1];
int data_size = nchannels * nsamples * mp3_dcecoder->bits_per_sample/8;
if(mp3_dcecoder->first_frame){
if (mp3_dcecoder->first_frame) {
mp3_dcecoder->frame_duration = pcm->length*1000*1000/pcm->samplerate;
mp3_dcecoder->first_frame = 0;
printf("frame_duration:%"PRId64",samplerate:%u,pcm->length:%d\n",mp3_dcecoder->frame_duration,pcm->samplerate,pcm->length);
}
if(mp3_dcecoder->decoder.fm == NULL){
if (mp3_dcecoder->decoder.fm == NULL) {
struct audio_frame_manager_cfg cfg;
cfg.bits_per_sample = mp3_dcecoder->bits_per_sample;
cfg.samples_per_frame = nchannels*nsamples;
cfg.frame_count = mp3_dcecoder->frame_count;
mp3_dcecoder->decoder.fm = audio_fm_create(&cfg);
if(mp3_dcecoder->decoder.fm == NULL){
if (mp3_dcecoder->decoder.fm == NULL) {
loge("audio_fm_create fail!!!\n");
return MAD_FLOW_STOP;
}
}
//get empty frame
while((frame = audio_fm_decoder_get_frame(mp3_dcecoder->decoder.fm)) == NULL){
if(mp3_dcecoder->stop_flag == 1){// force to stop
while ((frame = audio_fm_decoder_get_frame(mp3_dcecoder->decoder.fm)) == NULL) {
if (mp3_dcecoder->stop_flag == 1) {// force to stop
printf("[%s:%d]force to stop!!!!\n",__FUNCTION__,__LINE__);
return MAD_FLOW_STOP;
}
@@ -201,13 +201,13 @@ static enum mad_flow output(void *priv, struct mad_header const *header, struct
//logd("audio_fm_dequeue_empty_frame\n");
//if(audio_fm_dequeue_empty_frame(mp3_dcecoder->decoder.fm, &frame, data_size))
if(frame->size < data_size){
if(frame->data){
if (frame->size < data_size) {
if (frame->data) {
printf("[%s:%d]frame->data realloc:%d!!\n",__FUNCTION__,__LINE__,data_size);
mpp_free(frame->data);
frame->data = NULL;
frame->data = mpp_alloc(data_size);
if(frame->data == NULL){
if (frame->data == NULL) {
loge("mpp_alloc frame->data fail!!!\n");
return MAD_FLOW_STOP;
}
@@ -222,25 +222,10 @@ static enum mad_flow output(void *priv, struct mad_header const *header, struct
frame->id = mp3_dcecoder->frame_id++;
frame->flag = mp3_dcecoder->curr_packet_info.flag;
if(frame->flag&PACKET_FLAG_EOS){
if (frame->flag&PACKET_FLAG_EOS) {
printf("[%s:%d]last frame:%u!!\n",__FUNCTION__,__LINE__,frame->flag);
}
logd("output frame,"\
"bits_per_sample:%d,"\
"channels:%d,"\
"flag:0x%x,"\
"pts:"FMT_x64\
"sample_rate:%d,"\
"frame_id:%"PRId32","\
"size:%d\n"\
,frame->bits_per_sample
,frame->channels
,frame->flag
,frame->pts
,frame->sample_rate
,frame->id
,frame->size);
data = (s8 *)frame->data;
while (nsamples--) {
@@ -257,7 +242,7 @@ static enum mad_flow output(void *priv, struct mad_header const *header, struct
}
}
if(audio_fm_decoder_put_frame(mp3_dcecoder->decoder.fm, frame) != 0){
if (audio_fm_decoder_put_frame(mp3_dcecoder->decoder.fm, frame) != 0) {
loge("plese check code,why!!!\n");
return MAD_FLOW_STOP;
}
@@ -265,7 +250,7 @@ static enum mad_flow output(void *priv, struct mad_header const *header, struct
frame_rate++;
clock_gettime(CLOCK_REALTIME,&cur);
diff = (cur.tv_sec - pre.tv_sec)*1000*1000 + (cur.tv_nsec - pre.tv_nsec)/1000;
if(diff > 1*1000*1000){
if (diff > 1*1000*1000) {
//printf("[%s:%d]:%ld:%d\n",__FUNCTION__,__LINE__,diff,frame_rate);
pre = cur;
frame_rate = 0;
@@ -335,7 +320,7 @@ int __mp3_decode_destroy(struct aic_audio_decoder *decoder)
mpp_free(mp3_decoder->mad_handle);
audio_pm_destroy(mp3_decoder->decoder.pm);
audio_fm_destroy(mp3_decoder->decoder.fm);
if(mp3_decoder->mad_buffer){
if (mp3_decoder->mad_buffer) {
mpp_free(mp3_decoder->mad_buffer);
mp3_decoder->mad_buffer = NULL;
}
@@ -359,27 +344,27 @@ int __mp3_decode_frame(struct aic_audio_decoder *decoder)
{
s32 ret;
struct mp3_audio_decoder *mp3_decoder = (struct mp3_audio_decoder *)decoder;
if(!mp3_decoder->decode_thread_id){
if (!mp3_decoder->decode_thread_id) {
ret = pthread_create(&mp3_decoder->decode_thread_id,&mp3_decoder->phtread_atrr, mp3_decode_thread, mp3_decoder);
if (ret || !mp3_decoder->decode_thread_id){
if (ret || !mp3_decoder->decode_thread_id) {
loge("pthread_create fail!");
return DEC_ERR_NOT_SUPPORT;
}else{
printf("[%s:%d]pthread_create mp3_decode_thread threadId:%ld ok!",__FUNCTION__,__LINE__,mp3_decoder->decode_thread_id);
} else {
printf("[%s:%d]pthread_create mp3_decode_thread threadId:%ld ok!",__FUNCTION__,__LINE__,(unsigned long)mp3_decoder->decode_thread_id);
}
}
if(!mp3_decoder->decoder.fm){
if (!mp3_decoder->decoder.fm) {
return DEC_ERR_FM_NOT_CREATE;
}
if(audio_fm_get_render_frame_num(mp3_decoder->decoder.fm) > 0){
if (audio_fm_get_render_frame_num(mp3_decoder->decoder.fm) > 0) {
return DEC_OK;
}else if (audio_fm_get_empty_frame_num(mp3_decoder->decoder.fm) == 0) {
} else if (audio_fm_get_empty_frame_num(mp3_decoder->decoder.fm) == 0) {
return DEC_NO_EMPTY_FRAME;
}else if (audio_pm_get_ready_packet_num(mp3_decoder->decoder.pm) == 0){
} else if (audio_pm_get_ready_packet_num(mp3_decoder->decoder.pm) == 0) {
return DEC_NO_READY_PACKET;
}else{
} else {
return DEC_NO_RENDER_FRAME;
}
@@ -403,7 +388,7 @@ int __mp3_decode_reset(struct aic_audio_decoder *decoder)
mp3_decoder->first_packet = 1;
mp3_decoder->frame_duration = 0;
mp3_decoder->first_pts = 0;
mp3_decoder->frame_id = 0;
mp3_decoder->frame_id = 0;
audio_pm_reset(mp3_decoder->decoder.pm);
audio_fm_reset(mp3_decoder->decoder.fm);
return 0;
@@ -426,7 +411,7 @@ struct aic_audio_decoder* create_mp3_decoder()
return NULL;
memset(s, 0, sizeof(struct mp3_audio_decoder));
s->mad_handle = (struct mad_decoder*)mpp_alloc(sizeof(struct mad_decoder));
if(s->mad_handle == NULL){
if (s->mad_handle == NULL) {
mpp_free(s);
return NULL;
}