MLT  7.28.0
Public Member Functions | Data Fields | Private Member Functions
mlt_multitrack_s Struct Reference

Multitrack class. More...

#include <mlt_multitrack.h>

Inheritance diagram for mlt_multitrack_s:
mlt_producer_s mlt_service_s mlt_properties_s

Public Member Functions

mlt_position mlt_multitrack_clip (mlt_multitrack self, mlt_whence whence, int index)
 Determine the clip point. More...
 
void mlt_multitrack_close (mlt_multitrack self)
 Close this instance and free its resources. More...
 
int mlt_multitrack_connect (mlt_multitrack self, mlt_producer producer, int track)
 Connect a producer to a given track. More...
 
int mlt_multitrack_count (mlt_multitrack self)
 Get the number of tracks. More...
 
int mlt_multitrack_disconnect (mlt_multitrack self, int track)
 Remove the N-th track. More...
 
mlt_multitrack mlt_multitrack_init ()
 Construct and initialize a new multitrack. More...
 
int mlt_multitrack_insert (mlt_multitrack self, mlt_producer producer, int track)
 Insert a producer to a given track. More...
 
mlt_producer mlt_multitrack_producer (mlt_multitrack self)
 Get the producer associated to this multitrack. More...
 
mlt_properties mlt_multitrack_properties (mlt_multitrack self)
 Get the properties associated this multitrack. More...
 
void mlt_multitrack_refresh (mlt_multitrack self)
 Initialize position related information. More...
 
mlt_service mlt_multitrack_service (mlt_multitrack self)
 Get the service associated this multitrack. More...
 
mlt_producer mlt_multitrack_track (mlt_multitrack self, int track)
 Get an individual track as a producer. More...
 
- Public Member Functions inherited from mlt_producer_s
int mlt_producer_attach (mlt_producer self, mlt_filter filter)
 Attach a filter. More...
 
int mlt_producer_clear (mlt_producer self)
 Physically reduce the producer (typically a cut) to a 0 length. More...
 
void mlt_producer_close (mlt_producer self)
 Close the producer. More...
 
mlt_producer mlt_producer_cut (mlt_producer self, int in, int out)
 Create a cut of this producer. More...
 
mlt_producer mlt_producer_cut_parent (mlt_producer self)
 Obtain the parent producer. More...
 
int mlt_producer_detach (mlt_producer self, mlt_filter filter)
 Detach a filter. More...
 
mlt_filter mlt_producer_filter (mlt_producer self, int index)
 Retrieve a filter. More...
 
mlt_position mlt_producer_frame (mlt_producer self)
 Get the current position (relative to start of producer). More...
 
char * mlt_producer_frame_time (mlt_producer self, mlt_time_format format)
 Get the current position (relative to start of producer) as a time string. More...
 
int64_t mlt_producer_get_creation_time (mlt_producer self)
 Get the creation time for the producer. More...
 
double mlt_producer_get_fps (mlt_producer self)
 Get the frames per second. More...
 
mlt_position mlt_producer_get_in (mlt_producer self)
 Get the in point. More...
 
mlt_position mlt_producer_get_length (mlt_producer self)
 Get the total, unedited length of the producer. More...
 
char * mlt_producer_get_length_time (mlt_producer self, mlt_time_format format)
 Get the total, unedited length of the producer as a time string. More...
 
mlt_position mlt_producer_get_out (mlt_producer self)
 Get the out point. More...
 
mlt_position mlt_producer_get_playtime (mlt_producer self)
 Get the total play time. More...
 
double mlt_producer_get_speed (mlt_producer self)
 Get the playing speed. More...
 
int mlt_producer_init (mlt_producer self, void *child)
 Initialize a producer service. More...
 
int mlt_producer_is_blank (mlt_producer self)
 Determine if the producer is a blank. More...
 
int mlt_producer_is_cut (mlt_producer self)
 Determine if producer is a cut. More...
 
int mlt_producer_is_mix (mlt_producer self)
 Determine if producer is a mix. More...
 
mlt_producer mlt_producer_new (mlt_profile profile)
 Create and initialize a new producer. More...
 
int mlt_producer_optimise (mlt_producer self)
 Optimise for overlapping cuts from the same clip. More...
 
