On 08/07/2010 09:44 PM, Sebastian Vater wrote: [...]
Hi I have excellent news! libavsequencer now flawlessly integrates into FFmpeg, just check out my latest git. Please do a git pull --rebase, Stefano had problems without using it. Here are the order.[ch] part of the BSS to review. This version compiles perfectly.
diff --git a/libavsequencer/order.h b/libavsequencer/order.h new file mode 100644 index 0000000..70bcf0b --- /dev/null +++ b/libavsequencer/order.h @@ -0,0 +1,193 @@
[...]
+typedef struct AVSequencerOrderData { + /** + * information on struct for av_log + * - set by avseq_alloc_context + */ + const AVClass *av_class; + + /** Metadata information: Original order entry file name, order + * entry name, artist and comment. */ + AVMetadata *metadata;
+ /** AVSequencerTrack pointer to track which should be played. */ + AVSequencerTrack *track;
If there is one and only one AVSequencerTrack per AVSequencerOrderData, why not having it directly as part of the struct, i.e.:
/** AVSequencerTrack pointer to track which should be played. */ AVSequencerTrack track; ?
+ /** Next order list data pointer if seeking forward one frame. */ + struct AVSequencerOrderData *next_pos; + + /** Previous order list data pointer if seeking backward one + frame. */ + struct AVSequencerOrderData *prev_pos; + + /** Number of row to jump to if forward seeking one frame. */ + uint16_t next_row; + + /** Number of row to jump to if backward seeking one frame. */ + uint16_t prev_row; + + /** Beginning row for this track. If this is a track synchronization + point, the high byte is interpreted as the first track number + to be synchronized with and the low byte as the second track + number or for all channels when all 4 tracks are 0. */ + uint16_t first_row; + + /** Last row for this track. If this is a track synchronization + point, the high byte is interpreted as the third track number + to be synchronized with and the low byte as the fourth track + number or for all channels when all 4 tracks are 0. + If last row is set to 65535 in non synchronization mode, + the last row is always taken from AVSequencerTrack. */ + uint16_t last_row;
+ /** Order list data playback flags. Some sequencers feature + special end markers or even different playback routes for + different playback modules (one-shot and repeat mode + playback), mark synchronization points or temporary + change volume), which has to be taken care specially + in the internal playback engine. */ + uint8_t flags;
enum...
+ /** Relative note transpose for full track. Allows playing several + tracks some half-tones up/down. */ + int8_t transpose;
Comment unclear. Is this a flag? What does it means if transpose == -23?
+ /** Instrument transpose. All instruments will be relatively + mapped to this if this is non-zero. */ + int16_t instr_transpose;
Why an int16_t for 0/1?
+ /** Tempo change or zero to skip tempo change. A tempo value of + zero would be zero, since that would mean literally execute + unlimited rows and tracks in just one tick. */ + uint16_t tempo;
+ /** Played nesting level (GoSub command maximum nesting depth). */ + uint16_t played; + + /** Track volume (this overrides settings in AVSequencerTrack). + To enable this, the flag AVSEQ_ORDER_DATA_FLAG_SET_VOLUME + must be set in flags. This allows have a basic default track + volume by still allowing to override the track volume in case + the track is used multiple times, e.g. for creating echoes. */ + uint8_t volume; + + /** Track sub-volume. This is basically track volume + divided by 256, but the sub-volume doesn't account + into actual mixer output (this overrides AVSequencerTrack). */ + uint8_t sub_volume; +} AVSequencerOrderData; + +/** AVSequencerOrderList->flags bitfield. */ +enum AVSequencerOrderListFlags {
+ AVSEQ_ORDER_LIST_FLAG_CHANNEL_SURROUND = 0x01, ///< Initial channel surround instead of stereo panning + AVSEQ_ORDER_LIST_FLAG_TRACK_SURROUND = 0x02, ///< Initial track surround instead of stereo panning + AVSEQ_ORDER_LIST_FLAG_MUTED = 0x04, ///< Initial muted channel +};
Did you mean "initially"?
+/** + * Song order list structure, This structure is actually for one channel + * and therefore actually pointed as an array with size of number of + * host channels. + * 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 AVSequencerOrderList { + /** + * information on struct for av_log + * - set by avseq_alloc_context + */ + const AVClass *av_class; + + /** Metadata information: Original order list file name, order + * list name, artist and comment. */ + AVMetadata *metadata; + + /** Array (of size orders) of pointers containing all order list + data used by this channel. */ + AVSequencerOrderData **order_data; + + /** Number of order list data used for this channel. */ + uint16_t orders; + + /** Number of order list data entries to use for this channel. */ + uint16_t length; + + /** Repeat start order list data number for this channel. */ + uint16_t rep_start; + + /** Volume level for this channel (defaults to 255). */ + uint8_t volume; + + /** Sub-volume level for this channel. This is basically channel + volume divided by 256, but the sub-volume doesn't account + into actual mixer output (defaults 0). */ + uint8_t sub_volume; + + /** Stereo track panning level for this channel (defaults to + -128 = central stereo track panning). */ + int8_t track_panning; + + /** Stereo track sub-panning level for this channel. This is + basically track panning divided by 256, but the sub-panning + doesn't account into actual mixer output (defaults 0). */ + uint8_t track_sub_panning; + + /** Stereo panning level for this channel (defaults to + -128 = central stereo panning). */ + int8_t channel_panning; + + /** Stereo sub-panning level for this channel. This is + basically channel panning divided by 256, but the sub-panning + doesn't account into actual mixer output (defaults 0). */ + uint8_t channel_sub_panning;
+ /** Order list playback flags. Some sequencers feature + surround panning or allow initial muting. which has to + be taken care specially in the internal playback engine. + Also sequencers differ in how they handle slides. */ + uint8_t flags;
enum....
+ +#endif /* AVSEQUENCER_ORDER_H */
_______________________________________________ FFmpeg-soc mailing list FFmpeg-soc@mplayerhq.hu https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc