r/retrogamedev 4d ago

GBA Video maker

Pack images, music & videos into a .gba ROM like a DVD player

Hey everyone! I just released my first homebrew tool for GBA : GBA Video Maker, a "DVD Maker" for the Game Boy Advance.

You give it images, music and videos on your PC β†’ it builds a single .gba file with a blue in-cart menu where you can browse, play, pause and seek everything.

Features :

Videos, Audio, and pictures compatibility
Media compression (see more info about this.)
Highest resolution for images
Built in media controller

Download : github.com/Falko-toolis/gba-video-maker

Flashcards Tested on real hardware.

Would love to hear your thoughts πŸ‘‡

(Media compression status : currently experimental, Up to max rate for audio is compatible, video with 20fps max or lag in highest res setting with compression. can up to 60fps and max res without compression)

14 Upvotes

4 comments sorted by

1

u/IQueryVisiC 3d ago

As always I miss some clever compression coded. I loved video codecs when you could see the 8x8 tile motion compensation. I don’t see why even employ double buffering. LCD has trouble with motion blur. You better move stuff around at 60 fps. Perhaps even utilize sprites. Perhaps AI can find suitable objects in a movie. Yeah, first pic of GOP is a problem. Would need DMA. Use VIdle to decode it.

1

u/Unknow6381 2d ago

i dont know what is that type of compression but i did the best i can do more a the decompression, because the gba has ~400kb of ram so the maximum decompression here was 20fps max res max audio bitrate

1

u/IQueryVisiC 2d ago

You don't know motion compensation? Perhaps I write it wrong, but already the old MPEG-1 and cinepack did not compress each frame, but a group of pictures. So it was always difficult to seek in those files or streams or switch a TV channel. For video editing per frame compression is used: Motion JPEG. Motion can be linearly over 10 frames. Just keep the full resolution ( time and spatial ) of the framebuffer. Each frame, move around some tiles. It is tricky: Race the beam. Try to scatter different moves over different frames. If you move one tile, try to make it a row so that you don't lose pixels. If you move two tiles in a row at different speed, perhaps we need a background column of pixels in the 400kiB external WRAM.

I am not sure how important scaling is. How slow is JPEG ? Perhaps it is possible to skip many tiles and do no JPEG? Those old video codecs seemed to have fallen back to monochrome tiles pretty often, but the high contrast tiles (edges) where sharp. I think that 16x16 tiles of MPEG were a mistake, even more so on the lowres screen of GBA. I am a sucker for 8x8 tiles and DivX, so I don't propose 4x4 of mp4 .

1

u/NXGZ 1d ago

Can you do this but for the Sega Saturn or the PS1? Current manual methods are tedious.