mlt_position mlt_producer_position (mlt_producer self)
 Get the current position (relative to in point). More...
 
void mlt_producer_prepare_next (mlt_producer self)
 Prepare for next frame. More...
 
int mlt_producer_probe (mlt_producer self)
 Probe the producer to publish metadata properties. More...
 
mlt_properties mlt_producer_properties (mlt_producer self)
 Get the producer properties. More...
 
int mlt_producer_seek (mlt_producer self, mlt_position position)
 Seek to a specified position. More...
 
int mlt_producer_seek_time (mlt_producer self, const char *time)
 Seek to a specified time string. More...
 
mlt_service mlt_producer_service (mlt_producer self)
 Get the parent service object. More...
 
void mlt_producer_set_creation_time (mlt_producer self, int64_t creation_time)
 Set the creation time for the producer. More...
 
int mlt_producer_set_in_and_out (mlt_producer self, mlt_position in, mlt_position out)
 Set the in and out points. More...
 
int mlt_producer_set_speed (mlt_producer self, double speed)
 Set the playing speed. More...
 
- Public Member Functions inherited from mlt_service_s
void mlt_service_apply_filters (mlt_service self, mlt_frame frame, int index)
 Recursively apply attached filters. More...
 
int mlt_service_attach (mlt_service self, mlt_filter filter)
 Attach a filter. More...
 
mlt_cache_item mlt_service_cache_get (mlt_service self, const char *name)
 Get an object from a service's cache. More...
 
int mlt_service_cache_get_size (mlt_service self, const char *name)
 Get the current maximum size of the named cache. More...
 
void mlt_service_cache_put (mlt_service self, const char *name, void *data, int size, mlt_destructor destructor)
 Put an object into a service's cache. More...
 
void mlt_service_cache_set_size (mlt_service self, const char *name, int size)
 Set the number of items to cache for the named cache. More...
 
void mlt_service_close (mlt_service self)
 Destroy a service. More...
 
int mlt_service_connect_producer (mlt_service self, mlt_service producer, int index)
 Connect a producer to the service. More...
 
mlt_service mlt_service_consumer (mlt_service self)
 Obtain the consumer a service is connected to. More...
 
int mlt_service_detach (mlt_service self, mlt_filter filter)
 Detach a filter. More...
 
int mlt_service_disconnect_all_producers (mlt_service self)
 Remove the all the attached producers. More...
 
int mlt_service_disconnect_producer (mlt_service self, int index)
 Remove the N-th producer. More...
 
mlt_filter mlt_service_filter (mlt_service self, int index)
 Retrieve an attached filter. More...
 
int mlt_service_filter_count (mlt_service self)
 Get the number of filters attached. More...
 
int mlt_service_get_frame (mlt_service self, mlt_frame_ptr frame, int index)
 Obtain a frame. More...
 
mlt_service mlt_service_get_producer (mlt_service self)
 Get the first connected producer. More...
 
mlt_service_type mlt_service_identify (mlt_service self)
 Identify the subclass of the service. More...
 
int mlt_service_init (mlt_service self, void *child)
 Initialize a service. More...
 
int mlt_service_insert_producer (mlt_service self, mlt_service producer, int index)
 Insert a producer connected to the service. More...
 
void mlt_service_lock (mlt_service self)
 Acquire a mutual exclusion lock on this service. More...
 
int mlt_service_move_filter (mlt_service self, int from, int to)
 Reorder the attached filters. More...
 
mlt_service mlt_service_producer (mlt_service self)
 Obtain the producer a service is connected to. More...
 
mlt_profile mlt_service_profile (mlt_service self)
 Retrieve the profile. More...
 
mlt_properties mlt_service_properties (mlt_service self)
 Return the properties object. More...
 
void mlt_service_set_profile (mlt_service self, mlt_profile profile)
 Set the profile for a service. More...
 
void mlt_service_unlock (mlt_service self)
 Release a mutual exclusion lock on this service. More...
 
- Public Member Functions inherited from mlt_properties_s
char * mlt_properties_anim_get (mlt_properties self, const char *name, int position, int length)
 Get a string value by name at a frame position. More...
 
mlt_color mlt_properties_anim_get_color (mlt_properties self, const char *name, int position, int length)
 Get a color associated to the name at a frame position. More...
 
