mirror of
https://gitee.com/Vancouver2017/luban-lite-t3e-pro.git
synced 2025-12-15 02:48:54 +00:00
v1.0.3
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user