jPSXdec is a cross-platform PlayStation 1 media decoder/converter.
Get the latest version here.

Tuesday, October 16, 2007

Goals and Roadmap

I have some simple goals for this project.
  • Cross-platform
  • Open source
  • Very well documented
  • Very clear, direct, non-obfuscated, and well documented source code (specifically the video decoding portion)
  • More stable than existing decoders
  • Capable of decoding all types of audio and video that existing decoders can, plus more
  • Highest decoding quality possible
The program is written in Java because it helps meet many of these goals.

Unfortunately, the goals to make the source code as clear as possible, and highest decoding quality, have the side effect of making the decoder rather slow. Right now it decodes between 0.5-4 frames per second on my 2.8Ghz machine. The only way I plan on improving the speed is by using a disgustingly obfuscated IDCT. Since that is by far the slowest part of the decoder, it could help a lot.

The first version will simply be a command-line tool. It will decode video into a series of images, and the audio into a wav file. It will handle standard STR files, plus a few special formats: Final Fantasy VII, Final Fantasy VIII (delayed to 2nd version), and Serial Experiments Lain.

The next version I plan to include raw CD reading (for Windows), fix bugs, and maybe add some more special game handling. I think I also want to add raw file copying off CDs.

Following that, I hope to add a GUI to the program. I'm thinking of duplicating much of PsxMC's interface.

I'm not sure what to do about encoding the movies into another movie format. Trying to use Video for Windows in Java would be a pain in the butt (read JNI), and it also wouldn't be cross platform. My current thought is to do what jMencode does: provide a GUI for open-source encoding programs. It appears mencoder can encode using the computer's Video for Windows codecs. But I know how much everyone likes, and is familiar with how Video for Windows works. So currently I don't have a clear plan of what to do.

Want to help? Come up with a GUI, an encoding method, or raw CD reading for Linux/Mac!


  1. Come to #lain and talk to us.

  2. Sounds interesting, how about uploading the current source to some public repository?

  3. try looking at efficient IDCTs in C, they might be portable

    libjpeg's jidctint.c is okay, mpeg2dec and ffmpeg have very good ones but are a little hard to read.

    it's easily possible to do an 8-bit idct with no more than an 8-element 1d idct with no control flow, and then a loop over that to extend it to 2d.

    also check in