double mlt_properties_anim_get_double (mlt_properties self, const char *name, int position, int length)
 Get a real number associated to the name at a frame position. More...
 
int mlt_properties_anim_get_int (mlt_properties self, const char *name, int position, int length)
 Get an integer associated to the name at a frame position. More...
 
mlt_rect mlt_properties_anim_get_rect (mlt_properties self, const char *name, int position, int length)
 Get a rectangle associated to the name at a frame position. More...
 
int mlt_properties_anim_set (mlt_properties self, const char *name, const char *value, int position, int length)
 Set a property to a string at a frame position. More...
 
int mlt_properties_anim_set_color (mlt_properties self, const char *name, mlt_color value, int position, int length, mlt_keyframe_type keyframe_type)
 Set a property to an integer value by color at a frame position. More...
 
int mlt_properties_anim_set_double (mlt_properties self, const char *name, double value, int position, int length, mlt_keyframe_type keyframe_type)
 Set a property to a real number at a frame position. More...
 
int mlt_properties_anim_set_int (mlt_properties self, const char *name, int value, int position, int length, mlt_keyframe_type keyframe_type)
 Set a property to an integer value at a frame position. More...
 
int mlt_properties_anim_set_rect (mlt_properties self, const char *name, mlt_rect value, int position, int length, mlt_keyframe_type keyframe_type)
 Set a property to a rectangle value at a frame position. More...
 
void mlt_properties_clear (mlt_properties self, const char *name)
 Remove the value for a property. More...
 
void mlt_properties_close (mlt_properties self)
 Close a properties object. More...
 
int mlt_properties_copy (mlt_properties self, mlt_properties that, const char *prefix)
 Copy all serializable properties that match a prefix to another properties object. More...
 
int mlt_properties_count (mlt_properties self)
 Return the number of items in the list. More...
 
void mlt_properties_debug (mlt_properties self, const char *title, FILE *output)
 Output the properties to a file handle. More...
 
int mlt_properties_dec_ref (mlt_properties self)
 Decrement the reference count. More...
 
int mlt_properties_dir_list (mlt_properties self, const char *dirname, const char *pattern, int sort)
 Get the contents of a directory. More...
 
void mlt_properties_dump (mlt_properties self, FILE *output)
 Dump the properties to a file handle. More...
 
int mlt_properties_exists (mlt_properties self, const char *name)
 Check if a property exists. More...
 
char * mlt_properties_frames_to_time (mlt_properties self, mlt_position frames, mlt_time_format format)
 Convert a frame count to a time string. More...
 
int mlt_properties_from_utf8 (mlt_properties properties, const char *name_from, const char *name_to)
 Convert UTF-8 property to the locale-defined encoding. More...
 
char * mlt_properties_get (mlt_properties self, const char *name)
 Get a string value by name. More...
 
mlt_animation mlt_properties_get_animation (mlt_properties self, const char *name)
 Get the animation associated to the name. More...
 
mlt_color mlt_properties_get_color (mlt_properties self, const char *name)
 Convert a numeric property to a tuple of color components. More...
 
void * mlt_properties_get_data (mlt_properties self, const char *name, int *length)
 Get a binary data value associated to the name. More...
 
void * mlt_properties_get_data_at (mlt_properties self, int index, int *size)
 Get a data value by index. More...
 
double mlt_properties_get_double (mlt_properties self, const char *name)
 Get a floating point value associated to the name. More...
 
int mlt_properties_get_int (mlt_properties self, const char *name)
 Get an integer associated to the name. More...
 
int64_t mlt_properties_get_int64 (mlt_properties self, const char *name)
 Get a 64-bit integer associated to the name. More...
 
const char * mlt_properties_get_lcnumeric (mlt_properties self)
 Get the numeric locale for this properties object. More...
 
char * mlt_properties_get_name (mlt_properties self, int index)
 Get a property name by index. More...
 
mlt_position mlt_properties_get_position (mlt_properties self, const char *name)
 Get a position value associated to the name. More...
 
mlt_properties mlt_properties_get_properties (mlt_properties self, const char *name)
 Get a nested properties object by name. More...
 
mlt_properties mlt_properties_get_properties_at (mlt_properties self, int index)
 Get a nested properties object by index. More...
 
