From f8ec62ad177e8681d19536b67a9325bbb094ef57 Mon Sep 17 00:00:00 2001 From: AcidGunner Date: Thu, 29 Oct 2026 00:10:09 +0500 Subject: [PATCH 1/5] add ps eye sample --- samples/input/KoishisEyeSample/Makefile | 116 +++++++++ samples/input/KoishisEyeSample/README.md | 8 + .../input/KoishisEyeSample/param/ICON0.PNG | Bin 0 -> 12582 bytes samples/input/KoishisEyeSample/source/main.c | 246 ++++++++++++++++++ 4 files changed, 370 insertions(+) create mode 100644 samples/input/KoishisEyeSample/Makefile create mode 100644 samples/input/KoishisEyeSample/README.md create mode 100644 samples/input/KoishisEyeSample/param/ICON0.PNG create mode 100644 samples/input/KoishisEyeSample/source/main.c diff --git a/samples/input/KoishisEyeSample/Makefile b/samples/input/KoishisEyeSample/Makefile new file mode 100644 index 00000000..686c73bd --- /dev/null +++ b/samples/input/KoishisEyeSample/Makefile @@ -0,0 +1,116 @@ +.SUFFIXES: +ifeq ($(strip $(PSL1GHT)),) +$(error "Please set PSL1GHT in your environment. export PSL1GHT=") +endif + +TITLE := Koishi's Third Eye +APPID := KOI3RDEYE +CONTENTID := HP0031-$(APPID)_00-0000000000000000 + +ICON0 := param/ICON0.PNG + +include $(PSL1GHT)/ppu_rules + +SCETOOL_FLAGS += + +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +SHADERS := shaders +INCLUDES := include + +LIBS := -ltiny3d -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lsysmodule -lz -lm -llv2dbg -lcamera + +CFLAGS = -O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) + +LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map + +LIBDIRS := $(CURDIR) + +ifneq ($(BUILD),$(notdir $(CURDIR))) + +export OUTPUT := $(CURDIR)/$(TARGET) +export GAMEROOT := $(CURDIR) + +export VPATH := $(shell find $(SOURCES) $(DATA) $(SHADERS) -type d 2>/dev/null | sed "s|^|$(CURDIR)/|") + +export DEPSDIR := $(CURDIR)/$(BUILD) + +export BUILDDIR := $(CURDIR)/$(BUILD) + +CFILES := $(shell find $(SOURCES) -type f -name '*.c') +BINFILES := $(shell find $(DATA) -type f -name '*.bin' 2>/dev/null) +VCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.vcg))) +FCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.fcg))) + +VPOFILES := $(VCGFILES:.vcg=.vpo) +FPOFILES := $(FCGFILES:.fcg=.fpo) + +export LD := $(CC) + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(addsuffix .o,$(VPOFILES)) \ + $(addsuffix .o,$(FPOFILES)) \ + $(CFILES:.c=.c.o) \ + +export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ + $(foreach dir,$(shell find $(INCLUDES) $(SOURCES) -type d 2>/dev/null),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(LIBPSL1GHT_INC) \ + -I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + $(LIBPSL1GHT_LIB) -L$(PORTLIBS)/lib + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).fake.self $(OUTPUT).pkg $(OUTPUT).gnpdrm.pkg EBOOT.BIN + +run: + ps3load $(OUTPUT).self + +pkg: $(BUILD) $(OUTPUT).pkg + +npdrm: $(BUILD) + @$(SELF_NPDRM) $(SCETOOL_FLAGS) $(BUILDDIR)/$(basename $(notdir $(OUTPUT))).elf $(BUILDDIR)/../EBOOT.BIN --np-content-id=$(CONTENTID) + +else + +DEPENDS := $(addprefix $(DEPSDIR)/,$(filter-out %.bin.d %.vpo.d %.fpo.d,$(OFILES:.o=.d))) + +$(OUTPUT).self: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +%.bin.o : %.bin + @echo $(notdir $<) + @$(bin2o) + +%.vpo.o : %.vpo + @echo $(notdir $<) + @$(bin2o) + +%.fpo.o : %.fpo + @echo $(notdir $<) + @$(bin2o) + +$(SOURCES)/%.c.o: $(GAMEROOT)/$(SOURCES)/%.c + @echo $(notdir $<) + @mkdir -p $(dir $@) + @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +$(DATA)/%.bin.o: $(GAMEROOT)/$(DATA)/%.bin + @echo $(notdir $<) + @mkdir -p $(dir $@) + @$(bin2o) + +-include $(DEPENDS) + +endif \ No newline at end of file diff --git a/samples/input/KoishisEyeSample/README.md b/samples/input/KoishisEyeSample/README.md new file mode 100644 index 00000000..92b62514 --- /dev/null +++ b/samples/input/KoishisEyeSample/README.md @@ -0,0 +1,8 @@ +# Koishi's Eye Sample + +This is the sample that utilizes PlayStation Eye stuff.\ +By the way, pressing START returns to XMB. + +## Additional Notes +* The sample's code is partially AI-Assisted. +* All of the tests have been completed by a human on both emulator and real hardware. \ No newline at end of file diff --git a/samples/input/KoishisEyeSample/param/ICON0.PNG b/samples/input/KoishisEyeSample/param/ICON0.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9ac124f89f3997b08933035aff26cd7c48c5fdd3 GIT binary patch literal 12582 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 IM6N<$f_!=dpa1{> literal 0 HcmV?d00001 diff --git a/samples/input/KoishisEyeSample/source/main.c b/samples/input/KoishisEyeSample/source/main.c new file mode 100644 index 00000000..5fecf5c0 --- /dev/null +++ b/samples/input/KoishisEyeSample/source/main.c @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CAMERA_WIDTH 640 +#define CAMERA_HEIGHT 480 + +static u32 *camera_texture = NULL; +static u32 camera_texture_offset = 0; +static int camera_texture_ready = 0; + +static int g_running = 1; +static u32 g_device_type = 0xffffffffu; +static int g_container_created = 0; +static int g_camera_initialized = 0; +static sys_mem_container_t g_container; +static cameraType g_camera_type; +static cameraInfoEx camInfo; + +u32 *texture_pointer = NULL; + +void LoadTexture() +{ + u32 * texture_mem = tiny3d_AllocTexture(48*1024*1024); + if(!texture_mem) return; + texture_pointer = texture_mem; + + camera_texture = texture_mem; + + camera_texture_offset = tiny3d_TextureOffset(camera_texture); + camera_texture_ready = 1; + + texture_pointer += (CAMERA_WIDTH * CAMERA_HEIGHT); +} + +static void on_system_event(u64 status, u64 param, void *userdata) +{ + (void)param; + (void)userdata; + if(status == SYSUTIL_EXIT_GAME) g_running = 0; +} + +static void draw_rect(float x, float y, float w, float h, u32 color, float z) +{ + tiny3d_SetPolygon(TINY3D_QUADS); + tiny3d_VertexPos(x, y, z); tiny3d_VertexColor(color); + tiny3d_VertexPos(x + w, y, z); + tiny3d_VertexPos(x + w, y + h, z); + tiny3d_VertexPos(x, y + h, z); + tiny3d_End(); +} + +void DrawFull(float x, float y, int wid, int hei, float layer, u32 color) +{ + tiny3d_SetPolygon(TINY3D_QUADS); + + tiny3d_VertexPos(x, y, layer); + tiny3d_VertexColor(color); + tiny3d_VertexTexture(0, 0); + tiny3d_VertexPos(x+wid, y, layer); + tiny3d_VertexTexture(0.99f, 0); + tiny3d_VertexPos(x+wid, y+hei, layer); + tiny3d_VertexTexture(0.99f, 0.99f); + tiny3d_VertexPos(x, y+hei, layer); + tiny3d_VertexTexture(0, 0.99f); + + tiny3d_End(); +} + +static void draw_status(void) +{ + tiny3d_Project2D(); + + if(cameraIsAttached(0) && cameraIsAvailable(0)) + { + tiny3d_SetTexture(0, camera_texture_offset, CAMERA_WIDTH, CAMERA_HEIGHT, CAMERA_WIDTH * 4, TINY3D_TEX_FORMAT_A8R8G8B8, TEXTURE_NEAREST); + DrawFull(0, 0, 916, 582, 0, 0xffffffff); + } + else draw_rect(0, 0, 916, 582, 0x006700ff, 1.0f); +} + +static void initCamera(void) +{ + s32 ret; + + sysMemContainerCreate(&g_container, 2 * 1024 * 1024); + g_container_created = 1; + cameraInit(); + g_camera_initialized = 1; + g_device_type = CAM_TYPE_PLAYSTATION_EYE; + ret = cameraGetType(0, &g_camera_type); + if(ret == 0) g_device_type = (u32)g_camera_type; + + memset(&camInfo, 0, sizeof(camInfo)); + + camInfo.format = CAM_FORM_YUV422; + camInfo.framerate = 30; + camInfo.resolution = CAM_RESO_VGA; + camInfo.info_ver = 0x101; + camInfo.container = g_container; + + cameraOpenEx(0, &camInfo); + + cameraReset(0); + cameraStart(0); +} + +static void cleanup(void) +{ + if(g_camera_initialized) + { + cameraStop(0); + cameraClose(0); + cameraEnd(); + } + if(g_container_created) sysMemContainerDestroy(g_container); +} + +static u32 YUV_to_RGB(int y, int u, int v) +{ + int r, g, b; + + v -= 128; + u -= 128; + + r = y + u; + g = y - u / 2 - v / 8; + b = y + v; + + if (r < 0) r = 0; + if (g < 0) g = 0; + if (b < 0) b = 0; + + if (r > 255) r = 255; + if (g > 255) g = 255; + if (b > 255) b = 255; + + return (r << 16) | (g << 8) | b; +} + +static void Convert422(u8 *yuv, u32 *rgb1, u32 *rgb2) +{ + int y1 = yuv[0]; + int v = yuv[1]; + int y2 = yuv[2]; + int u = yuv[3]; + + *rgb1 = YUV_to_RGB(y1, u, v); + *rgb2 = YUV_to_RGB(y2, u, v); +} + +void UpdateCameraTexture(const u8 *yuv) +{ + int x, y; + u32 *dst; + + if (!camera_texture_ready || !yuv) return; + + dst = camera_texture; + + for (y = 0; y < CAMERA_HEIGHT; y++) + { + for (x = 0; x < CAMERA_WIDTH; x += 2) + { + u32 pixel1, pixel2; + + Convert422((u8 *)yuv, &pixel1, &pixel2); + + dst[0] = 0xff000000 | pixel1; + dst[1] = 0xff000000 | pixel2; + + dst += 2; + yuv += 4; + } + } +} + +int main(int argc, const char *argv[]) +{ + padInfo padinfo; + padData paddata; + int i; + (void)argc; + (void)argv; + + tiny3d_Init(6 * 1024 * 1024); + tiny3d_UserViewport(1, 0, 0, + (float)(Video_Resolution.width / 916.0f), + (float)(Video_Resolution.height / 582.0f), + (float)(Video_Resolution.width / 1920.0f), + (float)(Video_Resolution.height / 1080.0f)); + + LoadTexture(); + + sysModuleLoad(SYSMODULE_CAMERA); + sysUtilRegisterCallback(SYSUTIL_EVENT_SLOT0, on_system_event, NULL); + + initCamera(); + + ioPadInit(7); + + while(g_running) + { + sysUtilCheckCallback(); + tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); + tiny3d_AlphaTest(1, 0x10, TINY3D_ALPHA_FUNC_GEQUAL); + tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, + TINY3D_BLEND_FUNC_DST_RGB_ONE_MINUS_SRC_ALPHA | TINY3D_BLEND_FUNC_DST_ALPHA_ZERO, + TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); + + if(ioPadGetInfo(&padinfo) == 0) + { + for (i = 0; i < MAX_PADS; ++i) + { + if(padinfo.status[i] && ioPadGetData(i, &paddata) == 0) + { + if(paddata.BTN_START) g_running = 0; + } + } + } + + if(cameraIsAttached(0) && cameraIsAvailable(0)) + { + u32 frame = 0; + u32 readcount = 0; + + cameraRead(0, &frame, &readcount); + UpdateCameraTexture((const u8 *)(u64)camInfo.buffer); + } + + draw_status(); + tiny3d_Flip(); + } + + cleanup(); + ioPadEnd(); + sysUtilUnregisterCallback(SYSUTIL_EVENT_SLOT0); + return 0; +} \ No newline at end of file From 5699695a07bc3116586d4f4700ecc4bda1866116 Mon Sep 17 00:00:00 2001 From: AcidGunner Date: Fri, 30 Oct 2026 11:27:19 +0500 Subject: [PATCH 2/5] idk --- samples/input/eyesample/Makefile | 114 ++++++++++++ samples/input/eyesample/source/main.c | 246 ++++++++++++++++++++++++++ 2 files changed, 360 insertions(+) create mode 100644 samples/input/eyesample/Makefile create mode 100644 samples/input/eyesample/source/main.c diff --git a/samples/input/eyesample/Makefile b/samples/input/eyesample/Makefile new file mode 100644 index 00000000..4ecc7ad1 --- /dev/null +++ b/samples/input/eyesample/Makefile @@ -0,0 +1,114 @@ +.SUFFIXES: +ifeq ($(strip $(PSL1GHT)),) +$(error "Please set PSL1GHT in your environment. export PSL1GHT=") +endif + +TITLE := PS Eye Sample - PSL1GHT +APPID := PSEYETEST +CONTENTID := UP0001-$(APPID)_00-0000000000000000 + +include $(PSL1GHT)/ppu_rules + +SCETOOL_FLAGS += + +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +SHADERS := shaders +INCLUDES := include + +LIBS := -ltiny3d -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lsysmodule -lz -lm -llv2dbg -lcamera + +CFLAGS = -O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) + +LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map + +LIBDIRS := $(CURDIR) + +ifneq ($(BUILD),$(notdir $(CURDIR))) + +export OUTPUT := $(CURDIR)/$(TARGET) +export GAMEROOT := $(CURDIR) + +export VPATH := $(shell find $(SOURCES) $(DATA) $(SHADERS) -type d 2>/dev/null | sed "s|^|$(CURDIR)/|") + +export DEPSDIR := $(CURDIR)/$(BUILD) + +export BUILDDIR := $(CURDIR)/$(BUILD) + +CFILES := $(shell find $(SOURCES) -type f -name '*.c') +BINFILES := $(shell find $(DATA) -type f -name '*.bin' 2>/dev/null) +VCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.vcg))) +FCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.fcg))) + +VPOFILES := $(VCGFILES:.vcg=.vpo) +FPOFILES := $(FCGFILES:.fcg=.fpo) + +export LD := $(CC) + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(addsuffix .o,$(VPOFILES)) \ + $(addsuffix .o,$(FPOFILES)) \ + $(CFILES:.c=.c.o) \ + +export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ + $(foreach dir,$(shell find $(INCLUDES) $(SOURCES) -type d 2>/dev/null),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(LIBPSL1GHT_INC) \ + -I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + $(LIBPSL1GHT_LIB) -L$(PORTLIBS)/lib + +export OUTPUT := $(CURDIR)/$(TARGET) +.PHONY: $(BUILD) clean + +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +clean: + @echo clean ... + @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).fake.self $(OUTPUT).pkg $(OUTPUT).gnpdrm.pkg EBOOT.BIN + +run: + ps3load $(OUTPUT).self + +pkg: $(BUILD) $(OUTPUT).pkg + +npdrm: $(BUILD) + @$(SELF_NPDRM) $(SCETOOL_FLAGS) $(BUILDDIR)/$(basename $(notdir $(OUTPUT))).elf $(BUILDDIR)/../EBOOT.BIN --np-content-id=$(CONTENTID) + +else + +DEPENDS := $(addprefix $(DEPSDIR)/,$(filter-out %.bin.d %.vpo.d %.fpo.d,$(OFILES:.o=.d))) + +$(OUTPUT).self: $(OUTPUT).elf +$(OUTPUT).elf: $(OFILES) + +%.bin.o : %.bin + @echo $(notdir $<) + @$(bin2o) + +%.vpo.o : %.vpo + @echo $(notdir $<) + @$(bin2o) + +%.fpo.o : %.fpo + @echo $(notdir $<) + @$(bin2o) + +$(SOURCES)/%.c.o: $(GAMEROOT)/$(SOURCES)/%.c + @echo $(notdir $<) + @mkdir -p $(dir $@) + @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + +$(DATA)/%.bin.o: $(GAMEROOT)/$(DATA)/%.bin + @echo $(notdir $<) + @mkdir -p $(dir $@) + @$(bin2o) + +-include $(DEPENDS) + +endif \ No newline at end of file diff --git a/samples/input/eyesample/source/main.c b/samples/input/eyesample/source/main.c new file mode 100644 index 00000000..21908d1a --- /dev/null +++ b/samples/input/eyesample/source/main.c @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CAMERA_WIDTH 640 +#define CAMERA_HEIGHT 480 + +static u32 *camera_texture = NULL; +static u32 camera_texture_offset = 0; +static int camera_texture_ready = 0; + +static int g_running = 1; +static u32 g_device_type = 0xffffffffu; +static int g_container_created = 0; +static int g_camera_initialized = 0; +static sys_mem_container_t g_container; +static cameraType g_camera_type; +static cameraInfoEx camInfo; + +u32 *texture_pointer = NULL; + +void LoadTexture() +{ + u32 * texture_mem = tiny3d_AllocTexture(4*1024*1024); + if(!texture_mem) return; + texture_pointer = texture_mem; + + camera_texture = texture_mem; + + camera_texture_offset = tiny3d_TextureOffset(camera_texture); + camera_texture_ready = 1; + + texture_pointer += (CAMERA_WIDTH * CAMERA_HEIGHT); +} + +static void on_system_event(u64 status, u64 param, void *userdata) +{ + (void)param; + (void)userdata; + if(status == SYSUTIL_EXIT_GAME) g_running = 0; +} + +static void draw_rect(float x, float y, float w, float h, u32 color, float z) +{ + tiny3d_SetPolygon(TINY3D_QUADS); + tiny3d_VertexPos(x, y, z); tiny3d_VertexColor(color); + tiny3d_VertexPos(x + w, y, z); + tiny3d_VertexPos(x + w, y + h, z); + tiny3d_VertexPos(x, y + h, z); + tiny3d_End(); +} + +void DrawFull(float x, float y, int wid, int hei, float layer, u32 color) +{ + tiny3d_SetPolygon(TINY3D_QUADS); + + tiny3d_VertexPos(x, y, layer); + tiny3d_VertexColor(color); + tiny3d_VertexTexture(0, 0); + tiny3d_VertexPos(x+wid, y, layer); + tiny3d_VertexTexture(0.99f, 0); + tiny3d_VertexPos(x+wid, y+hei, layer); + tiny3d_VertexTexture(0.99f, 0.99f); + tiny3d_VertexPos(x, y+hei, layer); + tiny3d_VertexTexture(0, 0.99f); + + tiny3d_End(); +} + +static void draw_status(void) +{ + tiny3d_Project2D(); + + if(cameraIsAttached(0) && cameraIsAvailable(0)) + { + tiny3d_SetTexture(0, camera_texture_offset, CAMERA_WIDTH, CAMERA_HEIGHT, CAMERA_WIDTH * 4, TINY3D_TEX_FORMAT_A8R8G8B8, TEXTURE_NEAREST); + DrawFull(0, 0, 916, 582, 0, 0xffffffff); + } + else draw_rect(0, 0, 916, 582, 0x006700ff, 1.0f); +} + +static void initCamera(void) +{ + s32 ret; + + sysMemContainerCreate(&g_container, 2 * 1024 * 1024); + g_container_created = 1; + cameraInit(); + g_camera_initialized = 1; + g_device_type = CAM_TYPE_PLAYSTATION_EYE; + ret = cameraGetType(0, &g_camera_type); + if(ret == 0) g_device_type = (u32)g_camera_type; + + memset(&camInfo, 0, sizeof(camInfo)); + + camInfo.format = CAM_FORM_YUV422; + camInfo.framerate = 30; + camInfo.resolution = CAM_RESO_VGA; + camInfo.info_ver = 0x101; + camInfo.container = g_container; + + cameraOpenEx(0, &camInfo); + + cameraReset(0); + cameraStart(0); +} + +static void cleanup(void) +{ + if(g_camera_initialized) + { + cameraStop(0); + cameraClose(0); + cameraEnd(); + } + if(g_container_created) sysMemContainerDestroy(g_container); +} + +static u32 YUV_to_RGB(int y, int u, int v) +{ + int r, g, b; + + v -= 128; + u -= 128; + + r = y + u; + g = y - u / 2 - v / 8; + b = y + v; + + if (r < 0) r = 0; + if (g < 0) g = 0; + if (b < 0) b = 0; + + if (r > 255) r = 255; + if (g > 255) g = 255; + if (b > 255) b = 255; + + return (r << 16) | (g << 8) | b; +} + +static void Convert422(u8 *yuv, u32 *rgb1, u32 *rgb2) +{ + int y1 = yuv[0]; + int v = yuv[1]; + int y2 = yuv[2]; + int u = yuv[3]; + + *rgb1 = YUV_to_RGB(y1, u, v); + *rgb2 = YUV_to_RGB(y2, u, v); +} + +void UpdateCameraTexture(const u8 *yuv) +{ + int x, y; + u32 *dst; + + if (!camera_texture_ready || !yuv) return; + + dst = camera_texture; + + for (y = 0; y < CAMERA_HEIGHT; y++) + { + for (x = 0; x < CAMERA_WIDTH; x += 2) + { + u32 pixel1, pixel2; + + Convert422((u8 *)yuv, &pixel1, &pixel2); + + dst[0] = 0xff000000 | pixel1; + dst[1] = 0xff000000 | pixel2; + + dst += 2; + yuv += 4; + } + } +} + +int main(int argc, const char *argv[]) +{ + padInfo padinfo; + padData paddata; + int i; + (void)argc; + (void)argv; + + tiny3d_Init(6 * 1024 * 1024); + tiny3d_UserViewport(1, 0, 0, + (float)(Video_Resolution.width / 916.0f), + (float)(Video_Resolution.height / 582.0f), + (float)(Video_Resolution.width / 1920.0f), + (float)(Video_Resolution.height / 1080.0f)); + + LoadTexture(); + + sysModuleLoad(SYSMODULE_CAMERA); + sysUtilRegisterCallback(SYSUTIL_EVENT_SLOT0, on_system_event, NULL); + + initCamera(); + + ioPadInit(7); + + while(g_running) + { + sysUtilCheckCallback(); + tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); + tiny3d_AlphaTest(1, 0x10, TINY3D_ALPHA_FUNC_GEQUAL); + tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, + TINY3D_BLEND_FUNC_DST_RGB_ONE_MINUS_SRC_ALPHA | TINY3D_BLEND_FUNC_DST_ALPHA_ZERO, + TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); + + if(ioPadGetInfo(&padinfo) == 0) + { + for (i = 0; i < MAX_PADS; ++i) + { + if(padinfo.status[i] && ioPadGetData(i, &paddata) == 0) + { + if(paddata.BTN_START) g_running = 0; + } + } + } + + if(cameraIsAttached(0) && cameraIsAvailable(0)) + { + u32 frame = 0; + u32 readcount = 0; + + s32 ret = cameraRead(0, &frame, &readcount); + if(ret==0) UpdateCameraTexture((const u8 *)(u64)camInfo.buffer); + } + + draw_status(); + tiny3d_Flip(); + } + + cleanup(); + ioPadEnd(); + sysUtilUnregisterCallback(SYSUTIL_EVENT_SLOT0); + return 0; +} \ No newline at end of file From 42b32fb61c10f7c68e0021115119d0777bbbbd5b Mon Sep 17 00:00:00 2001 From: AcidGunner Date: Fri, 30 Oct 2026 11:27:40 +0500 Subject: [PATCH 3/5] idk? --- samples/input/KoishisEyeSample/Makefile | 116 --------- samples/input/KoishisEyeSample/README.md | 8 - .../input/KoishisEyeSample/param/ICON0.PNG | Bin 12582 -> 0 bytes samples/input/KoishisEyeSample/source/main.c | 246 ------------------ 4 files changed, 370 deletions(-) delete mode 100644 samples/input/KoishisEyeSample/Makefile delete mode 100644 samples/input/KoishisEyeSample/README.md delete mode 100644 samples/input/KoishisEyeSample/param/ICON0.PNG delete mode 100644 samples/input/KoishisEyeSample/source/main.c diff --git a/samples/input/KoishisEyeSample/Makefile b/samples/input/KoishisEyeSample/Makefile deleted file mode 100644 index 686c73bd..00000000 --- a/samples/input/KoishisEyeSample/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -.SUFFIXES: -ifeq ($(strip $(PSL1GHT)),) -$(error "Please set PSL1GHT in your environment. export PSL1GHT=") -endif - -TITLE := Koishi's Third Eye -APPID := KOI3RDEYE -CONTENTID := HP0031-$(APPID)_00-0000000000000000 - -ICON0 := param/ICON0.PNG - -include $(PSL1GHT)/ppu_rules - -SCETOOL_FLAGS += - -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -SHADERS := shaders -INCLUDES := include - -LIBS := -ltiny3d -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lsysmodule -lz -lm -llv2dbg -lcamera - -CFLAGS = -O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) - -LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map - -LIBDIRS := $(CURDIR) - -ifneq ($(BUILD),$(notdir $(CURDIR))) - -export OUTPUT := $(CURDIR)/$(TARGET) -export GAMEROOT := $(CURDIR) - -export VPATH := $(shell find $(SOURCES) $(DATA) $(SHADERS) -type d 2>/dev/null | sed "s|^|$(CURDIR)/|") - -export DEPSDIR := $(CURDIR)/$(BUILD) - -export BUILDDIR := $(CURDIR)/$(BUILD) - -CFILES := $(shell find $(SOURCES) -type f -name '*.c') -BINFILES := $(shell find $(DATA) -type f -name '*.bin' 2>/dev/null) -VCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.vcg))) -FCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.fcg))) - -VPOFILES := $(VCGFILES:.vcg=.vpo) -FPOFILES := $(FCGFILES:.fcg=.fpo) - -export LD := $(CC) - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(addsuffix .o,$(VPOFILES)) \ - $(addsuffix .o,$(FPOFILES)) \ - $(CFILES:.c=.c.o) \ - -export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ - $(foreach dir,$(shell find $(INCLUDES) $(SOURCES) -type d 2>/dev/null),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(LIBPSL1GHT_INC) \ - -I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include - -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(LIBPSL1GHT_LIB) -L$(PORTLIBS)/lib - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).fake.self $(OUTPUT).pkg $(OUTPUT).gnpdrm.pkg EBOOT.BIN - -run: - ps3load $(OUTPUT).self - -pkg: $(BUILD) $(OUTPUT).pkg - -npdrm: $(BUILD) - @$(SELF_NPDRM) $(SCETOOL_FLAGS) $(BUILDDIR)/$(basename $(notdir $(OUTPUT))).elf $(BUILDDIR)/../EBOOT.BIN --np-content-id=$(CONTENTID) - -else - -DEPENDS := $(addprefix $(DEPSDIR)/,$(filter-out %.bin.d %.vpo.d %.fpo.d,$(OFILES:.o=.d))) - -$(OUTPUT).self: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -%.bin.o : %.bin - @echo $(notdir $<) - @$(bin2o) - -%.vpo.o : %.vpo - @echo $(notdir $<) - @$(bin2o) - -%.fpo.o : %.fpo - @echo $(notdir $<) - @$(bin2o) - -$(SOURCES)/%.c.o: $(GAMEROOT)/$(SOURCES)/%.c - @echo $(notdir $<) - @mkdir -p $(dir $@) - @$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ - -$(DATA)/%.bin.o: $(GAMEROOT)/$(DATA)/%.bin - @echo $(notdir $<) - @mkdir -p $(dir $@) - @$(bin2o) - --include $(DEPENDS) - -endif \ No newline at end of file diff --git a/samples/input/KoishisEyeSample/README.md b/samples/input/KoishisEyeSample/README.md deleted file mode 100644 index 92b62514..00000000 --- a/samples/input/KoishisEyeSample/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Koishi's Eye Sample - -This is the sample that utilizes PlayStation Eye stuff.\ -By the way, pressing START returns to XMB. - -## Additional Notes -* The sample's code is partially AI-Assisted. -* All of the tests have been completed by a human on both emulator and real hardware. \ No newline at end of file diff --git a/samples/input/KoishisEyeSample/param/ICON0.PNG b/samples/input/KoishisEyeSample/param/ICON0.PNG deleted file mode 100644 index 9ac124f89f3997b08933035aff26cd7c48c5fdd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12582 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 IM6N<$f_!=dpa1{> diff --git a/samples/input/KoishisEyeSample/source/main.c b/samples/input/KoishisEyeSample/source/main.c deleted file mode 100644 index 5fecf5c0..00000000 --- a/samples/input/KoishisEyeSample/source/main.c +++ /dev/null @@ -1,246 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define CAMERA_WIDTH 640 -#define CAMERA_HEIGHT 480 - -static u32 *camera_texture = NULL; -static u32 camera_texture_offset = 0; -static int camera_texture_ready = 0; - -static int g_running = 1; -static u32 g_device_type = 0xffffffffu; -static int g_container_created = 0; -static int g_camera_initialized = 0; -static sys_mem_container_t g_container; -static cameraType g_camera_type; -static cameraInfoEx camInfo; - -u32 *texture_pointer = NULL; - -void LoadTexture() -{ - u32 * texture_mem = tiny3d_AllocTexture(48*1024*1024); - if(!texture_mem) return; - texture_pointer = texture_mem; - - camera_texture = texture_mem; - - camera_texture_offset = tiny3d_TextureOffset(camera_texture); - camera_texture_ready = 1; - - texture_pointer += (CAMERA_WIDTH * CAMERA_HEIGHT); -} - -static void on_system_event(u64 status, u64 param, void *userdata) -{ - (void)param; - (void)userdata; - if(status == SYSUTIL_EXIT_GAME) g_running = 0; -} - -static void draw_rect(float x, float y, float w, float h, u32 color, float z) -{ - tiny3d_SetPolygon(TINY3D_QUADS); - tiny3d_VertexPos(x, y, z); tiny3d_VertexColor(color); - tiny3d_VertexPos(x + w, y, z); - tiny3d_VertexPos(x + w, y + h, z); - tiny3d_VertexPos(x, y + h, z); - tiny3d_End(); -} - -void DrawFull(float x, float y, int wid, int hei, float layer, u32 color) -{ - tiny3d_SetPolygon(TINY3D_QUADS); - - tiny3d_VertexPos(x, y, layer); - tiny3d_VertexColor(color); - tiny3d_VertexTexture(0, 0); - tiny3d_VertexPos(x+wid, y, layer); - tiny3d_VertexTexture(0.99f, 0); - tiny3d_VertexPos(x+wid, y+hei, layer); - tiny3d_VertexTexture(0.99f, 0.99f); - tiny3d_VertexPos(x, y+hei, layer); - tiny3d_VertexTexture(0, 0.99f); - - tiny3d_End(); -} - -static void draw_status(void) -{ - tiny3d_Project2D(); - - if(cameraIsAttached(0) && cameraIsAvailable(0)) - { - tiny3d_SetTexture(0, camera_texture_offset, CAMERA_WIDTH, CAMERA_HEIGHT, CAMERA_WIDTH * 4, TINY3D_TEX_FORMAT_A8R8G8B8, TEXTURE_NEAREST); - DrawFull(0, 0, 916, 582, 0, 0xffffffff); - } - else draw_rect(0, 0, 916, 582, 0x006700ff, 1.0f); -} - -static void initCamera(void) -{ - s32 ret; - - sysMemContainerCreate(&g_container, 2 * 1024 * 1024); - g_container_created = 1; - cameraInit(); - g_camera_initialized = 1; - g_device_type = CAM_TYPE_PLAYSTATION_EYE; - ret = cameraGetType(0, &g_camera_type); - if(ret == 0) g_device_type = (u32)g_camera_type; - - memset(&camInfo, 0, sizeof(camInfo)); - - camInfo.format = CAM_FORM_YUV422; - camInfo.framerate = 30; - camInfo.resolution = CAM_RESO_VGA; - camInfo.info_ver = 0x101; - camInfo.container = g_container; - - cameraOpenEx(0, &camInfo); - - cameraReset(0); - cameraStart(0); -} - -static void cleanup(void) -{ - if(g_camera_initialized) - { - cameraStop(0); - cameraClose(0); - cameraEnd(); - } - if(g_container_created) sysMemContainerDestroy(g_container); -} - -static u32 YUV_to_RGB(int y, int u, int v) -{ - int r, g, b; - - v -= 128; - u -= 128; - - r = y + u; - g = y - u / 2 - v / 8; - b = y + v; - - if (r < 0) r = 0; - if (g < 0) g = 0; - if (b < 0) b = 0; - - if (r > 255) r = 255; - if (g > 255) g = 255; - if (b > 255) b = 255; - - return (r << 16) | (g << 8) | b; -} - -static void Convert422(u8 *yuv, u32 *rgb1, u32 *rgb2) -{ - int y1 = yuv[0]; - int v = yuv[1]; - int y2 = yuv[2]; - int u = yuv[3]; - - *rgb1 = YUV_to_RGB(y1, u, v); - *rgb2 = YUV_to_RGB(y2, u, v); -} - -void UpdateCameraTexture(const u8 *yuv) -{ - int x, y; - u32 *dst; - - if (!camera_texture_ready || !yuv) return; - - dst = camera_texture; - - for (y = 0; y < CAMERA_HEIGHT; y++) - { - for (x = 0; x < CAMERA_WIDTH; x += 2) - { - u32 pixel1, pixel2; - - Convert422((u8 *)yuv, &pixel1, &pixel2); - - dst[0] = 0xff000000 | pixel1; - dst[1] = 0xff000000 | pixel2; - - dst += 2; - yuv += 4; - } - } -} - -int main(int argc, const char *argv[]) -{ - padInfo padinfo; - padData paddata; - int i; - (void)argc; - (void)argv; - - tiny3d_Init(6 * 1024 * 1024); - tiny3d_UserViewport(1, 0, 0, - (float)(Video_Resolution.width / 916.0f), - (float)(Video_Resolution.height / 582.0f), - (float)(Video_Resolution.width / 1920.0f), - (float)(Video_Resolution.height / 1080.0f)); - - LoadTexture(); - - sysModuleLoad(SYSMODULE_CAMERA); - sysUtilRegisterCallback(SYSUTIL_EVENT_SLOT0, on_system_event, NULL); - - initCamera(); - - ioPadInit(7); - - while(g_running) - { - sysUtilCheckCallback(); - tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); - tiny3d_AlphaTest(1, 0x10, TINY3D_ALPHA_FUNC_GEQUAL); - tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, - TINY3D_BLEND_FUNC_DST_RGB_ONE_MINUS_SRC_ALPHA | TINY3D_BLEND_FUNC_DST_ALPHA_ZERO, - TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); - - if(ioPadGetInfo(&padinfo) == 0) - { - for (i = 0; i < MAX_PADS; ++i) - { - if(padinfo.status[i] && ioPadGetData(i, &paddata) == 0) - { - if(paddata.BTN_START) g_running = 0; - } - } - } - - if(cameraIsAttached(0) && cameraIsAvailable(0)) - { - u32 frame = 0; - u32 readcount = 0; - - cameraRead(0, &frame, &readcount); - UpdateCameraTexture((const u8 *)(u64)camInfo.buffer); - } - - draw_status(); - tiny3d_Flip(); - } - - cleanup(); - ioPadEnd(); - sysUtilUnregisterCallback(SYSUTIL_EVENT_SLOT0); - return 0; -} \ No newline at end of file From 68fcc99fa0d5e770b8803e1641667624817e31ca Mon Sep 17 00:00:00 2001 From: AcidGunner Date: Fri, 30 Oct 2026 20:17:00 +0500 Subject: [PATCH 4/5] no tiny3d --- samples/input/eyesample/Makefile | 95 +++--- samples/input/eyesample/source/main.c | 412 +++++++++++++++++--------- 2 files changed, 303 insertions(+), 204 deletions(-) diff --git a/samples/input/eyesample/Makefile b/samples/input/eyesample/Makefile index 4ecc7ad1..adedefdf 100644 --- a/samples/input/eyesample/Makefile +++ b/samples/input/eyesample/Makefile @@ -3,66 +3,49 @@ ifeq ($(strip $(PSL1GHT)),) $(error "Please set PSL1GHT in your environment. export PSL1GHT=") endif -TITLE := PS Eye Sample - PSL1GHT -APPID := PSEYETEST -CONTENTID := UP0001-$(APPID)_00-0000000000000000 +TITLE := PS Eye Sample - PSL1GHT +APPID := PSEYETEST +CONTENTID := UP0001-$(APPID)_00-0000000000000000 include $(PSL1GHT)/ppu_rules -SCETOOL_FLAGS += +TARGET := $(notdir $(CURDIR)) +BUILD := build +SOURCES := source +DATA := data +INCLUDES := include -TARGET := $(notdir $(CURDIR)) -BUILD := build -SOURCES := source -DATA := data -SHADERS := shaders -INCLUDES := include +LIBS := -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lsysmodule -lcamera -lz -lm -llv2dbg -LIBS := -ltiny3d -lrsx -lgcm_sys -lio -lsysutil -lrt -llv2 -lsysmodule -lz -lm -llv2dbg -lcamera - -CFLAGS = -O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) - -LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map - -LIBDIRS := $(CURDIR) +CFLAGS = -O2 -Wall -mcpu=cell $(MACHDEP) $(INCLUDE) +LDFLAGS = $(MACHDEP) -Wl,-Map,$(notdir $@).map +LIBDIRS := $(CURDIR) ifneq ($(BUILD),$(notdir $(CURDIR))) -export OUTPUT := $(CURDIR)/$(TARGET) -export GAMEROOT := $(CURDIR) - -export VPATH := $(shell find $(SOURCES) $(DATA) $(SHADERS) -type d 2>/dev/null | sed "s|^|$(CURDIR)/|") - -export DEPSDIR := $(CURDIR)/$(BUILD) - -export BUILDDIR := $(CURDIR)/$(BUILD) - -CFILES := $(shell find $(SOURCES) -type f -name '*.c') -BINFILES := $(shell find $(DATA) -type f -name '*.bin' 2>/dev/null) -VCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.vcg))) -FCGFILES := $(foreach dir,$(SHADERS),$(notdir $(wildcard $(dir)/*.fcg))) +export OUTPUT := $(CURDIR)/$(TARGET) +export GAMEROOT := $(CURDIR) -VPOFILES := $(VCGFILES:.vcg=.vpo) -FPOFILES := $(FCGFILES:.fcg=.fpo) +export VPATH := $(shell find $(SOURCES) $(DATA) -type d 2>/dev/null | sed "s|^|$(CURDIR)/|") +export DEPSDIR := $(CURDIR)/$(BUILD) +export BUILDDIR := $(CURDIR)/$(BUILD) -export LD := $(CC) +CFILES := $(shell find $(SOURCES) -type f -name '*.c') +BINFILES := $(shell find $(DATA) -type f -name '*.bin' 2>/dev/null) -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(addsuffix .o,$(VPOFILES)) \ - $(addsuffix .o,$(FPOFILES)) \ - $(CFILES:.c=.c.o) \ +export LD := $(CC) +export OFILES := $(addsuffix .o,$(BINFILES)) $(CFILES:.c=.c.o) -export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ - $(foreach dir,$(shell find $(INCLUDES) $(SOURCES) -type d 2>/dev/null),-I$(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - $(LIBPSL1GHT_INC) \ - -I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include +export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) \ + $(foreach dir,$(shell find $(INCLUDES) $(SOURCES) -type d 2>/dev/null),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + $(LIBPSL1GHT_INC) \ + -I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - $(LIBPSL1GHT_LIB) -L$(PORTLIBS)/lib +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + $(LIBPSL1GHT_LIB) -L$(PORTLIBS)/lib -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean +.PHONY: $(BUILD) clean run pkg npdrm $(BUILD): @[ -d $@ ] || mkdir -p $@ @@ -75,27 +58,19 @@ clean: run: ps3load $(OUTPUT).self -pkg: $(BUILD) $(OUTPUT).pkg +pkg: $(BUILD) $(OUTPUT).pkg npdrm: $(BUILD) - @$(SELF_NPDRM) $(SCETOOL_FLAGS) $(BUILDDIR)/$(basename $(notdir $(OUTPUT))).elf $(BUILDDIR)/../EBOOT.BIN --np-content-id=$(CONTENTID) + @$(SELF_NPDRM) $(SCETOOL_FLAGS) $(BUILDDIR)/$(basename $(notdir $(OUTPUT))).elf $(BUILDDIR)/../EBOOT.BIN --np-content-id=$(CONTENTID) else -DEPENDS := $(addprefix $(DEPSDIR)/,$(filter-out %.bin.d %.vpo.d %.fpo.d,$(OFILES:.o=.d))) +DEPENDS := $(addprefix $(DEPSDIR)/,$(filter-out %.bin.d,$(OFILES:.o=.d))) $(OUTPUT).self: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) +$(OUTPUT).elf: $(OFILES) -%.bin.o : %.bin - @echo $(notdir $<) - @$(bin2o) - -%.vpo.o : %.vpo - @echo $(notdir $<) - @$(bin2o) - -%.fpo.o : %.fpo +%.bin.o: %.bin @echo $(notdir $<) @$(bin2o) @@ -111,4 +86,4 @@ $(DATA)/%.bin.o: $(GAMEROOT)/$(DATA)/%.bin -include $(DEPENDS) -endif \ No newline at end of file +endif diff --git a/samples/input/eyesample/source/main.c b/samples/input/eyesample/source/main.c index 21908d1a..8bd49eff 100644 --- a/samples/input/eyesample/source/main.c +++ b/samples/input/eyesample/source/main.c @@ -1,128 +1,137 @@ -#include -#include -#include -#include -#include -#include #include +#include #include #include + +#include +#include + +#include +#include +#include + +#include +#include + #include +#include #define CAMERA_WIDTH 640 #define CAMERA_HEIGHT 480 -static u32 *camera_texture = NULL; -static u32 camera_texture_offset = 0; -static int camera_texture_ready = 0; +__attribute__((aligned(128))) + +#define CAMERA_RGB_SIZE (640 * 480 * 4) +#define CAMERA_MAP_SIZE ((CAMERA_RGB_SIZE + 0xFFFFF) & ~0xFFFFF) + +static u32 *converted; +static u32 camera_offset; + +static int init_camera_texture(void) +{ + converted = memalign(1024 * 1024, CAMERA_MAP_SIZE); + if (!converted) return -1; + + memset(converted, 0, CAMERA_MAP_SIZE); + + if (gcmMapMainMemory(converted, CAMERA_MAP_SIZE, &camera_offset) != 0) + { + free(converted); + converted = NULL; + return -1; + } + + return 0; +} + +static gcmContextData *context; + +static int currentBuffer = 0; +static u32 *buffer[2]; +static u32 buffer_offset[2]; static int g_running = 1; -static u32 g_device_type = 0xffffffffu; static int g_container_created = 0; static int g_camera_initialized = 0; +static int g_camera_opened = 0; +static int g_camera_started = 0; + static sys_mem_container_t g_container; static cameraType g_camera_type; static cameraInfoEx camInfo; +static videoResolution res; -u32 *texture_pointer = NULL; - -void LoadTexture() +/* Wait until the previous buffer flip has completed before reusing it. */ +static void waitFlip(void) { - u32 * texture_mem = tiny3d_AllocTexture(4*1024*1024); - if(!texture_mem) return; - texture_pointer = texture_mem; - - camera_texture = texture_mem; - - camera_texture_offset = tiny3d_TextureOffset(camera_texture); - camera_texture_ready = 1; - - texture_pointer += (CAMERA_WIDTH * CAMERA_HEIGHT); + while (gcmGetFlipStatus() != 0) usleep(200); + gcmResetFlipStatus(); } -static void on_system_event(u64 status, u64 param, void *userdata) +static void flip(s32 buffer_id) { - (void)param; - (void)userdata; - if(status == SYSUTIL_EXIT_GAME) g_running = 0; + assert(gcmSetFlip(context, buffer_id) == 0); + rsxFlushBuffer(context); + gcmSetWaitFlip(context); } -static void draw_rect(float x, float y, float w, float h, u32 color, float z) +/* Initialize the display and two RSX framebuffers. */ +static int init_screen(void) { - tiny3d_SetPolygon(TINY3D_QUADS); - tiny3d_VertexPos(x, y, z); tiny3d_VertexColor(color); - tiny3d_VertexPos(x + w, y, z); - tiny3d_VertexPos(x + w, y + h, z); - tiny3d_VertexPos(x, y + h, z); - tiny3d_End(); -} + void *host_addr; + videoState state; + videoConfiguration vconfig; + u32 buffer_size; + int i; -void DrawFull(float x, float y, int wid, int hei, float layer, u32 color) -{ - tiny3d_SetPolygon(TINY3D_QUADS); - - tiny3d_VertexPos(x, y, layer); - tiny3d_VertexColor(color); - tiny3d_VertexTexture(0, 0); - tiny3d_VertexPos(x+wid, y, layer); - tiny3d_VertexTexture(0.99f, 0); - tiny3d_VertexPos(x+wid, y+hei, layer); - tiny3d_VertexTexture(0.99f, 0.99f); - tiny3d_VertexPos(x, y+hei, layer); - tiny3d_VertexTexture(0, 0.99f); - - tiny3d_End(); -} + host_addr = memalign(1024 * 1024, 1024 * 1024); + if (!host_addr) return -1; -static void draw_status(void) -{ - tiny3d_Project2D(); - - if(cameraIsAttached(0) && cameraIsAvailable(0)) - { - tiny3d_SetTexture(0, camera_texture_offset, CAMERA_WIDTH, CAMERA_HEIGHT, CAMERA_WIDTH * 4, TINY3D_TEX_FORMAT_A8R8G8B8, TEXTURE_NEAREST); - DrawFull(0, 0, 916, 582, 0, 0xffffffff); - } - else draw_rect(0, 0, 916, 582, 0x006700ff, 1.0f); -} + if (rsxInit(&context, 0x10000, 1024 * 1024, host_addr) != 0) return -1; + if (videoGetState(0, 0, &state) != 0 || state.state != 0) return -1; + if (videoGetResolution(state.displayMode.resolution, &res) != 0) return -1; -static void initCamera(void) -{ - s32 ret; - - sysMemContainerCreate(&g_container, 2 * 1024 * 1024); - g_container_created = 1; - cameraInit(); - g_camera_initialized = 1; - g_device_type = CAM_TYPE_PLAYSTATION_EYE; - ret = cameraGetType(0, &g_camera_type); - if(ret == 0) g_device_type = (u32)g_camera_type; - - memset(&camInfo, 0, sizeof(camInfo)); + memset(&vconfig, 0, sizeof(vconfig)); + vconfig.resolution = state.displayMode.resolution; + vconfig.format = VIDEO_BUFFER_FORMAT_XRGB; + vconfig.pitch = res.width * 4; + vconfig.aspect = state.displayMode.aspect; - camInfo.format = CAM_FORM_YUV422; - camInfo.framerate = 30; - camInfo.resolution = CAM_RESO_VGA; - camInfo.info_ver = 0x101; - camInfo.container = g_container; + if (videoConfigure(0, &vconfig, NULL, 0) != 0) return -1; + if (videoGetState(0, 0, &state) != 0) return -1; - cameraOpenEx(0, &camInfo); + buffer_size = 4 * res.width * res.height; - cameraReset(0); - cameraStart(0); + gcmSetFlipMode(GCM_FLIP_VSYNC); + + for (i = 0; i < 2; i++) + { + buffer[i] = rsxMemalign(64, buffer_size); + + if (!buffer[i]) return -1; + if (rsxAddressToOffset(buffer[i], &buffer_offset[i]) != 0) return -1; + if (gcmSetDisplayBuffer(i, buffer_offset[i], res.width * 4, res.width, res.height) != 0) return -1; + } + + gcmResetFlipStatus(); + + /* Start by displaying buffer 1; the first frame will be drawn into 0. */ + flip(1); + currentBuffer = 0; + + return 0; } -static void cleanup(void) +static void on_system_event(u64 status, u64 param, void *userdata) { - if(g_camera_initialized) - { - cameraStop(0); - cameraClose(0); - cameraEnd(); - } - if(g_container_created) sysMemContainerDestroy(g_container); + (void)param; + (void)userdata; + + if (status == SYSUTIL_EXIT_GAME) + g_running = 0; } +/* Original sample's YUV conversion retained as-is. */ static u32 YUV_to_RGB(int y, int u, int v) { int r, g, b; @@ -142,10 +151,10 @@ static u32 YUV_to_RGB(int y, int u, int v) if (g > 255) g = 255; if (b > 255) b = 255; - return (r << 16) | (g << 8) | b; + return ((u32)r << 16) | ((u32)g << 8) | (u32)b; } -static void Convert422(u8 *yuv, u32 *rgb1, u32 *rgb2) +static void Convert422(const u8 *yuv, u32 *rgb1, u32 *rgb2) { int y1 = yuv[0]; int v = yuv[1]; @@ -156,91 +165,206 @@ static void Convert422(u8 *yuv, u32 *rgb1, u32 *rgb2) *rgb2 = YUV_to_RGB(y2, u, v); } -void UpdateCameraTexture(const u8 *yuv) +static void convertCameraFrame(const u8 *yuv) { int x, y; - u32 *dst; - - if (!camera_texture_ready || !yuv) return; - - dst = camera_texture; for (y = 0; y < CAMERA_HEIGHT; y++) { + const u8 *src = yuv + y * CAMERA_WIDTH * 2; + u32 *dst = converted + y * CAMERA_WIDTH; + for (x = 0; x < CAMERA_WIDTH; x += 2) { - u32 pixel1, pixel2; - - Convert422((u8 *)yuv, &pixel1, &pixel2); + Convert422(src, &dst[x], &dst[x + 1]); + src += 4; + } + } +} - dst[0] = 0xff000000 | pixel1; - dst[1] = 0xff000000 | pixel2; +static void drawCameraFrame(u32 *dst) +{ + int x, y; + int src_x, src_y; - dst += 2; - yuv += 4; + for (y = 0; y < res.height; y++) + { + src_y = (y * CAMERA_HEIGHT) / res.height; + for (x = 0; x < res.width; x++) + { + src_x = (x * CAMERA_WIDTH) / res.width; + dst[y * res.width + x] = converted[src_y * CAMERA_WIDTH + src_x]; } } } +static int initCamera(void) +{ + s32 ret; + + ret = sysMemContainerCreate(&g_container, 2 * 1024 * 1024); + if (ret != 0) return ret; + g_container_created = 1; + + /* Required on this setup: load the camera module before cameraInit(). */ + ret = sysModuleLoad(SYSMODULE_CAMERA); + if (ret != 0) return ret; + + ret = cameraInit(); + if (ret != 0) return ret; + g_camera_initialized = 1; + + g_camera_type = CAM_TYPE_PLAYSTATION_EYE; + cameraGetType(0, &g_camera_type); + + memset(&camInfo, 0, sizeof(camInfo)); + camInfo.format = CAM_FORM_YUV422; + camInfo.framerate = 30; + camInfo.resolution = CAM_RESO_VGA; + camInfo.info_ver = 0x101; + camInfo.container = g_container; + + ret = cameraOpenEx(0, &camInfo); + if (ret != 0) return ret; + g_camera_opened = 1; + + ret = cameraReset(0); + if (ret != 0) return ret; + + ret = cameraStart(0); + if (ret != 0) return ret; + + g_camera_started = 1; + return 0; +} + +static void cleanup(void) +{ + if (g_camera_started) cameraStop(0); + if (g_camera_opened) cameraClose(0); + if (g_camera_initialized) cameraEnd(); + if (g_container_created) sysMemContainerDestroy(g_container); +} + +static void scale_camera_frame(u32 framebuffer_offset, u32 framebuffer_pitch, u32 screen_w, u32 screen_h) +{ + gcmTransferScale scale; + gcmTransferSurface surface; + + memset(&scale, 0, sizeof(scale)); + memset(&surface, 0, sizeof(surface)); + + scale.conversion = GCM_TRANSFER_CONVERSION_TRUNCATE; + scale.format = GCM_TRANSFER_SCALE_FORMAT_A8R8G8B8; + scale.operation = GCM_TRANSFER_OPERATION_SRCCOPY; + + scale.clipX = 0; + scale.clipY = 0; + scale.clipW = screen_w; + scale.clipH = screen_h; + + scale.outX = 0; + scale.outY = 0; + scale.outW = screen_w; + scale.outH = screen_h; + + scale.ratioX = rsxGetFixedSint32(640.0f / screen_w); + scale.ratioY = rsxGetFixedSint32(480.0f / screen_h); + + scale.inW = 640; + scale.inH = 480; + scale.pitch = 640 * 4; + + scale.origin = GCM_TRANSFER_ORIGIN_CORNER; + scale.interp = GCM_TRANSFER_INTERPOLATOR_LINEAR; + + scale.offset = camera_offset; + scale.inX = 0; + scale.inY = 0; + + surface.format = GCM_TRANSFER_SURFACE_FORMAT_A8R8G8B8; + surface.pitch = framebuffer_pitch; + surface.offset = framebuffer_offset; + + rsxSetTransferScaleMode(gGcmContext, GCM_TRANSFER_MAIN_TO_LOCAL, GCM_TRANSFER_SURFACE); + + rsxSetTransferScaleSurface(gGcmContext, &scale, &surface); +} + int main(int argc, const char *argv[]) { padInfo padinfo; padData paddata; int i; + s32 camera_error; + (void)argc; (void)argv; - tiny3d_Init(6 * 1024 * 1024); - tiny3d_UserViewport(1, 0, 0, - (float)(Video_Resolution.width / 916.0f), - (float)(Video_Resolution.height / 582.0f), - (float)(Video_Resolution.width / 1920.0f), - (float)(Video_Resolution.height / 1080.0f)); - - LoadTexture(); - - sysModuleLoad(SYSMODULE_CAMERA); sysUtilRegisterCallback(SYSUTIL_EVENT_SLOT0, on_system_event, NULL); + + if (init_screen() != 0) + { + printf("RSX/display initialization failed\n"); + return 1; + } - initCamera(); + if (init_camera_texture() != 0) + { + printf("Camera texture mapping failed\n"); + return 1; + } ioPadInit(7); - while(g_running) - { + camera_error = initCamera(); + if (camera_error != 0) printf("Camera initialization failed: 0x%08x\n", (unsigned int)camera_error); + + while (g_running) + { + u32 frame = 0; + u32 readcount = 0; + s32 ret; + sysUtilCheckCallback(); - tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); - tiny3d_AlphaTest(1, 0x10, TINY3D_ALPHA_FUNC_GEQUAL); - tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, - TINY3D_BLEND_FUNC_DST_RGB_ONE_MINUS_SRC_ALPHA | TINY3D_BLEND_FUNC_DST_ALPHA_ZERO, - TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); - - if(ioPadGetInfo(&padinfo) == 0) - { - for (i = 0; i < MAX_PADS; ++i) - { - if(padinfo.status[i] && ioPadGetData(i, &paddata) == 0) - { - if(paddata.BTN_START) g_running = 0; + + if (ioPadGetInfo(&padinfo) == 0) + { + for (i = 0; i < MAX_PADS; i++) + { + if (padinfo.status[i] && ioPadGetData(i, &paddata) == 0) + { + if (paddata.BTN_START) g_running = 0; } } } - if(cameraIsAttached(0) && cameraIsAvailable(0)) - { - u32 frame = 0; - u32 readcount = 0; - - s32 ret = cameraRead(0, &frame, &readcount); - if(ret==0) UpdateCameraTexture((const u8 *)(u64)camInfo.buffer); - } - - draw_status(); - tiny3d_Flip(); + /* Do not write to a framebuffer until its previous flip is done. */ + waitFlip(); + + if (g_camera_started && cameraIsAttached(0) && cameraIsAvailable(0)) + { + ret = cameraRead(0, &frame, &readcount); + + if (ret == 0 && readcount != 0) + { + convertCameraFrame((const u8 *)(u64)camInfo.buffer); + scale_camera_frame(buffer_offset[currentBuffer], res.width * 4, res.width, res.height); + } + else if (ret == CAMERA_ERRO_NEED_START) + { + cameraReset(0); + cameraStart(0); + g_camera_started = 1; + } + } + + flip(currentBuffer); + currentBuffer = !currentBuffer; } cleanup(); ioPadEnd(); sysUtilUnregisterCallback(SYSUTIL_EVENT_SLOT0); return 0; -} \ No newline at end of file +} From b076f8c826c102da2e5ce58dbb20ce00005ca6c3 Mon Sep 17 00:00:00 2001 From: AcidGunner Date: Fri, 30 Oct 2026 23:20:25 +0500 Subject: [PATCH 5/5] remove unused function --- samples/input/eyesample/source/main.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/samples/input/eyesample/source/main.c b/samples/input/eyesample/source/main.c index 8bd49eff..71e00b35 100644 --- a/samples/input/eyesample/source/main.c +++ b/samples/input/eyesample/source/main.c @@ -182,22 +182,6 @@ static void convertCameraFrame(const u8 *yuv) } } -static void drawCameraFrame(u32 *dst) -{ - int x, y; - int src_x, src_y; - - for (y = 0; y < res.height; y++) - { - src_y = (y * CAMERA_HEIGHT) / res.height; - for (x = 0; x < res.width; x++) - { - src_x = (x * CAMERA_WIDTH) / res.width; - dst[y * res.width + x] = converted[src_y * CAMERA_WIDTH + src_x]; - } - } -} - static int initCamera(void) { s32 ret;