[FFmpeg-soc] [soc] libavsequencer [PATCH 01/08] Music module public API header file.
Sebastian Vater
cdgs.basty at googlemail.com
Thu Jul 8 01:52:45 CEST 2010
Stefano Sabatini a écrit :
>> +
>> +/**
>> + * Sequencer module structure.
>> + * New fields can be added to the end with minor version bumps.
>> + * Removal, reordering and changes to existing fields require a major
>> + * version bump.
>> + */
>>
>
> Please describe the general architecture for libavsequencer. It looks
> really complex, and we need to understand how the various components
> iteract. In particular we need to understand how a mod decoder can be
> built and integrated into FFmpeg.
>
avsequencer.h will follow the next days. ;)
This file is just about the actual module. Not the generic architecture
which will all go into lavs/avsequencer.h
> In particular we need to understand which will be the role of the
> player, which will likely be the first component to be reviewed.
>
All what is solely belonging to the player will go into lavs/player.h
lavs/(module/song/order/track/instr/sample/synth).h will be both for
editors and players.
>
>> +typedef struct AVSequencerModule {
>> + /** Metadata information: Original module file name, module name,
>> + * module message, artist, genre, album, begin and finish date of
>> + * composition and comment. */
>> + AVSequencerMetadata *metadata;
>>
>
> AVSequencerMetadata is not shown in your patches, also I wonder, won't
> be this a repetition of libavformat AVMetaData?
>
In most terms, yes, but some data is not available in AVMetadata (like
module file name and start and finish date of composition).
I was looking at it, before I decided to use AVSequencerMetadata or
AVMetadata. But maybe it's really a better solution to add these fields
to AVMetadata directly?
>
>> +
>> + /** AVSequencerPlayerChannel pointer to virtual channel data. */
>> + AVSequencerPlayerChannel *channel_data;
>>
>
> Same I cannot see definition for this.
>
See lavs/player.h (PATCH 08/08), all typedef struct's starting with
AVSequencerPlayer* are in player.h ;-)
>> + /** Integer indexed tree root of sub-songs available in
>> + this module with AVTreeNode->elem being a AVSequencerSong. */
>> + AVTreeNode *song_list;
>> +
>> + /** Integer indexed tree root of instruments available for
>> + the whole module (shared between all sub-songs) with
>> + AVTreeNode->elem being a AVSequencerInstrument. */
>> + AVTreeNode *instrument_list;
>> +
>> + /** Integer indexed tree root of envelopes used by module
>> + with AVTreeNode->elem being a AVSequencerEnvelope.
>> + There can be vibrato, tremolo, panbrello, spenolo,
>> + volume, panning, pitch, envelopes, a resonance filter and
>> + finally the auto vibrato, tremolo and panbrello envelopes. */
>> + AVTreeNode *envelopes_list;
>> +
>> + /** Integer indexed tree root of keyboard definitions
>> + with AVTreeNode->elem being a AVSequencerKeyboard.
>> + A keyboard definition maps an instrument octave/note-pair
>> + to the sample number being played. */
>> + AVTreeNode *keyboard_list;
>> +
>> + /** Integer indexed tree root of arpeggio envelopes
>> + with AVTreeNode->elem being a AVSequencerArpeggioEnvelope.
>> + Arpeggio envelopes allow to fully customize the arpeggio
>> + command by playing the envelope instead of only a
>> + repetive set of 3 different notes. */
>> + AVTreeNode *arp_env_list;
>> +
>> + /** Duration of the module, in AV_TIME_BASE fractional
>> + seconds. This is the total sum of all sub-song durations
>> + this module contains. */
>> + uint64_t duration;
>> +
>> + /** Maximum number of virtual channels, including NNA (New Note
>> + Action) background channels to be allocated and processed by
>> + the mixing engine (defaults to 64). */
>> + uint16_t channels;
>> +#define AVSEQ_MODULE_CHANNELS 64
>> +
>> + /** Compatibility flags for playback. There are rare cases
>> + where effect handling can not be mapped into internal
>> + playback engine and have to be handled specially. For
>> + each module which needs this, this will define new
>> + flags which tag the player to handle it to that special
>> + way. */
>> + int8_t compat_flags;
>> +
>> + /** Module playback flags. */
>> + int8_t flags;
>> +
>> + /** 64-bit integer indexed unique key tree root of unknown data
>> + fields for input file reading with AVTreeNode->elem being
>> + unsigned 8-bit integer data. Some formats are chunk based
>> + and can store information, which can't be handled by some
>> + other, in case of a transition the unknown data is kept as
>> + is. Some programs write editor settings for module in those
>> + chunks, which won't get lost then. The first 8 bytes of this
>> + data is an unsigned 64-bit integer length in bytes of
>> + the unknown data. */
>> + AVTreeNode *unknown_data;
>> +
>> + /** This is just a data field where the user solely
>> + decides, what the usage (if any) will be. */
>> + uint8_t *user_data;
>> +
>> +} AVSequencerModule;
>> +
>>
>
>
>> +/**
>> + * Registers a module to the AVSequencer.
>>
>
> Register, as per the new style.
>
Fixed locally.
>
>> + *
>> + * @param module the AVSequencerModule to be registered
>> + * @return >= 0 on success, error code otherwise
>> + *
>> + * @NOTE This is part of the new sequencer API which is still under construction.
>>
>
> @note (case is meaningful).
>
Oooops...fixed locally!
Please note I can't commit fixes to github (see my eMail) anymore since
git rebase -i! Please see my mail. So for now, fixed only locally.
--
Best regards,
:-) Basty/CDGS (-:
More information about the FFmpeg-soc
mailing list