* \brief Properties class definition
* \see mlt_properties_s
*
- * Copyright (C) 2003-2009 Ushodaya Enterprises Limited
+ * Copyright (C) 2003-2013 Ushodaya Enterprises Limited
* \author Charles Yates <charles.yates@pandora.be>
* \author Dan Dennedy <dan@dennedy.org>
*
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+// For strtod_l
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
#include "mlt_properties.h"
#include "mlt_property.h"
#include "mlt_deque.h"
property_list *list = self->local;
if ( list->locale )
current = strtod_l( id, NULL, list->locale );
+ else
#endif
- else
current = strtod( id, NULL );
}
else
char *mlt_properties_get( mlt_properties self, const char *name )
{
+ char *result = NULL;
mlt_property value = mlt_properties_find( self, name );
- property_list *list = self->local;
- return value == NULL ? NULL : mlt_property_get_string_l( value, list->locale );
+ if ( value )
+ {
+ property_list *list = self->local;
+ result = mlt_property_get_string_l( value, list->locale );
+ }
+ return result;
}
/** Get a property name by index.
int mlt_properties_get_int( mlt_properties self, const char *name )
{
- mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
- double fps = mlt_profile_fps( profile );
- property_list *list = self->local;
+ int result = 0;
mlt_property value = mlt_properties_find( self, name );
- return value == NULL ? 0 : mlt_property_get_int( value, fps, list->locale );
+ if ( value )
+ {
+ mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
+ double fps = mlt_profile_fps( profile );
+ property_list *list = self->local;
+ result = mlt_property_get_int( value, fps, list->locale );
+ }
+ return result;
}
/** Set a property to an integer value.
double mlt_properties_get_double( mlt_properties self, const char *name )
{
- mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
- double fps = mlt_profile_fps( profile );
+ double result = 0;
mlt_property value = mlt_properties_find( self, name );
- property_list *list = self->local;
- return value == NULL ? 0 : mlt_property_get_double( value, fps, list->locale );
+ if ( value )
+ {
+ mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
+ double fps = mlt_profile_fps( profile );
+ property_list *list = self->local;
+ result = mlt_property_get_double( value, fps, list->locale );
+ }
+ return result;
}
/** Set a property to a floating point value.
mlt_position mlt_properties_get_position( mlt_properties self, const char *name )
{
- mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
- double fps = mlt_profile_fps( profile );
- property_list *list = self->local;
+ mlt_position result = 0;
mlt_property value = mlt_properties_find( self, name );
- return value == NULL ? 0 : mlt_property_get_position( value, fps, list->locale );
+ if ( value )
+ {
+ mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
+ double fps = mlt_profile_fps( profile );
+ property_list *list = self->local;
+ result = mlt_property_get_position( value, fps, list->locale );
+ }
+ return result;
}
/** Set a property to a position value.
return NULL;
}
+/** Convert a frame count to a time string.
+ *
+ * Do not free the returned string. It's lifetime is controlled by the property.
+ * \public \memberof mlt_properties_s
+ * \param self a properties list
+ * \param frames the frame count to convert
+ * \param format the time format that you want
+ * \return the time string or NULL if error, e.g. there is no profile
+ */
+
+char *mlt_properties_frames_to_time( mlt_properties self, mlt_position frames, mlt_time_format format )
+{
+ const char *name = "_mlt_properties_time";
+ mlt_properties_set_position( self, name, frames );
+ return mlt_properties_get_time( self, name, format );
+}
+
+/** Convert a time string to a frame count.
+ *
+ * \public \memberof mlt_properties_s
+ * \param self a properties list
+ * \param time the time string to convert
+ * \return a frame count or a negative value if error, e.g. there is no profile
+ */
+
+mlt_position mlt_properties_time_to_frames( mlt_properties self, const char *time )
+{
+ const char *name = "_mlt_properties_time";
+ mlt_properties_set( self, name, time );
+ return mlt_properties_get_position( self, name );
+}
+
+/** Convert a numeric property to a tuple of color components.
+ *
+ * If the property's string is red, green, blue, white, or black, then it
+ * is converted to the corresponding opaque color tuple. Otherwise, the property
+ * is fetched as an integer and then converted.
+ * \public \memberof mlt_properties_s
+ * \param self a properties list
+ * \param name the property to get
+ * \return a color structure
+ */
+
mlt_color mlt_properties_get_color( mlt_properties self, const char* name )
{
mlt_profile profile = mlt_properties_get_data( self, "_profile", NULL );
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to set
- * \param value the color
+ * \param color the color
* \return true if error
*/
return error;
}
-/** Get a string value by name.
+/** Get a string value by name at a frame position.
*
* Do not free the returned string. It's lifetime is controlled by the property
* and this properties object.
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to get
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
* \return the property's string value or NULL if it does not exist
*/
return value == NULL ? NULL : mlt_property_anim_get_string( value, fps, list->locale, position, length );
}
-/** Set a property to a string.
+/** Set a property to a string at a frame position.
*
* The event "property-changed" is fired after the property has been set.
*
* \param self a properties list
* \param name the property to set
* \param value the property's new value
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
* \return true if error
*/
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to get
- * \return The integer value, 0 if not found (which may also be a legitimate value)
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \return the integer value, 0 if not found (which may also be a legitimate value)
*/
int mlt_properties_anim_get_int( mlt_properties self, const char *name, int position, int length )
* \param self a properties list
* \param name the property to set
* \param value the integer
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \param keyframe_type the interpolation method for this keyframe
* \return true if error
*/
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to get
- * \return The real number, 0 if not found (which may also be a legitimate value)
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \return the real number, 0 if not found (which may also be a legitimate value)
*/
double mlt_properties_anim_get_double( mlt_properties self, const char *name, int position, int length )
* \param self a properties list
* \param name the property to set
* \param value the real number
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \param keyframe_type the interpolation method for this keyframe
* \return true if error
*/
return error;
}
+/** Get the animation associated to the name.
+ *
+ * \public \memberof mlt_properties_s
+ * \param self a properties list
+ * \param name the property to get
+ * \return The animation object or NULL if the property has no animation
+ */
+
+mlt_animation mlt_properties_get_animation( mlt_properties self, const char *name )
+{
+ mlt_property value = mlt_properties_find( self, name );
+ return value == NULL ? NULL : mlt_property_get_animation( value );
+}
+
/** Set a property to a rectangle value.
*
* \public \memberof mlt_properties_s
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to get
- * \return The rectangle value, the rectangle fields will be DBL_MIN if not found
+ * \return the rectangle value, the rectangle fields will be DBL_MIN if not found
*/
extern mlt_rect mlt_properties_get_rect( mlt_properties self, const char* name )
* \param self a properties list
* \param name the property to set
* \param value the rectangle
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \param keyframe_type the interpolation method for this keyframe
* \return true if error
*/
return error;
}
-/** Get a rectangle associated to the name.
+/** Get a rectangle associated to the name at a frame position.
*
* \public \memberof mlt_properties_s
* \param self a properties list
* \param name the property to get
- * \return The rectangle value, the rectangle fields will be DBL_MIN if not found
+ * \param position the frame number
+ * \param length the maximum number of frames when interpreting negative keyframe times,
+ * <=0 if you don't care or need that
+ * \return the rectangle value, the rectangle fields will be DBL_MIN if not found
*/
extern mlt_rect mlt_properties_anim_get_rect( mlt_properties self, const char *name, int position, int length )
mlt_rect rect = { DBL_MIN, DBL_MIN, DBL_MIN, DBL_MIN, DBL_MIN };
return value == NULL ? rect : mlt_property_anim_get_rect( value, fps, list->locale, position, length );
}
-
-/** Get the animation associated to the name.
- *
- * \public \memberof mlt_properties_s
- * \param self a properties list
- * \param name the property to get
- * \return The animation object or NULL if the property has no animation
- */
-
-mlt_animation mlt_properties_get_animation( mlt_properties self, const char *name )
-{
- mlt_property value = mlt_properties_find( self, name );
- return value == NULL ? NULL : mlt_property_get_animation( value );
-}