[FFmpeg-devel] MOD support for FFmpeg (My GSoC 2010 task starts tomorrow)

Peter Ross pross
Sat May 29 10:34:03 CEST 2010

On Fri, May 28, 2010 at 01:16:00PM +0200, Sebastian Vater wrote:
> Peter Ross a ?crit :
> > Hi,
> >
> >   
> > Nb: the most recent formats are much more advanced than this. Renoise
> > for example, is basically a ZIP file, containing an XML description of the
> > module patterns, and FLAC or MP3 files for samples.
> >   
> I guess OGG Vorbis for samples is valid, too. ;)


> > [..]
> >
> >   
> > I toyed with ProTracker playback in FFmpeg last year, but misplaced the code
> > and gave up. My approach was a hybrid between the ones Sebastian listed, namely:
> >
> > * treat a module as an AVMEDIA_TYPE_AUDIO stream containing CODEC_TYPE_PATTERN.
> >
> > * add data structure(s) to AVCodecContext that describe the contents of a
> > sound pattern/module file. The structure must support concepts likes Patterns,
> > Notes, and Special Commands, etc. (TuComposer will have this already.)
> >   
> Yes, I also want to start with porting the heading the header files of
> TuComposer to FFmpeg, since they're all public, they should be reviewed
> carefully.
> Once that is set in stone, actual port of TuComposer can be started.
> > * write demuxers for various module formats. The demuxer would read the file
> > and converts it into the AVCodecContext pattern data structure.
> >
> > * write a libavcodec decoder called 'Pattern decoder', that takes CODEC_TYPE_PATTERN
> > as input. The decoder will process the AVCodecContext structure and outputs audio
> > samples (SAMPLE_FMT_xxx). Esentially this codec would invoke the TuComposer
> > functionality.
> >
> > * write muxers. thus allowing conversion between alike-module formats.
> >   
> How far did you advance by your approach? And what issues you
> encountered? Just to be aware of them, if they appear with our final
> approach, too.

I got as far as writing a ProTracker demuxer and muxer, and writing a Pattern
decoder that printed the Patterns to av_log().

Issues with this approach was

* high coupling between libavcodec and libavformat. As the pattern data structures
  'evolved', I then had to sync the muxer, demuxer and pattern decoder across
  lavformat and lavcodec.

* I had the demuxer outputting packets containing the order/pattern number.
  This worked okay for ProTracker, may not for all module formats.

* The ProTracker format has a very simple 'samples library' scheme using
  PCM samples. The pattern decoder was incomplete, so I didnt bother to use
  samples. Need to figure out how to handle compressed samples
  (and should these be decoded at init() time, or as-needed).

> >> Its also a long standing feature request to make encode/decode_audio() work
> >> with AVFrame or a similar structure instead of int16_t*
> >>     
> >
> > While a good idea, IMHO this is outside the scope of his GSoC project...
> >   
> Would somebody else then like to do this as a parallel work?

I will put my hand up if noone else does.

-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100529/ed97d1fb/attachment.pgp>

More information about the ffmpeg-devel mailing list