Ejemplo n.º 1
0
char* load() {
    Alert("vload\n");
//	_lcd=*ot->lcd;//save lcd context
//	ot->lcd->size=256;//multipl 2^6 512/576/640/704/768
    ot->me->mode=(ot->dmx->width>480||ot->dmx->height>272)?5:4;
    if(ot->dmx->width>272)ot->lcd->type=0;//PSP_DISPLAY_PIXEL_FORMAT_565;
    if(ot->dmx->width>480)return "tooBig";//still playable, but too slow.
    modmpg=ot->sys->modload("flash0:/kd/mpeg_vsh.prx");
    if(!ot->me->pool)return("noPool");
    if(sceMpegInit())return("MpegIni");
    if( (ot->me->buffLen=(sceMpegQueryMemSize(ot->me->mode)&0xFFFFFFF0)+16)<0)return("noMemSz");
    if(!(ot->me->buff=Memalign(64,ot->me->buffLen)))return("noMpgBf");
    if(sceMpegCreate(Mpeg,ot->me->buff,ot->me->buffLen,&ot->me->ring,/*cscInit*/512,ot->me->mode,(int)ot->me->pool))return("MpgCrea");//fail if ME not started
    if(!(ot->me->mpegAu=(SceMpegAu*)Memalign(64,64)))return("noMpgAu");
    if(sceMpegInitAu(Mpeg,(ot->me->buffAu=ot->me->pool+0x10000),ot->me->mpegAu))return("MpgInit");
    return NULL;
}
Ejemplo n.º 2
0
LPP_Mp4* LPP_Mp4Load(const char *filename)
{
    LPP_Mp4 *tmp = (LPP_Mp4*)malloc(sizeof(LPP_Mp4));
	if(!tmp) {
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp' to memory.\n", __FUNCTION__, __LINE__);
		#endif
		return 0;
	}
	tmp->avc = (Mp4AvcDecoderStruct*)malloc(sizeof(Mp4AvcDecoderStruct));
	if(!tmp->avc) {
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp'->avc to memory.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp);
		return 0;
	}
	tmp->csc = (Mp4AvcCscStruct*)malloc(sizeof(Mp4AvcCscStruct));
	if(!tmp->csc) {
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp' to memory.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp->avc);
		free(tmp);
		return 0;
	}
	mp4_read_safe_constructor(&(tmp->reader));
	memset(tmp->avc, 0, sizeof(Mp4AvcDecoderStruct));

	if(mp4_read_open(&(tmp->reader), (char*)filename))
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : mp4_read_open error.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp->csc);
		free(tmp->avc);
		free(tmp);
		return 0;
	}

	if(tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_profile == 0x4D && (tmp->reader.file.video_width > 480 || tmp->reader.file.video_height > 272))
	{
	    cooleyesMeBootStart(devkitVersion, 1);
		tmp->avc->mpeg_mode = 5;
	} else if(tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_profile == 0x4D)
	{
	    cooleyesMeBootStart(devkitVersion, 3);
		tmp->avc->mpeg_mode = 4;
	} else if(tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_profile == 0x42)
	{
	    cooleyesMeBootStart(devkitVersion, 4);
		tmp->avc->mpeg_mode = 4;
	}

	tmp->avc->mpeg_ddrtop = memalign(0x400000, 0x400000);
	if(!tmp->avc->mpeg_ddrtop)
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp->avc->mpeg_ddrtop' to memory.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp->csc);
		free(tmp->avc);
		free(tmp);
		return 0;
	}
	tmp->avc->mpeg_au_buffer = tmp->avc->mpeg_ddrtop + 0x10000;

	int res = sceMpegQueryMemSize(tmp->avc->mpeg_mode);
	if(res < 0)
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : res < 0.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp->csc);
		free(tmp->avc->mpeg_ddrtop);
		free(tmp->avc);
		free(tmp);
		return 0;
	}
	tmp->avc->mpeg_buffer_size = res;

	if(!(res & 0xF)) res = (res & 0xFFFFFFF0) + 16;

	tmp->avc->mpeg_buffer = malloc_64(res);
	if(!tmp->avc->mpeg_buffer)
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp->avc->mpeg_buffer' to memory.\n", __FUNCTION__, __LINE__);
		#endif
		free(tmp->csc);
		free(tmp->avc->mpeg_ddrtop);
		free(tmp->avc);
		free(tmp);
		return 0;
	}

	if(sceMpegCreate(&(tmp->avc->mpeg), tmp->avc->mpeg_buffer, tmp->avc->mpeg_buffer_size, &(tmp->avc->mpeg_ringbuffer), 512, tmp->avc->mpeg_mode, (SceInt32)tmp->avc->mpeg_ddrtop))
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Error in sceMpegCreate.\n", __FUNCTION__, __LINE__);
		#endif
		LPP_Mp4Close(tmp);
		return 0;
	}

	tmp->avc->mpeg_au = (SceMpegAu*)malloc_64(64);
	memset(tmp->avc->mpeg_au, 0xFF, 64);

	if(sceMpegInitAu(&(tmp->avc->mpeg), tmp->avc->mpeg_au_buffer, tmp->avc->mpeg_au))
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Error in sceMpegInitAu.\n", __FUNCTION__, __LINE__);
		#endif
		LPP_Mp4Close(tmp);
		return 0;
	}

	tmp->avc->mpeg_sps_size = tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_sps_size;
	tmp->avc->mpeg_pps_size = tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_pps_size;
	tmp->avc->mpeg_nal_prefix_size = tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_nal_prefix_size;
	tmp->avc->mpeg_sps_pps_buffer = malloc_64(tmp->avc->mpeg_sps_size + tmp->avc->mpeg_pps_size);

	if(!tmp->avc->mpeg_sps_pps_buffer)
	{
	    #ifdef DEBUG
		dwrite_output("Function %s Line %d : Cannot allocate 'tmp->avc->mpeg_sps_pps_buffer' to memory.\n", __FUNCTION__, __LINE__);
		#endif
		LPP_Mp4Close(tmp);
		return 0;
	}

	memcpy(tmp->avc->mpeg_sps_pps_buffer, tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_sps, tmp->avc->mpeg_sps_size);
	memcpy(tmp->avc->mpeg_sps_pps_buffer + tmp->avc->mpeg_sps_size, tmp->reader.file.info->tracks[tmp->reader.file.video_track_id]->avc_pps, tmp->avc->mpeg_pps_size);

	return (tmp);
}