mlt_rect mlt_properties_get_rect (mlt_properties self, const char *name)
 Get a rectangle associated to the name. More...
 
char * mlt_properties_get_time (mlt_properties self, const char *name, mlt_time_format format)
 Get a time string associated to the name. More...
 
char * mlt_properties_get_value (mlt_properties self, int index)
 Get a property's string value by index. More...
 
char * mlt_properties_get_value_tf (mlt_properties self, int index, mlt_time_format time_format)
 Get a property's string value by index (with time format). More...
 
int mlt_properties_inc_ref (mlt_properties self)
 Increment the reference count. More...
 
int mlt_properties_inherit (mlt_properties self, mlt_properties that)
 Copy all serializable properties to another properties list. More...
 
int mlt_properties_init (mlt_properties self, void *child)
 Initialize a properties object that was already allocated. More...
 
int mlt_properties_is_anim (mlt_properties self, const char *name)
 Check if a property is animated. More...
 
int mlt_properties_is_sequence (mlt_properties properties)
 Determine if the properties list is really just a sequence or ordered list. More...
 
mlt_properties mlt_properties_load (const char *filename)
 Create a properties object by reading a .properties text file. More...
 
void mlt_properties_lock (mlt_properties self)
 Protect a properties list against concurrent access. More...
 
void mlt_properties_mirror (mlt_properties self, mlt_properties that)
 Set a properties list to be a mirror copy of another. More...
 
mlt_properties mlt_properties_new ()
 Create a properties object. More...
 
int mlt_properties_parse (mlt_properties self, const char *namevalue)
 Set a value by parsing a name=value string. More...
 
mlt_properties mlt_properties_parse_yaml (const char *filename)
 Parse a YAML Tiny file by name. More...
 
int mlt_properties_pass (mlt_properties self, mlt_properties that, const char *prefix)
 Pass all serializable properties that match a prefix to another properties object. More...
 
int mlt_properties_pass_list (mlt_properties self, mlt_properties that, const char *list)
 Copy all properties specified in a comma-separated list to another properties list. More...
 
void mlt_properties_pass_property (mlt_properties self, mlt_properties that, const char *name)
 Copy a property to another properties list. More...
 
int mlt_properties_preset (mlt_properties self, const char *name)
 Set properties from a preset. More...
 
int mlt_properties_ref_count (mlt_properties self)
 Get the reference count. More...
 
int mlt_properties_rename (mlt_properties self, const char *source, const char *dest)
 Rename a property. More...
 
int mlt_properties_save (mlt_properties self, const char *filename)
 Save the properties to a file by name. More...
 
char * mlt_properties_serialise_yaml (mlt_properties self)
 Serialize a properties list as a string of YAML Tiny. More...
 
int mlt_properties_set (mlt_properties self, const char *name, const char *value)
 Set a property to a string. More...
 
int mlt_properties_set_color (mlt_properties self, const char *name, mlt_color color)
 Set a property to an integer value by color. More...
 
int mlt_properties_set_data (mlt_properties self, const char *name, void *value, int length, mlt_destructor destroy, mlt_serialiser serialise)
 Store binary data as a property. More...
 
int mlt_properties_set_double (mlt_properties self, const char *name, double value)
 Set a property to a floating point value. More...
 
int mlt_properties_set_int (mlt_properties self, const char *name, int value)
 Set a property to an integer value. More...
 
int mlt_properties_set_int64 (mlt_properties self, const char *name, int64_t value)
 Set a property to a 64-bit integer value. More...
 
int mlt_properties_set_lcnumeric (mlt_properties self, const char *locale)
 Set the numeric locale used for string/double conversions. More...
 
int mlt_properties_set_or_default (mlt_properties self, const char *name, const char *value, const char *def)
 Set or default a property to a string. More...
 
int mlt_properties_set_position (mlt_properties self, const char *name, mlt_position value)
 Set a property to a position value. More...
 
int mlt_properties_set_properties (mlt_properties self, const char *name, mlt_properties properties)
 Set a property to a nested properties object. More...
 
int mlt_properties_set_rect (mlt_properties self, const char *name, mlt_rect value)
 Set a property to a rectangle value. More...
 
