Homebrew app Project Come try my new 3DS video player named "topos" !— Smooth 800×240 SBS 3D playback with H.264 HW decode on n3DS and MPEG2 on o3DS!

  • Thread starter Thread starter ushsnb
  • Start date Start date
  • Views Views 546
  • Replies Replies 2

ushsnb

Member
Newcomer
Joined
Mar 12, 2026
Messages
20
Reaction score
24
Trophies
0
Age
26
XP
102
Country
United States
https://github.com/mockmodular/topos_3ds-video-player/releases/tag/topos_v0.1
https://github.com/mockmodular/topos_3ds-video-player


topos — 3DS Video Player focused on SBS 3D & true-rgb888color

This player is made based on Video_player_for_3DS by Core-2-Extreme.


Hey GBAtemp,
Releasing topos, a 3DS video player rebuilt around H.264 MVD hardware decoding and real parallax-barrier SBS 3D.

Performance
DeviceCodecResolutionFPSCPUNew 3DSH.264 (MVD hardware)800×240 SBS24near zeroOld 3DSMPEG-2 (software)800×240 SBS24smooth
O3DS gets a proper optimized multi-core FFmpeg pipeline — MPEG-2 slice-threading across both cores.

What's different

Real SBS 3D — single-track 800×240 SBS source, auto-detected, left/right eye split, displayed via parallax barrier. No more dual-track MJPEG workaround.
True color — full RGB888 pipeline end to end. Original player used RGB565 on the top screen.
Y2R hardware path — YUV→RGBA conversion done in hardware with zero CPU copy (New 3DS).
Top screen is always full video — no OSD overlaid. All controls live on the bottom screen in a clean 3-panel UI (Player / Files / Settings).


---

**Sample Videos & Encode Scripts**

Included in the release: the **Avatar: Fire and Ash** trailer encoded in both formats so you can test on your hardware immediately — H.264 SBS for New 3DS, MPEG-2 SBS for Old 3DS. Drop them on your SD card and hit play.

---

**The encode scripts. I'll be direct: these are the best FFmpeg commands for SBS 3DS video. Here's why.**

**H.264 (New 3DS)**
```bat
"%FFMPEG%" -y -stats -stats_period 1 -i "%FILE_IN%" ^
-filter_complex "[0:v]scale=iw*sar:ih,setsar=1,split[L][R];
[L]crop=iw/2:ih:0:0[Lh];[R]crop=iw/2:ih:iw/2:0[Rh];
[Lh]crop=min(iw\,ih*400/240):ih[Lc];[Rh]crop=min(iw\,ih*400/240):ih[Rc];
[Lc][Rc]hstack[Vs];
[Vs]format=yuv420p16le,zscale=w=800:h=240:m=bt709:min=bt709:filter=spline36,format=yuv420p,setsar=1[V]" ^
-map "[V]" -map "0:a?" ^
-c:v libx264 -preset slow -crf 14 -profile:v high -level 3.1 -fps_mode cfr ^
-x264-params "aq-mode=3:aq-strength=1.0:qcomp=0.65:ref=4:bframes=4:no-fast-pskip=1" ^
-color_primaries bt709 -color_trc bt709 -colorspace bt709 ^
-c:a aac -b:a 128k -ac 2 -ar 48000 "%FILE_OUT%"
```

**MPEG-2 (Old 3DS)**
```bat
"%FFMPEG%" -y -stats -stats_period 1 -i "%FILE_IN%" ^
-filter_complex "[0:v]split[L][R];
[L]crop=iw/2:ih:0:0[Lh];[R]crop=iw/2:ih:iw/2:0[Rh];
[Lh]crop=min(iw\,ih*400/240):ih[Lc];[Rh]crop=min(iw\,ih*400/240):ih[Rc];
[Lc][Rc]hstack[Vs];
[Vs]format=yuv420p16le,zscale=w=800:h=240:m=bt709:min=bt709:filter=spline36,format=yuv420p[V]" ^
-map "[V]" -map "0:a?" ^
-c:v mpeg2video -b:v 2000k -maxrate 2000k -bufsize 4000k ^
-g 30 -bf 0 -profile:v main -level:v main -fps_mode cfr ^
-color_primaries bt709 -color_trc bt709 -colorspace bt709 ^
-c:a mp2 -b:a 96k -ac 2 -ar 48000 "%FILE_OUT%"
```

**What makes these right:**
- SAR correction before split — handles anamorphic sources correctly (many SBS encode guides skip this and get a squeezed image)
- `crop=min(iw, ih*400/240)` — center-crops each eye to the correct 400:240 aspect ratio before stacking, no stretching
- `zscale` with `spline36` + `yuv420p16le` intermediate — highest quality downscale to 800×240, proper bt709 throughout
- H.264: `aq-mode=3` variance AQ + `no-fast-pskip` keeps detail in flat areas that look terrible at 3DS resolution otherwise
- MPEG-2: `-bf 0` — no B-frames. Old 3DS doesn't have the headroom to decode them; this is the difference between smooth and choppy

Works on any SBS source. Replace `%FILE_IN%` and `%FILE_OUT%` with your paths.


I'd love to share some of the SBS movies I've encoded, but I'll just leave the Avatar: Fire and Ash trailer here for now... haha
 

Site & Scene News

Popular threads in this forum