static bool mp_media_prepare_frames(mp_media_t *m) { while (!mp_media_ready_to_start(m)) { if (!m->eof) { int ret = mp_media_next_packet(m); if (ret == AVERROR_EOF) m->eof = true; else if (ret < 0) return false; } if (m->has_video && !mp_decode_frame(&m->v)) return false; if (m->has_audio && !mp_decode_frame(&m->a)) return false; } if (m->has_video && m->v.frame_ready && !m->swscale) { m->scale_format = closest_format(m->v.frame->format); if (m->scale_format != m->v.frame->format) { if (!mp_media_init_scaling(m)) { return false; } } } return true; }
int Audio_Dec_codec(COS_HANDLE codech,COS_BYTE* buf,COS_DWORD buf_size,COS_BYTE *data,COS_DWORD *data_size,COS_SHORT *vu) //int decode_frame(MPADecodeContext * s, // void *data, int *data_size, // uint8_t * buf, int buf_size) { #ifdef DEBUG_TIME int begin,end; #endif int audio_find_header_ret; short cur; int i; MPADecodeContext *s = (MPADecodeContext*)codech; unsigned char* pPosFound; s->frame_size=0; *data_size = 0; audio_find_header_ret = mp3_Inner_Find_MPEG_1_L2_Head_New(s,buf,buf_size,&pPosFound); if(mp3_find_header_ret == 0) { short *out_samples = (short*)data; s->inbuf_ptr = s->inbuf; memcpy(s->inbuf_ptr, pPosFound, s->frame_size); s->inbuf_ptr += s->frame_size; buf_size -= (s->cur_offset + s->frame_size); *data_size = mp_decode_frame(s, out_samples); #ifdef DEBUG_TIME begin = sysreg_read(reg_CYCLES); #endif #ifdef DEBUG_TIME end = sysreg_read(reg_CYCLES); vu_count +=(end - begin); #endif s->inbuf_ptr = s->inbuf; return (s->cur_offset + s->frame_size);//s->frame_size; } else if (mp3_find_header_ret == -1) { return s->cur_offset; } else if(mp3_find_header_ret == -2) return (buf_size-3);//0; // reserve 4 bytes for the header in the next time //0; }