int mlt_properties_set_string (mlt_properties self, const char *name, const char *value)
 Set a property to a string. More...
 
mlt_position mlt_properties_time_to_frames (mlt_properties self, const char *time)
 Convert a time string to a frame count. More...
 
void mlt_properties_unlock (mlt_properties self)
 End protecting a properties list against concurrent access. More...
 

Data Fields

int count
 
mlt_tracklist
 
struct mlt_producer_s parent
 We're extending producer here. More...
 
int size
 
- Data Fields inherited from mlt_producer_s
mlt_destructor close
 the destructor virtual function More...
 
void * close_object
 the object supplied to the close virtual function More...
 
int(* get_frame )(mlt_producer, mlt_frame_ptr, int)
 Get a frame of data (virtual function). More...
 
struct mlt_service_s parent
 A producer is a service. More...
 
int(* seek )(mlt_producer, mlt_position)
 Seek to a specified position (virtual function). More...
 
int(* set_in_and_out )(mlt_producer, mlt_position, mlt_position)
 Set the in and out points. More...
 
- Data Fields inherited from mlt_service_s
mlt_destructor close
 the destructor virtual function More...
 
void * close_object
 the object supplied to the close virtual function More...
 
int(* get_frame )(mlt_service self, mlt_frame_ptr frame, int index)
 Get a frame of data (virtual function). More...
 
- Data Fields inherited from mlt_properties_s
mlt_destructor close
 the destructor virtual function More...
 
void * close_object
 the object supplied to the close virtual function More...
 

Private Member Functions

static int add_unique (mlt_position *array, int size, mlt_position position)
 Add a position to a set. More...
 
static void mlt_multitrack_listener (mlt_producer producer, mlt_multitrack self)
 Listener for producers on the playlist. More...
 
static int position_compare (const void *p1, const void *p2)
 Position comparison function for sorting. More...
 
static int producer_get_frame (mlt_producer parent, mlt_frame_ptr frame, int index)
 Get frame method. More...
 
static mlt_positionresize_set (mlt_position *map, int count, int *size)
 Increase the capacity of a set of mlt_position. More...
 

Detailed Description

Multitrack class.

A multitrack is a parallel container of producers that acts a single producer.

Property:
log_id not currently used, but sets it to "mulitrack"

Member Function Documentation

◆ add_unique()

static int add_unique ( mlt_position array,
int  size,
mlt_position  position 
)
private

Add a position to a set.

Parameters
arrayan array of positions (the set)
sizethe current number of positions in the array (not the capacity of the array)
positionthe position to add
Returns
the new size of the array

◆ mlt_multitrack_clip()

mlt_position mlt_multitrack_clip ( mlt_multitrack  self,
mlt_whence  whence,
int  index 
)

Determine the clip point.

Special case here: a 'producer' has no concept of multiple clips - only the
playlist and multitrack producers have clip functionality. Further to that a
multitrack determines clip information from any connected tracks that happen
to be playlists.

Additionally, it must locate clips in the correct order, for example, consider
the following track arrangement:

playlist1 |0.0     |b0.0      |0.1          |0.1         |0.2           |
playlist2 |b1.0  |1.0           |b1.1     |1.1             |

Note - b clips represent blanks. They are also reported as clip positions.

When extracting clip positions from these playlists, we should get a sequence of:

0.0, 1.0, b0.0, 0.1, b1.1, 1.1, 0.1, 0.2, [out of playlist2], [out of playlist1]
Parameters
selfa multitrack
whencefrom where to extract
indexthe 0-based index of which clip to extract
Returns
the position of clip index relative to whence

◆ mlt_multitrack_close()

void mlt_multitrack_close ( mlt_multitrack  self)

Close this instance and free its resources.

Parameters
selfa multitrack

◆ mlt_multitrack_connect()

int mlt_multitrack_connect ( mlt_multitrack  self,
mlt_producer  producer,
int  track 
)

Connect a producer to a given track.

Note that any producer can be connected here, but see special case treatment of playlist in clip point determination below.

Parameters
selfa multitrack
producerthe producer to connect to the multitrack producer
trackthe 0-based index of the track on which to connect the multitrack
Returns
true on error

◆ mlt_multitrack_count()

int mlt_multitrack_count ( mlt_multitrack  self)

Get the number of tracks.

