[MPlayer-dev-eng] NUT, what's left

Oded Shimon ods15 at ods15.dyndns.org
Sat Sep 17 08:09:15 CEST 2005


Well, as most of you probably know I've been working on my own 
implementation for NUT for the last few weeks.

Well, it umm, works, but it's obviously not as good as it can be.
First of all, I'd like to address what's left regarding the spec, when you 
guys finally friggin finalize the spec, I can make a release.

1. backwards pointers in syncpoints
2. DTS method (MN rule or MTS?)
3. info packets... how should they be used at all
4. subtitles, i want a more strict definition for them.. (they require info 
   packet?)
5. what should max_index_distance be, Rich says 32k is too small and should 
   be 512k.
6. possibly remove the "GPL" code in there as that seems to scare some very 
   weird people (or just make it public domain).
7. Zero byte frames in the end.
8. Anything else?

Now, some happy news regarding my implementation:

1. It actually muxes! Given valid input, it creates a valid NUT file.
2. It actually demuxes! Given a valid NUT file, it gives perfect frames.
3. It actually creates NUT files! The nutmerge util takes an AVI and 
   creates a real NUT file.
4. It has less overhead than mkv in every test I gave it! Half the overhead 
   really.
5. It actually plays! With demuxt_nut.c, you can use libnut in MPlayer, 
   quite flawlessly too.
6. It actually seeks! I can actually seek back and forth in the file with 
   MPlayer.

However, it sucks in quite a few places. In order of importance:

1. The "nutmerge" util is very very bad, it generates invalid nut files.
   It doesn't consider B frames at all, and it doesn't work with PCM audio.
   Obviously, it only supports AVI...
2. The write_frame_reorder wrapper which reorders frames to conform to dts 
   rule is extremely wasteful, memcpy's and mallocing every chunk it gets.
3. It seeks, but in a very braindead way, it just uses the index of the 
   first stream disregarding all others.
4. There's absoloutely zero error recovery, you can feed the demuxer 
   /dev/urandom and it wouldn't know!
5. There's still no info packets stuff in the demuxer.
6. The muxer uses a single constant frame code table...
7. The API probably sucks, as I've never dealed with such stuff before...
8. demux_nut.c for MPlayer is quirky and hackish...
9. FIXME's, TODO's and ###'s all over the place. :)

- ods15




More information about the MPlayer-dev-eng mailing list