On 07/07/2010 10:46 PM, Sebastian Vater wrote:
-- Best regards, :-) Basty/CDGS (-:


module.h.patch

/*
 * AVSequencer music module management
 * Copyright (c) 2010 Sebastian Vater <[email protected]>
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef AVSEQUENCER_MODULE_H
#define AVSEQUENCER_MODULE_H

#include "libavformat/avformat.h"
#include "libavsequencer/avsequencer.h"
#include "libavsequencer/instr.h"
#include "libavsequencer/player.h"

/**
 * 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.
 */
typedef struct AVSequencerModule {
    /** Metadata information: Original module file name, module name,
     *  module message, artist, genre, album, begin and finish date of
     * composition and comment.  */
    AVMetadata *metadata;

    /** AVSequencerPlayerChannel pointer to virtual channel data.  */
    AVSequencerPlayerChannel *channel_data;

Is there just a virtual channel data per file? And BTW, the "Player" part of the field bugs me. Does it really belongs to the BSS?

    /** Array of pointers containing every sub-song for this
       module.  */

"Array (of size songs) of pointers containing every sub-song for this module.", same for the others.

    AVSequencerSong **song_list;

    /** Array of pointers containing every instrument for this
       module.  */
    AVSequencerInstrument **instrument_list;

    /** Array of pointers containing every evelope for this
       module.  */
    AVSequencerEnvelope **envelope_list;


    /** Array of pointers containing every keyboard definitionb list

typo

       for this module.  */
    AVSequencerKeyboard **keyboard_list;

    /** Array of pointers containing every arpeggio envelope
       definition list for this module.  */
    AVSequencerArpeggio **arpeggio_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;

Is this ever written in the files or is it calculated by the player? If the later, it does not belong to the BSS.

    /** Number of sub-songs attached to this module.  */
    uint16_t songs;

Cosmetics: I prefer, for readability, to move this closer to AVSequencerSong **song_list. Same for the following.

    /** Number of instruments attached to this module.  */
    uint16_t instruments;

    /** Number of envelopes attached to this module.  */
    uint16_t envelopes;

    /** Number of keyboard definitions attached to this module.  */
    uint16_t keyboards;

    /** Number of arpeggio definitions attached to this module.  */
    uint16_t arpeggios;

    /** 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;

Again, is it read from the file or calculated by the player?

#define AVSEQ_MODULE_CHANNELS   64

    /** Array of pointers containing every unknown data field where
       the last element is indicated by a NULL pointer reference. The
       first 64-bit of the unknown data contains an unique identifier
       for this chunk and the second 64-bit data is actual unsigned
       length of the following raw 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 then won't get lost in that case.  */
    uint8_t **unknown_data;
} AVSequencerModule;

/**
 * Opens and registers module to the AVSequencer.
 *
 * @param avctx the AVSequencerContext to store the opened module into
 * @param module the AVSequencerModule which has been opened to be registered
 * @return >= 0 on success, a negative error code otherwise
 *
 * @note This is part of the new sequencer API which is still under 
construction.
 *       Thus do not use this yet. It may change at any time, do not expect
 *       ABI compatibility yet!
 */
int avseq_module_open(AVSequencerContext *avctx, AVSequencerModule *module);

Hmm, I think I don't really understand what this function do. Suppose you want to write a very short test program to play a MOD file using the libraries. Roughly, what functions it will call, in which order and with which parameters?

-Vitor
_______________________________________________
FFmpeg-soc mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to