Parameters
selfa multitrack
Returns
the number of tracks

◆ mlt_multitrack_disconnect()

int mlt_multitrack_disconnect ( mlt_multitrack  self,
int  track 
)

Remove the N-th track.

Parameters
selfa multitrack
trackthe index of the track to remove
Returns
true if there was an error

◆ mlt_multitrack_init()

mlt_multitrack mlt_multitrack_init ( )

Construct and initialize a new multitrack.

Sets the resource property to "<multitrack>".

Returns
a new multitrack

◆ mlt_multitrack_insert()

int mlt_multitrack_insert ( mlt_multitrack  self,
mlt_producer  producer,
int  track 
)

Insert a producer to a given track.

Parameters
selfa multitrack
producerthe producer to connect to the multitrack producer
trackthe 0-based index of the track on which to connect the multitrack
Returns
true on error

◆ mlt_multitrack_listener()

static void mlt_multitrack_listener ( mlt_producer  producer,
mlt_multitrack  self 
)
private

Listener for producers on the playlist.

Parameters
producera producer
selfa multitrack

◆ mlt_multitrack_producer()

mlt_producer mlt_multitrack_producer ( mlt_multitrack  self)

Get the producer associated to this multitrack.

Parameters
selfa multitrack
Returns
the producer object
See also
MLT_MULTITRACK_PRODUCER

◆ mlt_multitrack_properties()

mlt_properties mlt_multitrack_properties ( mlt_multitrack  self)

Get the properties associated this multitrack.

Parameters
selfa multitrack
Returns
the multitrack's property list
See also
MLT_MULTITRACK_PROPERTIES

◆ mlt_multitrack_refresh()

void mlt_multitrack_refresh ( mlt_multitrack  self)

Initialize position related information.

Parameters
selfa multitrack

◆ mlt_multitrack_service()

mlt_service mlt_multitrack_service ( mlt_multitrack  self)

Get the service associated this multitrack.

Parameters
selfa multitrack
Returns
the service object
See also
MLT_MULTITRACK_SERVICE

◆ mlt_multitrack_track()

mlt_producer mlt_multitrack_track ( mlt_multitrack  self,
int  track 
)

Get an individual track as a producer.

Parameters
selfa multitrack
trackthe 0-based index of the producer to get
Returns
the producer or NULL if not valid

◆ position_compare()

static int position_compare ( const void *  p1,
const void *  p2 
)
private

Position comparison function for sorting.

Parameters
p1a position
p2another position
Returns
<0 if p1 is less than p2, 0 if equal, >0 if greater

◆ producer_get_frame()

static int producer_get_frame ( mlt_producer  parent,
mlt_frame_ptr  frame,
int  index 
)
private

Get frame method.

Special case here: The multitrack must be used in a conjunction with a downstream
tractor-type service, ie:

Producer1 \
Producer2 - multitrack - { filters/transitions } - tractor - consumer
Producer3 /

The get_frame of a tractor pulls frames from it's connected service on all tracks and
will terminate as soon as it receives a test card with a last_track property. The
important case here is that the mulitrack does not move to the next frame until all
tracks have been pulled.

Reasoning: In order to seek on a network such as above, the multitrack needs to ensure
that all producers are positioned on the same frame. It uses the 'last track' logic
to determine when to move to the next frame.

Flaw: if a transition is configured to read from a b-track which happens to trigger
the last frame logic (ie: it's configured incorrectly), then things are going to go
out of sync.

See playlist logic too.
Parameters
parentthe producer interface to a mulitrack
[out]framea frame by reference
indexthe 0-based track index
Returns
true if there was an error

◆ resize_set()

static mlt_position * resize_set ( mlt_position map,
int  count,
int *  size 
)
private

Increase the capacity of a set of mlt_position.

Parameters
arrayan array of positions (the set)
countthe current number of elements in the array (not the capacity)
[out]sizethe current capacity of the array
Returns
the new address of the array

Field Documentation

◆ count

int mlt_multitrack_s::count

◆ list

mlt_track* mlt_multitrack_s::list

◆ parent

struct mlt_producer_s mlt_multitrack_s::parent

We're extending producer here.

◆ size

int mlt_multitrack_s::size

The documentation for this struct was generated from the following files: