efl/legacy/emotion/src/lib/Emotion.h

530 lines
18 KiB
C
Raw Normal View History

#ifndef EMOTION_H
#define EMOTION_H
#include <Evas.h>
2006-09-06 00:17:49 -07:00
#ifdef EAPI
# undef EAPI
2006-09-06 00:17:49 -07:00
#endif
#ifdef _WIN32
# ifdef EFL_EMOTION_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif /* ! DLL_EXPORT */
2006-09-06 00:17:49 -07:00
# else
# define EAPI __declspec(dllimport)
# endif /* ! EFL_EMOTION_BUILD */
2006-09-06 00:17:49 -07:00
#else
# ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else
# define EAPI
# endif
# else
# define EAPI
# endif
#endif /* ! _WIN32 */
/**
* @file Emotion.h
* @brief The file that provides Emotion the API, with functions available for
* play, seek, change volume, etc.
*/
enum _Emotion_Module
{
EMOTION_MODULE_XINE,
EMOTION_MODULE_GSTREAMER
};
enum _Emotion_Event
{
EMOTION_EVENT_MENU1, // Escape Menu
EMOTION_EVENT_MENU2, // Title Menu
EMOTION_EVENT_MENU3, // Root Menu
EMOTION_EVENT_MENU4, // Subpicture Menu
EMOTION_EVENT_MENU5, // Audio Menu
EMOTION_EVENT_MENU6, // Angle Menu
EMOTION_EVENT_MENU7, // Part Menu
EMOTION_EVENT_UP,
EMOTION_EVENT_DOWN,
EMOTION_EVENT_LEFT,
EMOTION_EVENT_RIGHT,
EMOTION_EVENT_SELECT,
EMOTION_EVENT_NEXT,
EMOTION_EVENT_PREV,
EMOTION_EVENT_ANGLE_NEXT,
EMOTION_EVENT_ANGLE_PREV,
EMOTION_EVENT_FORCE,
EMOTION_EVENT_0,
EMOTION_EVENT_1,
EMOTION_EVENT_2,
EMOTION_EVENT_3,
EMOTION_EVENT_4,
EMOTION_EVENT_5,
EMOTION_EVENT_6,
EMOTION_EVENT_7,
EMOTION_EVENT_8,
EMOTION_EVENT_9,
EMOTION_EVENT_10
};
enum _Emotion_Meta_Info
{
EMOTION_META_INFO_TRACK_TITLE,
EMOTION_META_INFO_TRACK_ARTIST,
EMOTION_META_INFO_TRACK_ALBUM,
EMOTION_META_INFO_TRACK_YEAR,
EMOTION_META_INFO_TRACK_GENRE,
EMOTION_META_INFO_TRACK_COMMENT,
EMOTION_META_INFO_TRACK_DISC_ID,
EMOTION_META_INFO_TRACK_COUNT
};
enum _Emotion_Vis
{
EMOTION_VIS_NONE,
EMOTION_VIS_GOOM,
EMOTION_VIS_LIBVISUAL_BUMPSCOPE,
EMOTION_VIS_LIBVISUAL_CORONA,
EMOTION_VIS_LIBVISUAL_DANCING_PARTICLES,
EMOTION_VIS_LIBVISUAL_GDKPIXBUF,
EMOTION_VIS_LIBVISUAL_G_FORCE,
EMOTION_VIS_LIBVISUAL_GOOM,
EMOTION_VIS_LIBVISUAL_INFINITE,
EMOTION_VIS_LIBVISUAL_JAKDAW,
EMOTION_VIS_LIBVISUAL_JESS,
EMOTION_VIS_LIBVISUAL_LV_ANALYSER,
EMOTION_VIS_LIBVISUAL_LV_FLOWER,
EMOTION_VIS_LIBVISUAL_LV_GLTEST,
EMOTION_VIS_LIBVISUAL_LV_SCOPE,
EMOTION_VIS_LIBVISUAL_MADSPIN,
EMOTION_VIS_LIBVISUAL_NEBULUS,
EMOTION_VIS_LIBVISUAL_OINKSIE,
EMOTION_VIS_LIBVISUAL_PLASMA,
EMOTION_VIS_LAST /* sentinel */
};
typedef enum
{
EMOTION_WAKEUP,
EMOTION_SLEEP,
EMOTION_DEEP_SLEEP,
EMOTION_HIBERNATE
} Emotion_Suspend;
typedef enum _Emotion_Module Emotion_Module;
typedef enum _Emotion_Event Emotion_Event;
typedef enum _Emotion_Meta_Info Emotion_Meta_Info;
typedef enum _Emotion_Vis Emotion_Vis;
#define EMOTION_CHANNEL_AUTO -1
#define EMOTION_CHANNEL_DEFAULT 0
2005-09-02 18:38:45 -07:00
#ifdef __cplusplus
extern "C" {
#endif
/* api calls available */
/**
* @brief How to create, initialize, manipulate and connect to signals of an
* Emotion object.
* @defgroup Emotion_API API available for manipulating Emotion object.
*
* @{
*
* @li Add the description of modules here.
* @li Basic emotion example
* @li Signals available
*/
/**
* @defgroup Emotion_Init Creation and initialization functions
*/
/**
* @defgroup Emotion_Audio Audio control functions
*/
/**
* @defgroup Emotion_Video Video control functions
*/
/**
* @brief Add an emotion object to the canvas.
*
* @param evas The canvas where the object will be added to.
* @return The emotion object just created.
*
* This function creates an emotion object and adds it to the specified @p evas.
* The returned object can be manipulated as any other Evas object, using the
* default object manipulation functions - evas_object_*.
*
* After creating the object with this function, it's still necessary to
* initialize it with emotion_object_init(), and if an audio file is going to be
* played with this object instead of a video, use
* emotion_object_video_mute_set().
*
* The next step is to open the desired file with emotion_object_file_set(), and
* start playing it with emotion_object_play_set().
*
* @see emotion_object_init()
* @see emotion_object_video_mute_set()
* @see emotion_object_file_set()
* @see emotion_object_play_set()
*
* @ingroup Emotion_Init
*/
2006-09-06 00:17:49 -07:00
EAPI Evas_Object *emotion_object_add (Evas *evas);
/**
* @brief Set the specified option for the current module.
*
* @param obj The emotion object which the option is being set to.
* @param opt The option that is being set. Currently supported optiosn: "video"
* and "audio".
* @param val The value of the option. Currently only supports "off" (?!?!?!)
*
* This function allows one to mute the video or audio of the emotion object.
*
* @note Please don't use this function, consider using
* emotion_object_audio_mute_set() and emotion_object_video_mute_set() instead.
*
* @see emotion_object_audio_mute_set()
* @see emotion_object_video_mute_set()
*
* @ingroup Emotion_Audio
* @ingroup Emotion_Video
*/
EAPI void emotion_object_module_option_set (Evas_Object *obj, const char *opt, const char *val);
/**
* @brief Initializes an emotion object with the specified module.
*
* @param obj The emotion object to be initialized.
* @param module_filename The name of the module to be used (gstreamer or xine).
* @return @c EINA_TRUE if the specified module was successfully initialized for
* this object, @c EINA_FALSE otherwise.
*
* This function is required after creating the emotion object, in order to
* specify which module will be used with this object. Different objects can
* use different modules to play a media file. The current supported modules are
* @b gstreamer and @b xine.
*
* To use any of them, you need to make sure that support for them was compiled
* correctly.
*
* @note It's possible to disable the build of a module with
* --disable-module_name.
*
* @see emotion_object_add()
* @see emotion_object_file_set()
*
* @ingroup Emotion_Init
*/
EAPI Eina_Bool emotion_object_init (Evas_Object *obj, const char *module_filename);
/**
* @brief Set the file to be played in the Emotion object.
*
* @param obj The emotion object where the file is being loaded.
* @param filename Path to the file to be loaded. It can be absolute or relative
* path.
* @return EINA_TRUE if the new file could be loaded successfully, and
* EINA_FALSE if the file could not be loaded. This happens when the filename is
* could not be found, when the module couldn't open the file, when no module is
* initialized in this object, or when the @p filename is the same as the
* one previously set.
*
* This function sets the file to be used with this emotion object. If the
* object already has another file set, this file will be unset and unloaded,
* and the new file will be loaded to this emotion object. The seek position
* will be set to 0, and the emotion object will be paused, instead of playing.
*
* If there was already a filename set, and it's the same as the one being set
* now, this function does nothing and returns EINA_FALSE.
*
* Use @c NULL as argument to @p filename if you want to unload the current file
* but don't want to load anything else.
*
* @see emotion_object_init()
* @see emotion_object_play_set()
* @see emotion_object_file_get()
*
* @ingroup Emotion_Init
*/
EAPI Eina_Bool emotion_object_file_set (Evas_Object *obj, const char *filename);
/**
* @brief Get the filename of the file associated with the emotion object.
*
* @param obj The emotion object from which the filename will be retrieved.
* @return The path to the file loaded into this emotion object.
*
* This function returns the path of the file loaded in this emotion object. If
* no object is loaded, it will return @c NULL.
*
* @note Don't free or change the string returned by this function in any way.
* If you want to unset it, use @c emotion_object_file_set(obj, NULL).
*
* @see emotion_object_file_set()
*
* @ingroup Emotion_Init
*/
2010-03-31 18:33:56 -07:00
EAPI const char *emotion_object_file_get (const Evas_Object *obj);
/**
* @defgroup Emotion_Play Play control functions
*
* @{
*
* @brief Set play/pause state of the media file.
*
* @param obj The emotion object whose state will be changed.
* @param play EINA_TRUE to play, EINA_FALSE to pause.
*
* This functions sets the currently playing status of the video. Using this
* function to play or pause the video doesn't alter it's current position.
*/
EAPI void emotion_object_play_set (Evas_Object *obj, Eina_Bool play);
/**
* @brief Get play/pause state of the media file.
*
* @param obj The emotion object from which the state will be retrieved.
* @return EINA_TRUE if playing. EINA_FALSE if not playing.
*/
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_play_get (const Evas_Object *obj);
/**
* @brief Set the position in the media file.
*
* @param obj The emotion object whose position will be changed.
* @param sec The position(in seconds) to which the media file will be set.
*
* This functions sets the current position of the media file to @p sec, this
* only works on seekable streams. Setting the position doesn't change the
* playing state of the media file.
*
* @see emotion_object_seekable_get
*/
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_position_set (Evas_Object *obj, double sec);
/**
* @brief Get the position in the media file.
*
* @param obj The emotion object from which the position will be retrieved.
* @return The position of the media file.
*
* The position is returned as the number of seconds since the beggining of the
* media file.
*/
2010-03-31 18:33:56 -07:00
EAPI double emotion_object_position_get (const Evas_Object *obj);
/**
* @brief Get whether the media file is seekable.
*
* @param obj The emotion object from which the seekable status will be
* retrieved.
* @return EINA_TRUE if the media file is seekable, EINA_FALSE otherwise.
*/
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_seekable_get (const Evas_Object *obj);
/**
* @brief Get the length of play for the media file.
*
* @param obj The emotion object from which the length will be retrieved.
* @return The length of the media file in seconds.
*
* This function returns the length of the media file in seconds.
*
* @warning This will return 0 if called before the "length_change" signal has,
* been emitted.
*/
2010-03-31 18:33:56 -07:00
EAPI double emotion_object_play_length_get (const Evas_Object *obj);
/**
* @brief Gets the native aspect ratio of the media file.
*
* @param obj The emotion object from which the ratio will be retrieved.
* @return The aspect ration of the video.
*
* This function returns the aspect ratio of the video file being played. The
* aspect is width divided by height.
*
* @warning For audio files this function returns 0.
*/
EAPI double emotion_object_ratio_get (const Evas_Object *obj);
/**
* @brief Set the play speed of the media file.
*
* @param obj The emotion object whose speed will be set.
* @param speed The speed to be set in the range [0,infinity)
*
* This function sets the speed with which the media file will be played. 1.0
* represents the normal speed, 2 double speed, 0.5 half speed and so on.
*
* @warning The only backend that implements this is the experimental VLC
* backend.
*/
EAPI void emotion_object_play_speed_set (Evas_Object *obj, double speed);
/**
* @brief Get the play speed of the media file.
*
* @param obj The emotion object from which the filename will be retrieved.
* @return The current speed of the media file.
*
* @see emotion_object_play_speed_set
*/
EAPI double emotion_object_play_speed_get (const Evas_Object *obj);
/**
* @brief Get how much of the file has been played.
*
* @param obj The emotion object from which the filename will be retrieved.
* @return The progress of the media file.
*
* @warning Don't change of free the returned string.
* @warning gstreamer xine backends don't implement this(will return NULL).
*/
EAPI const char *emotion_object_progress_info_get (const Evas_Object *obj);
/**
* @brief Get how much of the file has been played.
*
* @param obj The emotion object from which the filename will be retrieved
* @return The progress of the media file.
*
* This function gets the progress in playing the file, the return value is in
* the [0, 1] range.
*
* @warning gstreamer xine backends don't implement this(will return 0).
*/
EAPI double emotion_object_progress_status_get (const Evas_Object *obj);
/**
* @}
*/
EAPI Eina_Bool emotion_object_video_handled_get (const Evas_Object *obj);
EAPI Eina_Bool emotion_object_audio_handled_get (const Evas_Object *obj);
2010-03-31 18:33:56 -07:00
EAPI void emotion_object_size_get (const Evas_Object *obj, int *iw, int *ih);
EAPI void emotion_object_smooth_scale_set (Evas_Object *obj, Eina_Bool smooth);
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_smooth_scale_get (const Evas_Object *obj);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_event_simple_send (Evas_Object *obj, Emotion_Event ev);
/**
* @brief Set the audio volume.
*
* @param obj The object where the volume is being set.
* @param vol The new volume parameter. Range is from 0.0 to 1.0.
*
* Sets the audio volume of the stream being played. This has nothing to do with
* the system volume. This volume will be multiplied by the system volume. e.g.:
* if the current volume level is 0.5, and the system volume is 50%, it will be
* 0.5 * 0.5 = 0.25.
*
* The default value depends on the module used. This value doesn't get changed
* when another file is loaded.
*
* @see emotion_object_audio_volume_get()
*
* @ingroup Emotion_Audio
*/
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_audio_volume_set (Evas_Object *obj, double vol);
/**
* @brief Get the audio volume.
*
* @param obj The object from which we are retrieving the volume.
* @return The current audio volume level for this object.
*
* Get the current value for the audio volume level. Range is from 0.0 to 1.0.
* This volume is set with emotion_object_audio_volume_set().
*
* @see emotion_object_audio_volume_set()
*
* @ingroup Emotion_Audio
*/
2010-03-31 18:33:56 -07:00
EAPI double emotion_object_audio_volume_get (const Evas_Object *obj);
/**
* @brief Set the mute audio option for this object.
*
* @param obj The object which we are setting the mute audio option.
* @param mute Whether the audio should be muted (@c EINA_TRUE) or not (@c
* EINA_FALSE).
*
* This function sets the mute audio option for this emotion object. The current
* module used for this object can use this to avoid decoding the audio portion
* of the loaded media file.
*
* @see emotion_object_audio_mute_get()
* @see emotion_object_video_mute_set()
*
* @ingroup Emotion_Audio
*/
EAPI void emotion_object_audio_mute_set (Evas_Object *obj, Eina_Bool mute);
/**
* @brief Get the mute audio option of this object.
*
* @param obj The object which we are retrieving the mute audio option from.
* @return Whether the audio is muted (@c EINA_TRUE) or not (@c EINA_FALSE).
*
* This function return the mute audio option from this emotion object. It can
* be set with emotion_object_audio_mute_set().
*
* @see emotion_object_audio_mute_set()
*
* @ingroup Emotion_Audio
*/
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_audio_mute_get (const Evas_Object *obj);
EAPI int emotion_object_audio_channel_count (const Evas_Object *obj);
EAPI const char *emotion_object_audio_channel_name_get(const Evas_Object *obj, int channel);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_audio_channel_set (Evas_Object *obj, int channel);
2010-03-31 18:33:56 -07:00
EAPI int emotion_object_audio_channel_get (const Evas_Object *obj);
EAPI void emotion_object_video_mute_set (Evas_Object *obj, Eina_Bool mute);
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_video_mute_get (const Evas_Object *obj);
EAPI int emotion_object_video_channel_count (const Evas_Object *obj);
EAPI const char *emotion_object_video_channel_name_get(const Evas_Object *obj, int channel);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_video_channel_set (Evas_Object *obj, int channel);
2010-03-31 18:33:56 -07:00
EAPI int emotion_object_video_channel_get (const Evas_Object *obj);
EAPI void emotion_object_spu_mute_set (Evas_Object *obj, Eina_Bool mute);
2010-03-31 18:33:56 -07:00
EAPI Eina_Bool emotion_object_spu_mute_get (const Evas_Object *obj);
EAPI int emotion_object_spu_channel_count (const Evas_Object *obj);
EAPI const char *emotion_object_spu_channel_name_get (const Evas_Object *obj, int channel);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_spu_channel_set (Evas_Object *obj, int channel);
2010-03-31 18:33:56 -07:00
EAPI int emotion_object_spu_channel_get (const Evas_Object *obj);
EAPI int emotion_object_chapter_count (const Evas_Object *obj);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_chapter_set (Evas_Object *obj, int chapter);
2010-03-31 18:33:56 -07:00
EAPI int emotion_object_chapter_get (const Evas_Object *obj);
EAPI const char *emotion_object_chapter_name_get (const Evas_Object *obj, int chapter);
2006-09-06 00:17:49 -07:00
EAPI void emotion_object_eject (Evas_Object *obj);
2010-03-31 18:33:56 -07:00
EAPI const char *emotion_object_title_get (const Evas_Object *obj);
EAPI const char *emotion_object_ref_file_get (const Evas_Object *obj);
EAPI int emotion_object_ref_num_get (const Evas_Object *obj);
EAPI int emotion_object_spu_button_count_get (const Evas_Object *obj);
EAPI int emotion_object_spu_button_get (const Evas_Object *obj);
EAPI const char *emotion_object_meta_info_get (const Evas_Object *obj, Emotion_Meta_Info meta);
EAPI void emotion_object_vis_set (Evas_Object *obj, Emotion_Vis visualization);
2010-03-31 18:33:56 -07:00
EAPI Emotion_Vis emotion_object_vis_get (const Evas_Object *obj);
EAPI Eina_Bool emotion_object_vis_supported (const Evas_Object *obj, Emotion_Vis visualization);
EAPI void emotion_object_last_position_load (Evas_Object *obj);
EAPI void emotion_object_last_position_save (Evas_Object *obj);
EAPI void emotion_object_suspend_set (Evas_Object *obj, Emotion_Suspend state);
EAPI Emotion_Suspend emotion_object_suspend_get (Evas_Object *obj);
EAPI Eina_Bool emotion_object_extension_can_play_get(const Evas_Object *obj, const char *file);
EAPI Eina_Bool emotion_object_extension_can_play_fast_get(const Evas_Object *obj, const char *file);
EAPI Eina_Bool emotion_object_extension_may_play_fast_get(const char *file);
EAPI Eina_Bool emotion_object_extension_may_play_get(const char *file);
/**
* @}
*/
2005-09-02 18:38:45 -07:00
#ifdef __cplusplus
}
#endif
#endif