Example #1
0
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;
}
Example #2
0
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;
}