› Foros › PlayStation 3 › Scene
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
int main()
{
SDL_Surface *PantallaV;
SDL_Rect Cuadrado;
SDL_Event event;
Cuadrado.x = 0;
Cuadrado.y = 0;
Cuadrado.w = 50;
Cuadrado.h = 50;
SDL_Init(SDL_INIT_VIDEO);
PantallaV = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);
while (1)
{
SDL_FillRect(PantallaV, &Cuadrado, SDL_MapRGBA(PantallaV->format,255,0,255,0));
SDL_Flip(PantallaV);
}
}
struct time_val tv, tv2;
gettimeofdat(&tv, NULL); //Obtienes tiempo
usleep(100); //Paras el proceso por 100 milisegundos
gettimeofdat(&tv2, NULL); //Obtienes tiempo
//Yo, para tener todo el tiempo en una variable, hago lo siguiente:
long t1 = (tv.tv_sec * 1000 + tv.tv_usec/1000);
//si tienes 1 segundo 200000 milisegundos (que es el formato en que devuelve), te queda 1200
long t2 = (tv2.tv_sec * 1000 + tv2.tv_usec/1000);
//Si han pasado 100 milisegundos, 1300
long elapsed_time = t2-t1;
long movimiento = ((paddata.ANA_R_H > 0)?paddata.ANA_R_H:-paddata.ANA_L_H) * elapsed_time;
kaltorak escribió:Hola a todos he empezado con las vacaciones de verano y como estoy de Rodríguez jajajja he decidido empezar a hacer algo en ps3 pero de momento llevo 3 días en los que no he tenido mas que problemas desde instalar el psl1ght y las toolchain hasta problemas con el portátil así que estoy un poquito desesperado jajaja mirar de momento he conseguido instalar el compilador completo junto con las librerías para sdl,etc..
También he conseguido compilar alguno de los samples que vienen como el del pngtest hay tuve otro problema el de firmar los pkg pero también lo resolví, pletórico de alegría al ver rodar el logotipo del psl1ght decidí empezar con algo simple mostrar un cuadro en pantalla y hay me he quedado no hay manera de que tire cuando lo pongo en la ps3 esta peta y no se por que? me podéis echar un cable?
el código es este:
#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
int main()
{
SDL_Surface *PantallaV;
SDL_Rect Cuadrado;
SDL_Event event;
Cuadrado.x = 0;
Cuadrado.y = 0;
Cuadrado.w = 50;
Cuadrado.h = 50;
SDL_Init(SDL_INIT_VIDEO);
PantallaV = SDL_SetVideoMode(640, 480, 32,SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_FillRect(PantallaV, &Cuadrado, SDL_MapRGBA(PantallaV->format,255,0,255,0));
SDL_Flip(PantallaV);
while (1)
{
}
}
Actualizacion:
Ups es por la resolución de la pantalla y por que no soporta los 32 bits de color he puesto la resolución del programa a la misma a la que tengo la pantalla y la profundidad de color a 8 y ha funcionado sin problemas lo único que no todo el mundo tendrá la pantalla a 1920x1080 así que ahora me surge otra duda como le digo a la ps3 que ponga la resolución que yo quiero? seguiré probando jajajaja
Un saludo
Kaltorak.
/*
Ejemplo de las PS3SOUNDLIB por kaltorak para dark_on_5 de el otrolado.
*/
// Incluimos las librerias basicas.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <math.h>
////////////////////////////////////////////////////////////
#include <io/pad.h> // Incluimos la libreria para controlar el mando.
// Cargamos las librerias de control del SPU,las de procesos,de timer y la de hilos.
#include <psl1ght/lv2.h>
#include <psl1ght/lv2/spu.h>
#include <lv2/spu.h>
#include <lv2/process.h>
#include <psl1ght/lv2/timer.h>
#include <psl1ght/lv2/thread.h>
/////////////////////////////////////////////////////////////////////////////////
#include <sysmodule/sysmodule.h> // Incluimos la libreria para cargar modulos.
#ifndef FROM_FILE
#include "spu_soundmodule.bin.h" // Cargamos el modulo SPU
#else
void * spu_soundmodule_bin = NULL;
#endif
// incluimos las librerias de PS3SOUNDLIB.
#include "spu_soundlib.h"
#include "audioplayer.h"
////////////////////////////////////////////////////////////
#include "jungler_ogg.bin.h" //Incluimos el archivo de audio que vamos a reproducir con las PS3SOUNDLIB.
//Este archivo no es mas que un ogg al cual le hemos cambiado la estension
//por ".bin" y lo hemos puesto dentro de la carpeta Data, para cargarlo
//como podeis ver tenemos que ponerle al final ".h" para que sea incluido
//Como si de una libreria se tratase facil verdad?.
//Si por ejemplo tenemos un mp3 que se llama techno.mp3 le cambiamos el
//nombre por techno_mp3.bin y lo ponemos en la carpeta data de nuestro
//proyecto y listo jajaja lo de "_mp3" no es obligatorio ponerlo pero si lo
//pones siempre sabras que tipo de archivo estas usando.
//Con las ps3soundlib podemos cargar mp3 y ogg sin problemas.
sysSpuImage spu_image; //Creamos la variable "spu_imagen" del tipo sysSpuImage.
#define SPU_SIZE(x) (((x)+127) & ~127) //Definimos "SPU_SIZE(x)" para ser usado por el spu.
s32 main(s32 argc, const char* argv[]) // el main clasico de toda la vida no necesita mas informacion.
{
u32 spu = 0; //Creamos la variable "spu" del tipo unsigned 32 para ser usada por el psu
//Estas 3 lineas son para el uso del mando supongo que no necesito esplicarlas jajaja.
PadInfo padinfo;
PadData paddata;
int i;
//////////////////////////////////////////////////////////////////////////////////////
// Creamos varias variables que van a ser usadas por el spu mas adelante.
u32 entry = 0;
u32 segmentcount = 0;
sysSpuSegment* segments;
/////////////////////////////////////////////////////////////////////////
//Esta parte de aqui no se muy bien para que vale pero si no la pongo no tira
//lo que hace es abrir y leer el spu_soundmodule.bin desde el usb pero aun que
//el usb no es te el ejemplo funciona asi que no se pa que vale pero como he
// dicho antes sin esta parte del codigo no tira asi que ponerlo jajajaja.
#ifdef FROM_FILE
FILE *fp = fopen("/dev_usb/spu_soundmodule.bin", "r");
if(!fp) return 0;
fseek(fp, 0, SEEK_END);
int len = ftell(fp);
spu_soundmodule_bin = malloc(len);
fseek(fp, 0, SEEK_SET);
fread(spu_soundmodule_bin, 1, len, fp);
fclose(fp);
#endif
////////////////////////////////////////////////////////////////////////////
//Toda esta parte del codigo es para poner apunto el spu para poder reproducir sonidos.
lv2SpuInitialize(6, 5);
lv2SpuRawCreate(&spu, NULL);
sysSpuElfGetInformation(spu_soundmodule_bin, &entry, &segmentcount);
size_t segmentsize = sizeof(sysSpuSegment) * segmentcount;
segments = (sysSpuSegment*)memalign(128, SPU_SIZE(segmentsize));
memset(segments, 0, segmentsize);
sysSpuElfGetSegments(spu_soundmodule_bin, segments, segmentcount);
sysSpuImageImport(&spu_image, spu_soundmodule_bin, 0);
sysSpuRawImageLoad(spu, &spu_image);
////////////////////////////////////////////////////////////////////////////////////////
SND_Init(spu); //Iniciamos las PS3SOUNDLIB.
SND_Pause(0);//Lo pausamos todo funciona aun que no se haga pero hermes aconseja acerlo y no cuesta nada jajajaja.
//Cargamos en el puntero "fp" de tipo fichero nuestro archivo de audio que incluimos al principio para este ejemplo
FILE *fp = (FILE *) mem_open((void *) jungler_ogg_bin, sizeof(jungler_ogg_bin));
PlayAudiofd(fp, 0, AUDIO_INFINITE_TIME);//Reproducimos dicho archivo en el canal 0 y le decimos que lo reproducca infinitamente.
ioPadInit(7); //Iniciamos el mando
//Estas lineas son el bucle de control del mando no necesitan mas explicacion salvo que si pulsas X sales del programa
while(1) {
ioPadGetInfo(&padinfo);
for(i = 0; i < MAX_PADS; i++){
if(padinfo.status[i]){
ioPadGetData(i, &paddata);
if(paddata.BTN_CROSS){
return 0;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
return 0;
}
kaltorak escribió:Hola dark_on_5 aquí te pongo un código para reproducir un ogg, para un mp3 se hace exactamente igual, he comentado el código lo mejor que he podido pero no se si se entenderá bien cualquier cosa que no entiendas puedes preguntarme y intentare explicártelo lo mejor que pueda aunque sea a mi modo jajaja espero que te sea de ayuda
Este código es muy soso a nivel visual pues solo muestra una pantalla en negro reproduciendo de fondo una melodía (vamos sonidos de la selva jajaja no tenia otro archivo de audio a mano pero para ilustrar el ejemplo es mas que suficiente) no he querido liar mas el código poniendo imágenes ni nada por el estilo.
/*
Ejemplo de las PS3SOUNDLIB por kaltorak para dark_on_5 de el otrolado.
*/
// Incluimos las librerias basicas.
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <assert.h>
#include <unistd.h>
#include <math.h>
////////////////////////////////////////////////////////////
#include <io/pad.h> // Incluimos la libreria para controlar el mando.
// Cargamos las librerias de control del SPU,las de procesos,de timer y la de hilos.
#include <psl1ght/lv2.h>
#include <psl1ght/lv2/spu.h>
#include <lv2/spu.h>
#include <lv2/process.h>
#include <psl1ght/lv2/timer.h>
#include <psl1ght/lv2/thread.h>
/////////////////////////////////////////////////////////////////////////////////
#include <sysmodule/sysmodule.h> // Incluimos la libreria para cargar modulos.
#ifndef FROM_FILE
#include "spu_soundmodule.bin.h" // Cargamos el modulo SPU
#else
void * spu_soundmodule_bin = NULL;
#endif
// incluimos las librerias de PS3SOUNDLIB.
#include "spu_soundlib.h"
#include "audioplayer.h"
////////////////////////////////////////////////////////////
#include "jungler_ogg.bin.h" //Incluimos el archivo de audio que vamos a reproducir con las PS3SOUNDLIB.
//Este archivo no es mas que un ogg al cual le hemos cambiado la estension
//por ".bin" y lo hemos puesto dentro de la carpeta Data, para cargarlo
//como podeis ver tenemos que ponerle al final ".h" para que sea incluido
//Como si de una libreria se tratase facil verdad?.
//Si por ejemplo tenemos un mp3 que se llama techno.mp3 le cambiamos el
//nombre por techno_mp3.bin y lo ponemos en la carpeta data de nuestro
//proyecto y listo jajaja lo de "_mp3" no es obligatorio ponerlo pero si lo
//pones siempre sabras que tipo de archivo estas usando.
//Con las ps3soundlib podemos cargar mp3 y ogg sin problemas.
sysSpuImage spu_image; //Creamos la variable "spu_imagen" del tipo sysSpuImage.
#define SPU_SIZE(x) (((x)+127) & ~127) //Definimos "SPU_SIZE(x)" para ser usado por el spu.
s32 main(s32 argc, const char* argv[]) // el main clasico de toda la vida no necesita mas informacion.
{
u32 spu = 0; //Creamos la variable "spu" del tipo unsigned 32 para ser usada por el psu
//Estas 3 lineas son para el uso del mando supongo que no necesito esplicarlas jajaja.
PadInfo padinfo;
PadData paddata;
int i;
//////////////////////////////////////////////////////////////////////////////////////
// Creamos varias variables que van a ser usadas por el spu mas adelante.
u32 entry = 0;
u32 segmentcount = 0;
sysSpuSegment* segments;
/////////////////////////////////////////////////////////////////////////
//Esta parte de aqui no se muy bien para que vale pero si no la pongo no tira
//lo que hace es abrir y leer el spu_soundmodule.bin desde el usb pero aun que
//el usb no es te el ejemplo funciona asi que no se pa que vale pero como he
// dicho antes sin esta parte del codigo no tira asi que ponerlo jajajaja.
#ifdef FROM_FILE
FILE *fp = fopen("/dev_usb/spu_soundmodule.bin", "r");
if(!fp) return 0;
fseek(fp, 0, SEEK_END);
int len = ftell(fp);
spu_soundmodule_bin = malloc(len);
fseek(fp, 0, SEEK_SET);
fread(spu_soundmodule_bin, 1, len, fp);
fclose(fp);
#endif
////////////////////////////////////////////////////////////////////////////
//Toda esta parte del codigo es para poner apunto el spu para poder reproducir sonidos.
lv2SpuInitialize(6, 5);
lv2SpuRawCreate(&spu, NULL);
sysSpuElfGetInformation(spu_soundmodule_bin, &entry, &segmentcount);
size_t segmentsize = sizeof(sysSpuSegment) * segmentcount;
segments = (sysSpuSegment*)memalign(128, SPU_SIZE(segmentsize));
memset(segments, 0, segmentsize);
sysSpuElfGetSegments(spu_soundmodule_bin, segments, segmentcount);
sysSpuImageImport(&spu_image, spu_soundmodule_bin, 0);
sysSpuRawImageLoad(spu, &spu_image);
////////////////////////////////////////////////////////////////////////////////////////
SND_Init(spu); //Iniciamos las PS3SOUNDLIB.
SND_Pause(0);//Lo pausamos todo funciona aun que no se haga pero hermes aconseja acerlo y no cuesta nada jajajaja.
//Cargamos en el puntero "fp" de tipo fichero nuestro archivo de audio que incluimos al principio para este ejemplo
FILE *fp = (FILE *) mem_open((void *) jungler_ogg_bin, sizeof(jungler_ogg_bin));
PlayAudiofd(fp, 0, AUDIO_INFINITE_TIME);//Reproducimos dicho archivo en el canal 0 y le decimos que lo reproducca infinitamente.
ioPadInit(7); //Iniciamos el mando
//Estas lineas son el bucle de control del mando no necesitan mas explicacion salvo que si pulsas X sales del programa
while(1) {
ioPadGetInfo(&padinfo);
for(i = 0; i < MAX_PADS; i++){
if(padinfo.status[i]){
ioPadGetData(i, &paddata);
if(paddata.BTN_CROSS){
return 0;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
return 0;
}
Aquí tenéis el código fuente y el pkg ya compilado y firmado para cfw 3.55.
http://www.megaupload.com/?d=05RVNXSK
Un saludo
Kaltorak.
http://t.co/wD16e0I Rsx documentation Thank you everyone who donated!